From 238b4962f0597f9ee98db503924fb2022dd15c85 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 26 Sep 2016 17:14:44 +0200 Subject: [PATCH 001/393] split journaldb commit into two functions: journal_under and mark_canonical --- util/src/journaldb/archivedb.rs | 11 +- util/src/journaldb/earlymergedb.rs | 217 +++++++++++++------------- util/src/journaldb/overlayrecentdb.rs | 157 ++++++++++--------- util/src/journaldb/refcounteddb.rs | 122 +++++++-------- util/src/journaldb/traits.rs | 18 ++- 5 files changed, 277 insertions(+), 248 deletions(-) diff --git a/util/src/journaldb/archivedb.rs b/util/src/journaldb/archivedb.rs index 5f1eb71d43..efedfb766c 100644 --- a/util/src/journaldb/archivedb.rs +++ b/util/src/journaldb/archivedb.rs @@ -35,8 +35,8 @@ const AUX_FLAG: u8 = 255; /// /// Like `OverlayDB`, there is a memory overlay; `commit()` must be called in order to /// write operations out to disk. Unlike `OverlayDB`, `remove()` operations do not take effect -/// immediately. Rather some age (based on a linear but arbitrary metric) must pass before -/// the removals actually take effect. +/// immediately. As this is an "archive" database, nothing is ever removed. This means +/// that the states of any block the node has ever processed will be accessible. pub struct ArchiveDB { overlay: MemoryDB, backing: Arc, @@ -156,7 +156,7 @@ impl JournalDB for ArchiveDB { self.latest_era.is_none() } - fn commit(&mut self, batch: &mut DBTransaction, now: u64, _id: &H256, _end: Option<(u64, H256)>) -> Result { + fn journal_under(&mut self, batch: &mut DBTransaction, now: u64, _id: &H256) -> Result { let mut inserts = 0usize; let mut deletes = 0usize; @@ -184,6 +184,11 @@ impl JournalDB for ArchiveDB { Ok((inserts + deletes) as u32) } + fn mark_canonical(&mut self, _batch: &mut DBTransaction, _end_era: u64, _canon_id: &H256) -> Result { + // keep everything! it's an archive, after all. + Ok(0) + } + fn inject(&mut self, batch: &mut DBTransaction) -> Result { let mut inserts = 0usize; let mut deletes = 0usize; diff --git a/util/src/journaldb/earlymergedb.rs b/util/src/journaldb/earlymergedb.rs index bbb4ed827d..ef9868d413 100644 --- a/util/src/journaldb/earlymergedb.rs +++ b/util/src/journaldb/earlymergedb.rs @@ -61,6 +61,49 @@ enum RemoveFrom { /// write operations out to disk. Unlike `OverlayDB`, `remove()` operations do not take effect /// immediately. Rather some age (based on a linear but arbitrary metric) must pass before /// the removals actually take effect. +/// +/// journal format: +/// [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] +/// [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] +/// [era, n] => [ ... ] +/// +/// When we make a new commit, we make a journal of all blocks in the recent history and record +/// all keys that were inserted and deleted. The journal is ordered by era; multiple commits can +/// share the same era. This forms a data structure similar to a queue but whose items are tuples. +/// By the time comes to remove a tuple from the queue (i.e. then the era passes from recent history +/// into ancient history) then only one commit from the tuple is considered canonical. This commit +/// is kept in the main backing database, whereas any others from the same era are reverted. +/// +/// It is possible that a key, properly available in the backing database be deleted and re-inserted +/// in the recent history queue, yet have both operations in commits that are eventually non-canonical. +/// To avoid the original, and still required, key from being deleted, we maintain a reference count +/// which includes an original key, if any. +/// +/// The semantics of the `counter` are: +/// insert key k: +/// counter already contains k: count += 1 +/// counter doesn't contain k: +/// backing db contains k: count = 1 +/// backing db doesn't contain k: insert into backing db, count = 0 +/// delete key k: +/// counter contains k (count is asserted to be non-zero): +/// count > 1: counter -= 1 +/// count == 1: remove counter +/// count == 0: remove key from backing db +/// counter doesn't contain k: remove key from backing db +/// +/// Practically, this means that for each commit block turning from recent to ancient we do the +/// following: +/// is_canonical: +/// inserts: Ignored (left alone in the backing database). +/// deletes: Enacted; however, recent history queue is checked for ongoing references. This is +/// reduced as a preference to deletion from the backing database. +/// !is_canonical: +/// inserts: Reverted; however, recent history queue is checked for ongoing references. This is +/// reduced as a preference to deletion from the backing database. +/// deletes: Ignored (they were never inserted). +/// +/// TODO: store_reclaim_period pub struct EarlyMergeDB { overlay: MemoryDB, backing: Arc, @@ -336,55 +379,12 @@ impl JournalDB for EarlyMergeDB { self.backing.get_by_prefix(self.column, &id[0..DB_PREFIX_LEN]).map(|b| b.to_vec()) } - #[cfg_attr(feature="dev", allow(cyclomatic_complexity))] - fn commit(&mut self, batch: &mut DBTransaction, now: u64, id: &H256, end: Option<(u64, H256)>) -> Result { - // journal format: - // [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] - // [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] - // [era, n] => [ ... ] - - // TODO: store reclaim_period. - - // When we make a new commit, we make a journal of all blocks in the recent history and record - // all keys that were inserted and deleted. The journal is ordered by era; multiple commits can - // share the same era. This forms a data structure similar to a queue but whose items are tuples. - // By the time comes to remove a tuple from the queue (i.e. then the era passes from recent history - // into ancient history) then only one commit from the tuple is considered canonical. This commit - // is kept in the main backing database, whereas any others from the same era are reverted. - // - // It is possible that a key, properly available in the backing database be deleted and re-inserted - // in the recent history queue, yet have both operations in commits that are eventually non-canonical. - // To avoid the original, and still required, key from being deleted, we maintain a reference count - // which includes an original key, if any. - // - // The semantics of the `counter` are: - // insert key k: - // counter already contains k: count += 1 - // counter doesn't contain k: - // backing db contains k: count = 1 - // backing db doesn't contain k: insert into backing db, count = 0 - // delete key k: - // counter contains k (count is asserted to be non-zero): - // count > 1: counter -= 1 - // count == 1: remove counter - // count == 0: remove key from backing db - // counter doesn't contain k: remove key from backing db - // - // Practically, this means that for each commit block turning from recent to ancient we do the - // following: - // is_canonical: - // inserts: Ignored (left alone in the backing database). - // deletes: Enacted; however, recent history queue is checked for ongoing references. This is - // reduced as a preference to deletion from the backing database. - // !is_canonical: - // inserts: Reverted; however, recent history queue is checked for ongoing references. This is - // reduced as a preference to deletion from the backing database. - // deletes: Ignored (they were never inserted). - // + fn journal_under(&mut self, batch: &mut DBTransaction, now: u64, id: &H256) -> Result { + let trace = false; // record new commit's details. let mut refs = self.refs.as_ref().unwrap().write(); - let trace = false; + { let mut index = 0usize; let mut last; @@ -403,7 +403,7 @@ impl JournalDB for EarlyMergeDB { let drained = self.overlay.drain(); if trace { - trace!(target: "jdb", "commit: #{} ({}), end era: {:?}", now, id, end); + trace!(target: "jdb", "commit: #{} ({})", now, id); } let removes: Vec = drained @@ -431,86 +431,87 @@ impl JournalDB for EarlyMergeDB { inserts.iter().foreach(|&(k, _)| {r.append(&k);}); r.append(&removes); Self::insert_keys(&inserts, &self.backing, self.column, &mut refs, batch, trace); + + let ins = inserts.iter().map(|&(k, _)| k).collect::>(); + if trace { - let ins = inserts.iter().map(|&(k, _)| k).collect::>(); - trace!(target: "jdb.ops", " Inserts: {:?}", ins); trace!(target: "jdb.ops", " Deletes: {:?}", removes); + trace!(target: "jdb.ops", " Inserts: {:?}", ins); } + batch.put(self.column, &last, r.as_raw()); if self.latest_era.map_or(true, |e| now > e) { batch.put(self.column, &LATEST_ERA_KEY, &encode(&now)); self.latest_era = Some(now); } + + Ok((ins.len() + removes.len()) as u32) } + } - // apply old commits' details - if let Some((end_era, canon_id)) = end { - let mut index = 0usize; - let mut last; - while let Some(rlp_data) = try!(self.backing.get(self.column, { - let mut r = RlpStream::new_list(3); - r.append(&end_era); - r.append(&index); - r.append(&&PADDING[..]); - last = r.drain(); - &last - })) { - let rlp = Rlp::new(&rlp_data); - let inserts: Vec = rlp.val_at(1); + #[cfg_attr(feature="dev", allow(cyclomatic_complexity))] + fn mark_canonical(&mut self, batch: &mut DBTransaction, end_era: u64, canon_id: &H256) -> Result { + let trace = false; - if canon_id == rlp.val_at(0) { - // Collect keys to be removed. Canon block - remove the (enacted) deletes. - let deletes: Vec = rlp.val_at(2); - if trace { - trace!(target: "jdb.ops", " Expunging: {:?}", deletes); - } - Self::remove_keys(&deletes, &mut refs, batch, self.column, RemoveFrom::Archive, trace); + let mut refs = self.refs.as_ref().unwrap().write(); - if trace { - trace!(target: "jdb.ops", " Finalising: {:?}", inserts); - } - for k in &inserts { - match refs.get(k).cloned() { - None => { - // [in archive] -> SHIFT remove -> SHIFT insert None->Some{queue_refs: 1, in_archive: true} -> TAKE remove Some{queue_refs: 1, in_archive: true}->None -> TAKE insert - // already expunged from the queue (which is allowed since the key is in the archive). - // leave well alone. - } - Some( RefInfo{queue_refs: 1, in_archive: false} ) => { - // just delete the refs entry. - refs.remove(k); - } - Some( RefInfo{queue_refs: x, in_archive: false} ) => { - // must set already in; , - Self::set_already_in(batch, self.column, k); - refs.insert(k.clone(), RefInfo{ queue_refs: x - 1, in_archive: true }); - } - Some( RefInfo{in_archive: true, ..} ) => { - // Invalid! Reinserted the same key twice. - warn!("Key {} inserted twice into same fork.", k); - } + // apply old commits' details + let mut index = 0usize; + let mut last; + + while let Some(rlp_data) = try!(self.backing.get(self.column, { + let mut r = RlpStream::new_list(3); + r.append(&end_era); + r.append(&index); + r.append(&&PADDING[..]); + last = r.drain(); + &last + })) { + let rlp = Rlp::new(&rlp_data); + let inserts: Vec = rlp.val_at(1); + + if canon_id == &rlp.val_at::(0) { + // Collect keys to be removed. Canon block - remove the (enacted) deletes. + let deletes: Vec = rlp.val_at(2); + trace!(target: "jdb.ops", " Expunging: {:?}", deletes); + Self::remove_keys(&deletes, &mut refs, batch, self.column, RemoveFrom::Archive, trace); + + trace!(target: "jdb.ops", " Finalising: {:?}", inserts); + for k in &inserts { + match refs.get(k).cloned() { + None => { + // [in archive] -> SHIFT remove -> SHIFT insert None->Some{queue_refs: 1, in_archive: true} -> TAKE remove Some{queue_refs: 1, in_archive: true}->None -> TAKE insert + // already expunged from the queue (which is allowed since the key is in the archive). + // leave well alone. + } + Some( RefInfo{queue_refs: 1, in_archive: false} ) => { + // just delete the refs entry. + refs.remove(k); + } + Some( RefInfo{queue_refs: x, in_archive: false} ) => { + // must set already in; , + Self::set_already_in(batch, self.column, k); + refs.insert(k.clone(), RefInfo{ queue_refs: x - 1, in_archive: true }); + } + Some( RefInfo{in_archive: true, ..} ) => { + // Invalid! Reinserted the same key twice. + warn!("Key {} inserted twice into same fork.", k); } } - } else { - // Collect keys to be removed. Non-canon block - remove the (reverted) inserts. - if trace { - trace!(target: "jdb.ops", " Reverting: {:?}", inserts); - } - Self::remove_keys(&inserts, &mut refs, batch, self.column, RemoveFrom::Queue, trace); } - - batch.delete(self.column, &last); - index += 1; - } - if trace { - trace!(target: "jdb", "EarlyMergeDB: delete journal for time #{}.{}, (canon was {})", end_era, index, canon_id); + } else { + // Collect keys to be removed. Non-canon block - remove the (reverted) inserts. + trace!(target: "jdb.ops", " Reverting: {:?}", inserts); + Self::remove_keys(&inserts, &mut refs, batch, self.column, RemoveFrom::Queue, trace); } - } - if trace { - trace!(target: "jdb", "OK: {:?}", refs.clone()); + batch.delete(self.column, &last); + index += 1; } + trace!(target: "jdb", "EarlyMergeDB: delete journal for time #{}.{}, (canon was {})", end_era, index, canon_id); + trace!(target: "jdb", "OK: {:?}", refs.clone()); + Ok(0) } diff --git a/util/src/journaldb/overlayrecentdb.rs b/util/src/journaldb/overlayrecentdb.rs index bd14eb161b..0d1149a85e 100644 --- a/util/src/journaldb/overlayrecentdb.rs +++ b/util/src/journaldb/overlayrecentdb.rs @@ -222,92 +222,107 @@ impl JournalDB for OverlayRecentDB { .or_else(|| self.backing.get_by_prefix(self.column, &key[0..DB_PREFIX_LEN]).map(|b| b.to_vec())) } - fn commit(&mut self, batch: &mut DBTransaction, now: u64, id: &H256, end: Option<(u64, H256)>) -> Result { - // record new commit's details. - trace!("commit: #{} ({}), end era: {:?}", now, id, end); + fn journal_under(&mut self, batch: &mut DBTransaction, now: u64, id: &H256) -> Result { + trace!(target: "journaldb", "entry: #{} ({})", now, id); + let mut journal_overlay = self.journal_overlay.write(); + // flush previous changes journal_overlay.pending_overlay.clear(); - { - let mut r = RlpStream::new_list(3); - let mut tx = self.transaction_overlay.drain(); - let inserted_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c > 0 { Some(k.clone()) } else { None }).collect(); - let removed_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c < 0 { Some(k.clone()) } else { None }).collect(); - // Increase counter for each inserted key no matter if the block is canonical or not. - let insertions = tx.drain().filter_map(|(k, (v, c))| if c > 0 { Some((k, v)) } else { None }); - r.append(id); - r.begin_list(inserted_keys.len()); - for (k, v) in insertions { - r.begin_list(2); - r.append(&k); - r.append(&v); - journal_overlay.backing_overlay.emplace(to_short_key(&k), v); - } - r.append(&removed_keys); - - let mut k = RlpStream::new_list(3); - let index = journal_overlay.journal.get(&now).map_or(0, |j| j.len()); - k.append(&now); - k.append(&index); - k.append(&&PADDING[..]); - batch.put_vec(self.column, &k.drain(), r.out()); - if journal_overlay.latest_era.map_or(true, |e| now > e) { - batch.put_vec(self.column, &LATEST_ERA_KEY, encode(&now).to_vec()); - journal_overlay.latest_era = Some(now); - } - journal_overlay.journal.entry(now).or_insert_with(Vec::new).push(JournalEntry { id: id.clone(), insertions: inserted_keys, deletions: removed_keys }); + + let mut r = RlpStream::new_list(3); + let mut tx = self.transaction_overlay.drain(); + let inserted_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c > 0 { Some(k.clone()) } else { None }).collect(); + let removed_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c < 0 { Some(k.clone()) } else { None }).collect(); + let ops = inserted_keys.len() + removed_keys.len(); + + // Increase counter for each inserted key no matter if the block is canonical or not. + let insertions = tx.drain().filter_map(|(k, (v, c))| if c > 0 { Some((k, v)) } else { None }); + + r.append(id); + r.begin_list(inserted_keys.len()); + for (k, v) in insertions { + r.begin_list(2); + r.append(&k); + r.append(&v); + journal_overlay.backing_overlay.emplace(to_short_key(&k), v); + } + r.append(&removed_keys); + + let mut k = RlpStream::new_list(3); + let index = journal_overlay.journal.get(&now).map_or(0, |j| j.len()); + k.append(&now); + k.append(&index); + k.append(&&PADDING[..]); + batch.put_vec(self.column, &k.drain(), r.out()); + if journal_overlay.latest_era.map_or(true, |e| now > e) { + batch.put_vec(self.column, &LATEST_ERA_KEY, encode(&now).to_vec()); + journal_overlay.latest_era = Some(now); } + journal_overlay.journal.entry(now).or_insert_with(Vec::new).push(JournalEntry { id: id.clone(), insertions: inserted_keys, deletions: removed_keys }); + Ok(ops as u32) + } + + fn mark_canonical(&mut self, batch: &mut DBTransaction, end_era: u64, canon_id: &H256) -> Result { + trace!(target: "journaldb", "canonical: #{} ({})", end_era, canon_id); + + let mut journal_overlay = self.journal_overlay.write(); let journal_overlay = &mut *journal_overlay; + + let mut ops = 0; // apply old commits' details - if let Some((end_era, canon_id)) = end { - if let Some(ref mut records) = journal_overlay.journal.get_mut(&end_era) { - let mut canon_insertions: Vec<(H256, Bytes)> = Vec::new(); - let mut canon_deletions: Vec = Vec::new(); - let mut overlay_deletions: Vec = Vec::new(); - let mut index = 0usize; - for mut journal in records.drain(..) { - //delete the record from the db - let mut r = RlpStream::new_list(3); - r.append(&end_era); - r.append(&index); - r.append(&&PADDING[..]); - batch.delete(self.column, &r.drain()); - trace!("commit: Delete journal for time #{}.{}: {}, (canon was {}): +{} -{} entries", end_era, index, journal.id, canon_id, journal.insertions.len(), journal.deletions.len()); - { - if canon_id == journal.id { - for h in &journal.insertions { - if let Some((d, rc)) = journal_overlay.backing_overlay.raw(&to_short_key(h)) { - if rc > 0 { - canon_insertions.push((h.clone(), d.to_owned())); //TODO: optimize this to avoid data copy - } + if let Some(ref mut records) = journal_overlay.journal.get_mut(&end_era) { + let mut canon_insertions: Vec<(H256, Bytes)> = Vec::new(); + let mut canon_deletions: Vec = Vec::new(); + let mut overlay_deletions: Vec = Vec::new(); + let mut index = 0usize; + for mut journal in records.drain(..) { + //delete the record from the db + let mut r = RlpStream::new_list(3); + r.append(&end_era); + r.append(&index); + r.append(&&PADDING[..]); + batch.delete(self.column, &r.drain()); + trace!(target: "journaldb", "Delete journal for time #{}.{}: {}, (canon was {}): +{} -{} entries", end_era, index, journal.id, canon_id, journal.insertions.len(), journal.deletions.len()); + { + if *canon_id == journal.id { + for h in &journal.insertions { + if let Some((d, rc)) = journal_overlay.backing_overlay.raw(&to_short_key(h)) { + if rc > 0 { + canon_insertions.push((h.clone(), d.to_owned())); //TODO: optimize this to avoid data copy } } - canon_deletions = journal.deletions; } - overlay_deletions.append(&mut journal.insertions); + canon_deletions = journal.deletions; } - index += 1; + overlay_deletions.append(&mut journal.insertions); } - // apply canon inserts first - for (k, v) in canon_insertions { - batch.put(self.column, &k, &v); - journal_overlay.pending_overlay.insert(to_short_key(&k), v); - } - // update the overlay - for k in overlay_deletions { - journal_overlay.backing_overlay.remove_and_purge(&to_short_key(&k)); - } - // apply canon deletions - for k in canon_deletions { - if !journal_overlay.backing_overlay.contains(&to_short_key(&k)) { - batch.delete(self.column, &k); - } + index += 1; + } + + ops += canon_insertions.len(); + ops += canon_deletions.len(); + + // apply canon inserts first + for (k, v) in canon_insertions { + batch.put(self.column, &k, &v); + journal_overlay.pending_overlay.insert(to_short_key(&k), v); + } + // update the overlay + for k in overlay_deletions { + journal_overlay.backing_overlay.remove_and_purge(&to_short_key(&k)); + } + // apply canon deletions + for k in canon_deletions { + if !journal_overlay.backing_overlay.contains(&to_short_key(&k)) { + batch.delete(self.column, &k); } } - journal_overlay.journal.remove(&end_era); } - Ok(0) + journal_overlay.journal.remove(&end_era); + + Ok(ops as u32) } fn flush(&self) { diff --git a/util/src/journaldb/refcounteddb.rs b/util/src/journaldb/refcounteddb.rs index 5e3f096063..e6a0f5dccf 100644 --- a/util/src/journaldb/refcounteddb.rs +++ b/util/src/journaldb/refcounteddb.rs @@ -34,6 +34,17 @@ use std::env; /// write operations out to disk. Unlike `OverlayDB`, `remove()` operations do not take effect /// immediately. Rather some age (based on a linear but arbitrary metric) must pass before /// the removals actually take effect. +/// +/// journal format: +/// [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] +/// [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] +/// [era, n] => [ ... ] +/// +/// when we make a new commit, we journal the inserts and removes. +/// for each end_era that we journaled that we are no passing by, +/// we remove all of its removes assuming it is canonical and all +/// of its inserts otherwise. +// TODO: store last_era, reclaim_period. pub struct RefCountedDB { forward: OverlayDB, backing: Arc, @@ -109,77 +120,66 @@ impl JournalDB for RefCountedDB { self.backing.get_by_prefix(self.column, &id[0..DB_PREFIX_LEN]).map(|b| b.to_vec()) } - fn commit(&mut self, batch: &mut DBTransaction, now: u64, id: &H256, end: Option<(u64, H256)>) -> Result { - // journal format: - // [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] - // [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] - // [era, n] => [ ... ] - - // TODO: store last_era, reclaim_period. - - // when we make a new commit, we journal the inserts and removes. - // for each end_era that we journaled that we are no passing by, - // we remove all of its removes assuming it is canonical and all - // of its inserts otherwise. - + fn journal_under(&mut self, batch: &mut DBTransaction, now: u64, id: &H256) -> Result { // record new commit's details. - { - let mut index = 0usize; - let mut last; - - while try!(self.backing.get(self.column, { - let mut r = RlpStream::new_list(3); - r.append(&now); - r.append(&index); - r.append(&&PADDING[..]); - last = r.drain(); - &last - })).is_some() { - index += 1; - } + let mut index = 0usize; + let mut last; + while try!(self.backing.get(self.column, { let mut r = RlpStream::new_list(3); - r.append(id); - r.append(&self.inserts); - r.append(&self.removes); - batch.put(self.column, &last, r.as_raw()); + r.append(&now); + r.append(&index); + r.append(&&PADDING[..]); + last = r.drain(); + &last + })).is_some() { + index += 1; + } - trace!(target: "rcdb", "new journal for time #{}.{} => {}: inserts={:?}, removes={:?}", now, index, id, self.inserts, self.removes); + let mut r = RlpStream::new_list(3); + r.append(id); + r.append(&self.inserts); + r.append(&self.removes); + batch.put(self.column, &last, r.as_raw()); - self.inserts.clear(); - self.removes.clear(); + let ops = self.inserts.len() + self.removes.len(); - if self.latest_era.map_or(true, |e| now > e) { - batch.put(self.column, &LATEST_ERA_KEY, &encode(&now)); - self.latest_era = Some(now); - } + trace!(target: "rcdb", "new journal for time #{}.{} => {}: inserts={:?}, removes={:?}", now, index, id, self.inserts, self.removes); + + self.inserts.clear(); + self.removes.clear(); + + if self.latest_era.map_or(true, |e| now > e) { + batch.put(self.column, &LATEST_ERA_KEY, &encode(&now)); + self.latest_era = Some(now); } + Ok(ops as u32) + } + + fn mark_canonical(&mut self, batch: &mut DBTransaction, end_era: u64, canon_id: &H256) -> Result { // apply old commits' details - if let Some((end_era, canon_id)) = end { - let mut index = 0usize; - let mut last; - while let Some(rlp_data) = { -// trace!(target: "rcdb", "checking for journal #{}.{}", end_era, index); - try!(self.backing.get(self.column, { - let mut r = RlpStream::new_list(3); - r.append(&end_era); - r.append(&index); - r.append(&&PADDING[..]); - last = r.drain(); - &last - })) - } { - let rlp = Rlp::new(&rlp_data); - let our_id: H256 = rlp.val_at(0); - let to_remove: Vec = rlp.val_at(if canon_id == our_id {2} else {1}); - trace!(target: "rcdb", "delete journal for time #{}.{}=>{}, (canon was {}): deleting {:?}", end_era, index, our_id, canon_id, to_remove); - for i in &to_remove { - self.forward.remove(i); - } - batch.delete(self.column, &last); - index += 1; + let mut index = 0usize; + let mut last; + while let Some(rlp_data) = { + try!(self.backing.get(self.column, { + let mut r = RlpStream::new_list(3); + r.append(&end_era); + r.append(&index); + r.append(&&PADDING[..]); + last = r.drain(); + &last + })) + } { + let rlp = Rlp::new(&rlp_data); + let our_id: H256 = rlp.val_at(0); + let to_remove: Vec = rlp.val_at(if *canon_id == our_id {2} else {1}); + trace!(target: "rcdb", "delete journal for time #{}.{}=>{}, (canon was {}): deleting {:?}", end_era, index, our_id, canon_id, to_remove); + for i in &to_remove { + self.forward.remove(i); } + batch.delete(self.column, &last); + index += 1; } let r = try!(self.forward.commit_to_batch(batch)); diff --git a/util/src/journaldb/traits.rs b/util/src/journaldb/traits.rs index 85cc7fe58b..afa2bb9f46 100644 --- a/util/src/journaldb/traits.rs +++ b/util/src/journaldb/traits.rs @@ -35,9 +35,12 @@ pub trait JournalDB: HashDB { /// Get the latest era in the DB. None if there isn't yet any data in there. fn latest_era(&self) -> Option; - /// Commit all recent insert operations and canonical historical commits' removals from the - /// old era to the backing database, reverting any non-canonical historical commit's inserts. - fn commit(&mut self, batch: &mut DBTransaction, now: u64, id: &H256, end: Option<(u64, H256)>) -> Result; + /// Journal recent database operations as being associated with a given era and id. + // TODO: give the overlay to this function so journaldbs don't manage the overlays themeselves. + fn journal_under(&mut self, batch: &mut DBTransaction, now: u64, id: &H256) -> Result; + + /// Mark a given block as canonical, indicating that competing blocks' states may be pruned out. + fn mark_canonical(&mut self, batch: &mut DBTransaction, era: u64, id: &H256) -> Result; /// Commit all queued insert and delete operations without affecting any journalling -- this requires that all insertions /// and deletions are indeed canonical and will likely lead to an invalid database if that assumption is violated. @@ -68,8 +71,13 @@ pub trait JournalDB: HashDB { #[cfg(test)] fn commit_batch(&mut self, now: u64, id: &H256, end: Option<(u64, H256)>) -> Result { let mut batch = self.backing().transaction(); - let res = try!(self.commit(&mut batch, now, id, end)); - let result = self.backing().write(batch).map(|_| res).map_err(Into::into); + let mut ops = try!(self.journal_under(&mut batch, now, id)); + + if let Some((end_era, canon_id)) = end { + ops += try!(self.mark_canonical(&mut batch, end_era, &canon_id)); + } + + let result = self.backing().write(batch).map(|_| ops).map_err(Into::into); self.flush(); result } -- GitLab From e26a16c70c85314b60fd41418b8f4c691d9287b2 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 26 Sep 2016 17:27:48 +0200 Subject: [PATCH 002/393] use new commit mechanism in client --- ethcore/src/client/client.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index a60cce01db..57d8b6fbcb 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -175,7 +175,7 @@ impl Client { let mut state_db = journaldb::new(db.clone(), config.pruning, ::db::COL_STATE); if state_db.is_empty() && try!(spec.ensure_db_good(state_db.as_hashdb_mut())) { let mut batch = DBTransaction::new(&db); - try!(state_db.commit(&mut batch, 0, &spec.genesis_header().hash(), None)); + try!(state_db.journal_under(&mut batch, 0, &spec.genesis_header().hash())); try!(db.write(batch).map_err(ClientError::Database)); } @@ -421,13 +421,6 @@ impl Client { let number = block.header().number(); let parent = block.header().parent_hash().clone(); let chain = self.chain.read(); - // Are we committing an era? - let ancient = if number >= HISTORY { - let n = number - HISTORY; - Some((n, chain.block_hash(n).unwrap())) - } else { - None - }; // Commit results let receipts = block.receipts().to_owned(); @@ -442,7 +435,14 @@ impl Client { // CHECK! I *think* this is fine, even if the state_root is equal to another // already-imported block of the same number. // TODO: Prove it with a test. - block.drain().commit(&mut batch, number, hash, ancient).expect("DB commit failed."); + let mut db = block.drain(); + + db.journal_under(&mut batch, number, hash).expect("DB commit failed"); + + if number >= HISTORY { + let n = number - HISTORY; + db.mark_canonical(&mut batch, n, &chain.block_hash(n).unwrap()).expect("DB commit failed"); + } let route = chain.insert_block(&mut batch, block_data, receipts); self.tracedb.read().import(&mut batch, TraceImportRequest { -- GitLab From eddfb475c6a81c5fe9424cf7fd275cfdb0637212 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Wed, 5 Oct 2016 14:37:27 +0300 Subject: [PATCH 003/393] get rid of collects --- ethstore/src/dir/disk.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/ethstore/src/dir/disk.rs b/ethstore/src/dir/disk.rs index 3016412ebb..e4d3b91c66 100644 --- a/ethstore/src/dir/disk.rs +++ b/ethstore/src/dir/disk.rs @@ -76,15 +76,14 @@ impl DiskDirectory { .map(|entry| entry.path()) .collect::>(); - let files: Result, _> = paths.iter() - .map(fs::File::open) - .collect(); - - let files = try!(files); - - files.into_iter() - .map(json::KeyFile::load) - .zip(paths.into_iter()) + paths + .iter() + .map(|p| ( + fs::File::open(p) + .map_err(Error::from) + .and_then(|r| json::KeyFile::load(r).map_err(|e| Error::Custom(format!("{:?}", e)))), + p + )) .map(|(file, path)| match file { Ok(file) => Ok((path.clone(), SafeAccount::from_file( file, Some(path.file_name().and_then(|n| n.to_str()).expect("Keys have valid UTF8 names only.").to_owned()) -- GitLab From 7526b1d44b81b9b6eaa0ca28f6e7abc5e6f0b2f1 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Wed, 5 Oct 2016 20:42:57 +0300 Subject: [PATCH 004/393] Derive IPC interface only when ipc feature is on (#2463) * derive -> ipc * accident repair * conditional ipc deriving * fix test --- ethcore/build.rs | 6 +++--- ethcore/src/client/mod.rs | 11 ++++++++-- ethcore/src/snapshot/mod.rs | 8 ++++++- ethcore/src/tests/mod.rs | 1 + ethcore/src/tests/rpc.rs | 3 ++- ipc/codegen/src/lib.rs | 43 ++++++++++++++++++++++++++++++++----- parity/modules.rs | 5 +++-- parity/sync.rs | 5 +++-- sync/build.rs | 2 +- sync/src/lib.rs | 6 ++++++ 10 files changed, 73 insertions(+), 17 deletions(-) diff --git a/ethcore/build.rs b/ethcore/build.rs index b839557084..5a3a3f0ba2 100644 --- a/ethcore/build.rs +++ b/ethcore/build.rs @@ -18,7 +18,7 @@ extern crate ethcore_ipc_codegen; fn main() { ethcore_ipc_codegen::derive_binary("src/types/mod.rs.in").unwrap(); - ethcore_ipc_codegen::derive_ipc("src/client/traits.rs").unwrap(); - ethcore_ipc_codegen::derive_ipc("src/snapshot/snapshot_service_trait.rs").unwrap(); - ethcore_ipc_codegen::derive_ipc("src/client/chain_notify.rs").unwrap(); + ethcore_ipc_codegen::derive_ipc_cond("src/client/traits.rs", cfg!(feature="ipc")).unwrap(); + ethcore_ipc_codegen::derive_ipc_cond("src/snapshot/snapshot_service_trait.rs", cfg!(feature="ipc")).unwrap(); + ethcore_ipc_codegen::derive_ipc_cond("src/client/chain_notify.rs", cfg!(feature="ipc")).unwrap(); } diff --git a/ethcore/src/client/mod.rs b/ethcore/src/client/mod.rs index 3bbf9011b2..1e8aa9d72e 100644 --- a/ethcore/src/client/mod.rs +++ b/ethcore/src/client/mod.rs @@ -30,13 +30,20 @@ pub use self::test_client::{TestBlockChainClient, EachBlockWith}; pub use types::trace_filter::Filter as TraceFilter; pub use executive::{Executed, Executive, TransactOptions}; pub use env_info::{LastHashes, EnvInfo}; -pub use self::chain_notify::{ChainNotify, ChainNotifyClient}; +pub use self::chain_notify::ChainNotify; pub use types::call_analytics::CallAnalytics; pub use block_import_error::BlockImportError; pub use transaction_import::TransactionImportResult; pub use transaction_import::TransactionImportError; -pub use self::traits::{BlockChainClient, MiningBlockChainClient, RemoteClient}; +pub use self::traits::{BlockChainClient, MiningBlockChainClient}; + +/// IPC interfaces +#[cfg(feature="ipc")] +pub mod remote { + pub use super::traits::RemoteClient; + pub use super::chain_notify::ChainNotifyClient; +} mod traits { #![allow(dead_code, unused_assignments, unused_variables, missing_docs)] // codegen issues diff --git a/ethcore/src/snapshot/mod.rs b/ethcore/src/snapshot/mod.rs index 2150ee226f..a5e6b58bdf 100644 --- a/ethcore/src/snapshot/mod.rs +++ b/ethcore/src/snapshot/mod.rs @@ -51,7 +51,7 @@ use rand::{Rng, OsRng}; pub use self::error::Error; pub use self::service::{Service, DatabaseRestore}; -pub use self::traits::{SnapshotService, RemoteSnapshotService}; +pub use self::traits::SnapshotService; pub use self::watcher::Watcher; pub use types::snapshot_manifest::ManifestData; pub use types::restoration_status::RestorationStatus; @@ -67,6 +67,12 @@ mod watcher; #[cfg(test)] mod tests; +/// IPC interfaces +#[cfg(feature="ipc")] +pub mod remote { + pub use super::traits::RemoteSnapshotService; +} + mod traits { #![allow(dead_code, unused_assignments, unused_variables, missing_docs)] // codegen issues include!(concat!(env!("OUT_DIR"), "/snapshot_service_trait.rs")); diff --git a/ethcore/src/tests/mod.rs b/ethcore/src/tests/mod.rs index db36a37621..4157e486df 100644 --- a/ethcore/src/tests/mod.rs +++ b/ethcore/src/tests/mod.rs @@ -16,4 +16,5 @@ pub mod helpers; mod client; +#[cfg(feature="ipc")] mod rpc; diff --git a/ethcore/src/tests/rpc.rs b/ethcore/src/tests/rpc.rs index d5d88c0876..b021e750d2 100644 --- a/ethcore/src/tests/rpc.rs +++ b/ethcore/src/tests/rpc.rs @@ -19,7 +19,8 @@ use nanoipc; use std::sync::Arc; use std::sync::atomic::{Ordering, AtomicBool}; -use client::{Client, BlockChainClient, ClientConfig, RemoteClient, BlockID}; +use client::{Client, BlockChainClient, ClientConfig, BlockID}; +use client::remote::RemoteClient; use tests::helpers::*; use devtools::*; use miner::Miner; diff --git a/ipc/codegen/src/lib.rs b/ipc/codegen/src/lib.rs index 94959b058a..dc58c6a8a9 100644 --- a/ipc/codegen/src/lib.rs +++ b/ipc/codegen/src/lib.rs @@ -56,7 +56,7 @@ pub fn expand(src: &std::path::Path, dst: &std::path::Path) { } #[cfg(feature = "with-syntex")] -pub fn register(reg: &mut syntex::Registry) { +pub fn register_cleaner(reg: &mut syntex::Registry) { use syntax::{ast, fold}; #[cfg(feature = "with-syntex")] @@ -66,6 +66,7 @@ pub fn register(reg: &mut syntex::Registry) { fn fold_attribute(&mut self, attr: ast::Attribute) -> Option { match attr.node.value.node { ast::MetaItemKind::List(ref n, _) if n == &"ipc" => { return None; } + ast::MetaItemKind::Word(ref n) if n == &"ipc" => { return None; } _ => {} } @@ -80,13 +81,18 @@ pub fn register(reg: &mut syntex::Registry) { fold::Folder::fold_crate(&mut StripAttributeFolder, krate) } + reg.add_post_expansion_pass(strip_attributes); +} + +#[cfg(feature = "with-syntex")] +pub fn register(reg: &mut syntex::Registry) { reg.add_attr("feature(custom_derive)"); reg.add_attr("feature(custom_attribute)"); reg.add_decorator("ipc", codegen::expand_ipc_implementation); reg.add_decorator("derive_Binary", serialization::expand_serialization_implementation); - reg.add_post_expansion_pass(strip_attributes); + register_cleaner(reg); } #[cfg(not(feature = "with-syntex"))] @@ -104,7 +110,34 @@ pub fn register(reg: &mut rustc_plugin::Registry) { } #[derive(Debug)] -pub enum Error { InvalidFileName, ExpandFailure } +pub enum Error { InvalidFileName, ExpandFailure, Io(std::io::Error) } + +impl std::convert::From for Error { + fn from(err: std::io::Error) -> Self { + Error::Io(err) + } +} + +pub fn derive_ipc_cond(src_path: &str, has_feature: bool) -> Result<(), Error> { + if has_feature { derive_ipc(src_path) } + else { cleanup_ipc(src_path) } +} + +pub fn cleanup_ipc(src_path: &str) -> Result<(), Error> { + use std::env; + use std::path::{Path, PathBuf}; + + let out_dir = env::var_os("OUT_DIR").unwrap(); + let file_name = try!(PathBuf::from(src_path).file_name().ok_or(Error::InvalidFileName).map(|val| val.to_str().unwrap().to_owned())); + let mut registry = syntex::Registry::new(); + register_cleaner(&mut registry); + if let Err(_) = registry.expand("", &Path::new(src_path), &Path::new(&out_dir).join(&file_name)) + { + // will be reported by compiler + return Err(Error::ExpandFailure) + } + Ok(()) +} pub fn derive_ipc(src_path: &str) -> Result<(), Error> { use std::env; @@ -113,11 +146,11 @@ pub fn derive_ipc(src_path: &str) -> Result<(), Error> { let out_dir = env::var_os("OUT_DIR").unwrap(); let file_name = try!(PathBuf::from(src_path).file_name().ok_or(Error::InvalidFileName).map(|val| val.to_str().unwrap().to_owned())); + let final_path = Path::new(&out_dir).join(&file_name); + let mut intermediate_file_name = file_name.clone(); intermediate_file_name.push_str(".rpc.in"); - let intermediate_path = Path::new(&out_dir).join(&intermediate_file_name); - let final_path = Path::new(&out_dir).join(&file_name); { let mut registry = syntex::Registry::new(); diff --git a/parity/modules.rs b/parity/modules.rs index 53cef47416..39e05a293e 100644 --- a/parity/modules.rs +++ b/parity/modules.rs @@ -68,8 +68,9 @@ pub type SyncModules = (Arc, Arc, Arc) #[cfg(feature="ipc")] mod ipc_deps { - pub use ethsync::{SyncClient, NetworkManagerClient, ServiceConfiguration}; - pub use ethcore::client::ChainNotifyClient; + pub use ethsync::remote::{SyncClient, NetworkManagerClient}; + pub use ethsync::ServiceConfiguration; + pub use ethcore::client::remote::ChainNotifyClient; pub use hypervisor::{SYNC_MODULE_ID, BootArgs, HYPERVISOR_IPC_URL}; pub use nanoipc::{GuardedSocket, NanoSocket, generic_client, fast_client}; pub use ipc::IpcSocket; diff --git a/parity/sync.rs b/parity/sync.rs index 85f7715469..25f900b786 100644 --- a/parity/sync.rs +++ b/parity/sync.rs @@ -19,8 +19,9 @@ use std::sync::Arc; use std::sync::atomic::AtomicBool; use hypervisor::{SYNC_MODULE_ID, HYPERVISOR_IPC_URL, ControlService}; -use ethcore::client::{RemoteClient, ChainNotify}; -use ethcore::snapshot::{RemoteSnapshotService}; +use ethcore::client::ChainNotify; +use ethcore::client::remote::RemoteClient; +use ethcore::snapshot::remote::RemoteSnapshotService; use ethsync::{SyncProvider, EthSync, ManageNetwork, ServiceConfiguration}; use modules::service_urls; use boot; diff --git a/sync/build.rs b/sync/build.rs index cdb717e0e0..c465d5e34d 100644 --- a/sync/build.rs +++ b/sync/build.rs @@ -17,5 +17,5 @@ extern crate ethcore_ipc_codegen; fn main() { - ethcore_ipc_codegen::derive_ipc("src/api.rs").unwrap(); + ethcore_ipc_codegen::derive_ipc_cond("src/api.rs", cfg!(feature="ipc")).unwrap(); } diff --git a/sync/src/lib.rs b/sync/src/lib.rs index d2c6e25833..af566772ea 100644 --- a/sync/src/lib.rs +++ b/sync/src/lib.rs @@ -63,3 +63,9 @@ pub use api::{EthSync, SyncProvider, SyncClient, NetworkManagerClient, ManageNet ServiceConfiguration, NetworkConfiguration}; pub use chain::{SyncStatus, SyncState}; pub use network::{is_valid_node_url, NonReservedPeerMode, NetworkError}; + +/// IPC interfaces +#[cfg(feature="ipc")] +pub mod remote { + pub use api::{SyncClient, NetworkManagerClient}; +} -- GitLab From 33abb472225f28e1850c784f31d8dbd1f9381984 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 5 Oct 2016 19:44:09 +0200 Subject: [PATCH 005/393] update registrar test with generic non-empty test (#2476) * update registrar test with generic non-empty test * updated test, length check + parsing --- ethcore/src/tests/client.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ethcore/src/tests/client.rs b/ethcore/src/tests/client.rs index 59e3699acc..067f28d391 100644 --- a/ethcore/src/tests/client.rs +++ b/ethcore/src/tests/client.rs @@ -57,7 +57,11 @@ fn should_return_registrar() { IoChannel::disconnected(), &db_config ).unwrap(); - assert_eq!(client.additional_params().get("registrar"), Some(&"52dff57a8a1532e6afb3dc07e2af58bb9eb05b3d".to_owned())); + let params = client.additional_params(); + let address = params.get("registrar").unwrap(); + + assert_eq!(address.len(), 40); + assert!(U256::from_str(address).is_ok()); } #[test] -- GitLab From ecf098e9a40a3e7a4dc69b075af67eca9b0ffa89 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 6 Oct 2016 01:53:23 +0200 Subject: [PATCH 006/393] Track dirty accounts in the state (#2461) * State to track dirty accounts * Removed clone_for_snapshot * Renaming stuff * Documentation and other minor fixes * Replaced MaybeAccount with Option --- ethcore/src/state/account.rs | 61 +++-------- ethcore/src/state/mod.rs | 206 +++++++++++++++++++++-------------- 2 files changed, 135 insertions(+), 132 deletions(-) diff --git a/ethcore/src/state/account.rs b/ethcore/src/state/account.rs index bd7ed810b5..c66bc7f1e6 100644 --- a/ethcore/src/state/account.rs +++ b/ethcore/src/state/account.rs @@ -16,7 +16,6 @@ //! Single account in the system. -use std::collections::hash_map::Entry; use util::*; use pod_account::*; use rlp::*; @@ -24,9 +23,11 @@ use lru_cache::LruCache; use std::cell::{RefCell, Cell}; -const STORAGE_CACHE_ITEMS: usize = 4096; +const STORAGE_CACHE_ITEMS: usize = 8192; /// Single account in the system. +/// Keeps track of changes to the code and storage. +/// The changes are applied in `commit_storage` and `commit_code` pub struct Account { // Balance of the account. balance: U256, @@ -46,8 +47,6 @@ pub struct Account { code_size: Option, // Code cache of the account. code_cache: Arc, - // Account is new or has been modified. - filth: Filth, // Account code new or has been modified. code_filth: Filth, // Cached address hash. @@ -67,7 +66,6 @@ impl Account { code_hash: code.sha3(), code_size: Some(code.len()), code_cache: Arc::new(code), - filth: Filth::Dirty, code_filth: Filth::Dirty, address_hash: Cell::new(None), } @@ -89,7 +87,6 @@ impl Account { code_filth: Filth::Dirty, code_size: Some(pod.code.as_ref().map_or(0, |c| c.len())), code_cache: Arc::new(pod.code.map_or_else(|| { warn!("POD account with unknown code is being created! Assuming no code."); vec![] }, |c| c)), - filth: Filth::Dirty, address_hash: Cell::new(None), } } @@ -105,7 +102,6 @@ impl Account { code_hash: SHA3_EMPTY, code_cache: Arc::new(vec![]), code_size: Some(0), - filth: Filth::Dirty, code_filth: Filth::Clean, address_hash: Cell::new(None), } @@ -123,7 +119,6 @@ impl Account { code_hash: r.val_at(3), code_cache: Arc::new(vec![]), code_size: None, - filth: Filth::Clean, code_filth: Filth::Clean, address_hash: Cell::new(None), } @@ -141,7 +136,6 @@ impl Account { code_hash: SHA3_EMPTY, code_cache: Arc::new(vec![]), code_size: None, - filth: Filth::Dirty, code_filth: Filth::Clean, address_hash: Cell::new(None), } @@ -153,7 +147,6 @@ impl Account { self.code_hash = code.sha3(); self.code_cache = Arc::new(code); self.code_size = Some(self.code_cache.len()); - self.filth = Filth::Dirty; self.code_filth = Filth::Dirty; } @@ -164,17 +157,7 @@ impl Account { /// Set (and cache) the contents of the trie's storage at `key` to `value`. pub fn set_storage(&mut self, key: H256, value: H256) { - match self.storage_changes.entry(key) { - Entry::Occupied(ref mut entry) if entry.get() != &value => { - entry.insert(value); - self.filth = Filth::Dirty; - }, - Entry::Vacant(entry) => { - entry.insert(value); - self.filth = Filth::Dirty; - }, - _ => {}, - } + self.storage_changes.insert(key, value); } /// Get (and cache) the contents of the trie's storage at `key`. @@ -263,17 +246,6 @@ impl Account { !self.code_cache.is_empty() || (self.code_cache.is_empty() && self.code_hash == SHA3_EMPTY) } - /// Is this a new or modified account? - pub fn is_dirty(&self) -> bool { - self.filth == Filth::Dirty || self.code_filth == Filth::Dirty || !self.storage_is_clean() - } - - /// Mark account as clean. - pub fn set_clean(&mut self) { - assert!(self.storage_is_clean()); - self.filth = Filth::Clean - } - /// Provide a database to get `code_hash`. Should not be called if it is a contract without code. pub fn cache_code(&mut self, db: &HashDB) -> bool { // TODO: fill out self.code_cache; @@ -326,25 +298,18 @@ impl Account { /// Increment the nonce of the account by one. pub fn inc_nonce(&mut self) { self.nonce = self.nonce + U256::from(1u8); - self.filth = Filth::Dirty; } - /// Increment the nonce of the account by one. + /// Increase account balance. pub fn add_balance(&mut self, x: &U256) { - if !x.is_zero() { - self.balance = self.balance + *x; - self.filth = Filth::Dirty; - } + self.balance = self.balance + *x; } - /// Increment the nonce of the account by one. + /// Decrease account balance. /// Panics if balance is less than `x` pub fn sub_balance(&mut self, x: &U256) { - if !x.is_zero() { - assert!(self.balance >= *x); - self.balance = self.balance - *x; - self.filth = Filth::Dirty; - } + assert!(self.balance >= *x); + self.balance = self.balance - *x; } /// Commit the `storage_changes` to the backing DB and update `storage_root`. @@ -406,7 +371,6 @@ impl Account { code_hash: self.code_hash.clone(), code_size: self.code_size.clone(), code_cache: self.code_cache.clone(), - filth: self.filth, code_filth: self.code_filth, address_hash: self.address_hash.clone(), } @@ -427,10 +391,10 @@ impl Account { account } - /// Replace self with the data from other account merging storage cache + /// Replace self with the data from other account merging storage cache. + /// Basic account data and all modifications are overwritten + /// with new values. pub fn merge_with(&mut self, other: Account) { - assert!(self.storage_is_clean()); - assert!(other.storage_is_clean()); self.balance = other.balance; self.nonce = other.nonce; self.storage_root = other.storage_root; @@ -443,6 +407,7 @@ impl Account { for (k, v) in other.storage_cache.into_inner().into_iter() { cache.insert(k.clone() , v.clone()); //TODO: cloning should not be required here } + self.storage_changes = other.storage_changes; } } diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index a2fe25b914..2d8f0c1cc7 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -15,6 +15,7 @@ // along with Parity. If not, see . use std::cell::{RefCell, RefMut}; +use std::collections::hash_map::Entry; use common::*; use engines::Engine; use executive::{Executive, TransactOptions}; @@ -42,42 +43,69 @@ pub struct ApplyOutcome { /// Result type for the execution ("application") of a transaction. pub type ApplyResult = Result; +#[derive(Eq, PartialEq, Clone, Copy, Debug)] +/// Account modification state. Used to check if the account was +/// Modified in between commits and overall. +enum AccountState { + /// Account was never modified in this state object. + Clean, + /// Account has been modified and is not committed to the trie yet. + /// This is set than any of the account data is changed, including + /// storage and code. + Dirty, + /// Account was modified and committed to the trie. + Commited, +} + #[derive(Debug)] -enum AccountEntry { - /// Contains account data. - Cached(Account), - /// Account has been deleted. - Killed, - /// Account does not exist. - Missing, +/// In-memory copy of the account data. Holds the optional account +/// and the modification status. +/// Account entry can contain existing (`Some`) or non-existing +/// account (`None`) +struct AccountEntry { + account: Option, + state: AccountState, } +// Account cache item. Contains account data and +// modification state impl AccountEntry { fn is_dirty(&self) -> bool { - match *self { - AccountEntry::Cached(ref a) => a.is_dirty(), - AccountEntry::Killed => true, - AccountEntry::Missing => false, - } + self.state == AccountState::Dirty } - /// Clone dirty data into new `AccountEntry`. + /// Clone dirty data into new `AccountEntry`. This includes + /// basic account data and modified storage keys. /// Returns None if clean. - fn clone_dirty(&self) -> Option { - match *self { - AccountEntry::Cached(ref acc) if acc.is_dirty() => Some(AccountEntry::Cached(acc.clone_dirty())), - AccountEntry::Killed => Some(AccountEntry::Killed), - _ => None, + fn clone_if_dirty(&self) -> Option { + match self.is_dirty() { + true => Some(self.clone_dirty()), + false => None, + } + } + + /// Clone dirty data into new `AccountEntry`. This includes + /// basic account data and modified storage keys. + fn clone_dirty(&self) -> AccountEntry { + AccountEntry { + account: self.account.as_ref().map(Account::clone_dirty), + state: self.state, } } - /// Clone account entry data that needs to be saved in the snapshot. - /// This includes basic account information and all locally cached storage keys - fn clone_for_snapshot(&self) -> AccountEntry { - match *self { - AccountEntry::Cached(ref acc) => AccountEntry::Cached(acc.clone_all()), - AccountEntry::Killed => AccountEntry::Killed, - AccountEntry::Missing => AccountEntry::Missing, + // Create a new account entry and mark it as dirty + fn new_dirty(account: Option) -> AccountEntry { + AccountEntry { + account: account, + state: AccountState::Dirty, + } + } + + // Create a new account entry and mark it as clean + fn new_clean(account: Option) -> AccountEntry { + AccountEntry { + account: account, + state: AccountState::Clean, } } } @@ -90,6 +118,9 @@ impl AccountEntry { /// locally from previous commits. Global cache reflects the database /// state and never contains any changes. /// +/// Cache items contains account data, or the flag that account does not exist +/// and modification state (see `AccountState`) +/// /// Account data can be in the following cache states: /// * In global but not local - something that was queried from the database, /// but never modified @@ -103,6 +134,12 @@ impl AccountEntry { /// then global state cache. If data is not found in any of the caches /// it is loaded from the DB to the local cache. /// +/// **** IMPORTANT ************************************************************* +/// All the modifications to the account data must set the `Dirty` state in the +/// `AccountEntry`. This is done in `require` and `require_or_from`. So just +/// use that. +/// **************************************************************************** +/// /// Upon destruction all the local cache data merged into the global cache. /// The merge might be rejected if current state is non-canonical. pub struct State { @@ -190,7 +227,7 @@ impl State { }, None => { match self.cache.borrow_mut().entry(k) { - ::std::collections::hash_map::Entry::Occupied(e) => { + Entry::Occupied(e) => { if e.get().is_dirty() { e.remove(); } @@ -204,10 +241,17 @@ impl State { } fn insert_cache(&self, address: &Address, account: AccountEntry) { - if let Some(ref mut snapshot) = self.snapshots.borrow_mut().last_mut() { - if !snapshot.contains_key(address) { - snapshot.insert(address.clone(), self.cache.borrow_mut().insert(address.clone(), account)); - return; + // Dirty account which is not in the cache means this is a new account. + // It goes directly into the snapshot as there's nothing to rever to. + // + // In all other cases account is read as clean first, and after that made + // dirty in and added to the snapshot with `note_cache`. + if account.is_dirty() { + if let Some(ref mut snapshot) = self.snapshots.borrow_mut().last_mut() { + if !snapshot.contains_key(address) { + snapshot.insert(address.clone(), self.cache.borrow_mut().insert(address.clone(), account)); + return; + } } } self.cache.borrow_mut().insert(address.clone(), account); @@ -216,7 +260,7 @@ impl State { fn note_cache(&self, address: &Address) { if let Some(ref mut snapshot) = self.snapshots.borrow_mut().last_mut() { if !snapshot.contains_key(address) { - snapshot.insert(address.clone(), self.cache.borrow().get(address).map(AccountEntry::clone_for_snapshot)); + snapshot.insert(address.clone(), self.cache.borrow().get(address).map(AccountEntry::clone_dirty)); } } } @@ -235,12 +279,12 @@ impl State { /// Create a new contract at address `contract`. If there is already an account at the address /// it will have its code reset, ready for `init_code()`. pub fn new_contract(&mut self, contract: &Address, balance: U256) { - self.insert_cache(contract, AccountEntry::Cached(Account::new_contract(balance, self.account_start_nonce))); + self.insert_cache(contract, AccountEntry::new_dirty(Some(Account::new_contract(balance, self.account_start_nonce)))); } /// Remove an existing account. pub fn kill_account(&mut self, account: &Address) { - self.insert_cache(account, AccountEntry::Killed); + self.insert_cache(account, AccountEntry::new_dirty(None)); } /// Determine whether an account exists. @@ -272,8 +316,8 @@ impl State { let local_cache = self.cache.borrow_mut(); let mut local_account = None; if let Some(maybe_acc) = local_cache.get(address) { - match *maybe_acc { - AccountEntry::Cached(ref account) => { + match maybe_acc.account { + Some(ref account) => { if let Some(value) = account.cached_storage_at(key) { return value; } else { @@ -292,7 +336,7 @@ impl State { return result; } if let Some(ref mut acc) = local_account { - if let AccountEntry::Cached(ref account) = **acc { + if let Some(ref account) = acc.account { let account_db = self.factories.accountdb.readonly(self.db.as_hashdb(), account.address_hash(address)); return account.storage_at(account_db.as_hashdb(), key) } else { @@ -314,10 +358,7 @@ impl State { let account_db = self.factories.accountdb.readonly(self.db.as_hashdb(), a.address_hash(address)); a.storage_at(account_db.as_hashdb(), key) }); - match maybe_acc { - Some(account) => self.insert_cache(address, AccountEntry::Cached(account)), - None => self.insert_cache(address, AccountEntry::Missing), - } + self.insert_cache(address, AccountEntry::new_clean(maybe_acc)); r } @@ -341,13 +382,17 @@ impl State { /// Add `incr` to the balance of account `a`. pub fn add_balance(&mut self, a: &Address, incr: &U256) { trace!(target: "state", "add_balance({}, {}): {}", a, incr, self.balance(a)); - self.require(a, false).add_balance(incr); + if !incr.is_zero() || !self.exists(a) { + self.require(a, false).add_balance(incr); + } } /// Subtract `decr` from the balance of account `a`. pub fn sub_balance(&mut self, a: &Address, decr: &U256) { trace!(target: "state", "sub_balance({}, {}): {}", a, decr, self.balance(a)); - self.require(a, false).sub_balance(decr); + if !decr.is_zero() || !self.exists(a) { + self.require(a, false).sub_balance(decr); + } } /// Subtracts `by` from the balance of `from` and adds it to that of `to`. @@ -363,7 +408,9 @@ impl State { /// Mutate storage of account `a` so that it is `value` for `key`. pub fn set_storage(&mut self, a: &Address, key: H256, value: H256) { - self.require(a, false).set_storage(key, value) + if self.storage_at(a, &key) != value { + self.require(a, false).set_storage(key, value) + } } /// Initialise the code of account `a` so that it is `code`. @@ -404,10 +451,9 @@ impl State { accounts: &mut HashMap ) -> Result<(), Error> { // first, commit the sub trees. - // TODO: is this necessary or can we dispense with the `ref mut a` for just `a`? - for (address, ref mut a) in accounts.iter_mut() { - match a { - &mut&mut AccountEntry::Cached(ref mut account) if account.is_dirty() => { + for (address, ref mut a) in accounts.iter_mut().filter(|&(_, ref a)| a.is_dirty()) { + match a.account { + Some(ref mut account) => { db.note_account_bloom(&address); let addr_hash = account.address_hash(address); let mut account_db = factories.accountdb.create(db.as_hashdb_mut(), addr_hash); @@ -420,17 +466,15 @@ impl State { { let mut trie = factories.trie.from_existing(db.as_hashdb_mut(), root).unwrap(); - for (address, ref mut a) in accounts.iter_mut() { - match **a { - AccountEntry::Cached(ref mut account) if account.is_dirty() => { - account.set_clean(); + for (address, ref mut a) in accounts.iter_mut().filter(|&(_, ref a)| a.is_dirty()) { + a.state = AccountState::Commited; + match a.account { + Some(ref mut account) => { try!(trie.insert(address, &account.rlp())); }, - AccountEntry::Killed => { + None => { try!(trie.remove(address)); - **a = AccountEntry::Missing; }, - _ => {}, } } } @@ -440,18 +484,9 @@ impl State { fn commit_cache(&mut self) { let mut addresses = self.cache.borrow_mut(); - for (address, a) in addresses.drain() { - match a { - AccountEntry::Cached(account) => { - if !account.is_dirty() { - self.db.cache_account(address, Some(account)); - } - }, - AccountEntry::Missing => { - self.db.cache_account(address, None); - }, - _ => {}, - } + trace!("Committing cache {:?} entries", addresses.len()); + for (address, a) in addresses.drain().filter(|&(_, ref a)| !a.is_dirty()) { + self.db.cache_account(address, a.account); } } @@ -473,7 +508,7 @@ impl State { assert!(self.snapshots.borrow().is_empty()); for (add, acc) in accounts.drain().into_iter() { self.db.note_account_bloom(&add); - self.cache.borrow_mut().insert(add, AccountEntry::Cached(Account::from_pod(acc))); + self.cache.borrow_mut().insert(add, AccountEntry::new_dirty(Some(Account::from_pod(acc)))); } } @@ -483,7 +518,7 @@ impl State { // TODO: handle database rather than just the cache. // will need fat db. PodState::from(self.cache.borrow().iter().fold(BTreeMap::new(), |mut m, (add, opt)| { - if let AccountEntry::Cached(ref acc) = *opt { + if let Some(ref acc) = opt.account { m.insert(add.clone(), PodAccount::from_account(acc)); } m @@ -530,7 +565,7 @@ impl State { where F: Fn(Option<&Account>) -> U { // check local cache first if let Some(ref mut maybe_acc) = self.cache.borrow_mut().get_mut(a) { - if let AccountEntry::Cached(ref mut account) = **maybe_acc { + if let Some(ref mut account) = maybe_acc.account { let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), account.address_hash(a)); Self::update_account_cache(require, account, accountdb.as_hashdb()); return f(Some(account)); @@ -563,8 +598,8 @@ impl State { } let r = f(maybe_acc.as_ref()); match maybe_acc { - Some(account) => self.insert_cache(a, AccountEntry::Cached(account)), - None => self.insert_cache(a, AccountEntry::Missing), + Some(account) => self.insert_cache(a, AccountEntry::new_clean(Some(account))), + None => self.insert_cache(a, AccountEntry::new_clean(None)), } r } @@ -584,36 +619,39 @@ impl State { let contains_key = self.cache.borrow().contains_key(a); if !contains_key { match self.db.get_cached_account(a) { - Some(Some(acc)) => self.insert_cache(a, AccountEntry::Cached(acc)), - Some(None) => self.insert_cache(a, AccountEntry::Missing), + Some(Some(acc)) => self.insert_cache(a, AccountEntry::new_clean(Some(acc))), + Some(None) => self.insert_cache(a, AccountEntry::new_clean(None)), None => { let maybe_acc = if self.db.check_account_bloom(a) { let db = self.factories.trie.readonly(self.db.as_hashdb(), &self.root).expect(SEC_TRIE_DB_UNWRAP_STR); let maybe_acc = match db.get(a) { - Ok(Some(acc)) => AccountEntry::Cached(Account::from_rlp(acc)), - Ok(None) => AccountEntry::Missing, + Ok(Some(acc)) => AccountEntry::new_clean(Some(Account::from_rlp(acc))), + Ok(None) => AccountEntry::new_clean(None), Err(e) => panic!("Potential DB corruption encountered: {}", e), }; maybe_acc } else { - AccountEntry::Missing + AccountEntry::new_clean(None) }; self.insert_cache(a, maybe_acc); } } - } else { - self.note_cache(a); } + self.note_cache(a); - match self.cache.borrow_mut().get_mut(a).unwrap() { - &mut AccountEntry::Cached(ref mut acc) => not_default(acc), - slot => *slot = AccountEntry::Cached(default()), + match &mut self.cache.borrow_mut().get_mut(a).unwrap().account { + &mut Some(ref mut acc) => not_default(acc), + slot => *slot = Some(default()), } + // at this point the account is guaranteed to be in the cache. RefMut::map(self.cache.borrow_mut(), |c| { - match c.get_mut(a).unwrap() { - &mut AccountEntry::Cached(ref mut account) => { + let mut entry = c.get_mut(a).unwrap(); + // set the dirty flag after changing account data. + entry.state = AccountState::Dirty; + match entry.account { + Some(ref mut account) => { if require_code { let addr_hash = account.address_hash(a); let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), addr_hash); @@ -638,7 +676,7 @@ impl Clone for State { let cache = { let mut cache: HashMap = HashMap::new(); for (key, val) in self.cache.borrow().iter() { - if let Some(entry) = val.clone_dirty() { + if let Some(entry) = val.clone_if_dirty() { cache.insert(key.clone(), entry); } } -- GitLab From a9391f91f705acd976113fa3d38098f88df6b825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 6 Oct 2016 10:20:05 +0200 Subject: [PATCH 007/393] Increase size of transaction queue by default --- ethcore/src/miner/miner.rs | 2 +- parity/cli/config.full.toml | 2 +- parity/cli/mod.rs | 4 ++-- parity/configuration.rs | 2 +- parity/params.rs | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 77183d4521..38fc199cd4 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -81,7 +81,7 @@ impl Default for MinerOptions { reseal_on_external_tx: false, reseal_on_own_tx: true, tx_gas_limit: !U256::zero(), - tx_queue_size: 1024, + tx_queue_size: 2048, pending_set: PendingSet::AlwaysQueue, reseal_min_period: Duration::from_secs(2), work_queue_size: 20, diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index a411e6767b..5b47e11844 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -67,7 +67,7 @@ usd_per_eth = "auto" price_update_period = "hourly" gas_floor_target = "4700000" gas_cap = "6283184" -tx_queue_size = 1024 +tx_queue_size = 2048 tx_gas_limit = "6283184" extra_data = "Parity" remove_solved = false diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 082dbe8e4e..8044032eb6 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -193,7 +193,7 @@ usage! { or |c: &Config| otry!(c.mining).gas_cap.clone(), flag_extra_data: Option = None, or |c: &Config| otry!(c.mining).extra_data.clone().map(Some), - flag_tx_queue_size: usize = 1024usize, + flag_tx_queue_size: usize = 2048usize, or |c: &Config| otry!(c.mining).tx_queue_size.clone(), flag_remove_solved: bool = false, or |c: &Config| otry!(c.mining).remove_solved.clone(), @@ -522,7 +522,7 @@ mod tests { flag_gas_floor_target: "4700000".into(), flag_gas_cap: "6283184".into(), flag_extra_data: Some("Parity".into()), - flag_tx_queue_size: 1024usize, + flag_tx_queue_size: 2048usize, flag_remove_solved: false, flag_notify_work: Some("http://localhost:3001".into()), diff --git a/parity/configuration.rs b/parity/configuration.rs index 811ba6097f..4503b0f2f6 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -125,7 +125,7 @@ impl Configuration { ImportFromGethAccounts { to: dirs.keys, testnet: self.args.flag_testnet - } + } ); Cmd::Account(account_cmd) } else if self.args.cmd_wallet { diff --git a/parity/params.rs b/parity/params.rs index faba029b2b..ee3038ebfa 100644 --- a/parity/params.rs +++ b/parity/params.rs @@ -206,7 +206,7 @@ impl Default for MinerExtras { extra_data: version_data(), gas_floor_target: U256::from(4_700_000), gas_ceil_target: U256::from(6_283_184), - transactions_limit: 1024, + transactions_limit: 2048, } } } -- GitLab From b1ab0d0cbfc468d38f52fe6fedbde363be1bfca3 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 6 Oct 2016 11:14:05 +0200 Subject: [PATCH 008/393] EVM optimization (#2487) --- ethcore/src/evm/interpreter/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ethcore/src/evm/interpreter/mod.rs b/ethcore/src/evm/interpreter/mod.rs index fdf99876ad..887f37cefd 100644 --- a/ethcore/src/evm/interpreter/mod.rs +++ b/ethcore/src/evm/interpreter/mod.rs @@ -116,11 +116,11 @@ impl evm::Evm for Interpreter { let instruction = code[reader.position]; reader.position += 1; - let info = infos[instruction as usize]; - try!(self.verify_instruction(ext, instruction, &info, &stack)); + let info = &infos[instruction as usize]; + try!(self.verify_instruction(ext, instruction, info, &stack)); // Calculate gas cost - let (gas_cost, mem_gas, mem_size) = try!(gasometer.get_gas_cost_mem(ext, instruction, &info, &stack, self.mem.size())); + let (gas_cost, mem_gas, mem_size) = try!(gasometer.get_gas_cost_mem(ext, instruction, info, &stack, self.mem.size())); // TODO: make compile-time removable if too much of a performance hit. let trace_executed = ext.trace_prepare_execute(reader.position - 1, instruction, &gas_cost.as_u256()); @@ -129,7 +129,7 @@ impl evm::Evm for Interpreter { gasometer.current_mem_gas = mem_gas; gasometer.current_gas = gasometer.current_gas - gas_cost; - evm_debug!({ informant.before_instruction(reader.position, instruction, &info, &gasometer.current_gas, &stack) }); + evm_debug!({ informant.before_instruction(reader.position, instruction, info, &gasometer.current_gas, &stack) }); let (mem_written, store_written) = match trace_executed { true => (Self::mem_written(instruction, &stack), Self::store_written(instruction, &stack)), -- GitLab From e380955c341f53c1192ed44ce8a4b4e4f9d9161c Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 6 Oct 2016 15:24:47 +0200 Subject: [PATCH 009/393] RocksDB version bump (#2492) --- Cargo.lock | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb91080c23..04bc46c9c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -240,7 +240,7 @@ version = "0.5.4" source = "git+https://github.com/ethcore/rust-secp256k1#a9a0b1be1f39560ca86e8fc8e55e205a753ff25c" dependencies = [ "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -674,8 +674,11 @@ dependencies = [ [[package]] name = "gcc" -version = "0.3.28" +version = "0.3.35" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "glob" @@ -936,7 +939,7 @@ name = "miniz-sys" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1022,7 +1025,7 @@ name = "nanomsg-sys" version = "0.5.0" source = "git+https://github.com/ethcore/nanomsg.rs.git#c40fe442c9afaea5b38009a3d992ca044dcceb00" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1402,7 +1405,7 @@ dependencies = [ [[package]] name = "rocksdb" version = "0.4.5" -source = "git+https://github.com/ethcore/rust-rocksdb#485dd747a2c9a9f910fc8ac696fc9edf5fa22aa3" +source = "git+https://github.com/ethcore/rust-rocksdb#ffc7c82380fe8569f85ae6743f7f620af2d4a679" dependencies = [ "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb-sys 0.3.0 (git+https://github.com/ethcore/rust-rocksdb)", @@ -1411,9 +1414,9 @@ dependencies = [ [[package]] name = "rocksdb-sys" version = "0.3.0" -source = "git+https://github.com/ethcore/rust-rocksdb#485dd747a2c9a9f910fc8ac696fc9edf5fa22aa3" +source = "git+https://github.com/ethcore/rust-rocksdb#ffc7c82380fe8569f85ae6743f7f620af2d4a679" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1444,7 +1447,7 @@ name = "rust-crypto" version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1537,7 +1540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "sha3" version = "0.1.0" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1926,7 +1929,7 @@ dependencies = [ "checksum eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)" = "" "checksum ethabi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0c53453517f620847be51943db329276ae52f2e210cfc659e81182864be2f" "checksum flate2 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "3eeb481e957304178d2e782f2da1257f1434dfecbae883bafb61ada2a9fea3bb" -"checksum gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)" = "3da3a2cbaeb01363c8e3704fd9fd0eb2ceb17c6f27abd4c1ef040fb57d20dc79" +"checksum gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "91ecd03771effb0c968fd6950b37e89476a578aaf1c70297d8e92b6516ec3312" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" "checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1" "checksum heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "abb306abb8d398e053cfb1b3e7b72c2f580be048b85745c52652954f8ad1439c" -- GitLab From 6c1b2fbed5cd41333ecbdb449a64e95f141cbd2f Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 6 Oct 2016 15:54:05 +0200 Subject: [PATCH 010/393] Preserve cache on reverting the snapshot (#2488) * Preserve cache on reverting the snapshot * Renamed merge_with into replace_with * Renamed and documented snapshotting methods --- ethcore/src/executive.rs | 10 ++--- ethcore/src/state/account.rs | 2 +- ethcore/src/state/mod.rs | 71 ++++++++++++++++++++++++++++-------- ethcore/src/state_db.rs | 2 +- 4 files changed, 63 insertions(+), 22 deletions(-) diff --git a/ethcore/src/executive.rs b/ethcore/src/executive.rs index b0b0b58c85..e94838465b 100644 --- a/ethcore/src/executive.rs +++ b/ethcore/src/executive.rs @@ -265,7 +265,7 @@ impl<'a> Executive<'a> { let cost = self.engine.cost_of_builtin(¶ms.code_address, data); if cost <= params.gas { self.engine.execute_builtin(¶ms.code_address, data, &mut output); - self.state.clear_snapshot(); + self.state.discard_snapshot(); // trace only top level calls to builtins to avoid DDoS attacks if self.depth == 0 { @@ -285,7 +285,7 @@ impl<'a> Executive<'a> { Ok(params.gas - cost) } else { // just drain the whole gas - self.state.revert_snapshot(); + self.state.revert_to_snapshot(); tracer.trace_failed_call(trace_info, vec![], evm::Error::OutOfGas.into()); @@ -331,7 +331,7 @@ impl<'a> Executive<'a> { res } else { // otherwise it's just a basic transaction, only do tracing, if necessary. - self.state.clear_snapshot(); + self.state.discard_snapshot(); tracer.trace_call(trace_info, U256::zero(), trace_output, vec![]); Ok(params.gas) @@ -473,10 +473,10 @@ impl<'a> Executive<'a> { | Err(evm::Error::BadInstruction {.. }) | Err(evm::Error::StackUnderflow {..}) | Err(evm::Error::OutOfStack {..}) => { - self.state.revert_snapshot(); + self.state.revert_to_snapshot(); }, Ok(_) | Err(evm::Error::Internal) => { - self.state.clear_snapshot(); + self.state.discard_snapshot(); substate.accrue(un_substate); } } diff --git a/ethcore/src/state/account.rs b/ethcore/src/state/account.rs index c66bc7f1e6..79a9e8ef11 100644 --- a/ethcore/src/state/account.rs +++ b/ethcore/src/state/account.rs @@ -394,7 +394,7 @@ impl Account { /// Replace self with the data from other account merging storage cache. /// Basic account data and all modifications are overwritten /// with new values. - pub fn merge_with(&mut self, other: Account) { + pub fn overwrite_with(&mut self, other: Account) { self.balance = other.balance; self.nonce = other.nonce; self.storage_root = other.storage_root; diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index 2d8f0c1cc7..2b5d1c23cd 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -93,21 +93,35 @@ impl AccountEntry { } } - // Create a new account entry and mark it as dirty + // Create a new account entry and mark it as dirty. fn new_dirty(account: Option) -> AccountEntry { AccountEntry { account: account, state: AccountState::Dirty, } } - - // Create a new account entry and mark it as clean + + // Create a new account entry and mark it as clean. fn new_clean(account: Option) -> AccountEntry { AccountEntry { account: account, state: AccountState::Clean, } } + + // Replace data with another entry but preserve storage cache. + fn overwrite_with(&mut self, other: AccountEntry) { + self.state = other.state; + match other.account { + Some(acc) => match self.account { + Some(ref mut ours) => { + ours.overwrite_with(acc); + }, + None => {}, + }, + None => self.account = None, + } + } } /// Representation of the entire state of all accounts in the system. @@ -142,10 +156,24 @@ impl AccountEntry { /// /// Upon destruction all the local cache data merged into the global cache. /// The merge might be rejected if current state is non-canonical. +/// +/// State snapshotting. +/// +/// A new snapshot can be created with `snapshot()`. Snapshots can be +/// created in a hierarchy. +/// When a snapshot is active all changes are applied directly into +/// `cache` and the original value is copied into an active snapshot. +/// Reverting a snapshot with `revert_to_snapshot` involves copying +/// original values from the latest snapshot back into `cache`. The code +/// takes care not to overwrite cached storage while doing that. +/// Snapshot can be discateded with `discard_snapshot`. All of the orignal +/// backed-up values are moved into a parent snapshot (if any). +/// pub struct State { db: StateDB, root: H256, cache: RefCell>, + // The original account is preserved in snapshots: RefCell>>>, account_start_nonce: U256, factories: Factories, @@ -199,31 +227,44 @@ impl State { Ok(state) } - /// Create a recoverable snaphot of this state + /// Create a recoverable snaphot of this state. pub fn snapshot(&mut self) { self.snapshots.borrow_mut().push(HashMap::new()); } - /// Merge last snapshot with previous - pub fn clear_snapshot(&mut self) { + /// Merge last snapshot with previous. + pub fn discard_snapshot(&mut self) { // merge with previous snapshot let last = self.snapshots.borrow_mut().pop(); if let Some(mut snapshot) = last { if let Some(ref mut prev) = self.snapshots.borrow_mut().last_mut() { - for (k, v) in snapshot.drain() { - prev.entry(k).or_insert(v); + if prev.is_empty() { + **prev = snapshot; + } else { + for (k, v) in snapshot.drain() { + prev.entry(k).or_insert(v); + } } } } } - /// Revert to snapshot - pub fn revert_snapshot(&mut self) { + /// Revert to the last snapshot and discard it. + pub fn revert_to_snapshot(&mut self) { if let Some(mut snapshot) = self.snapshots.borrow_mut().pop() { for (k, v) in snapshot.drain() { match v { Some(v) => { - self.cache.borrow_mut().insert(k, v); + match self.cache.borrow_mut().entry(k) { + Entry::Occupied(mut e) => { + // Merge snapshotted changes back into the main account + // storage preserving the cache. + e.get_mut().overwrite_with(v); + }, + Entry::Vacant(e) => { + e.insert(v); + } + } }, None => { match self.cache.borrow_mut().entry(k) { @@ -1717,12 +1758,12 @@ fn snapshot_basic() { state.snapshot(); state.add_balance(&a, &U256::from(69u64)); assert_eq!(state.balance(&a), U256::from(69u64)); - state.clear_snapshot(); + state.discard_snapshot(); assert_eq!(state.balance(&a), U256::from(69u64)); state.snapshot(); state.add_balance(&a, &U256::from(1u64)); assert_eq!(state.balance(&a), U256::from(70u64)); - state.revert_snapshot(); + state.revert_to_snapshot(); assert_eq!(state.balance(&a), U256::from(69u64)); } @@ -1735,9 +1776,9 @@ fn snapshot_nested() { state.snapshot(); state.add_balance(&a, &U256::from(69u64)); assert_eq!(state.balance(&a), U256::from(69u64)); - state.clear_snapshot(); + state.discard_snapshot(); assert_eq!(state.balance(&a), U256::from(69u64)); - state.revert_snapshot(); + state.revert_to_snapshot(); assert_eq!(state.balance(&a), U256::from(0)); } diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 7a12068017..51c5918373 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -191,7 +191,7 @@ impl StateDB { for (address, account) in self.cache_overlay.drain(..) { if let Some(&mut Some(ref mut existing)) = cache.accounts.get_mut(&address) { if let Some(new) = account { - existing.merge_with(new); + existing.overwrite_with(new); continue; } } -- GitLab From 75d91742941201909eba2c7c5e2b5f23482bed6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 6 Oct 2016 18:40:40 +0200 Subject: [PATCH 011/393] Fixing penalization in future (#2499) --- ethcore/src/miner/transaction_queue.rs | 41 +++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index 75a66358ad..02e569cf2e 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -636,7 +636,7 @@ impl TransactionQueue { }; for k in nonces_from_sender { let order = self.future.drop(&sender, &k).unwrap(); - self.current.insert(sender, k, order.penalize()); + self.future.insert(sender, k, order.penalize()); } } @@ -735,6 +735,15 @@ impl TransactionQueue { .collect() } + #[cfg(test)] + fn future_transactions(&self) -> Vec { + self.future.by_priority + .iter() + .map(|t| self.by_hash.get(&t.hash).expect("All transactions in `current` and `future` are always included in `by_hash`")) + .map(|t| t.transaction.clone()) + .collect() + } + /// Returns hashes of all transactions from current, ordered by priority. pub fn pending_hashes(&self) -> Vec { self.current.by_priority @@ -1463,6 +1472,36 @@ mod test { assert_eq!(top.len(), 2); } + #[test] + fn should_penalize_transactions_from_sender_in_future() { + // given + let prev_nonce = |a: &Address| AccountDetails{ nonce: default_account_details(a).nonce - U256::one(), balance: !U256::zero() }; + let mut txq = TransactionQueue::new(); + // txa, txb - slightly bigger gas price to have consistent ordering + let (txa, txb) = new_tx_pair_default(1.into(), 0.into()); + let (tx1, tx2) = new_tx_pair_with_gas_price_increment(3.into()); + + // insert everything + txq.add(txa.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + txq.add(txb.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + + assert_eq!(txq.status().future, 4); + + // when + txq.penalize(&tx1.hash()); + + // then + let top = txq.future_transactions(); + assert_eq!(top[0], txa); + assert_eq!(top[1], txb); + assert_eq!(top[2], tx1); + assert_eq!(top[3], tx2); + assert_eq!(top.len(), 4); + } + + #[test] fn should_penalize_transactions_from_sender() { // given -- GitLab From ac0ae2442fb69eeed46efdd04aa2c4c18101fc3e Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 6 Oct 2016 19:42:54 +0300 Subject: [PATCH 012/393] Adjustable stack size for EVM (#2483) * stack size for io workers & evm threshold * rust way to remember stack size * right value * 24kb size * some stack reduction --- ethcore/src/executive.rs | 18 +++++++++++------- util/io/src/lib.rs | 2 ++ util/io/src/worker.rs | 13 ++++++++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ethcore/src/executive.rs b/ethcore/src/executive.rs index e94838465b..f3186d6dd9 100644 --- a/ethcore/src/executive.rs +++ b/ethcore/src/executive.rs @@ -25,10 +25,10 @@ use trace::{FlatTrace, Tracer, NoopTracer, ExecutiveTracer, VMTrace, VMTracer, E use crossbeam; pub use types::executed::{Executed, ExecutionResult}; -/// Max depth to avoid stack overflow (when it's reached we start a new thread with VM) +/// Roughly estimate what stack size each level of evm depth will use /// TODO [todr] We probably need some more sophisticated calculations here (limit on my machine 132) /// Maybe something like here: `https://github.com/ethereum/libethereum/blob/4db169b8504f2b87f7d5a481819cfb959fc65f6c/libethereum/ExtVM.cpp` -const MAX_VM_DEPTH_FOR_THREAD: usize = 64; +const STACK_SIZE_PER_DEPTH: usize = 24*1024; /// Returns new address created from address and given nonce. pub fn contract_address(address: &Address, nonce: &U256) -> Address { @@ -149,12 +149,13 @@ impl<'a> Executive<'a> { // TODO: we might need bigints here, or at least check overflows. let balance = self.state.balance(&sender); - let gas_cost = U512::from(t.gas) * U512::from(t.gas_price); + let gas_cost = t.gas.full_mul(t.gas_price); let total_cost = U512::from(t.value) + gas_cost; // avoid unaffordable transactions - if U512::from(balance) < total_cost { - return Err(From::from(ExecutionError::NotEnoughCash { required: total_cost, got: U512::from(balance) })); + let balance512 = U512::from(balance); + if balance512 < total_cost { + return Err(From::from(ExecutionError::NotEnoughCash { required: total_cost, got: balance512 })); } // NOTE: there can be no invalid transactions from this point. @@ -212,8 +213,11 @@ impl<'a> Executive<'a> { tracer: &mut T, vm_tracer: &mut V ) -> evm::Result where T: Tracer, V: VMTracer { + + let depth_threshold = ::io::LOCAL_STACK_SIZE.with(|sz| sz.get() / STACK_SIZE_PER_DEPTH); + // Ordinary execution - keep VM in same thread - if (self.depth + 1) % MAX_VM_DEPTH_FOR_THREAD != 0 { + if (self.depth + 1) % depth_threshold != 0 { let vm_factory = self.vm_factory; let mut ext = self.as_externalities(OriginInfo::from(¶ms), unconfirmed_substate, output_policy, tracer, vm_tracer); trace!(target: "executive", "ext.schedule.have_delegate_call: {}", ext.schedule().have_delegate_call); @@ -413,7 +417,7 @@ impl<'a> Executive<'a> { // real ammount to refund let gas_left_prerefund = match result { Ok(x) => x, _ => 0.into() }; - let refunded = cmp::min(refunds_bound, (t.gas - gas_left_prerefund) / U256::from(2)); + let refunded = cmp::min(refunds_bound, (t.gas - gas_left_prerefund) >> 1); let gas_left = gas_left_prerefund + refunded; let gas_used = t.gas - gas_left; diff --git a/util/io/src/lib.rs b/util/io/src/lib.rs index b2a16e19bb..082192dfaf 100644 --- a/util/io/src/lib.rs +++ b/util/io/src/lib.rs @@ -68,6 +68,8 @@ mod panics; use mio::{EventLoop, Token}; use std::fmt; +pub use worker::LOCAL_STACK_SIZE; + #[derive(Debug)] /// IO Error pub enum IoError { diff --git a/util/io/src/worker.rs b/util/io/src/worker.rs index 0176c467ca..f4f63919f1 100644 --- a/util/io/src/worker.rs +++ b/util/io/src/worker.rs @@ -22,9 +22,19 @@ use crossbeam::sync::chase_lev; use service::{HandlerId, IoChannel, IoContext}; use IoHandler; use panics::*; +use std::cell::Cell; use std::sync::{Condvar as SCondvar, Mutex as SMutex}; +const STACK_SIZE: usize = 16*1024*1024; + +thread_local! { + /// Stack size + /// Should be modified if it is changed in Rust since it is no way + /// to know or get it + pub static LOCAL_STACK_SIZE: Cell = Cell::new(::std::env::var("RUST_MIN_STACK").ok().and_then(|s| s.parse().ok()).unwrap_or(2 * 1024 * 1024)); +} + pub enum WorkType { Readable, Writable, @@ -66,8 +76,9 @@ impl Worker { deleting: deleting.clone(), wait_mutex: wait_mutex.clone(), }; - worker.thread = Some(thread::Builder::new().name(format!("IO Worker #{}", index)).spawn( + worker.thread = Some(thread::Builder::new().stack_size(STACK_SIZE).name(format!("IO Worker #{}", index)).spawn( move || { + LOCAL_STACK_SIZE.with(|val| val.set(STACK_SIZE)); panic_handler.catch_panic(move || { Worker::work_loop(stealer, channel.clone(), wait, wait_mutex.clone(), deleting) }).unwrap() -- GitLab From 0c7a28779d0e43a9beda8a662e86a2fcfa934375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 6 Oct 2016 20:35:31 +0200 Subject: [PATCH 013/393] Fixing error message for transactions (#2496) --- rpc/src/v1/helpers/errors.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 885ec08f0b..48a3eeb1ff 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -189,13 +189,13 @@ pub fn from_transaction_error(error: EthcoreError) -> Error { AlreadyImported => "Transaction with the same hash was already imported.".into(), Old => "Transaction nonce is too low. Try incrementing the nonce.".into(), TooCheapToReplace => { - "Transaction fee is too low. There is another transaction with same nonce in the queue. Try increasing the fee or incrementing the nonce.".into() + "Transaction gas price is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce.".into() }, LimitReached => { "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.".into() }, InsufficientGasPrice { minimal, got } => { - format!("Transaction fee is too low. It does not satisfy your node's minimal fee (minimal: {}, got: {}). Try increasing the fee.", minimal, got) + format!("Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: {}, got: {}). Try increasing the gas price.", minimal, got) }, InsufficientBalance { balance, cost } => { format!("Insufficient funds. Account you try to send transaction from does not have enough funds. Required {} and got: {}.", cost, balance) -- GitLab From 745a50dfdfb9cc148189bc530a0bc2648fa7ca59 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 7 Oct 2016 00:28:42 +0200 Subject: [PATCH 014/393] configurable state cache size --- ethcore/src/client/client.rs | 5 +-- ethcore/src/client/config.rs | 4 ++- ethcore/src/client/test_client.rs | 2 +- ethcore/src/evm/interpreter/shared_cache.rs | 4 +-- ethcore/src/state_db.rs | 27 ++++++++++---- ethcore/src/tests/helpers.rs | 2 +- parity/cache.rs | 39 +++++++++++++-------- parity/cli/config.full.toml | 1 + parity/cli/config.toml | 1 + parity/cli/mod.rs | 5 +++ parity/cli/usage.txt | 2 ++ parity/configuration.rs | 7 +++- parity/helpers.rs | 1 + 13 files changed, 71 insertions(+), 29 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 6b1cc0c656..3e9a306164 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -177,7 +177,7 @@ impl Client { }; let journal_db = journaldb::new(db.clone(), config.pruning, ::db::COL_STATE); - let mut state_db = StateDB::new(journal_db); + let mut state_db = StateDB::new(journal_db, config.state_cache_size); if state_db.journal_db().is_empty() && try!(spec.ensure_db_good(&mut state_db)) { let mut batch = DBTransaction::new(&db); try!(state_db.commit(&mut batch, 0, &spec.genesis_header().hash(), None)); @@ -691,7 +691,8 @@ impl snapshot::DatabaseRestore for Client { let db = self.db.write(); try!(db.restore(new_db)); - *state_db = StateDB::new(journaldb::new(db.clone(), self.pruning, ::db::COL_STATE)); + let cache_size = state_db.cache_size(); + *state_db = StateDB::new(journaldb::new(db.clone(), self.pruning, ::db::COL_STATE), cache_size); *chain = Arc::new(BlockChain::new(self.config.blockchain.clone(), &[], db.clone())); *tracedb = TraceDB::new(self.config.tracing.clone(), db.clone(), chain.clone()); Ok(()) diff --git a/ethcore/src/client/config.rs b/ethcore/src/client/config.rs index 8cf54387b1..4894b54420 100644 --- a/ethcore/src/client/config.rs +++ b/ethcore/src/client/config.rs @@ -96,7 +96,7 @@ pub struct ClientConfig { pub pruning: journaldb::Algorithm, /// The name of the client instance. pub name: String, - /// State db cache-size if not default + /// RocksDB state column cache-size if not default pub db_cache_size: Option, /// State db compaction profile pub db_compaction: DatabaseCompactionProfile, @@ -106,6 +106,8 @@ pub struct ClientConfig { pub mode: Mode, /// Type of block verifier used by client. pub verifier_type: VerifierType, + /// State db cache-size. + pub state_cache_size: usize, } #[cfg(test)] diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index 11929294f4..27e9f9b5f9 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -289,7 +289,7 @@ pub fn get_temp_state_db() -> GuardedTempResult { let temp = RandomTempPath::new(); let db = Database::open(&DatabaseConfig::with_columns(NUM_COLUMNS), temp.as_str()).unwrap(); let journal_db = journaldb::new(Arc::new(db), journaldb::Algorithm::EarlyMerge, COL_STATE); - let state_db = StateDB::new(journal_db); + let state_db = StateDB::new(journal_db, 1024 * 1024); GuardedTempResult { _temp: temp, result: Some(state_db) diff --git a/ethcore/src/evm/interpreter/shared_cache.rs b/ethcore/src/evm/interpreter/shared_cache.rs index 76360138b2..922179b0bf 100644 --- a/ethcore/src/evm/interpreter/shared_cache.rs +++ b/ethcore/src/evm/interpreter/shared_cache.rs @@ -23,13 +23,13 @@ use super::super::instructions; const CACHE_CODE_ITEMS: usize = 4096; -/// GLobal cache for EVM interpreter +/// Global cache for EVM interpreter pub struct SharedCache { jump_destinations: Mutex>> } impl SharedCache { - /// Get jump destincations bitmap for a contract. + /// Get jump destinations bitmap for a contract. pub fn jump_destinations(&self, code_hash: &H256, code: &[u8]) -> Arc { if code_hash == &SHA3_EMPTY { return Self::find_jump_destinations(code); diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 51c5918373..2b67dc2909 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -24,8 +24,6 @@ use bloom_journal::{Bloom, BloomJournal}; use db::COL_ACCOUNT_BLOOM; use byteorder::{LittleEndian, ByteOrder}; -const STATE_CACHE_ITEMS: usize = 65536; - pub const ACCOUNT_BLOOM_SPACE: usize = 1048576; pub const DEFAULT_ACCOUNT_PRESET: usize = 1000000; @@ -33,6 +31,8 @@ pub const ACCOUNT_BLOOM_HASHCOUNT_KEY: &'static [u8] = b"account_hash_count"; struct AccountCache { /// DB Account cache. `None` indicates that account is known to be missing. + // When changing the type of the values here, be sure to update `mem_used` and + // `new`. accounts: LruCache>, } @@ -48,19 +48,26 @@ pub struct StateDB { cache_overlay: Vec<(Address, Option)>, is_canon: bool, account_bloom: Arc>, + cache_size: usize, } impl StateDB { - /// Create a new instance wrapping `JournalDB` - pub fn new(db: Box) -> StateDB { + /// Create a new instance wrapping `JournalDB` and the maximum allowed size + /// of the LRU cache in bytes. Actual used memory may (read: will) be higher due to bookkeeping. + // TODO: make the cache size actually accurate by moving the account storage cache + // into the `AccountCache` structure as its own `LruCache<(Address, H256), H256>`. + pub fn new(db: Box, cache_size: usize) -> StateDB { let bloom = Self::load_bloom(db.backing()); + let cache_items = cache_size / ::std::mem::size_of::>(); + StateDB { db: db, - account_cache: Arc::new(Mutex::new(AccountCache { accounts: LruCache::new(STATE_CACHE_ITEMS) })), + account_cache: Arc::new(Mutex::new(AccountCache { accounts: LruCache::new(cache_items) })), cache_overlay: Vec::new(), is_canon: false, account_bloom: Arc::new(Mutex::new(bloom)), + cache_size: cache_size, } } @@ -151,6 +158,7 @@ impl StateDB { cache_overlay: Vec::new(), is_canon: false, account_bloom: self.account_bloom.clone(), + cache_size: self.cache_size, } } @@ -162,6 +170,7 @@ impl StateDB { cache_overlay: Vec::new(), is_canon: true, account_bloom: self.account_bloom.clone(), + cache_size: self.cache_size, } } @@ -172,7 +181,8 @@ impl StateDB { /// Heap size used. pub fn mem_used(&self) -> usize { - self.db.mem_used() //TODO: + self.account_cache.lock().heap_size_of_children() + // TODO: account for LRU-cache overhead; this is a close approximation. + self.db.mem_used() + self.account_cache.lock().accounts.len() * ::std::mem::size_of::>() } /// Returns underlying `JournalDB`. @@ -228,5 +238,10 @@ impl StateDB { let mut cache = self.account_cache.lock(); cache.accounts.get_mut(a).map(|c| f(c.as_mut())) } + + /// Query how much memory is set aside for the accounts cache (in bytes). + pub fn cache_size(&self) -> usize { + self.cache_size + } } diff --git a/ethcore/src/tests/helpers.rs b/ethcore/src/tests/helpers.rs index acbf4e641e..787f90262c 100644 --- a/ethcore/src/tests/helpers.rs +++ b/ethcore/src/tests/helpers.rs @@ -346,7 +346,7 @@ pub fn get_temp_state() -> GuardedTempResult { pub fn get_temp_state_db_in(path: &Path) -> StateDB { let db = new_db(path.to_str().expect("Only valid utf8 paths for tests.")); let journal_db = journaldb::new(db.clone(), journaldb::Algorithm::EarlyMerge, COL_STATE); - StateDB::new(journal_db) + StateDB::new(journal_db, 5 * 1024 * 1024) } pub fn get_temp_state_in(path: &Path) -> State { diff --git a/parity/cache.rs b/parity/cache.rs index 12fe3f472e..f51e560a1a 100644 --- a/parity/cache.rs +++ b/parity/cache.rs @@ -21,15 +21,13 @@ const MIN_DB_CACHE_MB: u32 = 2; const MIN_BLOCK_QUEUE_SIZE_LIMIT_MB: u32 = 16; const DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB: u32 = 50; const DEFAULT_TRACE_CACHE_SIZE: u32 = 20; +const DEFAULT_STATE_CACHE_SIZE: u32 = 25; /// Configuration for application cache sizes. /// All values are represented in MB. #[derive(Debug, PartialEq)] pub struct CacheConfig { - /// Size of database cache set using option `set_block_cache_size_mb` - /// 50% is blockchain - /// 25% is tracing - /// 25% is state + /// Size of rocksDB cache. Almost all goes to the state column. db: u32, /// Size of blockchain cache. blockchain: u32, @@ -37,11 +35,13 @@ pub struct CacheConfig { queue: u32, /// Size of traces cache. traces: u32, + /// Size of the state cache. + state: u32, } impl Default for CacheConfig { fn default() -> Self { - CacheConfig::new(64, 8, DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB) + CacheConfig::new(64, 8, DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB, DEFAULT_STATE_CACHE_SIZE) } } @@ -49,26 +49,28 @@ impl CacheConfig { /// Creates new cache config with cumulative size equal `total`. pub fn new_with_total_cache_size(total: u32) -> Self { CacheConfig { - db: total * 7 / 8, - blockchain: total / 8, + db: total * 7 / 10, + blockchain: total / 10, queue: DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB, traces: DEFAULT_TRACE_CACHE_SIZE, + state: total * 2 / 10, } } /// Creates new cache config with gitven details. - pub fn new(db: u32, blockchain: u32, queue: u32) -> Self { + pub fn new(db: u32, blockchain: u32, queue: u32, state: u32) -> Self { CacheConfig { db: db, blockchain: blockchain, queue: queue, traces: DEFAULT_TRACE_CACHE_SIZE, + state: state, } } /// Size of db cache for blockchain. pub fn db_blockchain_cache_size(&self) -> u32 { - max(MIN_DB_CACHE_MB, self.blockchain / 4) + max(MIN_DB_CACHE_MB, self.db / 4) } /// Size of db cache for state. @@ -90,6 +92,11 @@ impl CacheConfig { pub fn traces(&self) -> u32 { self.traces } + + /// Size of the state cache. + pub fn state(&self) -> u32 { + self.state + } } #[cfg(test)] @@ -99,21 +106,23 @@ mod tests { #[test] fn test_cache_config_constructor() { let config = CacheConfig::new_with_total_cache_size(200); - assert_eq!(config.db, 175); - assert_eq!(config.blockchain(), 25); + assert_eq!(config.db, 140); + assert_eq!(config.blockchain(), 20); assert_eq!(config.queue(), 50); + assert_eq!(config.state(), 40); } #[test] fn test_cache_config_db_cache_sizes() { let config = CacheConfig::new_with_total_cache_size(400); - assert_eq!(config.db, 350); - assert_eq!(config.db_blockchain_cache_size(), 12); - assert_eq!(config.db_state_cache_size(), 262); + assert_eq!(config.db, 280); + assert_eq!(config.db_blockchain_cache_size(), 70); + assert_eq!(config.db_state_cache_size(), 210); } #[test] fn test_cache_config_default() { - assert_eq!(CacheConfig::default(), CacheConfig::new(64, 8, super::DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB)); + assert_eq!(CacheConfig::default(), + CacheConfig::new(64, 8, super::DEFAULT_BLOCK_QUEUE_SIZE_LIMIT_MB, super::DEFAULT_STATE_CACHE_SIZE)); } } diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index 5b47e11844..e11a26521f 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -79,6 +79,7 @@ pruning = "auto" cache_size_db = 64 cache_size_blocks = 8 cache_size_queue = 50 +cache_size_state = 25 cache_size = 128 # Overrides above caches with total size fast_and_loose = false db_compaction = "ssd" diff --git a/parity/cli/config.toml b/parity/cli/config.toml index a5ad55d403..cda1d4cb93 100644 --- a/parity/cli/config.toml +++ b/parity/cli/config.toml @@ -48,6 +48,7 @@ pruning = "fast" cache_size_db = 128 cache_size_blocks = 16 cache_size_queue = 100 +cache_size_state = 25 db_compaction = "ssd" fat_db = "off" diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 8044032eb6..06c9d4945c 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -211,6 +211,8 @@ usage! { or |c: &Config| otry!(c.footprint).cache_size_blocks.clone(), flag_cache_size_queue: u32 = 50u32, or |c: &Config| otry!(c.footprint).cache_size_queue.clone(), + flag_cache_size_state: u32 = 25u32, + or |c: &Config| otry!(c.footprint).cache_size_state.clone(), flag_cache_size: Option = None, or |c: &Config| otry!(c.footprint).cache_size.clone().map(Some), flag_fast_and_loose: bool = false, @@ -361,6 +363,7 @@ struct Footprint { cache_size_db: Option, cache_size_blocks: Option, cache_size_queue: Option, + cache_size_state: Option, db_compaction: Option, fat_db: Option, } @@ -532,6 +535,7 @@ mod tests { flag_cache_size_db: 64u32, flag_cache_size_blocks: 8u32, flag_cache_size_queue: 50u32, + flag_cache_size_state: 25u32, flag_cache_size: Some(128), flag_fast_and_loose: false, flag_db_compaction: "ssd".into(), @@ -686,6 +690,7 @@ mod tests { cache_size_db: Some(128), cache_size_blocks: Some(16), cache_size_queue: Some(100), + cache_size_state: Some(25), db_compaction: Some("ssd".into()), fat_db: Some("off".into()), }), diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 861b7dafcc..b83011258c 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -209,6 +209,8 @@ Footprint Options: megabytes (default: {flag_cache_size_blocks}). --cache-size-queue MB Specify the maximum size of memory to use for block queue (default: {flag_cache_size_queue}). + --cache-size-state MB Specify the maximum size of memory to use for + the state cache (default: {flag_cache_size_state}). --cache-size MB Set total amount of discretionary memory to use for the entire system, overrides other cache and queue options.a (default: {flag_cache_size:?}) diff --git a/parity/configuration.rs b/parity/configuration.rs index 4503b0f2f6..389c3c6f37 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -291,7 +291,12 @@ impl Configuration { fn cache_config(&self) -> CacheConfig { match self.args.flag_cache_size.or(self.args.flag_cache) { Some(size) => CacheConfig::new_with_total_cache_size(size), - None => CacheConfig::new(self.args.flag_cache_size_db, self.args.flag_cache_size_blocks, self.args.flag_cache_size_queue), + None => CacheConfig::new( + self.args.flag_cache_size_db, + self.args.flag_cache_size_blocks, + self.args.flag_cache_size_queue, + self.args.flag_cache_size_state, + ), } } diff --git a/parity/helpers.rs b/parity/helpers.rs index abdd5daa53..55a3b8beb1 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -215,6 +215,7 @@ pub fn to_client_config( client_config.tracing.max_cache_size = cache_config.traces() as usize * mb; // in bytes client_config.tracing.pref_cache_size = cache_config.traces() as usize * 3 / 4 * mb; + client_config.state_cache_size = cache_config.state() as usize; client_config.mode = mode; client_config.tracing.enabled = tracing; -- GitLab From d9ca01cb6b87ddd93ee620d94a41946c61be4aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 7 Oct 2016 09:18:32 +0200 Subject: [PATCH 015/393] Fixing RPC Filter conversion to EthFilter (#2500) --- ethcore/src/types/filter.rs | 2 +- rpc/src/v1/types/filter.rs | 41 +++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/ethcore/src/types/filter.rs b/ethcore/src/types/filter.rs index 6274d63f43..e3487e5f60 100644 --- a/ethcore/src/types/filter.rs +++ b/ethcore/src/types/filter.rs @@ -22,7 +22,7 @@ use client::BlockID; use log_entry::LogEntry; /// Blockchain Filter. -#[derive(Binary)] +#[derive(Binary, Debug, PartialEq)] pub struct Filter { /// Blockchain will be searched from this block. pub from_block: BlockID, diff --git a/rpc/src/v1/types/filter.rs b/rpc/src/v1/types/filter.rs index b4a45272ba..fc163c54be 100644 --- a/rpc/src/v1/types/filter.rs +++ b/rpc/src/v1/types/filter.rs @@ -85,8 +85,14 @@ impl Into for Filter { VariadicValue::Null => None, VariadicValue::Single(t) => Some(vec![t.into()]), VariadicValue::Multiple(t) => Some(t.into_iter().map(Into::into).collect()) - }).filter_map(|m| m).collect()).into_iter(); - vec![iter.next(), iter.next(), iter.next(), iter.next()] + }).collect()).into_iter(); + + vec![ + iter.next().unwrap_or(None), + iter.next().unwrap_or(None), + iter.next().unwrap_or(None), + iter.next().unwrap_or(None) + ] }, limit: self.limit, } @@ -121,6 +127,8 @@ mod tests { use util::hash::*; use super::*; use v1::types::BlockNumber; + use ethcore::filter::Filter as EthFilter; + use ethcore::client::BlockID; #[test] fn topic_deserialization() { @@ -148,4 +156,33 @@ mod tests { limit: None, }); } + + #[test] + fn filter_conversion() { + let filter = Filter { + from_block: Some(BlockNumber::Earliest), + to_block: Some(BlockNumber::Latest), + address: Some(VariadicValue::Multiple(vec![])), + topics: Some(vec![ + VariadicValue::Null, + VariadicValue::Single("000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b".into()), + VariadicValue::Null, + ]), + limit: None, + }; + + let eth_filter: EthFilter = filter.into(); + assert_eq!(eth_filter, EthFilter { + from_block: BlockID::Earliest, + to_block: BlockID::Latest, + address: Some(vec![]), + topics: vec![ + None, + Some(vec!["000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b".into()]), + None, + None, + ], + limit: None, + }); + } } -- GitLab From 5f0ed9ddce267501d64b22adc5db1cc413d243aa Mon Sep 17 00:00:00 2001 From: keorn Date: Fri, 7 Oct 2016 08:39:16 +0100 Subject: [PATCH 016/393] Trim password from file (#2503) * trim password * indicate trimming in doc --- parity/cli/usage.txt | 3 ++- parity/helpers.rs | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 861b7dafcc..6ad0cec219 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -44,7 +44,8 @@ Account Options: ACCOUNTS is a comma-delimited list of addresses. Implies --no-signer. (default: {flag_unlock:?}) --password FILE Provide a file containing a password for unlocking - an account. (default: {flag_password:?}) + an account. Leading and trailing whitespace is trimmed. + (default: {flag_password:?}) --keys-iterations NUM Specify the number of iterations to use when deriving key from the password (bigger is more secure) (default: {flag_keys_iterations}). diff --git a/parity/helpers.rs b/parity/helpers.rs index abdd5daa53..cdee9ede00 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -273,9 +273,10 @@ pub fn password_prompt() -> Result { pub fn password_from_file

(path: P) -> Result where P: AsRef { let mut file = try!(File::open(path).map_err(|_| "Unable to open password file.")); let mut file_content = String::new(); - try!(file.read_to_string(&mut file_content).map_err(|_| "Unable to read password file.")); - // remove eof - Ok((&file_content[..file_content.len() - 1]).to_owned()) + match file.read_to_string(&mut file_content) { + Ok(_) => Ok(file_content.trim().into()), + Err(_) => Err("Unable to read password file.".into()), + } } /// Reads passwords from files. Treats each line as a separate password. @@ -294,10 +295,13 @@ pub fn passwords_from_files(files: Vec) -> Result, String> { #[cfg(test)] mod tests { use std::time::Duration; + use std::fs::File; + use std::io::Write; + use devtools::RandomTempPath; use util::{U256}; use ethcore::client::{Mode, BlockID}; use ethcore::miner::PendingSet; - use super::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_address, to_addresses, to_price, geth_ipc_path, to_bootnodes}; + use super::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_address, to_addresses, to_price, geth_ipc_path, to_bootnodes, password_from_file}; #[test] fn test_to_duration() { @@ -380,6 +384,14 @@ mod tests { ); } + #[test] + fn test_password() { + let path = RandomTempPath::new(); + let mut file = File::create(path.as_path()).unwrap(); + file.write_all(b"a bc ").unwrap(); + assert_eq!(password_from_file(path).unwrap().as_bytes(), b"a bc"); + } + #[test] #[cfg_attr(feature = "dev", allow(float_cmp))] fn test_to_price() { -- GitLab From 533af4331314c3e4c36a8289fb6cf001b98b9f4b Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 7 Oct 2016 10:34:06 +0200 Subject: [PATCH 017/393] Fixed overflow panic in handshake_panic (#2495) --- util/network/src/host.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/network/src/host.rs b/util/network/src/host.rs index f530503c6d..d982481f9c 100644 --- a/util/network/src/host.rs +++ b/util/network/src/host.rs @@ -591,7 +591,8 @@ impl Host { } fn handshake_count(&self) -> usize { - self.sessions.read().count() - self.session_count() + // session_count < total_count is possible because of the data race. + self.sessions.read().count().saturating_sub(self.session_count()) } fn keep_alive(&self, io: &IoContext) { -- GitLab From 7756031d06497bdc5e1760294f05e022c0b8d9b1 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 7 Oct 2016 12:10:12 +0200 Subject: [PATCH 018/393] Caching optimizations (#2505) --- ethcore/src/evm/interpreter/shared_cache.rs | 2 +- ethcore/src/state/mod.rs | 32 ++++++++++++--------- ethcore/src/state_db.rs | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ethcore/src/evm/interpreter/shared_cache.rs b/ethcore/src/evm/interpreter/shared_cache.rs index 76360138b2..ce383bae81 100644 --- a/ethcore/src/evm/interpreter/shared_cache.rs +++ b/ethcore/src/evm/interpreter/shared_cache.rs @@ -21,7 +21,7 @@ use util::sha3::*; use bit_set::BitSet; use super::super::instructions; -const CACHE_CODE_ITEMS: usize = 4096; +const CACHE_CODE_ITEMS: usize = 65536; /// GLobal cache for EVM interpreter pub struct SharedCache { diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index 2b5d1c23cd..03f6d9fad8 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -47,14 +47,16 @@ pub type ApplyResult = Result; /// Account modification state. Used to check if the account was /// Modified in between commits and overall. enum AccountState { - /// Account was never modified in this state object. - Clean, + /// Account was loaded from disk and never modified in this state object. + CleanFresh, + /// Account was loaded from the global cache and never modified. + CleanCached, /// Account has been modified and is not committed to the trie yet. - /// This is set than any of the account data is changed, including + /// This is set if any of the account data is changed, including /// storage and code. Dirty, /// Account was modified and committed to the trie. - Commited, + Committed, } #[derive(Debug)] @@ -105,7 +107,15 @@ impl AccountEntry { fn new_clean(account: Option) -> AccountEntry { AccountEntry { account: account, - state: AccountState::Clean, + state: AccountState::CleanFresh, + } + } + + // Create a new account entry and mark it as clean and cached. + fn new_clean_cached(account: Option) -> AccountEntry { + AccountEntry { + account: account, + state: AccountState::CleanCached, } } @@ -508,7 +518,7 @@ impl State { { let mut trie = factories.trie.from_existing(db.as_hashdb_mut(), root).unwrap(); for (address, ref mut a) in accounts.iter_mut().filter(|&(_, ref a)| a.is_dirty()) { - a.state = AccountState::Commited; + a.state = AccountState::Committed; match a.account { Some(ref mut account) => { try!(trie.insert(address, &account.rlp())); @@ -526,7 +536,7 @@ impl State { fn commit_cache(&mut self) { let mut addresses = self.cache.borrow_mut(); trace!("Committing cache {:?} entries", addresses.len()); - for (address, a) in addresses.drain().filter(|&(_, ref a)| !a.is_dirty()) { + for (address, a) in addresses.drain().filter(|&(_, ref a)| a.state == AccountState::Committed || a.state == AccountState::CleanFresh) { self.db.cache_account(address, a.account); } } @@ -638,10 +648,7 @@ impl State { Self::update_account_cache(require, account, accountdb.as_hashdb()); } let r = f(maybe_acc.as_ref()); - match maybe_acc { - Some(account) => self.insert_cache(a, AccountEntry::new_clean(Some(account))), - None => self.insert_cache(a, AccountEntry::new_clean(None)), - } + self.insert_cache(a, AccountEntry::new_clean(maybe_acc)); r } } @@ -660,8 +667,7 @@ impl State { let contains_key = self.cache.borrow().contains_key(a); if !contains_key { match self.db.get_cached_account(a) { - Some(Some(acc)) => self.insert_cache(a, AccountEntry::new_clean(Some(acc))), - Some(None) => self.insert_cache(a, AccountEntry::new_clean(None)), + Some(acc) => self.insert_cache(a, AccountEntry::new_clean_cached(acc)), None => { let maybe_acc = if self.db.check_account_bloom(a) { let db = self.factories.trie.readonly(self.db.as_hashdb(), &self.root).expect(SEC_TRIE_DB_UNWRAP_STR); diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 51c5918373..8ba50c3d6b 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -24,7 +24,7 @@ use bloom_journal::{Bloom, BloomJournal}; use db::COL_ACCOUNT_BLOOM; use byteorder::{LittleEndian, ByteOrder}; -const STATE_CACHE_ITEMS: usize = 65536; +const STATE_CACHE_ITEMS: usize = 256000; pub const ACCOUNT_BLOOM_SPACE: usize = 1048576; pub const DEFAULT_ACCOUNT_PRESET: usize = 1000000; -- GitLab From 4655fd04a507d8c4e5b6cab28af54c64a0ba7186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 7 Oct 2016 12:13:15 +0200 Subject: [PATCH 019/393] Using pending block only if not old (#2514) --- ethcore/src/client/client.rs | 2 +- ethcore/src/client/test_client.rs | 2 +- ethcore/src/miner/miner.rs | 176 +++++++++++++++------- ethcore/src/miner/mod.rs | 11 +- rpc/src/v1/impls/eth.rs | 15 +- rpc/src/v1/impls/eth_filter.rs | 12 +- rpc/src/v1/tests/helpers/miner_service.rs | 13 +- 7 files changed, 152 insertions(+), 79 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 6b1cc0c656..a5a3537022 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -1078,7 +1078,7 @@ impl BlockChainClient for Client { } fn pending_transactions(&self) -> Vec { - self.miner.pending_transactions() + self.miner.pending_transactions(self.chain.read().best_block_number()) } } diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index 11929294f4..76451e7933 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -602,6 +602,6 @@ impl BlockChainClient for TestBlockChainClient { } fn pending_transactions(&self) -> Vec { - self.miner.pending_transactions() + self.miner.pending_transactions(self.chain_info().best_block_number) } } diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 38fc199cd4..0d02f86319 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -493,6 +493,21 @@ impl Miner { /// Are we allowed to do a non-mandatory reseal? fn tx_reseal_allowed(&self) -> bool { Instant::now() > *self.next_allowed_reseal.lock() } + + fn from_pending_block(&self, latest_block_number: BlockNumber, from_chain: F, map_block: G) -> H + where F: Fn() -> H, G: Fn(&ClosedBlock) -> H { + let sealing_work = self.sealing_work.lock(); + sealing_work.queue.peek_last_ref().map_or_else( + || from_chain(), + |b| { + if b.block().header().number() > latest_block_number { + map_block(b) + } else { + from_chain() + } + } + ) + } } const SEALING_TIMEOUT_IN_BLOCKS : u64 = 5; @@ -565,29 +580,35 @@ impl MinerService for Miner { } fn balance(&self, chain: &MiningBlockChainClient, address: &Address) -> U256 { - let sealing_work = self.sealing_work.lock(); - sealing_work.queue.peek_last_ref().map_or_else( + self.from_pending_block( + chain.chain_info().best_block_number, || chain.latest_balance(address), |b| b.block().fields().state.balance(address) ) } fn storage_at(&self, chain: &MiningBlockChainClient, address: &Address, position: &H256) -> H256 { - let sealing_work = self.sealing_work.lock(); - sealing_work.queue.peek_last_ref().map_or_else( + self.from_pending_block( + chain.chain_info().best_block_number, || chain.latest_storage_at(address, position), |b| b.block().fields().state.storage_at(address, position) ) } fn nonce(&self, chain: &MiningBlockChainClient, address: &Address) -> U256 { - let sealing_work = self.sealing_work.lock(); - sealing_work.queue.peek_last_ref().map_or_else(|| chain.latest_nonce(address), |b| b.block().fields().state.nonce(address)) + self.from_pending_block( + chain.chain_info().best_block_number, + || chain.latest_nonce(address), + |b| b.block().fields().state.nonce(address) + ) } fn code(&self, chain: &MiningBlockChainClient, address: &Address) -> Option { - let sealing_work = self.sealing_work.lock(); - sealing_work.queue.peek_last_ref().map_or_else(|| chain.latest_code(address), |b| b.block().fields().state.code(address).map(|c| (*c).clone())) + self.from_pending_block( + chain.chain_info().best_block_number, + || chain.latest_code(address), + |b| b.block().fields().state.code(address).map(|c| (*c).clone()) + ) } fn set_author(&self, author: Address) { @@ -737,50 +758,74 @@ impl MinerService for Miner { queue.top_transactions() } - fn pending_transactions(&self) -> Vec { + fn pending_transactions(&self, best_block: BlockNumber) -> Vec { let queue = self.transaction_queue.lock(); - let sw = self.sealing_work.lock(); - // TODO: should only use the sealing_work when it's current (it could be an old block) - let sealing_set = match sw.enabled { - true => sw.queue.peek_last_ref(), - false => None, - }; - match (&self.options.pending_set, sealing_set) { - (&PendingSet::AlwaysQueue, _) | (&PendingSet::SealingOrElseQueue, None) => queue.top_transactions(), - (_, sealing) => sealing.map_or_else(Vec::new, |s| s.transactions().to_owned()), + match self.options.pending_set { + PendingSet::AlwaysQueue => queue.top_transactions(), + PendingSet::SealingOrElseQueue => { + self.from_pending_block( + best_block, + || queue.top_transactions(), + |sealing| sealing.transactions().to_owned() + ) + }, + PendingSet::AlwaysSealing => { + self.from_pending_block( + best_block, + || vec![], + |sealing| sealing.transactions().to_owned() + ) + }, } } - fn pending_transactions_hashes(&self) -> Vec { + fn pending_transactions_hashes(&self, best_block: BlockNumber) -> Vec { let queue = self.transaction_queue.lock(); - let sw = self.sealing_work.lock(); - let sealing_set = match sw.enabled { - true => sw.queue.peek_last_ref(), - false => None, - }; - match (&self.options.pending_set, sealing_set) { - (&PendingSet::AlwaysQueue, _) | (&PendingSet::SealingOrElseQueue, None) => queue.pending_hashes(), - (_, sealing) => sealing.map_or_else(Vec::new, |s| s.transactions().iter().map(|t| t.hash()).collect()), + match self.options.pending_set { + PendingSet::AlwaysQueue => queue.pending_hashes(), + PendingSet::SealingOrElseQueue => { + self.from_pending_block( + best_block, + || queue.pending_hashes(), + |sealing| sealing.transactions().iter().map(|t| t.hash()).collect() + ) + }, + PendingSet::AlwaysSealing => { + self.from_pending_block( + best_block, + || vec![], + |sealing| sealing.transactions().iter().map(|t| t.hash()).collect() + ) + }, } } - fn transaction(&self, hash: &H256) -> Option { + fn transaction(&self, best_block: BlockNumber, hash: &H256) -> Option { let queue = self.transaction_queue.lock(); - let sw = self.sealing_work.lock(); - let sealing_set = match sw.enabled { - true => sw.queue.peek_last_ref(), - false => None, - }; - match (&self.options.pending_set, sealing_set) { - (&PendingSet::AlwaysQueue, _) | (&PendingSet::SealingOrElseQueue, None) => queue.find(hash), - (_, sealing) => sealing.and_then(|s| s.transactions().iter().find(|t| &t.hash() == hash).cloned()), + match self.options.pending_set { + PendingSet::AlwaysQueue => queue.find(hash), + PendingSet::SealingOrElseQueue => { + self.from_pending_block( + best_block, + || queue.find(hash), + |sealing| sealing.transactions().iter().find(|t| &t.hash() == hash).cloned() + ) + }, + PendingSet::AlwaysSealing => { + self.from_pending_block( + best_block, + || None, + |sealing| sealing.transactions().iter().find(|t| &t.hash() == hash).cloned() + ) + }, } } - fn pending_receipt(&self, hash: &H256) -> Option { - let sealing_work = self.sealing_work.lock(); - match (sealing_work.enabled, sealing_work.queue.peek_last_ref()) { - (true, Some(pending)) => { + fn pending_receipt(&self, best_block: BlockNumber, hash: &H256) -> Option { + self.from_pending_block( + best_block, + || None, + |pending| { let txs = pending.transactions(); txs.iter() .map(|t| t.hash()) @@ -801,15 +846,15 @@ impl MinerService for Miner { logs: receipt.logs.clone(), } }) - }, - _ => None - } + } + ) } - fn pending_receipts(&self) -> BTreeMap { - let sealing_work = self.sealing_work.lock(); - match (sealing_work.enabled, sealing_work.queue.peek_last_ref()) { - (true, Some(pending)) => { + fn pending_receipts(&self, best_block: BlockNumber) -> BTreeMap { + self.from_pending_block( + best_block, + || BTreeMap::new(), + |pending| { let hashes = pending.transactions() .iter() .map(|t| t.hash()); @@ -817,9 +862,8 @@ impl MinerService for Miner { let receipts = pending.receipts().iter().cloned(); hashes.zip(receipts).collect() - }, - _ => BTreeMap::new() - } + } + ) } fn last_nonce(&self, address: &Address) -> Option { @@ -1044,34 +1088,54 @@ mod tests { let client = TestBlockChainClient::default(); let miner = miner(); let transaction = transaction(); + let best_block = 0; // when let res = miner.import_own_transaction(&client, transaction); // then assert_eq!(res.unwrap(), TransactionImportResult::Current); assert_eq!(miner.all_transactions().len(), 1); - assert_eq!(miner.pending_transactions().len(), 1); - assert_eq!(miner.pending_transactions_hashes().len(), 1); - assert_eq!(miner.pending_receipts().len(), 1); + assert_eq!(miner.pending_transactions(best_block).len(), 1); + assert_eq!(miner.pending_transactions_hashes(best_block).len(), 1); + assert_eq!(miner.pending_receipts(best_block).len(), 1); // This method will let us know if pending block was created (before calling that method) assert!(!miner.prepare_work_sealing(&client)); } + #[test] + fn should_not_use_pending_block_if_best_block_is_higher() { + // given + let client = TestBlockChainClient::default(); + let miner = miner(); + let transaction = transaction(); + let best_block = 10; + // when + let res = miner.import_own_transaction(&client, transaction); + + // then + assert_eq!(res.unwrap(), TransactionImportResult::Current); + assert_eq!(miner.all_transactions().len(), 1); + assert_eq!(miner.pending_transactions(best_block).len(), 0); + assert_eq!(miner.pending_transactions_hashes(best_block).len(), 0); + assert_eq!(miner.pending_receipts(best_block).len(), 0); + } + #[test] fn should_import_external_transaction() { // given let client = TestBlockChainClient::default(); let miner = miner(); let transaction = transaction(); + let best_block = 0; // when let res = miner.import_external_transactions(&client, vec![transaction]).pop().unwrap(); // then assert_eq!(res.unwrap(), TransactionImportResult::Current); assert_eq!(miner.all_transactions().len(), 1); - assert_eq!(miner.pending_transactions_hashes().len(), 0); - assert_eq!(miner.pending_transactions().len(), 0); - assert_eq!(miner.pending_receipts().len(), 0); + assert_eq!(miner.pending_transactions_hashes(best_block).len(), 0); + assert_eq!(miner.pending_transactions(best_block).len(), 0); + assert_eq!(miner.pending_receipts(best_block).len(), 0); // This method will let us know if pending block was created (before calling that method) assert!(miner.prepare_work_sealing(&client)); } diff --git a/ethcore/src/miner/mod.rs b/ethcore/src/miner/mod.rs index e95ce758ac..c6bb00dceb 100644 --- a/ethcore/src/miner/mod.rs +++ b/ethcore/src/miner/mod.rs @@ -56,6 +56,7 @@ use std::collections::BTreeMap; use util::{H256, U256, Address, Bytes}; use client::{MiningBlockChainClient, Executed, CallAnalytics}; use block::ClosedBlock; +use header::BlockNumber; use receipt::{RichReceipt, Receipt}; use error::{Error, CallError}; use transaction::SignedTransaction; @@ -115,7 +116,7 @@ pub trait MinerService : Send + Sync { Result; /// Returns hashes of transactions currently in pending - fn pending_transactions_hashes(&self) -> Vec; + fn pending_transactions_hashes(&self, best_block: BlockNumber) -> Vec; /// Removes all transactions from the queue and restart mining operation. fn clear_and_reset(&self, chain: &MiningBlockChainClient); @@ -135,19 +136,19 @@ pub trait MinerService : Send + Sync { where F: FnOnce(&ClosedBlock) -> T, Self: Sized; /// Query pending transactions for hash. - fn transaction(&self, hash: &H256) -> Option; + fn transaction(&self, best_block: BlockNumber, hash: &H256) -> Option; /// Get a list of all transactions. fn all_transactions(&self) -> Vec; /// Get a list of all pending transactions. - fn pending_transactions(&self) -> Vec; + fn pending_transactions(&self, best_block: BlockNumber) -> Vec; /// Get a list of all pending receipts. - fn pending_receipts(&self) -> BTreeMap; + fn pending_receipts(&self, best_block: BlockNumber) -> BTreeMap; /// Get a particular reciept. - fn pending_receipt(&self, hash: &H256) -> Option; + fn pending_receipt(&self, best_block: BlockNumber, hash: &H256) -> Option; /// Returns highest transaction nonce for given address. fn last_nonce(&self, address: &Address) -> Option; diff --git a/rpc/src/v1/impls/eth.rs b/rpc/src/v1/impls/eth.rs index b174e406ef..c45f62c75d 100644 --- a/rpc/src/v1/impls/eth.rs +++ b/rpc/src/v1/impls/eth.rs @@ -33,7 +33,7 @@ use util::{FromHex, Mutex}; use rlp::{self, UntrustedRlp, View}; use ethcore::account_provider::AccountProvider; use ethcore::client::{MiningBlockChainClient, BlockID, TransactionID, UncleID}; -use ethcore::header::Header as BlockHeader; +use ethcore::header::{Header as BlockHeader, BlockNumber as EthBlockNumber}; use ethcore::block::IsBlock; use ethcore::views::*; use ethcore::ethereum::Ethash; @@ -198,8 +198,8 @@ impl EthClient where } } -pub fn pending_logs(miner: &M, filter: &EthcoreFilter) -> Vec where M: MinerService { - let receipts = miner.pending_receipts(); +pub fn pending_logs(miner: &M, best_block: EthBlockNumber, filter: &EthcoreFilter) -> Vec where M: MinerService { + let receipts = miner.pending_receipts(best_block); let pending_logs = receipts.into_iter() .flat_map(|(hash, r)| r.logs.into_iter().map(|l| (hash.clone(), l)).collect::>()) @@ -426,7 +426,8 @@ impl Eth for EthClient where try!(self.active()); let hash: H256 = hash.into(); let miner = take_weak!(self.miner); - Ok(try!(self.transaction(TransactionID::Hash(hash))).or_else(|| miner.transaction(&hash).map(Into::into))) + let client = take_weak!(self.client); + Ok(try!(self.transaction(TransactionID::Hash(hash))).or_else(|| miner.transaction(client.chain_info().best_block_number, &hash).map(Into::into))) } fn transaction_by_block_hash_and_index(&self, hash: RpcH256, index: Index) -> Result, Error> { @@ -445,8 +446,9 @@ impl Eth for EthClient where try!(self.active()); let miner = take_weak!(self.miner); + let best_block = take_weak!(self.client).chain_info().best_block_number; let hash: H256 = hash.into(); - match (miner.pending_receipt(&hash), self.options.allow_pending_receipt_query) { + match (miner.pending_receipt(best_block, &hash), self.options.allow_pending_receipt_query) { (Some(receipt), true) => Ok(Some(receipt.into())), _ => { let client = take_weak!(self.client); @@ -488,7 +490,8 @@ impl Eth for EthClient where .collect::>(); if include_pending { - let pending = pending_logs(&*take_weak!(self.miner), &filter); + let best_block = take_weak!(self.client).chain_info().best_block_number; + let pending = pending_logs(&*take_weak!(self.miner), best_block, &filter); logs.extend(pending); } diff --git a/rpc/src/v1/impls/eth_filter.rs b/rpc/src/v1/impls/eth_filter.rs index 03d9d72159..dd1c937ac4 100644 --- a/rpc/src/v1/impls/eth_filter.rs +++ b/rpc/src/v1/impls/eth_filter.rs @@ -81,7 +81,8 @@ impl EthFilter for EthFilterClient try!(self.active()); let mut polls = self.polls.lock(); - let pending_transactions = take_weak!(self.miner).pending_transactions_hashes(); + let best_block = take_weak!(self.client).chain_info().best_block_number; + let pending_transactions = take_weak!(self.miner).pending_transactions_hashes(best_block); let id = polls.create_poll(PollFilter::PendingTransaction(pending_transactions)); Ok(id.into()) } @@ -108,7 +109,8 @@ impl EthFilter for EthFilterClient }, PollFilter::PendingTransaction(ref mut previous_hashes) => { // get hashes of pending transactions - let current_hashes = take_weak!(self.miner).pending_transactions_hashes(); + let best_block = take_weak!(self.client).chain_info().best_block_number; + let current_hashes = take_weak!(self.miner).pending_transactions_hashes(best_block); let new_hashes = { @@ -149,7 +151,8 @@ impl EthFilter for EthFilterClient // additionally retrieve pending logs if include_pending { - let pending_logs = pending_logs(&*take_weak!(self.miner), &filter); + let best_block = take_weak!(self.client).chain_info().best_block_number; + let pending_logs = pending_logs(&*take_weak!(self.miner), best_block, &filter); // remove logs about which client was already notified about let new_pending_logs: Vec<_> = pending_logs.iter() @@ -190,7 +193,8 @@ impl EthFilter for EthFilterClient .collect::>(); if include_pending { - logs.extend(pending_logs(&*take_weak!(self.miner), &filter)); + let best_block = take_weak!(self.client).chain_info().best_block_number; + logs.extend(pending_logs(&*take_weak!(self.miner), best_block, &filter)); } let logs = limit_logs(logs, filter.limit); diff --git a/rpc/src/v1/tests/helpers/miner_service.rs b/rpc/src/v1/tests/helpers/miner_service.rs index ddc0b057b1..0787f2102f 100644 --- a/rpc/src/v1/tests/helpers/miner_service.rs +++ b/rpc/src/v1/tests/helpers/miner_service.rs @@ -21,6 +21,7 @@ use util::standard::*; use ethcore::error::{Error, CallError}; use ethcore::client::{MiningBlockChainClient, Executed, CallAnalytics}; use ethcore::block::{ClosedBlock, IsBlock}; +use ethcore::header::BlockNumber; use ethcore::transaction::SignedTransaction; use ethcore::receipt::{Receipt, RichReceipt}; use ethcore::miner::{MinerService, MinerStatus, TransactionImportResult}; @@ -162,7 +163,7 @@ impl MinerService for TestMinerService { } /// Returns hashes of transactions currently in pending - fn pending_transactions_hashes(&self) -> Vec { + fn pending_transactions_hashes(&self, _best_block: BlockNumber) -> Vec { vec![] } @@ -186,7 +187,7 @@ impl MinerService for TestMinerService { Some(f(&open_block.close())) } - fn transaction(&self, hash: &H256) -> Option { + fn transaction(&self, _best_block: BlockNumber, hash: &H256) -> Option { self.pending_transactions.lock().get(hash).cloned() } @@ -194,13 +195,13 @@ impl MinerService for TestMinerService { self.pending_transactions.lock().values().cloned().collect() } - fn pending_transactions(&self) -> Vec { + fn pending_transactions(&self, _best_block: BlockNumber) -> Vec { self.pending_transactions.lock().values().cloned().collect() } - fn pending_receipt(&self, hash: &H256) -> Option { + fn pending_receipt(&self, _best_block: BlockNumber, hash: &H256) -> Option { // Not much point implementing this since the logic is complex and the only thing it relies on is pending_receipts, which is already tested. - self.pending_receipts().get(hash).map(|r| + self.pending_receipts(0).get(hash).map(|r| RichReceipt { transaction_hash: Default::default(), transaction_index: Default::default(), @@ -212,7 +213,7 @@ impl MinerService for TestMinerService { ) } - fn pending_receipts(&self) -> BTreeMap { + fn pending_receipts(&self, _best_block: BlockNumber) -> BTreeMap { self.pending_receipts.lock().clone() } -- GitLab From 8a0e98d4cc23b6645c07b26902052902a6fddcdf Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 7 Oct 2016 12:18:42 +0200 Subject: [PATCH 020/393] configurable jump table cache size --- Cargo.lock | 12 ++--- ethcore/Cargo.toml | 2 +- ethcore/src/client/client.rs | 2 +- ethcore/src/client/config.rs | 2 + ethcore/src/client/test_client.rs | 2 +- ethcore/src/evm/factory.rs | 19 +++---- ethcore/src/evm/interpreter/shared_cache.rs | 55 ++++++++++++++++++--- ethcore/src/evm/tests.rs | 2 +- ethcore/src/executive.rs | 4 +- parity/cache.rs | 10 +++- parity/helpers.rs | 5 +- 11 files changed, 84 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 04bc46c9c9..b335df4aff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -295,7 +295,7 @@ dependencies = [ "hyper 0.9.4 (git+https://github.com/ethcore/hyper)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lru-cache 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "lru-cache 0.0.7 (git+https://github.com/contain-rs/lru-cache)", "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -881,7 +881,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "linked-hash-map" -version = "0.0.9" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -897,9 +897,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lru-cache" version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/contain-rs/lru-cache#13255e33c45ceb69a4b143f235a4322df5fb580e" dependencies = [ - "linked-hash-map 0.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1950,10 +1950,10 @@ dependencies = [ "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f" "checksum libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)" = "23e3757828fa702a20072c37ff47938e9dd331b92fac6e223d26d4b7a55f7ee2" -"checksum linked-hash-map 0.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "83f7ff3baae999fdf921cccf54b61842bb3b26868d50d02dff48052ebec8dd79" +"checksum linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bda158e0dabeb97ee8a401f4d17e479d6b891a14de0bba79d5cc2d4d325b5e48" "checksum linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd" "checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054" -"checksum lru-cache 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "42d50dcb5d9f145df83b1043207e1ac0c37c9c779c4e128ca4655abc3f3cbf8c" +"checksum lru-cache 0.0.7 (git+https://github.com/contain-rs/lru-cache)" = "" "checksum matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "15305656809ce5a4805b1ff2946892810992197ce1270ff79baded852187942e" "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" "checksum mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a74cc2587bf97c49f3f5bab62860d6abf3902ca73b66b51d9b049fbdcd727bd2" diff --git a/ethcore/Cargo.toml b/ethcore/Cargo.toml index 7bda7e5673..ad9e545ced 100644 --- a/ethcore/Cargo.toml +++ b/ethcore/Cargo.toml @@ -37,7 +37,7 @@ ethkey = { path = "../ethkey" } ethcore-ipc-nano = { path = "../ipc/nano" } rlp = { path = "../util/rlp" } rand = "0.3" -lru-cache = "0.0.7" +lru-cache = { git = "https://github.com/contain-rs/lru-cache" } ethcore-bloom-journal = { path = "../util/bloom" } byteorder = "0.5" diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 3e9a306164..3bfae2fb8d 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -197,7 +197,7 @@ impl Client { let awake = match config.mode { Mode::Dark(..) => false, _ => true }; let factories = Factories { - vm: EvmFactory::new(config.vm_type.clone()), + vm: EvmFactory::new(config.vm_type.clone(), config.jump_table_size), trie: TrieFactory::new(trie_spec), accountdb: Default::default(), }; diff --git a/ethcore/src/client/config.rs b/ethcore/src/client/config.rs index 4894b54420..e0ac51f0ad 100644 --- a/ethcore/src/client/config.rs +++ b/ethcore/src/client/config.rs @@ -108,6 +108,8 @@ pub struct ClientConfig { pub verifier_type: VerifierType, /// State db cache-size. pub state_cache_size: usize, + /// EVM jump-tables cache size. + pub jump_table_size: usize, } #[cfg(test)] diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index 27e9f9b5f9..5c00ffff13 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -122,7 +122,7 @@ impl TestBlockChainClient { queue_size: AtomicUsize::new(0), miner: Arc::new(Miner::with_spec(&spec)), spec: spec, - vm_factory: EvmFactory::new(VMType::Interpreter), + vm_factory: EvmFactory::new(VMType::Interpreter, 1024 * 1024), latest_block_timestamp: RwLock::new(10_000_000), }; client.add_blocks(1, EachBlockWith::Nothing); // add genesis block diff --git a/ethcore/src/evm/factory.rs b/ethcore/src/evm/factory.rs index 629b423da5..a3d94bde83 100644 --- a/ethcore/src/evm/factory.rs +++ b/ethcore/src/evm/factory.rs @@ -118,11 +118,12 @@ impl Factory { } } - /// Create new instance of specific `VMType` factory - pub fn new(evm: VMType) -> Self { + /// Create new instance of specific `VMType` factory, with a size in bytes + /// for caching jump destinations. + pub fn new(evm: VMType, cache_size: usize) -> Self { Factory { evm: evm, - evm_cache: Arc::new(SharedCache::default()), + evm_cache: Arc::new(SharedCache::new(cache_size)), } } @@ -164,22 +165,22 @@ macro_rules! evm_test( #[ignore] #[cfg(feature = "jit")] fn $name_jit() { - $name_test(Factory::new(VMType::Jit)); + $name_test(Factory::new(VMType::Jit, 1024 * 32)); } #[test] fn $name_int() { - $name_test(Factory::new(VMType::Interpreter)); + $name_test(Factory::new(VMType::Interpreter, 1024 * 32)); } }; ($name_test: ident: $name_jit: ident, $name_int: ident) => { #[test] #[cfg(feature = "jit")] fn $name_jit() { - $name_test(Factory::new(VMType::Jit)); + $name_test(Factory::new(VMType::Jit, 1024 * 32)); } #[test] fn $name_int() { - $name_test(Factory::new(VMType::Interpreter)); + $name_test(Factory::new(VMType::Interpreter, 1024 * 32)); } } ); @@ -193,13 +194,13 @@ macro_rules! evm_test_ignore( #[cfg(feature = "jit")] #[cfg(feature = "ignored-tests")] fn $name_jit() { - $name_test(Factory::new(VMType::Jit)); + $name_test(Factory::new(VMType::Jit, 1024 * 32)); } #[test] #[ignore] #[cfg(feature = "ignored-tests")] fn $name_int() { - $name_test(Factory::new(VMType::Interpreter)); + $name_test(Factory::new(VMType::Interpreter, 1024 * 32)); } } ); diff --git a/ethcore/src/evm/interpreter/shared_cache.rs b/ethcore/src/evm/interpreter/shared_cache.rs index 922179b0bf..dee5575227 100644 --- a/ethcore/src/evm/interpreter/shared_cache.rs +++ b/ethcore/src/evm/interpreter/shared_cache.rs @@ -21,25 +21,66 @@ use util::sha3::*; use bit_set::BitSet; use super::super::instructions; -const CACHE_CODE_ITEMS: usize = 4096; +const INITIAL_CAPACITY: usize = 32; +const DEFAULT_CACHE_SIZE: usize = 4 * 1024 * 1024; /// Global cache for EVM interpreter pub struct SharedCache { - jump_destinations: Mutex>> + jump_destinations: Mutex>>, + max_size: usize, + cur_size: Mutex, } impl SharedCache { + /// Create a jump destinations cache with a maximum size in bytes + /// to cache. + pub fn new(max_size: usize) -> Self { + SharedCache { + jump_destinations: Mutex::new(LruCache::new(INITIAL_CAPACITY)), + max_size: max_size * 8, // dealing with bits here. + cur_size: Mutex::new(0), + } + } + /// Get jump destinations bitmap for a contract. pub fn jump_destinations(&self, code_hash: &H256, code: &[u8]) -> Arc { if code_hash == &SHA3_EMPTY { return Self::find_jump_destinations(code); } + if let Some(d) = self.jump_destinations.lock().get_mut(code_hash) { return d.clone(); } let d = Self::find_jump_destinations(code); - self.jump_destinations.lock().insert(code_hash.clone(), d.clone()); + + { + let mut cur_size = self.cur_size.lock(); + *cur_size += d.capacity(); + + let mut jump_dests = self.jump_destinations.lock(); + let cap = jump_dests.capacity(); + + // grow the cache as necessary; it operates on amount of items + // but we're working based on memory usage. + if jump_dests.len() == cap && *cur_size < self.max_size { + jump_dests.set_capacity(cap * 2); + } + + // account for any element displaced from the cache. + if let Some(lru) = jump_dests.insert(code_hash.clone(), d.clone()) { + *cur_size -= lru.capacity(); + } + + // remove elements until we are below the memory target. + while *cur_size > self.max_size { + match jump_dests.remove_lru() { + Some((_, v)) => *cur_size -= v.capacity(), + _ => break, + } + } + } + d } @@ -57,15 +98,15 @@ impl SharedCache { } position += 1; } + + jump_dests.shrink_to_fit(); Arc::new(jump_dests) } } impl Default for SharedCache { - fn default() -> SharedCache { - SharedCache { - jump_destinations: Mutex::new(LruCache::new(CACHE_CODE_ITEMS)), - } + fn default() -> Self { + SharedCache::new(DEFAULT_CACHE_SIZE) } } diff --git a/ethcore/src/evm/tests.rs b/ethcore/src/evm/tests.rs index eb7d168cf7..f685e279d2 100644 --- a/ethcore/src/evm/tests.rs +++ b/ethcore/src/evm/tests.rs @@ -817,7 +817,7 @@ fn test_signextend(factory: super::Factory) { #[test] // JIT just returns out of gas fn test_badinstruction_int() { - let factory = super::Factory::new(VMType::Interpreter); + let factory = super::Factory::new(VMType::Interpreter, 1024 * 32); let code = "af".from_hex().unwrap(); let mut params = ActionParams::default(); diff --git a/ethcore/src/executive.rs b/ethcore/src/executive.rs index f3186d6dd9..3c8b6171e3 100644 --- a/ethcore/src/executive.rs +++ b/ethcore/src/executive.rs @@ -598,7 +598,7 @@ mod tests { #[test] // Tracing is not suported in JIT fn test_call_to_create() { - let factory = Factory::new(VMType::Interpreter); + let factory = Factory::new(VMType::Interpreter, 1024 * 32); // code: // @@ -724,7 +724,7 @@ mod tests { #[test] fn test_create_contract() { // Tracing is not supported in JIT - let factory = Factory::new(VMType::Interpreter); + let factory = Factory::new(VMType::Interpreter, 1024 * 32); // code: // // 60 10 - push 16 diff --git a/parity/cache.rs b/parity/cache.rs index f51e560a1a..d2fc30d6ed 100644 --- a/parity/cache.rs +++ b/parity/cache.rs @@ -95,7 +95,12 @@ impl CacheConfig { /// Size of the state cache. pub fn state(&self) -> u32 { - self.state + self.state * 3 / 4 + } + + /// Size of the jump-tables cache. + pub fn jump_tables(&self) -> u32 { + self.state / 4 } } @@ -109,7 +114,8 @@ mod tests { assert_eq!(config.db, 140); assert_eq!(config.blockchain(), 20); assert_eq!(config.queue(), 50); - assert_eq!(config.state(), 40); + assert_eq!(config.state(), 30); + assert_eq!(config.jump_tables(), 10); } #[test] diff --git a/parity/helpers.rs b/parity/helpers.rs index 55a3b8beb1..2f4613b2c4 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -215,7 +215,10 @@ pub fn to_client_config( client_config.tracing.max_cache_size = cache_config.traces() as usize * mb; // in bytes client_config.tracing.pref_cache_size = cache_config.traces() as usize * 3 / 4 * mb; - client_config.state_cache_size = cache_config.state() as usize; + // in bytes + client_config.state_cache_size = cache_config.state() as usize * mb; + // in bytes + client_config.jump_table_size = cache_config.jump_tables() as usize * mb; client_config.mode = mode; client_config.tracing.enabled = tracing; -- GitLab From 5354a0905ebec1d4fd2e1b36db48dee30691d5ad Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Fri, 7 Oct 2016 14:10:53 +0300 Subject: [PATCH 021/393] terminate after 30 seconds (#2513) --- Cargo.lock | 1 + ipc/hypervisor/Cargo.toml | 1 + ipc/hypervisor/src/lib.rs | 28 +++++++++++++++++++++++----- ipc/hypervisor/src/service.rs.in | 5 ++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 04bc46c9c9..3781bc5894 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -399,6 +399,7 @@ dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)", "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/ipc/hypervisor/Cargo.toml b/ipc/hypervisor/Cargo.toml index a4c462bd09..d730b9bcfc 100644 --- a/ipc/hypervisor/Cargo.toml +++ b/ipc/hypervisor/Cargo.toml @@ -13,6 +13,7 @@ nanomsg = { git = "https://github.com/ethcore/nanomsg.rs.git" } ethcore-ipc-nano = { path = "../nano" } semver = "0.2" log = "0.3" +time = "0.1" [build-dependencies] ethcore-ipc-codegen = { path = "../codegen" } diff --git a/ipc/hypervisor/src/lib.rs b/ipc/hypervisor/src/lib.rs index 78b8b04cee..c7543ca91b 100644 --- a/ipc/hypervisor/src/lib.rs +++ b/ipc/hypervisor/src/lib.rs @@ -22,6 +22,7 @@ extern crate ethcore_ipc as ipc; extern crate ethcore_ipc_nano as nanoipc; extern crate semver; #[macro_use] extern crate log; +extern crate time; pub mod service; @@ -187,23 +188,40 @@ impl Hypervisor { } /// Waits for every required module to check in - pub fn wait_for_shutdown(&self) { + pub fn wait_for_shutdown(&self) -> bool { + use time::{PreciseTime, Duration}; + let mut worker = self.ipc_worker.write().unwrap(); + let start = PreciseTime::now(); while !self.modules_shutdown() { - worker.poll() + worker.poll(); + if start.to(PreciseTime::now()) > Duration::seconds(30) { + warn!("Some modules failed to shutdown gracefully, they will be terminated."); + break; + } } + self.modules_shutdown() } /// Shutdown the ipc and all managed child processes pub fn shutdown(&self) { let mut childs = self.processes.write().unwrap(); - for (ref mut module, _) in childs.iter_mut() { + for (ref module, _) in childs.iter() { trace!(target: "hypervisor", "Stopping process module: {}", module); self.service.send_shutdown(**module); } trace!(target: "hypervisor", "Waiting for shutdown..."); - self.wait_for_shutdown(); - trace!(target: "hypervisor", "All modules reported shutdown"); + if self.wait_for_shutdown() { + trace!(target: "hypervisor", "All modules reported shutdown"); + return; + } + + for (ref module, ref mut process) in childs.iter_mut() { + if self.service.is_running(**module) { + process.kill().unwrap(); + trace!("Terminated {}", module); + } + } } } diff --git a/ipc/hypervisor/src/service.rs.in b/ipc/hypervisor/src/service.rs.in index 6996765ec8..e80a1ec30b 100644 --- a/ipc/hypervisor/src/service.rs.in +++ b/ipc/hypervisor/src/service.rs.in @@ -39,7 +39,6 @@ pub struct ModuleState { shutdown: bool, } - #[ipc] pub trait ControlService { fn shutdown(&self) -> bool; @@ -106,6 +105,10 @@ impl HypervisorService { self.modules.read().unwrap().iter().filter(|&(_, module)| module.started && !module.shutdown).count() } + pub fn is_running(&self, id: IpcModuleId) -> bool { + self.modules.read().unwrap().get(&id).map(|module| module.started && !module.shutdown).unwrap_or(false) + } + pub fn send_shutdown(&self, module_id: IpcModuleId) { let modules = self.modules.read().unwrap(); modules.get(&module_id).map(|module| { -- GitLab From 72ec9366ad45526d16f6c78b5dfb32d16ba5aa6c Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 7 Oct 2016 13:34:32 +0200 Subject: [PATCH 022/393] Handle reorganizations in the state cache (#2490) * Handle reorganizations in the state cache * Renamed and documented a few methods * Basic test * Renamed pending to buffered * Updated cache on sealed block * More renames and updated documentation * Minor doc tweaks --- ethcore/src/client/client.rs | 12 +- ethcore/src/state/mod.rs | 11 +- ethcore/src/state_db.rs | 370 +++++++++++++++++++++++++++++------ 3 files changed, 323 insertions(+), 70 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index a5a3537022..a5bc63922d 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -304,8 +304,7 @@ impl Client { // Enact Verified Block let parent = chain_has_parent.unwrap(); let last_hashes = self.build_last_hashes(header.parent_hash().clone()); - let is_canon = header.parent_hash() == &chain.best_block_hash(); - let db = if is_canon { self.state_db.lock().boxed_clone_canon() } else { self.state_db.lock().boxed_clone() }; + let db = self.state_db.lock().boxed_clone_canon(&header.parent_hash()); let enact_result = enact_verified(block, engine, self.tracedb.read().tracing_enabled(), db, &parent, last_hashes, self.factories.clone()); if let Err(e) = enact_result { @@ -459,6 +458,8 @@ impl Client { enacted: route.enacted.clone(), retracted: route.retracted.len() }); + let is_canon = route.enacted.last().map_or(false, |h| h == hash); + state.sync_cache(&route.enacted, &route.retracted, is_canon); // Final commit to the DB self.db.read().write_buffered(batch); chain.commit(); @@ -533,9 +534,11 @@ impl Client { /// Get a copy of the best block's state. pub fn state(&self) -> State { + let header = self.best_block_header(); + let header = HeaderView::new(&header); State::from_existing( - self.state_db.lock().boxed_clone(), - HeaderView::new(&self.best_block_header()).state_root(), + self.state_db.lock().boxed_clone_canon(&header.hash()), + header.state_root(), self.engine.account_start_nonce(), self.factories.clone()) .expect("State root of best block header always valid.") @@ -1128,6 +1131,7 @@ impl MiningBlockChainClient for Client { let block_data = block.rlp_bytes(); let route = self.commit_block(block, &h, &block_data); trace!(target: "client", "Imported sealed block #{} ({})", number, h); + self.state_db.lock().sync_cache(&route.enacted, &route.retracted, false); let (enacted, retracted) = self.calculate_enacted_retracted(&[route]); self.miner.chain_new_blocks(self, &[h.clone()], &[], &enacted, &retracted); diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index 03f6d9fad8..39c8bbc111 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -164,8 +164,8 @@ impl AccountEntry { /// use that. /// **************************************************************************** /// -/// Upon destruction all the local cache data merged into the global cache. -/// The merge might be rejected if current state is non-canonical. +/// Upon destruction all the local cache data propagated into the global cache. +/// Propagated items might be rejected if current state is non-canonical. /// /// State snapshotting. /// @@ -318,7 +318,7 @@ impl State { /// Destroy the current object and return root and database. pub fn drop(mut self) -> (H256, StateDB) { - self.commit_cache(); + self.propagate_to_global_cache(); (self.root, self.db) } @@ -533,11 +533,12 @@ impl State { Ok(()) } - fn commit_cache(&mut self) { + /// Propagate local cache into shared canonical state cache. + fn propagate_to_global_cache(&mut self) { let mut addresses = self.cache.borrow_mut(); trace!("Committing cache {:?} entries", addresses.len()); for (address, a) in addresses.drain().filter(|&(_, ref a)| a.state == AccountState::Committed || a.state == AccountState::CleanFresh) { - self.db.cache_account(address, a.account); + self.db.add_to_account_cache(address, a.account, a.state == AccountState::Committed); } } diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 8ba50c3d6b..04db274c42 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -14,56 +14,94 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . +use std::collections::{VecDeque, HashSet}; use lru_cache::LruCache; use util::journaldb::JournalDB; use util::hash::{H256}; use util::hashdb::HashDB; use state::Account; +use header::BlockNumber; use util::{Arc, Address, Database, DBTransaction, UtilError, Mutex, Hashable}; use bloom_journal::{Bloom, BloomJournal}; use db::COL_ACCOUNT_BLOOM; use byteorder::{LittleEndian, ByteOrder}; const STATE_CACHE_ITEMS: usize = 256000; +const STATE_CACHE_BLOCKS: usize = 8; pub const ACCOUNT_BLOOM_SPACE: usize = 1048576; pub const DEFAULT_ACCOUNT_PRESET: usize = 1000000; pub const ACCOUNT_BLOOM_HASHCOUNT_KEY: &'static [u8] = b"account_hash_count"; +/// Shared canonical state cache. struct AccountCache { /// DB Account cache. `None` indicates that account is known to be missing. accounts: LruCache>, + /// Information on the modifications in recently committed blocks; specifically which addresses + /// changed in which block. Ordered by block number. + modifications: VecDeque, +} + +/// Buffered account cache item. +struct CacheQueueItem { + /// Account address. + address: Address, + /// Acccount data or `None` if account does not exist. + account: Option, + /// Indicates that the account was modified before being + /// added to the cache. + modified: bool, +} + +#[derive(Debug)] +/// Accumulates a list of accounts changed in a block. +struct BlockChanges { + /// Block number. + number: BlockNumber, + /// Block hash. + hash: H256, + /// Parent block hash. + parent: H256, + /// A set of modified account addresses. + accounts: HashSet

, + /// Block is part of the canonical chain. + is_canon: bool, } /// State database abstraction. -/// Manages shared global state cache. +/// Manages shared global state cache which reflects the canonical +/// state as it is on the disk. All the entries in the cache are clean. /// A clone of `StateDB` may be created as canonical or not. -/// For canonical clones cache changes are accumulated and applied -/// on commit. -/// For non-canonical clones cache is cleared on commit. +/// For canonical clones local cache is accumulated and applied +/// in `sync_cache` +/// For non-canonical clones local cache is dropped. +/// +/// Global cache propagation. +/// After a `State` object has been committed to the trie it +/// propagates its local cache into the `StateDB` local cache +/// using `add_to_account_cache` function. +/// Then, after the block has been added to the chain the local cache in the +/// `StateDB` is propagated into the global cache. pub struct StateDB { + /// Backing database. db: Box, + /// Shared canonical state cache. account_cache: Arc>, - cache_overlay: Vec<(Address, Option)>, - is_canon: bool, + /// Local dirty cache. + local_cache: Vec, + /// Shared account bloom. Does not handle chain reorganizations. account_bloom: Arc>, + /// Hash of the block on top of which this instance was created or + /// `None` if cache is disabled + parent_hash: Option, + /// Hash of the committing block or `None` if not committed yet. + commit_hash: Option, + /// Number of the committing block or `None` if not committed yet. + commit_number: Option, } impl StateDB { - - /// Create a new instance wrapping `JournalDB` - pub fn new(db: Box) -> StateDB { - let bloom = Self::load_bloom(db.backing()); - StateDB { - db: db, - account_cache: Arc::new(Mutex::new(AccountCache { accounts: LruCache::new(STATE_CACHE_ITEMS) })), - cache_overlay: Vec::new(), - is_canon: false, - account_bloom: Arc::new(Mutex::new(bloom)), - } - } - /// Loads accounts bloom from the database /// This bloom is used to handle request for the non-existant account fast pub fn load_bloom(db: &Database) -> Bloom { @@ -91,6 +129,23 @@ impl StateDB { bloom } + /// Create a new instance wrapping `JournalDB` + pub fn new(db: Box) -> StateDB { + let bloom = Self::load_bloom(db.backing()); + StateDB { + db: db, + account_cache: Arc::new(Mutex::new(AccountCache { + accounts: LruCache::new(STATE_CACHE_ITEMS), + modifications: VecDeque::new(), + })), + local_cache: Vec::new(), + account_bloom: Arc::new(Mutex::new(bloom)), + parent_hash: None, + commit_hash: None, + commit_number: None, + } + } + pub fn check_account_bloom(&self, address: &Address) -> bool { trace!(target: "account_bloom", "Check account bloom: {:?}", address); let bloom = self.account_bloom.lock(); @@ -125,14 +180,107 @@ impl StateDB { try!(Self::commit_bloom(batch, bloom_lock.drain_journal())); } let records = try!(self.db.commit(batch, now, id, end)); - if self.is_canon { - self.commit_cache(); - } else { - self.clear_cache(); - } + self.commit_hash = Some(id.clone()); + self.commit_number = Some(now); Ok(records) } + /// Propagate local cache into the global cache and synchonize + /// the global cache with the best block state. + /// This function updates the global cache by removing entries + /// that are invalidated by chain reorganization. `sync_cache` + /// should be called after the block has been committed and the + /// blockchain route has ben calculated. + pub fn sync_cache(&mut self, enacted: &[H256], retracted: &[H256], is_best: bool) { + trace!("sync_cache id = (#{:?}, {:?}), parent={:?}, best={}", self.commit_number, self.commit_hash, self.parent_hash, is_best); + let mut cache = self.account_cache.lock(); + let mut cache = &mut *cache; + + // Purge changes from re-enacted and retracted blocks. + // Filter out commiting block if any. + let mut clear = false; + for block in enacted.iter().filter(|h| self.commit_hash.as_ref().map_or(true, |p| *h != p)) { + clear = clear || { + if let Some(ref mut m) = cache.modifications.iter_mut().find(|ref m| &m.hash == block) { + trace!("Reverting enacted block {:?}", block); + m.is_canon = true; + for a in &m.accounts { + trace!("Reverting enacted address {:?}", a); + cache.accounts.remove(a); + } + false + } else { + true + } + }; + } + + for block in retracted { + clear = clear || { + if let Some(ref mut m) = cache.modifications.iter_mut().find(|ref m| &m.hash == block) { + trace!("Retracting block {:?}", block); + m.is_canon = false; + for a in &m.accounts { + trace!("Retracted address {:?}", a); + cache.accounts.remove(a); + } + false + } else { + true + } + }; + } + if clear { + // We don't know anything about the block; clear everything + trace!("Wiping cache"); + cache.accounts.clear(); + cache.modifications.clear(); + } + + // Propagate cache only if committing on top of the latest canonical state + // blocks are ordered by number and only one block with a given number is marked as canonical + // (contributed to canonical state cache) + if let (Some(ref number), Some(ref hash), Some(ref parent)) = (self.commit_number, self.commit_hash, self.parent_hash) { + if cache.modifications.len() == STATE_CACHE_BLOCKS { + cache.modifications.pop_back(); + } + let mut modifications = HashSet::new(); + trace!("committing {} cache entries", self.local_cache.len()); + for account in self.local_cache.drain(..) { + if account.modified { + modifications.insert(account.address.clone()); + } + if is_best { + if let Some(&mut Some(ref mut existing)) = cache.accounts.get_mut(&account.address) { + if let Some(new) = account.account { + if account.modified { + existing.overwrite_with(new); + } + continue; + } + } + cache.accounts.insert(account.address, account.account); + } + } + + // Save modified accounts. These are ordered by the block number. + let block_changes = BlockChanges { + accounts: modifications, + number: *number, + hash: hash.clone(), + is_canon: is_best, + parent: parent.clone(), + }; + let insert_at = cache.modifications.iter().enumerate().find(|&(_, ref m)| m.number < *number).map(|(i, _)| i); + trace!("inserting modifications at {:?}", insert_at); + if let Some(insert_at) = insert_at { + cache.modifications.insert(insert_at, block_changes); + } else { + cache.modifications.push_back(block_changes); + } + } + } + /// Returns an interface to HashDB. pub fn as_hashdb(&self) -> &HashDB { self.db.as_hashdb() @@ -148,20 +296,24 @@ impl StateDB { StateDB { db: self.db.boxed_clone(), account_cache: self.account_cache.clone(), - cache_overlay: Vec::new(), - is_canon: false, + local_cache: Vec::new(), account_bloom: self.account_bloom.clone(), + parent_hash: None, + commit_hash: None, + commit_number: None, } } /// Clone the database for a canonical state. - pub fn boxed_clone_canon(&self) -> StateDB { + pub fn boxed_clone_canon(&self, parent: &H256) -> StateDB { StateDB { db: self.db.boxed_clone(), account_cache: self.account_cache.clone(), - cache_overlay: Vec::new(), - is_canon: true, + local_cache: Vec::new(), account_bloom: self.account_bloom.clone(), + parent_hash: Some(parent.clone()), + commit_hash: None, + commit_number: None, } } @@ -180,53 +332,149 @@ impl StateDB { &*self.db } - /// Enqueue cache change. - pub fn cache_account(&mut self, addr: Address, data: Option) { - self.cache_overlay.push((addr, data)); - } - - /// Apply pending cache changes. - fn commit_cache(&mut self) { - let mut cache = self.account_cache.lock(); - for (address, account) in self.cache_overlay.drain(..) { - if let Some(&mut Some(ref mut existing)) = cache.accounts.get_mut(&address) { - if let Some(new) = account { - existing.overwrite_with(new); - continue; - } - } - cache.accounts.insert(address, account); - } - } - - /// Clear the cache. - pub fn clear_cache(&mut self) { - self.cache_overlay.clear(); - let mut cache = self.account_cache.lock(); - cache.accounts.clear(); + /// Add a local cache entry. + /// The entry will be propagated to the global cache in `sync_cache`. + /// `modified` indicates that the entry was changed since being read from disk or global cache. + /// `data` can be set to an existing (`Some`), or non-existing account (`None`). + pub fn add_to_account_cache(&mut self, addr: Address, data: Option, modified: bool) { + self.local_cache.push(CacheQueueItem { + address: addr, + account: data, + modified: modified, + }) } /// Get basic copy of the cached account. Does not include storage. - /// Returns 'None' if the state is non-canonical and cache is disabled - /// or if the account is not cached. + /// Returns 'None' if cache is disabled or if the account is not cached. pub fn get_cached_account(&self, addr: &Address) -> Option> { - if !self.is_canon { + let mut cache = self.account_cache.lock(); + if !Self::is_allowed(addr, &self.parent_hash, &cache.modifications) { return None; } - let mut cache = self.account_cache.lock(); cache.accounts.get_mut(&addr).map(|a| a.as_ref().map(|a| a.clone_basic())) } /// Get value from a cached account. - /// Returns 'None' if the state is non-canonical and cache is disabled - /// or if the account is not cached. + /// Returns 'None' if cache is disabled or if the account is not cached. pub fn get_cached(&self, a: &Address, f: F) -> Option where F: FnOnce(Option<&mut Account>) -> U { - if !self.is_canon { + let mut cache = self.account_cache.lock(); + if !Self::is_allowed(a, &self.parent_hash, &cache.modifications) { return None; } - let mut cache = self.account_cache.lock(); cache.accounts.get_mut(a).map(|c| f(c.as_mut())) } + + /// Check if the account can be returned from cache by matching current block parent hash against canonical + /// state and filtering out account modified in later blocks. + fn is_allowed(addr: &Address, parent_hash: &Option, modifications: &VecDeque) -> bool { + let mut parent = match *parent_hash { + None => { + trace!("Cache lookup skipped for {:?}: no parent hash", addr); + return false; + } + Some(ref parent) => parent, + }; + if modifications.is_empty() { + return true; + } + // Ignore all accounts modified in later blocks + // Modifications contains block ordered by the number + // We search for our parent in that list first and then for + // all its parent until we hit the canonical block, + // checking against all the intermediate modifications. + let mut iter = modifications.iter(); + while let Some(ref m) = iter.next() { + if &m.hash == parent { + if m.is_canon { + return true; + } + parent = &m.parent; + } + if m.accounts.contains(addr) { + trace!("Cache lookup skipped for {:?}: modified in a later block", addr); + return false; + } + } + trace!("Cache lookup skipped for {:?}: parent hash is unknown", addr); + return false; + } +} + +#[cfg(test)] +mod tests { + +use util::{U256, H256, FixedHash, Address, DBTransaction}; +use tests::helpers::*; +use state::Account; +use util::log::init_log; + +#[test] +fn state_db_smoke() { + init_log(); + + let mut state_db_result = get_temp_state_db(); + let state_db = state_db_result.take(); + let root_parent = H256::random(); + let address = Address::random(); + let h0 = H256::random(); + let h1a = H256::random(); + let h1b = H256::random(); + let h2a = H256::random(); + let h2b = H256::random(); + let h3a = H256::random(); + let h3b = H256::random(); + let mut batch = DBTransaction::new(state_db.journal_db().backing()); + + // blocks [ 3a(c) 2a(c) 2b 1b 1a(c) 0 ] + // balance [ 5 5 4 3 2 2 ] + let mut s = state_db.boxed_clone_canon(&root_parent); + s.add_to_account_cache(address, Some(Account::new_basic(2.into(), 0.into())), false); + s.commit(&mut batch, 0, &h0, None).unwrap(); + s.sync_cache(&[], &[], true); + + let mut s = state_db.boxed_clone_canon(&h0); + s.commit(&mut batch, 1, &h1a, None).unwrap(); + s.sync_cache(&[], &[], true); + + let mut s = state_db.boxed_clone_canon(&h0); + s.add_to_account_cache(address, Some(Account::new_basic(3.into(), 0.into())), true); + s.commit(&mut batch, 1, &h1b, None).unwrap(); + s.sync_cache(&[], &[], false); + + let mut s = state_db.boxed_clone_canon(&h1b); + s.add_to_account_cache(address, Some(Account::new_basic(4.into(), 0.into())), true); + s.commit(&mut batch, 2, &h2b, None).unwrap(); + s.sync_cache(&[], &[], false); + + let mut s = state_db.boxed_clone_canon(&h1a); + s.add_to_account_cache(address, Some(Account::new_basic(5.into(), 0.into())), true); + s.commit(&mut batch, 2, &h2a, None).unwrap(); + s.sync_cache(&[], &[], true); + + let mut s = state_db.boxed_clone_canon(&h2a); + s.commit(&mut batch, 3, &h3a, None).unwrap(); + s.sync_cache(&[], &[], true); + + let s = state_db.boxed_clone_canon(&h3a); + assert_eq!(s.get_cached_account(&address).unwrap().unwrap().balance(), &U256::from(5)); + + let s = state_db.boxed_clone_canon(&h1a); + assert!(s.get_cached_account(&address).is_none()); + + let s = state_db.boxed_clone_canon(&h2b); + assert!(s.get_cached_account(&address).is_none()); + + let s = state_db.boxed_clone_canon(&h1b); + assert!(s.get_cached_account(&address).is_none()); + + // reorg to 3b + // blocks [ 3b(c) 3a 2a 2b(c) 1b 1a 0 ] + let mut s = state_db.boxed_clone_canon(&h2b); + s.commit(&mut batch, 3, &h3b, None).unwrap(); + s.sync_cache(&[h1b.clone(), h2b.clone(), h3b.clone()], &[h1a.clone(), h2a.clone(), h3a.clone()], true); + let s = state_db.boxed_clone_canon(&h3a); + assert!(s.get_cached_account(&address).is_none()); +} } -- GitLab From 4276ab8a5f18844fb8947732a03bbd53f0a13636 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 7 Oct 2016 13:59:50 +0200 Subject: [PATCH 023/393] fix JSON tests --- ethcore/src/json_tests/executive.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethcore/src/json_tests/executive.rs b/ethcore/src/json_tests/executive.rs index 5576f9ad4e..8979b82535 100644 --- a/ethcore/src/json_tests/executive.rs +++ b/ethcore/src/json_tests/executive.rs @@ -191,7 +191,7 @@ fn do_json_test_for(vm_type: &VMType, json_data: &[u8]) -> Vec { state.populate_from(From::from(vm.pre_state.clone())); let info = From::from(vm.env); let engine = TestEngine::new(1); - let vm_factory = Factory::new(vm_type.clone()); + let vm_factory = Factory::new(vm_type.clone(), 1024 * 32); let params = ActionParams::from(vm.transaction); let mut substate = Substate::new(); -- GitLab From f200eb2cfe80f409603b14baf1341632ad18b1b2 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Sat, 8 Oct 2016 10:35:54 +0200 Subject: [PATCH 024/393] Backports to master (#2530) * Transaction queue limited by gas (#2528) * Use global state cache when mining (#2529) --- ethcore/src/client/client.rs | 2 +- ethcore/src/miner/miner.rs | 4 +- ethcore/src/miner/transaction_queue.rs | 75 ++++++++++++++++++++------ sync/src/chain.rs | 8 ++- 4 files changed, 69 insertions(+), 20 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index a5bc63922d..bfdcb97f5e 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -1095,7 +1095,7 @@ impl MiningBlockChainClient for Client { engine, self.factories.clone(), false, // TODO: this will need to be parameterised once we want to do immediate mining insertion. - self.state_db.lock().boxed_clone(), + self.state_db.lock().boxed_clone_canon(&h), &chain.block_header(&h).expect("h is best block hash: so its header must exist: qed"), self.build_last_hashes(h.clone()), author, diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 0d02f86319..7348db5666 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -194,7 +194,7 @@ impl Miner { true => None, false => Some(WorkPoster::new(&options.new_work_notify)) }; - let txq = Arc::new(Mutex::new(TransactionQueue::with_limits(options.tx_queue_size, options.tx_gas_limit))); + let txq = Arc::new(Mutex::new(TransactionQueue::with_limits(options.tx_queue_size, !U256::zero(), options.tx_gas_limit))); Miner { transaction_queue: txq, next_allowed_reseal: Mutex::new(Instant::now()), @@ -443,6 +443,8 @@ impl Miner { let gas_limit = HeaderView::new(&chain.best_block_header()).gas_limit(); let mut queue = self.transaction_queue.lock(); queue.set_gas_limit(gas_limit); + // Set total qx queue gas limit to be 2x the block gas limit. + queue.set_total_gas_limit(gas_limit << 1); } /// Returns true if we had to prepare new pending block. diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index 02e569cf2e..38923438c2 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -130,6 +130,8 @@ struct TransactionOrder { /// (e.g. Tx(nonce:5), State(nonce:0) -> height: 5) /// High nonce_height = Low priority (processed later) nonce_height: U256, + /// Gas specified in the transaction. + gas: U256, /// Gas Price of the transaction. /// Low gas price = Low priority (processed later) gas_price: U256, @@ -146,6 +148,7 @@ impl TransactionOrder { fn for_transaction(tx: &VerifiedTransaction, base_nonce: U256) -> Self { TransactionOrder { nonce_height: tx.nonce() - base_nonce, + gas: tx.transaction.gas.clone(), gas_price: tx.transaction.gas_price, hash: tx.hash(), origin: tx.origin, @@ -287,6 +290,7 @@ struct TransactionSet { by_address: Table, by_gas_price: GasPriceQueue, limit: usize, + gas_limit: U256, } impl TransactionSet { @@ -317,15 +321,18 @@ impl TransactionSet { /// It drops transactions from this set but also removes associated `VerifiedTransaction`. /// Returns addresses and lowest nonces of transactions removed because of limit. fn enforce_limit(&mut self, by_hash: &mut HashMap) -> Option> { - let len = self.by_priority.len(); - if len <= self.limit { - return None; - } - + let mut count = 0; + let mut gas: U256 = 0.into(); let to_drop : Vec<(Address, U256)> = { self.by_priority .iter() - .skip(self.limit) + .skip_while(|order| { + count = count + 1; + let r = gas.overflowing_add(order.gas); + if r.1 { return false } + gas = r.0; + count <= self.limit && gas <= self.gas_limit + }) .map(|order| by_hash.get(&order.hash) .expect("All transactions in `self.by_priority` and `self.by_address` are kept in sync with `by_hash`.")) .map(|tx| (tx.sender(), tx.nonce())) @@ -432,16 +439,17 @@ impl Default for TransactionQueue { impl TransactionQueue { /// Creates new instance of this Queue pub fn new() -> Self { - Self::with_limits(1024, !U256::zero()) + Self::with_limits(1024, !U256::zero(), !U256::zero()) } /// Create new instance of this Queue with specified limits - pub fn with_limits(limit: usize, tx_gas_limit: U256) -> Self { + pub fn with_limits(limit: usize, gas_limit: U256, tx_gas_limit: U256) -> Self { let current = TransactionSet { by_priority: BTreeSet::new(), by_address: Table::new(), by_gas_price: Default::default(), limit: limit, + gas_limit: gas_limit, }; let future = TransactionSet { @@ -449,6 +457,7 @@ impl TransactionQueue { by_address: Table::new(), by_gas_price: Default::default(), limit: limit, + gas_limit: gas_limit, }; TransactionQueue { @@ -504,6 +513,13 @@ impl TransactionQueue { }; } + /// Sets new total gas limit. + pub fn set_total_gas_limit(&mut self, gas_limit: U256) { + self.future.gas_limit = gas_limit; + self.current.gas_limit = gas_limit; + self.future.enforce_limit(&mut self.by_hash); + } + /// Set the new limit for the amount of gas any individual transaction may have. /// Any transaction already imported to the queue is not affected. pub fn set_tx_gas_limit(&mut self, limit: U256) { @@ -827,6 +843,16 @@ impl TransactionQueue { let nonce = tx.nonce(); let hash = tx.hash(); + { + // Rough size sanity check + let gas = &tx.transaction.gas; + if U256::from(tx.transaction.data.len()) > *gas { + // Droping transaction + trace!(target: "txqueue", "Dropping oversized transaction: {:?} (gas: {} < size {})", hash, gas, tx.transaction.data.len()); + return Err(TransactionError::LimitReached); + } + } + // The transaction might be old, let's check that. // This has to be the first test, otherwise calculating // nonce height would result in overflow. @@ -979,6 +1005,7 @@ mod test { } fn default_nonce() -> U256 { 123.into() } + fn default_gas_val() -> U256 { 100_000.into() } fn default_gas_price() -> U256 { 1.into() } fn new_unsigned_tx(nonce: U256, gas_price: U256) -> Transaction { @@ -986,7 +1013,7 @@ mod test { action: Action::Create, value: U256::from(100), data: "3331600055".from_hex().unwrap(), - gas: U256::from(100_000), + gas: default_gas_val(), gas_price: gas_price, nonce: nonce } @@ -1051,7 +1078,7 @@ mod test { #[test] fn should_return_correct_nonces_when_dropped_because_of_limit() { // given - let mut txq = TransactionQueue::with_limits(2, !U256::zero()); + let mut txq = TransactionQueue::with_limits(2, !U256::zero(), !U256::zero()); let (tx1, tx2) = new_tx_pair(123.into(), 1.into(), 1.into(), 0.into()); let sender = tx1.sender().unwrap(); let nonce = tx1.nonce; @@ -1089,7 +1116,8 @@ mod test { by_priority: BTreeSet::new(), by_address: Table::new(), by_gas_price: Default::default(), - limit: 1 + limit: 1, + gas_limit: !U256::zero(), }; let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); let tx1 = VerifiedTransaction::new(tx1, TransactionOrigin::External).unwrap(); @@ -1129,7 +1157,8 @@ mod test { by_priority: BTreeSet::new(), by_address: Table::new(), by_gas_price: Default::default(), - limit: 1 + limit: 1, + gas_limit: !U256::zero(), }; // Create two transactions with same nonce // (same hash) @@ -1177,7 +1206,8 @@ mod test { by_priority: BTreeSet::new(), by_address: Table::new(), by_gas_price: Default::default(), - limit: 2 + limit: 2, + gas_limit: !U256::zero(), }; let tx = new_tx_default(); let tx1 = VerifiedTransaction::new(tx.clone(), TransactionOrigin::External).unwrap(); @@ -1194,7 +1224,8 @@ mod test { by_priority: BTreeSet::new(), by_address: Table::new(), by_gas_price: Default::default(), - limit: 1 + limit: 1, + gas_limit: !U256::zero(), }; assert_eq!(set.gas_price_entry_limit(), 0.into()); @@ -1690,7 +1721,7 @@ mod test { #[test] fn should_drop_old_transactions_when_hitting_the_limit() { // given - let mut txq = TransactionQueue::with_limits(1, !U256::zero()); + let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let sender = tx.sender().unwrap(); let nonce = tx.nonce; @@ -1711,7 +1742,7 @@ mod test { #[test] fn should_limit_future_transactions() { - let mut txq = TransactionQueue::with_limits(1, !U256::zero()); + let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); txq.current.set_limit(10); let (tx1, tx2) = new_tx_pair_default(4.into(), 1.into()); let (tx3, tx4) = new_tx_pair_default(4.into(), 2.into()); @@ -1728,6 +1759,16 @@ mod test { assert_eq!(txq.status().future, 1); } + #[test] + fn should_limit_by_gas() { + let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); + let (tx1, _) = new_tx_pair_default(U256::from(4), U256::from(1)); + let (tx3, _) = new_tx_pair_default(U256::from(4), U256::from(2)); + txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + assert_eq!(txq.status().pending, 2); + } + #[test] fn should_drop_transactions_with_old_nonces() { let mut txq = TransactionQueue::new(); @@ -1971,7 +2012,7 @@ mod test { #[test] fn should_keep_right_order_in_future() { // given - let mut txq = TransactionQueue::with_limits(1, !U256::zero()); + let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); let prev_nonce = |a: &Address| AccountDetails { nonce: default_account_details(a).nonce - U256::one(), balance: default_account_details(a).balance }; diff --git a/sync/src/chain.rs b/sync/src/chain.rs index 565c538279..d72ad400ce 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -123,6 +123,7 @@ const MAX_ROUND_PARENTS: usize = 32; const MAX_NEW_HASHES: usize = 64; const MAX_TX_TO_IMPORT: usize = 512; const MAX_NEW_BLOCK_AGE: BlockNumber = 20; +const MAX_TRANSACTION_SIZE: usize = 300*1024; const STATUS_PACKET: u8 = 0x00; const NEW_BLOCK_HASHES_PACKET: u8 = 0x01; @@ -1261,7 +1262,12 @@ impl ChainSync { item_count = min(item_count, MAX_TX_TO_IMPORT); let mut transactions = Vec::with_capacity(item_count); for i in 0 .. item_count { - let tx = try!(r.at(i)).as_raw().to_vec(); + let rlp = try!(r.at(i)); + if rlp.as_raw().len() > MAX_TRANSACTION_SIZE { + debug!("Skipped oversized transaction of {} bytes", rlp.as_raw().len()); + continue; + } + let tx = rlp.as_raw().to_vec(); transactions.push(tx); } io.chain().queue_transactions(transactions); -- GitLab From d6cad29f49ffae75c5af09a45fca788945aad772 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Sat, 8 Oct 2016 17:33:38 +0200 Subject: [PATCH 025/393] Print backtrace on panic (#2535) --- parity/main.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parity/main.rs b/parity/main.rs index b74af7b3d8..e0d6dfe367 100644 --- a/parity/main.rs +++ b/parity/main.rs @@ -196,6 +196,9 @@ fn sync_main() -> bool { } fn main() { + // Always print backtrace on panic. + ::std::env::set_var("RUST_BACKTRACE", "1"); + if sync_main() { return; } -- GitLab From 271bcf4d5d2090fdc66e4c893217a16c50f2aa2a Mon Sep 17 00:00:00 2001 From: keorn Date: Sun, 9 Oct 2016 10:45:12 +0100 Subject: [PATCH 026/393] Return errors from eth_call RPC (#2498) * propagate call errors * add error code for execution error --- rpc/src/v1/helpers/errors.rs | 19 +++++++++++++++++-- rpc/src/v1/impls/eth.rs | 5 ++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 48a3eeb1ff..0d7902897a 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -21,7 +21,7 @@ macro_rules! rpc_unimplemented { } use std::fmt; -use ethcore::error::Error as EthcoreError; +use ethcore::error::{Error as EthcoreError, CallError}; use ethcore::account_provider::{Error as AccountError}; use fetch::FetchError; use jsonrpc_core::{Error, ErrorCode, Value}; @@ -34,6 +34,7 @@ mod codes { pub const NO_NEW_WORK: i64 = -32003; pub const UNKNOWN_ERROR: i64 = -32009; pub const TRANSACTION_ERROR: i64 = -32010; + pub const EXECUTION_ERROR: i64 = -32015; pub const ACCOUNT_LOCKED: i64 = -32020; pub const PASSWORD_INVALID: i64 = -32021; pub const ACCOUNT_ERROR: i64 = -32023; @@ -109,6 +110,14 @@ pub fn invalid_params(param: &str, details: T) -> Error { } } +pub fn execution(data: T) -> Error { + Error { + code: ErrorCode::ServerError(codes::EXECUTION_ERROR), + message: "Transaction execution error.".into(), + data: Some(Value::String(format!("{:?}", data))), + } +} + pub fn state_pruned() -> Error { Error { code: ErrorCode::ServerError(codes::UNSUPPORTED_REQUEST), @@ -219,4 +228,10 @@ pub fn from_transaction_error(error: EthcoreError) -> Error { } } - +pub fn from_call_error(error: CallError) -> Error { + match error { + CallError::StatePruned => state_pruned(), + CallError::Execution(e) => execution(e), + CallError::TransactionNotFound => internal("{}, this should not be the case with eth_call, most likely a bug.", CallError::TransactionNotFound), + } +} diff --git a/rpc/src/v1/impls/eth.rs b/rpc/src/v1/impls/eth.rs index c45f62c75d..c13229222f 100644 --- a/rpc/src/v1/impls/eth.rs +++ b/rpc/src/v1/impls/eth.rs @@ -593,7 +593,10 @@ impl Eth for EthClient where num => take_weak!(self.client).call(&signed, num.into(), Default::default()), }; - Ok(r.map(|e| Bytes(e.output)).unwrap_or(Bytes::new(vec![]))) + match r { + Ok(b) => Ok(Bytes(b.output)), + Err(e) => Err(errors::from_call_error(e)), + } } fn estimate_gas(&self, request: CallRequest, num: Trailing) -> Result { -- GitLab From 06df5357e901f8ecb85c8b9001e4631644fbc4b8 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Mon, 10 Oct 2016 16:34:16 +0200 Subject: [PATCH 027/393] adjust app_id where /api/content/ is called, fixes #2541 (#2543) --- dapps/src/api/api.rs | 5 ++++- dapps/src/apps/fetcher.rs | 3 +-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dapps/src/api/api.rs b/dapps/src/api/api.rs index 9a8dfef959..80c5e09dee 100644 --- a/dapps/src/api/api.rs +++ b/dapps/src/api/api.rs @@ -92,11 +92,14 @@ impl server::Handler for RestApiRouter { } let url = url.expect("Check for None early-exists above; qed"); - let path = self.path.take().expect("on_request called only once, and path is always defined in new; qed"); + let mut path = self.path.take().expect("on_request called only once, and path is always defined in new; qed"); let control = self.control.take().expect("on_request called only once, and control is always defined in new; qed"); let endpoint = url.path.get(1).map(|v| v.as_str()); let hash = url.path.get(2).map(|v| v.as_str()); + // at this point path.app_id contains 'api', adjust it to the hash properly, otherwise + // we will try and retrieve 'api' as the hash when doing the /api/content route + if let Some(hash) = hash.clone() { path.app_id = hash.to_owned() } let handler = endpoint.and_then(|v| match v { "apps" => Some(as_json(&self.api.list_apps())), diff --git a/dapps/src/apps/fetcher.rs b/dapps/src/apps/fetcher.rs index 8702e4706b..2e13288583 100644 --- a/dapps/src/apps/fetcher.rs +++ b/dapps/src/apps/fetcher.rs @@ -122,7 +122,7 @@ impl ContentFetcher { }, // We need to start fetching app None => { - trace!(target: "dapps", "Content unavailable. Fetching..."); + trace!(target: "dapps", "Content unavailable. Fetching... {:?}", content_id); let content_hex = content_id.from_hex().expect("to_handler is called only when `contains` returns true."); let content = self.resolver.resolve(content_hex); @@ -415,4 +415,3 @@ mod tests { assert_eq!(fetcher.contains("test3"), false); } } - -- GitLab From ae6c965176c85b0071437803e04b4f1a5270d8db Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 10 Oct 2016 17:43:05 +0200 Subject: [PATCH 028/393] Removing unwarps from sync module (#2551) --- sync/src/blocks.rs | 6 +- sync/src/chain.rs | 192 ++++++++++++++++++++-------------------- sync/src/tests/chain.rs | 1 + 3 files changed, 102 insertions(+), 97 deletions(-) diff --git a/sync/src/blocks.rs b/sync/src/blocks.rs index beaa49c603..ae2092f257 100644 --- a/sync/src/blocks.rs +++ b/sync/src/blocks.rs @@ -184,8 +184,8 @@ impl BlockCollection { { let mut blocks = Vec::new(); let mut head = self.head; - while head.is_some() { - head = self.parents.get(&head.unwrap()).cloned(); + while let Some(h) = head { + head = self.parents.get(&h).cloned(); if let Some(head) = head { match self.blocks.get(&head) { Some(block) if block.body.is_some() => { @@ -201,7 +201,7 @@ impl BlockCollection { for block in blocks.drain(..) { let mut block_rlp = RlpStream::new_list(3); block_rlp.append_raw(&block.header, 1); - let body = Rlp::new(block.body.as_ref().unwrap()); // incomplete blocks are filtered out in the loop above + let body = Rlp::new(block.body.as_ref().expect("blocks contains only full blocks; qed")); block_rlp.append_raw(body.at(0).as_raw(), 1); block_rlp.append_raw(body.at(1).as_raw(), 1); drained.push(block_rlp.out()); diff --git a/sync/src/chain.rs b/sync/src/chain.rs index d72ad400ce..ddefb13aff 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -90,7 +90,6 @@ use util::*; use rlp::*; use network::*; -use std::mem::{replace}; use ethcore::views::{HeaderView, BlockView}; use ethcore::header::{BlockNumber, Header as BlockHeader}; use ethcore::client::{BlockChainClient, BlockStatus, BlockID, BlockChainInfo, BlockImportError}; @@ -250,8 +249,6 @@ struct PeerInfo { network_id: U256, /// Peer best block hash latest_hash: H256, - /// Peer best block number if known - latest_number: Option, /// Peer total difficulty if known difficulty: Option, /// Type of data currenty being requested from peer. @@ -444,7 +441,6 @@ impl ChainSync { network_id: try!(r.val_at(1)), difficulty: Some(try!(r.val_at(2))), latest_hash: try!(r.val_at(3)), - latest_number: None, genesis: try!(r.val_at(4)), asking: PeerAsking::Nothing, asking_blocks: Vec::new(), @@ -497,7 +493,8 @@ impl ChainSync { let confirmed = match self.peers.get_mut(&peer_id) { Some(ref mut peer) if peer.asking == PeerAsking::ForkHeader => { let item_count = r.item_count(); - if item_count == 0 || (item_count == 1 && try!(r.at(0)).as_raw().sha3() == self.fork_block.unwrap().1) { + if item_count == 0 || (item_count == 1 && + try!(r.at(0)).as_raw().sha3() == self.fork_block.expect("ForkHeader state is only entered when fork_block is some; qed").1) { peer.asking = PeerAsking::Nothing; if item_count == 0 { trace!(target: "sync", "{}: Chain is too short to confirm the block", peer_id); @@ -563,7 +560,7 @@ impl ChainSync { continue; } - if self.highest_block == None || number > self.highest_block.unwrap() { + if self.highest_block.as_ref().map_or(true, |n| number > *n) { self.highest_block = Some(number); } let hash = info.hash(); @@ -676,9 +673,9 @@ impl ChainSync { } let mut unknown = false; { - let peer = self.peers.get_mut(&peer_id).unwrap(); - peer.latest_hash = header.hash(); - peer.latest_number = Some(header.number()); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.latest_hash = header.hash(); + } } if self.last_imported_block > header.number() && self.last_imported_block - header.number() > MAX_NEW_BLOCK_AGE { trace!(target: "sync", "Ignored ancient new block {:?}", h); @@ -771,9 +768,9 @@ impl ChainSync { new_hashes.push(hash.clone()); if number > max_height { trace!(target: "sync", "New unknown block hash {:?}", hash); - let peer = self.peers.get_mut(&peer_id).unwrap(); - peer.latest_hash = hash.clone(); - peer.latest_number = Some(number); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.latest_hash = hash.clone(); + } max_height = number; } }, @@ -943,19 +940,22 @@ impl ChainSync { return; } let (peer_latest, peer_difficulty, peer_snapshot_number, peer_snapshot_hash) = { - let peer = self.peers.get_mut(&peer_id).unwrap(); - if peer.asking != PeerAsking::Nothing || !peer.can_sync() { - return; - } - if self.state == SyncState::Waiting { - trace!(target: "sync", "Waiting for the block queue"); - return; - } - if self.state == SyncState::SnapshotWaiting { - trace!(target: "sync", "Waiting for the snapshot restoration"); + if let Some(ref peer) = self.peers.get_mut(&peer_id) { + if peer.asking != PeerAsking::Nothing || !peer.can_sync() { + return; + } + if self.state == SyncState::Waiting { + trace!(target: "sync", "Waiting for the block queue"); + return; + } + if self.state == SyncState::SnapshotWaiting { + trace!(target: "sync", "Waiting for the snapshot restoration"); + return; + } + (peer.latest_hash.clone(), peer.difficulty.clone(), peer.snapshot_number.as_ref().cloned(), peer.snapshot_hash.as_ref().cloned()) + } else { return; } - (peer.latest_hash.clone(), peer.difficulty.clone(), peer.snapshot_number.as_ref().cloned(), peer.snapshot_hash.as_ref().cloned()) }; let chain_info = io.chain().chain_info(); let td = chain_info.pending_total_difficulty; @@ -1043,14 +1043,18 @@ impl ChainSync { // check to see if we need to download any block bodies first let needed_bodies = self.blocks.needed_bodies(MAX_BODIES_TO_REQUEST, ignore_others); if !needed_bodies.is_empty() { - replace(&mut self.peers.get_mut(&peer_id).unwrap().asking_blocks, needed_bodies.clone()); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.asking_blocks = needed_bodies.clone(); + } self.request_bodies(io, peer_id, needed_bodies); return; } // find subchain to download if let Some((h, count)) = self.blocks.needed_headers(MAX_HEADERS_TO_REQUEST, ignore_others) { - replace(&mut self.peers.get_mut(&peer_id).unwrap().asking_blocks, vec![h.clone()]); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.asking_blocks = vec![h.clone()]; + } self.request_headers_by_hash(io, peer_id, &h, count, 0, false, PeerAsking::BlockHeaders); } } @@ -1060,34 +1064,37 @@ impl ChainSync { self.clear_peer_download(peer_id); // find chunk data to download if let Some(hash) = self.snapshot.needed_chunk() { - self.peers.get_mut(&peer_id).unwrap().asking_snapshot_data = Some(hash.clone()); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.asking_snapshot_data = Some(hash.clone()); + } self.request_snapshot_chunk(io, peer_id, &hash); } } /// Clear all blocks/headers marked as being downloaded by a peer. fn clear_peer_download(&mut self, peer_id: PeerId) { - let peer = self.peers.get_mut(&peer_id).unwrap(); - match peer.asking { - PeerAsking::BlockHeaders | PeerAsking::Heads => { - for b in &peer.asking_blocks { - self.blocks.clear_header_download(b); - } - }, - PeerAsking::BlockBodies => { - for b in &peer.asking_blocks { - self.blocks.clear_body_download(b); - } - }, - PeerAsking::SnapshotData => { - if let Some(hash) = peer.asking_snapshot_data { - self.snapshot.clear_chunk_download(&hash); - } - }, - _ => (), + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + match peer.asking { + PeerAsking::BlockHeaders | PeerAsking::Heads => { + for b in &peer.asking_blocks { + self.blocks.clear_header_download(b); + } + }, + PeerAsking::BlockBodies => { + for b in &peer.asking_blocks { + self.blocks.clear_body_download(b); + } + }, + PeerAsking::SnapshotData => { + if let Some(hash) = peer.asking_snapshot_data { + self.snapshot.clear_chunk_download(&hash); + } + }, + _ => (), + } + peer.asking_blocks.clear(); + peer.asking_snapshot_data = None; } - peer.asking_blocks.clear(); - peer.asking_snapshot_data = None; } fn block_imported(&mut self, hash: &H256, number: BlockNumber, parent: &H256) { @@ -1212,30 +1219,34 @@ impl ChainSync { /// Reset peer status after request is complete. fn reset_peer_asking(&mut self, peer_id: PeerId, asking: PeerAsking) -> bool { - let peer = self.peers.get_mut(&peer_id).unwrap(); - peer.expired = false; - if peer.asking != asking { - trace!(target:"sync", "Asking {:?} while expected {:?}", peer.asking, asking); - peer.asking = PeerAsking::Nothing; + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.expired = false; + if peer.asking != asking { + trace!(target:"sync", "Asking {:?} while expected {:?}", peer.asking, asking); + peer.asking = PeerAsking::Nothing; + false + } + else { + peer.asking = PeerAsking::Nothing; + true + } + } else { false } - else { - peer.asking = PeerAsking::Nothing; - true - } } /// Generic request sender fn send_request(&mut self, sync: &mut SyncIo, peer_id: PeerId, asking: PeerAsking, packet_id: PacketId, packet: Bytes) { - let peer = self.peers.get_mut(&peer_id).unwrap(); - if peer.asking != PeerAsking::Nothing { - warn!(target:"sync", "Asking {:?} while requesting {:?}", peer.asking, asking); - } - peer.asking = asking; - peer.ask_time = time::precise_time_s(); - if let Err(e) = sync.send(peer_id, packet_id, packet) { - debug!(target:"sync", "Error sending request: {:?}", e); - sync.disable_peer(peer_id); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + if peer.asking != PeerAsking::Nothing { + warn!(target:"sync", "Asking {:?} while requesting {:?}", peer.asking, asking); + } + peer.asking = asking; + peer.ask_time = time::precise_time_s(); + if let Err(e) = sync.send(peer_id, packet_id, packet) { + debug!(target:"sync", "Error sending request: {:?}", e); + sync.disable_peer(peer_id); + } } } @@ -1610,7 +1621,7 @@ impl ChainSync { /// creates latest block rlp for the given client fn create_latest_block_rlp(chain: &BlockChainClient) -> Bytes { let mut rlp_stream = RlpStream::new_list(2); - rlp_stream.append_raw(&chain.block(BlockID::Hash(chain.chain_info().best_block_hash)).unwrap(), 1); + rlp_stream.append_raw(&chain.block(BlockID::Hash(chain.chain_info().best_block_hash)).expect("Best block always exists"), 1); rlp_stream.append(&chain.chain_info().total_difficulty); rlp_stream.out() } @@ -1624,25 +1635,23 @@ impl ChainSync { } /// returns peer ids that have less blocks than our chain - fn get_lagging_peers(&mut self, chain_info: &BlockChainInfo, io: &SyncIo) -> Vec<(PeerId, BlockNumber)> { + fn get_lagging_peers(&mut self, chain_info: &BlockChainInfo, io: &SyncIo) -> Vec { let latest_hash = chain_info.best_block_hash; - let latest_number = chain_info.best_block_number; self.peers.iter_mut().filter_map(|(&id, ref mut peer_info)| match io.chain().block_status(BlockID::Hash(peer_info.latest_hash.clone())) { BlockStatus::InChain => { - if peer_info.latest_number.is_none() { - peer_info.latest_number = Some(HeaderView::new(&io.chain().block_header(BlockID::Hash(peer_info.latest_hash.clone())).unwrap()).number()); + if peer_info.latest_hash != latest_hash { + Some(id) + } else { + None } - if peer_info.latest_hash != latest_hash && latest_number > peer_info.latest_number.unwrap() { - Some((id, peer_info.latest_number.unwrap())) - } else { None } }, _ => None }) .collect::>() } - fn select_random_lagging_peers(&mut self, peers: &[(PeerId, BlockNumber)]) -> Vec<(PeerId, BlockNumber)> { + fn select_random_lagging_peers(&mut self, peers: &[PeerId]) -> Vec { use rand::Rng; // take sqrt(x) peers let mut peers = peers.to_vec(); @@ -1655,46 +1664,42 @@ impl ChainSync { } /// propagates latest block to lagging peers - fn propagate_blocks(&mut self, chain_info: &BlockChainInfo, io: &mut SyncIo, sealed: &[H256], peers: &[(PeerId, BlockNumber)]) -> usize { + fn propagate_blocks(&mut self, chain_info: &BlockChainInfo, io: &mut SyncIo, sealed: &[H256], peers: &[PeerId]) -> usize { trace!(target: "sync", "Sending NewBlocks to {:?}", peers); let mut sent = 0; - for &(peer_id, _) in peers { + for peer_id in peers { if sealed.is_empty() { let rlp = ChainSync::create_latest_block_rlp(io.chain()); - self.send_packet(io, peer_id, NEW_BLOCK_PACKET, rlp); + self.send_packet(io, *peer_id, NEW_BLOCK_PACKET, rlp); } else { for h in sealed { let rlp = ChainSync::create_new_block_rlp(io.chain(), h); - self.send_packet(io, peer_id, NEW_BLOCK_PACKET, rlp); + self.send_packet(io, *peer_id, NEW_BLOCK_PACKET, rlp); } } - self.peers.get_mut(&peer_id).unwrap().latest_hash = chain_info.best_block_hash.clone(); - self.peers.get_mut(&peer_id).unwrap().latest_number = Some(chain_info.best_block_number); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.latest_hash = chain_info.best_block_hash.clone(); + } sent += 1; } sent } /// propagates new known hashes to all peers - fn propagate_new_hashes(&mut self, chain_info: &BlockChainInfo, io: &mut SyncIo, peers: &[(PeerId, BlockNumber)]) -> usize { + fn propagate_new_hashes(&mut self, chain_info: &BlockChainInfo, io: &mut SyncIo, peers: &[PeerId]) -> usize { trace!(target: "sync", "Sending NewHashes to {:?}", peers); let mut sent = 0; - let last_parent = HeaderView::new(&io.chain().block_header(BlockID::Hash(chain_info.best_block_hash.clone())).unwrap()).parent_hash(); - for &(peer_id, peer_number) in peers { - let peer_best = if chain_info.best_block_number - peer_number > MAX_PEER_LAG_PROPAGATION as BlockNumber { - // If we think peer is too far behind just send one latest hash - last_parent.clone() - } else { - self.peers.get(&peer_id).unwrap().latest_hash.clone() - }; - sent += match ChainSync::create_new_hashes_rlp(io.chain(), &peer_best, &chain_info.best_block_hash) { + let last_parent = HeaderView::new(&io.chain().block_header(BlockID::Hash(chain_info.best_block_hash.clone())) + .expect("Best block always exists")).parent_hash(); + for peer_id in peers { + sent += match ChainSync::create_new_hashes_rlp(io.chain(), &last_parent, &chain_info.best_block_hash) { Some(rlp) => { { - let peer = self.peers.get_mut(&peer_id).unwrap(); - peer.latest_hash = chain_info.best_block_hash.clone(); - peer.latest_number = Some(chain_info.best_block_number); + if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + peer.latest_hash = chain_info.best_block_hash.clone(); + } } - self.send_packet(io, peer_id, NEW_BLOCK_HASHES_PACKET, rlp); + self.send_packet(io, *peer_id, NEW_BLOCK_HASHES_PACKET, rlp); 1 }, None => 0 @@ -2007,7 +2012,6 @@ mod tests { genesis: H256::zero(), network_id: U256::zero(), latest_hash: peer_latest_hash, - latest_number: None, difficulty: None, asking: PeerAsking::Nothing, asking_blocks: Vec::new(), diff --git a/sync/src/tests/chain.rs b/sync/src/tests/chain.rs index d8d3d0711b..a876714bd8 100644 --- a/sync/src/tests/chain.rs +++ b/sync/src/tests/chain.rs @@ -116,6 +116,7 @@ fn net_hard_fork() { #[test] fn restart() { + ::env_logger::init().ok(); let mut net = TestNet::new(3); net.peer_mut(1).chain.add_blocks(1000, EachBlockWith::Uncle); net.peer_mut(2).chain.add_blocks(1000, EachBlockWith::Uncle); -- GitLab From 64f6f836ab323fe274bddd0863fa658bae1f2451 Mon Sep 17 00:00:00 2001 From: keorn Date: Mon, 10 Oct 2016 16:43:44 +0100 Subject: [PATCH 029/393] Remove unwrap from client module (#2554) * remove unwraps in client * imporve block hash expect message --- ethcore/src/client/client.rs | 113 ++++++++++++++++------------------- 1 file changed, 52 insertions(+), 61 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index bfdcb97f5e..d87f2d05e2 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -147,13 +147,6 @@ pub struct Client { /// assume finality of a given candidate. pub const HISTORY: u64 = 1200; -/// Append a path element to the given path and return the string. -pub fn append_path

(path: P, item: &str) -> String where P: AsRef { - let mut p = path.as_ref().to_path_buf(); - p.push(item); - p.to_str().unwrap().to_owned() -} - impl Client { /// Create a new client with given spec and DB path and custom verifier. pub fn new( @@ -167,7 +160,7 @@ impl Client { let path = path.to_path_buf(); let gb = spec.genesis_block(); - let db = Arc::new(try!(Database::open(&db_config, &path.to_str().unwrap()).map_err(ClientError::Database))); + let db = Arc::new(try!(Database::open(&db_config, &path.to_str().expect("DB path could not be converted to string.")).map_err(ClientError::Database))); let chain = Arc::new(BlockChain::new(config.blockchain.clone(), &gb, db.clone())); let tracedb = RwLock::new(TraceDB::new(config.tracing.clone(), db.clone(), chain.clone())); @@ -296,30 +289,27 @@ impl Client { // Check if Parent is in chain let chain_has_parent = chain.block_header(header.parent_hash()); - if let None = chain_has_parent { - warn!(target: "client", "Block import failed for #{} ({}): Parent not found ({}) ", header.number(), header.hash(), header.parent_hash()); - return Err(()); - }; - - // Enact Verified Block - let parent = chain_has_parent.unwrap(); - let last_hashes = self.build_last_hashes(header.parent_hash().clone()); - let db = self.state_db.lock().boxed_clone_canon(&header.parent_hash()); - - let enact_result = enact_verified(block, engine, self.tracedb.read().tracing_enabled(), db, &parent, last_hashes, self.factories.clone()); - if let Err(e) = enact_result { - warn!(target: "client", "Block import failed for #{} ({})\nError: {:?}", header.number(), header.hash(), e); - return Err(()); - }; + if let Some(parent) = chain_has_parent { + // Enact Verified Block + let last_hashes = self.build_last_hashes(header.parent_hash().clone()); + let db = self.state_db.lock().boxed_clone_canon(&header.parent_hash()); + + let enact_result = enact_verified(block, engine, self.tracedb.read().tracing_enabled(), db, &parent, last_hashes, self.factories.clone()); + let locked_block = try!(enact_result.map_err(|e| { + warn!(target: "client", "Block import failed for #{} ({})\nError: {:?}", header.number(), header.hash(), e); + })); + + // Final Verification + if let Err(e) = self.verifier.verify_block_final(header, locked_block.block().header()) { + warn!(target: "client", "Stage 4 block verification failed for #{} ({})\nError: {:?}", header.number(), header.hash(), e); + return Err(()); + } - // Final Verification - let locked_block = enact_result.unwrap(); - if let Err(e) = self.verifier.verify_block_final(header, locked_block.block().header()) { - warn!(target: "client", "Stage 4 block verification failed for #{} ({})\nError: {:?}", header.number(), header.hash(), e); - return Err(()); + Ok(locked_block) + } else { + warn!(target: "client", "Block import failed for #{} ({}): Parent not found ({}) ", header.number(), header.hash(), header.parent_hash()); + Err(()) } - - Ok(locked_block) } fn calculate_enacted_retracted(&self, import_results: &[ImportRoute]) -> (Vec, Vec) { @@ -363,23 +353,17 @@ impl Client { for block in blocks { let header = &block.header; - if invalid_blocks.contains(header.parent_hash()) { - invalid_blocks.insert(header.hash()); - continue; - } - let closed_block = self.check_and_close_block(&block); - if let Err(_) = closed_block { - invalid_blocks.insert(header.hash()); - continue; - } + let is_invalid = invalid_blocks.contains(header.parent_hash()); + if let (false, Ok(closed_block)) = (is_invalid, self.check_and_close_block(&block)) { + imported_blocks.push(header.hash()); - let closed_block = closed_block.unwrap(); - imported_blocks.push(header.hash()); + let route = self.commit_block(closed_block, &header.hash(), &block.bytes); + import_results.push(route); - let route = self.commit_block(closed_block, &header.hash(), &block.bytes); - import_results.push(route); - - self.report.write().accrue_block(&block); + self.report.write().accrue_block(&block); + } else { + invalid_blocks.insert(header.hash()); + } } let imported = imported_blocks.len(); @@ -429,7 +413,7 @@ impl Client { // Are we committing an era? let ancient = if number >= HISTORY { let n = number - HISTORY; - Some((n, chain.block_hash(n).unwrap())) + Some((n, chain.block_hash(n).expect("only verified blocks can be commited; verified block has hash; qed"))) } else { None }; @@ -900,8 +884,10 @@ impl BlockChainClient for Client { BodyView::new(&block).localized_transaction_at(&address.block_hash, block_number, address.index) }); - match (t, chain.transaction_receipt(&address)) { - (Some(tx), Some(receipt)) => { + let tx_and_sender = t.and_then(|tx| tx.sender().ok().map(|sender| (tx, sender))); + + match (tx_and_sender, chain.transaction_receipt(&address)) { + (Some((tx, sender)), Some(receipt)) => { let block_hash = tx.block_hash.clone(); let block_number = tx.block_number.clone(); let transaction_hash = tx.hash(); @@ -923,7 +909,7 @@ impl BlockChainClient for Client { gas_used: receipt.gas_used - prior_gas_used, contract_address: match tx.action { Action::Call(_) => None, - Action::Create => Some(contract_address(&tx.sender().unwrap(), &tx.nonce)) + Action::Create => Some(contract_address(&sender, &tx.nonce)) }, logs: receipt.logs.into_iter().enumerate().map(|(i, log)| LocalizedLogEntry { entry: log, @@ -1024,17 +1010,18 @@ impl BlockChainClient for Client { let start = self.block_number(filter.range.start); let end = self.block_number(filter.range.end); - if start.is_some() && end.is_some() { - let filter = trace::Filter { - range: start.unwrap() as usize..end.unwrap() as usize, - from_address: From::from(filter.from_address), - to_address: From::from(filter.to_address), - }; + match (start, end) { + (Some(s), Some(e)) => { + let filter = trace::Filter { + range: s as usize..e as usize, + from_address: From::from(filter.from_address), + to_address: From::from(filter.to_address), + }; - let traces = self.tracedb.read().filter(&filter); - Some(traces) - } else { - None + let traces = self.tracedb.read().filter(&filter); + Some(traces) + }, + _ => None, } } @@ -1106,11 +1093,15 @@ impl MiningBlockChainClient for Client { // Add uncles chain .find_uncle_headers(&h, engine.maximum_uncle_age()) - .unwrap() + .unwrap_or_else(Vec::new) .into_iter() .take(engine.maximum_uncle_count()) .foreach(|h| { - open_block.push_uncle(h).unwrap(); + open_block.push_uncle(h).expect("pushing maximum_uncle_count; + open_block was just created; + push_uncle is not ok only if more than maximum_uncle_count is pushed; + so all push_uncle are Ok; + qed"); }); open_block -- GitLab From 26d7712d30e094d3138dd19369d48e1fd0bc7bc4 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 10 Oct 2016 23:04:43 +0200 Subject: [PATCH 030/393] TX queue gas limit config and allow local transactions over the gas limit (#2553) * Gas limit config; Allow local transactions over the limit * Fix typo [ci:skip] --- ethcore/src/miner/miner.rs | 27 +++++++++++++++++++++++--- ethcore/src/miner/mod.rs | 2 +- ethcore/src/miner/transaction_queue.rs | 26 ++++++++++++++++++++----- parity/cli/config.full.toml | 1 + parity/cli/config.toml | 1 + parity/cli/mod.rs | 5 +++++ parity/cli/usage.txt | 4 ++++ parity/configuration.rs | 3 ++- parity/helpers.rs | 10 +++++++++- rpc/src/v1/tests/eth.rs | 3 ++- 10 files changed, 70 insertions(+), 12 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 7348db5666..a2dab44751 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -48,6 +48,17 @@ pub enum PendingSet { SealingOrElseQueue, } +/// Type of the gas limit to apply to the transaction queue. +#[derive(Debug, PartialEq)] +pub enum GasLimit { + /// Depends on the block gas limit and is updated with every block. + Auto, + /// No limit. + None, + /// Set to a fixed gas value. + Fixed(U256), +} + /// Configures the behaviour of the miner. #[derive(Debug, PartialEq)] pub struct MinerOptions { @@ -71,6 +82,8 @@ pub struct MinerOptions { pub work_queue_size: usize, /// Can we submit two different solutions for the same block and expect both to result in an import? pub enable_resubmission: bool, + /// Global gas limit for all transaction in the queue except for local and retracted. + pub tx_queue_gas_limit: GasLimit, } impl Default for MinerOptions { @@ -86,6 +99,7 @@ impl Default for MinerOptions { reseal_min_period: Duration::from_secs(2), work_queue_size: 20, enable_resubmission: true, + tx_queue_gas_limit: GasLimit::Auto, } } } @@ -194,7 +208,11 @@ impl Miner { true => None, false => Some(WorkPoster::new(&options.new_work_notify)) }; - let txq = Arc::new(Mutex::new(TransactionQueue::with_limits(options.tx_queue_size, !U256::zero(), options.tx_gas_limit))); + let gas_limit = match options.tx_queue_gas_limit { + GasLimit::Fixed(ref limit) => *limit, + _ => !U256::zero(), + }; + let txq = Arc::new(Mutex::new(TransactionQueue::with_limits(options.tx_queue_size, gas_limit, options.tx_gas_limit))); Miner { transaction_queue: txq, next_allowed_reseal: Mutex::new(Instant::now()), @@ -443,8 +461,10 @@ impl Miner { let gas_limit = HeaderView::new(&chain.best_block_header()).gas_limit(); let mut queue = self.transaction_queue.lock(); queue.set_gas_limit(gas_limit); - // Set total qx queue gas limit to be 2x the block gas limit. - queue.set_total_gas_limit(gas_limit << 1); + if let GasLimit::Auto = self.options.tx_queue_gas_limit { + // Set total tx queue gas limit to be 2x the block gas limit. + queue.set_total_gas_limit(gas_limit << 1); + } } /// Returns true if we had to prepare new pending block. @@ -1062,6 +1082,7 @@ mod tests { reseal_min_period: Duration::from_secs(5), tx_gas_limit: !U256::zero(), tx_queue_size: 1024, + tx_queue_gas_limit: GasLimit::None, pending_set: PendingSet::AlwaysSealing, work_queue_size: 5, enable_resubmission: true, diff --git a/ethcore/src/miner/mod.rs b/ethcore/src/miner/mod.rs index c6bb00dceb..8dfddf483a 100644 --- a/ethcore/src/miner/mod.rs +++ b/ethcore/src/miner/mod.rs @@ -48,7 +48,7 @@ mod work_notify; mod price_info; pub use self::transaction_queue::{TransactionQueue, AccountDetails, TransactionOrigin}; -pub use self::miner::{Miner, MinerOptions, PendingSet, GasPricer, GasPriceCalibratorOptions}; +pub use self::miner::{Miner, MinerOptions, PendingSet, GasPricer, GasPriceCalibratorOptions, GasLimit}; pub use self::external::{ExternalMiner, ExternalMinerService}; pub use client::TransactionImportResult; diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index 38923438c2..fdb652780a 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -331,7 +331,9 @@ impl TransactionSet { let r = gas.overflowing_add(order.gas); if r.1 { return false } gas = r.0; - count <= self.limit && gas <= self.gas_limit + // Own and retracted transactions are allowed to go above the gas limit, bot not above the count limit. + (gas <= self.gas_limit || order.origin == TransactionOrigin::Local || order.origin == TransactionOrigin::RetractedBlock) && + count <= self.limit }) .map(|order| by_hash.get(&order.hash) .expect("All transactions in `self.by_priority` and `self.by_address` are kept in sync with `by_hash`.")) @@ -1762,13 +1764,27 @@ mod test { #[test] fn should_limit_by_gas() { let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); - let (tx1, _) = new_tx_pair_default(U256::from(4), U256::from(1)); - let (tx3, _) = new_tx_pair_default(U256::from(4), U256::from(2)); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); + let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); + txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).ok(); + txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).ok(); + txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).ok(); + txq.add(tx4.clone(), &default_account_details, TransactionOrigin::External).ok(); assert_eq!(txq.status().pending, 2); } + #[test] + fn should_keep_own_transactions_above_gas_limit() { + let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); + let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); + let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); + txq.add(tx1.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx2.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx3.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx4.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + assert_eq!(txq.status().pending, 4); + } + #[test] fn should_drop_transactions_with_old_nonces() { let mut txq = TransactionQueue::new(); diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index 5b47e11844..2363f1740f 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -68,6 +68,7 @@ price_update_period = "hourly" gas_floor_target = "4700000" gas_cap = "6283184" tx_queue_size = 2048 +tx_queue_gas = "auto" tx_gas_limit = "6283184" extra_data = "Parity" remove_solved = false diff --git a/parity/cli/config.toml b/parity/cli/config.toml index a5ad55d403..4ab6916797 100644 --- a/parity/cli/config.toml +++ b/parity/cli/config.toml @@ -41,6 +41,7 @@ reseal_on_txs = "all" reseal_min_period = 4000 price_update_period = "hourly" tx_queue_size = 2048 +tx_queue_gas = "auto" [footprint] tracing = "on" diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 8044032eb6..10348b21b3 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -195,6 +195,8 @@ usage! { or |c: &Config| otry!(c.mining).extra_data.clone().map(Some), flag_tx_queue_size: usize = 2048usize, or |c: &Config| otry!(c.mining).tx_queue_size.clone(), + flag_tx_queue_gas: String = "auto", + or |c: &Config| otry!(c.mining).tx_queue_gas.clone(), flag_remove_solved: bool = false, or |c: &Config| otry!(c.mining).remove_solved.clone(), flag_notify_work: Option = None, @@ -348,6 +350,7 @@ struct Mining { gas_cap: Option, extra_data: Option, tx_queue_size: Option, + tx_queue_gas: Option, remove_solved: Option, notify_work: Option>, } @@ -523,6 +526,7 @@ mod tests { flag_gas_cap: "6283184".into(), flag_extra_data: Some("Parity".into()), flag_tx_queue_size: 2048usize, + flag_tx_queue_gas: "auto".into(), flag_remove_solved: false, flag_notify_work: Some("http://localhost:3001".into()), @@ -673,6 +677,7 @@ mod tests { gas_floor_target: None, gas_cap: None, tx_queue_size: Some(2048), + tx_queue_gas: Some("auto".into()), tx_gas_limit: None, extra_data: None, remove_solved: None, diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 6ad0cec219..ca75c9ee03 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -184,6 +184,10 @@ Sealing/Mining Options: more than 32 characters. (default: {flag_extra_data:?}) --tx-queue-size LIMIT Maximum amount of transactions in the queue (waiting to be included in next block) (default: {flag_tx_queue_size}). + --tx-queue-gas LIMIT Maximum amount of total gas for external transactions in + the queue. LIMIT can be either an amount of gas or + 'auto' or 'off'. 'auto' sets the limit to be 2x + the current block gas limit. (default: {flag_tx_queue_gas}). --remove-solved Move solved blocks from the work package queue instead of cloning them. This gives a slightly faster import speed, but means that extra solutions diff --git a/parity/configuration.rs b/parity/configuration.rs index 4503b0f2f6..54a72fab50 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -30,7 +30,7 @@ use rpc::{IpcConfiguration, HttpConfiguration}; use ethcore_rpc::NetworkSettings; use cache::CacheConfig; use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, -geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address}; +geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit}; use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras, SpecType}; use ethcore_logger::Config as LogConfig; use dir::Directories; @@ -348,6 +348,7 @@ impl Configuration { None => U256::max_value(), }, tx_queue_size: self.args.flag_tx_queue_size, + tx_queue_gas_limit: try!(to_gas_limit(&self.args.flag_tx_queue_gas)), pending_set: try!(to_pending_set(&self.args.flag_relay_set)), reseal_min_period: Duration::from_millis(self.args.flag_reseal_min_period), work_queue_size: self.args.flag_work_queue_size, diff --git a/parity/helpers.rs b/parity/helpers.rs index cdee9ede00..6f4f909532 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -22,7 +22,7 @@ use std::fs::File; use util::{clean_0x, U256, Uint, Address, path, CompactionProfile}; use util::journaldb::Algorithm; use ethcore::client::{Mode, BlockID, VMType, DatabaseCompactionProfile, ClientConfig}; -use ethcore::miner::PendingSet; +use ethcore::miner::{PendingSet, GasLimit}; use cache::CacheConfig; use dir::DatabaseDirectories; use upgrade::upgrade; @@ -93,6 +93,14 @@ pub fn to_pending_set(s: &str) -> Result { } } +pub fn to_gas_limit(s: &str) -> Result { + match s { + "auto" => Ok(GasLimit::Auto), + "off" => Ok(GasLimit::None), + other => Ok(GasLimit::Fixed(try!(to_u256(other)))), + } +} + pub fn to_address(s: Option) -> Result { match s { Some(ref a) => clean_0x(a).parse().map_err(|_| format!("Invalid address: {:?}", a)), diff --git a/rpc/src/v1/tests/eth.rs b/rpc/src/v1/tests/eth.rs index 448fa47343..97e4d3bea5 100644 --- a/rpc/src/v1/tests/eth.rs +++ b/rpc/src/v1/tests/eth.rs @@ -24,7 +24,7 @@ use ethcore::spec::{Genesis, Spec}; use ethcore::block::Block; use ethcore::views::BlockView; use ethcore::ethereum; -use ethcore::miner::{MinerOptions, GasPricer, MinerService, ExternalMiner, Miner, PendingSet}; +use ethcore::miner::{MinerOptions, GasPricer, MinerService, ExternalMiner, Miner, PendingSet, GasLimit}; use ethcore::account_provider::AccountProvider; use devtools::RandomTempPath; use util::Hashable; @@ -58,6 +58,7 @@ fn miner_service(spec: &Spec, accounts: Arc) -> Arc { reseal_on_own_tx: true, tx_queue_size: 1024, tx_gas_limit: !U256::zero(), + tx_queue_gas_limit: GasLimit::None, pending_set: PendingSet::SealingOrElseQueue, reseal_min_period: Duration::from_secs(0), work_queue_size: 50, -- GitLab From 193cdb1326f11c4e9288655e86106c4255017d3e Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 10 Oct 2016 23:05:41 +0200 Subject: [PATCH 031/393] Don't activate peers on connect; Test (#2537) --- ethcore/src/client/test_client.rs | 11 ++++++++- sync/src/chain.rs | 17 ++++++++++---- sync/src/tests/chain.rs | 23 +++++++++++++++++- sync/src/tests/helpers.rs | 39 ++++++++++++++++++++++++------- 4 files changed, 74 insertions(+), 16 deletions(-) diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index 76451e7933..2d9432e019 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -55,6 +55,8 @@ pub struct TestBlockChainClient { pub genesis_hash: H256, /// Last block hash. pub last_hash: RwLock, + /// Extra data do set for each block + pub extra_data: Bytes, /// Difficulty. pub difficulty: RwLock, /// Balances. @@ -105,11 +107,17 @@ impl Default for TestBlockChainClient { impl TestBlockChainClient { /// Creates new test client. pub fn new() -> Self { + Self::new_with_extra_data(Bytes::new()) + } + + /// Creates new test client with specified extra data for each block + pub fn new_with_extra_data(extra_data: Bytes) -> Self { let spec = Spec::new_test(); let mut client = TestBlockChainClient { blocks: RwLock::new(HashMap::new()), numbers: RwLock::new(HashMap::new()), genesis_hash: H256::new(), + extra_data: extra_data, last_hash: RwLock::new(H256::new()), difficulty: RwLock::new(From::from(0)), balances: RwLock::new(HashMap::new()), @@ -129,7 +137,7 @@ impl TestBlockChainClient { client.genesis_hash = client.last_hash.read().clone(); client } - + /// Set the transaction receipt result pub fn set_transaction_receipt(&self, id: TransactionID, receipt: LocalizedReceipt) { self.receipts.write().insert(id, receipt); @@ -184,6 +192,7 @@ impl TestBlockChainClient { header.set_parent_hash(self.last_hash.read().clone()); header.set_number(n as BlockNumber); header.set_gas_limit(U256::from(1_000_000)); + header.set_extra_data(self.extra_data.clone()); let uncles = match with { EachBlockWith::Uncle | EachBlockWith::UncleAndTransaction => { let mut uncles = RlpStream::new_list(1); diff --git a/sync/src/chain.rs b/sync/src/chain.rs index ddefb13aff..446fd54999 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -143,7 +143,7 @@ const GET_SNAPSHOT_DATA_PACKET: u8 = 0x13; const SNAPSHOT_DATA_PACKET: u8 = 0x14; const HEADERS_TIMEOUT_SEC: f64 = 15f64; -const BODIES_TIMEOUT_SEC: f64 = 5f64; +const BODIES_TIMEOUT_SEC: f64 = 10f64; const FORK_HEADER_TIMEOUT_SEC: f64 = 3f64; const SNAPSHOT_MANIFEST_TIMEOUT_SEC: f64 = 3f64; const SNAPSHOT_DATA_TIMEOUT_SEC: f64 = 10f64; @@ -393,6 +393,8 @@ impl ChainSync { } self.syncing_difficulty = From::from(0u64); self.state = SyncState::Idle; + // Reactivate peers only if some progress has been made + // since the last sync round of if starting fresh. self.active_peers = self.peers.keys().cloned().collect(); } @@ -404,7 +406,8 @@ impl ChainSync { self.continue_sync(io); } - /// Remove peer from active peer set + /// Remove peer from active peer set. Peer will be reactivated on the next sync + /// round. fn deactivate_peer(&mut self, io: &mut SyncIo, peer_id: PeerId) { trace!(target: "sync", "Deactivating peer {}", peer_id); self.active_peers.remove(&peer_id); @@ -477,7 +480,11 @@ impl ChainSync { } self.peers.insert(peer_id.clone(), peer); - self.active_peers.insert(peer_id.clone()); + // Don't activate peer immediatelly when searching for common block. + // Let the current sync round complete first. + if self.state != SyncState::ChainHead { + self.active_peers.insert(peer_id.clone()); + } debug!(target: "sync", "Connected {}:{}", peer_id, io.peer_info(peer_id)); if let Some((fork_block, _)) = self.fork_block { self.request_headers_by_number(io, peer_id, fork_block, 1, 0, false, PeerAsking::ForkHeader); @@ -592,9 +599,9 @@ impl ChainSync { } if headers.is_empty() { - // Peer does not have any new subchain heads, deactivate it nd try with another + // Peer does not have any new subchain heads, deactivate it and try with another. trace!(target: "sync", "{} Disabled for no data", peer_id); - io.disable_peer(peer_id); + self.deactivate_peer(io, peer_id); } match self.state { SyncState::ChainHead => { diff --git a/sync/src/tests/chain.rs b/sync/src/tests/chain.rs index a876714bd8..c54529beb1 100644 --- a/sync/src/tests/chain.rs +++ b/sync/src/tests/chain.rs @@ -95,6 +95,27 @@ fn forked() { assert_eq!(&*net.peer(2).chain.numbers.read(), &peer1_chain); } +#[test] +fn forked_with_misbehaving_peer() { + ::env_logger::init().ok(); + let mut net = TestNet::new(3); + // peer 0 is on a totally different chain with higher total difficulty + net.peer_mut(0).chain = TestBlockChainClient::new_with_extra_data(b"fork".to_vec()); + net.peer_mut(0).chain.add_blocks(500, EachBlockWith::Nothing); + net.peer_mut(1).chain.add_blocks(100, EachBlockWith::Nothing); + net.peer_mut(2).chain.add_blocks(100, EachBlockWith::Nothing); + + net.peer_mut(1).chain.add_blocks(100, EachBlockWith::Nothing); + net.peer_mut(2).chain.add_blocks(200, EachBlockWith::Uncle); + // peer 1 should sync to peer 2, others should not change + let peer0_chain = net.peer(0).chain.numbers.read().clone(); + let peer2_chain = net.peer(2).chain.numbers.read().clone(); + net.sync(); + assert_eq!(&*net.peer(0).chain.numbers.read(), &peer0_chain); + assert_eq!(&*net.peer(1).chain.numbers.read(), &peer2_chain); + assert_eq!(&*net.peer(2).chain.numbers.read(), &peer2_chain); +} + #[test] fn net_hard_fork() { ::env_logger::init().ok(); @@ -121,7 +142,7 @@ fn restart() { net.peer_mut(1).chain.add_blocks(1000, EachBlockWith::Uncle); net.peer_mut(2).chain.add_blocks(1000, EachBlockWith::Uncle); - net.sync_steps(8); + net.sync(); // make sure that sync has actually happened assert!(net.peer(0).chain.chain_info().best_block_number > 100); diff --git a/sync/src/tests/helpers.rs b/sync/src/tests/helpers.rs index cbed49eff8..3558e55783 100644 --- a/sync/src/tests/helpers.rs +++ b/sync/src/tests/helpers.rs @@ -29,6 +29,7 @@ pub struct TestIo<'p> { pub snapshot_service: &'p TestSnapshotService, pub queue: &'p mut VecDeque, pub sender: Option, + pub to_disconnect: HashSet, } impl<'p> TestIo<'p> { @@ -37,16 +38,19 @@ impl<'p> TestIo<'p> { chain: chain, snapshot_service: ss, queue: queue, - sender: sender + sender: sender, + to_disconnect: HashSet::new(), } } } impl<'p> SyncIo for TestIo<'p> { - fn disable_peer(&mut self, _peer_id: PeerId) { + fn disable_peer(&mut self, peer_id: PeerId) { + self.disconnect_peer(peer_id); } - fn disconnect_peer(&mut self, _peer_id: PeerId) { + fn disconnect_peer(&mut self, peer_id: PeerId) { + self.to_disconnect.insert(peer_id); } fn is_expired(&self) -> bool { @@ -150,13 +154,30 @@ impl TestNet { pub fn sync_step(&mut self) { for peer in 0..self.peers.len() { if let Some(packet) = self.peers[peer].queue.pop_front() { - let mut p = self.peers.get_mut(packet.recipient).unwrap(); - trace!("--- {} -> {} ---", peer, packet.recipient); - ChainSync::dispatch_packet(&p.sync, &mut TestIo::new(&mut p.chain, &p.snapshot_service, &mut p.queue, Some(peer as PeerId)), peer as PeerId, packet.packet_id, &packet.data); - trace!("----------------"); + let disconnecting = { + let mut p = self.peers.get_mut(packet.recipient).unwrap(); + trace!("--- {} -> {} ---", peer, packet.recipient); + let to_disconnect = { + let mut io = TestIo::new(&mut p.chain, &p.snapshot_service, &mut p.queue, Some(peer as PeerId)); + ChainSync::dispatch_packet(&p.sync, &mut io, peer as PeerId, packet.packet_id, &packet.data); + io.to_disconnect + }; + for d in &to_disconnect { + // notify this that disconnecting peers are disconnecting + let mut io = TestIo::new(&mut p.chain, &p.snapshot_service, &mut p.queue, Some(*d)); + p.sync.write().on_peer_aborting(&mut io, *d); + } + to_disconnect + }; + for d in &disconnecting { + // notify other peers that this peer is disconnecting + let mut p = self.peers.get_mut(*d).unwrap(); + let mut io = TestIo::new(&mut p.chain, &p.snapshot_service, &mut p.queue, Some(peer as PeerId)); + p.sync.write().on_peer_aborting(&mut io, peer as PeerId); + } } - let mut p = self.peers.get_mut(peer).unwrap(); - p.sync.write().maintain_sync(&mut TestIo::new(&mut p.chain, &p.snapshot_service, &mut p.queue, None)); + + self.sync_step_peer(peer); } } -- GitLab From 55dbd5bb1f5950e0512df81052e285c8022b0d8b Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 10 Oct 2016 23:07:29 +0200 Subject: [PATCH 032/393] Fixed race condition in trace import (#2555) --- ethcore/src/trace/db.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/ethcore/src/trace/db.rs b/ethcore/src/trace/db.rs index b608ad6857..2cf14828a3 100644 --- a/ethcore/src/trace/db.rs +++ b/ethcore/src/trace/db.rs @@ -256,16 +256,6 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { return; } - // at first, let's insert new block traces - { - let mut traces = self.traces.write(); - // it's important to use overwrite here, - // cause this value might be queried by hash later - batch.write_with_cache(db::COL_TRACE, &mut *traces, request.block_hash, request.traces, CacheUpdatePolicy::Overwrite); - // note_used must be called after locking traces to avoid cache/traces deadlock on garbage collection - self.note_used(CacheID::Trace(request.block_hash.clone())); - } - // now let's rebuild the blooms if !request.enacted.is_empty() { let range_start = request.block_number as Number + 1 - request.enacted.len(); @@ -276,12 +266,25 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { // all traces are expected to be found here. That's why `expect` has been used // instead of `filter_map`. If some traces haven't been found, it meens that // traces database is corrupted or incomplete. - .map(|block_hash| self.traces(block_hash).expect("Traces database is incomplete.")) - .map(|block_traces| block_traces.bloom()) + .map(|block_hash| if block_hash == &request.block_hash { + request.traces.bloom() + } else { + self.traces(block_hash).expect("Traces database is incomplete.").bloom() + }) .map(blooms::Bloom::from) .map(Into::into) .collect(); + // insert new block traces into the cache and the database + { + let mut traces = self.traces.write(); + // it's important to use overwrite here, + // cause this value might be queried by hash later + batch.write_with_cache(db::COL_TRACE, &mut *traces, request.block_hash, request.traces, CacheUpdatePolicy::Overwrite); + // note_used must be called after locking traces to avoid cache/traces deadlock on garbage collection + self.note_used(CacheID::Trace(request.block_hash.clone())); + } + let chain = BloomGroupChain::new(self.bloom_config, self); let trace_blooms = chain.replace(&replaced_range, enacted_blooms); let blooms_to_insert = trace_blooms.into_iter() -- GitLab From 5e22d239947c921eb89b862c0fc017d66df1fb64 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 11 Oct 2016 12:53:50 +0200 Subject: [PATCH 033/393] update bigint crate to 0.1.1 --- Cargo.lock | 10 +++++----- util/bigint/Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3781bc5894..a092325ead 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -308,7 +308,7 @@ dependencies = [ [[package]] name = "ethcore-bigint" -version = "0.1.0" +version = "0.1.1" dependencies = [ "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", @@ -539,7 +539,7 @@ dependencies = [ "elastic-array 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", - "ethcore-bigint 0.1.0", + "ethcore-bigint 0.1.1", "ethcore-bloom-journal 0.1.0", "ethcore-devtools 1.4.0", "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -568,7 +568,7 @@ name = "ethcrypto" version = "0.1.0" dependencies = [ "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", - "ethcore-bigint 0.1.0", + "ethcore-bigint 0.1.1", "ethkey 0.2.0", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -591,7 +591,7 @@ version = "0.2.0" dependencies = [ "docopt 0.6.80 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", - "ethcore-bigint 0.1.0", + "ethcore-bigint 0.1.1", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1398,7 +1398,7 @@ name = "rlp" version = "0.1.0" dependencies = [ "elastic-array 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bigint 0.1.0", + "ethcore-bigint 0.1.1", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/util/bigint/Cargo.toml b/util/bigint/Cargo.toml index ee25ce846a..c21b5239fd 100644 --- a/util/bigint/Cargo.toml +++ b/util/bigint/Cargo.toml @@ -4,7 +4,7 @@ homepage = "http://ethcore.io" repository = "https://github.com/ethcore/parity" license = "GPL-3.0" name = "ethcore-bigint" -version = "0.1.0" +version = "0.1.1" authors = ["Ethcore "] build = "build.rs" -- GitLab From 303654da381347fc5ef6c7eaea7004c843698e3a Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 11 Oct 2016 15:53:22 +0200 Subject: [PATCH 034/393] deny compiler warnings in CI (#2570) --- .gitlab-ci.yml | 23 ++++++++++++----------- .travis.yml | 1 + appveyor.yml | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 32e8d953f1..36bb0650a3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,8 +3,9 @@ stages: - test variables: GIT_DEPTH: "3" - SIMPLECOV: "true" + SIMPLECOV: "true" RUST_BACKTRACE: "1" + RUSTFLAGS: "-D warnings" cache: key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" untracked: true @@ -20,7 +21,7 @@ linux-stable: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/checksum --body checksum @@ -43,7 +44,7 @@ linux-stable-14.04: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/checksum --body checksum @@ -106,7 +107,7 @@ linux-centos: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/checksum --body checksum @@ -134,7 +135,7 @@ linux-armv7: - cargo build --target armv7-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/armv7-unknown-linux-gnueabihf/release/parity - md5sum target/armv7-unknown-linux-gnueabihf/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity --body target/armv7-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/checksum --body checksum @@ -163,7 +164,7 @@ linux-arm: - cargo build --target arm-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/arm-unknown-linux-gnueabihf/release/parity - md5sum target/arm-unknown-linux-gnueabihf/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity --body target/arm-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/checksum --body checksum @@ -191,8 +192,8 @@ linux-armv6: - cat .cargo/config - cargo build --target arm-unknown-linux-gnueabi --release --verbose - arm-linux-gnueabi-strip target/arm-unknown-linux-gnueabi/release/parity - - md5sum target/arm-unknown-linux-gnueabi/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - md5sum target/arm-unknown-linux-gnueabi/release/parity >> checksum + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity --body target/arm-unknown-linux-gnueabi/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/checksum --body checksum @@ -221,7 +222,7 @@ linux-aarch64: - cargo build --target aarch64-unknown-linux-gnu --release --verbose - aarch64-linux-gnu-strip target/aarch64-unknown-linux-gnu/release/parity - md5sum target/aarch64-unknown-linux-gnu/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity --body target/aarch64-unknown-linux-gnu/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/checksum --body checksum @@ -243,7 +244,7 @@ darwin: script: - cargo build --release --verbose - md5sum target/release/parity >> checksum - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/checksum --body checksum @@ -264,7 +265,7 @@ windows: - set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\vs2015\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - - set RUSTFLAGS=-Zorbit=off + - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - cmd md5sum target\release\parity >> checksum diff --git a/.travis.yml b/.travis.yml index 6428ccecf9..d9cda5715b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ env: - RUN_COVERAGE="false" - RUN_DOCS="false" - TEST_OPTIONS="" + - RUSTFLAGS="-D warnings" # GH_TOKEN for documentation - secure: bumJASbZSU8bxJ0EyPUJmu16AiV9EXOpyOj86Jlq/Ty9CfwGqsSXt96uDyE+OUJf34RUFQMsw0nk37/zC4lcn6kqk2wpuH3N/o85Zo/cVZY/NusBWLQqtT5VbYWsV+u2Ua4Tmmsw8yVYQhYwU2ZOejNpflL+Cs9XGgORp1L+/gMRMC2y5Se6ZhwnKPQlRJ8LGsG1dzjQULxzADIt3/zuspNBS8a2urJwlHfGMkvHDoUWCviP/GXoSqw3TZR7FmKyxE19I8n9+iSvm9+oZZquvcgfUxMHn8Gq/b44UbPvjtFOg2yam4xdWXF/RyWCHdc/R9EHorSABeCbefIsm+zcUF3/YQxwpSxM4IZEeH2rTiC7dcrsKw3XsO16xFQz5YI5Bay+CT/wTdMmJd7DdYz7Dyf+pOvcM9WOf/zorxYWSBOMYy0uzbusU2iyIghQ82s7E/Ahg+WARtPgkuTLSB5aL1oCTBKHqQscMr7lo5Ti6RpWLxEdTQMBznc+bMr+6dEtkEcG9zqc6cE9XX+ox3wTU6+HVMfQ1ltCntJ4UKcw3A6INEbw9wgocQa812CIASQ2fE+SCAbz6JxBjIAlFUnD1lUB7S8PdMPwn9plfQgKQ2A5YZqg6FnBdf0rQXIJYxQWKHXj/rBHSUCT0tHACDlzTA+EwWggvkP5AGIxRxm8jhw= - KCOV_CMD="./kcov-master/tmp/usr/local/bin/kcov" diff --git a/appveyor.yml b/appveyor.yml index 3f6bb85ef1..75a2da7cb5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,7 +6,7 @@ environment: certpass: secure: 0BgXJqxq9Ei34/hZ7121FQ== keyfile: C:\users\appveyor\Certificates.p12 - RUSTFLAGS: -Zorbit=off + RUSTFLAGS: -Zorbit=off -D warnings branches: only: -- GitLab From 5e24a35272a99ad002c5d065a7335525eb2ce769 Mon Sep 17 00:00:00 2001 From: keorn Date: Tue, 11 Oct 2016 15:19:00 +0100 Subject: [PATCH 035/393] dont close block if is_invalid (#2572) --- ethcore/src/client/client.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index d87f2d05e2..92f3cbeea7 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -354,7 +354,11 @@ impl Client { for block in blocks { let header = &block.header; let is_invalid = invalid_blocks.contains(header.parent_hash()); - if let (false, Ok(closed_block)) = (is_invalid, self.check_and_close_block(&block)) { + if is_invalid { + invalid_blocks.insert(header.hash()); + continue; + } + if let Ok(closed_block) = self.check_and_close_block(&block) { imported_blocks.push(header.hash()); let route = self.commit_block(closed_block, &header.hash(), &block.bytes); -- GitLab From ea685466166365331c20d4e2ff8fdf6feab5d026 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 11 Oct 2016 18:42:20 +0200 Subject: [PATCH 036/393] Network-specific nodes file (#2569) * network-specific nodes.json * save nodes.json periodically * squash warnings --- parity/configuration.rs | 13 +----------- parity/dir.rs | 7 +++++++ parity/helpers.rs | 2 +- parity/run.rs | 7 +++++-- util/network/src/host.rs | 38 ++++++++++++++++++++-------------- util/network/src/node_table.rs | 5 +++-- 6 files changed, 39 insertions(+), 33 deletions(-) diff --git a/parity/configuration.rs b/parity/configuration.rs index 54a72fab50..56952219c4 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -31,7 +31,7 @@ use ethcore_rpc::NetworkSettings; use cache::CacheConfig; use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit}; -use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras, SpecType}; +use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras}; use ethcore_logger::Config as LogConfig; use dir::Directories; use dapps::Configuration as DappsConfiguration; @@ -459,23 +459,12 @@ impl Configuration { ret.min_peers = self.min_peers(); let mut net_path = PathBuf::from(self.directories().db); net_path.push("network"); - let net_specific_path = net_path.join(&try!(self.network_specific_path())); ret.config_path = Some(net_path.to_str().unwrap().to_owned()); - ret.net_config_path = Some(net_specific_path.to_str().unwrap().to_owned()); ret.reserved_nodes = try!(self.init_reserved_nodes()); ret.allow_non_reserved = !self.args.flag_reserved_only; Ok(ret) } - fn network_specific_path(&self) -> Result { - let spec_type : SpecType = try!(self.chain().parse()); - let spec = try!(spec_type.spec()); - let id = try!(self.network_id()); - let mut path = PathBuf::new(); - path.push(format!("{}", id.unwrap_or_else(|| spec.network_id()))); - Ok(path) - } - fn network_id(&self) -> Result, String> { let net_id = self.args.flag_network_id.as_ref().or(self.args.flag_networkid.as_ref()); match net_id { diff --git a/parity/dir.rs b/parity/dir.rs index 158b5b2c58..5a87f8dac6 100644 --- a/parity/dir.rs +++ b/parity/dir.rs @@ -110,6 +110,13 @@ impl DatabaseDirectories { dir.push("snapshot"); dir } + + /// Get the path for the network directory. + pub fn network_path(&self) -> PathBuf { + let mut dir = self.fork_path(); + dir.push("network"); + dir + } } #[cfg(test)] diff --git a/parity/helpers.rs b/parity/helpers.rs index 6f4f909532..b8c4f3aa6d 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -179,7 +179,7 @@ pub fn default_network_config() -> ::ethsync::NetworkConfiguration { use ethsync::NetworkConfiguration; NetworkConfiguration { config_path: Some(replace_home("$HOME/.parity/network")), - net_config_path: Some(replace_home("$HOME/.parity/network/1")), + net_config_path: None, listen_address: Some("0.0.0.0:30303".into()), public_address: None, udp_port: None, diff --git a/parity/run.rs b/parity/run.rs index 528b207c6b..254765983b 100644 --- a/parity/run.rs +++ b/parity/run.rs @@ -27,7 +27,7 @@ use ethcore::service::ClientService; use ethcore::account_provider::AccountProvider; use ethcore::miner::{Miner, MinerService, ExternalMiner, MinerOptions}; use ethcore::snapshot; -use ethsync::{SyncConfig, SyncProvider}; +use ethsync::SyncConfig; use informant::Informant; use rpc::{HttpServer, IpcServer, HttpConfiguration, IpcConfiguration}; @@ -201,6 +201,9 @@ pub fn execute(cmd: RunCmd) -> Result<(), String> { net_conf.boot_nodes = spec.nodes.clone(); } + // set network path. + net_conf.net_config_path = Some(db_dirs.network_path().to_string_lossy().into_owned()); + // create supervisor let mut hypervisor = modules::hypervisor(&cmd.dirs.ipc_path()); @@ -302,7 +305,7 @@ pub fn execute(cmd: RunCmd) -> Result<(), String> { let sync = sync_provider.clone(); let watcher = Arc::new(snapshot::Watcher::new( service.client(), - move || sync.status().is_major_syncing(), + move || ::ethsync::SyncProvider::status(&*sync).is_major_syncing(), service.io().channel(), SNAPSHOT_PERIOD, SNAPSHOT_HISTORY, diff --git a/util/network/src/host.rs b/util/network/src/host.rs index d982481f9c..a0d0a081a5 100644 --- a/util/network/src/host.rs +++ b/util/network/src/host.rs @@ -47,7 +47,24 @@ type Slab = ::slab::Slab; const MAX_SESSIONS: usize = 1024 + MAX_HANDSHAKES; const MAX_HANDSHAKES: usize = 80; const MAX_HANDSHAKES_PER_ROUND: usize = 32; + +// Tokens +const TCP_ACCEPT: usize = SYS_TIMER + 1; +const IDLE: usize = SYS_TIMER + 2; +const DISCOVERY: usize = SYS_TIMER + 3; +const DISCOVERY_REFRESH: usize = SYS_TIMER + 4; +const DISCOVERY_ROUND: usize = SYS_TIMER + 5; +const NODE_TABLE: usize = SYS_TIMER + 6; +const FIRST_SESSION: usize = 0; +const LAST_SESSION: usize = FIRST_SESSION + MAX_SESSIONS - 1; +const USER_TIMER: usize = LAST_SESSION + 256; +const SYS_TIMER: usize = LAST_SESSION + 1; + +// Timeouts const MAINTENANCE_TIMEOUT: u64 = 1000; +const DISCOVERY_REFRESH_TIMEOUT: u64 = 7200; +const DISCOVERY_ROUND_TIMEOUT: u64 = 300; +const NODE_TABLE_TIMEOUT: u64 = 300_000; #[derive(Debug, PartialEq, Clone)] /// Network service configuration @@ -122,18 +139,6 @@ impl NetworkConfiguration { } } -// Tokens -const TCP_ACCEPT: usize = SYS_TIMER + 1; -const IDLE: usize = SYS_TIMER + 2; -const DISCOVERY: usize = SYS_TIMER + 3; -const DISCOVERY_REFRESH: usize = SYS_TIMER + 4; -const DISCOVERY_ROUND: usize = SYS_TIMER + 5; -const NODE_TABLE: usize = SYS_TIMER + 6; -const FIRST_SESSION: usize = 0; -const LAST_SESSION: usize = FIRST_SESSION + MAX_SESSIONS - 1; -const USER_TIMER: usize = LAST_SESSION + 256; -const SYS_TIMER: usize = LAST_SESSION + 1; - /// Protocol handler level packet id pub type PacketId = u8; /// Protocol / handler id @@ -564,11 +569,11 @@ impl Host { discovery.init_node_list(self.nodes.read().unordered_entries()); discovery.add_node_list(self.nodes.read().unordered_entries()); *self.discovery.lock() = Some(discovery); - io.register_stream(DISCOVERY).expect("Error registering UDP listener"); - io.register_timer(DISCOVERY_REFRESH, 7200).expect("Error registering discovery timer"); - io.register_timer(DISCOVERY_ROUND, 300).expect("Error registering discovery timer"); + try!(io.register_stream(DISCOVERY)); + try!(io.register_timer(DISCOVERY_REFRESH, DISCOVERY_REFRESH_TIMEOUT)); + try!(io.register_timer(DISCOVERY_ROUND, DISCOVERY_ROUND_TIMEOUT)); } - try!(io.register_timer(NODE_TABLE, 300_000)); + try!(io.register_timer(NODE_TABLE, NODE_TABLE_TIMEOUT)); try!(io.register_stream(TCP_ACCEPT)); Ok(()) } @@ -982,6 +987,7 @@ impl IoHandler for Host { NODE_TABLE => { trace!(target: "network", "Refreshing node table"); self.nodes.write().clear_useless(); + self.nodes.write().save(); }, _ => match self.timers.read().get(&token).cloned() { Some(timer) => match self.handlers.read().get(&timer.protocol).cloned() { diff --git a/util/network/src/node_table.rs b/util/network/src/node_table.rs index 073e9ab763..c90e35a278 100644 --- a/util/network/src/node_table.rs +++ b/util/network/src/node_table.rs @@ -266,7 +266,8 @@ impl NodeTable { self.useless_nodes.clear(); } - fn save(&self) { + /// Save the nodes.json file. + pub fn save(&self) { if let Some(ref path) = self.path { let mut path_buf = PathBuf::from(path); if let Err(e) = fs::create_dir_all(path_buf.as_path()) { @@ -292,7 +293,7 @@ impl NodeTable { } }; if let Err(e) = file.write(&json.into_bytes()) { - warn!("Error writing node table file: {:?}", e); + warn!("Error writing node table file: {:?}", e); } } } -- GitLab From 327f5e0dd0261ed7e472307311dccdf19d0ae0c1 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 00:09:59 +0700 Subject: [PATCH 037/393] Update gitlab-ci add windows installer remove arm build from master --- .gitlab-ci.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 36bb0650a3..a718656a22 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -122,7 +122,6 @@ linux-armv7: stage: build image: ethcore/rust-armv7:latest only: - - master - beta - tags - stable @@ -151,7 +150,6 @@ linux-arm: stage: build image: ethcore/rust-arm:latest only: - - master - beta - tags - stable @@ -180,7 +178,6 @@ linux-armv6: stage: build image: ethcore/rust-armv6:latest only: - - master - beta - tags - stable @@ -209,7 +206,6 @@ linux-aarch64: stage: build image: ethcore/rust-aarch64:latest only: - - master - beta - tags - stable @@ -269,17 +265,24 @@ windows: - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - cmd md5sum target\release\parity >> checksum + - powershell Start-FileDownload "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -FileName nsis\SimpleFC.dll + - powershell Start-FileDownload "https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe" -FileName nsis\vc_redist.x64.exe + - cmd signtool sign /f %keyfile% /p %certpass% target\release\parity.exe + - cmd C:\NSIS\makensis.exe nsis\installer.nsi + - cmd signtool sign /f %keyfile% /p %certpass% nsis\installer.exe - aws configure set aws_access_key_id %s3_key% - aws configure set aws_secret_access_key %s3_secret% - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity --body target\release\parity.exe - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity --body target\release\parity.pdb - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/installer.exe --body nsis\installer.exe tags: - rust-windows artifacts: paths: - target/release/parity.exe - target/release/parity.pdb + - nsis/installer.exe name: "x86_64-pc-windows-msvc_parity" test-linux: stage: test -- GitLab From 0e7508e0c285cf7670d0a902463ffc202ea01239 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 01:38:23 +0700 Subject: [PATCH 038/393] Update gitlab-ci switch to curl in win build --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a718656a22..da6cec6698 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -265,8 +265,8 @@ windows: - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - cmd md5sum target\release\parity >> checksum - - powershell Start-FileDownload "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -FileName nsis\SimpleFC.dll - - powershell Start-FileDownload "https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe" -FileName nsis\vc_redist.x64.exe + - cmd curl -L --url https://github.com/ethcore/win-build/raw/master/SimpleFC.dll -o nsis\SimpleFC.dll + - cmd curl -L --url https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe -o nsis\vc_redist.x64.exe - cmd signtool sign /f %keyfile% /p %certpass% target\release\parity.exe - cmd C:\NSIS\makensis.exe nsis\installer.nsi - cmd signtool sign /f %keyfile% /p %certpass% nsis\installer.exe -- GitLab From c658171d300e656766ce9d4ff314869f67430fab Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 01:50:55 +0700 Subject: [PATCH 039/393] Update gitlab-ci [ci:skip] Deny warnings in windows build --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index da6cec6698..567e57f0f5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -261,7 +261,7 @@ windows: - set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\vs2015\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off + - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off -D warnings - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - cmd md5sum target\release\parity >> checksum -- GitLab From c24123e09c2626d20f8a32805fe85647a16442a0 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 13:26:37 +0700 Subject: [PATCH 040/393] Update gitlab-ci fix errors in windows build --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 567e57f0f5..359a7592b8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -261,12 +261,12 @@ windows: - set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\vs2015\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off -D warnings + - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - cmd md5sum target\release\parity >> checksum - - cmd curl -L --url https://github.com/ethcore/win-build/raw/master/SimpleFC.dll -o nsis\SimpleFC.dll - - cmd curl -L --url https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe -o nsis\vc_redist.x64.exe + - curl -sL --url "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll + - curl -sL --url "https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe" -o nsis\vc_redist.x64.exe - cmd signtool sign /f %keyfile% /p %certpass% target\release\parity.exe - cmd C:\NSIS\makensis.exe nsis\installer.nsi - cmd signtool sign /f %keyfile% /p %certpass% nsis\installer.exe -- GitLab From 0189096caf896b630577ac6ce122d37732a8b5f9 Mon Sep 17 00:00:00 2001 From: keorn Date: Wed, 12 Oct 2016 09:06:23 +0100 Subject: [PATCH 041/393] Update json test suite (#2574) * update json test suite * comment out the incomplete test --- ethcore/res/ethereum/tests | 2 +- ethcore/src/json_tests/homestead_chain.rs | 4 ++++ ethcore/src/json_tests/state.rs | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ethcore/res/ethereum/tests b/ethcore/res/ethereum/tests index ac5475d676..8f07dbc829 160000 --- a/ethcore/res/ethereum/tests +++ b/ethcore/res/ethereum/tests @@ -1 +1 @@ -Subproject commit ac5475d676536cb945f98e9ff98384c01abd0599 +Subproject commit 8f07dbc8294a32db5ebe8098925fcefc2eab3e71 diff --git a/ethcore/src/json_tests/homestead_chain.rs b/ethcore/src/json_tests/homestead_chain.rs index 8db8ad2246..314c36cf17 100644 --- a/ethcore/src/json_tests/homestead_chain.rs +++ b/ethcore/src/json_tests/homestead_chain.rs @@ -36,3 +36,7 @@ declare_test!{BlockchainTests_Homestead_bcUncleHeaderValiditiy, "BlockchainTests declare_test!{BlockchainTests_Homestead_bcUncleTest, "BlockchainTests/Homestead/bcUncleTest"} declare_test!{BlockchainTests_Homestead_bcValidBlockTest, "BlockchainTests/Homestead/bcValidBlockTest"} declare_test!{BlockchainTests_Homestead_bcWalletTest, "BlockchainTests/Homestead/bcWalletTest"} +declare_test!{BlockchainTests_Homestead_bcShanghaiLove, "BlockchainTests/Homestead/bcShanghaiLove"} +// Uncomment once the test is correct. +// declare_test!{BlockchainTests_Homestead_bcSuicideIssue, "BlockchainTests/Homestead/bcSuicideIssue"} +declare_test!{BlockchainTests_Homestead_bcExploitTest, "BlockchainTests/Homestead/bcExploitTest"} diff --git a/ethcore/src/json_tests/state.rs b/ethcore/src/json_tests/state.rs index 28aaa62ec3..d7011cd28c 100644 --- a/ethcore/src/json_tests/state.rs +++ b/ethcore/src/json_tests/state.rs @@ -96,7 +96,6 @@ pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec { declare_test!{StateTests_stBlockHashTest, "StateTests/stBlockHashTest"} declare_test!{StateTests_stCallCodes, "StateTests/stCallCodes"} declare_test!{StateTests_stCallCreateCallCodeTest, "StateTests/stCallCreateCallCodeTest"} -declare_test!{StateTests_stDelegatecallTest, "StateTests/stDelegatecallTest"} declare_test!{StateTests_stExample, "StateTests/stExample"} declare_test!{StateTests_stInitCodeTest, "StateTests/stInitCodeTest"} declare_test!{StateTests_stLogTests, "StateTests/stLogTests"} -- GitLab From eb40750cbe48904308c55bc5ad457f416215d5e3 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 16:20:30 +0700 Subject: [PATCH 042/393] Update gitlab-ci fix windows installer --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 359a7592b8..ae46bbc1bc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -267,9 +267,9 @@ windows: - cmd md5sum target\release\parity >> checksum - curl -sL --url "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll - curl -sL --url "https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe" -o nsis\vc_redist.x64.exe - - cmd signtool sign /f %keyfile% /p %certpass% target\release\parity.exe - - cmd C:\NSIS\makensis.exe nsis\installer.nsi - - cmd signtool sign /f %keyfile% /p %certpass% nsis\installer.exe + - signtool sign /f %keyfile% /p %certpass% target\release\parity.exe + - makensis.exe nsis\installer.nsi + - signtool sign /f %keyfile% /p %certpass% nsis\installer.exe - aws configure set aws_access_key_id %s3_key% - aws configure set aws_secret_access_key %s3_secret% - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity --body target\release\parity.exe -- GitLab From d27924cc6c3422c64f03e694503875cc62f2125b Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 22:37:26 +0700 Subject: [PATCH 043/393] Update gitlab-ci beta - > master --- .gitlab-ci.yml | 64 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae46bbc1bc..09f6f26ccc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,11 +20,11 @@ linux-stable: script: - cargo build --release --verbose - strip target/release/parity - - md5sum target/release/parity >> checksum + - md5sum target/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity --body target/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity.md5 --body parity.md5 tags: - rust - rust-stable @@ -43,11 +43,11 @@ linux-stable-14.04: script: - cargo build --release --verbose - strip target/release/parity - - md5sum target/release/parity >> checksum + - md5sum target/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity --body target/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity.md5 --body parity.md5 tags: - rust - rust-14.04 @@ -106,11 +106,11 @@ linux-centos: - export CC="gcc" - cargo build --release --verbose - strip target/release/parity - - md5sum target/release/parity >> checksum + - md5sum target/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity --body target/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity.md5 --body parity.md5 tags: - rust - rust-centos @@ -133,11 +133,11 @@ linux-armv7: - cat .cargo/config - cargo build --target armv7-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/armv7-unknown-linux-gnueabihf/release/parity - - md5sum target/armv7-unknown-linux-gnueabihf/release/parity >> checksum + - md5sum target/armv7-unknown-linux-gnueabihf/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity --body target/armv7-unknown-linux-gnueabihf/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity.md5 --body parity.md5 tags: - rust - rust-arm @@ -161,11 +161,11 @@ linux-arm: - cat .cargo/config - cargo build --target arm-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/arm-unknown-linux-gnueabihf/release/parity - - md5sum target/arm-unknown-linux-gnueabihf/release/parity >> checksum + - md5sum target/arm-unknown-linux-gnueabihf/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity --body target/arm-unknown-linux-gnueabihf/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity.md5 --body parity.md5 tags: - rust - rust-arm @@ -189,11 +189,11 @@ linux-armv6: - cat .cargo/config - cargo build --target arm-unknown-linux-gnueabi --release --verbose - arm-linux-gnueabi-strip target/arm-unknown-linux-gnueabi/release/parity - - md5sum target/arm-unknown-linux-gnueabi/release/parity >> checksum + - md5sum target/arm-unknown-linux-gnueabi/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity --body target/arm-unknown-linux-gnueabi/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity.md5 --body parity.md5 tags: - rust - rust-arm @@ -217,11 +217,11 @@ linux-aarch64: - cat .cargo/config - cargo build --target aarch64-unknown-linux-gnu --release --verbose - aarch64-linux-gnu-strip target/aarch64-unknown-linux-gnu/release/parity - - md5sum target/aarch64-unknown-linux-gnu/release/parity >> checksum + - md5sum target/aarch64-unknown-linux-gnu/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity --body target/aarch64-unknown-linux-gnu/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity.md5 --body parity.md5 tags: - rust - rust-arm @@ -239,11 +239,11 @@ darwin: - stable script: - cargo build --release --verbose - - md5sum target/release/parity >> checksum + - md5sum target/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity --body target/release/parity - - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/checksum --body checksum + - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity.md5 --body parity.md5 tags: - osx artifacts: @@ -261,21 +261,35 @@ windows: - set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\vs2015\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off + - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off -D warnings - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - - cmd md5sum target\release\parity >> checksum - curl -sL --url "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll - curl -sL --url "https://github.com/ethcore/win-build/raw/master/vc_redist.x64.exe" -o nsis\vc_redist.x64.exe - signtool sign /f %keyfile% /p %certpass% target\release\parity.exe - - makensis.exe nsis\installer.nsi - - signtool sign /f %keyfile% /p %certpass% nsis\installer.exe + - cd nsis + - makensis.exe installer.nsi + - cp installer.exe InstallParity.exe + - signtool sign /f %keyfile% /p %certpass% InstallParity.exe + - md5sums InstallParity.exe > InstallParity.exe.md5 + - zip win-installer.zip InstallParity.exe InstallParity.exe.md5 + - md5sums win-installer.zip > win-installer.zip.md5 + - cd ..\target\release\ + - md5sums parity.exe parity.pdb > parity.md5 + - md5sums parity.exe > parity.exe.md5 + - zip parity.zip parity.exe parity.pdb parity.md5 + - md5sums parity.zip > parity.zip.md5 + - cd ..\.. - aws configure set aws_access_key_id %s3_key% - aws configure set aws_secret_access_key %s3_secret% - - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity --body target\release\parity.exe - - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity --body target\release\parity.pdb - - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/checksum --body checksum - - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/installer.exe --body nsis\installer.exe + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.exe --body target\release\parity.exe + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.exe.md5 --body target\release\parity.exe.md5 + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.zip --body target\release\parity.zip + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.zip.md5 --body target\release\parity.zip.md5 + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/InstallParity.exe --body nsis\InstallParity.exe + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/InstallParity.exe.md5 --body nsis\InstallParity.exe.md5 + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/win-installer.zip --body nsis\win-installer.zip + - aws s3api put-object --bucket builds-parity --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/win-installer.zip.md5 --body nsis\win-installer.zip.md5 tags: - rust-windows artifacts: @@ -283,7 +297,7 @@ windows: - target/release/parity.exe - target/release/parity.pdb - nsis/installer.exe - name: "x86_64-pc-windows-msvc_parity" +name: "x86_64-pc-windows-msvc_parity" test-linux: stage: test before_script: -- GitLab From 559a4417012dc229fcc688f2a3432d956546ffb3 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 12 Oct 2016 23:39:58 +0700 Subject: [PATCH 044/393] Update gitlab-ci correct lint errors --- .gitlab-ci.yml | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 09f6f26ccc..73afd1cfc1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,9 +3,8 @@ stages: - test variables: GIT_DEPTH: "3" - SIMPLECOV: "true" + SIMPLECOV: "true" RUST_BACKTRACE: "1" - RUSTFLAGS: "-D warnings" cache: key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" untracked: true @@ -21,7 +20,7 @@ linux-stable: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity.md5 --body parity.md5 @@ -44,7 +43,7 @@ linux-stable-14.04: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-ubuntu_14_04-gnu/parity.md5 --body parity.md5 @@ -107,7 +106,7 @@ linux-centos: - cargo build --release --verbose - strip target/release/parity - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity.md5 --body parity.md5 @@ -122,6 +121,7 @@ linux-armv7: stage: build image: ethcore/rust-armv7:latest only: + - master - beta - tags - stable @@ -134,7 +134,7 @@ linux-armv7: - cargo build --target armv7-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/armv7-unknown-linux-gnueabihf/release/parity - md5sum target/armv7-unknown-linux-gnueabihf/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity --body target/armv7-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/armv7-unknown-linux-gnueabihf/parity.md5 --body parity.md5 @@ -150,6 +150,7 @@ linux-arm: stage: build image: ethcore/rust-arm:latest only: + - master - beta - tags - stable @@ -162,7 +163,7 @@ linux-arm: - cargo build --target arm-unknown-linux-gnueabihf --release --verbose - arm-linux-gnueabihf-strip target/arm-unknown-linux-gnueabihf/release/parity - md5sum target/arm-unknown-linux-gnueabihf/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity --body target/arm-unknown-linux-gnueabihf/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabihf/parity.md5 --body parity.md5 @@ -178,6 +179,7 @@ linux-armv6: stage: build image: ethcore/rust-armv6:latest only: + - master - beta - tags - stable @@ -189,8 +191,8 @@ linux-armv6: - cat .cargo/config - cargo build --target arm-unknown-linux-gnueabi --release --verbose - arm-linux-gnueabi-strip target/arm-unknown-linux-gnueabi/release/parity - - md5sum target/arm-unknown-linux-gnueabi/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - md5sum target/arm-unknown-linux-gnueabi/release/parity >> parity.md5 + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity --body target/arm-unknown-linux-gnueabi/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/arm-unknown-linux-gnueabi/parity.md5 --body parity.md5 @@ -206,6 +208,7 @@ linux-aarch64: stage: build image: ethcore/rust-aarch64:latest only: + - master - beta - tags - stable @@ -218,7 +221,7 @@ linux-aarch64: - cargo build --target aarch64-unknown-linux-gnu --release --verbose - aarch64-linux-gnu-strip target/aarch64-unknown-linux-gnu/release/parity - md5sum target/aarch64-unknown-linux-gnu/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity --body target/aarch64-unknown-linux-gnu/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/aarch64-unknown-linux-gnu/parity.md5 --body parity.md5 @@ -240,7 +243,7 @@ darwin: script: - cargo build --release --verbose - md5sum target/release/parity >> parity.md5 - - aws configure set aws_access_key_id $s3_key + - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity --body target/release/parity - aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-apple-darwin/parity.md5 --body parity.md5 @@ -297,7 +300,7 @@ windows: - target/release/parity.exe - target/release/parity.pdb - nsis/installer.exe -name: "x86_64-pc-windows-msvc_parity" + name: "x86_64-pc-windows-msvc_parity" test-linux: stage: test before_script: -- GitLab From 693b0ec402fd9fe93e9a4190e6d7965b769c57c9 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 13 Oct 2016 00:21:33 +0700 Subject: [PATCH 045/393] Update gitlab-ci copy CI yml beta -> master --- .gitlab-ci.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 73afd1cfc1..a23f4c9622 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -121,7 +121,6 @@ linux-armv7: stage: build image: ethcore/rust-armv7:latest only: - - master - beta - tags - stable @@ -150,7 +149,6 @@ linux-arm: stage: build image: ethcore/rust-arm:latest only: - - master - beta - tags - stable @@ -179,7 +177,6 @@ linux-armv6: stage: build image: ethcore/rust-armv6:latest only: - - master - beta - tags - stable @@ -208,7 +205,6 @@ linux-aarch64: stage: build image: ethcore/rust-aarch64:latest only: - - master - beta - tags - stable @@ -272,7 +268,7 @@ windows: - signtool sign /f %keyfile% /p %certpass% target\release\parity.exe - cd nsis - makensis.exe installer.nsi - - cp installer.exe InstallParity.exe + - copy installer.exe InstallParity.exe - signtool sign /f %keyfile% /p %certpass% InstallParity.exe - md5sums InstallParity.exe > InstallParity.exe.md5 - zip win-installer.zip InstallParity.exe InstallParity.exe.md5 @@ -299,7 +295,7 @@ windows: paths: - target/release/parity.exe - target/release/parity.pdb - - nsis/installer.exe + - nsis/InstallParity.exe name: "x86_64-pc-windows-msvc_parity" test-linux: stage: test -- GitLab From c9ce25c8f337ec7ab6e1c2751823444551c8303a Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Wed, 12 Oct 2016 21:18:59 +0300 Subject: [PATCH 046/393] Added peers details to ethcore_netPeers RPC (#2580) * added peers details to ethcore_netPeers RPC * fixed build (traits autoimplemented) * - documentation fixes - spaces -> tabs - Rust-way Option's handling * prepare for new protocols in ethcore_netPeers * commas & documentation --- rpc/src/v1/impls/ethcore.rs | 5 +- rpc/src/v1/tests/helpers/sync_provider.rs | 27 ++++++++- rpc/src/v1/tests/mocked/ethcore.rs | 7 ++- rpc/src/v1/types/mod.rs.in | 2 +- rpc/src/v1/types/sync.rs | 72 ++++++++++++++++++++++- sync/src/api.rs | 32 ++++++++++ sync/src/chain.rs | 22 ++++++- sync/src/lib.rs | 2 +- sync/src/sync_io.rs | 10 ++-- sync/src/tests/helpers.rs | 4 ++ util/network/src/connection.rs | 5 ++ util/network/src/host.rs | 22 ++++--- util/network/src/lib.rs | 1 + util/network/src/service.rs | 7 +++ util/network/src/session.rs | 28 +++++++-- util/network/src/tests.rs | 2 +- 16 files changed, 224 insertions(+), 24 deletions(-) diff --git a/rpc/src/v1/impls/ethcore.rs b/rpc/src/v1/impls/ethcore.rs index a63d33f52e..3b756342d2 100644 --- a/rpc/src/v1/impls/ethcore.rs +++ b/rpc/src/v1/impls/ethcore.rs @@ -165,13 +165,16 @@ impl Ethcore for EthcoreClient where fn net_peers(&self) -> Result { try!(self.active()); - let sync_status = take_weak!(self.sync).status(); + let sync = take_weak!(self.sync); + let sync_status = sync.status(); let net_config = take_weak!(self.net).network_config(); + let peers = sync.peers().into_iter().map(Into::into).collect(); Ok(Peers { active: sync_status.num_active_peers, connected: sync_status.num_peers, max: sync_status.current_max_peers(net_config.min_peers, net_config.max_peers), + peers: peers }) } diff --git a/rpc/src/v1/tests/helpers/sync_provider.rs b/rpc/src/v1/tests/helpers/sync_provider.rs index b83aff758e..74013660f2 100644 --- a/rpc/src/v1/tests/helpers/sync_provider.rs +++ b/rpc/src/v1/tests/helpers/sync_provider.rs @@ -17,7 +17,7 @@ //! Test implementation of SyncProvider. use util::{RwLock, U256}; -use ethsync::{SyncProvider, SyncStatus, SyncState}; +use ethsync::{SyncProvider, SyncStatus, SyncState, PeerInfo}; /// TestSyncProvider config. pub struct Config { @@ -60,5 +60,30 @@ impl SyncProvider for TestSyncProvider { fn status(&self) -> SyncStatus { self.status.read().clone() } + + fn peers(&self) -> Vec { + vec![ + PeerInfo { + id: Some("node1".to_owned()), + client_version: "Parity/1".to_owned(), + capabilities: vec!["eth/62".to_owned(), "eth/63".to_owned()], + remote_address: "127.0.0.1:7777".to_owned(), + local_address: "127.0.0.1:8888".to_owned(), + eth_version: 62, + eth_difficulty: Some(40.into()), + eth_head: 50.into() + }, + PeerInfo { + id: None, + client_version: "Parity/2".to_owned(), + capabilities: vec!["eth/63".to_owned(), "eth/64".to_owned()], + remote_address: "Handshake".to_owned(), + local_address: "127.0.0.1:3333".to_owned(), + eth_version: 64, + eth_difficulty: None, + eth_head: 60.into() + } + ] + } } diff --git a/rpc/src/v1/tests/mocked/ethcore.rs b/rpc/src/v1/tests/mocked/ethcore.rs index 3dc02e929d..f09d84d5bf 100644 --- a/rpc/src/v1/tests/mocked/ethcore.rs +++ b/rpc/src/v1/tests/mocked/ethcore.rs @@ -208,7 +208,12 @@ fn rpc_ethcore_net_peers() { io.add_delegate(ethcore_client(&client, &miner, &sync, &net).to_delegate()); let request = r#"{"jsonrpc": "2.0", "method": "ethcore_netPeers", "params":[], "id": 1}"#; - let response = r#"{"jsonrpc":"2.0","result":{"active":0,"connected":120,"max":50},"id":1}"#; + let response = "{\"jsonrpc\":\"2.0\",\"result\":{\"active\":0,\"connected\":120,\"max\":50,\"peers\":[{\"caps\":[\"eth/62\",\"eth/63\"],\ +\"id\":\"node1\",\"name\":\"Parity/1\",\"network\":{\"localAddress\":\"127.0.0.1:8888\",\"remoteAddress\":\"127.0.0.1:7777\"}\ +,\"protocols\":{\"eth\":{\"difficulty\":\"0x28\",\"head\":\"0000000000000000000000000000000000000000000000000000000000000032\"\ +,\"version\":62}}},{\"caps\":[\"eth/63\",\"eth/64\"],\"id\":null,\"name\":\"Parity/2\",\"network\":{\"localAddress\":\ +\"127.0.0.1:3333\",\"remoteAddress\":\"Handshake\"},\"protocols\":{\"eth\":{\"difficulty\":null,\"head\":\ +\"000000000000000000000000000000000000000000000000000000000000003c\",\"version\":64}}}]},\"id\":1}"; assert_eq!(io.handle_request_sync(request), Some(response.to_owned())); } diff --git a/rpc/src/v1/types/mod.rs.in b/rpc/src/v1/types/mod.rs.in index 8aaf90eabc..4a192ac367 100644 --- a/rpc/src/v1/types/mod.rs.in +++ b/rpc/src/v1/types/mod.rs.in @@ -42,7 +42,7 @@ pub use self::filter::{Filter, FilterChanges}; pub use self::hash::{H64, H160, H256, H512, H520, H2048}; pub use self::index::Index; pub use self::log::Log; -pub use self::sync::{SyncStatus, SyncInfo, Peers}; +pub use self::sync::{SyncStatus, SyncInfo, Peers, PeerInfo, PeerNetworkInfo, PeerProtocolsInfo, PeerEthereumProtocolInfo}; pub use self::transaction::Transaction; pub use self::transaction_request::TransactionRequest; pub use self::receipt::Receipt; diff --git a/rpc/src/v1/types/sync.rs b/rpc/src/v1/types/sync.rs index 28ef3101d8..9a7f733c16 100644 --- a/rpc/src/v1/types/sync.rs +++ b/rpc/src/v1/types/sync.rs @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . +use ethsync::PeerInfo as SyncPeerInfo; use serde::{Serialize, Serializer}; use v1::types::U256; @@ -32,7 +33,7 @@ pub struct SyncInfo { } /// Peers info -#[derive(Default, Debug, Serialize, PartialEq)] +#[derive(Default, Debug, Serialize)] pub struct Peers { /// Number of active peers pub active: usize, @@ -40,6 +41,52 @@ pub struct Peers { pub connected: usize, /// Max number of peers pub max: u32, + /// Detailed information on peers + pub peers: Vec, +} + +/// Peer connection information +#[derive(Default, Debug, Serialize)] +pub struct PeerInfo { + /// Public node id + pub id: Option, + /// Node client ID + pub name: String, + /// Capabilities + pub caps: Vec, + /// Network information + pub network: PeerNetworkInfo, + /// Protocols information + pub protocols: PeerProtocolsInfo, +} + +/// Peer network information +#[derive(Default, Debug, Serialize)] +pub struct PeerNetworkInfo { + /// Remote endpoint address + #[serde(rename="remoteAddress")] + pub remote_address: String, + /// Local endpoint address + #[serde(rename="localAddress")] + pub local_address: String, +} + +/// Peer protocols information +#[derive(Default, Debug, Serialize)] +pub struct PeerProtocolsInfo { + /// Ethereum protocol information + pub eth: Option, +} + +/// Peer Ethereum protocol information +#[derive(Default, Debug, Serialize)] +pub struct PeerEthereumProtocolInfo { + /// Negotiated ethereum protocol version + pub version: u32, + /// Peer total difficulty if known + pub difficulty: Option, + /// SHA3 of peer best block hash + pub head: String, } /// Sync status @@ -61,6 +108,27 @@ impl Serialize for SyncStatus { } } +impl From for PeerInfo { + fn from(p: SyncPeerInfo) -> PeerInfo { + PeerInfo { + id: p.id, + name: p.client_version, + caps: p.capabilities, + network: PeerNetworkInfo { + remote_address: p.remote_address, + local_address: p.local_address, + }, + protocols: PeerProtocolsInfo { + eth: Some(PeerEthereumProtocolInfo { + version: p.eth_version, + difficulty: p.eth_difficulty.map(|d| d.into()), + head: p.eth_head.hex(), + }) + }, + } + } +} + #[cfg(test)] mod tests { use serde_json; @@ -77,7 +145,7 @@ mod tests { fn test_serialize_peers() { let t = Peers::default(); let serialized = serde_json::to_string(&t).unwrap(); - assert_eq!(serialized, r#"{"active":0,"connected":0,"max":0}"#); + assert_eq!(serialized, r#"{"active":0,"connected":0,"max":0,"peers":[]}"#); } #[test] diff --git a/sync/src/api.rs b/sync/src/api.rs index c09157e3b9..54dfc91b7b 100644 --- a/sync/src/api.rs +++ b/sync/src/api.rs @@ -61,6 +61,30 @@ binary_fixed_size!(SyncStatus); pub trait SyncProvider: Send + Sync { /// Get sync status fn status(&self) -> SyncStatus; + + /// Get peers information + fn peers(&self) -> Vec; +} + +/// Peer connection information +#[derive(Debug, Binary)] +pub struct PeerInfo { + /// Public node id + pub id: Option, + /// Node client ID + pub client_version: String, + /// Capabilities + pub capabilities: Vec, + /// Remote endpoint address + pub remote_address: String, + /// Local endpoint address + pub local_address: String, + /// Ethereum protocol version + pub eth_version: u32, + /// SHA3 of peer best block hash + pub eth_head: H256, + /// Peer total difficulty if known + pub eth_difficulty: Option, } /// Ethereum network protocol handler @@ -94,6 +118,14 @@ impl SyncProvider for EthSync { fn status(&self) -> SyncStatus { self.handler.sync.write().status() } + + /// Get sync peers + fn peers(&self) -> Vec { + self.network.with_context_eval(self.subprotocol_name, |context| { + let sync_io = NetSyncIo::new(context, &*self.handler.chain, &*self.handler.snapshot_service); + self.handler.sync.write().peers(&sync_io) + }).unwrap_or(Vec::new()) + } } struct SyncProtocolHandler { diff --git a/sync/src/chain.rs b/sync/src/chain.rs index 446fd54999..ee2e908001 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -102,6 +102,7 @@ use super::SyncConfig; use blocks::BlockCollection; use snapshot::{Snapshot, ChunkType}; use rand::{thread_rng, Rng}; +use api::PeerInfo as PeerInfoDigest; known_heap_size!(0, PeerInfo); @@ -346,7 +347,7 @@ impl ChainSync { } } - /// @returns Synchonization status + /// Returns synchonization status pub fn status(&self) -> SyncStatus { SyncStatus { state: self.state.clone(), @@ -368,6 +369,25 @@ impl ChainSync { } } + /// Returns information on peers connections + pub fn peers(&self, io: &SyncIo) -> Vec { + self.peers.iter() + .filter_map(|(&peer_id, ref peer_data)| + io.peer_session_info(peer_id).map(|session_info| + PeerInfoDigest { + id: session_info.id.map(|id| id.hex()), + client_version: session_info.client_version, + capabilities: session_info.peer_capabilities.into_iter().map(|c| c.to_string()).collect(), + remote_address: session_info.remote_address, + local_address: session_info.local_address, + eth_version: peer_data.protocol_version, + eth_difficulty: peer_data.difficulty, + eth_head: peer_data.latest_hash, + }) + ) + .collect() + } + /// Abort all sync activity pub fn abort(&mut self, io: &mut SyncIo) { self.restart(io); diff --git a/sync/src/lib.rs b/sync/src/lib.rs index af566772ea..a4c29f166c 100644 --- a/sync/src/lib.rs +++ b/sync/src/lib.rs @@ -60,7 +60,7 @@ mod api { } pub use api::{EthSync, SyncProvider, SyncClient, NetworkManagerClient, ManageNetwork, SyncConfig, - ServiceConfiguration, NetworkConfiguration}; + ServiceConfiguration, NetworkConfiguration, PeerInfo}; pub use chain::{SyncStatus, SyncState}; pub use network::{is_valid_node_url, NonReservedPeerMode, NetworkError}; diff --git a/sync/src/sync_io.rs b/sync/src/sync_io.rs index 4459393990..52118b7101 100644 --- a/sync/src/sync_io.rs +++ b/sync/src/sync_io.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -use network::{NetworkContext, PeerId, PacketId, NetworkError}; +use network::{NetworkContext, PeerId, PacketId, NetworkError, SessionInfo}; use ethcore::client::BlockChainClient; use ethcore::snapshot::SnapshotService; @@ -34,10 +34,12 @@ pub trait SyncIo { fn chain(&self) -> &BlockChainClient; /// Get the snapshot service. fn snapshot_service(&self) -> &SnapshotService; - /// Returns peer client identifier string + /// Returns peer identifier string fn peer_info(&self, peer_id: PeerId) -> String { peer_id.to_string() } + /// Returns information on p2p session + fn peer_session_info(&self, peer_id: PeerId) -> Option; /// Maximum mutuallt supported ETH protocol version fn eth_protocol_version(&self, peer_id: PeerId) -> u8; /// Returns if the chain block queue empty @@ -91,8 +93,8 @@ impl<'s, 'h> SyncIo for NetSyncIo<'s, 'h> { self.snapshot_service } - fn peer_info(&self, peer_id: PeerId) -> String { - self.network.peer_info(peer_id) + fn peer_session_info(&self, peer_id: PeerId) -> Option { + self.network.session_info(peer_id) } fn is_expired(&self) -> bool { diff --git a/sync/src/tests/helpers.rs b/sync/src/tests/helpers.rs index 3558e55783..fcc8f002e2 100644 --- a/sync/src/tests/helpers.rs +++ b/sync/src/tests/helpers.rs @@ -83,6 +83,10 @@ impl<'p> SyncIo for TestIo<'p> { self.snapshot_service } + fn peer_session_info(&self, _peer_id: PeerId) -> Option { + None + } + fn eth_protocol_version(&self, _peer: PeerId) -> u8 { 64 } diff --git a/util/network/src/connection.rs b/util/network/src/connection.rs index 4a7b5a3c73..456c35e698 100644 --- a/util/network/src/connection.rs +++ b/util/network/src/connection.rs @@ -191,6 +191,11 @@ impl Connection { self.socket.peer_addr().map(|a| a.to_string()).unwrap_or_else(|_| "Unknown".to_owned()) } + /// Get local peer address string + pub fn local_addr_str(&self) -> String { + self.socket.local_addr().map(|a| a.to_string()).unwrap_or_else(|_| "Unknown".to_owned()) + } + /// Clone this connection. Clears the receiving buffer of the returned connection. pub fn try_clone(&self) -> io::Result { Ok(Connection { diff --git a/util/network/src/host.rs b/util/network/src/host.rs index a0d0a081a5..f5c14b0f92 100644 --- a/util/network/src/host.rs +++ b/util/network/src/host.rs @@ -31,7 +31,7 @@ use util::hash::*; use util::Hashable; use util::version; use rlp::*; -use session::{Session, SessionData}; +use session::{Session, SessionInfo, SessionData}; use error::*; use io::*; use {NetworkProtocolHandler, NonReservedPeerMode, PROTOCOL_VERSION}; @@ -280,12 +280,13 @@ impl<'s> NetworkContext<'s> { } /// Returns peer identification string - pub fn peer_info(&self, peer: PeerId) -> String { - let session = self.resolve_session(peer); - if let Some(session) = session { - return session.lock().info.client_version.clone() - } - "unknown".to_owned() + pub fn peer_client_version(&self, peer: PeerId) -> String { + self.resolve_session(peer).map_or("unknown".to_owned(), |s| s.lock().info.client_version.clone()) + } + + /// Returns information on p2p session + pub fn session_info(&self, peer: PeerId) -> Option { + self.resolve_session(peer).map(|s| s.lock().info.clone()) } /// Returns max version for a given protocol. @@ -918,6 +919,13 @@ impl Host { let context = NetworkContext::new(io, protocol, None, self.sessions.clone(), &reserved); action(&context); } + + pub fn with_context_eval(&self, protocol: ProtocolId, io: &IoContext, action: F) -> T where F: Fn(&NetworkContext) -> T { + let reserved = { self.reserved_nodes.read() }; + + let context = NetworkContext::new(io, protocol, None, self.sessions.clone(), &reserved); + action(&context) + } } impl IoHandler for Host { diff --git a/util/network/src/lib.rs b/util/network/src/lib.rs index cd03368234..50396b6fb2 100644 --- a/util/network/src/lib.rs +++ b/util/network/src/lib.rs @@ -99,6 +99,7 @@ pub use host::NetworkIoMessage; pub use error::NetworkError; pub use host::NetworkConfiguration; pub use stats::NetworkStats; +pub use session::SessionInfo; use io::TimerToken; pub use node_table::is_valid_node_url; diff --git a/util/network/src/service.rs b/util/network/src/service.rs index 3ab1f0301a..0b59f8bc73 100644 --- a/util/network/src/service.rs +++ b/util/network/src/service.rs @@ -178,6 +178,13 @@ impl NetworkService { host.with_context(protocol, &io, action); }; } + + /// Evaluates function in the network context + pub fn with_context_eval(&self, protocol: ProtocolId, action: F) -> Option where F: Fn(&NetworkContext) -> T { + let io = IoContext::new(self.io_service.channel(), 0); + let host = self.host.read(); + host.as_ref().map(|ref host| host.with_context_eval(protocol, &io, action)) + } } impl MayPanic for NetworkService { diff --git a/util/network/src/session.rs b/util/network/src/session.rs index fdba12fff2..845f98bec2 100644 --- a/util/network/src/session.rs +++ b/util/network/src/session.rs @@ -72,6 +72,7 @@ pub enum SessionData { } /// Shared session information +#[derive(Debug, Clone)] pub struct SessionInfo { /// Peer public key pub id: Option, @@ -79,15 +80,21 @@ pub struct SessionInfo { pub client_version: String, /// Peer RLPx protocol version pub protocol_version: u32, + /// Session protocol capabilities + pub capabilities: Vec, /// Peer protocol capabilities - capabilities: Vec, + pub peer_capabilities: Vec, /// Peer ping delay in milliseconds pub ping_ms: Option, /// True if this session was originated by us. pub originated: bool, + /// Remote endpoint address of the session + pub remote_address: String, + /// Local endpoint address of the session + pub local_address: String, } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct PeerCapabilityInfo { pub protocol: ProtocolId, pub version: u8, @@ -109,8 +116,14 @@ impl Decodable for PeerCapabilityInfo { } } -#[derive(Debug)] -struct SessionCapabilityInfo { +impl ToString for PeerCapabilityInfo { + fn to_string(&self) -> String { + format!("{}/{}", str::from_utf8(&self.protocol[..]).unwrap_or("???"), self.version) + } +} + +#[derive(Debug, Clone)] +pub struct SessionCapabilityInfo { pub protocol: [u8; 3], pub version: u8, pub packet_count: u8, @@ -134,6 +147,7 @@ impl Session { where Message: Send + Clone { let originated = id.is_some(); let mut handshake = Handshake::new(token, id, socket, nonce, stats).expect("Can't create handshake"); + let local_addr = handshake.connection.local_addr_str(); try!(handshake.start(io, host, originated)); Ok(Session { state: State::Handshake(handshake), @@ -143,8 +157,11 @@ impl Session { client_version: String::new(), protocol_version: 0, capabilities: Vec::new(), + peer_capabilities: Vec::new(), ping_ms: None, originated: originated, + remote_address: "Handshake".to_owned(), + local_address: local_addr, }, ping_time_ns: 0, pong_time_ns: None, @@ -155,6 +172,7 @@ impl Session { fn complete_handshake(&mut self, io: &IoContext, host: &HostInfo) -> Result<(), NetworkError> where Message: Send + Sync + Clone { let connection = if let State::Handshake(ref mut h) = self.state { self.info.id = Some(h.id.clone()); + self.info.remote_address = h.connection.remote_addr_str(); try!(EncryptedConnection::new(h)) } else { panic!("Unexpected state"); @@ -431,8 +449,10 @@ impl Session { i += 1; } trace!(target: "network", "Hello: {} v{} {} {:?}", client_version, protocol, id, caps); + self.info.protocol_version = protocol; self.info.client_version = client_version; self.info.capabilities = caps; + self.info.peer_capabilities = peer_caps; if self.info.capabilities.is_empty() { trace!(target: "network", "No common capabilities with peer."); return Err(From::from(self.disconnect(io, DisconnectReason::UselessPeer))); diff --git a/util/network/src/tests.rs b/util/network/src/tests.rs index 97a641c816..1b0c6eb6cf 100644 --- a/util/network/src/tests.rs +++ b/util/network/src/tests.rs @@ -69,7 +69,7 @@ impl NetworkProtocolHandler for TestProtocol { } fn connected(&self, io: &NetworkContext, peer: &PeerId) { - assert!(io.peer_info(*peer).contains("Parity")); + assert!(io.peer_client_version(*peer).contains("Parity")); if self.drop_session { io.disconnect_peer(*peer) } else { -- GitLab From 4581469e780498b6e179e6ccdde6d3a0f6daa040 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 13 Oct 2016 23:28:56 +0200 Subject: [PATCH 047/393] mitigate refcell conflict in state diffing (#2601) * mitigate refcell conflict in state diffing Also uses RefCell::get_mut in a few places. * Add test case --- ethcore/src/state/mod.rs | 44 +++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index 39c8bbc111..6e34e93676 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -239,15 +239,15 @@ impl State { /// Create a recoverable snaphot of this state. pub fn snapshot(&mut self) { - self.snapshots.borrow_mut().push(HashMap::new()); + self.snapshots.get_mut().push(HashMap::new()); } /// Merge last snapshot with previous. pub fn discard_snapshot(&mut self) { // merge with previous snapshot - let last = self.snapshots.borrow_mut().pop(); + let last = self.snapshots.get_mut().pop(); if let Some(mut snapshot) = last { - if let Some(ref mut prev) = self.snapshots.borrow_mut().last_mut() { + if let Some(ref mut prev) = self.snapshots.get_mut().last_mut() { if prev.is_empty() { **prev = snapshot; } else { @@ -261,11 +261,11 @@ impl State { /// Revert to the last snapshot and discard it. pub fn revert_to_snapshot(&mut self) { - if let Some(mut snapshot) = self.snapshots.borrow_mut().pop() { + if let Some(mut snapshot) = self.snapshots.get_mut().pop() { for (k, v) in snapshot.drain() { match v { Some(v) => { - match self.cache.borrow_mut().entry(k) { + match self.cache.get_mut().entry(k) { Entry::Occupied(mut e) => { // Merge snapshotted changes back into the main account // storage preserving the cache. @@ -277,7 +277,7 @@ impl State { } }, None => { - match self.cache.borrow_mut().entry(k) { + match self.cache.get_mut().entry(k) { Entry::Occupied(e) => { if e.get().is_dirty() { e.remove(); @@ -578,14 +578,14 @@ impl State { } fn query_pod(&mut self, query: &PodState) { - for (address, pod_account) in query.get() { - self.ensure_cached(address, RequireCache::Code, |a| { - if a.is_some() { - for key in pod_account.storage.keys() { - self.storage_at(address, key); - } - } - }); + for (address, pod_account) in query.get().into_iter() + .filter(|&(ref a, _)| self.ensure_cached(a, RequireCache::Code, |a| a.is_some())) + { + // needs to be split into two parts for the refcell code here + // to work. + for key in pod_account.storage.keys() { + self.storage_at(address, key); + } } } @@ -1797,4 +1797,20 @@ fn create_empty() { assert_eq!(state.root().hex(), "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"); } +#[test] +fn should_not_panic_on_state_diff_with_storage() { + let state = get_temp_state(); + let mut state = state.reference().clone(); + + let a: Address = 0xa.into(); + state.init_code(&a, b"abcdefg".to_vec()); + state.add_balance(&a, &256.into()); + state.set_storage(&a, 0xb.into(), 0xc.into()); + + let mut new_state = state.clone(); + new_state.set_storage(&a, 0xb.into(), 0xd.into()); + + new_state.diff_from(state); +} + } -- GitLab From dbc25cf4e72cb4ffef9044e17279e7da907646e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 14 Oct 2016 13:55:48 +0200 Subject: [PATCH 048/393] Additional logs when transactions is removed from queue (#2617) --- ethcore/src/miner/transaction_queue.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index fdb652780a..f7f8443592 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -678,6 +678,8 @@ impl TransactionQueue { let nonce = transaction.nonce(); let current_nonce = fetch_account(&sender).nonce; + trace!(target: "txqueue", "Removing invalid transaction: {:?}", transaction.hash()); + // Remove from future let order = self.future.drop(&sender, &nonce); if order.is_some() { @@ -953,12 +955,14 @@ impl TransactionQueue { let old_fee = old.gas_price; let new_fee = order.gas_price; if old_fee.cmp(&new_fee) == Ordering::Greater { + trace!(target: "txqueue", "Didn't insert transaction because gas price was too low: {:?} ({:?} stays in the queue)", order.hash, old.hash); // Put back old transaction since it has greater priority (higher gas_price) set.insert(address, nonce, old); // and remove new one by_hash.remove(&order.hash).expect("The hash has been just inserted and no other line is altering `by_hash`."); false } else { + trace!(target: "txqueue", "Replaced transaction: {:?} with transaction with higher gas price: {:?}", old.hash, order.hash); // Make sure we remove old transaction entirely by_hash.remove(&old.hash).expect("The hash is coming from `future` so it has to be in `by_hash`."); true -- GitLab From f9440f20b80b0b11adada80c7ed2a4def072182c Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 14 Oct 2016 13:56:00 +0200 Subject: [PATCH 049/393] Fixed tx queue limit for local transactions (#2616) * Fixed tx queue limit for local tx * Fixing test * Increas gas limit to 20x --- ethcore/src/miner/miner.rs | 4 ++-- ethcore/src/miner/transaction_queue.rs | 11 ++++++++--- parity/cli/usage.txt | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index a2dab44751..08d84b6378 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -462,8 +462,8 @@ impl Miner { let mut queue = self.transaction_queue.lock(); queue.set_gas_limit(gas_limit); if let GasLimit::Auto = self.options.tx_queue_gas_limit { - // Set total tx queue gas limit to be 2x the block gas limit. - queue.set_total_gas_limit(gas_limit << 1); + // Set total tx queue gas limit to be 20x the block gas limit. + queue.set_total_gas_limit(gas_limit * 20.into()); } } diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index f7f8443592..15fe38236e 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -326,14 +326,14 @@ impl TransactionSet { let to_drop : Vec<(Address, U256)> = { self.by_priority .iter() - .skip_while(|order| { + .filter(|order| { count = count + 1; let r = gas.overflowing_add(order.gas); if r.1 { return false } gas = r.0; // Own and retracted transactions are allowed to go above the gas limit, bot not above the count limit. - (gas <= self.gas_limit || order.origin == TransactionOrigin::Local || order.origin == TransactionOrigin::RetractedBlock) && - count <= self.limit + (gas > self.gas_limit && order.origin != TransactionOrigin::Local && order.origin != TransactionOrigin::RetractedBlock) || + count > self.limit }) .map(|order| by_hash.get(&order.hash) .expect("All transactions in `self.by_priority` and `self.by_address` are kept in sync with `by_hash`.")) @@ -345,6 +345,7 @@ impl TransactionSet { .fold(HashMap::new(), |mut removed, (sender, nonce)| { let order = self.drop(&sender, &nonce) .expect("Transaction has just been found in `by_priority`; so it is in `by_address` also."); + trace!(target: "txqueue", "Dropped out of limit transaction: {:?}", order.hash); by_hash.remove(&order.hash) .expect("hash is in `by_priorty`; all hashes in `by_priority` must be in `by_hash`; qed"); @@ -1782,8 +1783,12 @@ mod test { let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); + let (tx5, tx6) = new_tx_pair_default(U256::from(1), U256::from(2)); txq.add(tx1.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx5.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + // Not accepted because of limit + txq.add(tx6.clone(), &default_account_details, TransactionOrigin::External).unwrap_err(); txq.add(tx3.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); txq.add(tx4.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); assert_eq!(txq.status().pending, 4); diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 75501cdd19..c2eb51ade2 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -186,7 +186,7 @@ Sealing/Mining Options: to be included in next block) (default: {flag_tx_queue_size}). --tx-queue-gas LIMIT Maximum amount of total gas for external transactions in the queue. LIMIT can be either an amount of gas or - 'auto' or 'off'. 'auto' sets the limit to be 2x + 'auto' or 'off'. 'auto' sets the limit to be 20x the current block gas limit. (default: {flag_tx_queue_gas}). --remove-solved Move solved blocks from the work package queue instead of cloning them. This gives a slightly -- GitLab From 8ad1582208c1fcee803f14acd85c7b3fc42e8a03 Mon Sep 17 00:00:00 2001 From: keorn Date: Fri, 14 Oct 2016 13:28:02 +0100 Subject: [PATCH 050/393] enable suicide json test (#2626) --- ethcore/res/ethereum/tests | 2 +- ethcore/src/json_tests/homestead_chain.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ethcore/res/ethereum/tests b/ethcore/res/ethereum/tests index 8f07dbc829..c63dc0e22e 160000 --- a/ethcore/res/ethereum/tests +++ b/ethcore/res/ethereum/tests @@ -1 +1 @@ -Subproject commit 8f07dbc8294a32db5ebe8098925fcefc2eab3e71 +Subproject commit c63dc0e22eab0c3a40e09a87391e07e103014058 diff --git a/ethcore/src/json_tests/homestead_chain.rs b/ethcore/src/json_tests/homestead_chain.rs index 314c36cf17..37a9d0a21a 100644 --- a/ethcore/src/json_tests/homestead_chain.rs +++ b/ethcore/src/json_tests/homestead_chain.rs @@ -37,6 +37,5 @@ declare_test!{BlockchainTests_Homestead_bcUncleTest, "BlockchainTests/Homestead/ declare_test!{BlockchainTests_Homestead_bcValidBlockTest, "BlockchainTests/Homestead/bcValidBlockTest"} declare_test!{BlockchainTests_Homestead_bcWalletTest, "BlockchainTests/Homestead/bcWalletTest"} declare_test!{BlockchainTests_Homestead_bcShanghaiLove, "BlockchainTests/Homestead/bcShanghaiLove"} -// Uncomment once the test is correct. -// declare_test!{BlockchainTests_Homestead_bcSuicideIssue, "BlockchainTests/Homestead/bcSuicideIssue"} +declare_test!{BlockchainTests_Homestead_bcSuicideIssue, "BlockchainTests/Homestead/bcSuicideIssue"} declare_test!{BlockchainTests_Homestead_bcExploitTest, "BlockchainTests/Homestead/bcExploitTest"} -- GitLab From 835cd13c0ef8fc411d06a7414163c4e57d748e82 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 14 Oct 2016 14:44:11 +0200 Subject: [PATCH 051/393] Database performance tweaks (#2619) --- Cargo.lock | 4 ++-- ethcore/src/state_db.rs | 3 +-- util/src/kvdb.rs | 19 ++++++++++++------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9550d6dddd..cee7127277 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1406,7 +1406,7 @@ dependencies = [ [[package]] name = "rocksdb" version = "0.4.5" -source = "git+https://github.com/ethcore/rust-rocksdb#ffc7c82380fe8569f85ae6743f7f620af2d4a679" +source = "git+https://github.com/ethcore/rust-rocksdb#64c63ccbe1f62c2e2b39262486f9ba813793af58" dependencies = [ "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb-sys 0.3.0 (git+https://github.com/ethcore/rust-rocksdb)", @@ -1415,7 +1415,7 @@ dependencies = [ [[package]] name = "rocksdb-sys" version = "0.3.0" -source = "git+https://github.com/ethcore/rust-rocksdb#ffc7c82380fe8569f85ae6743f7f620af2d4a679" +source = "git+https://github.com/ethcore/rust-rocksdb#64c63ccbe1f62c2e2b39262486f9ba813793af58" dependencies = [ "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 4358dbb42f..01f3845709 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -31,8 +31,7 @@ pub const DEFAULT_ACCOUNT_PRESET: usize = 1000000; pub const ACCOUNT_BLOOM_HASHCOUNT_KEY: &'static [u8] = b"account_hash_count"; -const STATE_CACHE_BLOCKS: usize = 8; - +const STATE_CACHE_BLOCKS: usize = 12; /// Shared canonical state cache. struct AccountCache { diff --git a/util/src/kvdb.rs b/util/src/kvdb.rs index df36918dd9..92b7e9fbd7 100644 --- a/util/src/kvdb.rs +++ b/util/src/kvdb.rs @@ -23,7 +23,7 @@ use std::default::Default; use std::path::PathBuf; use rlp::{UntrustedRlp, RlpType, View, Compressible}; use rocksdb::{DB, Writable, WriteBatch, WriteOptions, IteratorMode, DBIterator, - Options, DBCompactionStyle, BlockBasedOptions, Direction, Cache, Column}; + Options, DBCompactionStyle, BlockBasedOptions, Direction, Cache, Column, ReadOptions}; const DB_BACKGROUND_FLUSHES: i32 = 2; const DB_BACKGROUND_COMPACTIONS: i32 = 2; @@ -207,6 +207,7 @@ pub struct Database { db: RwLock>, config: DatabaseConfig, write_opts: WriteOptions, + read_opts: ReadOptions, overlay: RwLock, KeyState>>>, path: String, } @@ -227,6 +228,7 @@ impl Database { try!(opts.set_parsed_options(&format!("rate_limiter_bytes_per_sec={}", rate_limit))); } try!(opts.set_parsed_options(&format!("max_total_wal_size={}", 64 * 1024 * 1024))); + try!(opts.set_parsed_options("verify_checksums_in_compaction=0")); opts.set_max_open_files(config.max_open_files); opts.create_if_missing(true); opts.set_use_fsync(false); @@ -264,6 +266,8 @@ impl Database { if !config.wal { write_opts.disable_wal(true); } + let mut read_opts = ReadOptions::new(); + read_opts.set_verify_checksums(false); let mut cfs: Vec = Vec::new(); let db = match config.columns { @@ -307,6 +311,7 @@ impl Database { write_opts: write_opts, overlay: RwLock::new((0..(num_cols + 1)).map(|_| HashMap::new()).collect()), path: path.to_owned(), + read_opts: read_opts, }) } @@ -421,8 +426,8 @@ impl Database { Some(&KeyState::Delete) => Ok(None), None => { col.map_or_else( - || db.get(key).map(|r| r.map(|v| v.to_vec())), - |c| db.get_cf(cfs[c as usize], key).map(|r| r.map(|v| v.to_vec()))) + || db.get_opt(key, &self.read_opts).map(|r| r.map(|v| v.to_vec())), + |c| db.get_cf_opt(cfs[c as usize], key, &self.read_opts).map(|r| r.map(|v| v.to_vec()))) }, } }, @@ -435,8 +440,8 @@ impl Database { pub fn get_by_prefix(&self, col: Option, prefix: &[u8]) -> Option> { match *self.db.read() { Some(DBAndColumns { ref db, ref cfs }) => { - let mut iter = col.map_or_else(|| db.iterator(IteratorMode::From(prefix, Direction::Forward)), - |c| db.iterator_cf(cfs[c as usize], IteratorMode::From(prefix, Direction::Forward)).unwrap()); + let mut iter = col.map_or_else(|| db.iterator_opt(IteratorMode::From(prefix, Direction::Forward), &self.read_opts), + |c| db.iterator_cf_opt(cfs[c as usize], IteratorMode::From(prefix, Direction::Forward), &self.read_opts).unwrap()); match iter.next() { // TODO: use prefix_same_as_start read option (not availabele in C API currently) Some((k, v)) => if k[0 .. prefix.len()] == prefix[..] { Some(v) } else { None }, @@ -452,8 +457,8 @@ impl Database { //TODO: iterate over overlay match *self.db.read() { Some(DBAndColumns { ref db, ref cfs }) => { - col.map_or_else(|| DatabaseIterator { iter: db.iterator(IteratorMode::Start) }, - |c| DatabaseIterator { iter: db.iterator_cf(cfs[c as usize], IteratorMode::Start).unwrap() }) + col.map_or_else(|| DatabaseIterator { iter: db.iterator_opt(IteratorMode::Start, &self.read_opts) }, + |c| DatabaseIterator { iter: db.iterator_cf_opt(cfs[c as usize], IteratorMode::Start, &self.read_opts).unwrap() }) }, None => panic!("Not supported yet") //TODO: return an empty iterator or change return type } -- GitLab From f28b8352c1e7c7b9d83409ff4aafa936314105dc Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 14 Oct 2016 14:44:56 +0200 Subject: [PATCH 052/393] Configurable history size in master (#2606) * split journaldb commit into two functions: journal_under and mark_canonical * use new commit mechanism in client * Configurable history size in master * Reduce DB history * Configurable history size * Set min history size * Test * Fixed a test and reduced the limit --- ethcore/src/block.rs | 4 +++ ethcore/src/client/client.rs | 50 +++++++++++++++++++++------ ethcore/src/client/config.rs | 2 ++ ethcore/src/snapshot/service.rs | 2 +- ethcore/src/tests/client.rs | 25 ++++++++++++++ parity/blockchain.rs | 6 ++-- parity/cli/config.full.toml | 1 + parity/cli/config.toml | 1 + parity/cli/mod.rs | 5 +++ parity/cli/usage.txt | 2 ++ parity/configuration.rs | 10 ++++++ parity/helpers.rs | 2 ++ parity/run.rs | 2 ++ parity/snapshot.rs | 3 +- util/src/journaldb/overlayrecentdb.rs | 15 ++++++-- util/src/journaldb/traits.rs | 3 ++ 16 files changed, 116 insertions(+), 17 deletions(-) diff --git a/ethcore/src/block.rs b/ethcore/src/block.rs index 80c35d1d0a..5cd9835114 100644 --- a/ethcore/src/block.rs +++ b/ethcore/src/block.rs @@ -404,6 +404,10 @@ impl<'x> OpenBlock<'x> { uncle_bytes: uncle_bytes, } } + + #[cfg(test)] + /// Return mutable block reference. To be used in tests only. + pub fn block_mut (&mut self) -> &mut ExecutedBlock { &mut self.block } } impl<'x> IsBlock for OpenBlock<'x> { diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 1cf6151c29..f5d10266f2 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -74,6 +74,7 @@ pub use blockchain::CacheSize as BlockChainCacheSize; const MAX_TX_QUEUE_SIZE: usize = 4096; const MAX_QUEUE_SIZE_TO_SLEEP_ON: usize = 2; +const MIN_HISTORY_SIZE: u64 = 8; impl fmt::Display for BlockChainInfo { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -141,12 +142,9 @@ pub struct Client { queue_transactions: AtomicUsize, last_hashes: RwLock>, factories: Factories, + history: u64, } -/// The pruning constant -- how old blocks must be before we -/// assume finality of a given candidate. -pub const HISTORY: u64 = 1200; - impl Client { /// Create a new client with given spec and DB path and custom verifier. pub fn new( @@ -177,6 +175,28 @@ impl Client { try!(db.write(batch).map_err(ClientError::Database)); } + trace!("Cleanup journal: DB Earliest = {:?}, Latest = {:?}", state_db.journal_db().earliest_era(), state_db.journal_db().latest_era()); + + let history = if config.history < MIN_HISTORY_SIZE { + info!(target: "client", "Ignoring pruning history parameter of {}\ + , falling back to minimum of {}", + config.history, MIN_HISTORY_SIZE); + MIN_HISTORY_SIZE + } else { + config.history + }; + + if let (Some(earliest), Some(latest)) = (state_db.journal_db().earliest_era(), state_db.journal_db().latest_era()) { + if latest > earliest && latest - earliest > history { + for era in earliest..(latest - history + 1) { + trace!("Removing era {}", era); + let mut batch = DBTransaction::new(&db); + try!(state_db.mark_canonical(&mut batch, era, &chain.block_hash(era).expect("Old block not found in the database"))); + try!(db.write(batch).map_err(ClientError::Database)); + } + } + } + if !chain.block_header(&chain.best_block_hash()).map_or(true, |h| state_db.journal_db().contains(h.state_root())) { warn!("State root not found for block #{} ({})", chain.best_block_number(), chain.best_block_hash().hex()); } @@ -217,6 +237,7 @@ impl Client { queue_transactions: AtomicUsize::new(0), last_hashes: RwLock::new(VecDeque::new()), factories: factories, + history: history, }; Ok(Arc::new(client)) } @@ -275,7 +296,7 @@ impl Client { let chain = self.chain.read(); // Check the block isn't so old we won't be able to enact it. let best_block_number = chain.best_block_number(); - if best_block_number >= HISTORY && header.number() <= best_block_number - HISTORY { + if best_block_number >= self.history && header.number() <= best_block_number - self.history { warn!(target: "client", "Block import failed for #{} ({})\nBlock is ancient (current best block: #{}).", header.number(), header.hash(), best_block_number); return Err(()); } @@ -432,8 +453,8 @@ impl Client { state.journal_under(&mut batch, number, hash).expect("DB commit failed"); - if number >= HISTORY { - let n = number - HISTORY; + if number >= self.history { + let n = number - self.history; state.mark_canonical(&mut batch, n, &chain.block_hash(n).unwrap()).expect("DB commit failed"); } @@ -495,7 +516,7 @@ impl Client { let db = self.state_db.lock().boxed_clone(); // early exit for pruned blocks - if db.is_pruned() && self.chain.read().best_block_number() >= block_number + HISTORY { + if db.is_pruned() && self.chain.read().best_block_number() >= block_number + self.history { return None; } @@ -600,7 +621,7 @@ impl Client { let best_block_number = self.chain_info().best_block_number; let block_number = try!(self.block_number(at).ok_or(snapshot::Error::InvalidStartingBlock(at))); - if best_block_number > HISTORY + block_number && db.is_pruned() { + if best_block_number > self.history + block_number && db.is_pruned() { return Err(snapshot::Error::OldBlockPrunedDB.into()); } @@ -612,8 +633,10 @@ impl Client { 0 }; - self.block_hash(BlockID::Number(start_num)) - .expect("blocks within HISTORY are always stored.") + match self.block_hash(BlockID::Number(start_num)) { + Some(h) => h, + None => return Err(snapshot::Error::InvalidStartingBlock(at).into()), + } } _ => match self.block_hash(at) { Some(hash) => hash, @@ -626,6 +649,11 @@ impl Client { Ok(()) } + /// Ask the client what the history parameter is. + pub fn pruning_history(&self) -> u64 { + self.history + } + fn block_hash(chain: &BlockChain, id: BlockID) -> Option { match id { BlockID::Hash(hash) => Some(hash), diff --git a/ethcore/src/client/config.rs b/ethcore/src/client/config.rs index e0ac51f0ad..69b9d9efe4 100644 --- a/ethcore/src/client/config.rs +++ b/ethcore/src/client/config.rs @@ -110,6 +110,8 @@ pub struct ClientConfig { pub state_cache_size: usize, /// EVM jump-tables cache size. pub jump_table_size: usize, + /// State pruning history size. + pub history: u64, } #[cfg(test)] diff --git a/ethcore/src/snapshot/service.rs b/ethcore/src/snapshot/service.rs index 5243a47929..63232ad5bd 100644 --- a/ethcore/src/snapshot/service.rs +++ b/ethcore/src/snapshot/service.rs @@ -346,7 +346,7 @@ impl Service { self.taking_snapshot.store(false, Ordering::SeqCst); if let Err(e) = res { - if client.chain_info().best_block_number >= num + ::client::HISTORY { + if client.chain_info().best_block_number >= num + client.pruning_history() { // "Cancelled" is mincing words a bit -- what really happened // is that the state we were snapshotting got pruned out // before we could finish. diff --git a/ethcore/src/tests/client.rs b/ethcore/src/tests/client.rs index 067f28d391..de99d6d057 100644 --- a/ethcore/src/tests/client.rs +++ b/ethcore/src/tests/client.rs @@ -24,6 +24,7 @@ use common::*; use devtools::*; use miner::Miner; use rlp::{Rlp, View}; +use spec::Spec; #[test] fn imports_from_empty() { @@ -238,3 +239,27 @@ fn can_mine() { assert_eq!(*b.block().header().parent_hash(), BlockView::new(&dummy_blocks[0]).header_view().sha3()); } + +#[test] +fn change_history_size() { + let dir = RandomTempPath::new(); + let test_spec = Spec::new_null(); + let mut config = ClientConfig::default(); + let db_config = DatabaseConfig::with_columns(::db::NUM_COLUMNS); + config.history = 2; + let address = Address::random(); + { + let client = Client::new(ClientConfig::default(), &test_spec, dir.as_path(), Arc::new(Miner::with_spec(&test_spec)), IoChannel::disconnected(), &db_config).unwrap(); + for _ in 0..20 { + let mut b = client.prepare_open_block(Address::default(), (3141562.into(), 31415620.into()), vec![]); + b.block_mut().fields_mut().state.add_balance(&address, &5.into()); + b.block_mut().fields_mut().state.commit().unwrap(); + let b = b.close_and_lock().seal(&*test_spec.engine, vec![]).unwrap(); + client.import_sealed_block(b).unwrap(); // account change is in the journal overlay + } + } + let mut config = ClientConfig::default(); + config.history = 10; + let client = Client::new(config, &test_spec, dir.as_path(), Arc::new(Miner::with_spec(&test_spec)), IoChannel::disconnected(), &db_config).unwrap(); + assert_eq!(client.state().balance(&address), 100.into()); +} diff --git a/parity/blockchain.rs b/parity/blockchain.rs index d4a4d8217b..1909450ba3 100644 --- a/parity/blockchain.rs +++ b/parity/blockchain.rs @@ -77,6 +77,7 @@ pub struct ImportBlockchain { pub file_path: Option, pub format: Option, pub pruning: Pruning, + pub pruning_history: u64, pub compaction: DatabaseCompactionProfile, pub wal: bool, pub mode: Mode, @@ -94,6 +95,7 @@ pub struct ExportBlockchain { pub file_path: Option, pub format: Option, pub pruning: Pruning, + pub pruning_history: u64, pub compaction: DatabaseCompactionProfile, pub wal: bool, pub mode: Mode, @@ -156,7 +158,7 @@ fn execute_import(cmd: ImportBlockchain) -> Result { try!(execute_upgrades(&db_dirs, algorithm, cmd.compaction.compaction_profile())); // prepare client config - let client_config = to_client_config(&cmd.cache_config, cmd.mode, tracing, fat_db, cmd.compaction, cmd.wal, cmd.vm_type, "".into(), algorithm); + let client_config = to_client_config(&cmd.cache_config, cmd.mode, tracing, fat_db, cmd.compaction, cmd.wal, cmd.vm_type, "".into(), algorithm, cmd.pruning_history); // build client let service = try!(ClientService::start( @@ -307,7 +309,7 @@ fn execute_export(cmd: ExportBlockchain) -> Result { try!(execute_upgrades(&db_dirs, algorithm, cmd.compaction.compaction_profile())); // prepare client config - let client_config = to_client_config(&cmd.cache_config, cmd.mode, tracing, fat_db, cmd.compaction, cmd.wal, VMType::default(), "".into(), algorithm); + let client_config = to_client_config(&cmd.cache_config, cmd.mode, tracing, fat_db, cmd.compaction, cmd.wal, VMType::default(), "".into(), algorithm, cmd.pruning_history); let service = try!(ClientService::start( client_config, diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index 8cbfadef46..3a9531bcff 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -77,6 +77,7 @@ notify_work = ["http://localhost:3001"] [footprint] tracing = "auto" pruning = "auto" +pruning_history = 64 cache_size_db = 64 cache_size_blocks = 8 cache_size_queue = 50 diff --git a/parity/cli/config.toml b/parity/cli/config.toml index d54b0254cf..d9608640c8 100644 --- a/parity/cli/config.toml +++ b/parity/cli/config.toml @@ -46,6 +46,7 @@ tx_queue_gas = "auto" [footprint] tracing = "on" pruning = "fast" +pruning_history = 64 cache_size_db = 128 cache_size_blocks = 16 cache_size_queue = 100 diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index f1f9efa842..c4ec4135cf 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -207,6 +207,8 @@ usage! { or |c: &Config| otry!(c.footprint).tracing.clone(), flag_pruning: String = "auto", or |c: &Config| otry!(c.footprint).pruning.clone(), + flag_pruning_history: u64 = 64u64, + or |c: &Config| otry!(c.footprint).pruning_history.clone(), flag_cache_size_db: u32 = 64u32, or |c: &Config| otry!(c.footprint).cache_size_db.clone(), flag_cache_size_blocks: u32 = 8u32, @@ -361,6 +363,7 @@ struct Mining { struct Footprint { tracing: Option, pruning: Option, + pruning_history: Option, fast_and_loose: Option, cache_size: Option, cache_size_db: Option, @@ -536,6 +539,7 @@ mod tests { // -- Footprint Options flag_tracing: "auto".into(), flag_pruning: "auto".into(), + flag_pruning_history: 64u64, flag_cache_size_db: 64u32, flag_cache_size_blocks: 8u32, flag_cache_size_queue: 50u32, @@ -690,6 +694,7 @@ mod tests { footprint: Some(Footprint { tracing: Some("on".into()), pruning: Some("fast".into()), + pruning_history: Some(64), fast_and_loose: None, cache_size: None, cache_size_db: Some(128), diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index c2eb51ade2..4f416e10db 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -209,6 +209,8 @@ Footprint Options: fast - maintain journal overlay. Fast but 50MB used. auto - use the method most recently synced or default to fast if none synced (default: {flag_pruning}). + --pruning-history NUM Set a number of recent states to keep when pruning + is active. [default: {flag_pruning_history}]. --cache-size-db MB Override database cache size (default: {flag_cache_size_db}). --cache-size-blocks MB Specify the prefered size of the blockchain cache in megabytes (default: {flag_cache_size_blocks}). diff --git a/parity/configuration.rs b/parity/configuration.rs index ffcea2c60e..5303b12019 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -73,6 +73,7 @@ impl Configuration { pub fn into_command(self) -> Result { let dirs = self.directories(); let pruning = try!(self.args.flag_pruning.parse()); + let pruning_history = self.args.flag_pruning_history; let vm_type = try!(self.vm_type()); let mode = try!(to_mode(&self.args.flag_mode, self.args.flag_mode_timeout, self.args.flag_mode_alarm)); let miner_options = try!(self.miner_options()); @@ -145,6 +146,7 @@ impl Configuration { file_path: self.args.arg_file.clone(), format: format, pruning: pruning, + pruning_history: pruning_history, compaction: compaction, wal: wal, mode: mode, @@ -162,6 +164,7 @@ impl Configuration { file_path: self.args.arg_file.clone(), format: format, pruning: pruning, + pruning_history: pruning_history, compaction: compaction, wal: wal, mode: mode, @@ -177,6 +180,7 @@ impl Configuration { dirs: dirs, spec: spec, pruning: pruning, + pruning_history: pruning_history, logger_config: logger_config, mode: mode, tracing: tracing, @@ -194,6 +198,7 @@ impl Configuration { dirs: dirs, spec: spec, pruning: pruning, + pruning_history: pruning_history, logger_config: logger_config, mode: mode, tracing: tracing, @@ -217,6 +222,7 @@ impl Configuration { dirs: dirs, spec: spec, pruning: pruning, + pruning_history: pruning_history, daemon: daemon, logger_config: logger_config, miner_options: miner_options, @@ -721,6 +727,7 @@ mod tests { file_path: Some("blockchain.json".into()), format: Default::default(), pruning: Default::default(), + pruning_history: 64, compaction: Default::default(), wal: true, mode: Default::default(), @@ -741,6 +748,7 @@ mod tests { dirs: Default::default(), file_path: Some("blockchain.json".into()), pruning: Default::default(), + pruning_history: 64, format: Default::default(), compaction: Default::default(), wal: true, @@ -763,6 +771,7 @@ mod tests { dirs: Default::default(), file_path: Some("blockchain.json".into()), pruning: Default::default(), + pruning_history: 64, format: Some(DataFormat::Hex), compaction: Default::default(), wal: true, @@ -791,6 +800,7 @@ mod tests { dirs: Default::default(), spec: Default::default(), pruning: Default::default(), + pruning_history: 64, daemon: None, logger_config: Default::default(), miner_options: Default::default(), diff --git a/parity/helpers.rs b/parity/helpers.rs index 6c02d4e5ac..c8a985105c 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -205,6 +205,7 @@ pub fn to_client_config( vm_type: VMType, name: String, pruning: Algorithm, + pruning_history: u64, ) -> ClientConfig { let mut client_config = ClientConfig::default(); @@ -232,6 +233,7 @@ pub fn to_client_config( client_config.tracing.enabled = tracing; client_config.fat_db = fat_db; client_config.pruning = pruning; + client_config.history = pruning_history; client_config.db_compaction = compaction; client_config.db_wal = wal; client_config.vm_type = vm_type; diff --git a/parity/run.rs b/parity/run.rs index 254765983b..4610b6f2e7 100644 --- a/parity/run.rs +++ b/parity/run.rs @@ -61,6 +61,7 @@ pub struct RunCmd { pub dirs: Directories, pub spec: SpecType, pub pruning: Pruning, + pub pruning_history: u64, /// Some if execution should be daemonized. Contains pid_file path. pub daemon: Option, pub logger_config: LogConfig, @@ -193,6 +194,7 @@ pub fn execute(cmd: RunCmd) -> Result<(), String> { cmd.vm_type, cmd.name, algorithm, + cmd.pruning_history, ); // set up bootnodes diff --git a/parity/snapshot.rs b/parity/snapshot.rs index 6b2efeed58..dd5c611d30 100644 --- a/parity/snapshot.rs +++ b/parity/snapshot.rs @@ -54,6 +54,7 @@ pub struct SnapshotCommand { pub dirs: Directories, pub spec: SpecType, pub pruning: Pruning, + pub pruning_history: u64, pub logger_config: LogConfig, pub mode: Mode, pub tracing: Switch, @@ -162,7 +163,7 @@ impl SnapshotCommand { try!(execute_upgrades(&db_dirs, algorithm, self.compaction.compaction_profile())); // prepare client config - let client_config = to_client_config(&self.cache_config, self.mode, tracing, fat_db, self.compaction, self.wal, VMType::default(), "".into(), algorithm); + let client_config = to_client_config(&self.cache_config, self.mode, tracing, fat_db, self.compaction, self.wal, VMType::default(), "".into(), algorithm, self.pruning_history); let service = try!(ClientService::start( client_config, diff --git a/util/src/journaldb/overlayrecentdb.rs b/util/src/journaldb/overlayrecentdb.rs index 0d1149a85e..bf01567fb8 100644 --- a/util/src/journaldb/overlayrecentdb.rs +++ b/util/src/journaldb/overlayrecentdb.rs @@ -70,6 +70,7 @@ struct JournalOverlay { pending_overlay: H256FastMap, // Nodes being transfered from backing_overlay to backing db journal: HashMap>, latest_era: Option, + earliest_era: Option, } #[derive(PartialEq)] @@ -123,7 +124,10 @@ impl OverlayRecentDB { fn can_reconstruct_refs(&self) -> bool { let reconstructed = Self::read_overlay(&self.backing, self.column); let journal_overlay = self.journal_overlay.read(); - *journal_overlay == reconstructed + journal_overlay.backing_overlay == reconstructed.backing_overlay && + journal_overlay.pending_overlay == reconstructed.pending_overlay && + journal_overlay.journal == reconstructed.journal && + journal_overlay.latest_era == reconstructed.latest_era } fn payload(&self, key: &H256) -> Option { @@ -135,6 +139,7 @@ impl OverlayRecentDB { let mut overlay = MemoryDB::new(); let mut count = 0; let mut latest_era = None; + let mut earliest_era = None; if let Some(val) = db.get(col, &LATEST_ERA_KEY).expect("Low-level database error.") { let mut era = decode::(&val); latest_era = Some(era); @@ -166,6 +171,7 @@ impl OverlayRecentDB { deletions: deletions, }); index += 1; + earliest_era = Some(era); }; if index == 0 || era == 0 { break; @@ -178,9 +184,12 @@ impl OverlayRecentDB { backing_overlay: overlay, pending_overlay: HashMap::default(), journal: journal, - latest_era: latest_era } + latest_era: latest_era, + earliest_era: earliest_era, + } } + } #[inline] @@ -214,6 +223,8 @@ impl JournalDB for OverlayRecentDB { fn latest_era(&self) -> Option { self.journal_overlay.read().latest_era } + fn earliest_era(&self) -> Option { self.journal_overlay.read().earliest_era } + fn state(&self, key: &H256) -> Option { let journal_overlay = self.journal_overlay.read(); let key = to_short_key(key); diff --git a/util/src/journaldb/traits.rs b/util/src/journaldb/traits.rs index afa2bb9f46..7acf20519d 100644 --- a/util/src/journaldb/traits.rs +++ b/util/src/journaldb/traits.rs @@ -32,6 +32,9 @@ pub trait JournalDB: HashDB { /// Check if this database has any commits fn is_empty(&self) -> bool; + /// Get the earliest era in the DB. None if there isn't yet any data in there. + fn earliest_era(&self) -> Option { None } + /// Get the latest era in the DB. None if there isn't yet any data in there. fn latest_era(&self) -> Option; -- GitLab From 8263bd4be239d7a2f5254caedb6c3254af627bad Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 14 Oct 2016 14:45:45 +0200 Subject: [PATCH 053/393] snapshot: single byte for empty accounts (#2625) --- ethcore/src/snapshot/account.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/ethcore/src/snapshot/account.rs b/ethcore/src/snapshot/account.rs index bc1faea3f5..30f2cd9567 100644 --- a/ethcore/src/snapshot/account.rs +++ b/ethcore/src/snapshot/account.rs @@ -19,12 +19,20 @@ use account_db::{AccountDB, AccountDBMut}; use snapshot::Error; -use util::{U256, FixedHash, H256, Bytes, HashDB, SHA3_EMPTY}; +use util::{U256, FixedHash, H256, Bytes, HashDB, SHA3_EMPTY, SHA3_NULL_RLP}; use util::trie::{TrieDB, Trie}; use rlp::{Rlp, RlpStream, Stream, UntrustedRlp, View}; use std::collections::{HashMap, HashSet}; +// An empty account -- these are replaced with RLP null data for a space optimization. +const ACC_EMPTY: Account = Account { + nonce: U256([0, 0, 0, 0]), + balance: U256([0, 0, 0, 0]), + storage_root: SHA3_NULL_RLP, + code_hash: SHA3_EMPTY, +}; + // whether an encoded account has code and how it is referred to. #[repr(u8)] enum CodeState { @@ -88,6 +96,10 @@ impl Account { // walk the account's storage trie, returning an RLP item containing the // account properties and the storage. pub fn to_fat_rlp(&self, acct_db: &AccountDB, used_code: &mut HashSet) -> Result { + if self == &ACC_EMPTY { + return Ok(::rlp::NULL_RLP.to_vec()); + } + let db = try!(TrieDB::new(acct_db, &self.storage_root)); let mut pairs = Vec::new(); @@ -142,6 +154,11 @@ impl Account { ) -> Result<(Self, Option), Error> { use util::{TrieDBMut, TrieMut}; + // check for special case of empty account. + if rlp.is_empty() { + return Ok((ACC_EMPTY, None)); + } + let nonce = try!(rlp.val_at(0)); let balance = try!(rlp.val_at(1)); let code_state: CodeState = { @@ -214,7 +231,7 @@ mod tests { use std::collections::{HashSet, HashMap}; - use super::Account; + use super::{ACC_EMPTY, Account}; #[test] fn encoding_basic() { @@ -310,4 +327,14 @@ mod tests { assert_eq!(maybe_code, Some(b"this is definitely code".to_vec())); assert_eq!(acc, account1); } + + #[test] + fn encoding_empty_acc() { + let mut db = get_temp_state_db(); + let mut used_code = HashSet::new(); + let code_map = HashMap::new(); + + assert_eq!(ACC_EMPTY.to_fat_rlp(&AccountDB::new(db.as_hashdb(), &Address::default()), &mut used_code).unwrap(), ::rlp::NULL_RLP.to_vec()); + assert_eq!(Account::from_fat_rlp(&mut AccountDBMut::new(db.as_hashdb_mut(), &Address::default()), UntrustedRlp::new(&::rlp::NULL_RLP), &code_map).unwrap(), (ACC_EMPTY, None)); + } } -- GitLab From 85eeb3ea6e5e21ad8e5644241edf82eb8069f536 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Sat, 15 Oct 2016 14:39:15 +0200 Subject: [PATCH 054/393] EIP150.1c (#2591) * EIP150.1b first part. * Add documentation. [ci:skip] * Tweak comment * Fix some tests. * Fix create * Add the new EIP150 test. (#2563) * Fix create some more. * Another fix for create. * Final fixes. * Enable EIP150 test. * Revert the costly suicides to respect EIP150.1b. * Fixups for EIP150.1c * Update tests. * Updating tests * Adding state tests * Updating tests * Updating HF block * Removing flushln [ci:skip] * Commenting out suicide test * New tests. * Switch to EIP tests. * Rename some stuff, combine transition tests. * Fix U256 overflows. * Name cleanups and an effort to fix tests. * Rename back for clarity. * Fix non-EIP-150 OOG CALLs * New transition block number & additional EIP150 tests * Morden transition block set; Tests updated * Added missing test --- ethcore/res/ethereum/classic.json | 3 +- ethcore/res/ethereum/eip150_test.json | 43 + ethcore/res/ethereum/expanse.json | 5 +- ethcore/res/ethereum/frontier.json | 7 +- ethcore/res/ethereum/frontier_like_test.json | 5 +- ethcore/res/ethereum/frontier_test.json | 3 +- ethcore/res/ethereum/homestead_test.json | 3 +- ethcore/res/ethereum/morden.json | 3 +- ethcore/res/ethereum/olympic.json | 4 +- ethcore/res/ethereum/tests | 2 +- ...ardfork_test.json => transition_test.json} | 7 +- ethcore/src/blockchain/blockchain.rs | 5 +- ethcore/src/ethereum/ethash.rs | 19 +- ethcore/src/ethereum/mod.rs | 5 +- ethcore/src/evm/interpreter/gasometer.rs | 111 +- ethcore/src/evm/interpreter/mod.rs | 39 +- ethcore/src/evm/schedule.rs | 62 + ethcore/src/executive.rs | 2 +- ethcore/src/json_tests/chain.rs | 31 +- ethcore/src/json_tests/eip150_state.rs | 43 + ethcore/src/json_tests/homestead_chain.rs | 3 +- ethcore/src/json_tests/mod.rs | 1 + ethcore/src/json_tests/state.rs | 1337 +++++++++-------- ethcore/src/tests/helpers.rs | 7 +- json/src/spec/engine.rs | 2 +- json/src/spec/ethash.rs | 13 +- json/src/spec/params.rs | 2 +- json/src/spec/spec.rs | 4 +- rpc/src/v1/tests/eth.rs | 4 +- 29 files changed, 1023 insertions(+), 752 deletions(-) create mode 100644 ethcore/res/ethereum/eip150_test.json rename ethcore/res/ethereum/{daohardfork_test.json => transition_test.json} (98%) create mode 100644 ethcore/src/json_tests/eip150_state.rs diff --git a/ethcore/res/ethereum/classic.json b/ethcore/res/ethereum/classic.json index 8feee79e61..35a2cbed94 100644 --- a/ethcore/res/ethereum/classic.json +++ b/ethcore/res/ethereum/classic.json @@ -10,7 +10,8 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x118c30" + "homesteadTransition": "0x118c30", + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/eip150_test.json b/ethcore/res/ethereum/eip150_test.json new file mode 100644 index 0000000000..39d4b3fe8f --- /dev/null +++ b/ethcore/res/ethereum/eip150_test.json @@ -0,0 +1,43 @@ +{ + "name": "Homestead (Test)", + "engine": { + "Ethash": { + "params": { + "gasLimitBoundDivisor": "0x0400", + "minimumDifficulty": "0x020000", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "blockReward": "0x4563918244F40000", + "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", + "homesteadTransition": "0x0", + "eip150Transition": "0x0" + } + } + }, + "params": { + "accountStartNonce": "0x00", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0x1388", + "networkID" : "0x1" + }, + "genesis": { + "seal": { + "ethereum": { + "nonce": "0x0000000000000042", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "difficulty": "0x400000000", + "author": "0x0000000000000000000000000000000000000000", + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0x1388" + }, + "accounts": { + "0000000000000000000000000000000000000001": { "balance": "1", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } }, + "0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } }, + "0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } }, + "0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } } + } +} diff --git a/ethcore/res/ethereum/expanse.json b/ethcore/res/ethereum/expanse.json index 9b005096b4..d2d036487e 100644 --- a/ethcore/res/ethereum/expanse.json +++ b/ethcore/res/ethereum/expanse.json @@ -11,10 +11,11 @@ "durationLimit": "0x3C", "blockReward": "0x6f05b59d3b200000", "registrar" : "0x6c221ca53705f3497ec90ca7b84c59ae7382fc21", - "frontierCompatibilityModeLimit": "0x30d40", + "homesteadTransition": "0x30d40", "difficultyHardforkTransition": "0x59d9", "difficultyHardforkBoundDivisor": "0x0200", - "bombDefuseTransition": "0x30d40" + "bombDefuseTransition": "0x30d40", + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/frontier.json b/ethcore/res/ethereum/frontier.json index 903e87cc7b..8e92e49b32 100644 --- a/ethcore/res/ethereum/frontier.json +++ b/ethcore/res/ethereum/frontier.json @@ -9,10 +9,10 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x118c30", + "homesteadTransition": "0x118c30", "daoHardforkTransition": "0x1d4c00", "daoHardforkBeneficiary": "0xbf4ed7b27f1d666546e30d74d50d173d20bca754", - "daoHardforkAccounts": [ + "daoHardforkAccounts": [ "0xd4fe7bc31cedb7bfb8a345f31e668033056b2728", "0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425", "0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f", @@ -129,7 +129,8 @@ "0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97", "0xbb9bc244d798123fde783fcc1c72d3bb8c189413", "0x807640a13483f8ac783c557fcdf27be11ea4ac7a" - ] + ], + "eip150Transition": "0x259518" } } }, diff --git a/ethcore/res/ethereum/frontier_like_test.json b/ethcore/res/ethereum/frontier_like_test.json index aab48e78ed..99a7ad7128 100644 --- a/ethcore/res/ethereum/frontier_like_test.json +++ b/ethcore/res/ethereum/frontier_like_test.json @@ -9,7 +9,7 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x118c30", + "homesteadTransition": "0x118c30", "daoHardforkTransition": "0x1d4c00", "daoHardforkBeneficiary": "0xbf4ed7b27f1d666546e30d74d50d173d20bca754", "daoHardforkAccounts": [ @@ -129,7 +129,8 @@ "0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97", "0xbb9bc244d798123fde783fcc1c72d3bb8c189413", "0x807640a13483f8ac783c557fcdf27be11ea4ac7a" - ] + ], + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/frontier_test.json b/ethcore/res/ethereum/frontier_test.json index 3964d33adf..1cb3d8cfc0 100644 --- a/ethcore/res/ethereum/frontier_test.json +++ b/ethcore/res/ethereum/frontier_test.json @@ -9,7 +9,8 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0xffffffffffffffff" + "homesteadTransition": "0x7fffffffffffffff", + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/homestead_test.json b/ethcore/res/ethereum/homestead_test.json index 8a362009ff..ad64ce2d53 100644 --- a/ethcore/res/ethereum/homestead_test.json +++ b/ethcore/res/ethereum/homestead_test.json @@ -9,7 +9,8 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x0" + "homesteadTransition": "0x0", + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/morden.json b/ethcore/res/ethereum/morden.json index ef18df97d6..fdbe1fec27 100644 --- a/ethcore/res/ethereum/morden.json +++ b/ethcore/res/ethereum/morden.json @@ -9,7 +9,8 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar": "0x52dff57a8a1532e6afb3dc07e2af58bb9eb05b3d", - "frontierCompatibilityModeLimit": "0x789b0" + "homesteadTransition": "0x789b0", + "eip150Transition": "0x1b34d8" } } }, diff --git a/ethcore/res/ethereum/olympic.json b/ethcore/res/ethereum/olympic.json index 99686b0736..ebc7abd4ea 100644 --- a/ethcore/res/ethereum/olympic.json +++ b/ethcore/res/ethereum/olympic.json @@ -8,7 +8,9 @@ "difficultyBoundDivisor": "0x0800", "durationLimit": "0x08", "blockReward": "0x14D1120D7B160000", - "registrar": "5e70c0bbcd5636e0f9f9316e9f8633feb64d4050" + "registrar": "5e70c0bbcd5636e0f9f9316e9f8633feb64d4050", + "homesteadTransition": "0x7fffffffffffffff", + "eip150Transition": "0x7fffffffffffffff" } } }, diff --git a/ethcore/res/ethereum/tests b/ethcore/res/ethereum/tests index c63dc0e22e..cd2a6746bb 160000 --- a/ethcore/res/ethereum/tests +++ b/ethcore/res/ethereum/tests @@ -1 +1 @@ -Subproject commit c63dc0e22eab0c3a40e09a87391e07e103014058 +Subproject commit cd2a6746bb653bf4b1acb6198b40df19ed8dde3b diff --git a/ethcore/res/ethereum/daohardfork_test.json b/ethcore/res/ethereum/transition_test.json similarity index 98% rename from ethcore/res/ethereum/daohardfork_test.json rename to ethcore/res/ethereum/transition_test.json index 90875f4f60..c004bc2ba3 100644 --- a/ethcore/res/ethereum/daohardfork_test.json +++ b/ethcore/res/ethereum/transition_test.json @@ -1,5 +1,5 @@ { - "name": "DAO hard-fork consensus test", + "name": "EIP150.1b hard-fork consensus test", "engine": { "Ethash": { "params": { @@ -9,7 +9,7 @@ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x5", + "homesteadTransition": "0x5", "daoHardforkTransition": "0x8", "daoHardforkBeneficiary": "0xbf4ed7b27f1d666546e30d74d50d173d20bca754", "daoHardforkAccounts": [ @@ -129,7 +129,8 @@ "0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97", "0xbb9bc244d798123fde783fcc1c72d3bb8c189413", "0x807640a13483f8ac783c557fcdf27be11ea4ac7a" - ] + ], + "eip150Transition": "0xa" } } }, diff --git a/ethcore/src/blockchain/blockchain.rs b/ethcore/src/blockchain/blockchain.rs index 8daf672b91..51be650439 100644 --- a/ethcore/src/blockchain/blockchain.rs +++ b/ethcore/src/blockchain/blockchain.rs @@ -332,7 +332,10 @@ impl BlockProvider for BlockChain { .filter_map(|(number, hash)| self.block_receipts(&hash).map(|r| (number, hash, r.receipts))) .filter_map(|(number, hash, receipts)| self.block_body(&hash).map(|ref b| (number, hash, receipts, BodyView::new(b).transaction_hashes()))) .flat_map(|(number, hash, mut receipts, mut hashes)| { - assert_eq!(receipts.len(), hashes.len()); + if receipts.len() != hashes.len() { + warn!("Block {} ({}) has different number of receipts ({}) to transactions ({}). Database corrupt?", number, hash, receipts.len(), hashes.len()); + assert!(false); + } log_index = receipts.iter().fold(0, |sum, receipt| sum + receipt.logs.len()); let receipts_len = receipts.len(); diff --git a/ethcore/src/ethereum/ethash.rs b/ethcore/src/ethereum/ethash.rs index 982698a506..e0c18292b0 100644 --- a/ethcore/src/ethereum/ethash.rs +++ b/ethcore/src/ethereum/ethash.rs @@ -41,7 +41,7 @@ pub struct EthashParams { /// Namereg contract address. pub registrar: Address, /// Homestead transition block number. - pub frontier_compatibility_mode_limit: u64, + pub homestead_transition: u64, /// DAO hard-fork transition block (X). pub dao_hardfork_transition: u64, /// DAO hard-fork refund contract address (C). @@ -54,6 +54,8 @@ pub struct EthashParams { pub difficulty_hardfork_bound_divisor: U256, /// Block on which there is no additional difficulty from the exponential bomb. pub bomb_defuse_transition: u64, + /// Bad gas transition block number. + pub eip150_transition: u64, } impl From for EthashParams { @@ -66,13 +68,14 @@ impl From for EthashParams { duration_limit: p.duration_limit.into(), block_reward: p.block_reward.into(), registrar: p.registrar.map_or_else(Address::new, Into::into), - frontier_compatibility_mode_limit: p.frontier_compatibility_mode_limit.map_or(0, Into::into), + homestead_transition: p.homestead_transition.map_or(0, Into::into), dao_hardfork_transition: p.dao_hardfork_transition.map_or(0x7fffffffffffffff, Into::into), dao_hardfork_beneficiary: p.dao_hardfork_beneficiary.map_or_else(Address::new, Into::into), dao_hardfork_accounts: p.dao_hardfork_accounts.unwrap_or_else(Vec::new).into_iter().map(Into::into).collect(), difficulty_hardfork_transition: p.difficulty_hardfork_transition.map_or(0x7fffffffffffffff, Into::into), difficulty_hardfork_bound_divisor: p.difficulty_hardfork_bound_divisor.map_or(p.difficulty_bound_divisor.into(), Into::into), bomb_defuse_transition: p.bomb_defuse_transition.map_or(0x7fffffffffffffff, Into::into), + eip150_transition: p.eip150_transition.map_or(0, Into::into), } } } @@ -117,12 +120,14 @@ impl Engine for Ethash { } fn schedule(&self, env_info: &EnvInfo) -> Schedule { - trace!(target: "client", "Creating schedule. fCML={}", self.ethash_params.frontier_compatibility_mode_limit); + trace!(target: "client", "Creating schedule. fCML={}, bGCML={}", self.ethash_params.homestead_transition, self.ethash_params.eip150_transition); - if env_info.number < self.ethash_params.frontier_compatibility_mode_limit { + if env_info.number < self.ethash_params.homestead_transition { Schedule::new_frontier() - } else { + } else if env_info.number < self.ethash_params.eip150_transition { Schedule::new_homestead() + } else { + Schedule::new_homestead_gas_fix() } } @@ -264,7 +269,7 @@ impl Engine for Ethash { } fn verify_transaction_basic(&self, t: &SignedTransaction, header: &Header) -> result::Result<(), Error> { - if header.number() >= self.ethash_params.frontier_compatibility_mode_limit { + if header.number() >= self.ethash_params.homestead_transition { try!(t.check_low_s()); } Ok(()) @@ -290,7 +295,7 @@ impl Ethash { false => self.ethash_params.difficulty_bound_divisor, }; let duration_limit = self.ethash_params.duration_limit; - let frontier_limit = self.ethash_params.frontier_compatibility_mode_limit; + let frontier_limit = self.ethash_params.homestead_transition; let mut target = if header.number() < frontier_limit { if header.timestamp() >= parent.timestamp() + duration_limit { diff --git a/ethcore/src/ethereum/mod.rs b/ethcore/src/ethereum/mod.rs index 6d4502d2d9..219b3bf5c1 100644 --- a/ethcore/src/ethereum/mod.rs +++ b/ethcore/src/ethereum/mod.rs @@ -51,8 +51,11 @@ pub fn new_frontier_test() -> Spec { load(include_bytes!("../../res/ethereum/fro /// Create a new Homestead chain spec as though it never changed from Frontier. pub fn new_homestead_test() -> Spec { load(include_bytes!("../../res/ethereum/homestead_test.json")) } +/// Create a new Homestead-EIP150 chain spec as though it never changed from Homestead/Frontier. +pub fn new_eip150_test() -> Spec { load(include_bytes!("../../res/ethereum/eip150_test.json")) } + /// Create a new Frontier/Homestead/DAO chain spec with transition points at #5 and #8. -pub fn new_daohardfork_test() -> Spec { load(include_bytes!("../../res/ethereum/daohardfork_test.json")) } +pub fn new_transition_test() -> Spec { load(include_bytes!("../../res/ethereum/transition_test.json")) } /// Create a new Frontier main net chain spec without genesis accounts. pub fn new_mainnet_like() -> Spec { load(include_bytes!("../../res/ethereum/frontier_like_test.json")) } diff --git a/ethcore/src/evm/interpreter/gasometer.rs b/ethcore/src/evm/interpreter/gasometer.rs index d7022be7ce..d4c329be05 100644 --- a/ethcore/src/evm/interpreter/gasometer.rs +++ b/ethcore/src/evm/interpreter/gasometer.rs @@ -19,6 +19,7 @@ use super::u256_to_address; use evm::{self, CostType}; use evm::instructions::{self, Instruction, InstructionInfo}; use evm::interpreter::stack::Stack; +use evm::schedule::Schedule; macro_rules! overflowing { ($x: expr) => {{ @@ -31,7 +32,7 @@ macro_rules! overflowing { #[cfg_attr(feature="dev", allow(enum_variant_names))] enum InstructionCost { Gas(Cost), - GasMem(Cost, Cost), + GasMem(Cost, Cost, Option), GasMemCopy(Cost, Cost, Cost) } @@ -56,7 +57,37 @@ impl Gasometer { } } + /// How much gas is provided to a CALL/CREATE, given that we need to deduct `needed` for this operation + /// and that we `requested` some. + pub fn gas_provided(&self, schedule: &Schedule, needed: Gas, requested: Option>) -> evm::Result { + match schedule.sub_gas_cap_divisor { + Some(cap_divisor) if self.current_gas >= needed => { + let gas_remaining = self.current_gas - needed; + let max_gas_provided = gas_remaining - gas_remaining / Gas::from(cap_divisor); + if let Some(Ok(r)) = requested { + Ok(min(r, max_gas_provided)) + } else { + Ok(max_gas_provided) + } + }, + _ => { + if let Some(r) = requested { + r + } else if self.current_gas >= needed { + Ok(self.current_gas - needed) + } else { + Ok(0.into()) + } + } + } + } + #[cfg_attr(feature="dev", allow(cyclomatic_complexity))] + /// Determine how much gas is used by the given instruction, given the machine's state. + /// + /// We guarantee that the final element of the returned tuple (`provided`) will be `Some` + /// iff the `instruction` is one of `CREATE`, or any of the `CALL` variants. In this case, + /// it will be the amount of gas that the current context provides to the child context. pub fn get_gas_cost_mem( &mut self, ext: &evm::Ext, @@ -64,7 +95,7 @@ impl Gasometer { info: &InstructionInfo, stack: &Stack, current_mem_size: usize, - ) -> evm::Result<(Gas, Gas, usize)> { + ) -> evm::Result<(Gas, Gas, usize, Option)> { let schedule = ext.schedule(); let tier = instructions::get_tier_idx(info.tier); let default_gas = Gas::from(schedule.tier_step_gas[tier]); @@ -90,26 +121,42 @@ impl Gasometer { instructions::SLOAD => { InstructionCost::Gas(Gas::from(schedule.sload_gas)) }, + instructions::BALANCE => { + InstructionCost::Gas(Gas::from(schedule.balance_gas)) + }, + instructions::EXTCODESIZE => { + InstructionCost::Gas(Gas::from(schedule.extcodesize_gas)) + }, + instructions::SUICIDE => { + let mut gas = Gas::from(schedule.suicide_gas); + + let address = u256_to_address(stack.peek(0)); + if !ext.exists(&address) { + gas = overflowing!(gas.overflow_add(schedule.suicide_to_new_account_cost.into())); + } + + InstructionCost::Gas(gas) + }, instructions::MSTORE | instructions::MLOAD => { - InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 32))) + InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 32)), None) }, instructions::MSTORE8 => { - InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 1))) + InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 1)), None) }, instructions::RETURN => { - InstructionCost::GasMem(default_gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) + InstructionCost::GasMem(default_gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) }, instructions::SHA3 => { let w = overflowing!(add_gas_usize(try!(Gas::from_u256(*stack.peek(1))), 31)); let words = w >> 5; let gas = Gas::from(schedule.sha3_gas) + (Gas::from(schedule.sha3_word_gas) * words); - InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) + InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) }, instructions::CALLDATACOPY | instructions::CODECOPY => { InstructionCost::GasMemCopy(default_gas, try!(mem_needed(stack.peek(0), stack.peek(2))), try!(Gas::from_u256(*stack.peek(2)))) }, instructions::EXTCODECOPY => { - InstructionCost::GasMemCopy(default_gas, try!(mem_needed(stack.peek(1), stack.peek(3))), try!(Gas::from_u256(*stack.peek(3)))) + InstructionCost::GasMemCopy(schedule.extcodecopy_base_gas.into(), try!(mem_needed(stack.peek(1), stack.peek(3))), try!(Gas::from_u256(*stack.peek(3)))) }, instructions::LOG0...instructions::LOG4 => { let no_of_topics = instructions::get_log_topics(instruction); @@ -117,10 +164,10 @@ impl Gasometer { let data_gas = overflowing!(try!(Gas::from_u256(*stack.peek(1))).overflow_mul(Gas::from(schedule.log_data_gas))); let gas = overflowing!(data_gas.overflow_add(Gas::from(log_gas))); - InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) + InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) }, instructions::CALL | instructions::CALLCODE => { - let mut gas = overflowing!(add_gas_usize(try!(Gas::from_u256(*stack.peek(0))), schedule.call_gas)); + let mut gas = Gas::from(schedule.call_gas); let mem = cmp::max( try!(mem_needed(stack.peek(5), stack.peek(6))), try!(mem_needed(stack.peek(3), stack.peek(4))) @@ -129,27 +176,49 @@ impl Gasometer { let address = u256_to_address(stack.peek(1)); if instruction == instructions::CALL && !ext.exists(&address) { - gas = overflowing!(gas.overflow_add(Gas::from(schedule.call_new_account_gas))); + gas = overflowing!(gas.overflow_add(schedule.call_new_account_gas.into())); }; if !stack.peek(2).is_zero() { - gas = overflowing!(gas.overflow_add(Gas::from(schedule.call_value_transfer_gas))); + gas = overflowing!(gas.overflow_add(schedule.call_value_transfer_gas.into())); }; - InstructionCost::GasMem(gas,mem) + // TODO: refactor to avoid duplicate calculation here and later on. + let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); + let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); + let requested = Gas::from_u256(*stack.peek(0)); + let provided = try!(self.gas_provided(schedule, cost_so_far, Some(requested))); + gas = overflowing!(gas.overflow_add(provided)); + + InstructionCost::GasMem(gas, mem, Some(provided)) }, instructions::DELEGATECALL => { - let gas = overflowing!(add_gas_usize(try!(Gas::from_u256(*stack.peek(0))), schedule.call_gas)); + let mut gas = Gas::from(schedule.call_gas); let mem = cmp::max( try!(mem_needed(stack.peek(4), stack.peek(5))), try!(mem_needed(stack.peek(2), stack.peek(3))) ); - InstructionCost::GasMem(gas, mem) + + // TODO: refactor to avoid duplicate calculation here and later on. + let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); + let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); + let requested = Gas::from_u256(*stack.peek(0)); + let provided = try!(self.gas_provided(schedule, cost_so_far, Some(requested))); + gas = overflowing!(gas.overflow_add(provided)); + + InstructionCost::GasMem(gas, mem, Some(provided)) }, instructions::CREATE => { - let gas = Gas::from(schedule.create_gas); + let mut gas = Gas::from(schedule.create_gas); let mem = try!(mem_needed(stack.peek(1), stack.peek(2))); - InstructionCost::GasMem(gas, mem) + + // TODO: refactor to avoid duplicate calculation here and later on. + let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); + let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); + let provided = try!(self.gas_provided(schedule, cost_so_far, None)); + gas = overflowing!(gas.overflow_add(provided)); + + InstructionCost::GasMem(gas, mem, Some(provided)) }, instructions::EXP => { let expon = stack.peek(1); @@ -157,17 +226,17 @@ impl Gasometer { let gas = Gas::from(schedule.exp_gas + schedule.exp_byte_gas * bytes); InstructionCost::Gas(gas) }, - _ => InstructionCost::Gas(default_gas) + _ => InstructionCost::Gas(default_gas), }; match cost { InstructionCost::Gas(gas) => { - Ok((gas, self.current_mem_gas, 0)) + Ok((gas, self.current_mem_gas, 0, None)) }, - InstructionCost::GasMem(gas, mem_size) => { + InstructionCost::GasMem(gas, mem_size, provided) => { let (mem_gas_cost, new_mem_gas, new_mem_size) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem_size)); let gas = overflowing!(gas.overflow_add(mem_gas_cost)); - Ok((gas, new_mem_gas, new_mem_size)) + Ok((gas, new_mem_gas, new_mem_size, provided)) }, InstructionCost::GasMemCopy(gas, mem_size, copy) => { let (mem_gas_cost, new_mem_gas, new_mem_size) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem_size)); @@ -175,7 +244,7 @@ impl Gasometer { let copy_gas = Gas::from(schedule.copy_gas) * copy; let gas = overflowing!(gas.overflow_add(copy_gas)); let gas = overflowing!(gas.overflow_add(mem_gas_cost)); - Ok((gas, new_mem_gas, new_mem_size)) + Ok((gas, new_mem_gas, new_mem_size, None)) } } } diff --git a/ethcore/src/evm/interpreter/mod.rs b/ethcore/src/evm/interpreter/mod.rs index 887f37cefd..51dd8bacdc 100644 --- a/ethcore/src/evm/interpreter/mod.rs +++ b/ethcore/src/evm/interpreter/mod.rs @@ -81,8 +81,6 @@ impl<'a> CodeReader<'a> { enum InstructionResult { Ok, - UseAllGas, - GasLeft(Gas), UnusedGas(Gas), JumpToPosition(U256), // gas left, init_orf, init_size @@ -120,7 +118,7 @@ impl evm::Evm for Interpreter { try!(self.verify_instruction(ext, instruction, info, &stack)); // Calculate gas cost - let (gas_cost, mem_gas, mem_size) = try!(gasometer.get_gas_cost_mem(ext, instruction, info, &stack, self.mem.size())); + let (gas_cost, mem_gas, mem_size, provided) = try!(gasometer.get_gas_cost_mem(ext, instruction, info, &stack, self.mem.size())); // TODO: make compile-time removable if too much of a performance hit. let trace_executed = ext.trace_prepare_execute(reader.position - 1, instruction, &gas_cost.as_u256()); @@ -138,27 +136,21 @@ impl evm::Evm for Interpreter { // Execute instruction let result = try!(self.exec_instruction( - gasometer.current_gas, ¶ms, ext, instruction, &mut reader, &mut stack + gasometer.current_gas, ¶ms, ext, instruction, &mut reader, &mut stack, provided )); evm_debug!({ informant.after_instruction(instruction) }); + if let InstructionResult::UnusedGas(ref gas) = result { + gasometer.current_gas = gasometer.current_gas + *gas; + } + if trace_executed { ext.trace_executed(gasometer.current_gas.as_u256(), stack.peek_top(info.ret), mem_written.map(|(o, s)| (o, &(self.mem[o..(o + s)]))), store_written); } // Advance match result { - InstructionResult::Ok => {}, - InstructionResult::UnusedGas(gas) => { - gasometer.current_gas = gasometer.current_gas + gas; - }, - InstructionResult::UseAllGas => { - gasometer.current_gas = Cost::from(0); - }, - InstructionResult::GasLeft(gas_left) => { - gasometer.current_gas = gas_left; - }, InstructionResult::JumpToPosition(position) => { let pos = try!(self.verify_jump(position, &valid_jump_destinations)); reader.position = pos; @@ -168,6 +160,7 @@ impl evm::Evm for Interpreter { return Ok(GasLeft::NeedsReturn(gas.as_u256(), self.mem.read_slice(off, size))); }, InstructionResult::StopExecution => break, + _ => {}, } } informant.done(); @@ -250,7 +243,8 @@ impl Interpreter { ext: &mut evm::Ext, instruction: Instruction, code: &mut CodeReader, - stack: &mut Stack + stack: &mut Stack, + provided: Option ) -> evm::Result> { match instruction { instructions::JUMP => { @@ -275,31 +269,32 @@ impl Interpreter { let endowment = stack.pop_back(); let init_off = stack.pop_back(); let init_size = stack.pop_back(); + let create_gas = provided.expect("`provided` comes through Self::exec from `Gasometer::get_gas_cost_mem`; `gas_gas_mem_cost` guarantees `Some` when instruction is `CALL`/`CALLCODE`/`DELEGATECALL`/`CREATE`; this is `CREATE`; qed"); let contract_code = self.mem.read_slice(init_off, init_size); let can_create = ext.balance(¶ms.address) >= endowment && ext.depth() < ext.schedule().max_depth; if !can_create { stack.push(U256::zero()); - return Ok(InstructionResult::Ok); + return Ok(InstructionResult::UnusedGas(create_gas)); } - let create_result = ext.create(&gas.as_u256(), &endowment, contract_code); + let create_result = ext.create(&create_gas.as_u256(), &endowment, contract_code); return match create_result { ContractCreateResult::Created(address, gas_left) => { stack.push(address_to_u256(address)); - Ok(InstructionResult::GasLeft(Cost::from_u256(gas_left).expect("Gas left cannot be greater."))) + Ok(InstructionResult::UnusedGas(Cost::from_u256(gas_left).expect("Gas left cannot be greater."))) }, ContractCreateResult::Failed => { stack.push(U256::zero()); - // TODO [todr] Should we just StopExecution here? - Ok(InstructionResult::UseAllGas) + Ok(InstructionResult::Ok) } }; }, instructions::CALL | instructions::CALLCODE | instructions::DELEGATECALL => { assert!(ext.schedule().call_value_transfer_gas > ext.schedule().call_stipend, "overflow possible"); - let call_gas = Cost::from_u256(stack.pop_back()).expect("Gas is already validated."); + stack.pop_back(); + let call_gas = provided.expect("`provided` comes through Self::exec from `Gasometer::get_gas_cost_mem`; `gas_gas_mem_cost` guarantees `Some` when instruction is `CALL`/`CALLCODE`/`DELEGATECALL`/`CREATE`; this is one of `CALL`/`CALLCODE`/`DELEGATECALL`; qed"); let code_address = stack.pop_back(); let code_address = u256_to_address(&code_address); @@ -317,7 +312,7 @@ impl Interpreter { // Add stipend (only CALL|CALLCODE when value > 0) let call_gas = call_gas + value.map_or_else(|| Cost::from(0), |val| match val.is_zero() { false => Cost::from(ext.schedule().call_stipend), - true => Cost::from(0) + true => Cost::from(0), }); // Get sender & receive addresses, check if we have balance diff --git a/ethcore/src/evm/schedule.rs b/ethcore/src/evm/schedule.rs index e3e4e3b7bf..b8de785b39 100644 --- a/ethcore/src/evm/schedule.rs +++ b/ethcore/src/evm/schedule.rs @@ -80,6 +80,19 @@ pub struct Schedule { pub tx_data_non_zero_gas: usize, /// Gas price for copying memory pub copy_gas: usize, + /// Price of EXTCODESIZE + pub extcodesize_gas: usize, + /// Base price of EXTCODECOPY + pub extcodecopy_base_gas: usize, + /// Price of BALANCE + pub balance_gas: usize, + /// Price of SUICIDE + pub suicide_gas: usize, + /// Amount of additional gas to pay when SUICIDE credits a non-existant account + pub suicide_to_new_account_cost: usize, + /// If Some(x): let limit = GAS * (x - 1) / x; let CALL's gas = min(requested, limit). let CREATE's gas = limit. + /// If None: let CALL's gas = (requested > GAS ? [OOG] : GAS). let CREATE's gas = GAS + pub sub_gas_cap_divisor: Option, } impl Schedule { @@ -93,6 +106,49 @@ impl Schedule { Self::new(true, true, 53000) } + /// Schedule for the Homestead-era of the Ethereum main net. + pub fn new_homestead_gas_fix() -> Schedule { + Schedule{ + exceptional_failed_code_deposit: true, + have_delegate_call: true, + stack_limit: 1024, + max_depth: 1024, + tier_step_gas: [0, 2, 3, 5, 8, 10, 20, 0], + exp_gas: 10, + exp_byte_gas: 10, + sha3_gas: 30, + sha3_word_gas: 6, + sload_gas: 200, + sstore_set_gas: 20000, + sstore_reset_gas: 5000, + sstore_refund_gas: 15000, + jumpdest_gas: 1, + log_gas: 375, + log_data_gas: 8, + log_topic_gas: 375, + create_gas: 32000, + call_gas: 700, + call_stipend: 2300, + call_value_transfer_gas: 9000, + call_new_account_gas: 25000, + suicide_refund_gas: 24000, + memory_gas: 3, + quad_coeff_div: 512, + create_data_gas: 200, + tx_gas: 21000, + tx_create_gas: 53000, + tx_data_zero_gas: 4, + tx_data_non_zero_gas: 68, + copy_gas: 3, + extcodesize_gas: 700, + extcodecopy_base_gas: 700, + balance_gas: 400, + suicide_gas: 5000, + suicide_to_new_account_cost: 25000, + sub_gas_cap_divisor: Some(64), + } + } + fn new(efcd: bool, hdc: bool, tcg: usize) -> Schedule { Schedule{ exceptional_failed_code_deposit: efcd, @@ -126,6 +182,12 @@ impl Schedule { tx_data_zero_gas: 4, tx_data_non_zero_gas: 68, copy_gas: 3, + extcodesize_gas: 20, + extcodecopy_base_gas: 20, + balance_gas: 20, + suicide_gas: 0, + suicide_to_new_account_cost: 0, + sub_gas_cap_divisor: None, } } } diff --git a/ethcore/src/executive.rs b/ethcore/src/executive.rs index 3c8b6171e3..54fd902035 100644 --- a/ethcore/src/executive.rs +++ b/ethcore/src/executive.rs @@ -697,7 +697,7 @@ mod tests { VMOperation { pc: 33, instruction: 96, gas_cost: 3.into(), executed: Some(VMExecutedOperation { gas_used: 99985.into(), stack_push: vec_into![29], mem_diff: None, store_diff: None }) }, VMOperation { pc: 35, instruction: 96, gas_cost: 3.into(), executed: Some(VMExecutedOperation { gas_used: 99982.into(), stack_push: vec_into![3], mem_diff: None, store_diff: None }) }, VMOperation { pc: 37, instruction: 96, gas_cost: 3.into(), executed: Some(VMExecutedOperation { gas_used: 99979.into(), stack_push: vec_into![23], mem_diff: None, store_diff: None }) }, - VMOperation { pc: 39, instruction: 240, gas_cost: 32000.into(), executed: Some(VMExecutedOperation { gas_used: 67979.into(), stack_push: vec_into![U256::from_dec_str("1135198453258042933984631383966629874710669425204").unwrap()], mem_diff: None, store_diff: None }) }, + VMOperation { pc: 39, instruction: 240, gas_cost: 99979.into(), executed: Some(VMExecutedOperation { gas_used: 64755.into(), stack_push: vec_into![U256::from_dec_str("1135198453258042933984631383966629874710669425204").unwrap()], mem_diff: None, store_diff: None }) }, VMOperation { pc: 40, instruction: 96, gas_cost: 3.into(), executed: Some(VMExecutedOperation { gas_used: 64752.into(), stack_push: vec_into![0], mem_diff: None, store_diff: None }) }, VMOperation { pc: 42, instruction: 85, gas_cost: 20000.into(), executed: Some(VMExecutedOperation { gas_used: 44752.into(), stack_push: vec_into![], mem_diff: None, store_diff: Some(StorageDiff { location: 0.into(), value: U256::from_dec_str("1135198453258042933984631383966629874710669425204").unwrap() }) }) } ], diff --git a/ethcore/src/json_tests/chain.rs b/ethcore/src/json_tests/chain.rs index 93b0cf82cd..bf32db1337 100644 --- a/ethcore/src/json_tests/chain.rs +++ b/ethcore/src/json_tests/chain.rs @@ -48,7 +48,8 @@ pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec { let mut spec = match era { ChainEra::Frontier => ethereum::new_frontier_test(), ChainEra::Homestead => ethereum::new_homestead_test(), - ChainEra::DaoHardfork => ethereum::new_daohardfork_test(), + ChainEra::Eip150 => ethereum::new_eip150_test(), + ChainEra::TransitionTest => ethereum::new_transition_test(), }; spec.set_genesis_state(state); spec.overwrite_genesis_params(genesis); @@ -116,14 +117,38 @@ mod frontier_era_tests { declare_test!{BlockchainTests_RandomTests_bl201507071825GO, "BlockchainTests/RandomTests/bl201507071825GO"} } -mod daohardfork_tests { +mod transition_tests { use tests::helpers::*; use super::json_chain_test; fn do_json_test(json_data: &[u8]) -> Vec { - json_chain_test(json_data, ChainEra::DaoHardfork) + json_chain_test(json_data, ChainEra::TransitionTest) } declare_test!{BlockchainTests_TestNetwork_bcSimpleTransitionTest, "BlockchainTests/TestNetwork/bcSimpleTransitionTest"} declare_test!{BlockchainTests_TestNetwork_bcTheDaoTest, "BlockchainTests/TestNetwork/bcTheDaoTest"} + declare_test!{BlockchainTests_TestNetwork_bcEIP150Test, "BlockchainTests/TestNetwork/bcEIP150Test"} +} + +mod eip150_blockchain_tests { + use tests::helpers::*; + use super::json_chain_test; + + fn do_json_test(json_data: &[u8]) -> Vec { + json_chain_test(json_data, ChainEra::Eip150) + } + + declare_test!{BlockchainTests_EIP150_bcBlockGasLimitTest, "BlockchainTests/EIP150/bcBlockGasLimitTest"} + declare_test!{BlockchainTests_EIP150_bcForkStressTest, "BlockchainTests/EIP150/bcForkStressTest"} + declare_test!{BlockchainTests_EIP150_bcGasPricerTest, "BlockchainTests/EIP150/bcGasPricerTest"} + declare_test!{BlockchainTests_EIP150_bcInvalidHeaderTest, "BlockchainTests/EIP150/bcInvalidHeaderTest"} + declare_test!{BlockchainTests_EIP150_bcInvalidRLPTest, "BlockchainTests/EIP150/bcInvalidRLPTest"} + declare_test!{BlockchainTests_EIP150_bcMultiChainTest, "BlockchainTests/EIP150/bcMultiChainTest"} + declare_test!{BlockchainTests_EIP150_bcRPC_API_Test, "BlockchainTests/EIP150/bcRPC_API_Test"} + declare_test!{BlockchainTests_EIP150_bcStateTest, "BlockchainTests/EIP150/bcStateTest"} + declare_test!{BlockchainTests_EIP150_bcTotalDifficultyTest, "BlockchainTests/EIP150/bcTotalDifficultyTest"} + declare_test!{BlockchainTests_EIP150_bcUncleHeaderValiditiy, "BlockchainTests/EIP150/bcUncleHeaderValiditiy"} + declare_test!{BlockchainTests_EIP150_bcUncleTest, "BlockchainTests/EIP150/bcUncleTest"} + declare_test!{BlockchainTests_EIP150_bcValidBlockTest, "BlockchainTests/EIP150/bcValidBlockTest"} + declare_test!{BlockchainTests_EIP150_bcWalletTest, "BlockchainTests/EIP150/bcWalletTest"} } diff --git a/ethcore/src/json_tests/eip150_state.rs b/ethcore/src/json_tests/eip150_state.rs new file mode 100644 index 0000000000..9076286eb4 --- /dev/null +++ b/ethcore/src/json_tests/eip150_state.rs @@ -0,0 +1,43 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +use super::test_common::*; +use tests::helpers::*; +use super::state::json_chain_test; + +fn do_json_test(json_data: &[u8]) -> Vec { + json_chain_test(json_data, ChainEra::Eip150) +} + +declare_test!{StateTests_EIP150_stEIPSpecificTest, "StateTests/EIP150/stEIPSpecificTest"} +declare_test!{StateTests_EIP150_stEIPsingleCodeGasPrices, "StateTests/EIP150/stEIPsingleCodeGasPrices"} +declare_test!{StateTests_EIP150_stMemExpandingEIPCalls, "StateTests/EIP150/stMemExpandingEIPCalls"} + +declare_test!{StateTests_EIP150_stCallCodes, "StateTests/EIP150/Homestead/stCallCodes"} +declare_test!{StateTests_EIP150_stCallCreateCallCodeTest, "StateTests/EIP150/Homestead/stCallCreateCallCodeTest"} +declare_test!{StateTests_EIP150_stDelegatecallTest, "StateTests/EIP150/Homestead/stDelegatecallTest"} +declare_test!{StateTests_EIP150_stInitCodeTest, "StateTests/EIP150/Homestead/stInitCodeTest"} +declare_test!{StateTests_EIP150_stLogTests, "StateTests/EIP150/Homestead/stLogTests"} +declare_test!{heavy => StateTests_EIP150_stMemoryStressTest, "StateTests/EIP150/Homestead/stMemoryStressTest"} +declare_test!{heavy => StateTests_EIP150_stMemoryTest, "StateTests/EIP150/Homestead/stMemoryTest"} +declare_test!{StateTests_EIP150_stPreCompiledContracts, "StateTests/EIP150/Homestead/stPreCompiledContracts"} +declare_test!{heavy => StateTests_EIP150_stQuadraticComplexityTest, "StateTests/EIP150/Homestead/stQuadraticComplexityTest"} +declare_test!{StateTests_EIP150_stRecursiveCreate, "StateTests/EIP150/Homestead/stRecursiveCreate"} +declare_test!{StateTests_EIP150_stRefundTest, "StateTests/EIP150/Homestead/stRefundTest"} +declare_test!{StateTests_EIP150_stSpecialTest, "StateTests/EIP150/Homestead/stSpecialTest"} +declare_test!{StateTests_EIP150_stSystemOperationsTest, "StateTests/EIP150/Homestead/stSystemOperationsTest"} +declare_test!{StateTests_EIP150_stTransactionTest, "StateTests/EIP150/Homestead/stTransactionTest"} +declare_test!{StateTests_EIP150_stWalletTest, "StateTests/EIP150/Homestead/stWalletTest"} diff --git a/ethcore/src/json_tests/homestead_chain.rs b/ethcore/src/json_tests/homestead_chain.rs index 37a9d0a21a..d92b8a7f1a 100644 --- a/ethcore/src/json_tests/homestead_chain.rs +++ b/ethcore/src/json_tests/homestead_chain.rs @@ -37,5 +37,6 @@ declare_test!{BlockchainTests_Homestead_bcUncleTest, "BlockchainTests/Homestead/ declare_test!{BlockchainTests_Homestead_bcValidBlockTest, "BlockchainTests/Homestead/bcValidBlockTest"} declare_test!{BlockchainTests_Homestead_bcWalletTest, "BlockchainTests/Homestead/bcWalletTest"} declare_test!{BlockchainTests_Homestead_bcShanghaiLove, "BlockchainTests/Homestead/bcShanghaiLove"} -declare_test!{BlockchainTests_Homestead_bcSuicideIssue, "BlockchainTests/Homestead/bcSuicideIssue"} +// TODO [ToDr] uncomment as soon as eip150 tests are merged to develop branch of ethereum/tests +// declare_test!{BlockchainTests_Homestead_bcSuicideIssue, "BlockchainTests/Homestead/bcSuicideIssue"} declare_test!{BlockchainTests_Homestead_bcExploitTest, "BlockchainTests/Homestead/bcExploitTest"} diff --git a/ethcore/src/json_tests/mod.rs b/ethcore/src/json_tests/mod.rs index 841db229ee..7a5dd30d24 100644 --- a/ethcore/src/json_tests/mod.rs +++ b/ethcore/src/json_tests/mod.rs @@ -23,4 +23,5 @@ mod state; mod chain; mod homestead_state; mod homestead_chain; +mod eip150_state; mod trie; diff --git a/ethcore/src/json_tests/state.rs b/ethcore/src/json_tests/state.rs index d7011cd28c..16e532401b 100644 --- a/ethcore/src/json_tests/state.rs +++ b/ethcore/src/json_tests/state.rs @@ -20,10 +20,6 @@ use pod_state::{self, PodState}; use ethereum; use ethjson; -fn do_json_test(json_data: &[u8]) -> Vec { - json_chain_test(json_data, ChainEra::Frontier) -} - pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec { init_log(); let tests = ethjson::state::Test::load(json_data).unwrap(); @@ -31,8 +27,9 @@ pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec { let engine = match era { ChainEra::Frontier => ethereum::new_mainnet_like().engine, ChainEra::Homestead => ethereum::new_homestead_test().engine, - ChainEra::DaoHardfork => ethereum::new_daohardfork_test().engine, -}; + ChainEra::Eip150 => ethereum::new_eip150_test().engine, + ChainEra::TransitionTest => ethereum::new_transition_test().engine, + }; for (name, test) in tests.into_iter() { let mut fail = false; @@ -93,665 +90,673 @@ pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec { failed } -declare_test!{StateTests_stBlockHashTest, "StateTests/stBlockHashTest"} -declare_test!{StateTests_stCallCodes, "StateTests/stCallCodes"} -declare_test!{StateTests_stCallCreateCallCodeTest, "StateTests/stCallCreateCallCodeTest"} -declare_test!{StateTests_stExample, "StateTests/stExample"} -declare_test!{StateTests_stInitCodeTest, "StateTests/stInitCodeTest"} -declare_test!{StateTests_stLogTests, "StateTests/stLogTests"} -declare_test!{heavy => StateTests_stMemoryStressTest, "StateTests/stMemoryStressTest"} -declare_test!{heavy => StateTests_stMemoryTest, "StateTests/stMemoryTest"} -declare_test!{StateTests_stPreCompiledContracts, "StateTests/stPreCompiledContracts"} -declare_test!{heavy => StateTests_stQuadraticComplexityTest, "StateTests/stQuadraticComplexityTest"} -declare_test!{StateTests_stRecursiveCreate, "StateTests/stRecursiveCreate"} -declare_test!{StateTests_stRefundTest, "StateTests/stRefundTest"} -declare_test!{StateTests_stSolidityTest, "StateTests/stSolidityTest"} -declare_test!{StateTests_stSpecialTest, "StateTests/stSpecialTest"} -declare_test!{StateTests_stSystemOperationsTest, "StateTests/stSystemOperationsTest"} -declare_test!{StateTests_stTransactionTest, "StateTests/stTransactionTest"} -declare_test!{StateTests_stTransitionTest, "StateTests/stTransitionTest"} -declare_test!{StateTests_stWalletTest, "StateTests/stWalletTest"} +mod frontier_tests { + use super::json_chain_test; + use tests::helpers::ChainEra; + fn do_json_test(json_data: &[u8]) -> Vec { + json_chain_test(json_data, ChainEra::Frontier) + } -declare_test!{StateTests_RandomTests_st201503121803PYTHON, "StateTests/RandomTests/st201503121803PYTHON"} -declare_test!{StateTests_RandomTests_st201503121806PYTHON, "StateTests/RandomTests/st201503121806PYTHON"} -declare_test!{StateTests_RandomTests_st201503121848GO, "StateTests/RandomTests/st201503121848GO"} -declare_test!{StateTests_RandomTests_st201503121849GO, "StateTests/RandomTests/st201503121849GO"} -declare_test!{StateTests_RandomTests_st201503121850GO, "StateTests/RandomTests/st201503121850GO"} -declare_test!{StateTests_RandomTests_st201503121851GO, "StateTests/RandomTests/st201503121851GO"} -declare_test!{StateTests_RandomTests_st201503121953GO, "StateTests/RandomTests/st201503121953GO"} -declare_test!{StateTests_RandomTests_st201503122023GO, "StateTests/RandomTests/st201503122023GO"} -declare_test!{StateTests_RandomTests_st201503122023PYTHON, "StateTests/RandomTests/st201503122023PYTHON"} -declare_test!{StateTests_RandomTests_st201503122027GO, "StateTests/RandomTests/st201503122027GO"} -declare_test!{StateTests_RandomTests_st201503122054GO, "StateTests/RandomTests/st201503122054GO"} -declare_test!{StateTests_RandomTests_st201503122055GO, "StateTests/RandomTests/st201503122055GO"} -declare_test!{StateTests_RandomTests_st201503122115CPPJIT, "StateTests/RandomTests/st201503122115CPPJIT"} -declare_test!{StateTests_RandomTests_st201503122115GO, "StateTests/RandomTests/st201503122115GO"} -declare_test!{StateTests_RandomTests_st201503122123GO, "StateTests/RandomTests/st201503122123GO"} -declare_test!{StateTests_RandomTests_st201503122124GO, "StateTests/RandomTests/st201503122124GO"} -declare_test!{StateTests_RandomTests_st201503122128PYTHON, "StateTests/RandomTests/st201503122128PYTHON"} -declare_test!{StateTests_RandomTests_st201503122140GO, "StateTests/RandomTests/st201503122140GO"} -declare_test!{StateTests_RandomTests_st201503122159GO, "StateTests/RandomTests/st201503122159GO"} -declare_test!{StateTests_RandomTests_st201503122204GO, "StateTests/RandomTests/st201503122204GO"} -declare_test!{StateTests_RandomTests_st201503122212GO, "StateTests/RandomTests/st201503122212GO"} -declare_test!{StateTests_RandomTests_st201503122231GO, "StateTests/RandomTests/st201503122231GO"} -declare_test!{StateTests_RandomTests_st201503122238GO, "StateTests/RandomTests/st201503122238GO"} -declare_test!{StateTests_RandomTests_st201503122252GO, "StateTests/RandomTests/st201503122252GO"} -declare_test!{StateTests_RandomTests_st201503122316GO, "StateTests/RandomTests/st201503122316GO"} -declare_test!{StateTests_RandomTests_st201503122324GO, "StateTests/RandomTests/st201503122324GO"} -declare_test!{StateTests_RandomTests_st201503122358GO, "StateTests/RandomTests/st201503122358GO"} -declare_test!{StateTests_RandomTests_st201503130002GO, "StateTests/RandomTests/st201503130002GO"} -declare_test!{StateTests_RandomTests_st201503130005GO, "StateTests/RandomTests/st201503130005GO"} -declare_test!{StateTests_RandomTests_st201503130007GO, "StateTests/RandomTests/st201503130007GO"} -declare_test!{StateTests_RandomTests_st201503130010GO, "StateTests/RandomTests/st201503130010GO"} -declare_test!{StateTests_RandomTests_st201503130023PYTHON, "StateTests/RandomTests/st201503130023PYTHON"} -declare_test!{StateTests_RandomTests_st201503130059GO, "StateTests/RandomTests/st201503130059GO"} -declare_test!{StateTests_RandomTests_st201503130101GO, "StateTests/RandomTests/st201503130101GO"} -declare_test!{StateTests_RandomTests_st201503130109GO, "StateTests/RandomTests/st201503130109GO"} -declare_test!{StateTests_RandomTests_st201503130117GO, "StateTests/RandomTests/st201503130117GO"} -declare_test!{StateTests_RandomTests_st201503130122GO, "StateTests/RandomTests/st201503130122GO"} -declare_test!{StateTests_RandomTests_st201503130156GO, "StateTests/RandomTests/st201503130156GO"} -declare_test!{StateTests_RandomTests_st201503130156PYTHON, "StateTests/RandomTests/st201503130156PYTHON"} -declare_test!{StateTests_RandomTests_st201503130207GO, "StateTests/RandomTests/st201503130207GO"} -declare_test!{StateTests_RandomTests_st201503130219CPPJIT, "StateTests/RandomTests/st201503130219CPPJIT"} -declare_test!{StateTests_RandomTests_st201503130219GO, "StateTests/RandomTests/st201503130219GO"} -declare_test!{StateTests_RandomTests_st201503130243GO, "StateTests/RandomTests/st201503130243GO"} -declare_test!{StateTests_RandomTests_st201503130246GO, "StateTests/RandomTests/st201503130246GO"} -declare_test!{StateTests_RandomTests_st201503130321GO, "StateTests/RandomTests/st201503130321GO"} -declare_test!{StateTests_RandomTests_st201503130322GO, "StateTests/RandomTests/st201503130322GO"} -declare_test!{StateTests_RandomTests_st201503130332GO, "StateTests/RandomTests/st201503130332GO"} -declare_test!{StateTests_RandomTests_st201503130359GO, "StateTests/RandomTests/st201503130359GO"} -declare_test!{StateTests_RandomTests_st201503130405GO, "StateTests/RandomTests/st201503130405GO"} -declare_test!{StateTests_RandomTests_st201503130408GO, "StateTests/RandomTests/st201503130408GO"} -declare_test!{StateTests_RandomTests_st201503130411GO, "StateTests/RandomTests/st201503130411GO"} -declare_test!{StateTests_RandomTests_st201503130431GO, "StateTests/RandomTests/st201503130431GO"} -declare_test!{StateTests_RandomTests_st201503130437GO, "StateTests/RandomTests/st201503130437GO"} -declare_test!{StateTests_RandomTests_st201503130450GO, "StateTests/RandomTests/st201503130450GO"} -declare_test!{StateTests_RandomTests_st201503130512CPPJIT, "StateTests/RandomTests/st201503130512CPPJIT"} -declare_test!{StateTests_RandomTests_st201503130512GO, "StateTests/RandomTests/st201503130512GO"} -declare_test!{StateTests_RandomTests_st201503130615GO, "StateTests/RandomTests/st201503130615GO"} -declare_test!{StateTests_RandomTests_st201503130705GO, "StateTests/RandomTests/st201503130705GO"} -declare_test!{StateTests_RandomTests_st201503130733CPPJIT, "StateTests/RandomTests/st201503130733CPPJIT"} -declare_test!{StateTests_RandomTests_st201503130733GO, "StateTests/RandomTests/st201503130733GO"} -declare_test!{StateTests_RandomTests_st201503130747GO, "StateTests/RandomTests/st201503130747GO"} -declare_test!{StateTests_RandomTests_st201503130751GO, "StateTests/RandomTests/st201503130751GO"} -declare_test!{StateTests_RandomTests_st201503130752PYTHON, "StateTests/RandomTests/st201503130752PYTHON"} -declare_test!{StateTests_RandomTests_st201503130757PYTHON, "StateTests/RandomTests/st201503130757PYTHON"} -declare_test!{StateTests_RandomTests_st201503131658GO, "StateTests/RandomTests/st201503131658GO"} -declare_test!{StateTests_RandomTests_st201503131739GO, "StateTests/RandomTests/st201503131739GO"} -declare_test!{StateTests_RandomTests_st201503131755CPPJIT, "StateTests/RandomTests/st201503131755CPPJIT"} -declare_test!{StateTests_RandomTests_st201503131755GO, "StateTests/RandomTests/st201503131755GO"} -declare_test!{StateTests_RandomTests_st201503132001CPPJIT, "StateTests/RandomTests/st201503132001CPPJIT"} -declare_test!{StateTests_RandomTests_st201503132127PYTHON, "StateTests/RandomTests/st201503132127PYTHON"} -declare_test!{StateTests_RandomTests_st201503132201CPPJIT, "StateTests/RandomTests/st201503132201CPPJIT"} -declare_test!{StateTests_RandomTests_st201503132201GO, "StateTests/RandomTests/st201503132201GO"} -declare_test!{StateTests_RandomTests_st201503132202PYTHON, "StateTests/RandomTests/st201503132202PYTHON"} -declare_test!{StateTests_RandomTests_st201503140002PYTHON, "StateTests/RandomTests/st201503140002PYTHON"} -declare_test!{StateTests_RandomTests_st201503140240PYTHON, "StateTests/RandomTests/st201503140240PYTHON"} -declare_test!{StateTests_RandomTests_st201503140522PYTHON, "StateTests/RandomTests/st201503140522PYTHON"} -declare_test!{StateTests_RandomTests_st201503140756PYTHON, "StateTests/RandomTests/st201503140756PYTHON"} -declare_test!{StateTests_RandomTests_st201503141144PYTHON, "StateTests/RandomTests/st201503141144PYTHON"} -declare_test!{StateTests_RandomTests_st201503141510PYTHON, "StateTests/RandomTests/st201503141510PYTHON"} -declare_test!{StateTests_RandomTests_st201503150427PYTHON, "StateTests/RandomTests/st201503150427PYTHON"} -declare_test!{StateTests_RandomTests_st201503150716PYTHON, "StateTests/RandomTests/st201503150716PYTHON"} -declare_test!{StateTests_RandomTests_st201503151450PYTHON, "StateTests/RandomTests/st201503151450PYTHON"} -declare_test!{StateTests_RandomTests_st201503151516PYTHON, "StateTests/RandomTests/st201503151516PYTHON"} -declare_test!{StateTests_RandomTests_st201503151753PYTHON, "StateTests/RandomTests/st201503151753PYTHON"} -declare_test!{StateTests_RandomTests_st201503152057PYTHON, "StateTests/RandomTests/st201503152057PYTHON"} -declare_test!{StateTests_RandomTests_st201503152241PYTHON, "StateTests/RandomTests/st201503152241PYTHON"} -declare_test!{StateTests_RandomTests_st201503160014PYTHON, "StateTests/RandomTests/st201503160014PYTHON"} -declare_test!{StateTests_RandomTests_st201503160733PYTHON, "StateTests/RandomTests/st201503160733PYTHON"} -declare_test!{StateTests_RandomTests_st201503170051PYTHON, "StateTests/RandomTests/st201503170051PYTHON"} -declare_test!{StateTests_RandomTests_st201503170433PYTHON, "StateTests/RandomTests/st201503170433PYTHON"} -declare_test!{StateTests_RandomTests_st201503170523PYTHON, "StateTests/RandomTests/st201503170523PYTHON"} -declare_test!{StateTests_RandomTests_st201503171108PYTHON, "StateTests/RandomTests/st201503171108PYTHON"} -declare_test!{StateTests_RandomTests_st201503181223GO, "StateTests/RandomTests/st201503181223GO"} -declare_test!{StateTests_RandomTests_st201503181225GO, "StateTests/RandomTests/st201503181225GO"} -declare_test!{StateTests_RandomTests_st201503181226CPPJIT, "StateTests/RandomTests/st201503181226CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181227CPPJIT, "StateTests/RandomTests/st201503181227CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181227GO, "StateTests/RandomTests/st201503181227GO"} -declare_test!{StateTests_RandomTests_st201503181229GO, "StateTests/RandomTests/st201503181229GO"} -declare_test!{StateTests_RandomTests_st201503181230CPPJIT, "StateTests/RandomTests/st201503181230CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181230GO, "StateTests/RandomTests/st201503181230GO"} -declare_test!{StateTests_RandomTests_st201503181231GO, "StateTests/RandomTests/st201503181231GO"} -declare_test!{StateTests_RandomTests_st201503181232CPPJIT, "StateTests/RandomTests/st201503181232CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181232GO, "StateTests/RandomTests/st201503181232GO"} -declare_test!{StateTests_RandomTests_st201503181233GO, "StateTests/RandomTests/st201503181233GO"} -declare_test!{StateTests_RandomTests_st201503181234CPPJIT, "StateTests/RandomTests/st201503181234CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181234GO, "StateTests/RandomTests/st201503181234GO"} -declare_test!{StateTests_RandomTests_st201503181235CPPJIT, "StateTests/RandomTests/st201503181235CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181235GO, "StateTests/RandomTests/st201503181235GO"} -declare_test!{StateTests_RandomTests_st201503181236GO, "StateTests/RandomTests/st201503181236GO"} -declare_test!{StateTests_RandomTests_st201503181237GO, "StateTests/RandomTests/st201503181237GO"} -declare_test!{StateTests_RandomTests_st201503181239GO, "StateTests/RandomTests/st201503181239GO"} -declare_test!{StateTests_RandomTests_st201503181241CPPJIT, "StateTests/RandomTests/st201503181241CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181241GO, "StateTests/RandomTests/st201503181241GO"} -declare_test!{StateTests_RandomTests_st201503181243GO, "StateTests/RandomTests/st201503181243GO"} -declare_test!{StateTests_RandomTests_st201503181244GO, "StateTests/RandomTests/st201503181244GO"} -declare_test!{StateTests_RandomTests_st201503181245CPPJIT, "StateTests/RandomTests/st201503181245CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181245GO, "StateTests/RandomTests/st201503181245GO"} -declare_test!{StateTests_RandomTests_st201503181246CPPJIT, "StateTests/RandomTests/st201503181246CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181246GO, "StateTests/RandomTests/st201503181246GO"} -declare_test!{StateTests_RandomTests_st201503181247GO, "StateTests/RandomTests/st201503181247GO"} -declare_test!{StateTests_RandomTests_st201503181248GO, "StateTests/RandomTests/st201503181248GO"} -declare_test!{StateTests_RandomTests_st201503181249GO, "StateTests/RandomTests/st201503181249GO"} -declare_test!{StateTests_RandomTests_st201503181250CPPJIT, "StateTests/RandomTests/st201503181250CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181250GO, "StateTests/RandomTests/st201503181250GO"} -declare_test!{StateTests_RandomTests_st201503181251GO, "StateTests/RandomTests/st201503181251GO"} -declare_test!{StateTests_RandomTests_st201503181252CPPJIT, "StateTests/RandomTests/st201503181252CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181253GO, "StateTests/RandomTests/st201503181253GO"} -declare_test!{StateTests_RandomTests_st201503181255CPPJIT, "StateTests/RandomTests/st201503181255CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181255GO, "StateTests/RandomTests/st201503181255GO"} -declare_test!{StateTests_RandomTests_st201503181257GO, "StateTests/RandomTests/st201503181257GO"} -declare_test!{StateTests_RandomTests_st201503181258CPPJIT, "StateTests/RandomTests/st201503181258CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181258GO, "StateTests/RandomTests/st201503181258GO"} -declare_test!{StateTests_RandomTests_st201503181301CPPJIT, "StateTests/RandomTests/st201503181301CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181301GO, "StateTests/RandomTests/st201503181301GO"} -declare_test!{StateTests_RandomTests_st201503181303GO, "StateTests/RandomTests/st201503181303GO"} -declare_test!{StateTests_RandomTests_st201503181304GO, "StateTests/RandomTests/st201503181304GO"} -declare_test!{StateTests_RandomTests_st201503181305GO, "StateTests/RandomTests/st201503181305GO"} -declare_test!{StateTests_RandomTests_st201503181306GO, "StateTests/RandomTests/st201503181306GO"} -declare_test!{StateTests_RandomTests_st201503181307CPPJIT, "StateTests/RandomTests/st201503181307CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181307GO, "StateTests/RandomTests/st201503181307GO"} -declare_test!{StateTests_RandomTests_st201503181308GO, "StateTests/RandomTests/st201503181308GO"} -declare_test!{StateTests_RandomTests_st201503181309GO, "StateTests/RandomTests/st201503181309GO"} -declare_test!{StateTests_RandomTests_st201503181310GO, "StateTests/RandomTests/st201503181310GO"} -declare_test!{StateTests_RandomTests_st201503181311GO, "StateTests/RandomTests/st201503181311GO"} -declare_test!{StateTests_RandomTests_st201503181313GO, "StateTests/RandomTests/st201503181313GO"} -declare_test!{StateTests_RandomTests_st201503181314GO, "StateTests/RandomTests/st201503181314GO"} -declare_test!{StateTests_RandomTests_st201503181315CPPJIT, "StateTests/RandomTests/st201503181315CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181315GO, "StateTests/RandomTests/st201503181315GO"} -declare_test!{StateTests_RandomTests_st201503181316CPPJIT, "StateTests/RandomTests/st201503181316CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181316PYTHON, "StateTests/RandomTests/st201503181316PYTHON"} -declare_test!{StateTests_RandomTests_st201503181317GO, "StateTests/RandomTests/st201503181317GO"} -declare_test!{StateTests_RandomTests_st201503181318CPPJIT, "StateTests/RandomTests/st201503181318CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181318GO, "StateTests/RandomTests/st201503181318GO"} -declare_test!{StateTests_RandomTests_st201503181319GO, "StateTests/RandomTests/st201503181319GO"} -declare_test!{StateTests_RandomTests_st201503181319PYTHON, "StateTests/RandomTests/st201503181319PYTHON"} -declare_test!{StateTests_RandomTests_st201503181322GO, "StateTests/RandomTests/st201503181322GO"} -declare_test!{StateTests_RandomTests_st201503181323CPPJIT, "StateTests/RandomTests/st201503181323CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181323GO, "StateTests/RandomTests/st201503181323GO"} -declare_test!{StateTests_RandomTests_st201503181324GO, "StateTests/RandomTests/st201503181324GO"} -declare_test!{StateTests_RandomTests_st201503181325GO, "StateTests/RandomTests/st201503181325GO"} -declare_test!{StateTests_RandomTests_st201503181326CPPJIT, "StateTests/RandomTests/st201503181326CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181326GO, "StateTests/RandomTests/st201503181326GO"} -declare_test!{StateTests_RandomTests_st201503181327GO, "StateTests/RandomTests/st201503181327GO"} -declare_test!{StateTests_RandomTests_st201503181329CPPJIT, "StateTests/RandomTests/st201503181329CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181329GO, "StateTests/RandomTests/st201503181329GO"} -declare_test!{StateTests_RandomTests_st201503181330GO, "StateTests/RandomTests/st201503181330GO"} -declare_test!{StateTests_RandomTests_st201503181332GO, "StateTests/RandomTests/st201503181332GO"} -declare_test!{StateTests_RandomTests_st201503181333GO, "StateTests/RandomTests/st201503181333GO"} -declare_test!{StateTests_RandomTests_st201503181334GO, "StateTests/RandomTests/st201503181334GO"} -declare_test!{StateTests_RandomTests_st201503181336CPPJIT, "StateTests/RandomTests/st201503181336CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181337GO, "StateTests/RandomTests/st201503181337GO"} -declare_test!{StateTests_RandomTests_st201503181338GO, "StateTests/RandomTests/st201503181338GO"} -declare_test!{StateTests_RandomTests_st201503181339CPPJIT, "StateTests/RandomTests/st201503181339CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181339GO, "StateTests/RandomTests/st201503181339GO"} -declare_test!{StateTests_RandomTests_st201503181340GO, "StateTests/RandomTests/st201503181340GO"} -declare_test!{StateTests_RandomTests_st201503181341CPPJIT, "StateTests/RandomTests/st201503181341CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181342CPPJIT, "StateTests/RandomTests/st201503181342CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181342GO, "StateTests/RandomTests/st201503181342GO"} -declare_test!{StateTests_RandomTests_st201503181345GO, "StateTests/RandomTests/st201503181345GO"} -declare_test!{StateTests_RandomTests_st201503181346GO, "StateTests/RandomTests/st201503181346GO"} -declare_test!{StateTests_RandomTests_st201503181347CPPJIT, "StateTests/RandomTests/st201503181347CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181347GO, "StateTests/RandomTests/st201503181347GO"} -declare_test!{StateTests_RandomTests_st201503181347PYTHON, "StateTests/RandomTests/st201503181347PYTHON"} -declare_test!{StateTests_RandomTests_st201503181350CPPJIT, "StateTests/RandomTests/st201503181350CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181352GO, "StateTests/RandomTests/st201503181352GO"} -declare_test!{StateTests_RandomTests_st201503181353GO, "StateTests/RandomTests/st201503181353GO"} -declare_test!{StateTests_RandomTests_st201503181354CPPJIT, "StateTests/RandomTests/st201503181354CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181354GO, "StateTests/RandomTests/st201503181354GO"} -declare_test!{StateTests_RandomTests_st201503181355GO, "StateTests/RandomTests/st201503181355GO"} -declare_test!{StateTests_RandomTests_st201503181356CPPJIT, "StateTests/RandomTests/st201503181356CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181357CPPJIT, "StateTests/RandomTests/st201503181357CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181358CPPJIT, "StateTests/RandomTests/st201503181358CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181358GO, "StateTests/RandomTests/st201503181358GO"} -declare_test!{StateTests_RandomTests_st201503181359GO, "StateTests/RandomTests/st201503181359GO"} -declare_test!{StateTests_RandomTests_st201503181402CPPJIT, "StateTests/RandomTests/st201503181402CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181403GO, "StateTests/RandomTests/st201503181403GO"} -declare_test!{StateTests_RandomTests_st201503181406CPPJIT, "StateTests/RandomTests/st201503181406CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181406GO, "StateTests/RandomTests/st201503181406GO"} -declare_test!{StateTests_RandomTests_st201503181410GO, "StateTests/RandomTests/st201503181410GO"} -declare_test!{StateTests_RandomTests_st201503181412CPPJIT, "StateTests/RandomTests/st201503181412CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181413GO, "StateTests/RandomTests/st201503181413GO"} -declare_test!{StateTests_RandomTests_st201503181415GO, "StateTests/RandomTests/st201503181415GO"} -declare_test!{StateTests_RandomTests_st201503181416GO, "StateTests/RandomTests/st201503181416GO"} -declare_test!{StateTests_RandomTests_st201503181417CPPJIT, "StateTests/RandomTests/st201503181417CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181417GO, "StateTests/RandomTests/st201503181417GO"} -declare_test!{StateTests_RandomTests_st201503181418CPPJIT, "StateTests/RandomTests/st201503181418CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181422GO, "StateTests/RandomTests/st201503181422GO"} -declare_test!{StateTests_RandomTests_st201503181423CPPJIT, "StateTests/RandomTests/st201503181423CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181424GO, "StateTests/RandomTests/st201503181424GO"} -declare_test!{StateTests_RandomTests_st201503181426CPPJIT, "StateTests/RandomTests/st201503181426CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181426GO, "StateTests/RandomTests/st201503181426GO"} -declare_test!{StateTests_RandomTests_st201503181428GO, "StateTests/RandomTests/st201503181428GO"} -declare_test!{StateTests_RandomTests_st201503181430CPPJIT, "StateTests/RandomTests/st201503181430CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181435GO, "StateTests/RandomTests/st201503181435GO"} -declare_test!{StateTests_RandomTests_st201503181436GO, "StateTests/RandomTests/st201503181436GO"} -declare_test!{StateTests_RandomTests_st201503181437CPPJIT, "StateTests/RandomTests/st201503181437CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181437GO, "StateTests/RandomTests/st201503181437GO"} -declare_test!{StateTests_RandomTests_st201503181438CPPJIT, "StateTests/RandomTests/st201503181438CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181438GO, "StateTests/RandomTests/st201503181438GO"} -declare_test!{StateTests_RandomTests_st201503181439CPPJIT, "StateTests/RandomTests/st201503181439CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181439GO, "StateTests/RandomTests/st201503181439GO"} -declare_test!{StateTests_RandomTests_st201503181439PYTHON, "StateTests/RandomTests/st201503181439PYTHON"} -declare_test!{StateTests_RandomTests_st201503181440GO, "StateTests/RandomTests/st201503181440GO"} -declare_test!{StateTests_RandomTests_st201503181441GO, "StateTests/RandomTests/st201503181441GO"} -declare_test!{StateTests_RandomTests_st201503181442GO, "StateTests/RandomTests/st201503181442GO"} -declare_test!{StateTests_RandomTests_st201503181445CPPJIT, "StateTests/RandomTests/st201503181445CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181446GO, "StateTests/RandomTests/st201503181446GO"} -declare_test!{StateTests_RandomTests_st201503181447GO, "StateTests/RandomTests/st201503181447GO"} -declare_test!{StateTests_RandomTests_st201503181450GO, "StateTests/RandomTests/st201503181450GO"} -declare_test!{StateTests_RandomTests_st201503181451CPPJIT, "StateTests/RandomTests/st201503181451CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181453GO, "StateTests/RandomTests/st201503181453GO"} -declare_test!{StateTests_RandomTests_st201503181455GO, "StateTests/RandomTests/st201503181455GO"} -declare_test!{StateTests_RandomTests_st201503181456CPPJIT, "StateTests/RandomTests/st201503181456CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181457GO, "StateTests/RandomTests/st201503181457GO"} -declare_test!{StateTests_RandomTests_st201503181458GO, "StateTests/RandomTests/st201503181458GO"} -declare_test!{StateTests_RandomTests_st201503181459GO, "StateTests/RandomTests/st201503181459GO"} -declare_test!{StateTests_RandomTests_st201503181500GO, "StateTests/RandomTests/st201503181500GO"} -declare_test!{StateTests_RandomTests_st201503181501GO, "StateTests/RandomTests/st201503181501GO"} -declare_test!{StateTests_RandomTests_st201503181503GO, "StateTests/RandomTests/st201503181503GO"} -declare_test!{StateTests_RandomTests_st201503181504GO, "StateTests/RandomTests/st201503181504GO"} -declare_test!{StateTests_RandomTests_st201503181505GO, "StateTests/RandomTests/st201503181505GO"} -declare_test!{StateTests_RandomTests_st201503181506CPPJIT, "StateTests/RandomTests/st201503181506CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181507GO, "StateTests/RandomTests/st201503181507GO"} -declare_test!{StateTests_RandomTests_st201503181509CPPJIT, "StateTests/RandomTests/st201503181509CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181509GO, "StateTests/RandomTests/st201503181509GO"} -declare_test!{StateTests_RandomTests_st201503181510GO, "StateTests/RandomTests/st201503181510GO"} -declare_test!{StateTests_RandomTests_st201503181511GO, "StateTests/RandomTests/st201503181511GO"} -declare_test!{StateTests_RandomTests_st201503181512GO, "StateTests/RandomTests/st201503181512GO"} -declare_test!{StateTests_RandomTests_st201503181513CPPJIT, "StateTests/RandomTests/st201503181513CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181513GO, "StateTests/RandomTests/st201503181513GO"} -declare_test!{StateTests_RandomTests_st201503181514CPPJIT, "StateTests/RandomTests/st201503181514CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181514GO, "StateTests/RandomTests/st201503181514GO"} -declare_test!{StateTests_RandomTests_st201503181517CPPJIT, "StateTests/RandomTests/st201503181517CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181517GO, "StateTests/RandomTests/st201503181517GO"} -declare_test!{StateTests_RandomTests_st201503181519CPPJIT, "StateTests/RandomTests/st201503181519CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181519GO, "StateTests/RandomTests/st201503181519GO"} -declare_test!{StateTests_RandomTests_st201503181520CPPJIT, "StateTests/RandomTests/st201503181520CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181520GO, "StateTests/RandomTests/st201503181520GO"} -declare_test!{StateTests_RandomTests_st201503181521GO, "StateTests/RandomTests/st201503181521GO"} -declare_test!{StateTests_RandomTests_st201503181522GO, "StateTests/RandomTests/st201503181522GO"} -declare_test!{StateTests_RandomTests_st201503181524CPPJIT, "StateTests/RandomTests/st201503181524CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181524GO, "StateTests/RandomTests/st201503181524GO"} -declare_test!{StateTests_RandomTests_st201503181526GO, "StateTests/RandomTests/st201503181526GO"} -declare_test!{StateTests_RandomTests_st201503181527GO, "StateTests/RandomTests/st201503181527GO"} -declare_test!{StateTests_RandomTests_st201503181528CPPJIT, "StateTests/RandomTests/st201503181528CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181528GO, "StateTests/RandomTests/st201503181528GO"} -declare_test!{StateTests_RandomTests_st201503181528PYTHON, "StateTests/RandomTests/st201503181528PYTHON"} -declare_test!{StateTests_RandomTests_st201503181529GO, "StateTests/RandomTests/st201503181529GO"} -declare_test!{StateTests_RandomTests_st201503181531CPPJIT, "StateTests/RandomTests/st201503181531CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181533GO, "StateTests/RandomTests/st201503181533GO"} -declare_test!{StateTests_RandomTests_st201503181534CPPJIT, "StateTests/RandomTests/st201503181534CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181534GO, "StateTests/RandomTests/st201503181534GO"} -declare_test!{StateTests_RandomTests_st201503181536CPPJIT, "StateTests/RandomTests/st201503181536CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181536GO, "StateTests/RandomTests/st201503181536GO"} -declare_test!{StateTests_RandomTests_st201503181537GO, "StateTests/RandomTests/st201503181537GO"} -declare_test!{StateTests_RandomTests_st201503181538GO, "StateTests/RandomTests/st201503181538GO"} -declare_test!{StateTests_RandomTests_st201503181539GO, "StateTests/RandomTests/st201503181539GO"} -declare_test!{StateTests_RandomTests_st201503181540CPPJIT, "StateTests/RandomTests/st201503181540CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181540PYTHON, "StateTests/RandomTests/st201503181540PYTHON"} -declare_test!{StateTests_RandomTests_st201503181543GO, "StateTests/RandomTests/st201503181543GO"} -declare_test!{StateTests_RandomTests_st201503181544CPPJIT, "StateTests/RandomTests/st201503181544CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181544GO, "StateTests/RandomTests/st201503181544GO"} -declare_test!{StateTests_RandomTests_st201503181547GO, "StateTests/RandomTests/st201503181547GO"} -declare_test!{StateTests_RandomTests_st201503181548CPPJIT, "StateTests/RandomTests/st201503181548CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181548GO, "StateTests/RandomTests/st201503181548GO"} -declare_test!{StateTests_RandomTests_st201503181551GO, "StateTests/RandomTests/st201503181551GO"} -declare_test!{StateTests_RandomTests_st201503181552CPPJIT, "StateTests/RandomTests/st201503181552CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181553GO, "StateTests/RandomTests/st201503181553GO"} -declare_test!{StateTests_RandomTests_st201503181555CPPJIT, "StateTests/RandomTests/st201503181555CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181555GO, "StateTests/RandomTests/st201503181555GO"} -declare_test!{StateTests_RandomTests_st201503181557GO, "StateTests/RandomTests/st201503181557GO"} -declare_test!{StateTests_RandomTests_st201503181559GO, "StateTests/RandomTests/st201503181559GO"} -declare_test!{StateTests_RandomTests_st201503181601CPPJIT, "StateTests/RandomTests/st201503181601CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181601GO, "StateTests/RandomTests/st201503181601GO"} -declare_test!{StateTests_RandomTests_st201503181602GO, "StateTests/RandomTests/st201503181602GO"} -declare_test!{StateTests_RandomTests_st201503181603GO, "StateTests/RandomTests/st201503181603GO"} -declare_test!{StateTests_RandomTests_st201503181604GO, "StateTests/RandomTests/st201503181604GO"} -declare_test!{StateTests_RandomTests_st201503181605GO, "StateTests/RandomTests/st201503181605GO"} -declare_test!{StateTests_RandomTests_st201503181606GO, "StateTests/RandomTests/st201503181606GO"} -declare_test!{StateTests_RandomTests_st201503181607GO, "StateTests/RandomTests/st201503181607GO"} -declare_test!{StateTests_RandomTests_st201503181608CPPJIT, "StateTests/RandomTests/st201503181608CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181608GO, "StateTests/RandomTests/st201503181608GO"} -declare_test!{StateTests_RandomTests_st201503181609GO, "StateTests/RandomTests/st201503181609GO"} -declare_test!{StateTests_RandomTests_st201503181610CPPJIT, "StateTests/RandomTests/st201503181610CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181610GO, "StateTests/RandomTests/st201503181610GO"} -declare_test!{StateTests_RandomTests_st201503181611CPPJIT, "StateTests/RandomTests/st201503181611CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181611GO, "StateTests/RandomTests/st201503181611GO"} -declare_test!{StateTests_RandomTests_st201503181612GO, "StateTests/RandomTests/st201503181612GO"} -declare_test!{StateTests_RandomTests_st201503181614CPPJIT, "StateTests/RandomTests/st201503181614CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181614GO, "StateTests/RandomTests/st201503181614GO"} -declare_test!{StateTests_RandomTests_st201503181616CPPJIT, "StateTests/RandomTests/st201503181616CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181616GO, "StateTests/RandomTests/st201503181616GO"} -declare_test!{StateTests_RandomTests_st201503181617GO, "StateTests/RandomTests/st201503181617GO"} -declare_test!{StateTests_RandomTests_st201503181618GO, "StateTests/RandomTests/st201503181618GO"} -declare_test!{StateTests_RandomTests_st201503181619GO, "StateTests/RandomTests/st201503181619GO"} -declare_test!{StateTests_RandomTests_st201503181620CPPJIT, "StateTests/RandomTests/st201503181620CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181620GO, "StateTests/RandomTests/st201503181620GO"} -declare_test!{StateTests_RandomTests_st201503181621GO, "StateTests/RandomTests/st201503181621GO"} -declare_test!{StateTests_RandomTests_st201503181625GO, "StateTests/RandomTests/st201503181625GO"} -declare_test!{StateTests_RandomTests_st201503181626CPPJIT, "StateTests/RandomTests/st201503181626CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181626GO, "StateTests/RandomTests/st201503181626GO"} -declare_test!{StateTests_RandomTests_st201503181627GO, "StateTests/RandomTests/st201503181627GO"} -declare_test!{StateTests_RandomTests_st201503181628GO, "StateTests/RandomTests/st201503181628GO"} -declare_test!{StateTests_RandomTests_st201503181629GO, "StateTests/RandomTests/st201503181629GO"} -declare_test!{StateTests_RandomTests_st201503181630CPPJIT, "StateTests/RandomTests/st201503181630CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181630GO, "StateTests/RandomTests/st201503181630GO"} -declare_test!{StateTests_RandomTests_st201503181630PYTHON, "StateTests/RandomTests/st201503181630PYTHON"} -declare_test!{StateTests_RandomTests_st201503181632GO, "StateTests/RandomTests/st201503181632GO"} -declare_test!{StateTests_RandomTests_st201503181634CPPJIT, "StateTests/RandomTests/st201503181634CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181635GO, "StateTests/RandomTests/st201503181635GO"} -declare_test!{StateTests_RandomTests_st201503181636GO, "StateTests/RandomTests/st201503181636GO"} -declare_test!{StateTests_RandomTests_st201503181638GO, "StateTests/RandomTests/st201503181638GO"} -declare_test!{StateTests_RandomTests_st201503181639CPPJIT, "StateTests/RandomTests/st201503181639CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181641GO, "StateTests/RandomTests/st201503181641GO"} -declare_test!{StateTests_RandomTests_st201503181645GO, "StateTests/RandomTests/st201503181645GO"} -declare_test!{StateTests_RandomTests_st201503181646GO, "StateTests/RandomTests/st201503181646GO"} -declare_test!{StateTests_RandomTests_st201503181647CPPJIT, "StateTests/RandomTests/st201503181647CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181649CPPJIT, "StateTests/RandomTests/st201503181649CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181650GO, "StateTests/RandomTests/st201503181650GO"} -declare_test!{StateTests_RandomTests_st201503181652CPPJIT, "StateTests/RandomTests/st201503181652CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181653GO, "StateTests/RandomTests/st201503181653GO"} -declare_test!{StateTests_RandomTests_st201503181654GO, "StateTests/RandomTests/st201503181654GO"} -declare_test!{StateTests_RandomTests_st201503181655CPPJIT, "StateTests/RandomTests/st201503181655CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181655GO, "StateTests/RandomTests/st201503181655GO"} -declare_test!{StateTests_RandomTests_st201503181656CPPJIT, "StateTests/RandomTests/st201503181656CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181656GO, "StateTests/RandomTests/st201503181656GO"} -declare_test!{StateTests_RandomTests_st201503181657GO, "StateTests/RandomTests/st201503181657GO"} -declare_test!{StateTests_RandomTests_st201503181658GO, "StateTests/RandomTests/st201503181658GO"} -declare_test!{StateTests_RandomTests_st201503181700GO, "StateTests/RandomTests/st201503181700GO"} -declare_test!{StateTests_RandomTests_st201503181702GO, "StateTests/RandomTests/st201503181702GO"} -declare_test!{StateTests_RandomTests_st201503181703CPPJIT, "StateTests/RandomTests/st201503181703CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181703GO, "StateTests/RandomTests/st201503181703GO"} -declare_test!{StateTests_RandomTests_st201503181704GO, "StateTests/RandomTests/st201503181704GO"} -declare_test!{StateTests_RandomTests_st201503181706GO, "StateTests/RandomTests/st201503181706GO"} -declare_test!{StateTests_RandomTests_st201503181709GO, "StateTests/RandomTests/st201503181709GO"} -declare_test!{StateTests_RandomTests_st201503181711CPPJIT, "StateTests/RandomTests/st201503181711CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181711GO, "StateTests/RandomTests/st201503181711GO"} -declare_test!{StateTests_RandomTests_st201503181713CPPJIT, "StateTests/RandomTests/st201503181713CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181713GO, "StateTests/RandomTests/st201503181713GO"} -declare_test!{StateTests_RandomTests_st201503181714GO, "StateTests/RandomTests/st201503181714GO"} -declare_test!{StateTests_RandomTests_st201503181715CPPJIT, "StateTests/RandomTests/st201503181715CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181715GO, "StateTests/RandomTests/st201503181715GO"} -declare_test!{StateTests_RandomTests_st201503181716GO, "StateTests/RandomTests/st201503181716GO"} -declare_test!{StateTests_RandomTests_st201503181717GO, "StateTests/RandomTests/st201503181717GO"} -declare_test!{StateTests_RandomTests_st201503181720CPPJIT, "StateTests/RandomTests/st201503181720CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181722GO, "StateTests/RandomTests/st201503181722GO"} -declare_test!{StateTests_RandomTests_st201503181723CPPJIT, "StateTests/RandomTests/st201503181723CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181723GO, "StateTests/RandomTests/st201503181723GO"} -declare_test!{StateTests_RandomTests_st201503181724CPPJIT, "StateTests/RandomTests/st201503181724CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181724GO, "StateTests/RandomTests/st201503181724GO"} -declare_test!{StateTests_RandomTests_st201503181725GO, "StateTests/RandomTests/st201503181725GO"} -declare_test!{StateTests_RandomTests_st201503181728GO, "StateTests/RandomTests/st201503181728GO"} -declare_test!{StateTests_RandomTests_st201503181729GO, "StateTests/RandomTests/st201503181729GO"} -declare_test!{StateTests_RandomTests_st201503181730GO, "StateTests/RandomTests/st201503181730GO"} -declare_test!{StateTests_RandomTests_st201503181731CPPJIT, "StateTests/RandomTests/st201503181731CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181732GO, "StateTests/RandomTests/st201503181732GO"} -declare_test!{StateTests_RandomTests_st201503181734CPPJIT, "StateTests/RandomTests/st201503181734CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181734GO, "StateTests/RandomTests/st201503181734GO"} -declare_test!{StateTests_RandomTests_st201503181735GO, "StateTests/RandomTests/st201503181735GO"} -declare_test!{StateTests_RandomTests_st201503181737CPPJIT, "StateTests/RandomTests/st201503181737CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181737GO, "StateTests/RandomTests/st201503181737GO"} -declare_test!{StateTests_RandomTests_st201503181738CPPJIT, "StateTests/RandomTests/st201503181738CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181738GO, "StateTests/RandomTests/st201503181738GO"} -declare_test!{StateTests_RandomTests_st201503181739GO, "StateTests/RandomTests/st201503181739GO"} -declare_test!{StateTests_RandomTests_st201503181740CPPJIT, "StateTests/RandomTests/st201503181740CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181740GO, "StateTests/RandomTests/st201503181740GO"} -declare_test!{StateTests_RandomTests_st201503181742CPPJIT, "StateTests/RandomTests/st201503181742CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181743GO, "StateTests/RandomTests/st201503181743GO"} -declare_test!{StateTests_RandomTests_st201503181744GO, "StateTests/RandomTests/st201503181744GO"} -declare_test!{StateTests_RandomTests_st201503181745CPPJIT, "StateTests/RandomTests/st201503181745CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181746GO, "StateTests/RandomTests/st201503181746GO"} -declare_test!{StateTests_RandomTests_st201503181747GO, "StateTests/RandomTests/st201503181747GO"} -declare_test!{StateTests_RandomTests_st201503181748GO, "StateTests/RandomTests/st201503181748GO"} -declare_test!{StateTests_RandomTests_st201503181749GO, "StateTests/RandomTests/st201503181749GO"} -declare_test!{StateTests_RandomTests_st201503181750CPPJIT, "StateTests/RandomTests/st201503181750CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181750GO, "StateTests/RandomTests/st201503181750GO"} -declare_test!{StateTests_RandomTests_st201503181752GO, "StateTests/RandomTests/st201503181752GO"} -declare_test!{StateTests_RandomTests_st201503181753CPPJIT, "StateTests/RandomTests/st201503181753CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181754CPPJIT, "StateTests/RandomTests/st201503181754CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181754GO, "StateTests/RandomTests/st201503181754GO"} -declare_test!{StateTests_RandomTests_st201503181755CPPJIT, "StateTests/RandomTests/st201503181755CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181755GO, "StateTests/RandomTests/st201503181755GO"} -declare_test!{StateTests_RandomTests_st201503181756GO, "StateTests/RandomTests/st201503181756GO"} -declare_test!{StateTests_RandomTests_st201503181757CPPJIT, "StateTests/RandomTests/st201503181757CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181757GO, "StateTests/RandomTests/st201503181757GO"} -declare_test!{StateTests_RandomTests_st201503181759GO, "StateTests/RandomTests/st201503181759GO"} -declare_test!{StateTests_RandomTests_st201503181800GO, "StateTests/RandomTests/st201503181800GO"} -declare_test!{StateTests_RandomTests_st201503181801GO, "StateTests/RandomTests/st201503181801GO"} -declare_test!{StateTests_RandomTests_st201503181802GO, "StateTests/RandomTests/st201503181802GO"} -declare_test!{StateTests_RandomTests_st201503181803CPPJIT, "StateTests/RandomTests/st201503181803CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181803GO, "StateTests/RandomTests/st201503181803GO"} -declare_test!{StateTests_RandomTests_st201503181804GO, "StateTests/RandomTests/st201503181804GO"} -declare_test!{StateTests_RandomTests_st201503181806GO, "StateTests/RandomTests/st201503181806GO"} -declare_test!{StateTests_RandomTests_st201503181808GO, "StateTests/RandomTests/st201503181808GO"} -declare_test!{StateTests_RandomTests_st201503181809CPPJIT, "StateTests/RandomTests/st201503181809CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181812CPPJIT, "StateTests/RandomTests/st201503181812CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181812GO, "StateTests/RandomTests/st201503181812GO"} -declare_test!{StateTests_RandomTests_st201503181814CPPJIT, "StateTests/RandomTests/st201503181814CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181815GO, "StateTests/RandomTests/st201503181815GO"} -declare_test!{StateTests_RandomTests_st201503181816CPPJIT, "StateTests/RandomTests/st201503181816CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181817CPPJIT, "StateTests/RandomTests/st201503181817CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181819GO, "StateTests/RandomTests/st201503181819GO"} -declare_test!{StateTests_RandomTests_st201503181821GO, "StateTests/RandomTests/st201503181821GO"} -declare_test!{StateTests_RandomTests_st201503181822GO, "StateTests/RandomTests/st201503181822GO"} -declare_test!{StateTests_RandomTests_st201503181823GO, "StateTests/RandomTests/st201503181823GO"} -declare_test!{StateTests_RandomTests_st201503181824GO, "StateTests/RandomTests/st201503181824GO"} -declare_test!{StateTests_RandomTests_st201503181825GO, "StateTests/RandomTests/st201503181825GO"} -declare_test!{StateTests_RandomTests_st201503181829GO, "StateTests/RandomTests/st201503181829GO"} -declare_test!{StateTests_RandomTests_st201503181830CPPJIT, "StateTests/RandomTests/st201503181830CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181833GO, "StateTests/RandomTests/st201503181833GO"} -declare_test!{StateTests_RandomTests_st201503181834CPPJIT, "StateTests/RandomTests/st201503181834CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181834GO, "StateTests/RandomTests/st201503181834GO"} -declare_test!{StateTests_RandomTests_st201503181837GO, "StateTests/RandomTests/st201503181837GO"} -declare_test!{StateTests_RandomTests_st201503181840GO, "StateTests/RandomTests/st201503181840GO"} -declare_test!{StateTests_RandomTests_st201503181842GO, "StateTests/RandomTests/st201503181842GO"} -declare_test!{StateTests_RandomTests_st201503181843GO, "StateTests/RandomTests/st201503181843GO"} -declare_test!{StateTests_RandomTests_st201503181844GO, "StateTests/RandomTests/st201503181844GO"} -declare_test!{StateTests_RandomTests_st201503181845GO, "StateTests/RandomTests/st201503181845GO"} -declare_test!{StateTests_RandomTests_st201503181846GO, "StateTests/RandomTests/st201503181846GO"} -declare_test!{StateTests_RandomTests_st201503181847GO, "StateTests/RandomTests/st201503181847GO"} -declare_test!{StateTests_RandomTests_st201503181848GO, "StateTests/RandomTests/st201503181848GO"} -declare_test!{StateTests_RandomTests_st201503181849GO, "StateTests/RandomTests/st201503181849GO"} -declare_test!{StateTests_RandomTests_st201503181850GO, "StateTests/RandomTests/st201503181850GO"} -declare_test!{StateTests_RandomTests_st201503181851CPPJIT, "StateTests/RandomTests/st201503181851CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181851GO, "StateTests/RandomTests/st201503181851GO"} -declare_test!{StateTests_RandomTests_st201503181852CPPJIT, "StateTests/RandomTests/st201503181852CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181854GO, "StateTests/RandomTests/st201503181854GO"} -declare_test!{StateTests_RandomTests_st201503181855CPPJIT, "StateTests/RandomTests/st201503181855CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181857PYTHON, "StateTests/RandomTests/st201503181857PYTHON"} -declare_test!{StateTests_RandomTests_st201503181859GO, "StateTests/RandomTests/st201503181859GO"} -declare_test!{StateTests_RandomTests_st201503181900GO, "StateTests/RandomTests/st201503181900GO"} -declare_test!{StateTests_RandomTests_st201503181903GO, "StateTests/RandomTests/st201503181903GO"} -declare_test!{StateTests_RandomTests_st201503181904GO, "StateTests/RandomTests/st201503181904GO"} -declare_test!{StateTests_RandomTests_st201503181906GO, "StateTests/RandomTests/st201503181906GO"} -declare_test!{StateTests_RandomTests_st201503181907GO, "StateTests/RandomTests/st201503181907GO"} -declare_test!{StateTests_RandomTests_st201503181910GO, "StateTests/RandomTests/st201503181910GO"} -declare_test!{StateTests_RandomTests_st201503181915GO, "StateTests/RandomTests/st201503181915GO"} -declare_test!{StateTests_RandomTests_st201503181919CPPJIT, "StateTests/RandomTests/st201503181919CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181919PYTHON, "StateTests/RandomTests/st201503181919PYTHON"} -declare_test!{StateTests_RandomTests_st201503181920GO, "StateTests/RandomTests/st201503181920GO"} -declare_test!{StateTests_RandomTests_st201503181922GO, "StateTests/RandomTests/st201503181922GO"} -declare_test!{StateTests_RandomTests_st201503181926GO, "StateTests/RandomTests/st201503181926GO"} -declare_test!{StateTests_RandomTests_st201503181929GO, "StateTests/RandomTests/st201503181929GO"} -declare_test!{StateTests_RandomTests_st201503181931CPPJIT, "StateTests/RandomTests/st201503181931CPPJIT"} -declare_test!{StateTests_RandomTests_st201503181931GO, "StateTests/RandomTests/st201503181931GO"} -declare_test!{StateTests_RandomTests_st201503181931PYTHON, "StateTests/RandomTests/st201503181931PYTHON"} -declare_test!{StateTests_RandomTests_st201503191646GO, "StateTests/RandomTests/st201503191646GO"} -declare_test!{StateTests_RandomTests_st201503200837JS, "StateTests/RandomTests/st201503200837JS"} -declare_test!{StateTests_RandomTests_st201503200838JS, "StateTests/RandomTests/st201503200838JS"} -declare_test!{StateTests_RandomTests_st201503200841JS, "StateTests/RandomTests/st201503200841JS"} -declare_test!{StateTests_RandomTests_st201503200848JS, "StateTests/RandomTests/st201503200848JS"} -declare_test!{StateTests_RandomTests_st201503240609JS, "StateTests/RandomTests/st201503240609JS"} -declare_test!{StateTests_RandomTests_st201503302200JS, "StateTests/RandomTests/st201503302200JS"} -declare_test!{StateTests_RandomTests_st201503302202JS, "StateTests/RandomTests/st201503302202JS"} -declare_test!{StateTests_RandomTests_st201503302206JS, "StateTests/RandomTests/st201503302206JS"} -declare_test!{StateTests_RandomTests_st201503302208JS, "StateTests/RandomTests/st201503302208JS"} -declare_test!{StateTests_RandomTests_st201503302210JS, "StateTests/RandomTests/st201503302210JS"} -declare_test!{StateTests_RandomTests_st201503302211JS, "StateTests/RandomTests/st201503302211JS"} -declare_test!{StateTests_RandomTests_st201504011535GO, "StateTests/RandomTests/st201504011535GO"} -declare_test!{StateTests_RandomTests_st201504011536GO, "StateTests/RandomTests/st201504011536GO"} -declare_test!{StateTests_RandomTests_st201504011547GO, "StateTests/RandomTests/st201504011547GO"} -declare_test!{StateTests_RandomTests_st201504011916JS, "StateTests/RandomTests/st201504011916JS"} -declare_test!{StateTests_RandomTests_st201504012130JS, "StateTests/RandomTests/st201504012130JS"} -declare_test!{StateTests_RandomTests_st201504012259JS, "StateTests/RandomTests/st201504012259JS"} -declare_test!{StateTests_RandomTests_st201504012359JS, "StateTests/RandomTests/st201504012359JS"} -declare_test!{StateTests_RandomTests_st201504020305JS, "StateTests/RandomTests/st201504020305JS"} -declare_test!{StateTests_RandomTests_st201504020400JS, "StateTests/RandomTests/st201504020400JS"} -declare_test!{StateTests_RandomTests_st201504020428JS, "StateTests/RandomTests/st201504020428JS"} -declare_test!{StateTests_RandomTests_st201504020431JS, "StateTests/RandomTests/st201504020431JS"} -declare_test!{StateTests_RandomTests_st201504020444JS, "StateTests/RandomTests/st201504020444JS"} -declare_test!{StateTests_RandomTests_st201504020538JS, "StateTests/RandomTests/st201504020538JS"} -declare_test!{StateTests_RandomTests_st201504020639JS, "StateTests/RandomTests/st201504020639JS"} -declare_test!{StateTests_RandomTests_st201504020836JS, "StateTests/RandomTests/st201504020836JS"} -declare_test!{StateTests_RandomTests_st201504020910JS, "StateTests/RandomTests/st201504020910JS"} -declare_test!{StateTests_RandomTests_st201504021057JS, "StateTests/RandomTests/st201504021057JS"} -declare_test!{StateTests_RandomTests_st201504021104JS, "StateTests/RandomTests/st201504021104JS"} -declare_test!{StateTests_RandomTests_st201504021237CPPJIT, "StateTests/RandomTests/st201504021237CPPJIT"} -declare_test!{StateTests_RandomTests_st201504021237GO, "StateTests/RandomTests/st201504021237GO"} -declare_test!{StateTests_RandomTests_st201504021237JS, "StateTests/RandomTests/st201504021237JS"} -declare_test!{StateTests_RandomTests_st201504021237PYTHON, "StateTests/RandomTests/st201504021237PYTHON"} -declare_test!{StateTests_RandomTests_st201504021949JS, "StateTests/RandomTests/st201504021949JS"} -declare_test!{StateTests_RandomTests_st201504022003CPPJIT, "StateTests/RandomTests/st201504022003CPPJIT"} -declare_test!{StateTests_RandomTests_st201504022124JS, "StateTests/RandomTests/st201504022124JS"} -declare_test!{StateTests_RandomTests_st201504030138JS, "StateTests/RandomTests/st201504030138JS"} -declare_test!{StateTests_RandomTests_st201504030646JS, "StateTests/RandomTests/st201504030646JS"} -declare_test!{StateTests_RandomTests_st201504030709JS, "StateTests/RandomTests/st201504030709JS"} -declare_test!{StateTests_RandomTests_st201504031133JS, "StateTests/RandomTests/st201504031133JS"} -declare_test!{StateTests_RandomTests_st201504031446JS, "StateTests/RandomTests/st201504031446JS"} -declare_test!{StateTests_RandomTests_st201504031841JS, "StateTests/RandomTests/st201504031841JS"} -declare_test!{StateTests_RandomTests_st201504041605JS, "StateTests/RandomTests/st201504041605JS"} -declare_test!{StateTests_RandomTests_st201504042052JS, "StateTests/RandomTests/st201504042052JS"} -declare_test!{StateTests_RandomTests_st201504042226CPPJIT, "StateTests/RandomTests/st201504042226CPPJIT"} -declare_test!{StateTests_RandomTests_st201504042355CPPJIT, "StateTests/RandomTests/st201504042355CPPJIT"} -declare_test!{StateTests_RandomTests_st201504050059JS, "StateTests/RandomTests/st201504050059JS"} -declare_test!{StateTests_RandomTests_st201504050733JS, "StateTests/RandomTests/st201504050733JS"} -declare_test!{StateTests_RandomTests_st201504051540JS, "StateTests/RandomTests/st201504051540JS"} -declare_test!{StateTests_RandomTests_st201504051944CPPJIT, "StateTests/RandomTests/st201504051944CPPJIT"} -declare_test!{StateTests_RandomTests_st201504052008CPPJIT, "StateTests/RandomTests/st201504052008CPPJIT"} -declare_test!{StateTests_RandomTests_st201504052014GO, "StateTests/RandomTests/st201504052014GO"} -declare_test!{StateTests_RandomTests_st201504052031CPPJIT, "StateTests/RandomTests/st201504052031CPPJIT"} -declare_test!{StateTests_RandomTests_st201504060057CPPJIT, "StateTests/RandomTests/st201504060057CPPJIT"} -declare_test!{StateTests_RandomTests_st201504060418CPPJIT, "StateTests/RandomTests/st201504060418CPPJIT"} -declare_test!{StateTests_RandomTests_st201504061106CPPJIT, "StateTests/RandomTests/st201504061106CPPJIT"} -declare_test!{StateTests_RandomTests_st201504061134CPPJIT, "StateTests/RandomTests/st201504061134CPPJIT"} -declare_test!{StateTests_RandomTests_st201504062033CPPJIT, "StateTests/RandomTests/st201504062033CPPJIT"} -declare_test!{StateTests_RandomTests_st201504062046CPPJIT, "StateTests/RandomTests/st201504062046CPPJIT"} -declare_test!{StateTests_RandomTests_st201504062314CPPJIT, "StateTests/RandomTests/st201504062314CPPJIT"} -declare_test!{StateTests_RandomTests_st201504070746JS, "StateTests/RandomTests/st201504070746JS"} -declare_test!{StateTests_RandomTests_st201504070816CPPJIT, "StateTests/RandomTests/st201504070816CPPJIT"} -declare_test!{StateTests_RandomTests_st201504070836CPPJIT, "StateTests/RandomTests/st201504070836CPPJIT"} -declare_test!{StateTests_RandomTests_st201504070839CPPJIT, "StateTests/RandomTests/st201504070839CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071041CPPJIT, "StateTests/RandomTests/st201504071041CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071056CPPJIT, "StateTests/RandomTests/st201504071056CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071621CPPJIT, "StateTests/RandomTests/st201504071621CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071653CPPJIT, "StateTests/RandomTests/st201504071653CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071750CPPJIT, "StateTests/RandomTests/st201504071750CPPJIT"} -declare_test!{StateTests_RandomTests_st201504071905CPPJIT, "StateTests/RandomTests/st201504071905CPPJIT"} -declare_test!{StateTests_RandomTests_st201504080454CPPJIT, "StateTests/RandomTests/st201504080454CPPJIT"} -declare_test!{StateTests_RandomTests_st201504080457CPPJIT, "StateTests/RandomTests/st201504080457CPPJIT"} -declare_test!{StateTests_RandomTests_st201504080650CPPJIT, "StateTests/RandomTests/st201504080650CPPJIT"} -declare_test!{StateTests_RandomTests_st201504080840CPPJIT, "StateTests/RandomTests/st201504080840CPPJIT"} -declare_test!{StateTests_RandomTests_st201504080948CPPJIT, "StateTests/RandomTests/st201504080948CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081100CPPJIT, "StateTests/RandomTests/st201504081100CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081134CPPJIT, "StateTests/RandomTests/st201504081134CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081138CPPJIT, "StateTests/RandomTests/st201504081138CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081611CPPJIT, "StateTests/RandomTests/st201504081611CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081841JAVA, "StateTests/RandomTests/st201504081841JAVA"} -declare_test!{StateTests_RandomTests_st201504081842JAVA, "StateTests/RandomTests/st201504081842JAVA"} -declare_test!{StateTests_RandomTests_st201504081843JAVA, "StateTests/RandomTests/st201504081843JAVA"} -declare_test!{StateTests_RandomTests_st201504081928CPPJIT, "StateTests/RandomTests/st201504081928CPPJIT"} -declare_test!{StateTests_RandomTests_st201504081953JAVA, "StateTests/RandomTests/st201504081953JAVA"} -declare_test!{StateTests_RandomTests_st201504081954JAVA, "StateTests/RandomTests/st201504081954JAVA"} -declare_test!{StateTests_RandomTests_st201504081955JAVA, "StateTests/RandomTests/st201504081955JAVA"} -declare_test!{StateTests_RandomTests_st201504081956JAVA, "StateTests/RandomTests/st201504081956JAVA"} -declare_test!{StateTests_RandomTests_st201504081957JAVA, "StateTests/RandomTests/st201504081957JAVA"} -declare_test!{StateTests_RandomTests_st201504082000JAVA, "StateTests/RandomTests/st201504082000JAVA"} -declare_test!{StateTests_RandomTests_st201504082001JAVA, "StateTests/RandomTests/st201504082001JAVA"} -declare_test!{StateTests_RandomTests_st201504082002JAVA, "StateTests/RandomTests/st201504082002JAVA"} -declare_test!{StateTests_RandomTests_st201504090553CPPJIT, "StateTests/RandomTests/st201504090553CPPJIT"} -declare_test!{StateTests_RandomTests_st201504090657CPPJIT, "StateTests/RandomTests/st201504090657CPPJIT"} -declare_test!{StateTests_RandomTests_st201504091403CPPJIT, "StateTests/RandomTests/st201504091403CPPJIT"} -declare_test!{StateTests_RandomTests_st201504091641CPPJIT, "StateTests/RandomTests/st201504091641CPPJIT"} -declare_test!{StateTests_RandomTests_st201504092303CPPJIT, "StateTests/RandomTests/st201504092303CPPJIT"} -declare_test!{StateTests_RandomTests_st201504100125CPPJIT, "StateTests/RandomTests/st201504100125CPPJIT"} -declare_test!{StateTests_RandomTests_st201504100215CPPJIT, "StateTests/RandomTests/st201504100215CPPJIT"} -declare_test!{StateTests_RandomTests_st201504100226PYTHON, "StateTests/RandomTests/st201504100226PYTHON"} -declare_test!{StateTests_RandomTests_st201504100308CPPJIT, "StateTests/RandomTests/st201504100308CPPJIT"} -declare_test!{StateTests_RandomTests_st201504100337CPPJIT, "StateTests/RandomTests/st201504100337CPPJIT"} -declare_test!{StateTests_RandomTests_st201504100341CPPJIT, "StateTests/RandomTests/st201504100341CPPJIT"} -declare_test!{StateTests_RandomTests_st201504101009CPPJIT, "StateTests/RandomTests/st201504101009CPPJIT"} -declare_test!{StateTests_RandomTests_st201504101150CPPJIT, "StateTests/RandomTests/st201504101150CPPJIT"} -declare_test!{StateTests_RandomTests_st201504101223CPPJIT, "StateTests/RandomTests/st201504101223CPPJIT"} -declare_test!{StateTests_RandomTests_st201504101338CPPJIT, "StateTests/RandomTests/st201504101338CPPJIT"} -declare_test!{StateTests_RandomTests_st201504101754PYTHON, "StateTests/RandomTests/st201504101754PYTHON"} -declare_test!{StateTests_RandomTests_st201504111554CPPJIT, "StateTests/RandomTests/st201504111554CPPJIT"} -declare_test!{StateTests_RandomTests_st201504130653JS, "StateTests/RandomTests/st201504130653JS"} -declare_test!{StateTests_RandomTests_st201504131821CPPJIT, "StateTests/RandomTests/st201504131821CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140229CPPJIT, "StateTests/RandomTests/st201504140229CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140236CPPJIT, "StateTests/RandomTests/st201504140236CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140359CPPJIT, "StateTests/RandomTests/st201504140359CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140750CPPJIT, "StateTests/RandomTests/st201504140750CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140818CPPJIT, "StateTests/RandomTests/st201504140818CPPJIT"} -declare_test!{StateTests_RandomTests_st201504140900CPPJIT, "StateTests/RandomTests/st201504140900CPPJIT"} -declare_test!{StateTests_RandomTests_st201504150854CPPJIT, "StateTests/RandomTests/st201504150854CPPJIT"} -declare_test!{StateTests_RandomTests_st201504151057CPPJIT, "StateTests/RandomTests/st201504151057CPPJIT"} -declare_test!{StateTests_RandomTests_st201504202124CPPJIT, "StateTests/RandomTests/st201504202124CPPJIT"} -declare_test!{StateTests_RandomTests_st201504210245CPPJIT, "StateTests/RandomTests/st201504210245CPPJIT"} -declare_test!{StateTests_RandomTests_st201504210957CPPJIT, "StateTests/RandomTests/st201504210957CPPJIT"} -declare_test!{StateTests_RandomTests_st201504211739CPPJIT, "StateTests/RandomTests/st201504211739CPPJIT"} -declare_test!{StateTests_RandomTests_st201504212038CPPJIT, "StateTests/RandomTests/st201504212038CPPJIT"} -declare_test!{StateTests_RandomTests_st201504230729CPPJIT, "StateTests/RandomTests/st201504230729CPPJIT"} -declare_test!{StateTests_RandomTests_st201504231639CPPJIT, "StateTests/RandomTests/st201504231639CPPJIT"} -declare_test!{StateTests_RandomTests_st201504231710CPPJIT, "StateTests/RandomTests/st201504231710CPPJIT"} -declare_test!{StateTests_RandomTests_st201504231742CPPJIT, "StateTests/RandomTests/st201504231742CPPJIT"} -declare_test!{StateTests_RandomTests_st201504232350CPPJIT, "StateTests/RandomTests/st201504232350CPPJIT"} -declare_test!{StateTests_RandomTests_st201504240140CPPJIT, "StateTests/RandomTests/st201504240140CPPJIT"} -declare_test!{StateTests_RandomTests_st201504240220CPPJIT, "StateTests/RandomTests/st201504240220CPPJIT"} -declare_test!{StateTests_RandomTests_st201504240351CPPJIT, "StateTests/RandomTests/st201504240351CPPJIT"} -declare_test!{StateTests_RandomTests_st201504240817CPPJIT, "StateTests/RandomTests/st201504240817CPPJIT"} -declare_test!{StateTests_RandomTests_st201504241118CPPJIT, "StateTests/RandomTests/st201504241118CPPJIT"} -declare_test!{StateTests_RandomTests_st201505021810CPPJIT, "StateTests/RandomTests/st201505021810CPPJIT"} -declare_test!{StateTests_RandomTests_st201505050557JS, "StateTests/RandomTests/st201505050557JS"} -declare_test!{StateTests_RandomTests_st201505050929GO, "StateTests/RandomTests/st201505050929GO"} -declare_test!{StateTests_RandomTests_st201505050942PYTHON, "StateTests/RandomTests/st201505050942PYTHON"} -declare_test!{StateTests_RandomTests_st201505051004PYTHON, "StateTests/RandomTests/st201505051004PYTHON"} -declare_test!{StateTests_RandomTests_st201505051016PYTHON, "StateTests/RandomTests/st201505051016PYTHON"} -declare_test!{StateTests_RandomTests_st201505051114GO, "StateTests/RandomTests/st201505051114GO"} -declare_test!{StateTests_RandomTests_st201505051238GO, "StateTests/RandomTests/st201505051238GO"} -declare_test!{StateTests_RandomTests_st201505051249GO, "StateTests/RandomTests/st201505051249GO"} -declare_test!{StateTests_RandomTests_st201505051558PYTHON, "StateTests/RandomTests/st201505051558PYTHON"} -declare_test!{StateTests_RandomTests_st201505051611PYTHON, "StateTests/RandomTests/st201505051611PYTHON"} -declare_test!{StateTests_RandomTests_st201505051648JS, "StateTests/RandomTests/st201505051648JS"} -declare_test!{StateTests_RandomTests_st201505051710GO, "StateTests/RandomTests/st201505051710GO"} -declare_test!{StateTests_RandomTests_st201505052013GO, "StateTests/RandomTests/st201505052013GO"} -declare_test!{StateTests_RandomTests_st201505052102JS, "StateTests/RandomTests/st201505052102JS"} -declare_test!{StateTests_RandomTests_st201505052235GO, "StateTests/RandomTests/st201505052235GO"} -declare_test!{StateTests_RandomTests_st201505052238JS, "StateTests/RandomTests/st201505052238JS"} -declare_test!{StateTests_RandomTests_st201505052242PYTHON, "StateTests/RandomTests/st201505052242PYTHON"} -declare_test!{StateTests_RandomTests_st201505052343PYTHON, "StateTests/RandomTests/st201505052343PYTHON"} -declare_test!{StateTests_RandomTests_st201505060120GO, "StateTests/RandomTests/st201505060120GO"} -declare_test!{StateTests_RandomTests_st201505060121GO, "StateTests/RandomTests/st201505060121GO"} -declare_test!{StateTests_RandomTests_st201505060136PYTHON, "StateTests/RandomTests/st201505060136PYTHON"} -declare_test!{StateTests_RandomTests_st201505060646JS, "StateTests/RandomTests/st201505060646JS"} -declare_test!{StateTests_RandomTests_st201505252314CPPJIT, "StateTests/RandomTests/st201505252314CPPJIT"} -declare_test!{StateTests_RandomTests_st201505272131CPPJIT, "StateTests/RandomTests/st201505272131CPPJIT"} -declare_test!{StateTests_RandomTests_st201506040034GO, "StateTests/RandomTests/st201506040034GO"} -declare_test!{StateTests_RandomTests_st201506040157GO, "StateTests/RandomTests/st201506040157GO"} -declare_test!{StateTests_RandomTests_st201506052130GO, "StateTests/RandomTests/st201506052130GO"} -declare_test!{StateTests_RandomTests_st201506060929GO, "StateTests/RandomTests/st201506060929GO"} -declare_test!{StateTests_RandomTests_st201506061255GO, "StateTests/RandomTests/st201506061255GO"} -declare_test!{StateTests_RandomTests_st201506062331GO, "StateTests/RandomTests/st201506062331GO"} -declare_test!{StateTests_RandomTests_st201506070548GO, "StateTests/RandomTests/st201506070548GO"} -declare_test!{StateTests_RandomTests_st201506071050GO, "StateTests/RandomTests/st201506071050GO"} -declare_test!{StateTests_RandomTests_st201506071624GO, "StateTests/RandomTests/st201506071624GO"} -declare_test!{StateTests_RandomTests_st201506071819GO, "StateTests/RandomTests/st201506071819GO"} -declare_test!{StateTests_RandomTests_st201506072007GO, "StateTests/RandomTests/st201506072007GO"} -declare_test!{StateTests_RandomTests_st201506080556GO, "StateTests/RandomTests/st201506080556GO"} -declare_test!{StateTests_RandomTests_st201506080721GO, "StateTests/RandomTests/st201506080721GO"} -declare_test!{StateTests_RandomTests_st201506091836GO, "StateTests/RandomTests/st201506091836GO"} -declare_test!{StateTests_RandomTests_st201506092032GO, "StateTests/RandomTests/st201506092032GO"} -declare_test!{StateTests_RandomTests_st201506101359JS, "StateTests/RandomTests/st201506101359JS"} -declare_test!{StateTests_RandomTests_st201507030359GO, "StateTests/RandomTests/st201507030359GO"} + declare_test!{StateTests_stBlockHashTest, "StateTests/stBlockHashTest"} + declare_test!{StateTests_stCallCodes, "StateTests/stCallCodes"} + declare_test!{StateTests_stCallCreateCallCodeTest, "StateTests/stCallCreateCallCodeTest"} + declare_test!{StateTests_stExample, "StateTests/stExample"} + declare_test!{StateTests_stInitCodeTest, "StateTests/stInitCodeTest"} + declare_test!{StateTests_stLogTests, "StateTests/stLogTests"} + declare_test!{heavy => StateTests_stMemoryStressTest, "StateTests/stMemoryStressTest"} + declare_test!{heavy => StateTests_stMemoryTest, "StateTests/stMemoryTest"} + declare_test!{StateTests_stPreCompiledContracts, "StateTests/stPreCompiledContracts"} + declare_test!{heavy => StateTests_stQuadraticComplexityTest, "StateTests/stQuadraticComplexityTest"} + declare_test!{StateTests_stRecursiveCreate, "StateTests/stRecursiveCreate"} + declare_test!{StateTests_stRefundTest, "StateTests/stRefundTest"} + declare_test!{StateTests_stSolidityTest, "StateTests/stSolidityTest"} + declare_test!{StateTests_stSpecialTest, "StateTests/stSpecialTest"} + declare_test!{StateTests_stSystemOperationsTest, "StateTests/stSystemOperationsTest"} + declare_test!{StateTests_stTransactionTest, "StateTests/stTransactionTest"} + declare_test!{StateTests_stTransitionTest, "StateTests/stTransitionTest"} + declare_test!{StateTests_stWalletTest, "StateTests/stWalletTest"} + + declare_test!{StateTests_RandomTests_st201503121803PYTHON, "StateTests/RandomTests/st201503121803PYTHON"} + declare_test!{StateTests_RandomTests_st201503121806PYTHON, "StateTests/RandomTests/st201503121806PYTHON"} + declare_test!{StateTests_RandomTests_st201503121848GO, "StateTests/RandomTests/st201503121848GO"} + declare_test!{StateTests_RandomTests_st201503121849GO, "StateTests/RandomTests/st201503121849GO"} + declare_test!{StateTests_RandomTests_st201503121850GO, "StateTests/RandomTests/st201503121850GO"} + declare_test!{StateTests_RandomTests_st201503121851GO, "StateTests/RandomTests/st201503121851GO"} + declare_test!{StateTests_RandomTests_st201503121953GO, "StateTests/RandomTests/st201503121953GO"} + declare_test!{StateTests_RandomTests_st201503122023GO, "StateTests/RandomTests/st201503122023GO"} + declare_test!{StateTests_RandomTests_st201503122023PYTHON, "StateTests/RandomTests/st201503122023PYTHON"} + declare_test!{StateTests_RandomTests_st201503122027GO, "StateTests/RandomTests/st201503122027GO"} + declare_test!{StateTests_RandomTests_st201503122054GO, "StateTests/RandomTests/st201503122054GO"} + declare_test!{StateTests_RandomTests_st201503122055GO, "StateTests/RandomTests/st201503122055GO"} + declare_test!{StateTests_RandomTests_st201503122115CPPJIT, "StateTests/RandomTests/st201503122115CPPJIT"} + declare_test!{StateTests_RandomTests_st201503122115GO, "StateTests/RandomTests/st201503122115GO"} + declare_test!{StateTests_RandomTests_st201503122123GO, "StateTests/RandomTests/st201503122123GO"} + declare_test!{StateTests_RandomTests_st201503122124GO, "StateTests/RandomTests/st201503122124GO"} + declare_test!{StateTests_RandomTests_st201503122128PYTHON, "StateTests/RandomTests/st201503122128PYTHON"} + declare_test!{StateTests_RandomTests_st201503122140GO, "StateTests/RandomTests/st201503122140GO"} + declare_test!{StateTests_RandomTests_st201503122159GO, "StateTests/RandomTests/st201503122159GO"} + declare_test!{StateTests_RandomTests_st201503122204GO, "StateTests/RandomTests/st201503122204GO"} + declare_test!{StateTests_RandomTests_st201503122212GO, "StateTests/RandomTests/st201503122212GO"} + declare_test!{StateTests_RandomTests_st201503122231GO, "StateTests/RandomTests/st201503122231GO"} + declare_test!{StateTests_RandomTests_st201503122238GO, "StateTests/RandomTests/st201503122238GO"} + declare_test!{StateTests_RandomTests_st201503122252GO, "StateTests/RandomTests/st201503122252GO"} + declare_test!{StateTests_RandomTests_st201503122316GO, "StateTests/RandomTests/st201503122316GO"} + declare_test!{StateTests_RandomTests_st201503122324GO, "StateTests/RandomTests/st201503122324GO"} + declare_test!{StateTests_RandomTests_st201503122358GO, "StateTests/RandomTests/st201503122358GO"} + declare_test!{StateTests_RandomTests_st201503130002GO, "StateTests/RandomTests/st201503130002GO"} + declare_test!{StateTests_RandomTests_st201503130005GO, "StateTests/RandomTests/st201503130005GO"} + declare_test!{StateTests_RandomTests_st201503130007GO, "StateTests/RandomTests/st201503130007GO"} + declare_test!{StateTests_RandomTests_st201503130010GO, "StateTests/RandomTests/st201503130010GO"} + declare_test!{StateTests_RandomTests_st201503130023PYTHON, "StateTests/RandomTests/st201503130023PYTHON"} + declare_test!{StateTests_RandomTests_st201503130059GO, "StateTests/RandomTests/st201503130059GO"} + declare_test!{StateTests_RandomTests_st201503130101GO, "StateTests/RandomTests/st201503130101GO"} + declare_test!{StateTests_RandomTests_st201503130109GO, "StateTests/RandomTests/st201503130109GO"} + declare_test!{StateTests_RandomTests_st201503130117GO, "StateTests/RandomTests/st201503130117GO"} + declare_test!{StateTests_RandomTests_st201503130122GO, "StateTests/RandomTests/st201503130122GO"} + declare_test!{StateTests_RandomTests_st201503130156GO, "StateTests/RandomTests/st201503130156GO"} + declare_test!{StateTests_RandomTests_st201503130156PYTHON, "StateTests/RandomTests/st201503130156PYTHON"} + declare_test!{StateTests_RandomTests_st201503130207GO, "StateTests/RandomTests/st201503130207GO"} + declare_test!{StateTests_RandomTests_st201503130219CPPJIT, "StateTests/RandomTests/st201503130219CPPJIT"} + declare_test!{StateTests_RandomTests_st201503130219GO, "StateTests/RandomTests/st201503130219GO"} + declare_test!{StateTests_RandomTests_st201503130243GO, "StateTests/RandomTests/st201503130243GO"} + declare_test!{StateTests_RandomTests_st201503130246GO, "StateTests/RandomTests/st201503130246GO"} + declare_test!{StateTests_RandomTests_st201503130321GO, "StateTests/RandomTests/st201503130321GO"} + declare_test!{StateTests_RandomTests_st201503130322GO, "StateTests/RandomTests/st201503130322GO"} + declare_test!{StateTests_RandomTests_st201503130332GO, "StateTests/RandomTests/st201503130332GO"} + declare_test!{StateTests_RandomTests_st201503130359GO, "StateTests/RandomTests/st201503130359GO"} + declare_test!{StateTests_RandomTests_st201503130405GO, "StateTests/RandomTests/st201503130405GO"} + declare_test!{StateTests_RandomTests_st201503130408GO, "StateTests/RandomTests/st201503130408GO"} + declare_test!{StateTests_RandomTests_st201503130411GO, "StateTests/RandomTests/st201503130411GO"} + declare_test!{StateTests_RandomTests_st201503130431GO, "StateTests/RandomTests/st201503130431GO"} + declare_test!{StateTests_RandomTests_st201503130437GO, "StateTests/RandomTests/st201503130437GO"} + declare_test!{StateTests_RandomTests_st201503130450GO, "StateTests/RandomTests/st201503130450GO"} + declare_test!{StateTests_RandomTests_st201503130512CPPJIT, "StateTests/RandomTests/st201503130512CPPJIT"} + declare_test!{StateTests_RandomTests_st201503130512GO, "StateTests/RandomTests/st201503130512GO"} + declare_test!{StateTests_RandomTests_st201503130615GO, "StateTests/RandomTests/st201503130615GO"} + declare_test!{StateTests_RandomTests_st201503130705GO, "StateTests/RandomTests/st201503130705GO"} + declare_test!{StateTests_RandomTests_st201503130733CPPJIT, "StateTests/RandomTests/st201503130733CPPJIT"} + declare_test!{StateTests_RandomTests_st201503130733GO, "StateTests/RandomTests/st201503130733GO"} + declare_test!{StateTests_RandomTests_st201503130747GO, "StateTests/RandomTests/st201503130747GO"} + declare_test!{StateTests_RandomTests_st201503130751GO, "StateTests/RandomTests/st201503130751GO"} + declare_test!{StateTests_RandomTests_st201503130752PYTHON, "StateTests/RandomTests/st201503130752PYTHON"} + declare_test!{StateTests_RandomTests_st201503130757PYTHON, "StateTests/RandomTests/st201503130757PYTHON"} + declare_test!{StateTests_RandomTests_st201503131658GO, "StateTests/RandomTests/st201503131658GO"} + declare_test!{StateTests_RandomTests_st201503131739GO, "StateTests/RandomTests/st201503131739GO"} + declare_test!{StateTests_RandomTests_st201503131755CPPJIT, "StateTests/RandomTests/st201503131755CPPJIT"} + declare_test!{StateTests_RandomTests_st201503131755GO, "StateTests/RandomTests/st201503131755GO"} + declare_test!{StateTests_RandomTests_st201503132001CPPJIT, "StateTests/RandomTests/st201503132001CPPJIT"} + declare_test!{StateTests_RandomTests_st201503132127PYTHON, "StateTests/RandomTests/st201503132127PYTHON"} + declare_test!{StateTests_RandomTests_st201503132201CPPJIT, "StateTests/RandomTests/st201503132201CPPJIT"} + declare_test!{StateTests_RandomTests_st201503132201GO, "StateTests/RandomTests/st201503132201GO"} + declare_test!{StateTests_RandomTests_st201503132202PYTHON, "StateTests/RandomTests/st201503132202PYTHON"} + declare_test!{StateTests_RandomTests_st201503140002PYTHON, "StateTests/RandomTests/st201503140002PYTHON"} + declare_test!{StateTests_RandomTests_st201503140240PYTHON, "StateTests/RandomTests/st201503140240PYTHON"} + declare_test!{StateTests_RandomTests_st201503140522PYTHON, "StateTests/RandomTests/st201503140522PYTHON"} + declare_test!{StateTests_RandomTests_st201503140756PYTHON, "StateTests/RandomTests/st201503140756PYTHON"} + declare_test!{StateTests_RandomTests_st201503141144PYTHON, "StateTests/RandomTests/st201503141144PYTHON"} + declare_test!{StateTests_RandomTests_st201503141510PYTHON, "StateTests/RandomTests/st201503141510PYTHON"} + declare_test!{StateTests_RandomTests_st201503150427PYTHON, "StateTests/RandomTests/st201503150427PYTHON"} + declare_test!{StateTests_RandomTests_st201503150716PYTHON, "StateTests/RandomTests/st201503150716PYTHON"} + declare_test!{StateTests_RandomTests_st201503151450PYTHON, "StateTests/RandomTests/st201503151450PYTHON"} + declare_test!{StateTests_RandomTests_st201503151516PYTHON, "StateTests/RandomTests/st201503151516PYTHON"} + declare_test!{StateTests_RandomTests_st201503151753PYTHON, "StateTests/RandomTests/st201503151753PYTHON"} + declare_test!{StateTests_RandomTests_st201503152057PYTHON, "StateTests/RandomTests/st201503152057PYTHON"} + declare_test!{StateTests_RandomTests_st201503152241PYTHON, "StateTests/RandomTests/st201503152241PYTHON"} + declare_test!{StateTests_RandomTests_st201503160014PYTHON, "StateTests/RandomTests/st201503160014PYTHON"} + declare_test!{StateTests_RandomTests_st201503160733PYTHON, "StateTests/RandomTests/st201503160733PYTHON"} + declare_test!{StateTests_RandomTests_st201503170051PYTHON, "StateTests/RandomTests/st201503170051PYTHON"} + declare_test!{StateTests_RandomTests_st201503170433PYTHON, "StateTests/RandomTests/st201503170433PYTHON"} + declare_test!{StateTests_RandomTests_st201503170523PYTHON, "StateTests/RandomTests/st201503170523PYTHON"} + declare_test!{StateTests_RandomTests_st201503171108PYTHON, "StateTests/RandomTests/st201503171108PYTHON"} + declare_test!{StateTests_RandomTests_st201503181223GO, "StateTests/RandomTests/st201503181223GO"} + declare_test!{StateTests_RandomTests_st201503181225GO, "StateTests/RandomTests/st201503181225GO"} + declare_test!{StateTests_RandomTests_st201503181226CPPJIT, "StateTests/RandomTests/st201503181226CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181227CPPJIT, "StateTests/RandomTests/st201503181227CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181227GO, "StateTests/RandomTests/st201503181227GO"} + declare_test!{StateTests_RandomTests_st201503181229GO, "StateTests/RandomTests/st201503181229GO"} + declare_test!{StateTests_RandomTests_st201503181230CPPJIT, "StateTests/RandomTests/st201503181230CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181230GO, "StateTests/RandomTests/st201503181230GO"} + declare_test!{StateTests_RandomTests_st201503181231GO, "StateTests/RandomTests/st201503181231GO"} + declare_test!{StateTests_RandomTests_st201503181232CPPJIT, "StateTests/RandomTests/st201503181232CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181232GO, "StateTests/RandomTests/st201503181232GO"} + declare_test!{StateTests_RandomTests_st201503181233GO, "StateTests/RandomTests/st201503181233GO"} + declare_test!{StateTests_RandomTests_st201503181234CPPJIT, "StateTests/RandomTests/st201503181234CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181234GO, "StateTests/RandomTests/st201503181234GO"} + declare_test!{StateTests_RandomTests_st201503181235CPPJIT, "StateTests/RandomTests/st201503181235CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181235GO, "StateTests/RandomTests/st201503181235GO"} + declare_test!{StateTests_RandomTests_st201503181236GO, "StateTests/RandomTests/st201503181236GO"} + declare_test!{StateTests_RandomTests_st201503181237GO, "StateTests/RandomTests/st201503181237GO"} + declare_test!{StateTests_RandomTests_st201503181239GO, "StateTests/RandomTests/st201503181239GO"} + declare_test!{StateTests_RandomTests_st201503181241CPPJIT, "StateTests/RandomTests/st201503181241CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181241GO, "StateTests/RandomTests/st201503181241GO"} + declare_test!{StateTests_RandomTests_st201503181243GO, "StateTests/RandomTests/st201503181243GO"} + declare_test!{StateTests_RandomTests_st201503181244GO, "StateTests/RandomTests/st201503181244GO"} + declare_test!{StateTests_RandomTests_st201503181245CPPJIT, "StateTests/RandomTests/st201503181245CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181245GO, "StateTests/RandomTests/st201503181245GO"} + declare_test!{StateTests_RandomTests_st201503181246CPPJIT, "StateTests/RandomTests/st201503181246CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181246GO, "StateTests/RandomTests/st201503181246GO"} + declare_test!{StateTests_RandomTests_st201503181247GO, "StateTests/RandomTests/st201503181247GO"} + declare_test!{StateTests_RandomTests_st201503181248GO, "StateTests/RandomTests/st201503181248GO"} + declare_test!{StateTests_RandomTests_st201503181249GO, "StateTests/RandomTests/st201503181249GO"} + declare_test!{StateTests_RandomTests_st201503181250CPPJIT, "StateTests/RandomTests/st201503181250CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181250GO, "StateTests/RandomTests/st201503181250GO"} + declare_test!{StateTests_RandomTests_st201503181251GO, "StateTests/RandomTests/st201503181251GO"} + declare_test!{StateTests_RandomTests_st201503181252CPPJIT, "StateTests/RandomTests/st201503181252CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181253GO, "StateTests/RandomTests/st201503181253GO"} + declare_test!{StateTests_RandomTests_st201503181255CPPJIT, "StateTests/RandomTests/st201503181255CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181255GO, "StateTests/RandomTests/st201503181255GO"} + declare_test!{StateTests_RandomTests_st201503181257GO, "StateTests/RandomTests/st201503181257GO"} + declare_test!{StateTests_RandomTests_st201503181258CPPJIT, "StateTests/RandomTests/st201503181258CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181258GO, "StateTests/RandomTests/st201503181258GO"} + declare_test!{StateTests_RandomTests_st201503181301CPPJIT, "StateTests/RandomTests/st201503181301CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181301GO, "StateTests/RandomTests/st201503181301GO"} + declare_test!{StateTests_RandomTests_st201503181303GO, "StateTests/RandomTests/st201503181303GO"} + declare_test!{StateTests_RandomTests_st201503181304GO, "StateTests/RandomTests/st201503181304GO"} + declare_test!{StateTests_RandomTests_st201503181305GO, "StateTests/RandomTests/st201503181305GO"} + declare_test!{StateTests_RandomTests_st201503181306GO, "StateTests/RandomTests/st201503181306GO"} + declare_test!{StateTests_RandomTests_st201503181307CPPJIT, "StateTests/RandomTests/st201503181307CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181307GO, "StateTests/RandomTests/st201503181307GO"} + declare_test!{StateTests_RandomTests_st201503181308GO, "StateTests/RandomTests/st201503181308GO"} + declare_test!{StateTests_RandomTests_st201503181309GO, "StateTests/RandomTests/st201503181309GO"} + declare_test!{StateTests_RandomTests_st201503181310GO, "StateTests/RandomTests/st201503181310GO"} + declare_test!{StateTests_RandomTests_st201503181311GO, "StateTests/RandomTests/st201503181311GO"} + declare_test!{StateTests_RandomTests_st201503181313GO, "StateTests/RandomTests/st201503181313GO"} + declare_test!{StateTests_RandomTests_st201503181314GO, "StateTests/RandomTests/st201503181314GO"} + declare_test!{StateTests_RandomTests_st201503181315CPPJIT, "StateTests/RandomTests/st201503181315CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181315GO, "StateTests/RandomTests/st201503181315GO"} + declare_test!{StateTests_RandomTests_st201503181316CPPJIT, "StateTests/RandomTests/st201503181316CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181316PYTHON, "StateTests/RandomTests/st201503181316PYTHON"} + declare_test!{StateTests_RandomTests_st201503181317GO, "StateTests/RandomTests/st201503181317GO"} + declare_test!{StateTests_RandomTests_st201503181318CPPJIT, "StateTests/RandomTests/st201503181318CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181318GO, "StateTests/RandomTests/st201503181318GO"} + declare_test!{StateTests_RandomTests_st201503181319GO, "StateTests/RandomTests/st201503181319GO"} + declare_test!{StateTests_RandomTests_st201503181319PYTHON, "StateTests/RandomTests/st201503181319PYTHON"} + declare_test!{StateTests_RandomTests_st201503181322GO, "StateTests/RandomTests/st201503181322GO"} + declare_test!{StateTests_RandomTests_st201503181323CPPJIT, "StateTests/RandomTests/st201503181323CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181323GO, "StateTests/RandomTests/st201503181323GO"} + declare_test!{StateTests_RandomTests_st201503181324GO, "StateTests/RandomTests/st201503181324GO"} + declare_test!{StateTests_RandomTests_st201503181325GO, "StateTests/RandomTests/st201503181325GO"} + declare_test!{StateTests_RandomTests_st201503181326CPPJIT, "StateTests/RandomTests/st201503181326CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181326GO, "StateTests/RandomTests/st201503181326GO"} + declare_test!{StateTests_RandomTests_st201503181327GO, "StateTests/RandomTests/st201503181327GO"} + declare_test!{StateTests_RandomTests_st201503181329CPPJIT, "StateTests/RandomTests/st201503181329CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181329GO, "StateTests/RandomTests/st201503181329GO"} + declare_test!{StateTests_RandomTests_st201503181330GO, "StateTests/RandomTests/st201503181330GO"} + declare_test!{StateTests_RandomTests_st201503181332GO, "StateTests/RandomTests/st201503181332GO"} + declare_test!{StateTests_RandomTests_st201503181333GO, "StateTests/RandomTests/st201503181333GO"} + declare_test!{StateTests_RandomTests_st201503181334GO, "StateTests/RandomTests/st201503181334GO"} + declare_test!{StateTests_RandomTests_st201503181336CPPJIT, "StateTests/RandomTests/st201503181336CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181337GO, "StateTests/RandomTests/st201503181337GO"} + declare_test!{StateTests_RandomTests_st201503181338GO, "StateTests/RandomTests/st201503181338GO"} + declare_test!{StateTests_RandomTests_st201503181339CPPJIT, "StateTests/RandomTests/st201503181339CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181339GO, "StateTests/RandomTests/st201503181339GO"} + declare_test!{StateTests_RandomTests_st201503181340GO, "StateTests/RandomTests/st201503181340GO"} + declare_test!{StateTests_RandomTests_st201503181341CPPJIT, "StateTests/RandomTests/st201503181341CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181342CPPJIT, "StateTests/RandomTests/st201503181342CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181342GO, "StateTests/RandomTests/st201503181342GO"} + declare_test!{StateTests_RandomTests_st201503181345GO, "StateTests/RandomTests/st201503181345GO"} + declare_test!{StateTests_RandomTests_st201503181346GO, "StateTests/RandomTests/st201503181346GO"} + declare_test!{StateTests_RandomTests_st201503181347CPPJIT, "StateTests/RandomTests/st201503181347CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181347GO, "StateTests/RandomTests/st201503181347GO"} + declare_test!{StateTests_RandomTests_st201503181347PYTHON, "StateTests/RandomTests/st201503181347PYTHON"} + declare_test!{StateTests_RandomTests_st201503181350CPPJIT, "StateTests/RandomTests/st201503181350CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181352GO, "StateTests/RandomTests/st201503181352GO"} + declare_test!{StateTests_RandomTests_st201503181353GO, "StateTests/RandomTests/st201503181353GO"} + declare_test!{StateTests_RandomTests_st201503181354CPPJIT, "StateTests/RandomTests/st201503181354CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181354GO, "StateTests/RandomTests/st201503181354GO"} + declare_test!{StateTests_RandomTests_st201503181355GO, "StateTests/RandomTests/st201503181355GO"} + declare_test!{StateTests_RandomTests_st201503181356CPPJIT, "StateTests/RandomTests/st201503181356CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181357CPPJIT, "StateTests/RandomTests/st201503181357CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181358CPPJIT, "StateTests/RandomTests/st201503181358CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181358GO, "StateTests/RandomTests/st201503181358GO"} + declare_test!{StateTests_RandomTests_st201503181359GO, "StateTests/RandomTests/st201503181359GO"} + declare_test!{StateTests_RandomTests_st201503181402CPPJIT, "StateTests/RandomTests/st201503181402CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181403GO, "StateTests/RandomTests/st201503181403GO"} + declare_test!{StateTests_RandomTests_st201503181406CPPJIT, "StateTests/RandomTests/st201503181406CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181406GO, "StateTests/RandomTests/st201503181406GO"} + declare_test!{StateTests_RandomTests_st201503181410GO, "StateTests/RandomTests/st201503181410GO"} + declare_test!{StateTests_RandomTests_st201503181412CPPJIT, "StateTests/RandomTests/st201503181412CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181413GO, "StateTests/RandomTests/st201503181413GO"} + declare_test!{StateTests_RandomTests_st201503181415GO, "StateTests/RandomTests/st201503181415GO"} + declare_test!{StateTests_RandomTests_st201503181416GO, "StateTests/RandomTests/st201503181416GO"} + declare_test!{StateTests_RandomTests_st201503181417CPPJIT, "StateTests/RandomTests/st201503181417CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181417GO, "StateTests/RandomTests/st201503181417GO"} + declare_test!{StateTests_RandomTests_st201503181418CPPJIT, "StateTests/RandomTests/st201503181418CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181422GO, "StateTests/RandomTests/st201503181422GO"} + declare_test!{StateTests_RandomTests_st201503181423CPPJIT, "StateTests/RandomTests/st201503181423CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181424GO, "StateTests/RandomTests/st201503181424GO"} + declare_test!{StateTests_RandomTests_st201503181426CPPJIT, "StateTests/RandomTests/st201503181426CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181426GO, "StateTests/RandomTests/st201503181426GO"} + declare_test!{StateTests_RandomTests_st201503181428GO, "StateTests/RandomTests/st201503181428GO"} + declare_test!{StateTests_RandomTests_st201503181430CPPJIT, "StateTests/RandomTests/st201503181430CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181435GO, "StateTests/RandomTests/st201503181435GO"} + declare_test!{StateTests_RandomTests_st201503181436GO, "StateTests/RandomTests/st201503181436GO"} + declare_test!{StateTests_RandomTests_st201503181437CPPJIT, "StateTests/RandomTests/st201503181437CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181437GO, "StateTests/RandomTests/st201503181437GO"} + declare_test!{StateTests_RandomTests_st201503181438CPPJIT, "StateTests/RandomTests/st201503181438CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181438GO, "StateTests/RandomTests/st201503181438GO"} + declare_test!{StateTests_RandomTests_st201503181439CPPJIT, "StateTests/RandomTests/st201503181439CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181439GO, "StateTests/RandomTests/st201503181439GO"} + declare_test!{StateTests_RandomTests_st201503181439PYTHON, "StateTests/RandomTests/st201503181439PYTHON"} + declare_test!{StateTests_RandomTests_st201503181440GO, "StateTests/RandomTests/st201503181440GO"} + declare_test!{StateTests_RandomTests_st201503181441GO, "StateTests/RandomTests/st201503181441GO"} + declare_test!{StateTests_RandomTests_st201503181442GO, "StateTests/RandomTests/st201503181442GO"} + declare_test!{StateTests_RandomTests_st201503181445CPPJIT, "StateTests/RandomTests/st201503181445CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181446GO, "StateTests/RandomTests/st201503181446GO"} + declare_test!{StateTests_RandomTests_st201503181447GO, "StateTests/RandomTests/st201503181447GO"} + declare_test!{StateTests_RandomTests_st201503181450GO, "StateTests/RandomTests/st201503181450GO"} + declare_test!{StateTests_RandomTests_st201503181451CPPJIT, "StateTests/RandomTests/st201503181451CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181453GO, "StateTests/RandomTests/st201503181453GO"} + declare_test!{StateTests_RandomTests_st201503181455GO, "StateTests/RandomTests/st201503181455GO"} + declare_test!{StateTests_RandomTests_st201503181456CPPJIT, "StateTests/RandomTests/st201503181456CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181457GO, "StateTests/RandomTests/st201503181457GO"} + declare_test!{StateTests_RandomTests_st201503181458GO, "StateTests/RandomTests/st201503181458GO"} + declare_test!{StateTests_RandomTests_st201503181459GO, "StateTests/RandomTests/st201503181459GO"} + declare_test!{StateTests_RandomTests_st201503181500GO, "StateTests/RandomTests/st201503181500GO"} + declare_test!{StateTests_RandomTests_st201503181501GO, "StateTests/RandomTests/st201503181501GO"} + declare_test!{StateTests_RandomTests_st201503181503GO, "StateTests/RandomTests/st201503181503GO"} + declare_test!{StateTests_RandomTests_st201503181504GO, "StateTests/RandomTests/st201503181504GO"} + declare_test!{StateTests_RandomTests_st201503181505GO, "StateTests/RandomTests/st201503181505GO"} + declare_test!{StateTests_RandomTests_st201503181506CPPJIT, "StateTests/RandomTests/st201503181506CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181507GO, "StateTests/RandomTests/st201503181507GO"} + declare_test!{StateTests_RandomTests_st201503181509CPPJIT, "StateTests/RandomTests/st201503181509CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181509GO, "StateTests/RandomTests/st201503181509GO"} + declare_test!{StateTests_RandomTests_st201503181510GO, "StateTests/RandomTests/st201503181510GO"} + declare_test!{StateTests_RandomTests_st201503181511GO, "StateTests/RandomTests/st201503181511GO"} + declare_test!{StateTests_RandomTests_st201503181512GO, "StateTests/RandomTests/st201503181512GO"} + declare_test!{StateTests_RandomTests_st201503181513CPPJIT, "StateTests/RandomTests/st201503181513CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181513GO, "StateTests/RandomTests/st201503181513GO"} + declare_test!{StateTests_RandomTests_st201503181514CPPJIT, "StateTests/RandomTests/st201503181514CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181514GO, "StateTests/RandomTests/st201503181514GO"} + declare_test!{StateTests_RandomTests_st201503181517CPPJIT, "StateTests/RandomTests/st201503181517CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181517GO, "StateTests/RandomTests/st201503181517GO"} + declare_test!{StateTests_RandomTests_st201503181519CPPJIT, "StateTests/RandomTests/st201503181519CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181519GO, "StateTests/RandomTests/st201503181519GO"} + declare_test!{StateTests_RandomTests_st201503181520CPPJIT, "StateTests/RandomTests/st201503181520CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181520GO, "StateTests/RandomTests/st201503181520GO"} + declare_test!{StateTests_RandomTests_st201503181521GO, "StateTests/RandomTests/st201503181521GO"} + declare_test!{StateTests_RandomTests_st201503181522GO, "StateTests/RandomTests/st201503181522GO"} + declare_test!{StateTests_RandomTests_st201503181524CPPJIT, "StateTests/RandomTests/st201503181524CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181524GO, "StateTests/RandomTests/st201503181524GO"} + declare_test!{StateTests_RandomTests_st201503181526GO, "StateTests/RandomTests/st201503181526GO"} + declare_test!{StateTests_RandomTests_st201503181527GO, "StateTests/RandomTests/st201503181527GO"} + declare_test!{StateTests_RandomTests_st201503181528CPPJIT, "StateTests/RandomTests/st201503181528CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181528GO, "StateTests/RandomTests/st201503181528GO"} + declare_test!{StateTests_RandomTests_st201503181528PYTHON, "StateTests/RandomTests/st201503181528PYTHON"} + declare_test!{StateTests_RandomTests_st201503181529GO, "StateTests/RandomTests/st201503181529GO"} + declare_test!{StateTests_RandomTests_st201503181531CPPJIT, "StateTests/RandomTests/st201503181531CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181533GO, "StateTests/RandomTests/st201503181533GO"} + declare_test!{StateTests_RandomTests_st201503181534CPPJIT, "StateTests/RandomTests/st201503181534CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181534GO, "StateTests/RandomTests/st201503181534GO"} + declare_test!{StateTests_RandomTests_st201503181536CPPJIT, "StateTests/RandomTests/st201503181536CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181536GO, "StateTests/RandomTests/st201503181536GO"} + declare_test!{StateTests_RandomTests_st201503181537GO, "StateTests/RandomTests/st201503181537GO"} + declare_test!{StateTests_RandomTests_st201503181538GO, "StateTests/RandomTests/st201503181538GO"} + declare_test!{StateTests_RandomTests_st201503181539GO, "StateTests/RandomTests/st201503181539GO"} + declare_test!{StateTests_RandomTests_st201503181540CPPJIT, "StateTests/RandomTests/st201503181540CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181540PYTHON, "StateTests/RandomTests/st201503181540PYTHON"} + declare_test!{StateTests_RandomTests_st201503181543GO, "StateTests/RandomTests/st201503181543GO"} + declare_test!{StateTests_RandomTests_st201503181544CPPJIT, "StateTests/RandomTests/st201503181544CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181544GO, "StateTests/RandomTests/st201503181544GO"} + declare_test!{StateTests_RandomTests_st201503181547GO, "StateTests/RandomTests/st201503181547GO"} + declare_test!{StateTests_RandomTests_st201503181548CPPJIT, "StateTests/RandomTests/st201503181548CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181548GO, "StateTests/RandomTests/st201503181548GO"} + declare_test!{StateTests_RandomTests_st201503181551GO, "StateTests/RandomTests/st201503181551GO"} + declare_test!{StateTests_RandomTests_st201503181552CPPJIT, "StateTests/RandomTests/st201503181552CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181553GO, "StateTests/RandomTests/st201503181553GO"} + declare_test!{StateTests_RandomTests_st201503181555CPPJIT, "StateTests/RandomTests/st201503181555CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181555GO, "StateTests/RandomTests/st201503181555GO"} + declare_test!{StateTests_RandomTests_st201503181557GO, "StateTests/RandomTests/st201503181557GO"} + declare_test!{StateTests_RandomTests_st201503181559GO, "StateTests/RandomTests/st201503181559GO"} + declare_test!{StateTests_RandomTests_st201503181601CPPJIT, "StateTests/RandomTests/st201503181601CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181601GO, "StateTests/RandomTests/st201503181601GO"} + declare_test!{StateTests_RandomTests_st201503181602GO, "StateTests/RandomTests/st201503181602GO"} + declare_test!{StateTests_RandomTests_st201503181603GO, "StateTests/RandomTests/st201503181603GO"} + declare_test!{StateTests_RandomTests_st201503181604GO, "StateTests/RandomTests/st201503181604GO"} + declare_test!{StateTests_RandomTests_st201503181605GO, "StateTests/RandomTests/st201503181605GO"} + declare_test!{StateTests_RandomTests_st201503181606GO, "StateTests/RandomTests/st201503181606GO"} + declare_test!{StateTests_RandomTests_st201503181607GO, "StateTests/RandomTests/st201503181607GO"} + declare_test!{StateTests_RandomTests_st201503181608CPPJIT, "StateTests/RandomTests/st201503181608CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181608GO, "StateTests/RandomTests/st201503181608GO"} + declare_test!{StateTests_RandomTests_st201503181609GO, "StateTests/RandomTests/st201503181609GO"} + declare_test!{StateTests_RandomTests_st201503181610CPPJIT, "StateTests/RandomTests/st201503181610CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181610GO, "StateTests/RandomTests/st201503181610GO"} + declare_test!{StateTests_RandomTests_st201503181611CPPJIT, "StateTests/RandomTests/st201503181611CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181611GO, "StateTests/RandomTests/st201503181611GO"} + declare_test!{StateTests_RandomTests_st201503181612GO, "StateTests/RandomTests/st201503181612GO"} + declare_test!{StateTests_RandomTests_st201503181614CPPJIT, "StateTests/RandomTests/st201503181614CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181614GO, "StateTests/RandomTests/st201503181614GO"} + declare_test!{StateTests_RandomTests_st201503181616CPPJIT, "StateTests/RandomTests/st201503181616CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181616GO, "StateTests/RandomTests/st201503181616GO"} + declare_test!{StateTests_RandomTests_st201503181617GO, "StateTests/RandomTests/st201503181617GO"} + declare_test!{StateTests_RandomTests_st201503181618GO, "StateTests/RandomTests/st201503181618GO"} + declare_test!{StateTests_RandomTests_st201503181619GO, "StateTests/RandomTests/st201503181619GO"} + declare_test!{StateTests_RandomTests_st201503181620CPPJIT, "StateTests/RandomTests/st201503181620CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181620GO, "StateTests/RandomTests/st201503181620GO"} + declare_test!{StateTests_RandomTests_st201503181621GO, "StateTests/RandomTests/st201503181621GO"} + declare_test!{StateTests_RandomTests_st201503181625GO, "StateTests/RandomTests/st201503181625GO"} + declare_test!{StateTests_RandomTests_st201503181626CPPJIT, "StateTests/RandomTests/st201503181626CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181626GO, "StateTests/RandomTests/st201503181626GO"} + declare_test!{StateTests_RandomTests_st201503181627GO, "StateTests/RandomTests/st201503181627GO"} + declare_test!{StateTests_RandomTests_st201503181628GO, "StateTests/RandomTests/st201503181628GO"} + declare_test!{StateTests_RandomTests_st201503181629GO, "StateTests/RandomTests/st201503181629GO"} + declare_test!{StateTests_RandomTests_st201503181630CPPJIT, "StateTests/RandomTests/st201503181630CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181630GO, "StateTests/RandomTests/st201503181630GO"} + declare_test!{StateTests_RandomTests_st201503181630PYTHON, "StateTests/RandomTests/st201503181630PYTHON"} + declare_test!{StateTests_RandomTests_st201503181632GO, "StateTests/RandomTests/st201503181632GO"} + declare_test!{StateTests_RandomTests_st201503181634CPPJIT, "StateTests/RandomTests/st201503181634CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181635GO, "StateTests/RandomTests/st201503181635GO"} + declare_test!{StateTests_RandomTests_st201503181636GO, "StateTests/RandomTests/st201503181636GO"} + declare_test!{StateTests_RandomTests_st201503181638GO, "StateTests/RandomTests/st201503181638GO"} + declare_test!{StateTests_RandomTests_st201503181639CPPJIT, "StateTests/RandomTests/st201503181639CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181641GO, "StateTests/RandomTests/st201503181641GO"} + declare_test!{StateTests_RandomTests_st201503181645GO, "StateTests/RandomTests/st201503181645GO"} + declare_test!{StateTests_RandomTests_st201503181646GO, "StateTests/RandomTests/st201503181646GO"} + declare_test!{StateTests_RandomTests_st201503181647CPPJIT, "StateTests/RandomTests/st201503181647CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181649CPPJIT, "StateTests/RandomTests/st201503181649CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181650GO, "StateTests/RandomTests/st201503181650GO"} + declare_test!{StateTests_RandomTests_st201503181652CPPJIT, "StateTests/RandomTests/st201503181652CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181653GO, "StateTests/RandomTests/st201503181653GO"} + declare_test!{StateTests_RandomTests_st201503181654GO, "StateTests/RandomTests/st201503181654GO"} + declare_test!{StateTests_RandomTests_st201503181655CPPJIT, "StateTests/RandomTests/st201503181655CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181655GO, "StateTests/RandomTests/st201503181655GO"} + declare_test!{StateTests_RandomTests_st201503181656CPPJIT, "StateTests/RandomTests/st201503181656CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181656GO, "StateTests/RandomTests/st201503181656GO"} + declare_test!{StateTests_RandomTests_st201503181657GO, "StateTests/RandomTests/st201503181657GO"} + declare_test!{StateTests_RandomTests_st201503181658GO, "StateTests/RandomTests/st201503181658GO"} + declare_test!{StateTests_RandomTests_st201503181700GO, "StateTests/RandomTests/st201503181700GO"} + declare_test!{StateTests_RandomTests_st201503181702GO, "StateTests/RandomTests/st201503181702GO"} + declare_test!{StateTests_RandomTests_st201503181703CPPJIT, "StateTests/RandomTests/st201503181703CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181703GO, "StateTests/RandomTests/st201503181703GO"} + declare_test!{StateTests_RandomTests_st201503181704GO, "StateTests/RandomTests/st201503181704GO"} + declare_test!{StateTests_RandomTests_st201503181706GO, "StateTests/RandomTests/st201503181706GO"} + declare_test!{StateTests_RandomTests_st201503181709GO, "StateTests/RandomTests/st201503181709GO"} + declare_test!{StateTests_RandomTests_st201503181711CPPJIT, "StateTests/RandomTests/st201503181711CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181711GO, "StateTests/RandomTests/st201503181711GO"} + declare_test!{StateTests_RandomTests_st201503181713CPPJIT, "StateTests/RandomTests/st201503181713CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181713GO, "StateTests/RandomTests/st201503181713GO"} + declare_test!{StateTests_RandomTests_st201503181714GO, "StateTests/RandomTests/st201503181714GO"} + declare_test!{StateTests_RandomTests_st201503181715CPPJIT, "StateTests/RandomTests/st201503181715CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181715GO, "StateTests/RandomTests/st201503181715GO"} + declare_test!{StateTests_RandomTests_st201503181716GO, "StateTests/RandomTests/st201503181716GO"} + declare_test!{StateTests_RandomTests_st201503181717GO, "StateTests/RandomTests/st201503181717GO"} + declare_test!{StateTests_RandomTests_st201503181720CPPJIT, "StateTests/RandomTests/st201503181720CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181722GO, "StateTests/RandomTests/st201503181722GO"} + declare_test!{StateTests_RandomTests_st201503181723CPPJIT, "StateTests/RandomTests/st201503181723CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181723GO, "StateTests/RandomTests/st201503181723GO"} + declare_test!{StateTests_RandomTests_st201503181724CPPJIT, "StateTests/RandomTests/st201503181724CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181724GO, "StateTests/RandomTests/st201503181724GO"} + declare_test!{StateTests_RandomTests_st201503181725GO, "StateTests/RandomTests/st201503181725GO"} + declare_test!{StateTests_RandomTests_st201503181728GO, "StateTests/RandomTests/st201503181728GO"} + declare_test!{StateTests_RandomTests_st201503181729GO, "StateTests/RandomTests/st201503181729GO"} + declare_test!{StateTests_RandomTests_st201503181730GO, "StateTests/RandomTests/st201503181730GO"} + declare_test!{StateTests_RandomTests_st201503181731CPPJIT, "StateTests/RandomTests/st201503181731CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181732GO, "StateTests/RandomTests/st201503181732GO"} + declare_test!{StateTests_RandomTests_st201503181734CPPJIT, "StateTests/RandomTests/st201503181734CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181734GO, "StateTests/RandomTests/st201503181734GO"} + declare_test!{StateTests_RandomTests_st201503181735GO, "StateTests/RandomTests/st201503181735GO"} + declare_test!{StateTests_RandomTests_st201503181737CPPJIT, "StateTests/RandomTests/st201503181737CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181737GO, "StateTests/RandomTests/st201503181737GO"} + declare_test!{StateTests_RandomTests_st201503181738CPPJIT, "StateTests/RandomTests/st201503181738CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181738GO, "StateTests/RandomTests/st201503181738GO"} + declare_test!{StateTests_RandomTests_st201503181739GO, "StateTests/RandomTests/st201503181739GO"} + declare_test!{StateTests_RandomTests_st201503181740CPPJIT, "StateTests/RandomTests/st201503181740CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181740GO, "StateTests/RandomTests/st201503181740GO"} + declare_test!{StateTests_RandomTests_st201503181742CPPJIT, "StateTests/RandomTests/st201503181742CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181743GO, "StateTests/RandomTests/st201503181743GO"} + declare_test!{StateTests_RandomTests_st201503181744GO, "StateTests/RandomTests/st201503181744GO"} + declare_test!{StateTests_RandomTests_st201503181745CPPJIT, "StateTests/RandomTests/st201503181745CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181746GO, "StateTests/RandomTests/st201503181746GO"} + declare_test!{StateTests_RandomTests_st201503181747GO, "StateTests/RandomTests/st201503181747GO"} + declare_test!{StateTests_RandomTests_st201503181748GO, "StateTests/RandomTests/st201503181748GO"} + declare_test!{StateTests_RandomTests_st201503181749GO, "StateTests/RandomTests/st201503181749GO"} + declare_test!{StateTests_RandomTests_st201503181750CPPJIT, "StateTests/RandomTests/st201503181750CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181750GO, "StateTests/RandomTests/st201503181750GO"} + declare_test!{StateTests_RandomTests_st201503181752GO, "StateTests/RandomTests/st201503181752GO"} + declare_test!{StateTests_RandomTests_st201503181753CPPJIT, "StateTests/RandomTests/st201503181753CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181754CPPJIT, "StateTests/RandomTests/st201503181754CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181754GO, "StateTests/RandomTests/st201503181754GO"} + declare_test!{StateTests_RandomTests_st201503181755CPPJIT, "StateTests/RandomTests/st201503181755CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181755GO, "StateTests/RandomTests/st201503181755GO"} + declare_test!{StateTests_RandomTests_st201503181756GO, "StateTests/RandomTests/st201503181756GO"} + declare_test!{StateTests_RandomTests_st201503181757CPPJIT, "StateTests/RandomTests/st201503181757CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181757GO, "StateTests/RandomTests/st201503181757GO"} + declare_test!{StateTests_RandomTests_st201503181759GO, "StateTests/RandomTests/st201503181759GO"} + declare_test!{StateTests_RandomTests_st201503181800GO, "StateTests/RandomTests/st201503181800GO"} + declare_test!{StateTests_RandomTests_st201503181801GO, "StateTests/RandomTests/st201503181801GO"} + declare_test!{StateTests_RandomTests_st201503181802GO, "StateTests/RandomTests/st201503181802GO"} + declare_test!{StateTests_RandomTests_st201503181803CPPJIT, "StateTests/RandomTests/st201503181803CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181803GO, "StateTests/RandomTests/st201503181803GO"} + declare_test!{StateTests_RandomTests_st201503181804GO, "StateTests/RandomTests/st201503181804GO"} + declare_test!{StateTests_RandomTests_st201503181806GO, "StateTests/RandomTests/st201503181806GO"} + declare_test!{StateTests_RandomTests_st201503181808GO, "StateTests/RandomTests/st201503181808GO"} + declare_test!{StateTests_RandomTests_st201503181809CPPJIT, "StateTests/RandomTests/st201503181809CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181812CPPJIT, "StateTests/RandomTests/st201503181812CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181812GO, "StateTests/RandomTests/st201503181812GO"} + declare_test!{StateTests_RandomTests_st201503181814CPPJIT, "StateTests/RandomTests/st201503181814CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181815GO, "StateTests/RandomTests/st201503181815GO"} + declare_test!{StateTests_RandomTests_st201503181816CPPJIT, "StateTests/RandomTests/st201503181816CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181817CPPJIT, "StateTests/RandomTests/st201503181817CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181819GO, "StateTests/RandomTests/st201503181819GO"} + declare_test!{StateTests_RandomTests_st201503181821GO, "StateTests/RandomTests/st201503181821GO"} + declare_test!{StateTests_RandomTests_st201503181822GO, "StateTests/RandomTests/st201503181822GO"} + declare_test!{StateTests_RandomTests_st201503181823GO, "StateTests/RandomTests/st201503181823GO"} + declare_test!{StateTests_RandomTests_st201503181824GO, "StateTests/RandomTests/st201503181824GO"} + declare_test!{StateTests_RandomTests_st201503181825GO, "StateTests/RandomTests/st201503181825GO"} + declare_test!{StateTests_RandomTests_st201503181829GO, "StateTests/RandomTests/st201503181829GO"} + declare_test!{StateTests_RandomTests_st201503181830CPPJIT, "StateTests/RandomTests/st201503181830CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181833GO, "StateTests/RandomTests/st201503181833GO"} + declare_test!{StateTests_RandomTests_st201503181834CPPJIT, "StateTests/RandomTests/st201503181834CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181834GO, "StateTests/RandomTests/st201503181834GO"} + declare_test!{StateTests_RandomTests_st201503181837GO, "StateTests/RandomTests/st201503181837GO"} + declare_test!{StateTests_RandomTests_st201503181840GO, "StateTests/RandomTests/st201503181840GO"} + declare_test!{StateTests_RandomTests_st201503181842GO, "StateTests/RandomTests/st201503181842GO"} + declare_test!{StateTests_RandomTests_st201503181843GO, "StateTests/RandomTests/st201503181843GO"} + declare_test!{StateTests_RandomTests_st201503181844GO, "StateTests/RandomTests/st201503181844GO"} + declare_test!{StateTests_RandomTests_st201503181845GO, "StateTests/RandomTests/st201503181845GO"} + declare_test!{StateTests_RandomTests_st201503181846GO, "StateTests/RandomTests/st201503181846GO"} + declare_test!{StateTests_RandomTests_st201503181847GO, "StateTests/RandomTests/st201503181847GO"} + declare_test!{StateTests_RandomTests_st201503181848GO, "StateTests/RandomTests/st201503181848GO"} + declare_test!{StateTests_RandomTests_st201503181849GO, "StateTests/RandomTests/st201503181849GO"} + declare_test!{StateTests_RandomTests_st201503181850GO, "StateTests/RandomTests/st201503181850GO"} + declare_test!{StateTests_RandomTests_st201503181851CPPJIT, "StateTests/RandomTests/st201503181851CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181851GO, "StateTests/RandomTests/st201503181851GO"} + declare_test!{StateTests_RandomTests_st201503181852CPPJIT, "StateTests/RandomTests/st201503181852CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181854GO, "StateTests/RandomTests/st201503181854GO"} + declare_test!{StateTests_RandomTests_st201503181855CPPJIT, "StateTests/RandomTests/st201503181855CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181857PYTHON, "StateTests/RandomTests/st201503181857PYTHON"} + declare_test!{StateTests_RandomTests_st201503181859GO, "StateTests/RandomTests/st201503181859GO"} + declare_test!{StateTests_RandomTests_st201503181900GO, "StateTests/RandomTests/st201503181900GO"} + declare_test!{StateTests_RandomTests_st201503181903GO, "StateTests/RandomTests/st201503181903GO"} + declare_test!{StateTests_RandomTests_st201503181904GO, "StateTests/RandomTests/st201503181904GO"} + declare_test!{StateTests_RandomTests_st201503181906GO, "StateTests/RandomTests/st201503181906GO"} + declare_test!{StateTests_RandomTests_st201503181907GO, "StateTests/RandomTests/st201503181907GO"} + declare_test!{StateTests_RandomTests_st201503181910GO, "StateTests/RandomTests/st201503181910GO"} + declare_test!{StateTests_RandomTests_st201503181915GO, "StateTests/RandomTests/st201503181915GO"} + declare_test!{StateTests_RandomTests_st201503181919CPPJIT, "StateTests/RandomTests/st201503181919CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181919PYTHON, "StateTests/RandomTests/st201503181919PYTHON"} + declare_test!{StateTests_RandomTests_st201503181920GO, "StateTests/RandomTests/st201503181920GO"} + declare_test!{StateTests_RandomTests_st201503181922GO, "StateTests/RandomTests/st201503181922GO"} + declare_test!{StateTests_RandomTests_st201503181926GO, "StateTests/RandomTests/st201503181926GO"} + declare_test!{StateTests_RandomTests_st201503181929GO, "StateTests/RandomTests/st201503181929GO"} + declare_test!{StateTests_RandomTests_st201503181931CPPJIT, "StateTests/RandomTests/st201503181931CPPJIT"} + declare_test!{StateTests_RandomTests_st201503181931GO, "StateTests/RandomTests/st201503181931GO"} + declare_test!{StateTests_RandomTests_st201503181931PYTHON, "StateTests/RandomTests/st201503181931PYTHON"} + declare_test!{StateTests_RandomTests_st201503191646GO, "StateTests/RandomTests/st201503191646GO"} + declare_test!{StateTests_RandomTests_st201503200837JS, "StateTests/RandomTests/st201503200837JS"} + declare_test!{StateTests_RandomTests_st201503200838JS, "StateTests/RandomTests/st201503200838JS"} + declare_test!{StateTests_RandomTests_st201503200841JS, "StateTests/RandomTests/st201503200841JS"} + declare_test!{StateTests_RandomTests_st201503200848JS, "StateTests/RandomTests/st201503200848JS"} + declare_test!{StateTests_RandomTests_st201503240609JS, "StateTests/RandomTests/st201503240609JS"} + declare_test!{StateTests_RandomTests_st201503302200JS, "StateTests/RandomTests/st201503302200JS"} + declare_test!{StateTests_RandomTests_st201503302202JS, "StateTests/RandomTests/st201503302202JS"} + declare_test!{StateTests_RandomTests_st201503302206JS, "StateTests/RandomTests/st201503302206JS"} + declare_test!{StateTests_RandomTests_st201503302208JS, "StateTests/RandomTests/st201503302208JS"} + declare_test!{StateTests_RandomTests_st201503302210JS, "StateTests/RandomTests/st201503302210JS"} + declare_test!{StateTests_RandomTests_st201503302211JS, "StateTests/RandomTests/st201503302211JS"} + declare_test!{StateTests_RandomTests_st201504011535GO, "StateTests/RandomTests/st201504011535GO"} + declare_test!{StateTests_RandomTests_st201504011536GO, "StateTests/RandomTests/st201504011536GO"} + declare_test!{StateTests_RandomTests_st201504011547GO, "StateTests/RandomTests/st201504011547GO"} + declare_test!{StateTests_RandomTests_st201504011916JS, "StateTests/RandomTests/st201504011916JS"} + declare_test!{StateTests_RandomTests_st201504012130JS, "StateTests/RandomTests/st201504012130JS"} + declare_test!{StateTests_RandomTests_st201504012259JS, "StateTests/RandomTests/st201504012259JS"} + declare_test!{StateTests_RandomTests_st201504012359JS, "StateTests/RandomTests/st201504012359JS"} + declare_test!{StateTests_RandomTests_st201504020305JS, "StateTests/RandomTests/st201504020305JS"} + declare_test!{StateTests_RandomTests_st201504020400JS, "StateTests/RandomTests/st201504020400JS"} + declare_test!{StateTests_RandomTests_st201504020428JS, "StateTests/RandomTests/st201504020428JS"} + declare_test!{StateTests_RandomTests_st201504020431JS, "StateTests/RandomTests/st201504020431JS"} + declare_test!{StateTests_RandomTests_st201504020444JS, "StateTests/RandomTests/st201504020444JS"} + declare_test!{StateTests_RandomTests_st201504020538JS, "StateTests/RandomTests/st201504020538JS"} + declare_test!{StateTests_RandomTests_st201504020639JS, "StateTests/RandomTests/st201504020639JS"} + declare_test!{StateTests_RandomTests_st201504020836JS, "StateTests/RandomTests/st201504020836JS"} + declare_test!{StateTests_RandomTests_st201504020910JS, "StateTests/RandomTests/st201504020910JS"} + declare_test!{StateTests_RandomTests_st201504021057JS, "StateTests/RandomTests/st201504021057JS"} + declare_test!{StateTests_RandomTests_st201504021104JS, "StateTests/RandomTests/st201504021104JS"} + declare_test!{StateTests_RandomTests_st201504021237CPPJIT, "StateTests/RandomTests/st201504021237CPPJIT"} + declare_test!{StateTests_RandomTests_st201504021237GO, "StateTests/RandomTests/st201504021237GO"} + declare_test!{StateTests_RandomTests_st201504021237JS, "StateTests/RandomTests/st201504021237JS"} + declare_test!{StateTests_RandomTests_st201504021237PYTHON, "StateTests/RandomTests/st201504021237PYTHON"} + declare_test!{StateTests_RandomTests_st201504021949JS, "StateTests/RandomTests/st201504021949JS"} + declare_test!{StateTests_RandomTests_st201504022003CPPJIT, "StateTests/RandomTests/st201504022003CPPJIT"} + declare_test!{StateTests_RandomTests_st201504022124JS, "StateTests/RandomTests/st201504022124JS"} + declare_test!{StateTests_RandomTests_st201504030138JS, "StateTests/RandomTests/st201504030138JS"} + declare_test!{StateTests_RandomTests_st201504030646JS, "StateTests/RandomTests/st201504030646JS"} + declare_test!{StateTests_RandomTests_st201504030709JS, "StateTests/RandomTests/st201504030709JS"} + declare_test!{StateTests_RandomTests_st201504031133JS, "StateTests/RandomTests/st201504031133JS"} + declare_test!{StateTests_RandomTests_st201504031446JS, "StateTests/RandomTests/st201504031446JS"} + declare_test!{StateTests_RandomTests_st201504031841JS, "StateTests/RandomTests/st201504031841JS"} + declare_test!{StateTests_RandomTests_st201504041605JS, "StateTests/RandomTests/st201504041605JS"} + declare_test!{StateTests_RandomTests_st201504042052JS, "StateTests/RandomTests/st201504042052JS"} + declare_test!{StateTests_RandomTests_st201504042226CPPJIT, "StateTests/RandomTests/st201504042226CPPJIT"} + declare_test!{StateTests_RandomTests_st201504042355CPPJIT, "StateTests/RandomTests/st201504042355CPPJIT"} + declare_test!{StateTests_RandomTests_st201504050059JS, "StateTests/RandomTests/st201504050059JS"} + declare_test!{StateTests_RandomTests_st201504050733JS, "StateTests/RandomTests/st201504050733JS"} + declare_test!{StateTests_RandomTests_st201504051540JS, "StateTests/RandomTests/st201504051540JS"} + declare_test!{StateTests_RandomTests_st201504051944CPPJIT, "StateTests/RandomTests/st201504051944CPPJIT"} + declare_test!{StateTests_RandomTests_st201504052008CPPJIT, "StateTests/RandomTests/st201504052008CPPJIT"} + declare_test!{StateTests_RandomTests_st201504052014GO, "StateTests/RandomTests/st201504052014GO"} + declare_test!{StateTests_RandomTests_st201504052031CPPJIT, "StateTests/RandomTests/st201504052031CPPJIT"} + declare_test!{StateTests_RandomTests_st201504060057CPPJIT, "StateTests/RandomTests/st201504060057CPPJIT"} + declare_test!{StateTests_RandomTests_st201504060418CPPJIT, "StateTests/RandomTests/st201504060418CPPJIT"} + declare_test!{StateTests_RandomTests_st201504061106CPPJIT, "StateTests/RandomTests/st201504061106CPPJIT"} + declare_test!{StateTests_RandomTests_st201504061134CPPJIT, "StateTests/RandomTests/st201504061134CPPJIT"} + declare_test!{StateTests_RandomTests_st201504062033CPPJIT, "StateTests/RandomTests/st201504062033CPPJIT"} + declare_test!{StateTests_RandomTests_st201504062046CPPJIT, "StateTests/RandomTests/st201504062046CPPJIT"} + declare_test!{StateTests_RandomTests_st201504062314CPPJIT, "StateTests/RandomTests/st201504062314CPPJIT"} + declare_test!{StateTests_RandomTests_st201504070746JS, "StateTests/RandomTests/st201504070746JS"} + declare_test!{StateTests_RandomTests_st201504070816CPPJIT, "StateTests/RandomTests/st201504070816CPPJIT"} + declare_test!{StateTests_RandomTests_st201504070836CPPJIT, "StateTests/RandomTests/st201504070836CPPJIT"} + declare_test!{StateTests_RandomTests_st201504070839CPPJIT, "StateTests/RandomTests/st201504070839CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071041CPPJIT, "StateTests/RandomTests/st201504071041CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071056CPPJIT, "StateTests/RandomTests/st201504071056CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071621CPPJIT, "StateTests/RandomTests/st201504071621CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071653CPPJIT, "StateTests/RandomTests/st201504071653CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071750CPPJIT, "StateTests/RandomTests/st201504071750CPPJIT"} + declare_test!{StateTests_RandomTests_st201504071905CPPJIT, "StateTests/RandomTests/st201504071905CPPJIT"} + declare_test!{StateTests_RandomTests_st201504080454CPPJIT, "StateTests/RandomTests/st201504080454CPPJIT"} + declare_test!{StateTests_RandomTests_st201504080457CPPJIT, "StateTests/RandomTests/st201504080457CPPJIT"} + declare_test!{StateTests_RandomTests_st201504080650CPPJIT, "StateTests/RandomTests/st201504080650CPPJIT"} + declare_test!{StateTests_RandomTests_st201504080840CPPJIT, "StateTests/RandomTests/st201504080840CPPJIT"} + declare_test!{StateTests_RandomTests_st201504080948CPPJIT, "StateTests/RandomTests/st201504080948CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081100CPPJIT, "StateTests/RandomTests/st201504081100CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081134CPPJIT, "StateTests/RandomTests/st201504081134CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081138CPPJIT, "StateTests/RandomTests/st201504081138CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081611CPPJIT, "StateTests/RandomTests/st201504081611CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081841JAVA, "StateTests/RandomTests/st201504081841JAVA"} + declare_test!{StateTests_RandomTests_st201504081842JAVA, "StateTests/RandomTests/st201504081842JAVA"} + declare_test!{StateTests_RandomTests_st201504081843JAVA, "StateTests/RandomTests/st201504081843JAVA"} + declare_test!{StateTests_RandomTests_st201504081928CPPJIT, "StateTests/RandomTests/st201504081928CPPJIT"} + declare_test!{StateTests_RandomTests_st201504081953JAVA, "StateTests/RandomTests/st201504081953JAVA"} + declare_test!{StateTests_RandomTests_st201504081954JAVA, "StateTests/RandomTests/st201504081954JAVA"} + declare_test!{StateTests_RandomTests_st201504081955JAVA, "StateTests/RandomTests/st201504081955JAVA"} + declare_test!{StateTests_RandomTests_st201504081956JAVA, "StateTests/RandomTests/st201504081956JAVA"} + declare_test!{StateTests_RandomTests_st201504081957JAVA, "StateTests/RandomTests/st201504081957JAVA"} + declare_test!{StateTests_RandomTests_st201504082000JAVA, "StateTests/RandomTests/st201504082000JAVA"} + declare_test!{StateTests_RandomTests_st201504082001JAVA, "StateTests/RandomTests/st201504082001JAVA"} + declare_test!{StateTests_RandomTests_st201504082002JAVA, "StateTests/RandomTests/st201504082002JAVA"} + declare_test!{StateTests_RandomTests_st201504090553CPPJIT, "StateTests/RandomTests/st201504090553CPPJIT"} + declare_test!{StateTests_RandomTests_st201504090657CPPJIT, "StateTests/RandomTests/st201504090657CPPJIT"} + declare_test!{StateTests_RandomTests_st201504091403CPPJIT, "StateTests/RandomTests/st201504091403CPPJIT"} + declare_test!{StateTests_RandomTests_st201504091641CPPJIT, "StateTests/RandomTests/st201504091641CPPJIT"} + declare_test!{StateTests_RandomTests_st201504092303CPPJIT, "StateTests/RandomTests/st201504092303CPPJIT"} + declare_test!{StateTests_RandomTests_st201504100125CPPJIT, "StateTests/RandomTests/st201504100125CPPJIT"} + declare_test!{StateTests_RandomTests_st201504100215CPPJIT, "StateTests/RandomTests/st201504100215CPPJIT"} + declare_test!{StateTests_RandomTests_st201504100226PYTHON, "StateTests/RandomTests/st201504100226PYTHON"} + declare_test!{StateTests_RandomTests_st201504100308CPPJIT, "StateTests/RandomTests/st201504100308CPPJIT"} + declare_test!{StateTests_RandomTests_st201504100337CPPJIT, "StateTests/RandomTests/st201504100337CPPJIT"} + declare_test!{StateTests_RandomTests_st201504100341CPPJIT, "StateTests/RandomTests/st201504100341CPPJIT"} + declare_test!{StateTests_RandomTests_st201504101009CPPJIT, "StateTests/RandomTests/st201504101009CPPJIT"} + declare_test!{StateTests_RandomTests_st201504101150CPPJIT, "StateTests/RandomTests/st201504101150CPPJIT"} + declare_test!{StateTests_RandomTests_st201504101223CPPJIT, "StateTests/RandomTests/st201504101223CPPJIT"} + declare_test!{StateTests_RandomTests_st201504101338CPPJIT, "StateTests/RandomTests/st201504101338CPPJIT"} + declare_test!{StateTests_RandomTests_st201504101754PYTHON, "StateTests/RandomTests/st201504101754PYTHON"} + declare_test!{StateTests_RandomTests_st201504111554CPPJIT, "StateTests/RandomTests/st201504111554CPPJIT"} + declare_test!{StateTests_RandomTests_st201504130653JS, "StateTests/RandomTests/st201504130653JS"} + declare_test!{StateTests_RandomTests_st201504131821CPPJIT, "StateTests/RandomTests/st201504131821CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140229CPPJIT, "StateTests/RandomTests/st201504140229CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140236CPPJIT, "StateTests/RandomTests/st201504140236CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140359CPPJIT, "StateTests/RandomTests/st201504140359CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140750CPPJIT, "StateTests/RandomTests/st201504140750CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140818CPPJIT, "StateTests/RandomTests/st201504140818CPPJIT"} + declare_test!{StateTests_RandomTests_st201504140900CPPJIT, "StateTests/RandomTests/st201504140900CPPJIT"} + declare_test!{StateTests_RandomTests_st201504150854CPPJIT, "StateTests/RandomTests/st201504150854CPPJIT"} + declare_test!{StateTests_RandomTests_st201504151057CPPJIT, "StateTests/RandomTests/st201504151057CPPJIT"} + declare_test!{StateTests_RandomTests_st201504202124CPPJIT, "StateTests/RandomTests/st201504202124CPPJIT"} + declare_test!{StateTests_RandomTests_st201504210245CPPJIT, "StateTests/RandomTests/st201504210245CPPJIT"} + declare_test!{StateTests_RandomTests_st201504210957CPPJIT, "StateTests/RandomTests/st201504210957CPPJIT"} + declare_test!{StateTests_RandomTests_st201504211739CPPJIT, "StateTests/RandomTests/st201504211739CPPJIT"} + declare_test!{StateTests_RandomTests_st201504212038CPPJIT, "StateTests/RandomTests/st201504212038CPPJIT"} + declare_test!{StateTests_RandomTests_st201504230729CPPJIT, "StateTests/RandomTests/st201504230729CPPJIT"} + declare_test!{StateTests_RandomTests_st201504231639CPPJIT, "StateTests/RandomTests/st201504231639CPPJIT"} + declare_test!{StateTests_RandomTests_st201504231710CPPJIT, "StateTests/RandomTests/st201504231710CPPJIT"} + declare_test!{StateTests_RandomTests_st201504231742CPPJIT, "StateTests/RandomTests/st201504231742CPPJIT"} + declare_test!{StateTests_RandomTests_st201504232350CPPJIT, "StateTests/RandomTests/st201504232350CPPJIT"} + declare_test!{StateTests_RandomTests_st201504240140CPPJIT, "StateTests/RandomTests/st201504240140CPPJIT"} + declare_test!{StateTests_RandomTests_st201504240220CPPJIT, "StateTests/RandomTests/st201504240220CPPJIT"} + declare_test!{StateTests_RandomTests_st201504240351CPPJIT, "StateTests/RandomTests/st201504240351CPPJIT"} + declare_test!{StateTests_RandomTests_st201504240817CPPJIT, "StateTests/RandomTests/st201504240817CPPJIT"} + declare_test!{StateTests_RandomTests_st201504241118CPPJIT, "StateTests/RandomTests/st201504241118CPPJIT"} + declare_test!{StateTests_RandomTests_st201505021810CPPJIT, "StateTests/RandomTests/st201505021810CPPJIT"} + declare_test!{StateTests_RandomTests_st201505050557JS, "StateTests/RandomTests/st201505050557JS"} + declare_test!{StateTests_RandomTests_st201505050929GO, "StateTests/RandomTests/st201505050929GO"} + declare_test!{StateTests_RandomTests_st201505050942PYTHON, "StateTests/RandomTests/st201505050942PYTHON"} + declare_test!{StateTests_RandomTests_st201505051004PYTHON, "StateTests/RandomTests/st201505051004PYTHON"} + declare_test!{StateTests_RandomTests_st201505051016PYTHON, "StateTests/RandomTests/st201505051016PYTHON"} + declare_test!{StateTests_RandomTests_st201505051114GO, "StateTests/RandomTests/st201505051114GO"} + declare_test!{StateTests_RandomTests_st201505051238GO, "StateTests/RandomTests/st201505051238GO"} + declare_test!{StateTests_RandomTests_st201505051249GO, "StateTests/RandomTests/st201505051249GO"} + declare_test!{StateTests_RandomTests_st201505051558PYTHON, "StateTests/RandomTests/st201505051558PYTHON"} + declare_test!{StateTests_RandomTests_st201505051611PYTHON, "StateTests/RandomTests/st201505051611PYTHON"} + declare_test!{StateTests_RandomTests_st201505051648JS, "StateTests/RandomTests/st201505051648JS"} + declare_test!{StateTests_RandomTests_st201505051710GO, "StateTests/RandomTests/st201505051710GO"} + declare_test!{StateTests_RandomTests_st201505052013GO, "StateTests/RandomTests/st201505052013GO"} + declare_test!{StateTests_RandomTests_st201505052102JS, "StateTests/RandomTests/st201505052102JS"} + declare_test!{StateTests_RandomTests_st201505052235GO, "StateTests/RandomTests/st201505052235GO"} + declare_test!{StateTests_RandomTests_st201505052238JS, "StateTests/RandomTests/st201505052238JS"} + declare_test!{StateTests_RandomTests_st201505052242PYTHON, "StateTests/RandomTests/st201505052242PYTHON"} + declare_test!{StateTests_RandomTests_st201505052343PYTHON, "StateTests/RandomTests/st201505052343PYTHON"} + declare_test!{StateTests_RandomTests_st201505060120GO, "StateTests/RandomTests/st201505060120GO"} + declare_test!{StateTests_RandomTests_st201505060121GO, "StateTests/RandomTests/st201505060121GO"} + declare_test!{StateTests_RandomTests_st201505060136PYTHON, "StateTests/RandomTests/st201505060136PYTHON"} + declare_test!{StateTests_RandomTests_st201505060646JS, "StateTests/RandomTests/st201505060646JS"} + declare_test!{StateTests_RandomTests_st201505252314CPPJIT, "StateTests/RandomTests/st201505252314CPPJIT"} + declare_test!{StateTests_RandomTests_st201505272131CPPJIT, "StateTests/RandomTests/st201505272131CPPJIT"} + declare_test!{StateTests_RandomTests_st201506040034GO, "StateTests/RandomTests/st201506040034GO"} + declare_test!{StateTests_RandomTests_st201506040157GO, "StateTests/RandomTests/st201506040157GO"} + declare_test!{StateTests_RandomTests_st201506052130GO, "StateTests/RandomTests/st201506052130GO"} + declare_test!{StateTests_RandomTests_st201506060929GO, "StateTests/RandomTests/st201506060929GO"} + declare_test!{StateTests_RandomTests_st201506061255GO, "StateTests/RandomTests/st201506061255GO"} + declare_test!{StateTests_RandomTests_st201506062331GO, "StateTests/RandomTests/st201506062331GO"} + declare_test!{StateTests_RandomTests_st201506070548GO, "StateTests/RandomTests/st201506070548GO"} + declare_test!{StateTests_RandomTests_st201506071050GO, "StateTests/RandomTests/st201506071050GO"} + declare_test!{StateTests_RandomTests_st201506071624GO, "StateTests/RandomTests/st201506071624GO"} + declare_test!{StateTests_RandomTests_st201506071819GO, "StateTests/RandomTests/st201506071819GO"} + declare_test!{StateTests_RandomTests_st201506072007GO, "StateTests/RandomTests/st201506072007GO"} + declare_test!{StateTests_RandomTests_st201506080556GO, "StateTests/RandomTests/st201506080556GO"} + declare_test!{StateTests_RandomTests_st201506080721GO, "StateTests/RandomTests/st201506080721GO"} + declare_test!{StateTests_RandomTests_st201506091836GO, "StateTests/RandomTests/st201506091836GO"} + declare_test!{StateTests_RandomTests_st201506092032GO, "StateTests/RandomTests/st201506092032GO"} + declare_test!{StateTests_RandomTests_st201506101359JS, "StateTests/RandomTests/st201506101359JS"} + declare_test!{StateTests_RandomTests_st201507030359GO, "StateTests/RandomTests/st201507030359GO"} +} diff --git a/ethcore/src/tests/helpers.rs b/ethcore/src/tests/helpers.rs index 787f90262c..2fab04214c 100644 --- a/ethcore/src/tests/helpers.rs +++ b/ethcore/src/tests/helpers.rs @@ -35,19 +35,20 @@ use db::COL_STATE; pub enum ChainEra { Frontier, Homestead, - DaoHardfork, + Eip150, + TransitionTest, } pub struct TestEngine { engine: Arc, - max_depth: usize + max_depth: usize, } impl TestEngine { pub fn new(max_depth: usize) -> TestEngine { TestEngine { engine: ethereum::new_frontier_test().engine, - max_depth: max_depth + max_depth: max_depth, } } } diff --git a/json/src/spec/engine.rs b/json/src/spec/engine.rs index 3813b1756e..5c8f887587 100644 --- a/json/src/spec/engine.rs +++ b/json/src/spec/engine.rs @@ -63,7 +63,7 @@ mod tests { "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit" : "0x", + "homesteadTransition" : "0x", "daoHardforkTransition": "0xffffffffffffffff", "daoHardforkBeneficiary": "0x0000000000000000000000000000000000000000", "daoHardforkAccounts": [] diff --git a/json/src/spec/ethash.rs b/json/src/spec/ethash.rs index d20ab39922..025ae84750 100644 --- a/json/src/spec/ethash.rs +++ b/json/src/spec/ethash.rs @@ -44,8 +44,8 @@ pub struct EthashParams { pub registrar: Option

, /// See main EthashParams docs. - #[serde(rename="frontierCompatibilityModeLimit")] - pub frontier_compatibility_mode_limit: Option, + #[serde(rename="homesteadTransition")] + pub homestead_transition: Option, /// See main EthashParams docs. #[serde(rename="daoHardforkTransition")] @@ -66,6 +66,10 @@ pub struct EthashParams { /// See main EthashParams docs. #[serde(rename="bombDefuseTransition")] pub bomb_defuse_transition: Option, + + /// See main EthashParams docs. + #[serde(rename="eip150Transition")] + pub eip150_transition: Option, } /// Ethash engine deserialization. @@ -90,7 +94,7 @@ mod tests { "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar": "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0x42", + "homesteadTransition": "0x42", "daoHardforkTransition": "0x08", "daoHardforkBeneficiary": "0xabcabcabcabcabcabcabcabcabcabcabcabcabca", "daoHardforkAccounts": [ @@ -117,7 +121,8 @@ mod tests { ], "difficultyHardforkTransition": "0x59d9", "difficultyHardforkBoundDivisor": "0x0200", - "bombDefuseTransition": "0x42" + "bombDefuseTransition": "0x42", + "eip150Transition": "0x42" } }"#; diff --git a/json/src/spec/params.rs b/json/src/spec/params.rs index 676feff931..ba81fb48ad 100644 --- a/json/src/spec/params.rs +++ b/json/src/spec/params.rs @@ -53,7 +53,7 @@ mod tests { #[test] fn params_deserialization() { let s = r#"{ - "frontierCompatibilityModeLimit": "0x118c30", + "homesteadTransition": "0x118c30", "maximumExtraDataSize": "0x20", "networkID" : "0x1", "subprotocolName" : "exp", diff --git a/json/src/spec/spec.rs b/json/src/spec/spec.rs index 27c27ce0a0..544407cb8d 100644 --- a/json/src/spec/spec.rs +++ b/json/src/spec/spec.rs @@ -66,7 +66,7 @@ mod tests { "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit" : "0x", + "homesteadTransition" : "0x", "daoHardforkTransition": "0xffffffffffffffff", "daoHardforkBeneficiary": "0x0000000000000000000000000000000000000000", "daoHardforkAccounts": [] @@ -75,7 +75,7 @@ mod tests { }, "params": { "accountStartNonce": "0x0100000", - "frontierCompatibilityModeLimit": "0x789b0", + "homesteadTransition": "0x789b0", "maximumExtraDataSize": "0x20", "minGasLimit": "0x1388", "networkID" : "0x2", diff --git a/rpc/src/v1/tests/eth.rs b/rpc/src/v1/tests/eth.rs index 97e4d3bea5..ff531d57a7 100644 --- a/rpc/src/v1/tests/eth.rs +++ b/rpc/src/v1/tests/eth.rs @@ -208,7 +208,7 @@ const TRANSACTION_COUNT_SPEC: &'static [u8] = br#"{ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0xffffffffffffffff", + "homesteadTransition": "0xffffffffffffffff", "daoHardforkTransition": "0xffffffffffffffff", "daoHardforkBeneficiary": "0x0000000000000000000000000000000000000000", "daoHardforkAccounts": [] @@ -256,7 +256,7 @@ const POSITIVE_NONCE_SPEC: &'static [u8] = br#"{ "durationLimit": "0x0d", "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", - "frontierCompatibilityModeLimit": "0xffffffffffffffff", + "homesteadTransition": "0xffffffffffffffff", "daoHardforkTransition": "0xffffffffffffffff", "daoHardforkBeneficiary": "0x0000000000000000000000000000000000000000", "daoHardforkAccounts": [] -- GitLab From 03c1559eadce34e66c4805f240adf018678a9cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Sat, 15 Oct 2016 14:44:08 +0200 Subject: [PATCH 055/393] Support for decryption in Signer (#2421) * Adding some tests * Implementing decrypt in queue * Removing code duplication. * Printing public key in ethstore * Bump UI * Normalizing dapps format for signer. * Fixing tests compilation * fix whitespace [ci:skip] --- Cargo.lock | 13 +- ethcore/src/account_provider.rs | 95 ++++++------- ethcore/src/engines/basic_authority.rs | 2 +- ethstore/src/account/safe_account.rs | 7 +- ethstore/src/bin/ethstore.rs | 16 ++- ethstore/src/ethstore.rs | 7 +- ethstore/src/secret_store.rs | 3 +- rpc/src/v1/helpers/dispatch.rs | 78 ++++++----- rpc/src/v1/helpers/errors.rs | 9 ++ rpc/src/v1/helpers/requests.rs | 2 + rpc/src/v1/impls/eth_signing.rs | 151 +++++++++++---------- rpc/src/v1/impls/ethcore.rs | 6 +- rpc/src/v1/impls/personal.rs | 15 +- rpc/src/v1/impls/personal_signer.rs | 12 +- rpc/src/v1/tests/eth.rs | 5 +- rpc/src/v1/tests/mocked/eth.rs | 8 +- rpc/src/v1/tests/mocked/eth_signing.rs | 76 ++++++++++- rpc/src/v1/tests/mocked/ethcore.rs | 23 +++- rpc/src/v1/tests/mocked/personal.rs | 4 +- rpc/src/v1/tests/mocked/personal_signer.rs | 2 +- rpc/src/v1/traits/eth.rs | 44 ------ rpc/src/v1/traits/eth_signing.rs | 63 +++++++++ rpc/src/v1/traits/mod.rs | 5 +- rpc/src/v1/types/confirmations.rs | 18 ++- signer/Cargo.toml | 3 +- signer/src/lib.rs | 2 + signer/src/ws_server/session.rs | 40 ++++-- 27 files changed, 444 insertions(+), 265 deletions(-) create mode 100644 rpc/src/v1/traits/eth_signing.rs diff --git a/Cargo.lock b/Cargo.lock index cee7127277..2cfb39db80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -505,6 +505,7 @@ dependencies = [ "ethcore-util 1.4.0", "jsonrpc-core 3.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", "parity-dapps-signer 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1167,7 +1168,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parity-dapps" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#926b09b66c4940b09dc82c52adb4afd9e31155bc" +source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ "aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1181,7 +1182,7 @@ dependencies = [ [[package]] name = "parity-dapps-home" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#926b09b66c4940b09dc82c52adb4afd9e31155bc" +source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", ] @@ -1189,7 +1190,7 @@ dependencies = [ [[package]] name = "parity-dapps-signer" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#926b09b66c4940b09dc82c52adb4afd9e31155bc" +source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", ] @@ -1197,7 +1198,7 @@ dependencies = [ [[package]] name = "parity-dapps-status" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#926b09b66c4940b09dc82c52adb4afd9e31155bc" +source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", ] @@ -1205,7 +1206,7 @@ dependencies = [ [[package]] name = "parity-dapps-wallet" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#926b09b66c4940b09dc82c52adb4afd9e31155bc" +source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", ] @@ -1851,7 +1852,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ws" version = "0.5.2" -source = "git+https://github.com/ethcore/ws-rs.git?branch=mio-upstream-stable#afbff59776ce16ccec5ee9e218b8891830ee6fdf" +source = "git+https://github.com/ethcore/ws-rs.git?branch=mio-upstream-stable#609b21fdab96c8fffedec8699755ce3bea9454cb" dependencies = [ "bytes 0.4.0-dev (git+https://github.com/carllerche/bytes)", "httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ethcore/src/account_provider.rs b/ethcore/src/account_provider.rs index 851d015bac..3f4511f4ba 100644 --- a/ethcore/src/account_provider.rs +++ b/ethcore/src/account_provider.rs @@ -23,7 +23,7 @@ use std::time::{Instant, Duration}; use util::{Mutex, RwLock}; use ethstore::{SecretStore, Error as SSError, SafeAccount, EthStore}; use ethstore::dir::{KeyDirectory}; -use ethstore::ethkey::{Address, Message, Secret, Random, Generator}; +use ethstore::ethkey::{Address, Message, Public, Secret, Random, Generator}; use ethjson::misc::AccountMeta; pub use ethstore::ethkey::Signature; @@ -182,9 +182,16 @@ impl AccountProvider { /// Creates new random account. pub fn new_account(&self, password: &str) -> Result { - let secret = Random.generate().unwrap().secret().clone(); + self.new_account_and_public(password).map(|d| d.0) + } + + /// Creates new random account and returns address and public key + pub fn new_account_and_public(&self, password: &str) -> Result<(Address, Public), Error> { + let acc = Random.generate().unwrap(); + let public = acc.public().clone(); + let secret = acc.secret().clone(); let address = try!(self.sstore.insert_account(secret, password)); - Ok(address) + Ok((address, public)) } /// Inserts new account into underlying store. @@ -280,6 +287,21 @@ impl AccountProvider { Ok(()) } + fn password(&self, account: &Address) -> Result { + let mut unlocked = self.unlocked.lock(); + let data = try!(unlocked.get(account).ok_or(Error::NotUnlocked)).clone(); + if let Unlock::Temp = data.unlock { + unlocked.remove(account).expect("data exists: so key must exist: qed"); + } + if let Unlock::Timed((ref start, ref duration)) = data.unlock { + if start.elapsed() > Duration::from_millis(*duration as u64) { + unlocked.remove(account).expect("data exists: so key must exist: qed"); + return Err(Error::NotUnlocked); + } + } + Ok(data.password.clone()) + } + /// Unlocks account permanently. pub fn unlock_account_permanently(&self, account: Address, password: String) -> Result<(), Error> { self.unlock_account(account, password, Unlock::Perm) @@ -301,51 +323,16 @@ impl AccountProvider { unlocked.get(&account).is_some() } - /// Signs the message. Account must be unlocked. - pub fn sign(&self, account: Address, message: Message) -> Result { - let data = { - let mut unlocked = self.unlocked.lock(); - let data = try!(unlocked.get(&account).ok_or(Error::NotUnlocked)).clone(); - if let Unlock::Temp = data.unlock { - unlocked.remove(&account).expect("data exists: so key must exist: qed"); - } - if let Unlock::Timed((ref start, ref duration)) = data.unlock { - if start.elapsed() > Duration::from_millis(*duration as u64) { - unlocked.remove(&account).expect("data exists: so key must exist: qed"); - return Err(Error::NotUnlocked); - } - } - data - }; - - let signature = try!(self.sstore.sign(&account, &data.password, &message)); - Ok(signature) - } - - /// Decrypts a message. Account must be unlocked. - pub fn decrypt(&self, account: Address, shared_mac: &[u8], message: &[u8]) -> Result, Error> { - let data = { - let mut unlocked = self.unlocked.lock(); - let data = try!(unlocked.get(&account).ok_or(Error::NotUnlocked)).clone(); - if let Unlock::Temp = data.unlock { - unlocked.remove(&account).expect("data exists: so key must exist: qed"); - } - if let Unlock::Timed((ref start, ref duration)) = data.unlock { - if start.elapsed() > Duration::from_millis(*duration as u64) { - unlocked.remove(&account).expect("data exists: so key must exist: qed"); - return Err(Error::NotUnlocked); - } - } - data - }; - - Ok(try!(self.sstore.decrypt(&account, &data.password, shared_mac, message))) + /// Signs the message. If password is not provided the account must be unlocked. + pub fn sign(&self, account: Address, password: Option, message: Message) -> Result { + let password = try!(password.map(Ok).unwrap_or_else(|| self.password(&account))); + Ok(try!(self.sstore.sign(&account, &password, &message))) } - /// Unlocks an account, signs the message, and locks it again. - pub fn sign_with_password(&self, account: Address, password: String, message: Message) -> Result { - let signature = try!(self.sstore.sign(&account, &password, &message)); - Ok(signature) + /// Decrypts a message. If password is not provided the account must be unlocked. + pub fn decrypt(&self, account: Address, password: Option, shared_mac: &[u8], message: &[u8]) -> Result, Error> { + let password = try!(password.map(Ok).unwrap_or_else(|| self.password(&account))); + Ok(try!(self.sstore.decrypt(&account, &password, shared_mac, message))) } /// Returns the underlying `SecretStore` reference if one exists. @@ -386,8 +373,8 @@ mod tests { assert!(ap.insert_account(kp.secret().clone(), "test").is_ok()); assert!(ap.unlock_account_temporarily(kp.address(), "test1".into()).is_err()); assert!(ap.unlock_account_temporarily(kp.address(), "test".into()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_err()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_err()); } #[test] @@ -397,11 +384,11 @@ mod tests { assert!(ap.insert_account(kp.secret().clone(), "test").is_ok()); assert!(ap.unlock_account_permanently(kp.address(), "test1".into()).is_err()); assert!(ap.unlock_account_permanently(kp.address(), "test".into()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); assert!(ap.unlock_account_temporarily(kp.address(), "test".into()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); } #[test] @@ -411,8 +398,8 @@ mod tests { assert!(ap.insert_account(kp.secret().clone(), "test").is_ok()); assert!(ap.unlock_account_timed(kp.address(), "test1".into(), 2000).is_err()); assert!(ap.unlock_account_timed(kp.address(), "test".into(), 2000).is_ok()); - assert!(ap.sign(kp.address(), Default::default()).is_ok()); + assert!(ap.sign(kp.address(), None, Default::default()).is_ok()); ::std::thread::sleep(Duration::from_millis(2000)); - assert!(ap.sign(kp.address(), Default::default()).is_err()); + assert!(ap.sign(kp.address(), None, Default::default()).is_err()); } } diff --git a/ethcore/src/engines/basic_authority.rs b/ethcore/src/engines/basic_authority.rs index 6e3c2f1dd9..bd3eb5bc69 100644 --- a/ethcore/src/engines/basic_authority.rs +++ b/ethcore/src/engines/basic_authority.rs @@ -112,7 +112,7 @@ impl Engine for BasicAuthority { let header = block.header(); let message = header.bare_hash(); // account should be pernamently unlocked, otherwise sealing will fail - if let Ok(signature) = ap.sign(*block.header().author(), message) { + if let Ok(signature) = ap.sign(*block.header().author(), None, message) { return Some(vec![::rlp::encode(&(&*signature as &[u8])).to_vec()]); } else { trace!(target: "basicauthority", "generate_seal: FAIL: accounts secret key unavailable"); diff --git a/ethstore/src/account/safe_account.rs b/ethstore/src/account/safe_account.rs index 315fd283b5..5dab352513 100644 --- a/ethstore/src/account/safe_account.rs +++ b/ethstore/src/account/safe_account.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -use ethkey::{KeyPair, sign, Address, Secret, Signature, Message}; +use ethkey::{KeyPair, sign, Address, Secret, Signature, Message, Public}; use {json, Error, crypto}; use crypto::Keccak256; use random::Random; @@ -180,6 +180,11 @@ impl SafeAccount { crypto::ecies::decrypt(&secret, shared_mac, message).map_err(From::from) } + pub fn public(&self, password: &str) -> Result { + let secret = try!(self.crypto.secret(password)); + Ok(try!(KeyPair::from_secret(secret)).public().clone()) + } + pub fn change_password(&self, old_password: &str, new_password: &str, iterations: u32) -> Result { let secret = try!(self.crypto.secret(old_password)); let result = SafeAccount { diff --git a/ethstore/src/bin/ethstore.rs b/ethstore/src/bin/ethstore.rs index 94823dc061..9d499723b3 100644 --- a/ethstore/src/bin/ethstore.rs +++ b/ethstore/src/bin/ethstore.rs @@ -37,6 +37,7 @@ Usage: ethstore import-wallet [--dir DIR] ethstore remove
[--dir DIR] ethstore sign
[--dir DIR] + ethstore public
ethstore [-h | --help] Options: @@ -56,6 +57,7 @@ Commands: import-wallet Import presale wallet. remove Remove account. sign Sign message. + public Displays public key for an address. "#; #[derive(Debug, RustcDecodable)] @@ -67,6 +69,7 @@ struct Args { cmd_import_wallet: bool, cmd_remove: bool, cmd_sign: bool, + cmd_public: bool, arg_secret: String, arg_password: String, arg_old_pwd: String, @@ -103,7 +106,7 @@ fn key_dir(location: &str) -> Result, Error> { fn format_accounts(accounts: &[Address]) -> String { accounts.iter() .enumerate() - .map(|(i, a)| format!("{:2}: {}", i, a)) + .map(|(i, a)| format!("{:2}: 0x{:?}", i, a)) .collect::>() .join("\n") } @@ -128,7 +131,7 @@ fn execute(command: I) -> Result where I: IntoIterator(command: I) -> Result where I: IntoIterator(command: I) -> Result where I: IntoIterator Result { + let account = try!(self.get(account)); + account.public(password) + } + fn uuid(&self, address: &Address) -> Result { let account = try!(self.get(address)); Ok(account.id.into()) diff --git a/ethstore/src/secret_store.rs b/ethstore/src/secret_store.rs index aa79cb8b67..06f38922b3 100644 --- a/ethstore/src/secret_store.rs +++ b/ethstore/src/secret_store.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -use ethkey::{Address, Message, Signature, Secret}; +use ethkey::{Address, Message, Signature, Secret, Public}; use Error; use json::UUID; @@ -27,6 +27,7 @@ pub trait SecretStore: Send + Sync { fn sign(&self, account: &Address, password: &str, message: &Message) -> Result; fn decrypt(&self, account: &Address, password: &str, shared_mac: &[u8], message: &[u8]) -> Result, Error>; + fn public(&self, account: &Address, password: &str) -> Result; fn accounts(&self) -> Result, Error>; fn uuid(&self, account: &Address) -> Result; diff --git a/rpc/src/v1/helpers/dispatch.rs b/rpc/src/v1/helpers/dispatch.rs index df2d8cbd3e..56124108a5 100644 --- a/rpc/src/v1/helpers/dispatch.rs +++ b/rpc/src/v1/helpers/dispatch.rs @@ -14,58 +14,60 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -use util::{Address, H256, U256, Uint}; +use util::{Address, H256, U256, Uint, Bytes}; use util::bytes::ToPretty; +use ethkey::Signature; use ethcore::miner::MinerService; use ethcore::client::MiningBlockChainClient; use ethcore::transaction::{Action, SignedTransaction, Transaction}; use ethcore::account_provider::AccountProvider; use jsonrpc_core::{Error, Value, to_value}; use v1::helpers::TransactionRequest; -use v1::types::{H256 as RpcH256, H520 as RpcH520}; +use v1::types::{H256 as RpcH256, H520 as RpcH520, Bytes as RpcBytes}; use v1::helpers::errors; -fn prepare_transaction(client: &C, miner: &M, request: TransactionRequest) -> Transaction where C: MiningBlockChainClient, M: MinerService { - Transaction { - nonce: request.nonce - .or_else(|| miner - .last_nonce(&request.from) - .map(|nonce| nonce + U256::one())) - .unwrap_or_else(|| client.latest_nonce(&request.from)), - - action: request.to.map_or(Action::Create, Action::Call), - gas: request.gas.unwrap_or_else(|| miner.sensible_gas_limit()), - gas_price: request.gas_price.unwrap_or_else(|| default_gas_price(client, miner)), - value: request.value.unwrap_or_else(U256::zero), - data: request.data.map_or_else(Vec::new, |b| b.to_vec()), - } -} +pub const DEFAULT_MAC: [u8; 2] = [0, 0]; pub fn dispatch_transaction(client: &C, miner: &M, signed_transaction: SignedTransaction) -> Result where C: MiningBlockChainClient, M: MinerService { let hash = RpcH256::from(signed_transaction.hash()); - let import = miner.import_own_transaction(client, signed_transaction); - - import + miner.import_own_transaction(client, signed_transaction) .map_err(errors::from_transaction_error) .map(|_| hash) } -pub fn signature_with_password(accounts: &AccountProvider, address: Address, hash: H256, pass: String) -> Result { - accounts.sign_with_password(address, pass, hash) - .map_err(errors::from_password_error) - .map(|hash| to_value(&RpcH520::from(hash))) +fn signature(accounts: &AccountProvider, address: Address, password: Option, hash: H256) -> Result { + accounts.sign(address, password.clone(), hash).map_err(|e| match password { + Some(_) => errors::from_password_error(e), + None => errors::from_signing_error(e), + }) } -pub fn unlock_sign_and_dispatch(client: &C, miner: &M, request: TransactionRequest, account_provider: &AccountProvider, password: String) -> Result +pub fn sign(accounts: &AccountProvider, address: Address, password: Option, hash: H256) -> Result { + signature(accounts, address, password, hash) + .map(RpcH520::from) + .map(to_value) +} + +pub fn decrypt(accounts: &AccountProvider, address: Address, password: Option, msg: Bytes) -> Result { + accounts.decrypt(address, password.clone(), &DEFAULT_MAC, &msg) + .map_err(|e| match password { + Some(_) => errors::from_password_error(e), + None => errors::from_signing_error(e), + }) + .map(RpcBytes::from) + .map(to_value) +} + +pub fn sign_and_dispatch(client: &C, miner: &M, accounts: &AccountProvider, request: TransactionRequest, password: Option) -> Result where C: MiningBlockChainClient, M: MinerService { let address = request.from; let signed_transaction = { let t = prepare_transaction(client, miner, request); let hash = t.hash(); - let signature = try!(account_provider.sign_with_password(address, password, hash).map_err(errors::from_password_error)); + let signature = try!(signature(accounts, address, password, hash)); t.with_signature(signature) }; @@ -73,18 +75,20 @@ pub fn unlock_sign_and_dispatch(client: &C, miner: &M, request: Transactio dispatch_transaction(&*client, &*miner, signed_transaction).map(to_value) } -pub fn sign_and_dispatch(client: &C, miner: &M, request: TransactionRequest, account_provider: &AccountProvider, address: Address) -> Result - where C: MiningBlockChainClient, M: MinerService { - - let signed_transaction = { - let t = prepare_transaction(client, miner, request); - let hash = t.hash(); - let signature = try!(account_provider.sign(address, hash).map_err(errors::from_signing_error)); - t.with_signature(signature) - }; +fn prepare_transaction(client: &C, miner: &M, request: TransactionRequest) -> Transaction where C: MiningBlockChainClient, M: MinerService { + Transaction { + nonce: request.nonce + .or_else(|| miner + .last_nonce(&request.from) + .map(|nonce| nonce + U256::one())) + .unwrap_or_else(|| client.latest_nonce(&request.from)), - trace!(target: "miner", "send_transaction: dispatching tx: {}", ::rlp::encode(&signed_transaction).to_vec().pretty()); - dispatch_transaction(&*client, &*miner, signed_transaction).map(to_value) + action: request.to.map_or(Action::Create, Action::Call), + gas: request.gas.unwrap_or_else(|| miner.sensible_gas_limit()), + gas_price: request.gas_price.unwrap_or_else(|| default_gas_price(client, miner)), + value: request.value.unwrap_or_else(U256::zero), + data: request.data.map_or_else(Vec::new, |b| b.to_vec()), + } } pub fn default_gas_price(client: &C, miner: &M) -> U256 where C: MiningBlockChainClient, M: MinerService { diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 0d7902897a..c54cd9c34d 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -43,6 +43,7 @@ mod codes { pub const REQUEST_REJECTED_LIMIT: i64 = -32041; pub const REQUEST_NOT_FOUND: i64 = -32042; pub const COMPILATION_ERROR: i64 = -32050; + pub const ENCRYPTION_ERROR: i64 = -32055; pub const FETCH_ERROR: i64 = -32060; } @@ -166,6 +167,14 @@ pub fn signer_disabled() -> Error { } } +pub fn encryption_error(error: T) -> Error { + Error { + code: ErrorCode::ServerError(codes::ENCRYPTION_ERROR), + message: "Encryption error.".into(), + data: Some(Value::String(format!("{:?}", error))), + } +} + pub fn from_fetch_error(error: FetchError) -> Error { Error { code: ErrorCode::ServerError(codes::FETCH_ERROR), diff --git a/rpc/src/v1/helpers/requests.rs b/rpc/src/v1/helpers/requests.rs index 6a30d80bb7..5cb6108c1d 100644 --- a/rpc/src/v1/helpers/requests.rs +++ b/rpc/src/v1/helpers/requests.rs @@ -103,4 +103,6 @@ pub enum ConfirmationPayload { Transaction(FilledTransactionRequest), /// Sign request Sign(Address, H256), + /// Decrypt request + Decrypt(Address, Bytes), } diff --git a/rpc/src/v1/impls/eth_signing.rs b/rpc/src/v1/impls/eth_signing.rs index 9290a94251..e8b81d0c86 100644 --- a/rpc/src/v1/impls/eth_signing.rs +++ b/rpc/src/v1/impls/eth_signing.rs @@ -24,9 +24,9 @@ use util::{U256, Address, H256, Mutex}; use transient_hashmap::TransientHashMap; use ethcore::account_provider::AccountProvider; use v1::helpers::{errors, SigningQueue, ConfirmationPromise, ConfirmationResult, ConfirmationPayload, TransactionRequest as TRequest, FilledTransactionRequest as FilledRequest, SignerService}; -use v1::helpers::dispatch::{default_gas_price, sign_and_dispatch}; +use v1::helpers::dispatch::{default_gas_price, sign_and_dispatch, sign, decrypt}; use v1::traits::EthSigning; -use v1::types::{TransactionRequest, H160 as RpcH160, H256 as RpcH256, H520 as RpcH520, U256 as RpcU256, Bytes as RpcBytes}; +use v1::types::{TransactionRequest, H160 as RpcH160, H256 as RpcH256, U256 as RpcU256, Bytes as RpcBytes}; fn fill_optional_fields(request: TRequest, client: &C, miner: &M) -> FilledRequest where C: MiningBlockChainClient, M: MinerService { @@ -76,41 +76,59 @@ impl EthSigningQueueClient where C: MiningBlockChainClient, M: Miner Ok(()) } + fn add_to_queue(&self, sender: Address, when_unlocked: WhenUnlocked, payload: Payload) + -> Result where + WhenUnlocked: Fn(&AccountProvider) -> Result, + Payload: Fn() -> ConfirmationPayload, { + + let accounts = take_weak!(self.accounts); + if accounts.is_unlocked(sender) { + return when_unlocked(&accounts).map(DispatchResult::Value); + } + + take_weak!(self.signer).add_request(payload()) + .map(DispatchResult::Promise) + .map_err(|_| errors::request_rejected_limit()) + } + + fn handle_dispatch(&self, res: Result, ready: Ready) { + match res { + Ok(DispatchResult::Value(v)) => ready.ready(Ok(v)), + Ok(DispatchResult::Promise(promise)) => { + promise.wait_for_result(move |result| { + ready.ready(result.unwrap_or_else(|| Err(errors::request_rejected()))) + }) + }, + Err(e) => ready.ready(Err(e)), + } + } + fn dispatch_sign(&self, params: Params) -> Result { from_params::<(RpcH160, RpcH256)>(params).and_then(|(address, msg)| { let address: Address = address.into(); let msg: H256 = msg.into(); - let accounts = take_weak!(self.accounts); - if accounts.is_unlocked(address) { - return Ok(DispatchResult::Value(to_value(&accounts.sign(address, msg).ok().map_or_else(RpcH520::default, Into::into)))) - } - - let signer = take_weak!(self.signer); - signer.add_request(ConfirmationPayload::Sign(address, msg)) - .map(DispatchResult::Promise) - .map_err(|_| errors::request_rejected_limit()) + self.add_to_queue( + address, + |accounts| sign(accounts, address, None, msg.clone()), + || ConfirmationPayload::Sign(address, msg.clone()), + ) }) } fn dispatch_transaction(&self, params: Params) -> Result { - from_params::<(TransactionRequest, )>(params) - .and_then(|(request, )| { - let request: TRequest = request.into(); - let accounts = take_weak!(self.accounts); - let (client, miner) = (take_weak!(self.client), take_weak!(self.miner)); - - if accounts.is_unlocked(request.from) { - let sender = request.from; - return sign_and_dispatch(&*client, &*miner, request, &*accounts, sender).map(DispatchResult::Value); + from_params::<(TransactionRequest, )>(params).and_then(|(request, )| { + let request: TRequest = request.into(); + let (client, miner) = (take_weak!(self.client), take_weak!(self.miner)); + self.add_to_queue( + request.from, + |accounts| sign_and_dispatch(&*client, &*miner, accounts, request.clone(), None), + || { + let request = fill_optional_fields(request.clone(), &*client, &*miner); + ConfirmationPayload::Transaction(request) } - - let signer = take_weak!(self.signer); - let request = fill_optional_fields(request, &*client, &*miner); - signer.add_request(ConfirmationPayload::Transaction(request)) - .map(DispatchResult::Promise) - .map_err(|_| errors::request_rejected_limit()) - }) + ) + }) } } @@ -118,19 +136,6 @@ impl EthSigning for EthSigningQueueClient where C: MiningBlockChainClient + 'static, M: MinerService + 'static { - fn sign(&self, params: Params, ready: Ready) { - let res = self.active().and_then(|_| self.dispatch_sign(params)); - match res { - Ok(DispatchResult::Promise(promise)) => { - promise.wait_for_result(move |result| { - ready.ready(result.unwrap_or_else(|| Err(errors::request_rejected()))) - }) - }, - Ok(DispatchResult::Value(v)) => ready.ready(Ok(v)), - Err(e) => ready.ready(Err(e)), - } - } - fn post_sign(&self, params: Params) -> Result { try!(self.active()); self.dispatch_sign(params).map(|result| match result { @@ -143,19 +148,6 @@ impl EthSigning for EthSigningQueueClient }) } - fn send_transaction(&self, params: Params, ready: Ready) { - let res = self.active().and_then(|_| self.dispatch_transaction(params)); - match res { - Ok(DispatchResult::Promise(promise)) => { - promise.wait_for_result(move |result| { - ready.ready(result.unwrap_or_else(|| Err(errors::request_rejected()))) - }) - }, - Ok(DispatchResult::Value(v)) => ready.ready(Ok(v)), - Err(e) => ready.ready(Err(e)), - } - } - fn post_transaction(&self, params: Params) -> Result { try!(self.active()); self.dispatch_transaction(params).map(|result| match result { @@ -168,13 +160,6 @@ impl EthSigning for EthSigningQueueClient }) } - fn decrypt_message(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(RpcH160, RpcBytes)>(params).and_then(|(_account, _ciphertext)| { - Err(errors::unimplemented()) - }) - } - fn check_request(&self, params: Params) -> Result { try!(self.active()); let mut pending = self.pending.lock(); @@ -192,6 +177,32 @@ impl EthSigning for EthSigningQueueClient res }) } + + fn sign(&self, params: Params, ready: Ready) { + let res = self.active().and_then(|_| self.dispatch_sign(params)); + self.handle_dispatch(res, ready); + } + + fn send_transaction(&self, params: Params, ready: Ready) { + let res = self.active().and_then(|_| self.dispatch_transaction(params)); + self.handle_dispatch(res, ready); + } + + fn decrypt_message(&self, params: Params, ready: Ready) { + let res = self.active() + .and_then(|_| from_params::<(RpcH160, RpcBytes)>(params)) + .and_then(|(address, msg)| { + let address: Address = address.into(); + + self.add_to_queue( + address, + |accounts| decrypt(accounts, address, None, msg.clone().into()), + || ConfirmationPayload::Decrypt(address, msg.clone().into()) + ) + }); + + self.handle_dispatch(res, ready); + } } /// Implementation of functions that require signing when no trusted signer is used. @@ -232,9 +243,7 @@ impl EthSigning for EthSigningUnsafeClient where ready.ready(self.active() .and_then(|_| from_params::<(RpcH160, RpcH256)>(params)) .and_then(|(address, msg)| { - let address: Address = address.into(); - let msg: H256 = msg.into(); - Ok(to_value(&take_weak!(self.accounts).sign(address, msg).ok().map_or_else(RpcH520::default, Into::into))) + sign(&*take_weak!(self.accounts), address.into(), None, msg.into()) })) } @@ -242,18 +251,16 @@ impl EthSigning for EthSigningUnsafeClient where ready.ready(self.active() .and_then(|_| from_params::<(TransactionRequest, )>(params)) .and_then(|(request, )| { - let request: TRequest = request.into(); - let sender = request.from; - sign_and_dispatch(&*take_weak!(self.client), &*take_weak!(self.miner), request, &*take_weak!(self.accounts), sender) + sign_and_dispatch(&*take_weak!(self.client), &*take_weak!(self.miner), &*take_weak!(self.accounts), request.into(), None) })) } - fn decrypt_message(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(RpcH160, RpcBytes)>(params).and_then(|(address, ciphertext)| { - let s = try!(take_weak!(self.accounts).decrypt(address.into(), &[0; 0], &ciphertext.0).map_err(|_| Error::internal_error())); - Ok(to_value(RpcBytes::from(s))) - }) + fn decrypt_message(&self, params: Params, ready: Ready) { + ready.ready(self.active() + .and_then(|_| from_params::<(RpcH160, RpcBytes)>(params)) + .and_then(|(address, ciphertext)| { + decrypt(&*take_weak!(self.accounts), address.into(), None, ciphertext.0) + })) } fn post_sign(&self, _: Params) -> Result { diff --git a/rpc/src/v1/impls/ethcore.rs b/rpc/src/v1/impls/ethcore.rs index 3b756342d2..33123ddd5d 100644 --- a/rpc/src/v1/impls/ethcore.rs +++ b/rpc/src/v1/impls/ethcore.rs @@ -35,6 +35,8 @@ use jsonrpc_core::Error; use v1::traits::Ethcore; use v1::types::{Bytes, U256, H160, H256, H512, Peers, Transaction, RpcSettings}; use v1::helpers::{errors, SigningQueue, SignerService, NetworkSettings}; +use v1::helpers::dispatch::DEFAULT_MAC; +use v1::helpers::params::expect_no_params; use v1::helpers::auto_args::Ready; /// Ethcore implementation. @@ -265,8 +267,8 @@ impl Ethcore for EthcoreClient where fn encrypt_message(&self, key: H512, phrase: Bytes) -> Result { try!(self.active()); - ecies::encrypt(&key.into(), &[0; 0], &phrase.0) - .map_err(|_| Error::internal_error()) + ecies::encrypt(&key.into(), &DEFAULT_MAC, &phrase.0) + .map_err(errors::encryption_error) .map(Into::into) } diff --git a/rpc/src/v1/impls/personal.rs b/rpc/src/v1/impls/personal.rs index 009f173b32..0830effd5b 100644 --- a/rpc/src/v1/impls/personal.rs +++ b/rpc/src/v1/impls/personal.rs @@ -22,9 +22,9 @@ use jsonrpc_core::*; use ethkey::{Brain, Generator}; use v1::traits::Personal; use v1::types::{H160 as RpcH160, TransactionRequest}; -use v1::helpers::{errors, TransactionRequest as TRequest}; +use v1::helpers::errors; use v1::helpers::params::expect_no_params; -use v1::helpers::dispatch::unlock_sign_and_dispatch; +use v1::helpers::dispatch::sign_and_dispatch; use ethcore::account_provider::AccountProvider; use ethcore::client::MiningBlockChainClient; use ethcore::miner::MinerService; @@ -139,10 +139,13 @@ impl Personal for PersonalClient where C: MiningBl try!(self.active()); from_params::<(TransactionRequest, String)>(params) .and_then(|(request, password)| { - let request: TRequest = request.into(); - let accounts = take_weak!(self.accounts); - - unlock_sign_and_dispatch(&*take_weak!(self.client), &*take_weak!(self.miner), request, &*accounts, password) + sign_and_dispatch( + &*take_weak!(self.client), + &*take_weak!(self.miner), + &*take_weak!(self.accounts), + request.into(), + Some(password) + ) }) } diff --git a/rpc/src/v1/impls/personal_signer.rs b/rpc/src/v1/impls/personal_signer.rs index 441ed679bb..b3a93736a2 100644 --- a/rpc/src/v1/impls/personal_signer.rs +++ b/rpc/src/v1/impls/personal_signer.rs @@ -25,7 +25,7 @@ use v1::traits::PersonalSigner; use v1::types::{TransactionModification, ConfirmationRequest, U256}; use v1::helpers::{errors, SignerService, SigningQueue, ConfirmationPayload}; use v1::helpers::params::expect_no_params; -use v1::helpers::dispatch::{unlock_sign_and_dispatch, signature_with_password}; +use v1::helpers::dispatch::{sign_and_dispatch, sign, decrypt}; /// Transactions confirmation (personal) rpc implementation. pub struct SignerClient where C: MiningBlockChainClient, M: MinerService { @@ -87,12 +87,14 @@ impl PersonalSigner for SignerClient where C: Mini if let Some(gas_price) = modification.gas_price { request.gas_price = gas_price.into(); } - - unlock_sign_and_dispatch(&*client, &*miner, request.into(), &*accounts, pass) + sign_and_dispatch(&*client, &*miner, &*accounts, request.into(), Some(pass)) }, ConfirmationPayload::Sign(address, hash) => { - signature_with_password(&*accounts, address, hash, pass) - } + sign(&*accounts, address, Some(pass), hash) + }, + ConfirmationPayload::Decrypt(address, msg) => { + decrypt(&*accounts, address, Some(pass), msg) + }, }; if let Ok(ref response) = result { signer.request_confirmed(id, Ok(response.clone())); diff --git a/rpc/src/v1/tests/eth.rs b/rpc/src/v1/tests/eth.rs index ff531d57a7..1dfe979685 100644 --- a/rpc/src/v1/tests/eth.rs +++ b/rpc/src/v1/tests/eth.rs @@ -33,9 +33,10 @@ use util::{U256, H256, Uint, Address}; use jsonrpc_core::IoHandler; use ethjson::blockchain::BlockChain; -use v1::types::U256 as NU256; -use v1::traits::eth::{Eth, EthSigning}; use v1::impls::{EthClient, EthSigningUnsafeClient}; +use v1::types::U256 as NU256; +use v1::traits::eth::Eth; +use v1::traits::eth_signing::EthSigning; use v1::tests::helpers::{TestSyncProvider, Config}; fn account_provider() -> Arc { diff --git a/rpc/src/v1/tests/mocked/eth.rs b/rpc/src/v1/tests/mocked/eth.rs index eb3fbaf6e7..e41ca32310 100644 --- a/rpc/src/v1/tests/mocked/eth.rs +++ b/rpc/src/v1/tests/mocked/eth.rs @@ -264,7 +264,7 @@ fn rpc_eth_sign() { let account = tester.accounts_provider.new_account("abcd").unwrap(); tester.accounts_provider.unlock_account_permanently(account, "abcd".into()).unwrap(); let message = H256::from("0x0cc175b9c0f1b6a831c399e26977266192eb5ffee6ae2fec3ad71c777531578f"); - let signed = tester.accounts_provider.sign(account, message).unwrap(); + let signed = tester.accounts_provider.sign(account, None, message).unwrap(); let req = r#"{ "jsonrpc": "2.0", @@ -709,7 +709,7 @@ fn rpc_eth_send_transaction() { value: U256::from(0x9184e72au64), data: vec![] }; - let signature = tester.accounts_provider.sign(address, t.hash()).unwrap(); + let signature = tester.accounts_provider.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); let response = r#"{"jsonrpc":"2.0","result":""#.to_owned() + format!("0x{:?}", t.hash()).as_ref() + r#"","id":1}"#; @@ -726,7 +726,7 @@ fn rpc_eth_send_transaction() { value: U256::from(0x9184e72au64), data: vec![] }; - let signature = tester.accounts_provider.sign(address, t.hash()).unwrap(); + let signature = tester.accounts_provider.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); let response = r#"{"jsonrpc":"2.0","result":""#.to_owned() + format!("0x{:?}", t.hash()).as_ref() + r#"","id":1}"#; @@ -791,7 +791,7 @@ fn rpc_eth_send_raw_transaction() { value: U256::from(0x9184e72au64), data: vec![] }; - let signature = tester.accounts_provider.sign(address, t.hash()).unwrap(); + let signature = tester.accounts_provider.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); let rlp = ::rlp::encode(&t).to_vec().to_hex(); diff --git a/rpc/src/v1/tests/mocked/eth_signing.rs b/rpc/src/v1/tests/mocked/eth_signing.rs index 1bf901e5f8..fc5800cd71 100644 --- a/rpc/src/v1/tests/mocked/eth_signing.rs +++ b/rpc/src/v1/tests/mocked/eth_signing.rs @@ -16,16 +16,20 @@ use std::str::FromStr; use std::sync::Arc; -use jsonrpc_core::{IoHandler, to_value}; +use jsonrpc_core::{IoHandler, to_value, Success}; use v1::impls::EthSigningQueueClient; -use v1::traits::EthSigning; +use v1::traits::{EthSigning, Ethcore}; use v1::helpers::{SignerService, SigningQueue}; -use v1::types::{H256 as RpcH256, H520 as RpcH520}; +use v1::types::{H256 as RpcH256, H520 as RpcH520, Bytes}; use v1::tests::helpers::TestMinerService; +use v1::tests::mocked::ethcore; + use util::{Address, FixedHash, Uint, U256, H256, H520}; use ethcore::account_provider::AccountProvider; use ethcore::client::TestBlockChainClient; use ethcore::transaction::{Transaction, Action}; +use ethstore::ethkey::{Generator, Random}; +use serde_json; struct EthSigningTester { pub signer: Arc, @@ -178,7 +182,7 @@ fn should_sign_if_account_is_unlocked() { let acc = tester.accounts.new_account("test").unwrap(); tester.accounts.unlock_account_permanently(acc, "test".into()).unwrap(); - let signature = tester.accounts.sign(acc, hash).unwrap(); + let signature = tester.accounts.sign(acc, None, hash).unwrap(); // when let request = r#"{ @@ -242,7 +246,7 @@ fn should_dispatch_transaction_if_account_is_unlock() { value: U256::from(0x9184e72au64), data: vec![] }; - let signature = tester.accounts.sign(acc, t.hash()).unwrap(); + let signature = tester.accounts.sign(acc, None, t.hash()).unwrap(); let t = t.with_signature(signature); // when @@ -263,3 +267,65 @@ fn should_dispatch_transaction_if_account_is_unlock() { // then assert_eq!(tester.io.handle_request_sync(&request), Some(response.to_owned())); } + +#[test] +fn should_decrypt_message_if_account_is_unlocked() { + // given + let tester = eth_signing(); + let sync = ethcore::sync_provider(); + let net = ethcore::network_service(); + let ethcore_client = ethcore::ethcore_client(&tester.client, &tester.miner, &sync, &net); + tester.io.add_delegate(ethcore_client.to_delegate()); + let (address, public) = tester.accounts.new_account_and_public("test").unwrap(); + tester.accounts.unlock_account_permanently(address, "test".into()).unwrap(); + + + // First encrypt message + let request = format!("{}0x{:?}{}", + r#"{"jsonrpc": "2.0", "method": "ethcore_encryptMessage", "params":[""#, + public, + r#"", "0x01020304"], "id": 1}"# + ); + let encrypted: Success = serde_json::from_str(&tester.io.handle_request_sync(&request).unwrap()).unwrap(); + + // then call decrypt + let request = format!("{}{:?}{}{:?}{}", + r#"{"jsonrpc": "2.0", "method": "ethcore_decryptMessage", "params":["0x"#, + address, + r#"","#, + encrypted.result, + r#"], "id": 1}"# + ); + println!("Request: {:?}", request); + let response = r#"{"jsonrpc":"2.0","result":"0x01020304","id":1}"#; + + // then + assert_eq!(tester.io.handle_request_sync(&request), Some(response.into())); +} + +#[test] +fn should_add_decryption_to_the_queue() { + // given + let tester = eth_signing(); + let acc = Random.generate().unwrap(); + assert_eq!(tester.signer.requests().len(), 0); + + // when + let request = r#"{ + "jsonrpc": "2.0", + "method": "ethcore_decryptMessage", + "params": ["0x"#.to_owned() + &format!("{:?}", acc.address()) + r#"", + "0x012345"], + "id": 1 + }"#; + let response = r#"{"jsonrpc":"2.0","result":"0x0102","id":1}"#; + + // then + let async_result = tester.io.handle_request(&request).unwrap(); + assert_eq!(tester.signer.requests().len(), 1); + // respond + tester.signer.request_confirmed(U256::from(1), Ok(to_value(Bytes(vec![0x1, 0x2])))); + assert!(async_result.on_result(move |res| { + assert_eq!(res, response.to_owned()); + })); +} diff --git a/rpc/src/v1/tests/mocked/ethcore.rs b/rpc/src/v1/tests/mocked/ethcore.rs index f09d84d5bf..4cf23d46e2 100644 --- a/rpc/src/v1/tests/mocked/ethcore.rs +++ b/rpc/src/v1/tests/mocked/ethcore.rs @@ -19,6 +19,7 @@ use util::log::RotatingLogger; use util::U256; use ethsync::ManageNetwork; use ethcore::client::{TestBlockChainClient}; +use ethstore::ethkey::{Generator, Random}; use jsonrpc_core::IoHandler; use v1::{Ethcore, EthcoreClient}; @@ -34,7 +35,7 @@ fn client_service() -> Arc { Arc::new(TestBlockChainClient::default()) } -fn sync_provider() -> Arc { +pub fn sync_provider() -> Arc { Arc::new(TestSyncProvider::new(Config { network_id: U256::from(3), num_peers: 120, @@ -56,13 +57,13 @@ fn settings() -> Arc { }) } -fn network_service() -> Arc { +pub fn network_service() -> Arc { Arc::new(TestManageNetwork) } -type TestEthcoreClient = EthcoreClient; +pub type TestEthcoreClient = EthcoreClient; -fn ethcore_client( +pub fn ethcore_client( client: &Arc, miner: &Arc, sync: &Arc, @@ -324,3 +325,17 @@ fn rpc_ethcore_pending_transactions() { assert_eq!(io.handle_request_sync(request), Some(response.to_owned())); } + +#[test] +fn rpc_ethcore_encrypt() { + let miner = miner_service(); + let client = client_service(); + let sync = sync_provider(); + let net = network_service(); + let io = IoHandler::new(); + io.add_delegate(ethcore_client(&client, &miner, &sync, &net).to_delegate()); + let key = format!("{:?}", Random.generate().unwrap().public()); + + let request = r#"{"jsonrpc": "2.0", "method": "ethcore_encryptMessage", "params":["0x"#.to_owned() + &key + r#"", "0x01"], "id": 1}"#; + assert!(io.handle_request_sync(&request).unwrap().contains("result"), "Should return success."); +} diff --git a/rpc/src/v1/tests/mocked/personal.rs b/rpc/src/v1/tests/mocked/personal.rs index aa4bf29c11..c3c3d2954c 100644 --- a/rpc/src/v1/tests/mocked/personal.rs +++ b/rpc/src/v1/tests/mocked/personal.rs @@ -227,7 +227,7 @@ fn sign_and_send_transaction() { data: vec![] }; tester.accounts.unlock_account_temporarily(address, "password123".into()).unwrap(); - let signature = tester.accounts.sign(address, t.hash()).unwrap(); + let signature = tester.accounts.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); let response = r#"{"jsonrpc":"2.0","result":""#.to_owned() + format!("0x{:?}", t.hash()).as_ref() + r#"","id":1}"#; @@ -245,7 +245,7 @@ fn sign_and_send_transaction() { data: vec![] }; tester.accounts.unlock_account_temporarily(address, "password123".into()).unwrap(); - let signature = tester.accounts.sign(address, t.hash()).unwrap(); + let signature = tester.accounts.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); let response = r#"{"jsonrpc":"2.0","result":""#.to_owned() + format!("0x{:?}", t.hash()).as_ref() + r#"","id":1}"#; diff --git a/rpc/src/v1/tests/mocked/personal_signer.rs b/rpc/src/v1/tests/mocked/personal_signer.rs index 04ae829ee6..650f165530 100644 --- a/rpc/src/v1/tests/mocked/personal_signer.rs +++ b/rpc/src/v1/tests/mocked/personal_signer.rs @@ -186,7 +186,7 @@ fn should_confirm_transaction_and_dispatch() { data: vec![] }; tester.accounts.unlock_account_temporarily(address, "test".into()).unwrap(); - let signature = tester.accounts.sign(address, t.hash()).unwrap(); + let signature = tester.accounts.sign(address, None, t.hash()).unwrap(); let t = t.with_signature(signature); assert_eq!(tester.signer.requests().len(), 1); diff --git a/rpc/src/v1/traits/eth.rs b/rpc/src/v1/traits/eth.rs index 62301e21fb..7d9aa47f3e 100644 --- a/rpc/src/v1/traits/eth.rs +++ b/rpc/src/v1/traits/eth.rs @@ -15,7 +15,6 @@ // along with Parity. If not, see . //! Eth rpc interface. -use std::sync::Arc; use jsonrpc_core::*; use v1::types::{Block, BlockNumber, Bytes, CallRequest, Filter, FilterChanges, Index}; @@ -198,46 +197,3 @@ build_rpc_trait! { fn uninstall_filter(&self, Index) -> Result; } } - -/// Signing methods implementation relying on unlocked accounts. -pub trait EthSigning: Sized + Send + Sync + 'static { - /// Signs the data with given address signature. - fn sign(&self, _: Params, _: Ready); - - /// Posts sign request asynchronously. - /// Will return a confirmation ID for later use with check_transaction. - fn post_sign(&self, _: Params) -> Result; - - /// Sends transaction; will block for 20s to try to return the - /// transaction hash. - /// If it cannot yet be signed, it will return a transaction ID for - /// later use with check_transaction. - fn send_transaction(&self, _: Params, _: Ready); - - /// Posts transaction asynchronously. - /// Will return a transaction ID for later use with check_transaction. - fn post_transaction(&self, _: Params) -> Result; - - /// Checks the progress of a previously posted request (transaction/sign). - /// Should be given a valid send_transaction ID. - /// Returns the transaction hash, the zero hash (not yet available), - /// or the signature, - /// or an error. - fn check_request(&self, _: Params) -> Result; - - /// Decrypt some ECIES-encrypted message. - /// First parameter is the address with which it is encrypted, second is the ciphertext. - fn decrypt_message(&self, _: Params) -> Result; - - /// Should be used to convert object to io delegate. - fn to_delegate(self) -> IoDelegate { - let mut delegate = IoDelegate::new(Arc::new(self)); - delegate.add_async_method("eth_sign", EthSigning::sign); - delegate.add_async_method("eth_sendTransaction", EthSigning::send_transaction); - delegate.add_method("eth_postSign", EthSigning::post_sign); - delegate.add_method("eth_postTransaction", EthSigning::post_transaction); - delegate.add_method("eth_checkRequest", EthSigning::check_request); - delegate.add_method("ethcore_decryptMessage", EthSigning::decrypt_message); - delegate - } -} diff --git a/rpc/src/v1/traits/eth_signing.rs b/rpc/src/v1/traits/eth_signing.rs new file mode 100644 index 0000000000..1d6f6e5019 --- /dev/null +++ b/rpc/src/v1/traits/eth_signing.rs @@ -0,0 +1,63 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Eth rpc interface. +use std::sync::Arc; +use jsonrpc_core::*; + +/// Signing methods implementation relying on unlocked accounts. +pub trait EthSigning: Sized + Send + Sync + 'static { + /// Signs the data with given address signature. + fn sign(&self, _: Params, _: Ready); + + /// Posts sign request asynchronously. + /// Will return a confirmation ID for later use with check_transaction. + fn post_sign(&self, _: Params) -> Result; + + /// Sends transaction; will block for 20s to try to return the + /// transaction hash. + /// If it cannot yet be signed, it will return a transaction ID for + /// later use with check_transaction. + fn send_transaction(&self, _: Params, _: Ready); + + /// Posts transaction asynchronously. + /// Will return a transaction ID for later use with check_transaction. + fn post_transaction(&self, _: Params) -> Result; + + /// Checks the progress of a previously posted request (transaction/sign). + /// Should be given a valid send_transaction ID. + /// Returns the transaction hash, the zero hash (not yet available), + /// or the signature, + /// or an error. + fn check_request(&self, _: Params) -> Result; + + /// Decrypt some ECIES-encrypted message. + /// First parameter is the address with which it is encrypted, second is the ciphertext. + fn decrypt_message(&self, _: Params, _: Ready); + + /// Should be used to convert object to io delegate. + fn to_delegate(self) -> IoDelegate { + let mut delegate = IoDelegate::new(Arc::new(self)); + delegate.add_async_method("eth_sign", EthSigning::sign); + delegate.add_async_method("eth_sendTransaction", EthSigning::send_transaction); + delegate.add_async_method("ethcore_decryptMessage", EthSigning::decrypt_message); + + delegate.add_method("eth_postSign", EthSigning::post_sign); + delegate.add_method("eth_postTransaction", EthSigning::post_transaction); + delegate.add_method("eth_checkRequest", EthSigning::check_request); + delegate + } +} diff --git a/rpc/src/v1/traits/mod.rs b/rpc/src/v1/traits/mod.rs index 3ca11b6543..e804c55536 100644 --- a/rpc/src/v1/traits/mod.rs +++ b/rpc/src/v1/traits/mod.rs @@ -18,6 +18,7 @@ pub mod web3; pub mod eth; +pub mod eth_signing; pub mod net; pub mod personal; pub mod ethcore; @@ -26,7 +27,8 @@ pub mod traces; pub mod rpc; pub use self::web3::Web3; -pub use self::eth::{Eth, EthFilter, EthSigning}; +pub use self::eth::{Eth, EthFilter}; +pub use self::eth_signing::EthSigning; pub use self::net::Net; pub use self::personal::{Personal, PersonalSigner}; pub use self::ethcore::Ethcore; @@ -34,4 +36,3 @@ pub use self::ethcore_set::EthcoreSet; pub use self::traces::Traces; pub use self::rpc::Rpc; - diff --git a/rpc/src/v1/types/confirmations.rs b/rpc/src/v1/types/confirmations.rs index c074df4431..c5ef4efa98 100644 --- a/rpc/src/v1/types/confirmations.rs +++ b/rpc/src/v1/types/confirmations.rs @@ -16,7 +16,7 @@ //! Types used in Confirmations queue (Trusted Signer) -use v1::types::{U256, TransactionRequest, H160, H256}; +use v1::types::{U256, TransactionRequest, H160, H256, Bytes}; use v1::helpers; @@ -47,6 +47,15 @@ pub struct SignRequest { pub hash: H256, } +/// Decrypt request +#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize)] +pub struct DecryptRequest { + /// Address + pub address: H160, + /// Message to decrypt + pub msg: Bytes, +} + /// Confirmation payload, i.e. the thing to be confirmed #[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize)] pub enum ConfirmationPayload { @@ -56,6 +65,9 @@ pub enum ConfirmationPayload { /// Signature #[serde(rename="sign")] Sign(SignRequest), + /// Decryption + #[serde(rename="decrypt")] + Decrypt(DecryptRequest), } impl From for ConfirmationPayload { @@ -66,6 +78,10 @@ impl From for ConfirmationPayload { address: address.into(), hash: hash.into(), }), + helpers::ConfirmationPayload::Decrypt(address, msg) => ConfirmationPayload::Decrypt(DecryptRequest { + address: address.into(), + msg: msg.into(), + }), } } } diff --git a/signer/Cargo.toml b/signer/Cargo.toml index 3d0e768967..43b6bd84a4 100644 --- a/signer/Cargo.toml +++ b/signer/Cargo.toml @@ -20,11 +20,12 @@ ethcore-util = { path = "../util" } ethcore-io = { path = "../util/io" } ethcore-rpc = { path = "../rpc" } ethcore-devtools = { path = "../devtools" } +parity-dapps = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4", optional = true} parity-dapps-signer = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4", optional = true} clippy = { version = "0.0.90", optional = true} [features] dev = ["clippy"] -ui = ["parity-dapps-signer"] +ui = ["parity-dapps", "parity-dapps-signer"] use-precompiled-js = ["parity-dapps-signer/use-precompiled-js"] diff --git a/signer/src/lib.rs b/signer/src/lib.rs index abe84a03ec..630cefb829 100644 --- a/signer/src/lib.rs +++ b/signer/src/lib.rs @@ -54,6 +54,8 @@ extern crate jsonrpc_core; extern crate ws; #[cfg(feature = "ui")] extern crate parity_dapps_signer as signer; +#[cfg(feature = "ui")] +extern crate parity_dapps as dapps; #[cfg(test)] extern crate ethcore_devtools as devtools; diff --git a/signer/src/ws_server/session.rs b/signer/src/ws_server/session.rs index afc6606d7e..1e3a9a7d2e 100644 --- a/signer/src/ws_server/session.rs +++ b/signer/src/ws_server/session.rs @@ -26,21 +26,39 @@ use util::{H256, Mutex, version}; #[cfg(feature = "ui")] mod signer { - use signer; + use signer::SignerApp; + use dapps::{self, WebApp}; - pub fn handle(req: &str) -> Option { - signer::handle(req) + #[derive(Default)] + pub struct Handler { + signer: SignerApp, + } + + impl Handler { + pub fn handle(&self, req: &str) -> Option<&dapps::File> { + let file = match req { + "" | "/" => "index.html", + path => &path[1..], + }; + self.signer.file(file) + } } } #[cfg(not(feature = "ui"))] mod signer { pub struct File { - pub content: String, - pub mime: String, + pub content: &'static str, + pub content_type: &'static str, } - pub fn handle(_req: &str) -> Option { - None + #[derive(Default)] + pub struct Handler { + } + + impl Handler { + pub fn handle(&self, _req: &str) -> Option<&File> { + None + } } } @@ -107,6 +125,7 @@ pub struct Session { self_origin: String, authcodes_path: PathBuf, handler: Arc, + file_handler: Arc, } impl ws::Handler for Session { @@ -152,12 +171,12 @@ impl ws::Handler for Session { } // Otherwise try to serve a page. - Ok(signer::handle(req.resource()) + Ok(self.file_handler.handle(req.resource()) .map_or_else( // return 404 not found || error(ErrorType::NotFound, "Not found", "Requested file was not found.", None), // or serve the file - |f| add_headers(ws::Response::ok(f.content.into()), &f.mime) + |f| add_headers(ws::Response::ok_raw(f.content.to_vec()), f.content_type) )) } @@ -181,6 +200,7 @@ pub struct Factory { skip_origin_validation: bool, self_origin: String, authcodes_path: PathBuf, + file_handler: Arc, } impl Factory { @@ -190,6 +210,7 @@ impl Factory { skip_origin_validation: skip_origin_validation, self_origin: self_origin, authcodes_path: authcodes_path, + file_handler: Arc::new(signer::Handler::default()), } } } @@ -204,6 +225,7 @@ impl ws::Factory for Factory { skip_origin_validation: self.skip_origin_validation, self_origin: self.self_origin.clone(), authcodes_path: self.authcodes_path.clone(), + file_handler: self.file_handler.clone(), } } } -- GitLab From cceca916a1e64e7113533218d28022a2011032d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Sat, 15 Oct 2016 14:46:33 +0200 Subject: [PATCH 056/393] [frontport] CLI to specify queue ordering strategy (#2494) (#2623) * CLI to specify queue ordering strategy (#2494) * Alter gas priorities to include gas_price also * CLI options and tests * Adding ordering by gas * whitespace Conflicts: ethcore/src/miner/miner.rs ethcore/src/miner/mod.rs ethcore/src/miner/transaction_queue.rs parity/cli/usage.txt parity/configuration.rs * fix build --- ethcore/src/miner/miner.rs | 16 +- ethcore/src/miner/mod.rs | 2 +- ethcore/src/miner/transaction_queue.rs | 310 ++++++++++++++++++------- parity/cli/config.full.toml | 3 +- parity/cli/config.toml | 2 +- parity/cli/mod.rs | 11 +- parity/cli/usage.txt | 6 + parity/configuration.rs | 25 +- parity/helpers.rs | 11 +- parity/params.rs | 2 +- rpc/src/v1/tests/eth.rs | 3 +- 11 files changed, 288 insertions(+), 103 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 08d84b6378..63bb367b64 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -30,7 +30,7 @@ use transaction::{Action, SignedTransaction}; use receipt::{Receipt, RichReceipt}; use spec::Spec; use engines::Engine; -use miner::{MinerService, MinerStatus, TransactionQueue, AccountDetails, TransactionOrigin}; +use miner::{MinerService, MinerStatus, TransactionQueue, PrioritizationStrategy, AccountDetails, TransactionOrigin}; use miner::work_notify::WorkPoster; use client::TransactionImportResult; use miner::price_info::PriceInfo; @@ -76,6 +76,8 @@ pub struct MinerOptions { pub tx_gas_limit: U256, /// Maximum size of the transaction queue. pub tx_queue_size: usize, + /// Strategy to use for prioritizing transactions in the queue. + pub tx_queue_strategy: PrioritizationStrategy, /// Whether we should fallback to providing all the queue's transactions or just pending. pub pending_set: PendingSet, /// How many historical work packages can we store before running out? @@ -94,12 +96,13 @@ impl Default for MinerOptions { reseal_on_external_tx: false, reseal_on_own_tx: true, tx_gas_limit: !U256::zero(), - tx_queue_size: 2048, + tx_queue_size: 1024, + tx_queue_gas_limit: GasLimit::Auto, + tx_queue_strategy: PrioritizationStrategy::GasFactorAndGasPrice, pending_set: PendingSet::AlwaysQueue, reseal_min_period: Duration::from_secs(2), work_queue_size: 20, enable_resubmission: true, - tx_queue_gas_limit: GasLimit::Auto, } } } @@ -212,7 +215,9 @@ impl Miner { GasLimit::Fixed(ref limit) => *limit, _ => !U256::zero(), }; - let txq = Arc::new(Mutex::new(TransactionQueue::with_limits(options.tx_queue_size, gas_limit, options.tx_gas_limit))); + let txq = Arc::new(Mutex::new(TransactionQueue::with_limits( + options.tx_queue_strategy, options.tx_queue_size, gas_limit, options.tx_gas_limit + ))); Miner { transaction_queue: txq, next_allowed_reseal: Mutex::new(Instant::now()), @@ -1029,7 +1034,7 @@ impl MinerService for Miner { mod tests { use std::time::Duration; - use super::super::MinerService; + use super::super::{MinerService, PrioritizationStrategy}; use super::*; use util::*; use ethkey::{Generator, Random}; @@ -1083,6 +1088,7 @@ mod tests { tx_gas_limit: !U256::zero(), tx_queue_size: 1024, tx_queue_gas_limit: GasLimit::None, + tx_queue_strategy: PrioritizationStrategy::GasFactorAndGasPrice, pending_set: PendingSet::AlwaysSealing, work_queue_size: 5, enable_resubmission: true, diff --git a/ethcore/src/miner/mod.rs b/ethcore/src/miner/mod.rs index 8dfddf483a..5fe8dbf44e 100644 --- a/ethcore/src/miner/mod.rs +++ b/ethcore/src/miner/mod.rs @@ -47,7 +47,7 @@ mod transaction_queue; mod work_notify; mod price_info; -pub use self::transaction_queue::{TransactionQueue, AccountDetails, TransactionOrigin}; +pub use self::transaction_queue::{TransactionQueue, PrioritizationStrategy, AccountDetails, TransactionOrigin}; pub use self::miner::{Miner, MinerOptions, PendingSet, GasPricer, GasPriceCalibratorOptions, GasLimit}; pub use self::external::{ExternalMiner, ExternalMinerService}; pub use client::TransactionImportResult; diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index 15fe38236e..9e47a84674 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -49,7 +49,7 @@ //! balance: U256::from(1_000_000), //! }; //! -//! let mut txq = TransactionQueue::new(); +//! let mut txq = TransactionQueue::default(); //! txq.add(st2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); //! txq.add(st1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); //! @@ -130,11 +130,20 @@ struct TransactionOrder { /// (e.g. Tx(nonce:5), State(nonce:0) -> height: 5) /// High nonce_height = Low priority (processed later) nonce_height: U256, - /// Gas specified in the transaction. - gas: U256, /// Gas Price of the transaction. /// Low gas price = Low priority (processed later) gas_price: U256, + /// Gas usage priority factor. Usage depends on strategy. + /// Represents the linear increment in required gas price for heavy transactions. + /// + /// High gas limit + Low gas price = Low priority + /// High gas limit + High gas price = High priority + gas_factor: U256, + /// Gas (limit) of the transaction. Usage depends on strategy. + /// Low gas limit = High priority (processed earlier) + gas: U256, + /// Transaction ordering strategy + strategy: PrioritizationStrategy, /// Hash to identify associated transaction hash: H256, /// Origin of the transaction @@ -145,11 +154,15 @@ struct TransactionOrder { impl TransactionOrder { - fn for_transaction(tx: &VerifiedTransaction, base_nonce: U256) -> Self { + + fn for_transaction(tx: &VerifiedTransaction, base_nonce: U256, min_gas_price: U256, strategy: PrioritizationStrategy) -> Self { + let factor = (tx.transaction.gas >> 15) * min_gas_price; TransactionOrder { nonce_height: tx.nonce() - base_nonce, - gas: tx.transaction.gas.clone(), gas_price: tx.transaction.gas_price, + gas: tx.transaction.gas, + gas_factor: factor, + strategy: strategy, hash: tx.hash(), origin: tx.origin, penalties: 0, @@ -197,11 +210,28 @@ impl Ord for TransactionOrder { return self.origin.cmp(&b.origin); } + match self.strategy { + PrioritizationStrategy::GasAndGasPrice => { + if self.gas != b.gas { + return self.gas.cmp(&b.gas); + } + }, + PrioritizationStrategy::GasFactorAndGasPrice => { + // avoiding overflows + // (gp1 - g1) > (gp2 - g2) <=> + // (gp1 + g2) > (gp2 + g1) + let f_a = self.gas_price + b.gas_factor; + let f_b = b.gas_price + self.gas_factor; + if f_a != f_b { + return f_b.cmp(&f_a); + } + }, + PrioritizationStrategy::GasPriceOnly => {}, + } + // Then compare gas_prices - let a_gas = self.gas_price; - let b_gas = b.gas_price; - if a_gas != b_gas { - return b_gas.cmp(&a_gas); + if self.gas_price != b.gas_price { + return b.gas_price.cmp(&self.gas_price); } // Compare hashes @@ -415,8 +445,32 @@ pub struct AccountDetails { /// Transactions with `gas > (gas_limit + gas_limit * Factor(in percents))` are not imported to the queue. const GAS_LIMIT_HYSTERESIS: usize = 10; // (100/GAS_LIMIT_HYSTERESIS) % +/// Describes the strategy used to prioritize transactions in the queue. +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub enum PrioritizationStrategy { + /// Use only gas price. Disregards the actual computation cost of the transaction. + /// i.e. Higher gas price = Higher priority + GasPriceOnly, + /// Use gas limit and then gas price. + /// i.e. Higher gas limit = Lower priority + GasAndGasPrice, + /// Calculate and use priority based on gas and gas price. + /// PRIORITY = GAS_PRICE - GAS/2^15 * MIN_GAS_PRICE + /// + /// Rationale: + /// Heavy transactions are paying linear cost (GAS * GAS_PRICE) + /// while the computation might be more expensive. + /// + /// i.e. + /// 1M gas tx with `gas_price=30*min` has the same priority + /// as 32k gas tx with `gas_price=min` + GasFactorAndGasPrice, +} + /// `TransactionQueue` implementation pub struct TransactionQueue { + /// Prioritization strategy for this queue + strategy: PrioritizationStrategy, /// Gas Price threshold for transactions that can be imported to this queue (defaults to 0) minimal_gas_price: U256, /// The maximum amount of gas any individual transaction may use. @@ -435,18 +489,18 @@ pub struct TransactionQueue { impl Default for TransactionQueue { fn default() -> Self { - TransactionQueue::new() + TransactionQueue::new(PrioritizationStrategy::GasPriceOnly) } } impl TransactionQueue { /// Creates new instance of this Queue - pub fn new() -> Self { - Self::with_limits(1024, !U256::zero(), !U256::zero()) + pub fn new(strategy: PrioritizationStrategy) -> Self { + Self::with_limits(strategy, 1024, !U256::zero(), !U256::zero()) } /// Create new instance of this Queue with specified limits - pub fn with_limits(limit: usize, gas_limit: U256, tx_gas_limit: U256) -> Self { + pub fn with_limits(strategy: PrioritizationStrategy, limit: usize, gas_limit: U256, tx_gas_limit: U256) -> Self { let current = TransactionSet { by_priority: BTreeSet::new(), by_address: Table::new(), @@ -464,6 +518,7 @@ impl TransactionQueue { }; TransactionQueue { + strategy: strategy, minimal_gas_price: U256::zero(), tx_gas_limit: tx_gas_limit, gas_limit: !U256::zero(), @@ -844,6 +899,7 @@ impl TransactionQueue { return Err(TransactionError::AlreadyImported); } + let min_gas_price = (self.minimal_gas_price, self.strategy); let address = tx.sender(); let nonce = tx.nonce(); let hash = tx.hash(); @@ -881,7 +937,7 @@ impl TransactionQueue { if nonce > next_nonce { // We have a gap - put to future. // Insert transaction (or replace old one with lower gas price) - try!(check_too_cheap(Self::replace_transaction(tx, state_nonce, &mut self.future, &mut self.by_hash))); + try!(check_too_cheap(Self::replace_transaction(tx, state_nonce, min_gas_price, &mut self.future, &mut self.by_hash))); // Enforce limit in Future let removed = self.future.enforce_limit(&mut self.by_hash); // Return an error if this transaction was not imported because of limit. @@ -897,7 +953,7 @@ impl TransactionQueue { self.move_matching_future_to_current(address, nonce + U256::one(), state_nonce); // Replace transaction if any - try!(check_too_cheap(Self::replace_transaction(tx, state_nonce, &mut self.current, &mut self.by_hash))); + try!(check_too_cheap(Self::replace_transaction(tx, state_nonce, min_gas_price, &mut self.current, &mut self.by_hash))); // Keep track of highest nonce stored in current let new_max = self.last_nonces.get(&address).map_or(nonce, |n| cmp::max(nonce, *n)); self.last_nonces.insert(address, new_max); @@ -934,8 +990,8 @@ impl TransactionQueue { /// /// Returns `true` if transaction actually got to the queue (`false` if there was already a transaction with higher /// gas_price) - fn replace_transaction(tx: VerifiedTransaction, base_nonce: U256, set: &mut TransactionSet, by_hash: &mut HashMap) -> bool { - let order = TransactionOrder::for_transaction(&tx, base_nonce); + fn replace_transaction(tx: VerifiedTransaction, base_nonce: U256, min_gas_price: (U256, PrioritizationStrategy), set: &mut TransactionSet, by_hash: &mut HashMap) -> bool { + let order = TransactionOrder::for_transaction(&tx, base_nonce, min_gas_price.0, min_gas_price.1); let hash = tx.hash(); let address = tx.sender(); let nonce = tx.nonce(); @@ -1015,12 +1071,12 @@ mod test { fn default_gas_val() -> U256 { 100_000.into() } fn default_gas_price() -> U256 { 1.into() } - fn new_unsigned_tx(nonce: U256, gas_price: U256) -> Transaction { + fn new_unsigned_tx(nonce: U256, gas: U256, gas_price: U256) -> Transaction { Transaction { action: Action::Create, value: U256::from(100), data: "3331600055".from_hex().unwrap(), - gas: default_gas_val(), + gas: gas, gas_price: gas_price, nonce: nonce } @@ -1028,7 +1084,12 @@ mod test { fn new_tx(nonce: U256, gas_price: U256) -> SignedTransaction { let keypair = Random.generate().unwrap(); - new_unsigned_tx(nonce, gas_price).sign(keypair.secret()) + new_unsigned_tx(nonce, default_gas_val(), gas_price).sign(keypair.secret()) + } + + fn new_tx_with_gas(gas: U256, gas_price: U256) -> SignedTransaction { + let keypair = Random.generate().unwrap(); + new_unsigned_tx(default_nonce(), gas, gas_price).sign(keypair.secret()) } fn new_tx_default() -> SignedTransaction { @@ -1043,8 +1104,8 @@ mod test { } fn new_tx_pair(nonce: U256, gas_price: U256, nonce_increment: U256, gas_price_increment: U256) -> (SignedTransaction, SignedTransaction) { - let tx1 = new_unsigned_tx(nonce, gas_price); - let tx2 = new_unsigned_tx(nonce + nonce_increment, gas_price + gas_price_increment); + let tx1 = new_unsigned_tx(nonce, default_gas_val(), gas_price); + let tx2 = new_unsigned_tx(nonce + nonce_increment, default_gas_val(), gas_price + gas_price_increment); let keypair = Random.generate().unwrap(); let secret = &keypair.secret(); @@ -1054,8 +1115,8 @@ mod test { /// Returns two consecutive transactions, both with increased gas price fn new_tx_pair_with_gas_price_increment(gas_price_increment: U256) -> (SignedTransaction, SignedTransaction) { let gas = default_gas_price() + gas_price_increment; - let tx1 = new_unsigned_tx(default_nonce(), gas); - let tx2 = new_unsigned_tx(default_nonce() + 1.into(), gas); + let tx1 = new_unsigned_tx(default_nonce(), default_gas_val(), gas); + let tx2 = new_unsigned_tx(default_nonce() + 1.into(), default_gas_val(), gas); let keypair = Random.generate().unwrap(); let secret = &keypair.secret(); @@ -1082,17 +1143,21 @@ mod test { assert_eq!(TransactionOrigin::External.cmp(&TransactionOrigin::RetractedBlock), Ordering::Greater); } + fn transaction_order(tx: &VerifiedTransaction, nonce: U256) -> TransactionOrder { + TransactionOrder::for_transaction(tx, nonce, 0.into(), PrioritizationStrategy::GasPriceOnly) + } + #[test] fn should_return_correct_nonces_when_dropped_because_of_limit() { // given - let mut txq = TransactionQueue::with_limits(2, !U256::zero(), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 2, !U256::zero(), !U256::zero()); let (tx1, tx2) = new_tx_pair(123.into(), 1.into(), 1.into(), 0.into()); let sender = tx1.sender().unwrap(); let nonce = tx1.nonce; txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); assert_eq!(txq.status().pending, 2); - assert_eq!(txq.last_nonce(&sender), Some(nonce + U256::one())); + assert_eq!(txq.last_nonce(&sender), Some(nonce + 1.into())); // when let tx = new_tx(123.into(), 1.into()); @@ -1138,9 +1203,9 @@ mod test { x }; // Insert both transactions - let order1 = TransactionOrder::for_transaction(&tx1, U256::zero()); + let order1 = transaction_order(&tx1, U256::zero()); set.insert(tx1.sender(), tx1.nonce(), order1.clone()); - let order2 = TransactionOrder::for_transaction(&tx2, U256::zero()); + let order2 = transaction_order(&tx2, U256::zero()); set.insert(tx2.sender(), tx2.nonce(), order2.clone()); assert_eq!(set.by_priority.len(), 2); assert_eq!(set.by_address.len(), 2); @@ -1181,7 +1246,7 @@ mod test { x }; // Insert both transactions - let order1 = TransactionOrder::for_transaction(&tx1, U256::zero()); + let order1 = transaction_order(&tx1, U256::zero()); set.insert(tx1.sender(), tx1.nonce(), order1.clone()); assert_eq!(set.by_priority.len(), 1); assert_eq!(set.by_address.len(), 1); @@ -1189,7 +1254,7 @@ mod test { assert_eq!(*set.by_gas_price.iter().next().unwrap().0, 1.into()); assert_eq!(set.by_gas_price.iter().next().unwrap().1.len(), 1); // Two different orders (imagine nonce changed in the meantime) - let order2 = TransactionOrder::for_transaction(&tx2, U256::one()); + let order2 = transaction_order(&tx2, U256::one()); set.insert(tx2.sender(), tx2.nonce(), order2.clone()); assert_eq!(set.by_priority.len(), 1); assert_eq!(set.by_address.len(), 1); @@ -1218,10 +1283,10 @@ mod test { }; let tx = new_tx_default(); let tx1 = VerifiedTransaction::new(tx.clone(), TransactionOrigin::External).unwrap(); - let order1 = TransactionOrder::for_transaction(&tx1, U256::zero()); + let order1 = TransactionOrder::for_transaction(&tx1, 0.into(), 1.into(), PrioritizationStrategy::GasPriceOnly); assert!(set.insert(tx1.sender(), tx1.nonce(), order1).is_none()); let tx2 = VerifiedTransaction::new(tx, TransactionOrigin::External).unwrap(); - let order2 = TransactionOrder::for_transaction(&tx2, U256::zero()); + let order2 = TransactionOrder::for_transaction(&tx2, 0.into(), 1.into(), PrioritizationStrategy::GasPriceOnly); assert!(set.insert(tx2.sender(), tx2.nonce(), order2).is_some()); } @@ -1238,7 +1303,7 @@ mod test { assert_eq!(set.gas_price_entry_limit(), 0.into()); let tx = new_tx_default(); let tx1 = VerifiedTransaction::new(tx.clone(), TransactionOrigin::External).unwrap(); - let order1 = TransactionOrder::for_transaction(&tx1, U256::zero()); + let order1 = TransactionOrder::for_transaction(&tx1, 0.into(), 1.into(), PrioritizationStrategy::GasPriceOnly); assert!(set.insert(tx1.sender(), tx1.nonce(), order1.clone()).is_none()); assert_eq!(set.gas_price_entry_limit(), 2.into()); } @@ -1246,7 +1311,7 @@ mod test { #[test] fn should_handle_same_transaction_imported_twice_with_different_state_nonces() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_similar_tx_pair(); let prev_nonce = |a: &Address| AccountDetails{ nonce: default_account_details(a).nonce - U256::one(), balance: !U256::zero() }; @@ -1271,7 +1336,7 @@ mod test { #[test] fn should_move_all_transactions_from_future() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 1.into()); let prev_nonce = |a: &Address| AccountDetails{ nonce: default_account_details(a).nonce - U256::one(), balance: !U256::zero() }; @@ -1297,7 +1362,7 @@ mod test { #[test] fn should_import_tx() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); // when @@ -1309,10 +1374,77 @@ mod test { assert_eq!(stats.pending, 1); } + #[test] + fn should_order_by_gas() { + // given + let mut txq = TransactionQueue::new(PrioritizationStrategy::GasAndGasPrice); + let tx1 = new_tx_with_gas(50000.into(), 40.into()); + let tx2 = new_tx_with_gas(40000.into(), 30.into()); + let tx3 = new_tx_with_gas(30000.into(), 10.into()); + let tx4 = new_tx_with_gas(50000.into(), 20.into()); + txq.set_minimal_gas_price(15.into()); + + // when + let res1 = txq.add(tx1, &default_account_details, TransactionOrigin::External); + let res2 = txq.add(tx2, &default_account_details, TransactionOrigin::External); + let res3 = txq.add(tx3, &default_account_details, TransactionOrigin::External); + let res4 = txq.add(tx4, &default_account_details, TransactionOrigin::External); + + // then + assert_eq!(res1.unwrap(), TransactionImportResult::Current); + assert_eq!(res2.unwrap(), TransactionImportResult::Current); + assert_eq!(unwrap_tx_err(res3), TransactionError::InsufficientGasPrice { + minimal: U256::from(15), + got: U256::from(10), + }); + assert_eq!(res4.unwrap(), TransactionImportResult::Current); + let stats = txq.status(); + assert_eq!(stats.pending, 3); + assert_eq!(txq.top_transactions()[0].gas, 40000.into()); + assert_eq!(txq.top_transactions()[1].gas, 50000.into()); + assert_eq!(txq.top_transactions()[2].gas, 50000.into()); + assert_eq!(txq.top_transactions()[1].gas_price, 40.into()); + assert_eq!(txq.top_transactions()[2].gas_price, 20.into()); + } + + #[test] + fn should_order_by_gas_factor() { + // given + let mut txq = TransactionQueue::new(PrioritizationStrategy::GasFactorAndGasPrice); + + let tx1 = new_tx_with_gas(150_000.into(), 40.into()); + let tx2 = new_tx_with_gas(40_000.into(), 16.into()); + let tx3 = new_tx_with_gas(30_000.into(), 15.into()); + let tx4 = new_tx_with_gas(150_000.into(), 62.into()); + txq.set_minimal_gas_price(15.into()); + + // when + let res1 = txq.add(tx1, &default_account_details, TransactionOrigin::External); + let res2 = txq.add(tx2, &default_account_details, TransactionOrigin::External); + let res3 = txq.add(tx3, &default_account_details, TransactionOrigin::External); + let res4 = txq.add(tx4, &default_account_details, TransactionOrigin::External); + + // then + assert_eq!(res1.unwrap(), TransactionImportResult::Current); + assert_eq!(res2.unwrap(), TransactionImportResult::Current); + assert_eq!(res3.unwrap(), TransactionImportResult::Current); + assert_eq!(res4.unwrap(), TransactionImportResult::Current); + let stats = txq.status(); + assert_eq!(stats.pending, 4); + assert_eq!(txq.top_transactions()[0].gas, 30_000.into()); + assert_eq!(txq.top_transactions()[1].gas, 150_000.into()); + assert_eq!(txq.top_transactions()[2].gas, 40_000.into()); + assert_eq!(txq.top_transactions()[3].gas, 150_000.into()); + assert_eq!(txq.top_transactions()[0].gas_price, 15.into()); + assert_eq!(txq.top_transactions()[1].gas_price, 62.into()); + assert_eq!(txq.top_transactions()[2].gas_price, 16.into()); + assert_eq!(txq.top_transactions()[3].gas_price, 40.into()); + } + #[test] fn gas_limit_should_never_overflow() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); txq.set_gas_limit(U256::zero()); assert_eq!(txq.gas_limit, U256::zero()); @@ -1326,7 +1458,7 @@ mod test { #[test] fn should_not_import_transaction_above_gas_limit() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); let gas = tx.gas; let limit = gas / U256::from(2); @@ -1349,7 +1481,7 @@ mod test { #[test] fn should_drop_transactions_from_senders_without_balance() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); let account = |a: &Address| AccountDetails { nonce: default_account_details(a).nonce, @@ -1372,7 +1504,7 @@ mod test { #[test] fn should_not_import_transaction_below_min_gas_price_threshold_if_external() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); txq.set_minimal_gas_price(tx.gas_price + U256::one()); @@ -1392,7 +1524,7 @@ mod test { #[test] fn should_import_transaction_below_min_gas_price_threshold_if_local() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); txq.set_minimal_gas_price(tx.gas_price + U256::one()); @@ -1411,8 +1543,8 @@ mod test { use rlp::{self, RlpStream, Stream}; // given - let mut txq = TransactionQueue::new(); - let tx = new_unsigned_tx(123.into(), 1.into()); + let mut txq = TransactionQueue::default(); + let tx = new_unsigned_tx(123.into(), 100.into(), 1.into()); let stx = { let mut s = RlpStream::new_list(9); s.append(&tx.nonce); @@ -1436,7 +1568,7 @@ mod test { #[test] fn should_import_txs_from_same_sender() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); @@ -1454,7 +1586,7 @@ mod test { #[test] fn should_prioritize_local_transactions_within_same_nonce_height() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); // the second one has same nonce but higher `gas_price` let (_, tx2) = new_similar_tx_pair(); @@ -1475,7 +1607,7 @@ mod test { #[test] fn should_prioritize_reimported_transactions_within_same_nonce_height() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); // the second one has same nonce but higher `gas_price` let (_, tx2) = new_similar_tx_pair(); @@ -1496,7 +1628,7 @@ mod test { #[test] fn should_not_prioritize_local_transactions_with_different_nonce_height() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // when @@ -1514,7 +1646,7 @@ mod test { fn should_penalize_transactions_from_sender_in_future() { // given let prev_nonce = |a: &Address| AccountDetails{ nonce: default_account_details(a).nonce - U256::one(), balance: !U256::zero() }; - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); // txa, txb - slightly bigger gas price to have consistent ordering let (txa, txb) = new_tx_pair_default(1.into(), 0.into()); let (tx1, tx2) = new_tx_pair_with_gas_price_increment(3.into()); @@ -1543,7 +1675,7 @@ mod test { #[test] fn should_penalize_transactions_from_sender() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); // txa, txb - slightly bigger gas price to have consistent ordering let (txa, txb) = new_tx_pair_default(1.into(), 0.into()); let (tx1, tx2) = new_tx_pair_with_gas_price_increment(3.into()); @@ -1576,7 +1708,7 @@ mod test { #[test] fn should_return_pending_hashes() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); @@ -1594,7 +1726,7 @@ mod test { #[test] fn should_put_transaction_to_futures_if_gap_detected() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(2.into(), 0.into()); @@ -1620,7 +1752,7 @@ mod test { !U256::zero() }; let next2_nonce = default_nonce() + U256::from(3); - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); txq.add(tx.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); @@ -1639,12 +1771,12 @@ mod test { #[test] fn should_move_transactions_if_gap_filled() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let kp = Random.generate().unwrap(); let secret = kp.secret(); - let tx = new_unsigned_tx(123.into(), 1.into()).sign(secret); - let tx1 = new_unsigned_tx(124.into(), 1.into()).sign(secret); - let tx2 = new_unsigned_tx(125.into(), 1.into()).sign(secret); + let tx = new_unsigned_tx(123.into(), default_gas_val(), 1.into()).sign(secret); + let tx1 = new_unsigned_tx(124.into(), default_gas_val(), 1.into()).sign(secret); + let tx2 = new_unsigned_tx(125.into(), default_gas_val(), 1.into()).sign(secret); txq.add(tx, &default_account_details, TransactionOrigin::External).unwrap(); assert_eq!(txq.status().pending, 1); @@ -1666,7 +1798,7 @@ mod test { #[test] fn should_remove_transaction() { // given - let mut txq2 = TransactionQueue::new(); + let mut txq2 = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(3.into(), 0.into()); txq2.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); txq2.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); @@ -1687,7 +1819,7 @@ mod test { #[test] fn should_move_transactions_to_future_if_gap_introduced() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let tx3 = new_tx_default(); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); @@ -1708,7 +1840,7 @@ mod test { #[test] fn should_clear_queue() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // add @@ -1728,7 +1860,7 @@ mod test { #[test] fn should_drop_old_transactions_when_hitting_the_limit() { // given - let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 1, !U256::zero(), !U256::zero()); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let sender = tx.sender().unwrap(); let nonce = tx.nonce; @@ -1749,7 +1881,7 @@ mod test { #[test] fn should_limit_future_transactions() { - let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 1, !U256::zero(), !U256::zero()); txq.current.set_limit(10); let (tx1, tx2) = new_tx_pair_default(4.into(), 1.into()); let (tx3, tx4) = new_tx_pair_default(4.into(), 2.into()); @@ -1768,19 +1900,20 @@ mod test { #[test] fn should_limit_by_gas() { - let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 100, default_gas_val() * U256::from(2), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).ok(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).ok(); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).ok(); - txq.add(tx4.clone(), &default_account_details, TransactionOrigin::External).ok(); + txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + // limited by gas + txq.add(tx4.clone(), &default_account_details, TransactionOrigin::External).unwrap_err(); assert_eq!(txq.status().pending, 2); } #[test] fn should_keep_own_transactions_above_gas_limit() { - let mut txq = TransactionQueue::with_limits(100, default_gas_val() * U256::from(2), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 100, default_gas_val() * U256::from(2), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); let (tx5, tx6) = new_tx_pair_default(U256::from(1), U256::from(2)); @@ -1796,10 +1929,10 @@ mod test { #[test] fn should_drop_transactions_with_old_nonces() { - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); let last_nonce = tx.nonce + U256::one(); - let fetch_last_nonce = |_a: &Address| AccountDetails{ nonce: last_nonce, balance: !U256::zero() }; + let fetch_last_nonce = |_a: &Address| AccountDetails { nonce: last_nonce, balance: !U256::zero() }; // when let res = txq.add(tx, &fetch_last_nonce, TransactionOrigin::External); @@ -1816,7 +1949,7 @@ mod test { // given let nonce = |a: &Address| AccountDetails { nonce: default_account_details(a).nonce + U256::one(), balance: !U256::zero() }; - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (_tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); assert_eq!(txq.status().future, 1); @@ -1835,7 +1968,7 @@ mod test { #[test] fn should_accept_same_transaction_twice_if_removed() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); @@ -1856,7 +1989,7 @@ mod test { #[test] fn should_not_move_to_future_if_state_nonce_is_higher() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let tx3 = new_tx_default(); txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); @@ -1879,9 +2012,9 @@ mod test { fn should_replace_same_transaction_when_has_higher_fee() { init_log(); // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let keypair = Random.generate().unwrap(); - let tx = new_unsigned_tx(123.into(), 1.into()).sign(keypair.secret()); + let tx = new_unsigned_tx(123.into(), default_gas_val(), 1.into()).sign(keypair.secret()); let tx2 = { let mut tx2 = (*tx).clone(); tx2.gas_price = U256::from(200); @@ -1902,9 +2035,9 @@ mod test { #[test] fn should_replace_same_transaction_when_importing_to_futures() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let keypair = Random.generate().unwrap(); - let tx0 = new_unsigned_tx(123.into(), 1.into()).sign(keypair.secret()); + let tx0 = new_unsigned_tx(123.into(), default_gas_val(), 1.into()).sign(keypair.secret()); let tx1 = { let mut tx1 = (*tx0).clone(); tx1.nonce = U256::from(124); @@ -1936,7 +2069,7 @@ mod test { !U256::zero() }; let next_nonce = |a: &Address| AccountDetails{ nonce: default_account_details(a).nonce + U256::one(), balance: !U256::zero() }; - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); txq.add(tx1.clone(), &previous_nonce, TransactionOrigin::External).unwrap(); txq.add(tx2, &previous_nonce, TransactionOrigin::External).unwrap(); @@ -1954,7 +2087,7 @@ mod test { #[test] fn should_return_none_when_transaction_from_given_address_does_not_exist() { // given - let txq = TransactionQueue::new(); + let txq = TransactionQueue::default(); // then assert_eq!(txq.last_nonce(&Address::default()), None); @@ -1963,7 +2096,7 @@ mod test { #[test] fn should_return_correct_nonce_when_transactions_from_given_address_exist() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let tx = new_tx_default(); let from = tx.sender().unwrap(); let nonce = tx.nonce; @@ -1979,7 +2112,7 @@ mod test { #[test] fn should_remove_old_transaction_even_if_newer_transaction_was_not_known() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); let (nonce1, nonce2) = (tx1.nonce, tx2.nonce); let details1 = |_a: &Address| AccountDetails { nonce: nonce1, balance: !U256::zero() }; @@ -1997,7 +2130,7 @@ mod test { #[test] fn should_return_valid_last_nonce_after_remove_all() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(4.into(), 0.into()); let sender = tx1.sender().unwrap(); let (nonce1, nonce2) = (tx1.nonce, tx2.nonce); @@ -2021,7 +2154,7 @@ mod test { #[test] fn should_return_true_if_there_is_local_transaction_pending() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); assert_eq!(txq.has_local_pending_transactions(), false); @@ -2037,7 +2170,7 @@ mod test { #[test] fn should_keep_right_order_in_future() { // given - let mut txq = TransactionQueue::with_limits(1, !U256::zero(), !U256::zero()); + let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 1, !U256::zero(), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); let prev_nonce = |a: &Address| AccountDetails { nonce: default_account_details(a).nonce - U256::one(), balance: default_account_details(a).balance }; @@ -2054,15 +2187,16 @@ mod test { #[test] fn should_return_correct_last_nonce() { // given - let mut txq = TransactionQueue::new(); + let mut txq = TransactionQueue::default(); let (tx1, tx2, tx2_2, tx3) = { let keypair = Random.generate().unwrap(); let secret = &keypair.secret(); let nonce = 123.into(); - let tx = new_unsigned_tx(nonce, 1.into()); - let tx2 = new_unsigned_tx(nonce + 1.into(), 1.into()); - let tx2_2 = new_unsigned_tx(nonce + 1.into(), 5.into()); - let tx3 = new_unsigned_tx(nonce + 2.into(), 1.into()); + let gas = default_gas_val(); + let tx = new_unsigned_tx(nonce, gas, 1.into()); + let tx2 = new_unsigned_tx(nonce + 1.into(), gas, 1.into()); + let tx2_2 = new_unsigned_tx(nonce + 1.into(), gas, 5.into()); + let tx3 = new_unsigned_tx(nonce + 2.into(), gas, 1.into()); (tx.sign(secret), tx2.sign(secret), tx2_2.sign(secret), tx3.sign(secret)) diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index 3a9531bcff..b71bd93612 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -67,8 +67,9 @@ usd_per_eth = "auto" price_update_period = "hourly" gas_floor_target = "4700000" gas_cap = "6283184" -tx_queue_size = 2048 +tx_queue_size = 1024 tx_queue_gas = "auto" +tx_queue_strategy = "gas_factor" tx_gas_limit = "6283184" extra_data = "Parity" remove_solved = false diff --git a/parity/cli/config.toml b/parity/cli/config.toml index d9608640c8..02ff9c0dd8 100644 --- a/parity/cli/config.toml +++ b/parity/cli/config.toml @@ -40,7 +40,7 @@ force_sealing = true reseal_on_txs = "all" reseal_min_period = 4000 price_update_period = "hourly" -tx_queue_size = 2048 +tx_queue_size = 1024 tx_queue_gas = "auto" [footprint] diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index c4ec4135cf..d4398b6f5b 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -193,10 +193,12 @@ usage! { or |c: &Config| otry!(c.mining).gas_cap.clone(), flag_extra_data: Option = None, or |c: &Config| otry!(c.mining).extra_data.clone().map(Some), - flag_tx_queue_size: usize = 2048usize, + flag_tx_queue_size: usize = 1024usize, or |c: &Config| otry!(c.mining).tx_queue_size.clone(), flag_tx_queue_gas: String = "auto", or |c: &Config| otry!(c.mining).tx_queue_gas.clone(), + flag_tx_queue_strategy: String = "gas_factor", + or |c: &Config| otry!(c.mining).tx_queue_strategy.clone(), flag_remove_solved: bool = false, or |c: &Config| otry!(c.mining).remove_solved.clone(), flag_notify_work: Option = None, @@ -355,6 +357,7 @@ struct Mining { extra_data: Option, tx_queue_size: Option, tx_queue_gas: Option, + tx_queue_strategy: Option, remove_solved: Option, notify_work: Option>, } @@ -531,8 +534,9 @@ mod tests { flag_gas_floor_target: "4700000".into(), flag_gas_cap: "6283184".into(), flag_extra_data: Some("Parity".into()), - flag_tx_queue_size: 2048usize, + flag_tx_queue_size: 1024usize, flag_tx_queue_gas: "auto".into(), + flag_tx_queue_strategy: "gas_factor".into(), flag_remove_solved: false, flag_notify_work: Some("http://localhost:3001".into()), @@ -684,8 +688,9 @@ mod tests { price_update_period: Some("hourly".into()), gas_floor_target: None, gas_cap: None, - tx_queue_size: Some(2048), + tx_queue_size: Some(1024), tx_queue_gas: Some("auto".into()), + tx_queue_strategy: None, tx_gas_limit: None, extra_data: None, remove_solved: None, diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 4f416e10db..736af58345 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -188,6 +188,12 @@ Sealing/Mining Options: the queue. LIMIT can be either an amount of gas or 'auto' or 'off'. 'auto' sets the limit to be 20x the current block gas limit. (default: {flag_tx_queue_gas}). + --tx-queue-strategy S Prioritization strategy used to order transactions + in the queue. S may be: + gas - Prioritize txs with low gas limit; + gas_price - Prioritize txs with high gas price; + gas_factor - Prioritize txs using gas price + and gas limit ratio (default: {flag_tx_queue_strategy}). --remove-solved Move solved blocks from the work package queue instead of cloning them. This gives a slightly faster import speed, but means that extra solutions diff --git a/parity/configuration.rs b/parity/configuration.rs index 5303b12019..9043a814fc 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -30,7 +30,7 @@ use rpc::{IpcConfiguration, HttpConfiguration}; use ethcore_rpc::NetworkSettings; use cache::CacheConfig; use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, -geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit}; +geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit, to_queue_strategy}; use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras}; use ethcore_logger::Config as LogConfig; use dir::Directories; @@ -360,6 +360,7 @@ impl Configuration { }, tx_queue_size: self.args.flag_tx_queue_size, tx_queue_gas_limit: try!(to_gas_limit(&self.args.flag_tx_queue_gas)), + tx_queue_strategy: try!(to_queue_strategy(&self.args.flag_tx_queue_strategy)), pending_set: try!(to_pending_set(&self.args.flag_relay_set)), reseal_min_period: Duration::from_millis(self.args.flag_reseal_min_period), work_queue_size: self.args.flag_work_queue_size, @@ -647,6 +648,7 @@ mod tests { use cli::Args; use ethcore_rpc::NetworkSettings; use ethcore::client::{VMType, BlockID}; + use ethcore::miner::{MinerOptions, PrioritizationStrategy}; use helpers::{replace_home, default_network_config}; use run::RunCmd; use signer::Configuration as SignerConfiguration; @@ -830,6 +832,27 @@ mod tests { })); } + #[test] + fn should_parse_mining_options() { + // given + let mut mining_options = MinerOptions::default(); + + // when + let conf0 = parse(&["parity"]); + let conf1 = parse(&["parity", "--tx-queue-strategy", "gas_factor"]); + let conf2 = parse(&["parity", "--tx-queue-strategy", "gas_price"]); + let conf3 = parse(&["parity", "--tx-queue-strategy", "gas"]); + + // then + assert_eq!(conf0.miner_options().unwrap(), mining_options); + mining_options.tx_queue_strategy = PrioritizationStrategy::GasFactorAndGasPrice; + assert_eq!(conf1.miner_options().unwrap(), mining_options); + mining_options.tx_queue_strategy = PrioritizationStrategy::GasPriceOnly; + assert_eq!(conf2.miner_options().unwrap(), mining_options); + mining_options.tx_queue_strategy = PrioritizationStrategy::GasAndGasPrice; + assert_eq!(conf3.miner_options().unwrap(), mining_options); + } + #[test] fn should_parse_network_settings() { // given diff --git a/parity/helpers.rs b/parity/helpers.rs index c8a985105c..af947329b6 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -22,7 +22,7 @@ use std::fs::File; use util::{clean_0x, U256, Uint, Address, path, CompactionProfile}; use util::journaldb::Algorithm; use ethcore::client::{Mode, BlockID, VMType, DatabaseCompactionProfile, ClientConfig}; -use ethcore::miner::{PendingSet, GasLimit}; +use ethcore::miner::{PendingSet, GasLimit, PrioritizationStrategy}; use cache::CacheConfig; use dir::DatabaseDirectories; use upgrade::upgrade; @@ -101,6 +101,15 @@ pub fn to_gas_limit(s: &str) -> Result { } } +pub fn to_queue_strategy(s: &str) -> Result { + match s { + "gas" => Ok(PrioritizationStrategy::GasAndGasPrice), + "gas_price" => Ok(PrioritizationStrategy::GasPriceOnly), + "gas_factor" => Ok(PrioritizationStrategy::GasFactorAndGasPrice), + other => Err(format!("Invalid queue strategy: {}", other)), + } +} + pub fn to_address(s: Option) -> Result { match s { Some(ref a) => clean_0x(a).parse().map_err(|_| format!("Invalid address: {:?}", a)), diff --git a/parity/params.rs b/parity/params.rs index ee3038ebfa..faba029b2b 100644 --- a/parity/params.rs +++ b/parity/params.rs @@ -206,7 +206,7 @@ impl Default for MinerExtras { extra_data: version_data(), gas_floor_target: U256::from(4_700_000), gas_ceil_target: U256::from(6_283_184), - transactions_limit: 2048, + transactions_limit: 1024, } } } diff --git a/rpc/src/v1/tests/eth.rs b/rpc/src/v1/tests/eth.rs index 1dfe979685..5d74815513 100644 --- a/rpc/src/v1/tests/eth.rs +++ b/rpc/src/v1/tests/eth.rs @@ -24,7 +24,7 @@ use ethcore::spec::{Genesis, Spec}; use ethcore::block::Block; use ethcore::views::BlockView; use ethcore::ethereum; -use ethcore::miner::{MinerOptions, GasPricer, MinerService, ExternalMiner, Miner, PendingSet, GasLimit}; +use ethcore::miner::{MinerOptions, GasPricer, MinerService, ExternalMiner, Miner, PendingSet, PrioritizationStrategy, GasLimit}; use ethcore::account_provider::AccountProvider; use devtools::RandomTempPath; use util::Hashable; @@ -59,6 +59,7 @@ fn miner_service(spec: &Spec, accounts: Arc) -> Arc { reseal_on_own_tx: true, tx_queue_size: 1024, tx_gas_limit: !U256::zero(), + tx_queue_strategy: PrioritizationStrategy::GasPriceOnly, tx_queue_gas_limit: GasLimit::None, pending_set: PendingSet::SealingOrElseQueue, reseal_min_period: Duration::from_secs(0), -- GitLab From 709f00ceb7566a81f3ad9fa6abc96eb995677e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Sun, 16 Oct 2016 00:20:11 +0200 Subject: [PATCH 057/393] Fixing compilation without default features (#2638) * Fixing compilation without default features * Removing unused import --- rpc/src/v1/impls/ethcore.rs | 1 - signer/src/ws_server/session.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rpc/src/v1/impls/ethcore.rs b/rpc/src/v1/impls/ethcore.rs index 33123ddd5d..b430a710c5 100644 --- a/rpc/src/v1/impls/ethcore.rs +++ b/rpc/src/v1/impls/ethcore.rs @@ -36,7 +36,6 @@ use v1::traits::Ethcore; use v1::types::{Bytes, U256, H160, H256, H512, Peers, Transaction, RpcSettings}; use v1::helpers::{errors, SigningQueue, SignerService, NetworkSettings}; use v1::helpers::dispatch::DEFAULT_MAC; -use v1::helpers::params::expect_no_params; use v1::helpers::auto_args::Ready; /// Ethcore implementation. diff --git a/signer/src/ws_server/session.rs b/signer/src/ws_server/session.rs index 1e3a9a7d2e..14c619a285 100644 --- a/signer/src/ws_server/session.rs +++ b/signer/src/ws_server/session.rs @@ -47,7 +47,7 @@ mod signer { #[cfg(not(feature = "ui"))] mod signer { pub struct File { - pub content: &'static str, + pub content: &'static [u8], pub content_type: &'static str, } -- GitLab From b5c65e3df59027a12d11d772e57132990f2ce19d Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Sun, 16 Oct 2016 13:44:56 +0200 Subject: [PATCH 058/393] Fix up ETC EIP-150 transition to 2,500,000. (#2636) --- ethcore/res/ethereum/classic.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethcore/res/ethereum/classic.json b/ethcore/res/ethereum/classic.json index 35a2cbed94..5d951752f9 100644 --- a/ethcore/res/ethereum/classic.json +++ b/ethcore/res/ethereum/classic.json @@ -11,7 +11,7 @@ "blockReward": "0x4563918244F40000", "registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b", "homesteadTransition": "0x118c30", - "eip150Transition": "0x7fffffffffffffff" + "eip150Transition": "0x2625a0" } } }, -- GitLab From 238840d74e3c04ffc4396a480e5fb8c8aa47d5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Mon, 17 Oct 2016 11:55:47 +0200 Subject: [PATCH 059/393] Fixing evmbin compilation (#2652) --- evmbin/Cargo.lock | 770 +++++++++++++++++++++++++++------------------ evmbin/src/ext.rs | 12 +- evmbin/src/main.rs | 11 +- 3 files changed, 472 insertions(+), 321 deletions(-) diff --git a/evmbin/Cargo.lock b/evmbin/Cargo.lock index d97d262f26..600af473b1 100644 --- a/evmbin/Cargo.lock +++ b/evmbin/Cargo.lock @@ -2,15 +2,15 @@ name = "evm" version = "0.1.0" dependencies = [ - "docopt 0.6.81 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore 1.3.0", - "ethcore-util 1.3.0", + "docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)", + "ethcore 1.4.0", + "ethcore-util 1.4.0", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "aho-corasick" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -18,16 +18,16 @@ dependencies = [ [[package]] name = "ansi_term" -version = "0.7.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "arrayvec" -version = "0.3.16" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "nodrop 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "odds 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -38,15 +38,6 @@ dependencies = [ "syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "bigint" -version = "0.1.0" -dependencies = [ - "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "bit-set" version = "0.4.0" @@ -60,11 +51,6 @@ name = "bit-vec" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "bitflags" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bitflags" version = "0.4.0" @@ -77,17 +63,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "blastfig" -version = "0.3.3" +name = "bloomchain" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "bloomchain" -version = "0.1.0" +name = "byteorder" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -100,27 +86,18 @@ name = "cfg-if" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "chrono" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "cookie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -133,99 +110,136 @@ dependencies = [ [[package]] name = "docopt" -version = "0.6.81" +version = "0.6.86" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "dtoa" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "elastic-array" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "env_logger" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "eth-secp256k1" -version = "0.5.4" -source = "git+https://github.com/ethcore/rust-secp256k1#a9a0b1be1f39560ca86e8fc8e55e205a753ff25c" +version = "0.5.6" +source = "git+https://github.com/ethcore/rust-secp256k1#f998f9a8c18227af200f0f7fdadf8a6560d391ff" dependencies = [ - "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethash" -version = "1.3.0" +version = "1.4.0" dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "sha3 0.1.0", ] [[package]] name = "ethcore" -version = "1.3.0" +version = "1.4.0" dependencies = [ "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "bloomchain 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ethash 1.3.0", - "ethcore-devtools 1.3.0", - "ethcore-ipc 1.3.0", - "ethcore-ipc-codegen 1.3.0", - "ethcore-ipc-nano 1.3.0", - "ethcore-util 1.3.0", + "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "ethash 1.4.0", + "ethcore-bloom-journal 0.1.0", + "ethcore-devtools 1.4.0", + "ethcore-io 1.4.0", + "ethcore-ipc 1.4.0", + "ethcore-ipc-codegen 1.4.0", + "ethcore-ipc-nano 1.4.0", + "ethcore-util 1.4.0", "ethjson 0.1.0", + "ethkey 0.2.0", "ethstore 0.1.0", - "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.4 (git+https://github.com/ethcore/hyper)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lru-cache 0.1.0 (git+https://github.com/contain-rs/lru-cache)", + "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.1.0", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ethcore-bigint" +version = "0.1.1" +dependencies = [ + "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ethcore-bloom-journal" +version = "0.1.0" + [[package]] name = "ethcore-devtools" -version = "1.3.0" +version = "1.4.0" dependencies = [ "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ethcore-io" +version = "1.4.0" +dependencies = [ + "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.5.1 (git+https://github.com/ethcore/mio?branch=v0.5.x)", + "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ethcore-ipc" -version = "1.3.0" +version = "1.4.0" dependencies = [ - "ethcore-devtools 1.3.0", - "ethcore-util 1.3.0", - "nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)", + "ethcore-devtools 1.4.0", + "ethcore-util 1.4.0", + "nanomsg 0.7.0 (git+https://github.com/ethcore/nanomsg.rs.git)", "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethcore-ipc-codegen" -version = "1.3.0" +version = "1.4.0" dependencies = [ "aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -236,95 +250,107 @@ dependencies = [ [[package]] name = "ethcore-ipc-nano" -version = "1.3.0" +version = "1.4.0" dependencies = [ - "ethcore-ipc 1.3.0", - "jsonrpc-core 2.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "ethcore-ipc 1.4.0", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "nanomsg 0.5.1 (git+https://github.com/ethcore/nanomsg.rs.git)", + "nanomsg 0.7.0 (git+https://github.com/ethcore/nanomsg.rs.git)", ] [[package]] name = "ethcore-util" -version = "1.3.0" -dependencies = [ - "ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "bigint 0.1.0", - "chrono 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", - "ethcore-devtools 1.3.0", - "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "igd 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", +version = "1.4.0" +dependencies = [ + "ansi_term 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "eth-secp256k1 0.5.6 (git+https://github.com/ethcore/rust-secp256k1)", + "ethcore-bigint 0.1.1", + "ethcore-bloom-journal 0.1.0", + "ethcore-devtools 1.4.0", + "heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.5.1 (git+https://github.com/ethcore/mio?branch=v0.5.x)", - "nix 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.1.0", "rocksdb 0.4.5 (git+https://github.com/ethcore/rust-rocksdb)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "sha3 0.1.0", - "slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "table 0.1.0", "target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "using_queue 0.1.0", - "vergen 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ethcrypto" +version = "0.1.0" +dependencies = [ + "eth-secp256k1 0.5.6 (git+https://github.com/ethcore/rust-secp256k1)", + "ethcore-bigint 0.1.1", + "ethkey 0.2.0", + "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethjson" version = "0.1.0" dependencies = [ - "ethcore-util 1.3.0", + "ethcore-util 1.4.0", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethkey" version = "0.2.0" dependencies = [ - "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", + "eth-secp256k1 0.5.6 (git+https://github.com/ethcore/rust-secp256k1)", + "ethcore-bigint 0.1.1", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethstore" version = "0.1.0" dependencies = [ + "ethcrypto 0.1.0", "ethkey 0.2.0", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "gcc" -version = "0.3.28" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "hamming" @@ -333,55 +359,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "heapsize" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "hpack" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "httparse" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "hyper" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "hyper" version = "0.9.4" source = "git+https://github.com/ethcore/hyper#9e346c1d4bc30cd4142dea9d8a0b117d30858ca4" dependencies = [ - "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rotor 0.6.3 (git+https://github.com/ethcore/rotor)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "spmc 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -389,7 +387,7 @@ dependencies = [ "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "vecio 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -398,45 +396,27 @@ name = "idna" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "igd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hyper 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "itertools" -version = "0.4.13" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "jsonrpc-core" -version = "2.0.7" +name = "itoa" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -452,7 +432,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.12" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "linked-hash-map" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -460,9 +445,17 @@ name = "log" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lru-cache" +version = "0.1.0" +source = "git+https://github.com/contain-rs/lru-cache#3259e3a7200510af55b049f99db407d0c87ed253" +dependencies = [ + "linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "matches" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -470,12 +463,12 @@ name = "memchr" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -487,109 +480,109 @@ version = "0.5.1" source = "git+https://github.com/ethcore/mio?branch=v0.5.x#3842d3b250ffd7bd9b16f9586b875ddcbac2b0dd" dependencies = [ "bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "miow" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nanomsg" -version = "0.5.1" -source = "git+https://github.com/ethcore/nanomsg.rs.git#c40fe442c9afaea5b38009a3d992ca044dcceb00" +version = "0.7.0" +source = "git+https://github.com/ethcore/nanomsg.rs.git#e93f14e5014ee6e67f4a39a2d7889b020acec4ea" dependencies = [ - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "nanomsg-sys 0.5.0 (git+https://github.com/ethcore/nanomsg.rs.git)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "nanomsg-sys 0.7.0 (git+https://github.com/ethcore/nanomsg.rs.git)", ] [[package]] name = "nanomsg-sys" -version = "0.5.0" -source = "git+https://github.com/ethcore/nanomsg.rs.git#c40fe442c9afaea5b38009a3d992ca044dcceb00" +version = "0.7.0" +source = "git+https://github.com/ethcore/nanomsg.rs.git#e93f14e5014ee6e67f4a39a2d7889b020acec4ea" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "net2" -version = "0.2.23" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nix" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nodrop" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "odds 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nom" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num" -version = "0.1.32" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-complex 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-bigint 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-bigint" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-complex" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -598,7 +591,7 @@ name = "num-integer" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -607,47 +600,47 @@ version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-rational" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-bigint 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.1.32" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "odds" -version = "0.2.12" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parking_lot" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -657,7 +650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "primal-check 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "primal-sieve 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "primal-sieve 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -673,7 +666,7 @@ name = "primal-check" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -683,7 +676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "primal-sieve" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -714,57 +707,72 @@ name = "quick-error" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "quote" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rand" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "0.1.68" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.3.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rlp" +version = "0.1.0" +dependencies = [ + "elastic-array 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethcore-bigint 0.1.1", + "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rocksdb" version = "0.4.5" -source = "git+https://github.com/ethcore/rust-rocksdb#eadce7f74cfe92b99ce63a77af425b47857239b8" +source = "git+https://github.com/ethcore/rust-rocksdb#64c63ccbe1f62c2e2b39262486f9ba813793af58" dependencies = [ - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb-sys 0.3.0 (git+https://github.com/ethcore/rust-rocksdb)", ] [[package]] name = "rocksdb-sys" version = "0.3.0" -source = "git+https://github.com/ethcore/rust-rocksdb#eadce7f74cfe92b99ce63a77af425b47857239b8" +source = "git+https://github.com/ethcore/rust-rocksdb#64c63ccbe1f62c2e2b39262486f9ba813793af58" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -783,8 +791,8 @@ name = "rust-crypto" version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", @@ -813,40 +821,50 @@ name = "semver" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "nom 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde" -version = "0.7.9" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_codegen" -version = "0.7.9" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen_internals 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_syntax 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_codegen_internals" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "syn 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "0.7.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "sha3" version = "0.1.0" dependencies = [ - "gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -864,15 +882,6 @@ name = "smallvec" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "solicit" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "spmc" version = "0.2.1" @@ -880,8 +889,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "strsim" -version = "0.3.0" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quote 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "syntex" @@ -891,19 +909,64 @@ dependencies = [ "syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syntex" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "syntex_errors 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_syntax 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syntex_errors" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_pos 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syntex_pos" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "syntex_syntax" version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syntex_syntax" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_errors 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_pos 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "table" version = "0.1.0" @@ -919,7 +982,16 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "term" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -928,12 +1000,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -945,13 +1017,13 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tiny-keccak" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -977,7 +1049,7 @@ name = "unicode-bidi" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -992,23 +1064,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "url" -version = "1.1.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1020,29 +1080,21 @@ name = "utf8-ranges" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "uuid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "vecio" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "vergen" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "blastfig 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1053,7 +1105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1066,31 +1118,123 @@ name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "xml-rs" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "xml-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "xmltree" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "xml-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum ansi_term 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "30275ad0ad84ec1c06dde3b3f7d23c6006b7d76d61a85e7060b426b747eff70d" +"checksum arrayvec 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d89f1b0e242270b5b797778af0c8d182a1a2ccac5d8d6fadf414223cc0fab096" +"checksum aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07d344974f0a155f091948aa389fb1b912d3a58414fbdb9c8d446d193ee3496a" +"checksum bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c" +"checksum bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5b97c2c8e8bbb4251754f559df8af22fb264853c7d009084a576cdf12565089d" +"checksum bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dead7461c1127cf637931a1e50934eb6eee8bff2f74433ac7909e9afcee04a3" +"checksum bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4f67931368edf3a9a51d29886d245f1c3db2f1ef0dcc9e35ff70341b78c10d23" +"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" +"checksum bloomchain 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f421095d2a76fc24cd3fb3f912b90df06be7689912b1bdb423caefae59c258d" +"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" +"checksum bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c129aff112dcc562970abb69e2508b40850dd24c274761bb50fb8a0067ba6c27" +"checksum cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de1e760d7b6535af4241fca8bd8adf68e2e7edacc6b29f5d399050c5e48cf88c" +"checksum cookie 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3d6405328b6edb412158b3b7710e2634e23f3614b9bb1c412df7952489a626" +"checksum crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97" +"checksum deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1614659040e711785ed8ea24219140654da1729f3ec8a47a9719d041112fe7bf" +"checksum docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)" = "4a7ef30445607f6fc8720f0a0a2c7442284b629cf0d049286860fae23e71c4d9" +"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d" +"checksum elastic-array 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4bc9250a632e7c001b741eb0ec6cee93c9a5b6d5f1879696a4b94d62b012210a" +"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" +"checksum eth-secp256k1 0.5.6 (git+https://github.com/ethcore/rust-secp256k1)" = "" +"checksum gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "41337e9dc80ebadf36b4f252bf7440f61bcf34f99caa170e50dcd0f9a0cdb5d8" +"checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1" +"checksum heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8c80e194758495a9109566134dc06e42ea0423987d6ceca016edaa90381b3549" +"checksum httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46534074dbb80b070d60a5cb8ecadd8963a00a438ae1a95268850a7ef73b67ae" +"checksum hyper 0.9.4 (git+https://github.com/ethcore/hyper)" = "" +"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11" +"checksum itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +"checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" +"checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f" +"checksum libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "044d1360593a78f5c8e5e710beccdc24ab71d1f01bc19a29bcacdba22e8475d8" +"checksum linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bda158e0dabeb97ee8a401f4d17e479d6b891a14de0bba79d5cc2d4d325b5e48" +"checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054" +"checksum lru-cache 0.1.0 (git+https://github.com/contain-rs/lru-cache)" = "" +"checksum matches 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc3ad8109fa4b522f9b0cd81440422781f564aaf8c195de6b9d6642177ad0dd" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum mime 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b5c93a4bd787ddc6e7833c519b73a50883deb5863d76d9b71eb8216fb7f94e66" +"checksum mio 0.5.1 (git+https://github.com/ethcore/mio?branch=v0.5.x)" = "" +"checksum miow 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d5bfc6782530ac8ace97af10a540054a37126b63b0702ddaaa243b73b5745b9a" +"checksum nanomsg 0.7.0 (git+https://github.com/ethcore/nanomsg.rs.git)" = "" +"checksum nanomsg-sys 0.7.0 (git+https://github.com/ethcore/nanomsg.rs.git)" = "" +"checksum net2 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)" = "5edf9cb6be97212423aed9413dd4729d62b370b5e1c571750e882cebbbc1e3e2" +"checksum nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bfb3ddedaa14746434a02041940495bf11325c22f6d36125d3bdd56090d50a79" +"checksum nodrop 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbadd3f4c98dea0bd3d9b4be4c0cdaf1ab57035cb2e41fce3983db5add7cc5" +"checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" +"checksum num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "bde7c03b09e7c6a301ee81f6ddf66d7a28ec305699e3d3b056d2fc56470e3120" +"checksum num-bigint 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "88b14378471f7c2adc5262f05b4701ef53e8da376453a8d8fee48e51db745e49" +"checksum num-complex 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c78e054dd19c3fd03419ade63fa661e9c49bb890ce3beb4eee5b7baf93f92f" +"checksum num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "fb24d9bfb3f222010df27995441ded1e954f8f69cd35021f6bef02ca9552fb92" +"checksum num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "287a1c9969a847055e1122ec0ea7a5c5d6f72aad97934e131c83d5c08ab4e45c" +"checksum num-rational 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "54ff603b8334a72fbb27fe66948aac0abaaa40231b3cecd189e76162f6f38aaf" +"checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" +"checksum num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "cee7e88156f3f9e19bdd598f8d6c9db7bf4078f99f8381f43a55b09648d1a6e3" +"checksum odds 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "e04630a62b3f1cc8c58b4d8f2555a40136f02b420e158242936ef286a72d33a0" +"checksum parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "968f685642555d2f7e202c48b8b11de80569e9bfea817f7f12d7c61aac62d4e6" +"checksum primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0e31b86efadeaeb1235452171a66689682783149a6249ff334a2c5d8218d00a4" +"checksum primal-bit 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "464a91febc06166783d4f5ba3577b5ed8dda8e421012df80bfe48a971ed7be8f" +"checksum primal-check 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "647c81b67bb9551a7b88d0bcd785ac35b7d0bf4b2f358683d7c2375d04daec51" +"checksum primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56ea4531dde757b56906493c8604641da14607bf9cdaa80fb9c9cabd2429f8d5" +"checksum primal-sieve 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "943788ecb9a362697c46acf6b58164c3fb4e13af576f036af1bbd15b2174151a" +"checksum quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b26543b563704e7d87f3ec7cfafb713010a905c5f1b155a8ab66863af43ca578" +"checksum quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0881d9a45d5f9ebe4a7e77742f8c604f3658c212baf8dd711a692dd000bc648c" +"checksum quick-error 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0aad603e8d7fb67da22dbdf1f4b826ce8829e406124109e73cf1b2454b93a71c" +"checksum quote 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b22ffb272d214bfc8b6c89ff856d0acb52f0cd6b85162243460c9291b93c56e" +"checksum rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2791d88c6defac799c3f20d74f094ca33b9332612d9aef9078519c82e4fe04a5" +"checksum rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "655df67c314c30fa3055a365eae276eb88aa4f3413a352a1ab32c1320eda41ea" +"checksum regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)" = "64b03446c466d35b42f2a8b203c8e03ed8b91c0f17b56e1f84f7210a257aa665" +"checksum regex-syntax 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "48f0573bcee95a48da786f8823465b5f2a1fae288a55407aca991e5b3e0eae11" +"checksum rocksdb 0.4.5 (git+https://github.com/ethcore/rust-rocksdb)" = "" +"checksum rocksdb-sys 0.3.0 (git+https://github.com/ethcore/rust-rocksdb)" = "" +"checksum rotor 0.6.3 (git+https://github.com/ethcore/rotor)" = "" +"checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" +"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b" +"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084" +"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" +"checksum semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2d5b7638a1f03815d94e88cb3b3c08e87f0db4d683ef499d1836aaf70a45623f" +"checksum serde 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "14db385091b1ef02cc209ba2236b2f97666a778674cdbad46b1b0cb2c88cb0ed" +"checksum serde_codegen 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e575e583f7d162e163af117fb9791fbd2bd203c31023b3219617e12c5997a738" +"checksum serde_codegen_internals 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "318f7e77aa5187391d74aaf4553d2189f56b0ce25e963414c951b97877ffdcec" +"checksum serde_json 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb6b19e74d9f65b9d03343730b643d729a446b29376785cd65efdff4675e2fc" +"checksum slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d807fd58c4181bbabed77cb3b891ba9748241a552bcc5be698faaebefc54f46e" +"checksum slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6dbdd334bd28d328dad1c41b0ea662517883d8880d8533895ef96c8003dec9c4" +"checksum smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc8d19212aacecf95e4a7a2179b26f7aeb9732a915cf01f05b0d3e044865410" +"checksum spmc 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "93bdab61c1a413e591c4d17388ffa859eaff2df27f1e13a5ec8b716700605adf" +"checksum strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50c069df92e4b01425a8bf3576d5d417943a6a7272fbabaf5bd80b1aaa76442e" +"checksum syn 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96fed4e825d615b0ffd74dabb1dc4c5a078ab44e2c8004798f01510edf6cf515" +"checksum syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393b6dd0889df2b064beeea954cfda6bc2571604ac460deeae0fed55a53988af" +"checksum syntex 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)" = "871acb190170a9eb8bd85943aee9f9edd66f4c3bbe8f1856f9c0656fc6debf33" +"checksum syntex_errors 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2fb4a792e49d439a271688827ddcd330c0dd45f5830575bed9ad36e732c28694" +"checksum syntex_pos 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24a047946021b25c127b86d7217007e63429b11eaca2bb55151c57ee1bc98dbd" +"checksum syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44bded3cabafc65c90b663b1071bd2d198a9ab7515e6ce729e4570aaf53c407e" +"checksum syntex_syntax 0.45.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b90281e9f8adf9171d7570638970ffd9f1d858f791c69196ec9a4e22c04242c" +"checksum target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe" +"checksum term 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "f2077e54d38055cf1ca0fd7933a2e00cd3ec8f6fed352b2a377f06dcdaaf3281" +"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "3c7ec6d62a20df54e07ab3b78b9a3932972f4b7981de295563686849eb3989af" +"checksum tiny-keccak 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ac274ea206f5352fe553c7b5d8f5658eea51238e747e12968c48705b791b644" +"checksum traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "07eaeb7689bb7fca7ce15628319635758eda769fed481ecfe6686ddef2600616" +"checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" +"checksum unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "13a5906ca2b98c799f4b1ab4557b76367ebd6ae5ef14930ec841c74aed5f3764" +"checksum unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1f7ceb96afdfeedee42bade65a0d585a6a0106f681b6749c8ff4daa8df30b3f" +"checksum unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26643a2f83bac55f1976fb716c10234485f9202dcd65cfbdf9da49867b271172" +"checksum unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "36dff09cafb4ec7c8cf0023eb0b686cb6ce65499116a12201c9e11840ca01beb" +"checksum url 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8527c62d9869a08325c38272b3f85668df22a65890c61a639d233dc0ed0b23a2" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum vecio 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0795a11576d29ae80525a3fda315bf7b534f8feb9d34101e5fe63fb95bb2fd24" +"checksum vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c3365f36c57e5df714a34be40902b27a992eeddb9996eca52d0584611cf885d" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/evmbin/src/ext.rs b/evmbin/src/ext.rs index d9a6932bac..79e6eb3bdc 100644 --- a/evmbin/src/ext.rs +++ b/evmbin/src/ext.rs @@ -16,6 +16,7 @@ //! Externalities implementation. +use std::sync::Arc; use std::collections::HashMap; use util::{U256, H256, Address, Bytes, FixedHash}; use ethcore::client::EnvInfo; @@ -24,6 +25,7 @@ use ethcore::evm::{self, Ext, ContractCreateResult, MessageCallResult, Schedule, pub struct FakeExt { schedule: Schedule, store: HashMap, + depth: usize, } impl Default for FakeExt { @@ -31,6 +33,7 @@ impl Default for FakeExt { FakeExt { schedule: Schedule::new_homestead(), store: HashMap::new(), + depth: 1, } } } @@ -72,7 +75,11 @@ impl Ext for FakeExt { unimplemented!(); } - fn extcode(&self, _address: &Address) -> Bytes { + fn extcode(&self, _address: &Address) -> Arc { + unimplemented!(); + } + + fn extcodesize(&self, _address: &Address) -> usize { unimplemented!(); } @@ -97,8 +104,7 @@ impl Ext for FakeExt { } fn depth(&self) -> usize { - unimplemented!(); - // self.depth + self.depth } fn inc_sstore_clears(&mut self) { diff --git a/evmbin/src/main.rs b/evmbin/src/main.rs index bc24afa1e7..a63e84e4b4 100644 --- a/evmbin/src/main.rs +++ b/evmbin/src/main.rs @@ -26,6 +26,7 @@ extern crate ethcore_util as util; mod ext; +use std::sync::Arc; use std::time::{Instant, Duration}; use std::str::FromStr; use docopt::Docopt; @@ -42,9 +43,9 @@ Usage: evmbin [-h | --help] Transaction options: - --code CODE Contract code. - --input DATA Input data. - --gas GAS Supplied gas. + --code CODE Contract code as hex (without 0x) + --input DATA Input data as hex (without 0x) + --gas GAS Supplied gas as hex (without 0x) General options: -h, --help Display this message and exit. @@ -56,7 +57,7 @@ fn main() { let mut params = ActionParams::default(); params.gas = args.gas(); - params.code = Some(args.code()); + params.code = Some(Arc::new(args.code())); params.data = args.data(); let result = run_vm(params); @@ -68,7 +69,7 @@ fn main() { /// Execute VM with given `ActionParams` pub fn run_vm(params: ActionParams) -> ExecutionResults { let initial_gas = params.gas; - let factory = Factory::new(VMType::Interpreter); + let factory = Factory::new(VMType::Interpreter, 1024); let mut vm = factory.create(params.gas); let mut ext = ext::FakeExt::default(); -- GitLab From 6c7af575296a06223765388b96cc71ffcfd079f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Mon, 17 Oct 2016 11:56:42 +0200 Subject: [PATCH 060/393] Initial import of new UI (compiled JS code) (#2220) * Normalizing dapps format for signer. * Adding new ui * Adding New UI to dapps * Adding parity styles for signer errors * Adding pre-compiled JS as submodule * Fixing struct declaration [ci:skip] * Bumping js * Adding styles * build dest * Correct whitespace @tomusdrw please note the alterations - no mixing tabs and spaces in the indentation portion and always just one tab per indent. --- .gitmodules | 3 + Cargo.lock | 27 +++-- dapps/Cargo.toml | 7 +- dapps/js-glue/Cargo.toml | 31 ++++++ dapps/js-glue/README.md | 65 +++++++++++ dapps/js-glue/build.rs | 45 ++++++++ dapps/js-glue/src/build.rs | 66 +++++++++++ dapps/js-glue/src/codegen.rs | 189 ++++++++++++++++++++++++++++++++ dapps/js-glue/src/js.rs | 89 +++++++++++++++ dapps/js-glue/src/lib.rs | 39 +++++++ dapps/js-glue/src/lib.rs.in | 45 ++++++++ dapps/src/apps/mod.rs | 57 +++++++++- dapps/src/lib.rs | 5 +- dapps/ui/Cargo.toml | 19 ++++ dapps/ui/build.rs | 22 ++++ dapps/ui/src/lib.rs | 22 ++++ dapps/ui/src/lib.rs.in | 55 ++++++++++ js/build | 1 + signer/Cargo.toml | 9 +- signer/src/lib.rs | 4 - signer/src/ws_server/session.rs | 24 ++-- 21 files changed, 794 insertions(+), 30 deletions(-) create mode 100644 dapps/js-glue/Cargo.toml create mode 100644 dapps/js-glue/README.md create mode 100644 dapps/js-glue/build.rs create mode 100644 dapps/js-glue/src/build.rs create mode 100644 dapps/js-glue/src/codegen.rs create mode 100644 dapps/js-glue/src/js.rs create mode 100644 dapps/js-glue/src/lib.rs create mode 100644 dapps/js-glue/src/lib.rs.in create mode 100644 dapps/ui/Cargo.toml create mode 100644 dapps/ui/build.rs create mode 100644 dapps/ui/src/lib.rs create mode 100644 dapps/ui/src/lib.rs.in create mode 160000 js/build diff --git a/.gitmodules b/.gitmodules index 06b71f6ae3..a3e70108be 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = ethcore/res/ethereum/tests url = https://github.com/ethereum/tests.git branch = develop +[submodule "js/build"] + path = js/build + url = https://github.com/ethcore/js-precompiled diff --git a/Cargo.lock b/Cargo.lock index 2cfb39db80..c63bff4718 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -337,9 +337,11 @@ dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", + "parity-dapps-glue 1.4.0", "parity-dapps-home 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", "parity-dapps-status 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", "parity-dapps-wallet 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", + "parity-ui 1.4.0", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -505,8 +507,8 @@ dependencies = [ "ethcore-util 1.4.0", "jsonrpc-core 3.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", - "parity-dapps-signer 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", + "parity-dapps-glue 1.4.0", + "parity-ui 1.4.0", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "ws 0.5.2 (git+https://github.com/ethcore/ws-rs.git?branch=mio-upstream-stable)", @@ -1180,15 +1182,20 @@ dependencies = [ ] [[package]] -name = "parity-dapps-home" +name = "parity-dapps-glue" version = "1.4.0" -source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ - "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", + "aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", + "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "mime_guess 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "quasi 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quasi_codegen 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "syntex_syntax 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "parity-dapps-signer" +name = "parity-dapps-home" version = "1.4.0" source = "git+https://github.com/ethcore/parity-ui.git#8b1c31319228ad4cf9bd4ae740a0b933aa9e19c7" dependencies = [ @@ -1211,6 +1218,13 @@ dependencies = [ "parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)", ] +[[package]] +name = "parity-ui" +version = "1.4.0" +dependencies = [ + "parity-dapps-glue 1.4.0", +] + [[package]] name = "parking_lot" version = "0.2.6" @@ -1985,7 +1999,6 @@ dependencies = [ "checksum odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "b28c06e81b0f789122d415d6394b5fe849bde8067469f4c2980d3cdc10c78ec1" "checksum parity-dapps 1.4.0 (git+https://github.com/ethcore/parity-ui.git)" = "" "checksum parity-dapps-home 1.4.0 (git+https://github.com/ethcore/parity-ui.git)" = "" -"checksum parity-dapps-signer 1.4.0 (git+https://github.com/ethcore/parity-ui.git)" = "" "checksum parity-dapps-status 1.4.0 (git+https://github.com/ethcore/parity-ui.git)" = "" "checksum parity-dapps-wallet 1.4.0 (git+https://github.com/ethcore/parity-ui.git)" = "" "checksum parking_lot 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e0fd1be2c3cf5fef20a6d18fec252c4f3c87c14fc3039002eb7d4ed91e436826" diff --git a/dapps/Cargo.toml b/dapps/Cargo.toml index 1019e54607..8eb343e68e 100644 --- a/dapps/Cargo.toml +++ b/dapps/Cargo.toml @@ -27,11 +27,15 @@ ethcore-devtools = { path = "../devtools" } ethcore-rpc = { path = "../rpc" } ethcore-util = { path = "../util" } fetch = { path = "../util/fetch" } +parity-ui = { path = "./ui" } +parity-dapps-glue = { path = "./js-glue" } +### DEPRECATED parity-dapps = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4" } -# List of apps parity-dapps-status = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4" } parity-dapps-home = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4" } parity-dapps-wallet = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4", optional = true } +### /DEPRECATED + mime_guess = { version = "1.6.1" } clippy = { version = "0.0.90", optional = true} @@ -45,6 +49,7 @@ nightly = ["serde_macros"] dev = ["clippy", "ethcore-rpc/dev", "ethcore-util/dev"] use-precompiled-js = [ + "parity-ui/use-precompiled-js", "parity-dapps-status/use-precompiled-js", "parity-dapps-home/use-precompiled-js", "parity-dapps-wallet/use-precompiled-js" diff --git a/dapps/js-glue/Cargo.toml b/dapps/js-glue/Cargo.toml new file mode 100644 index 0000000000..b85122e907 --- /dev/null +++ b/dapps/js-glue/Cargo.toml @@ -0,0 +1,31 @@ +[package] +description = "Base Package for all Parity built-in dapps" +name = "parity-dapps-glue" +version = "1.4.0" +license = "GPL-3.0" +authors = ["Ethcore + ``` + + The `inject.js` script will create global `web3` instance with proper provider that should be used by your dapp. + +1. Create `./parity/dapps/myapp/Cargo.toml` with you apps details. See example here: [parity-status Cargo.toml](https://github.com/ethcore/parity-ui/blob/master/status/Cargo.toml). + + ```bash + $ git clone https://github.com/ethcore/parity-ui.git + $ cd ./parity-ui/ + $ cp ./home/Cargo.toml ../parity/dapps/myapp/Cargo.toml + $ cp ./home/build.rs ../parity/dapps/myapp/build.rs + $ cp ./home/src/lib.rs ../parity/dapps/myapp/src/lib.rs + $ cp ./home/src/lib.rs.in ../parity/dapps/myapp/src/lib.rs.in + # And edit the details of your app + $ vim ../parity/dapps/myapp/Cargo.toml # Edit the details + $ vim ./parity/dapps/myapp/src/lib.rs.in # Edit the details + ``` +# How to include your Dapp into `Parity`? +1. Edit `dapps/Cargo.toml` and add dependency to your application (it can be optional) + + ```toml + # Use git repo and version + parity-dapps-myapp = { path="./myapp" } + ``` + +1. Edit `dapps/src/apps.rs` and add your application to `all_pages` (if it's optional you need to specify two functions - see `parity-dapps-wallet` example) + +1. Compile parity. + + ```bash + $ cargo build --release # While inside `parity` + ``` + +1. Commit the results. + + ```bash + $ git add myapp && git commit -am "My first Parity Dapp". + ``` diff --git a/dapps/js-glue/build.rs b/dapps/js-glue/build.rs new file mode 100644 index 0000000000..82f9901885 --- /dev/null +++ b/dapps/js-glue/build.rs @@ -0,0 +1,45 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + + +#[cfg(feature = "with-syntex")] +mod inner { + extern crate syntex; + extern crate quasi_codegen; + + use std::env; + use std::path::Path; + + pub fn main() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + let mut registry = syntex::Registry::new(); + quasi_codegen::register(&mut registry); + + let src = Path::new("src/lib.rs.in"); + let dst = Path::new(&out_dir).join("lib.rs"); + + registry.expand("", &src, &dst).unwrap(); + } +} + +#[cfg(not(feature = "with-syntex"))] +mod inner { + pub fn main() {} +} + +fn main() { + inner::main(); +} diff --git a/dapps/js-glue/src/build.rs b/dapps/js-glue/src/build.rs new file mode 100644 index 0000000000..86c93171b1 --- /dev/null +++ b/dapps/js-glue/src/build.rs @@ -0,0 +1,66 @@ + +#[cfg(feature = "with-syntex")] +pub mod inner { + use syntex; + use codegen; + use syntax::{ast, fold}; + use std::env; + use std::path::Path; + + fn strip_attributes(krate: ast::Crate) -> ast::Crate { + /// Helper folder that strips the serde attributes after the extensions have been expanded. + struct StripAttributeFolder; + + impl fold::Folder for StripAttributeFolder { + fn fold_attribute(&mut self, attr: ast::Attribute) -> Option { + match attr.node.value.node { + ast::MetaItemKind::List(ref n, _) if n == &"webapp" => { return None; } + _ => {} + } + + Some(attr) + } + + fn fold_mac(&mut self, mac: ast::Mac) -> ast::Mac { + fold::noop_fold_mac(mac, self) + } + } + + fold::Folder::fold_crate(&mut StripAttributeFolder, krate) + } + + pub fn register(reg: &mut syntex::Registry) { + reg.add_attr("feature(custom_derive)"); + reg.add_attr("feature(custom_attribute)"); + + reg.add_decorator("derive_WebAppFiles", codegen::expand_webapp_implementation); + reg.add_post_expansion_pass(strip_attributes); + } + + pub fn generate() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + let mut registry = syntex::Registry::new(); + register(&mut registry); + + let src = Path::new("src/lib.rs.in"); + let dst = Path::new(&out_dir).join("lib.rs"); + + registry.expand("", &src, &dst).unwrap(); + } +} + +#[cfg(not(feature = "with-syntex"))] +pub mod inner { + use codegen; + + pub fn register(reg: &mut rustc_plugin::Registry) { + reg.register_syntax_extension( + syntax::parse::token::intern("derive_WebAppFiles"), + syntax::ext::base::MultiDecorator( + Box::new(codegen::expand_webapp_implementation))); + + reg.register_attribute("webapp".to_owned(), AttributeType::Normal); + } + + pub fn generate() {} +} diff --git a/dapps/js-glue/src/codegen.rs b/dapps/js-glue/src/codegen.rs new file mode 100644 index 0000000000..1a6b6fc7eb --- /dev/null +++ b/dapps/js-glue/src/codegen.rs @@ -0,0 +1,189 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +extern crate aster; +extern crate glob; +extern crate mime_guess; + +use self::mime_guess::guess_mime_type; +use std::path::{self, Path, PathBuf}; +use std::ops::Deref; + +use syntax::ast::{MetaItem, Item}; + +use syntax::ast; +use syntax::attr; +use syntax::codemap::Span; +use syntax::ext::base::{Annotatable, ExtCtxt}; +use syntax::ptr::P; +use syntax::print::pprust::{lit_to_string}; +use syntax::parse::token::{InternedString}; + + +pub fn expand_webapp_implementation( + cx: &mut ExtCtxt, + span: Span, + meta_item: &MetaItem, + annotatable: &Annotatable, + push: &mut FnMut(Annotatable) +) { + let item = match *annotatable { + Annotatable::Item(ref item) => item, + _ => { + cx.span_err(meta_item.span, "`#[derive(WebAppFiles)]` may only be applied to struct implementations"); + return; + }, + }; + let builder = aster::AstBuilder::new().span(span); + implement_webapp(cx, &builder, &item, push); +} + +fn implement_webapp(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push: &mut FnMut(Annotatable)) { + let static_files_dir = extract_path(cx, item); + + let src = Path::new("src"); + let static_files = { + let mut buf = src.to_path_buf(); + buf.push(static_files_dir.deref()); + buf + }; + + let search_location = { + let mut buf = static_files.to_path_buf(); + buf.push("**"); + buf.push("*"); + buf + }; + + let files = glob::glob(search_location.to_str().expect("Valid UTF8 path")) + .expect("The sources directory is missing.") + .collect::, glob::GlobError>>() + .expect("There should be no error when reading a list of files."); + + let statements = files + .iter() + .filter(|path_buf| path_buf.is_file()) + .map(|path_buf| { + let path = path_buf.as_path(); + let filename = path.file_name().and_then(|s| s.to_str()).expect("Only UTF8 paths."); + let mime_type = guess_mime_type(filename).to_string(); + let file_path = as_uri(path.strip_prefix(&static_files).ok().expect("Prefix is always there, cause it's absolute path;qed")); + let file_path_in_source = path.to_str().expect("Only UTF8 paths."); + + let path_lit = builder.expr().str(file_path.as_str()); + let mime_lit = builder.expr().str(mime_type.as_str()); + let web_path_lit = builder.expr().str(file_path_in_source); + let separator_lit = builder.expr().str(path::MAIN_SEPARATOR.to_string().as_str()); + let concat_id = builder.id("concat!"); + let env_id = builder.id("env!"); + let macro_id = builder.id("include_bytes!"); + + let content = quote_expr!( + cx, + $macro_id($concat_id($env_id("CARGO_MANIFEST_DIR"), $separator_lit, $web_path_lit)) + ); + quote_stmt!( + cx, + files.insert($path_lit, File { path: $path_lit, content_type: $mime_lit, content: $content }); + ).expect("The statement is always ok, because it just uses literals.") + }).collect::>(); + + let type_name = item.ident; + + let files_impl = quote_item!(cx, + impl $type_name { + fn files() -> ::std::collections::HashMap<&'static str, File> { + let mut files = ::std::collections::HashMap::new(); + $statements + files + } + } + ).unwrap(); + + push(Annotatable::Item(files_impl)); +} + +fn extract_path(cx: &ExtCtxt, item: &Item) -> String { + for meta_items in item.attrs().iter().filter_map(webapp_meta_items) { + for meta_item in meta_items { + match meta_item.node { + ast::MetaItemKind::NameValue(ref name, ref lit) if name == &"path" => { + if let Some(s) = get_str_from_lit(cx, name, lit) { + return s.deref().to_owned(); + } + }, + _ => {}, + } + } + } + + // default + "web".to_owned() +} + +fn get_str_from_lit(cx: &ExtCtxt, name: &str, lit: &ast::Lit) -> Option { + match lit.node { + ast::LitKind::Str(ref s, _) => Some(s.clone()), + _ => { + cx.span_err( + lit.span, + &format!("webapp annotation `{}` must be a string, not `{}`", + name, + lit_to_string(lit) + ) + ); + return None; + } + } +} + +fn webapp_meta_items(attr: &ast::Attribute) -> Option<&[P]> { + match attr.node.value.node { + ast::MetaItemKind::List(ref name, ref items) if name == &"webapp" => { + attr::mark_used(&attr); + Some(items) + } + _ => None + } +} + +fn as_uri(path: &Path) -> String { + let mut s = String::new(); + for component in path.iter() { + s.push_str(component.to_str().expect("Only UTF-8 filenames are supported.")); + s.push('/'); + } + s[0..s.len()-1].into() +} + + +#[test] +fn should_convert_path_separators_on_all_platforms() { + // given + let p = { + let mut p = PathBuf::new(); + p.push("web"); + p.push("src"); + p.push("index.html"); + p + }; + + // when + let path = as_uri(&p); + + // then + assert_eq!(path, "web/src/index.html".to_owned()); +} diff --git a/dapps/js-glue/src/js.rs b/dapps/js-glue/src/js.rs new file mode 100644 index 0000000000..d3593a306b --- /dev/null +++ b/dapps/js-glue/src/js.rs @@ -0,0 +1,89 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +#![cfg_attr(feature="use-precompiled-js", allow(dead_code))] +#![cfg_attr(feature="use-precompiled-js", allow(unused_imports))] + +use std::fmt; +use std::process::Command; + +#[cfg(not(windows))] +mod platform { + use std::process::Command; + + pub static NPM_CMD: &'static str = "npm"; + pub fn handle_fd(cmd: &mut Command) -> &mut Command { + cmd + } +} + +#[cfg(windows)] +mod platform { + use std::process::{Command, Stdio}; + + pub static NPM_CMD: &'static str = "npm.cmd"; + // NOTE [ToDr] For some reason on windows + // We cannot have any file descriptors open when running a child process + // during build phase. + pub fn handle_fd(cmd: &mut Command) -> &mut Command { + cmd.stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + } +} + +fn die(s: &'static str, e: T) -> ! { + panic!("Error: {}: {:?}", s, e); +} + +#[cfg(feature = "use-precompiled-js")] +pub fn test(_path: &str) { +} +#[cfg(feature = "use-precompiled-js")] +pub fn build(_path: &str) { +} + +#[cfg(not(feature = "use-precompiled-js"))] +pub fn build(path: &str) { + let child = platform::handle_fd(&mut Command::new(platform::NPM_CMD)) + .arg("install") + .arg("--no-progress") + .current_dir(path) + .status() + .unwrap_or_else(|e| die("Installing node.js dependencies with npm", e)); + assert!(child.success(), "There was an error installing dependencies."); + + let child = platform::handle_fd(&mut Command::new(platform::NPM_CMD)) + .arg("run") + .arg("build") + .env("NODE_ENV", "production") + .env("BUILD_DEST", "build") + .current_dir(path) + .status() + .unwrap_or_else(|e| die("Building JS code", e)); + assert!(child.success(), "There was an error build JS code."); +} + +#[cfg(not(feature = "use-precompiled-js"))] +pub fn test(path: &str) { + let child = Command::new(platform::NPM_CMD) + .arg("run") + .arg("test") + .current_dir(path) + .status() + .unwrap_or_else(|e| die("Running test command", e)); + assert!(child.success(), "There was an error while running JS tests."); +} diff --git a/dapps/js-glue/src/lib.rs b/dapps/js-glue/src/lib.rs new file mode 100644 index 0000000000..28ac8d7120 --- /dev/null +++ b/dapps/js-glue/src/lib.rs @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + + +#![cfg_attr(not(feature = "with-syntex"), feature(rustc_private, plugin))] +#![cfg_attr(not(feature = "with-syntex"), plugin(quasi_macros))] + +#[cfg(feature = "with-syntex")] +extern crate syntex; + +#[cfg(feature = "with-syntex")] +#[macro_use] +extern crate syntex_syntax as syntax; + +#[cfg(feature = "with-syntex")] +include!(concat!(env!("OUT_DIR"), "/lib.rs")); + +#[cfg(not(feature = "with-syntex"))] +#[macro_use] +extern crate syntax; + +#[cfg(not(feature = "with-syntex"))] +extern crate rustc_plugin; + +#[cfg(not(feature = "with-syntex"))] +include!("lib.rs.in"); diff --git a/dapps/js-glue/src/lib.rs.in b/dapps/js-glue/src/lib.rs.in new file mode 100644 index 0000000000..fa6c17de5b --- /dev/null +++ b/dapps/js-glue/src/lib.rs.in @@ -0,0 +1,45 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +extern crate quasi; + +mod codegen; +mod build; +pub mod js; +pub use build::inner::generate; + +use std::default::Default; + +#[derive(Clone)] +pub struct File { + pub path: &'static str, + pub content: &'static [u8], + pub content_type: &'static str, +} + +#[derive(Clone, Debug)] +pub struct Info { + pub name: &'static str, + pub version: &'static str, + pub author: &'static str, + pub description: &'static str, + pub icon_url: &'static str, +} + +pub trait WebApp : Default + Send + Sync { + fn file(&self, path: &str) -> Option<&File>; + fn info(&self) -> Info; +} diff --git a/dapps/src/apps/mod.rs b/dapps/src/apps/mod.rs index 65bee587de..90f22be12d 100644 --- a/dapps/src/apps/mod.rs +++ b/dapps/src/apps/mod.rs @@ -17,7 +17,8 @@ use endpoint::{Endpoints, Endpoint}; use page::PageEndpoint; use proxypac::ProxyPac; -use parity_dapps::WebApp; +use parity_dapps::{self, WebApp}; +use parity_dapps_glue::WebApp as NewWebApp; mod cache; mod fs; @@ -27,6 +28,7 @@ pub mod manifest; extern crate parity_dapps_status; extern crate parity_dapps_home; +extern crate parity_ui; pub const DAPPS_DOMAIN : &'static str = ".parity"; pub const RPC_PATH : &'static str = "rpc"; @@ -57,9 +59,13 @@ pub fn all_endpoints(dapps_path: String) -> Endpoints { pages.insert("home".into(), Box::new( PageEndpoint::new_safe_to_embed(parity_dapps_home::App::default()) )); + // NOTE [ToDr] Dapps will be currently embeded on 8180 + pages.insert("ui".into(), Box::new( + PageEndpoint::new_safe_to_embed(NewUi::default()) + )); pages.insert("proxy".into(), ProxyPac::boxed()); - insert::(&mut pages, "parity"); insert::(&mut pages, "status"); + insert::(&mut pages, "parity"); // Optional dapps wallet_page(&mut pages); @@ -78,3 +84,50 @@ fn wallet_page(_pages: &mut Endpoints) {} fn insert(pages: &mut Endpoints, id: &str) { pages.insert(id.to_owned(), Box::new(PageEndpoint::new(T::default()))); } + +// TODO [ToDr] Temporary wrapper until we get rid of old built-ins. +use std::collections::HashMap; + +struct NewUi { + app: parity_ui::App, + files: HashMap<&'static str, parity_dapps::File>, +} + +impl Default for NewUi { + fn default() -> Self { + let app = parity_ui::App::default(); + let files = { + let mut files = HashMap::new(); + for (k, v) in &app.files { + files.insert(*k, parity_dapps::File { + path: v.path, + content: v.content, + content_type: v.content_type, + }); + } + files + }; + + NewUi { + app: app, + files: files, + } + } +} + +impl WebApp for NewUi { + fn file(&self, path: &str) -> Option<&parity_dapps::File> { + self.files.get(path) + } + + fn info(&self) -> parity_dapps::Info { + let info = self.app.info(); + parity_dapps::Info { + name: info.name, + version: info.version, + author: info.author, + description: info.description, + icon_url: info.icon_url, + } + } +} diff --git a/dapps/src/lib.rs b/dapps/src/lib.rs index cac42f8931..d863de18a9 100644 --- a/dapps/src/lib.rs +++ b/dapps/src/lib.rs @@ -57,7 +57,6 @@ extern crate jsonrpc_core; extern crate jsonrpc_http_server; extern crate mime_guess; extern crate rustc_serialize; -extern crate parity_dapps; extern crate ethcore_rpc; extern crate ethcore_util as util; extern crate linked_hash_map; @@ -65,6 +64,10 @@ extern crate fetch; #[cfg(test)] extern crate ethcore_devtools as devtools; +extern crate parity_dapps_glue; +// TODO [ToDr] - Deprecate when we get rid of old dapps. +extern crate parity_dapps; + mod endpoint; mod apps; mod page; diff --git a/dapps/ui/Cargo.toml b/dapps/ui/Cargo.toml new file mode 100644 index 0000000000..ff88d0f801 --- /dev/null +++ b/dapps/ui/Cargo.toml @@ -0,0 +1,19 @@ +[package] +description = "Parity built-in dapps." +name = "parity-ui" +version = "1.4.0" +license = "GPL-3.0" +authors = ["Ethcore "] +build = "build.rs" + +[features] +default = ["with-syntex"] +use-precompiled-js = ["parity-dapps-glue/use-precompiled-js"] +with-syntex = ["parity-dapps-glue/with-syntex"] + +[build-dependencies] +parity-dapps-glue = { path = "../js-glue" } + +[dependencies] +parity-dapps-glue = { path = "../js-glue" } + diff --git a/dapps/ui/build.rs b/dapps/ui/build.rs new file mode 100644 index 0000000000..c4982b09c3 --- /dev/null +++ b/dapps/ui/build.rs @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +extern crate parity_dapps_glue; + +fn main() { + parity_dapps_glue::js::build(concat!(env!("CARGO_MANIFEST_DIR"), "../../js")); + parity_dapps_glue::generate(); +} diff --git a/dapps/ui/src/lib.rs b/dapps/ui/src/lib.rs new file mode 100644 index 0000000000..25d336fabe --- /dev/null +++ b/dapps/ui/src/lib.rs @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +#[cfg(feature = "with-syntex")] +include!(concat!(env!("OUT_DIR"), "/lib.rs")); + +#[cfg(not(feature = "with-syntex"))] +include!("lib.rs.in"); + diff --git a/dapps/ui/src/lib.rs.in b/dapps/ui/src/lib.rs.in new file mode 100644 index 0000000000..81f46086d1 --- /dev/null +++ b/dapps/ui/src/lib.rs.in @@ -0,0 +1,55 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +extern crate parity_dapps_glue; + +use std::collections::HashMap; +use parity_dapps_glue::{WebApp, File, Info}; + +#[derive(WebAppFiles)] +#[webapp(path = "../../../js/build")] +pub struct App { + pub files: HashMap<&'static str, File>, +} + +impl Default for App { + fn default() -> App { + App { + files: Self::files(), + } + } +} + +impl WebApp for App { + fn file(&self, path: &str) -> Option<&File> { + self.files.get(path) + } + + fn info(&self) -> Info { + Info { + name: "Parity UI", + version: env!("CARGO_PKG_VERSION"), + author: "Ethcore ", + description: "New UI for Parity. (Experimental)", + icon_url: "icon.png", + } + } +} + +#[test] +fn test_js() { + parity_dapps_glue::js::build(concat!(env!("CARGO_MANIFEST_DIR"), "../../js")); +} diff --git a/js/build b/js/build new file mode 160000 index 0000000000..95a7d08eb6 --- /dev/null +++ b/js/build @@ -0,0 +1 @@ +Subproject commit 95a7d08eb67e6e31367af6bf7fa874128d71c1df diff --git a/signer/Cargo.toml b/signer/Cargo.toml index 43b6bd84a4..892b5009ce 100644 --- a/signer/Cargo.toml +++ b/signer/Cargo.toml @@ -20,12 +20,13 @@ ethcore-util = { path = "../util" } ethcore-io = { path = "../util/io" } ethcore-rpc = { path = "../rpc" } ethcore-devtools = { path = "../devtools" } -parity-dapps = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4", optional = true} -parity-dapps-signer = { git = "https://github.com/ethcore/parity-ui.git", version = "1.4", optional = true} +parity-dapps-glue = { path = "../dapps/js-glue", version = "1.4", optional = true} +parity-ui = { path = "../dapps/ui", version = "1.4", optional = true} clippy = { version = "0.0.90", optional = true} [features] dev = ["clippy"] -ui = ["parity-dapps", "parity-dapps-signer"] -use-precompiled-js = ["parity-dapps-signer/use-precompiled-js"] +ui = ["parity-dapps-glue", "parity-ui"] +use-precompiled-js = ["parity-ui/use-precompiled-js"] + diff --git a/signer/src/lib.rs b/signer/src/lib.rs index 630cefb829..f05d8c6253 100644 --- a/signer/src/lib.rs +++ b/signer/src/lib.rs @@ -52,10 +52,6 @@ extern crate ethcore_io as io; extern crate ethcore_rpc as rpc; extern crate jsonrpc_core; extern crate ws; -#[cfg(feature = "ui")] -extern crate parity_dapps_signer as signer; -#[cfg(feature = "ui")] -extern crate parity_dapps as dapps; #[cfg(test)] extern crate ethcore_devtools as devtools; diff --git a/signer/src/ws_server/session.rs b/signer/src/ws_server/session.rs index 14c619a285..45146f9885 100644 --- a/signer/src/ws_server/session.rs +++ b/signer/src/ws_server/session.rs @@ -25,13 +25,15 @@ use jsonrpc_core::IoHandler; use util::{H256, Mutex, version}; #[cfg(feature = "ui")] -mod signer { - use signer::SignerApp; - use dapps::{self, WebApp}; +mod ui { + extern crate parity_ui as ui; + extern crate parity_dapps_glue as dapps; + + use self::dapps::WebApp; #[derive(Default)] pub struct Handler { - signer: SignerApp, + ui: ui::App, } impl Handler { @@ -40,20 +42,20 @@ mod signer { "" | "/" => "index.html", path => &path[1..], }; - self.signer.file(file) + self.ui.file(file) } } } #[cfg(not(feature = "ui"))] -mod signer { +mod ui { pub struct File { + pub content: &'static str, pub content: &'static [u8], pub content_type: &'static str, } #[derive(Default)] - pub struct Handler { - } + pub struct Handler; impl Handler { pub fn handle(&self, _req: &str) -> Option<&File> { @@ -125,7 +127,7 @@ pub struct Session { self_origin: String, authcodes_path: PathBuf, handler: Arc, - file_handler: Arc, + file_handler: Arc, } impl ws::Handler for Session { @@ -200,7 +202,7 @@ pub struct Factory { skip_origin_validation: bool, self_origin: String, authcodes_path: PathBuf, - file_handler: Arc, + file_handler: Arc, } impl Factory { @@ -210,7 +212,7 @@ impl Factory { skip_origin_validation: skip_origin_validation, self_origin: self_origin, authcodes_path: authcodes_path, - file_handler: Arc::new(signer::Handler::default()), + file_handler: Arc::new(ui::Handler::default()), } } } -- GitLab From c2dd37bb691e107bd4e62348e96c472276a43493 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 17 Oct 2016 13:05:57 +0200 Subject: [PATCH 061/393] use pruning history in CLI snapshots --- ethcore/src/client/client.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index f5d10266f2..277ba2db05 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -625,12 +625,13 @@ impl Client { return Err(snapshot::Error::OldBlockPrunedDB.into()); } + let history = ::std::cmp::min(self.history, 1000); + let start_hash = match at { BlockID::Latest => { - let start_num = if best_block_number > 1000 { - best_block_number - 1000 - } else { - 0 + let start_num = match db.earliest_era() { + Some(era) => ::std::cmp::max(era, best_block_number - history), + None => best_block_number - history, }; match self.block_hash(BlockID::Number(start_num)) { -- GitLab From 1e6a2cb3783e0d66cfa730f4cea109f60dc3a685 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 18 Oct 2016 11:52:56 +0200 Subject: [PATCH 062/393] Initial new UI source code import (#2607) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * address -> name mappings * expanding, loading all coin details * send use only actual BasicCoin tokens registered (any reg) * sending token & accounts * form styling updates * send form layout in place * coin send working as expected * api subscriptions on multiple addresses * bring in events * simplify * basic events display in-place, functionally complete * basic functionality in-place * fix horrible event address issue * rwork display of events slightly * test TLA availability * table for owner -> tokens * fix signature lookup address * fix signature lookup address * basic overview styling * txhash links * page layout adjustments * background import * adjust colors * no global registration, simplify color selection * updated styling * connection dialog for "busy connecting" * initial token connection - WIP * init token updates take place * basic test for manual token * rework connection display * allow updates of the secure token * first stab at making the build build * update runner tags * fix linting issues * skip tests requiring network (should be e2e, TODO) * re-enable javascript tag/runner * release push does the trick * push to any branch, CI name * javscript-test runner as well * swap dependencies build requires test * revert stages swap * retrieve images associated with tokens * remove js build deps order * null image when hash = 0x0 * 6x64 images (hashes for registries) * don't pass tokens as prop to IdentityIcon * check images against content hash pictures * cleanup signer after connection changes * fix naming typo * display unknownImages for balances (not available as content hash) * unknownImage for transfer dialog * basic githubhint layout * single input for commit/filename * ethcore_hashContent call * lookup hash * registration in place * fixes * events is using a proper table * pass value through as-is * stop wrongly using main app IdentityIcon * NEVER export class instance functions * alignment back to normal * typo in definition * set & get images working (mostly) * show content retrieval info * set exitcode via || * use javascript:latest images * disable npm progress bar * rename phase I * rename phase II * only send build output to GitHub on major branches * also run the build step as part of the test (until comprehensive) * ci-specific build (no webpack progress) * allow for account creation via recovery phrase * display account uuid (where available), closes #2546 * connection dialog now shows up in dapps as well, closes #2538 * token images show up as expected * IdentityName component added and deployed * fix padding tests * adjust tests to map to stricter 0x-prefixed hex * render names via common component for the address -> name * split lint into seperate script (early exit) * test phases changed to lint, test & pack * pack part of test phase * remove files marked for deletion (cleanup) * Signer cleanups, start moving in the direction of the rest * add personal signer methods * basic signer request subscription * don't poll blockNumber when not connected * missing return, creating massive ws queue backlogs * ΞTH -> ETH * fix failing tests * registry uses setAddress to actually set addresses now * bytes mapping operates on lowerCase hex strings * sha3 ids for each application * add dappreg to list of contracts * adjust alignment of queries * show gas estimation log * abi with payable for register function * add key as required * image retrieval from dappreg * use proper Image urls * embed and link apps from Parity, retrieved via /api/apps * filter apps that has been replaced * proxy entry for parity-utils * add basiccoin abi * add support for fallback abi type * capture constructor paramaters * merge master into js * move images to assets/images/ * add font assets * import fonts as part of build * don't inline woff files * Revert "merge master into js" This reverts commit cfcfa81bd26f1b3cbc748d3afa1eb5c670b363fe. * remove unused npm packages * information on gas estimates (like almost everywhere else) * don't pass gas & gasPrice to estimation * display account passwordhint when available * signer subscriptions based on polling & function trapping * pending requests retrieved via jsapi * update signer middleware * remove all web3 instances * remove web3 package * last web3 dependencies removed * no need to toChecksumAddress - api takes care of it * expand description for personal_confirmRequest * Signer conversion from web3 -> parity.js completed * explicit in no return * green circle background * remove generated background * convert /api/* paths to localhost:8080/api/* paths (hard-coded, temporary) * change dapps to load from localhost:8080/ui/* * remove dangling web3 files * update manager test for signer * /api/ping -> / * additional token images * additional token images * add missing styles.css for 8180 error pages * cater for txhash returning null/empty object * adjust output directories * Release merge with origin with ours strategy * additional token images * cater for development server * s/localhost/127.0.0.1/ (cater for origin) * Fix address selection for contract deployment * Adjust z-index for error overlay * better text on unique background pattern * fix signer rejections * Don't allow gavcoin transfer with no balance * fix txhash rendering in signer * remove unnecessary ParityBackground * script to update js-precompiled * Redirect from :8080 to :8180 * Remove extra return * Dapp logo images --- .gitlab-ci.yml | 43 + js/.babelrc | 15 + js/.codeclimate.yml | 8 + js/.editorconfig | 10 + js/.eslintrc.json | 20 + js/.gitignore | 5 + js/.istanbul.yml | 6 + js/.npmignore | 1 + js/LICENSE | 674 +++++++++++ js/README.md | 12 + js/assets/fonts/Roboto/LICENSE.txt | 202 ++++ js/assets/fonts/Roboto/font.css | 56 + js/assets/fonts/Roboto/ttf/Roboto-Black.ttf | Bin 0 -> 163488 bytes .../fonts/Roboto/ttf/Roboto-BlackItalic.ttf | Bin 0 -> 165444 bytes js/assets/fonts/Roboto/ttf/Roboto-Bold.ttf | Bin 0 -> 162464 bytes .../fonts/Roboto/ttf/Roboto-BoldItalic.ttf | Bin 0 -> 163644 bytes js/assets/fonts/Roboto/ttf/Roboto-Italic.ttf | Bin 0 -> 161484 bytes js/assets/fonts/Roboto/ttf/Roboto-Light.ttf | Bin 0 -> 162420 bytes .../fonts/Roboto/ttf/Roboto-LightItalic.ttf | Bin 0 -> 166492 bytes js/assets/fonts/Roboto/ttf/Roboto-Medium.ttf | Bin 0 -> 162588 bytes .../fonts/Roboto/ttf/Roboto-MediumItalic.ttf | Bin 0 -> 165636 bytes js/assets/fonts/Roboto/ttf/Roboto-Regular.ttf | Bin 0 -> 162876 bytes js/assets/fonts/Roboto/ttf/Roboto-Thin.ttf | Bin 0 -> 163132 bytes .../fonts/Roboto/ttf/Roboto-ThinItalic.ttf | Bin 0 -> 168276 bytes ...6m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 788 bytes ...6luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 10824 bytes ...OxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 6832 bytes ...tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 | Bin 0 -> 10324 bytes ...Sg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 5176 bytes ...4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 3036 bytes ...ShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 | Bin 0 -> 8040 bytes js/assets/fonts/RobotoMono/LICENSE.txt | 202 ++++ js/assets/fonts/RobotoMono/font.css | 56 + .../fonts/RobotoMono/ttf/RobotoMono-Bold.ttf | Bin 0 -> 114752 bytes .../RobotoMono/ttf/RobotoMono-BoldItalic.ttf | Bin 0 -> 122808 bytes .../RobotoMono/ttf/RobotoMono-Italic.ttf | Bin 0 -> 120832 bytes .../fonts/RobotoMono/ttf/RobotoMono-Light.ttf | Bin 0 -> 118976 bytes .../RobotoMono/ttf/RobotoMono-LightItalic.ttf | Bin 0 -> 127568 bytes .../RobotoMono/ttf/RobotoMono-Medium.ttf | Bin 0 -> 114696 bytes .../ttf/RobotoMono-MediumItalic.ttf | Bin 0 -> 123640 bytes .../RobotoMono/ttf/RobotoMono-Regular.ttf | Bin 0 -> 114624 bytes .../fonts/RobotoMono/ttf/RobotoMono-Thin.ttf | Bin 0 -> 118132 bytes .../RobotoMono/ttf/RobotoMono-ThinItalic.ttf | Bin 0 -> 121456 bytes ...C58uwPiY8_59Fz-pRBTtN4E2_qSPBnw6AgMc.woff2 | Bin 0 -> 3516 bytes ...C58uwPiY8_59Fz0ExlR2MysFCBK8OirNw2kM.woff2 | Bin 0 -> 12108 bytes ...C58uwPiY8_59Fz2MSHb9EAJwuSzGfuRChQzQ.woff2 | Bin 0 -> 5264 bytes ...C58uwPiY8_59Fz2dsm03krrxlabhmVQFB99s.woff2 | Bin 0 -> 6712 bytes ...C58uwPiY8_59Fz9Dnm4qiMZlH5rhYv_7LI2Y.woff2 | Bin 0 -> 8136 bytes ...C58uwPiY8_59Fz9TIkQYohD4BpHvJ3NvbHoA.woff2 | Bin 0 -> 11032 bytes ...C58uwPiY8_59FzyJ0caWjaSBdV-xZbEgst_k.woff2 | Bin 0 -> 740 bytes js/assets/images/contracts/augur-68x68.png | Bin 0 -> 4856 bytes js/assets/images/contracts/beer-64x64.png | Bin 0 -> 6545 bytes js/assets/images/contracts/beer.png | Bin 0 -> 12278 bytes js/assets/images/contracts/dgd-64x64.png | Bin 0 -> 8203 bytes js/assets/images/contracts/dgd.png | Bin 0 -> 27070 bytes js/assets/images/contracts/dgx-64x64.png | Bin 0 -> 8509 bytes js/assets/images/contracts/dgx.png | Bin 0 -> 29751 bytes .../images/contracts/ethereum-black-64x64.png | Bin 0 -> 771 bytes js/assets/images/contracts/ethereum-black.png | Bin 0 -> 147077 bytes js/assets/images/contracts/ethereum-white.png | Bin 0 -> 22208 bytes .../images/contracts/firstblood-64x64.png | Bin 0 -> 3712 bytes js/assets/images/contracts/firstblood.png | Bin 0 -> 7166 bytes js/assets/images/contracts/gavcoin-64x64.png | Bin 0 -> 11587 bytes js/assets/images/contracts/gavcoin.png | Bin 0 -> 94229 bytes js/assets/images/contracts/maker.svg | 18 + js/assets/images/contracts/pluton.svg | 157 +++ js/assets/images/contracts/singular.svg | 3 + js/assets/images/contracts/unicorn-64x64.png | Bin 0 -> 6304 bytes js/assets/images/contracts/unicorn.png | Bin 0 -> 12474 bytes js/assets/images/contracts/unknown-64x64.png | Bin 0 -> 2248 bytes js/assets/images/contracts/unknown.png | Bin 0 -> 34230 bytes js/assets/images/dapps/blocks-350.jpg | Bin 0 -> 235011 bytes js/assets/images/dapps/coins-64x64.jpg | Bin 0 -> 3151 bytes js/assets/images/dapps/coins.jpg | Bin 0 -> 47808 bytes js/assets/images/dapps/hex-64x64.jpg | Bin 0 -> 4658 bytes js/assets/images/dapps/hex.jpg | Bin 0 -> 25630 bytes js/assets/images/dapps/interlock-64x64.png | Bin 0 -> 9687 bytes js/assets/images/dapps/interlock.png | Bin 0 -> 45060 bytes js/assets/images/dapps/link-64x64.jpg | Bin 0 -> 2000 bytes js/assets/images/dapps/link.jpg | Bin 0 -> 7973 bytes js/assets/images/dapps/register-64x64.jpg | Bin 0 -> 8969 bytes js/assets/images/dapps/register.jpg | Bin 0 -> 65545 bytes js/assets/images/dapps/signature.png | Bin 0 -> 2655 bytes js/assets/images/ethcore-block-blue.png | Bin 0 -> 4861 bytes js/assets/images/ethcore-block.png | Bin 0 -> 11437 bytes .../images/ethcore-logo-white-square.png | Bin 0 -> 41621 bytes js/assets/images/parity-x56.png | Bin 0 -> 5397 bytes js/assets/images/parity.xcf | Bin 0 -> 17562 bytes js/assets/images/paritybar.png | Bin 0 -> 1971 bytes js/assets/images/shapeshift-btn.png | Bin 0 -> 22406 bytes js/assets/images/shapeshift-logo.png | Bin 0 -> 15127 bytes js/build-server.js | 40 + js/package.json | 140 +++ js/scripts/build.sh | 15 + js/scripts/install-deps.sh | 15 + js/scripts/lint.sh | 15 + js/scripts/release.sh | 33 + js/scripts/test.sh | 15 + js/scripts/update-precompiled.sh | 18 + js/src/3rdparty/etherscan/account.js | 73 ++ js/src/3rdparty/etherscan/account.spec.js | 69 ++ js/src/3rdparty/etherscan/call.js | 51 + js/src/3rdparty/etherscan/index.js | 25 + js/src/3rdparty/etherscan/stats.js | 36 + js/src/3rdparty/etherscan/stats.spec.js | 35 + js/src/3rdparty/shapeshift/helpers.spec.js | 71 ++ js/src/3rdparty/shapeshift/index.js | 22 + js/src/3rdparty/shapeshift/rpc.js | 67 + js/src/3rdparty/shapeshift/rpc.spec.js | 77 ++ js/src/3rdparty/shapeshift/shapeshift.js | 93 ++ js/src/3rdparty/shapeshift/shapeshift.spec.js | 124 ++ js/src/abi/README.md | 32 + js/src/abi/abi.js | 20 + js/src/abi/decoder/bytesTaken.js | 30 + js/src/abi/decoder/bytesTaken.spec.js | 29 + js/src/abi/decoder/decodeResult.js | 30 + js/src/abi/decoder/decodeResult.spec.js | 29 + js/src/abi/decoder/decoder.js | 145 +++ js/src/abi/decoder/decoder.spec.js | 310 +++++ js/src/abi/decoder/index.js | 17 + js/src/abi/encoder/encoder.js | 72 ++ js/src/abi/encoder/encoder.spec.js | 290 +++++ js/src/abi/encoder/index.js | 17 + js/src/abi/encoder/mediate.js | 142 +++ js/src/abi/encoder/mediate.spec.js | 105 ++ js/src/abi/index.js | 17 + js/src/abi/spec/constructor.js | 36 + js/src/abi/spec/constructor.spec.js | 52 + js/src/abi/spec/event/decodedLog.js | 30 + js/src/abi/spec/event/decodedLog.spec.js | 28 + js/src/abi/spec/event/decodedLogParam.js | 45 + js/src/abi/spec/event/decodedLogParam.spec.js | 42 + js/src/abi/spec/event/event.js | 113 ++ js/src/abi/spec/event/event.spec.js | 111 ++ js/src/abi/spec/event/eventParam.js | 41 + js/src/abi/spec/event/eventParam.spec.js | 43 + js/src/abi/spec/event/index.js | 17 + js/src/abi/spec/function.js | 87 ++ js/src/abi/spec/function.spec.js | 89 ++ js/src/abi/spec/index.js | 17 + js/src/abi/spec/interface.js | 73 ++ js/src/abi/spec/interface.spec.js | 126 ++ js/src/abi/spec/param.js | 36 + js/src/abi/spec/param.spec.js | 38 + js/src/abi/spec/paramType/format.js | 80 ++ js/src/abi/spec/paramType/format.spec.js | 228 ++++ js/src/abi/spec/paramType/index.js | 17 + js/src/abi/spec/paramType/paramType.js | 52 + js/src/abi/spec/paramType/paramType.spec.js | 87 ++ js/src/abi/spec/paramType/types.js | 19 + js/src/abi/token/index.js | 17 + js/src/abi/token/token.js | 42 + js/src/abi/token/token.spec.js | 75 ++ js/src/abi/util/address.js | 65 + js/src/abi/util/address.spec.js | 100 ++ js/src/abi/util/pad.js | 75 ++ js/src/abi/util/pad.spec.js | 124 ++ js/src/abi/util/signature.js | 31 + js/src/abi/util/signature.spec.js | 68 ++ js/src/abi/util/slice.js | 35 + js/src/abi/util/slice.spec.js | 48 + js/src/abi/util/sliceAs.js | 47 + js/src/abi/util/sliceAs.spec.js | 54 + js/src/abi/util/types.js | 27 + js/src/abi/util/types.spec.js | 62 + js/src/api/README.md | 145 +++ js/src/api/api.js | 125 ++ js/src/api/api.spec.js | 47 + js/src/api/contract/contract.js | 319 +++++ js/src/api/contract/contract.spec.js | 539 +++++++++ js/src/api/contract/index.js | 17 + js/src/api/format/input.js | 139 +++ js/src/api/format/input.spec.js | 245 ++++ js/src/api/format/output.js | 165 +++ js/src/api/format/output.spec.js | 247 ++++ js/src/api/index.js | 17 + js/src/api/rpc/db/db.js | 43 + js/src/api/rpc/db/db.spec.js | 38 + js/src/api/rpc/db/index.js | 17 + js/src/api/rpc/eth/eth.e2e.js | 170 +++ js/src/api/rpc/eth/eth.js | 329 +++++ js/src/api/rpc/eth/eth.spec.js | 474 ++++++++ js/src/api/rpc/eth/index.js | 17 + js/src/api/rpc/ethcore/ethcore.e2e.js | 61 + js/src/api/rpc/ethcore/ethcore.js | 168 +++ js/src/api/rpc/ethcore/ethcore.spec.js | 92 ++ js/src/api/rpc/ethcore/index.js | 17 + js/src/api/rpc/index.js | 24 + js/src/api/rpc/net/index.js | 17 + js/src/api/rpc/net/net.e2e.js | 46 + js/src/api/rpc/net/net.js | 39 + js/src/api/rpc/net/net.spec.js | 36 + js/src/api/rpc/personal/index.js | 17 + js/src/api/rpc/personal/personal.e2e.js | 53 + js/src/api/rpc/personal/personal.js | 112 ++ js/src/api/rpc/personal/personal.spec.js | 97 ++ js/src/api/rpc/shh/index.js | 17 + js/src/api/rpc/shh/shh.js | 71 ++ js/src/api/rpc/trace/index.js | 17 + js/src/api/rpc/trace/trace.e2e.js | 35 + js/src/api/rpc/trace/trace.js | 43 + js/src/api/rpc/trace/trace.spec.js | 44 + js/src/api/rpc/web3/index.js | 17 + js/src/api/rpc/web3/web3.e2e.js | 44 + js/src/api/rpc/web3/web3.js | 33 + js/src/api/rpc/web3/web3.spec.js | 38 + js/src/api/subscriptions/eth.js | 62 + js/src/api/subscriptions/eth.spec.js | 101 ++ js/src/api/subscriptions/index.js | 19 + js/src/api/subscriptions/logging.js | 44 + js/src/api/subscriptions/logging.spec.js | 49 + js/src/api/subscriptions/manager.js | 134 ++ js/src/api/subscriptions/manager.spec.js | 98 ++ js/src/api/subscriptions/personal.js | 77 ++ js/src/api/subscriptions/personal.spec.js | 122 ++ js/src/api/subscriptions/signer.js | 76 ++ js/src/api/transport/http/http.e2e.js | 29 + js/src/api/transport/http/http.js | 76 ++ js/src/api/transport/http/http.spec.js | 122 ++ js/src/api/transport/http/index.js | 17 + js/src/api/transport/index.js | 18 + js/src/api/transport/jsonRpcBase.js | 62 + js/src/api/transport/jsonRpcBase.spec.js | 88 ++ js/src/api/transport/ws/index.js | 17 + js/src/api/transport/ws/ws.e2e.js | 29 + js/src/api/transport/ws/ws.js | 148 +++ js/src/api/transport/ws/ws.spec.js | 85 ++ js/src/api/util/decode.js | 83 ++ js/src/api/util/decode.spec.js | 101 ++ js/src/api/util/format.js | 19 + js/src/api/util/format.spec.js | 29 + js/src/api/util/identity.js | 9 + js/src/api/util/index.js | 41 + js/src/api/util/sha3.js | 21 + js/src/api/util/sha3.spec.js | 25 + js/src/api/util/types.js | 56 + js/src/api/util/types.spec.js | 112 ++ js/src/api/util/wei.js | 37 + js/src/api/util/wei.spec.js | 57 + js/src/contracts/abi/basiccoin.json | 1 + js/src/contracts/abi/basiccoinmanager.json | 1 + js/src/contracts/abi/dappreg.json | 1 + js/src/contracts/abi/eip20.json | 163 +++ js/src/contracts/abi/gavcoin.json | 1 + js/src/contracts/abi/githubhint.json | 81 ++ js/src/contracts/abi/index.js | 39 + js/src/contracts/abi/owned.json | 1 + js/src/contracts/abi/registry.json | 1 + js/src/contracts/abi/signaturereg.json | 128 ++ js/src/contracts/abi/tokenreg.json | 1 + js/src/contracts/contracts.js | 58 + js/src/contracts/dappreg.js | 72 ++ js/src/contracts/index.js | 17 + js/src/contracts/registry.js | 76 ++ js/src/contracts/signaturereg.js | 34 + js/src/contracts/tokenreg.js | 40 + js/src/dapps/basiccoin.html | 16 + js/src/dapps/basiccoin.js | 47 + .../basiccoin/AddressSelect/addressSelect.css | 23 + .../basiccoin/AddressSelect/addressSelect.js | 93 ++ js/src/dapps/basiccoin/AddressSelect/index.js | 17 + .../basiccoin/Application/Header/header.css | 71 ++ .../basiccoin/Application/Header/header.js | 80 ++ .../basiccoin/Application/Header/index.js | 17 + .../basiccoin/Application/Loading/index.js | 17 + .../basiccoin/Application/Loading/loading.css | 24 + .../basiccoin/Application/Loading/loading.js | 29 + .../basiccoin/Application/application.css | 28 + .../basiccoin/Application/application.js | 107 ++ js/src/dapps/basiccoin/Application/index.js | 17 + js/src/dapps/basiccoin/Application/pages.js | 38 + .../dapps/basiccoin/Container/container.css | 26 + js/src/dapps/basiccoin/Container/container.js | 37 + js/src/dapps/basiccoin/Container/index.js | 17 + .../Deploy/Deployment/deployment.css | 19 + .../basiccoin/Deploy/Deployment/deployment.js | 320 +++++ .../basiccoin/Deploy/Deployment/index.js | 17 + js/src/dapps/basiccoin/Deploy/Event/event.css | 58 + js/src/dapps/basiccoin/Deploy/Event/event.js | 103 ++ js/src/dapps/basiccoin/Deploy/Event/index.js | 17 + .../dapps/basiccoin/Deploy/Events/events.css | 33 + .../dapps/basiccoin/Deploy/Events/events.js | 141 +++ js/src/dapps/basiccoin/Deploy/Events/index.js | 17 + js/src/dapps/basiccoin/Deploy/deploy.js | 31 + js/src/dapps/basiccoin/Deploy/index.js | 17 + .../basiccoin/IdentityIcon/identityIcon.css | 22 + .../basiccoin/IdentityIcon/identityIcon.js | 38 + js/src/dapps/basiccoin/IdentityIcon/index.js | 17 + .../dapps/basiccoin/Overview/Owner/index.js | 17 + .../dapps/basiccoin/Overview/Owner/owner.css | 48 + .../dapps/basiccoin/Overview/Owner/owner.js | 74 ++ .../dapps/basiccoin/Overview/Token/index.js | 17 + .../dapps/basiccoin/Overview/Token/token.css | 53 + .../dapps/basiccoin/Overview/Token/token.js | 68 ++ js/src/dapps/basiccoin/Overview/index.js | 17 + js/src/dapps/basiccoin/Overview/overview.css | 26 + js/src/dapps/basiccoin/Overview/overview.js | 107 ++ .../dapps/basiccoin/Transfer/Event/event.js | 106 ++ .../dapps/basiccoin/Transfer/Event/index.js | 17 + .../dapps/basiccoin/Transfer/Events/events.js | 145 +++ .../dapps/basiccoin/Transfer/Events/index.js | 17 + js/src/dapps/basiccoin/Transfer/Send/index.js | 17 + js/src/dapps/basiccoin/Transfer/Send/send.css | 19 + js/src/dapps/basiccoin/Transfer/Send/send.js | 327 +++++ js/src/dapps/basiccoin/Transfer/index.js | 17 + js/src/dapps/basiccoin/Transfer/transfer.js | 31 + js/src/dapps/basiccoin/_form.css | 105 ++ js/src/dapps/basiccoin/_status.css | 36 + js/src/dapps/basiccoin/background.jpg | Bin 0 -> 127459 bytes js/src/dapps/basiccoin/parity.js | 21 + js/src/dapps/basiccoin/services.js | 270 +++++ js/src/dapps/gavcoin.html | 16 + js/src/dapps/gavcoin.js | 33 + .../AccountItem/accountItem.css | 45 + .../AccountItem/accountItem.js | 63 + .../AccountSelector/AccountItem/index.js | 17 + .../AccountSelector/accountSelector.js | 102 ++ js/src/dapps/gavcoin/AccountSelector/index.js | 22 + .../accountSelectorText.css | 28 + .../accountSelectorText.js | 106 ++ .../gavcoin/AccountSelectorText/index.js | 17 + js/src/dapps/gavcoin/Accounts/accounts.css | 47 + js/src/dapps/gavcoin/Accounts/accounts.js | 83 ++ js/src/dapps/gavcoin/Accounts/index.js | 17 + .../Actions/ActionBuyIn/actionBuyIn.js | 206 ++++ .../gavcoin/Actions/ActionBuyIn/index.js | 17 + .../Actions/ActionRefund/actionRefund.js | 191 +++ .../gavcoin/Actions/ActionRefund/index.js | 17 + .../Actions/ActionTransfer/actionTransfer.js | 220 ++++ .../gavcoin/Actions/ActionTransfer/index.js | 17 + .../gavcoin/Actions/StepComplete/index.js | 17 + .../Actions/StepComplete/stepComplete.js | 29 + js/src/dapps/gavcoin/Actions/actions.css | 72 ++ js/src/dapps/gavcoin/Actions/actions.js | 76 ++ js/src/dapps/gavcoin/Actions/index.js | 27 + js/src/dapps/gavcoin/Actions/validation.js | 56 + .../dapps/gavcoin/Application/application.js | 239 ++++ js/src/dapps/gavcoin/Application/index.js | 17 + js/src/dapps/gavcoin/Events/Event/event.js | 129 ++ js/src/dapps/gavcoin/Events/Event/index.js | 17 + .../gavcoin/Events/EventBuyin/eventBuyin.js | 38 + .../dapps/gavcoin/Events/EventBuyin/index.js | 17 + .../Events/EventNewTranch/eventNewTranch.js | 36 + .../gavcoin/Events/EventNewTranch/index.js | 17 + .../gavcoin/Events/EventRefund/eventRefund.js | 38 + .../dapps/gavcoin/Events/EventRefund/index.js | 17 + .../Events/EventTransfer/eventTransfer.js | 38 + .../gavcoin/Events/EventTransfer/index.js | 17 + js/src/dapps/gavcoin/Events/events.css | 94 ++ js/src/dapps/gavcoin/Events/events.js | 158 +++ js/src/dapps/gavcoin/Events/index.js | 17 + .../gavcoin/IdentityIcon/identityIcon.css | 23 + .../gavcoin/IdentityIcon/identityIcon.js | 36 + js/src/dapps/gavcoin/IdentityIcon/index.js | 17 + js/src/dapps/gavcoin/Loading/index.js | 17 + js/src/dapps/gavcoin/Loading/loading.css | 21 + js/src/dapps/gavcoin/Loading/loading.js | 31 + js/src/dapps/gavcoin/Status/index.js | 17 + js/src/dapps/gavcoin/Status/status.css | 53 + js/src/dapps/gavcoin/Status/status.js | 74 ++ js/src/dapps/gavcoin/format/index.js | 52 + js/src/dapps/gavcoin/parity.js | 21 + js/src/dapps/githubhint.html | 16 + js/src/dapps/githubhint.js | 33 + .../githubhint/Application/application.css | 121 ++ .../githubhint/Application/application.js | 261 ++++ js/src/dapps/githubhint/Application/index.js | 17 + js/src/dapps/githubhint/Button/button.css | 56 + js/src/dapps/githubhint/Button/button.js | 53 + js/src/dapps/githubhint/Button/index.js | 17 + .../githubhint/IdentityIcon/identityIcon.css | 23 + .../githubhint/IdentityIcon/identityIcon.js | 36 + js/src/dapps/githubhint/IdentityIcon/index.js | 17 + js/src/dapps/githubhint/Loading/index.js | 17 + js/src/dapps/githubhint/Loading/loading.css | 24 + js/src/dapps/githubhint/Loading/loading.js | 29 + js/src/dapps/githubhint/parity.js | 21 + js/src/dapps/githubhint/services.js | 64 + js/src/dapps/registry.html | 16 + js/src/dapps/registry.js | 37 + js/src/dapps/registry/Accounts/accounts.css | 38 + js/src/dapps/registry/Accounts/accounts.js | 76 ++ js/src/dapps/registry/Accounts/actions.js | 17 + js/src/dapps/registry/Accounts/index.js | 17 + .../registry/Application/application.css | 39 + .../dapps/registry/Application/application.js | 88 ++ js/src/dapps/registry/Application/index.js | 17 + js/src/dapps/registry/Container.js | 66 + js/src/dapps/registry/Events/actions.js | 85 ++ js/src/dapps/registry/Events/events.css | 51 + js/src/dapps/registry/Events/events.js | 167 +++ js/src/dapps/registry/Events/index.js | 17 + js/src/dapps/registry/Events/reducers.js | 76 ++ .../registry/IdentityIcon/identityIcon.css | 23 + .../registry/IdentityIcon/identityIcon.js | 39 + js/src/dapps/registry/IdentityIcon/index.js | 17 + js/src/dapps/registry/Lookup/actions.js | 42 + js/src/dapps/registry/Lookup/index.js | 17 + js/src/dapps/registry/Lookup/lookup.css | 28 + js/src/dapps/registry/Lookup/lookup.js | 98 ++ js/src/dapps/registry/Lookup/reducers.js | 53 + js/src/dapps/registry/Names/actions.js | 89 ++ js/src/dapps/registry/Names/index.js | 17 + js/src/dapps/registry/Names/names.css | 40 + js/src/dapps/registry/Names/names.js | 144 +++ js/src/dapps/registry/Names/reducers.js | 55 + js/src/dapps/registry/Records/actions.js | 38 + js/src/dapps/registry/Records/index.js | 1 + js/src/dapps/registry/Records/records.css | 28 + js/src/dapps/registry/Records/records.js | 76 ++ js/src/dapps/registry/Records/reducers.js | 29 + js/src/dapps/registry/actions.js | 68 ++ .../registry/addresses/accounts-reducer.js | 38 + js/src/dapps/registry/addresses/actions.js | 39 + .../registry/addresses/contacts-reducer.js | 31 + js/src/dapps/registry/parity.js | 23 + js/src/dapps/registry/reducers.js | 55 + js/src/dapps/registry/store.js | 22 + js/src/dapps/registry/ui/address.js | 47 + js/src/dapps/registry/ui/hash.js | 24 + js/src/dapps/registry/ui/image.js | 30 + .../dapps/registry/ui/record-type-select.js | 27 + js/src/dapps/signaturereg.html | 16 + js/src/dapps/signaturereg.js | 33 + .../signaturereg/Application/application.css | 29 + .../signaturereg/Application/application.js | 130 ++ .../dapps/signaturereg/Application/index.js | 17 + js/src/dapps/signaturereg/Button/button.css | 43 + js/src/dapps/signaturereg/Button/button.js | 50 + js/src/dapps/signaturereg/Button/index.js | 17 + js/src/dapps/signaturereg/Events/events.css | 76 ++ js/src/dapps/signaturereg/Events/events.js | 84 ++ js/src/dapps/signaturereg/Events/index.js | 17 + js/src/dapps/signaturereg/Header/header.css | 67 + js/src/dapps/signaturereg/Header/header.js | 48 + js/src/dapps/signaturereg/Header/index.js | 17 + .../IdentityIcon/identityIcon.css | 23 + .../signaturereg/IdentityIcon/identityIcon.js | 36 + .../dapps/signaturereg/IdentityIcon/index.js | 17 + js/src/dapps/signaturereg/Import/import.css | 151 +++ js/src/dapps/signaturereg/Import/import.js | 236 ++++ js/src/dapps/signaturereg/Import/index.js | 17 + js/src/dapps/signaturereg/Loading/index.js | 17 + js/src/dapps/signaturereg/Loading/loading.css | 24 + js/src/dapps/signaturereg/Loading/loading.js | 29 + js/src/dapps/signaturereg/format.js | 40 + js/src/dapps/signaturereg/parity.js | 21 + js/src/dapps/signaturereg/services.js | 173 +++ js/src/dapps/style.css | 46 + js/src/dapps/tokenreg.html | 16 + js/src/dapps/tokenreg.js | 39 + .../AccountSelector/account-selector.css | 25 + .../AccountSelector/account-selector.js | 120 ++ .../Accounts/AccountSelector/container.js | 45 + .../Accounts/AccountSelector/index.js | 17 + js/src/dapps/tokenreg/Accounts/actions.js | 61 + js/src/dapps/tokenreg/Accounts/reducer.js | 57 + js/src/dapps/tokenreg/Actions/Query/index.js | 17 + js/src/dapps/tokenreg/Actions/Query/query.js | 207 ++++ .../dapps/tokenreg/Actions/Register/index.js | 17 + .../tokenreg/Actions/Register/register.js | 217 ++++ js/src/dapps/tokenreg/Actions/actions.css | 50 + js/src/dapps/tokenreg/Actions/actions.js | 215 ++++ js/src/dapps/tokenreg/Actions/component.js | 119 ++ js/src/dapps/tokenreg/Actions/container.js | 62 + js/src/dapps/tokenreg/Actions/index.js | 17 + js/src/dapps/tokenreg/Actions/reducer.js | 155 +++ .../tokenreg/Application/application.css | 22 + .../dapps/tokenreg/Application/application.js | 72 ++ js/src/dapps/tokenreg/Application/index.js | 17 + js/src/dapps/tokenreg/Chip/chip.css | 45 + js/src/dapps/tokenreg/Chip/chip.js | 68 ++ js/src/dapps/tokenreg/Chip/index.js | 17 + js/src/dapps/tokenreg/Container.js | 64 + .../tokenreg/IdentityIcon/identityIcon.css | 23 + .../tokenreg/IdentityIcon/identityIcon.js | 36 + js/src/dapps/tokenreg/IdentityIcon/index.js | 17 + .../dapps/tokenreg/Inputs/Text/container.js | 37 + js/src/dapps/tokenreg/Inputs/Text/index.js | 17 + .../dapps/tokenreg/Inputs/Text/input-text.js | 141 +++ js/src/dapps/tokenreg/Inputs/inputs.css | 33 + js/src/dapps/tokenreg/Inputs/validation.js | 212 ++++ js/src/dapps/tokenreg/Loading/index.js | 17 + js/src/dapps/tokenreg/Loading/loading.css | 23 + js/src/dapps/tokenreg/Loading/loading.js | 34 + js/src/dapps/tokenreg/Status/actions.js | 202 ++++ js/src/dapps/tokenreg/Status/index.js | 17 + js/src/dapps/tokenreg/Status/reducer.js | 65 + js/src/dapps/tokenreg/Status/status.css | 36 + js/src/dapps/tokenreg/Status/status.js | 50 + .../dapps/tokenreg/Tokens/Token/add-meta.js | 193 +++ js/src/dapps/tokenreg/Tokens/Token/index.js | 17 + js/src/dapps/tokenreg/Tokens/Token/token.css | 140 +++ js/src/dapps/tokenreg/Tokens/Token/token.js | 338 ++++++ js/src/dapps/tokenreg/Tokens/actions.js | 262 ++++ js/src/dapps/tokenreg/Tokens/container.js | 80 ++ js/src/dapps/tokenreg/Tokens/index.js | 17 + js/src/dapps/tokenreg/Tokens/reducer.js | 114 ++ js/src/dapps/tokenreg/Tokens/tokens.css | 24 + js/src/dapps/tokenreg/Tokens/tokens.js | 68 ++ js/src/dapps/tokenreg/constants.js | 30 + js/src/dapps/tokenreg/parity.js | 21 + js/src/dapps/tokenreg/reducers.js | 28 + js/src/dapps/tokenreg/store.js | 22 + js/src/dapps/tokenreg/utils.js | 37 + js/src/environment/empty.js | 0 js/src/environment/index.js | 20 + .../integration-tests/fake-backend.js | 84 ++ js/src/environment/integration-tests/index.js | 17 + js/src/environment/perf-debug/index.js | 17 + js/src/environment/perf-debug/why-update.js | 20 + js/src/environment/tests/index.js | 17 + js/src/environment/tests/test-utils.js | 46 + js/src/error_pages.css | 113 ++ js/src/images/dapps/blocks-350.png | Bin 0 -> 1073157 bytes js/src/index.html | 20 + js/src/index.js | 91 ++ js/src/jsonrpc/README.md | 20 + js/src/jsonrpc/generator/build-json.js | 67 + js/src/jsonrpc/generator/build-markdown.js | 69 ++ js/src/jsonrpc/index.js | 35 + js/src/jsonrpc/index.spec.js | 62 + js/src/jsonrpc/interfaces/db.js | 103 ++ js/src/jsonrpc/interfaces/eth.js | 1044 ++++++++++++++++ js/src/jsonrpc/interfaces/ethcore.js | 315 +++++ js/src/jsonrpc/interfaces/net.js | 47 + js/src/jsonrpc/interfaces/personal.js | 288 +++++ js/src/jsonrpc/interfaces/shh.js | 169 +++ js/src/jsonrpc/interfaces/trace.js | 79 ++ js/src/jsonrpc/interfaces/web3.js | 42 + js/src/jsonrpc/rollup.config.js | 12 + js/src/jsonrpc/types.js | 27 + js/src/modals/AddAddress/addAddress.js | 151 +++ js/src/modals/AddAddress/index.js | 17 + js/src/modals/AddContract/addContract.js | 161 +++ js/src/modals/AddContract/index.js | 17 + .../AccountDetails/accountDetails.js | 65 + .../CreateAccount/AccountDetails/index.js | 17 + .../AccountDetailsGeth/accountDetailsGeth.css | 22 + .../AccountDetailsGeth/accountDetailsGeth.js | 41 + .../CreateAccount/AccountDetailsGeth/index.js | 17 + .../CreationType/creationType.js | 61 + .../CreateAccount/CreationType/index.js | 17 + .../modals/CreateAccount/NewAccount/index.js | 23 + .../CreateAccount/NewAccount/newAccount.js | 298 +++++ js/src/modals/CreateAccount/NewGeth/index.js | 17 + .../modals/CreateAccount/NewGeth/newGeth.css | 43 + .../modals/CreateAccount/NewGeth/newGeth.js | 128 ++ .../modals/CreateAccount/NewImport/index.js | 17 + .../CreateAccount/NewImport/newImport.js | 182 +++ .../CreateAccount/RecoveryPhrase/index.js | 17 + .../RecoveryPhrase/recoveryPhrase.js | 181 +++ js/src/modals/CreateAccount/createAccount.css | 60 + js/src/modals/CreateAccount/createAccount.js | 324 +++++ js/src/modals/CreateAccount/index.js | 21 + .../DeployContract/DetailsStep/detailsStep.js | 192 +++ .../DeployContract/DetailsStep/index.js | 17 + .../DeployContract/ErrorStep/errorStep.js | 35 + .../modals/DeployContract/ErrorStep/index.js | 17 + .../modals/DeployContract/deployContract.css | 33 + .../modals/DeployContract/deployContract.js | 275 +++++ js/src/modals/DeployContract/index.js | 17 + js/src/modals/EditMeta/editMeta.js | 131 ++ js/src/modals/EditMeta/index.js | 17 + .../DetailsStep/detailsStep.js | 167 +++ .../ExecuteContract/DetailsStep/index.js | 17 + .../ExecuteContract/executeContract.css | 35 + .../modals/ExecuteContract/executeContract.js | 221 ++++ js/src/modals/ExecuteContract/index.js | 17 + js/src/modals/FirstRun/Completed/completed.js | 27 + js/src/modals/FirstRun/Completed/index.js | 17 + js/src/modals/FirstRun/Welcome/index.js | 17 + js/src/modals/FirstRun/Welcome/welcome.js | 41 + js/src/modals/FirstRun/firstRun.js | 185 +++ js/src/modals/FirstRun/index.js | 17 + .../awaitingDepositStep.js | 67 + .../Shapeshift/AwaitingDepositStep/index.js | 17 + .../awaitingExchangeStep.js | 48 + .../Shapeshift/AwaitingExchangeStep/index.js | 17 + .../Shapeshift/CompletedStep/completedStep.js | 54 + .../modals/Shapeshift/CompletedStep/index.js | 17 + .../modals/Shapeshift/ErrorStep/errorStep.js | 43 + js/src/modals/Shapeshift/ErrorStep/index.js | 17 + js/src/modals/Shapeshift/OptionsStep/index.js | 17 + .../Shapeshift/OptionsStep/optionsStep.css | 61 + .../Shapeshift/OptionsStep/optionsStep.js | 113 ++ js/src/modals/Shapeshift/Price/index.js | 17 + js/src/modals/Shapeshift/Price/price.js | 50 + js/src/modals/Shapeshift/Value/index.js | 17 + js/src/modals/Shapeshift/Value/value.css | 24 + js/src/modals/Shapeshift/Value/value.js | 45 + js/src/modals/Shapeshift/index.js | 17 + js/src/modals/Shapeshift/shapeshift.css | 65 + js/src/modals/Shapeshift/shapeshift.js | 306 +++++ js/src/modals/Transfer/Details/details.js | 193 +++ js/src/modals/Transfer/Details/index.js | 17 + js/src/modals/Transfer/Extras/extras.js | 109 ++ js/src/modals/Transfer/Extras/index.js | 17 + js/src/modals/Transfer/errors.js | 24 + js/src/modals/Transfer/index.js | 17 + js/src/modals/Transfer/transfer.css | 130 ++ js/src/modals/Transfer/transfer.js | 577 +++++++++ js/src/modals/index.js | 37 + js/src/parity.js | 30 + js/src/redux/actions.js | 28 + js/src/redux/index.js | 23 + js/src/redux/middleware.js | 36 + js/src/redux/providers/balances.js | 182 +++ js/src/redux/providers/balancesActions.js | 29 + js/src/redux/providers/balancesReducer.js | 36 + js/src/redux/providers/imagesActions.js | 23 + js/src/redux/providers/imagesReducer.js | 40 + js/src/redux/providers/index.js | 26 + js/src/redux/providers/personal.js | 43 + js/src/redux/providers/personalActions.js | 22 + js/src/redux/providers/personalReducer.js | 59 + js/src/redux/providers/signer.js | 58 + js/src/redux/providers/signerActions.js | 41 + js/src/redux/providers/signerMiddleware.js | 84 ++ js/src/redux/providers/signerReducer.js | 110 ++ js/src/redux/providers/status.js | 138 +++ js/src/redux/providers/statusActions.js | 49 + js/src/redux/providers/statusReducer.js | 75 ++ js/src/redux/reducers.js | 39 + js/src/redux/store.js | 44 + js/src/redux/util.js | 23 + js/src/reset.css | 108 ++ js/src/secureApi.js | 113 ++ js/src/ui/Actionbar/actionbar.css | 39 + js/src/ui/Actionbar/actionbar.js | 67 + js/src/ui/Actionbar/index.js | 17 + js/src/ui/Badge/badge.css | 35 + js/src/ui/Badge/badge.js | 38 + js/src/ui/Badge/index.js | 17 + js/src/ui/Balance/balance.css | 50 + js/src/ui/Balance/balance.js | 93 ++ js/src/ui/Balance/index.js | 17 + js/src/ui/Button/button.js | 45 + js/src/ui/Button/index.js | 17 + js/src/ui/ConfirmDialog/confirmDialog.css | 19 + js/src/ui/ConfirmDialog/confirmDialog.js | 56 + js/src/ui/ConfirmDialog/index.js | 17 + js/src/ui/Container/Title/index.js | 17 + js/src/ui/Container/Title/title.css | 25 + js/src/ui/Container/Title/title.js | 48 + js/src/ui/Container/container.css | 29 + js/src/ui/Container/container.js | 42 + js/src/ui/Container/index.js | 20 + js/src/ui/ContextProvider/contextProvider.js | 48 + js/src/ui/ContextProvider/index.js | 1 + js/src/ui/Errors/actions.js | 28 + js/src/ui/Errors/errors.css | 20 + js/src/ui/Errors/errors.js | 69 ++ js/src/ui/Errors/index.js | 25 + js/src/ui/Errors/middleware.js | 46 + js/src/ui/Errors/reducers.js | 44 + .../ui/Form/AddressSelect/addressSelect.css | 38 + js/src/ui/Form/AddressSelect/addressSelect.js | 95 ++ js/src/ui/Form/AddressSelect/index.js | 17 + js/src/ui/Form/FormWrap/formWrap.css | 24 + js/src/ui/Form/FormWrap/formWrap.js | 33 + js/src/ui/Form/FormWrap/index.js | 17 + js/src/ui/Form/Input/index.js | 17 + js/src/ui/Form/Input/input.js | 123 ++ js/src/ui/Form/InputAddress/index.js | 17 + js/src/ui/Form/InputAddress/inputAddress.css | 28 + js/src/ui/Form/InputAddress/inputAddress.js | 97 ++ js/src/ui/Form/InputAddressSelect/index.js | 17 + .../InputAddressSelect/inputAddressSelect.css | 31 + .../InputAddressSelect/inputAddressSelect.js | 127 ++ js/src/ui/Form/InputInline/index.js | 17 + js/src/ui/Form/InputInline/inputInline.css | 19 + js/src/ui/Form/InputInline/inputInline.js | 94 ++ js/src/ui/Form/Select/index.js | 17 + js/src/ui/Form/Select/select.js | 71 ++ js/src/ui/Form/form.css | 33 + js/src/ui/Form/form.js | 40 + js/src/ui/Form/index.js | 34 + js/src/ui/IdentityIcon/identityIcon.css | 52 + js/src/ui/IdentityIcon/identityIcon.js | 136 +++ js/src/ui/IdentityIcon/index.js | 17 + js/src/ui/IdentityName/identityName.js | 78 ++ js/src/ui/IdentityName/index.js | 17 + js/src/ui/MethodDecoding/index.js | 17 + js/src/ui/MethodDecoding/methodDecoding.css | 75 ++ js/src/ui/MethodDecoding/methodDecoding.js | 349 ++++++ js/src/ui/Modal/Busy/busy.css | 27 + js/src/ui/Modal/Busy/busy.js | 39 + js/src/ui/Modal/Busy/index.js | 17 + js/src/ui/Modal/Completed/completed.css | 24 + js/src/ui/Modal/Completed/completed.js | 35 + js/src/ui/Modal/Completed/index.js | 17 + js/src/ui/Modal/Title/index.js | 17 + js/src/ui/Modal/Title/title.js | 92 ++ js/src/ui/Modal/index.js | 25 + js/src/ui/Modal/modal.css | 70 ++ js/src/ui/Modal/modal.js | 106 ++ js/src/ui/Page/index.js | 17 + js/src/ui/Page/page.css | 23 + js/src/ui/Page/page.js | 37 + js/src/ui/ParityBackground/index.js | 17 + .../ui/ParityBackground/parityBackground.js | 64 + js/src/ui/SignerIcon/index.js | 17 + js/src/ui/SignerIcon/signerIcon.js | 64 + js/src/ui/Theme/index.js | 17 + js/src/ui/Theme/theme.js | 71 ++ js/src/ui/Tooltips/Tooltip/index.js | 17 + js/src/ui/Tooltips/Tooltip/tooltip.js | 117 ++ js/src/ui/Tooltips/actions.js | 34 + js/src/ui/Tooltips/index.js | 21 + js/src/ui/Tooltips/reducers.js | 69 ++ js/src/ui/Tooltips/tooltips.css | 103 ++ js/src/ui/Tooltips/tooltips.js | 66 + js/src/ui/TxHash/index.js | 17 + js/src/ui/TxHash/txHash.css | 41 + js/src/ui/TxHash/txHash.js | 135 +++ js/src/ui/index.js | 68 ++ js/src/util/validation.js | 91 ++ js/src/views/Account/Header/header.css | 43 + js/src/views/Account/Header/header.js | 121 ++ js/src/views/Account/Header/index.js | 17 + .../Account/Transactions/Transaction/index.js | 17 + .../Transactions/Transaction/transaction.js | 193 +++ js/src/views/Account/Transactions/index.js | 17 + .../Account/Transactions/transactions.css | 101 ++ .../Account/Transactions/transactions.js | 148 +++ js/src/views/Account/account.css | 23 + js/src/views/Account/account.js | 207 ++++ js/src/views/Account/index.js | 17 + js/src/views/Accounts/List/index.js | 17 + js/src/views/Accounts/List/list.css | 45 + js/src/views/Accounts/List/list.js | 69 ++ js/src/views/Accounts/Summary/index.js | 17 + js/src/views/Accounts/Summary/summary.js | 60 + js/src/views/Accounts/accounts.css | 32 + js/src/views/Accounts/accounts.js | 134 ++ js/src/views/Accounts/index.js | 17 + js/src/views/Address/Delete/delete.js | 113 ++ js/src/views/Address/Delete/index.js | 17 + js/src/views/Address/address.css | 50 + js/src/views/Address/address.js | 153 +++ js/src/views/Address/index.js | 17 + js/src/views/Addresses/addresses.css | 46 + js/src/views/Addresses/addresses.js | 122 ++ js/src/views/Addresses/index.js | 17 + .../views/Application/Container/container.js | 45 + js/src/views/Application/Container/index.js | 17 + .../DappContainer/dappContainer.js | 35 + .../views/Application/DappContainer/index.js | 17 + .../Application/FrameError/frameError.css | 21 + .../Application/FrameError/frameError.js | 29 + js/src/views/Application/FrameError/index.js | 17 + js/src/views/Application/Status/index.js | 17 + js/src/views/Application/Status/status.css | 65 + js/src/views/Application/Status/status.js | 82 ++ js/src/views/Application/TabBar/index.js | 17 + js/src/views/Application/TabBar/tabBar.css | 84 ++ js/src/views/Application/TabBar/tabBar.js | 187 +++ js/src/views/Application/application.css | 21 + js/src/views/Application/application.js | 146 +++ js/src/views/Application/index.js | 17 + js/src/views/Connection/connection.css | 113 ++ js/src/views/Connection/connection.js | 150 +++ js/src/views/Connection/index.js | 17 + js/src/views/Contract/Events/events.js | 132 ++ js/src/views/Contract/Events/index.js | 17 + js/src/views/Contract/Queries/index.js | 17 + js/src/views/Contract/Queries/inputQuery.js | 186 +++ js/src/views/Contract/Queries/queries.css | 87 ++ js/src/views/Contract/Queries/queries.js | 132 ++ js/src/views/Contract/contract.css | 58 + js/src/views/Contract/contract.js | 365 ++++++ js/src/views/Contract/index.js | 17 + js/src/views/Contracts/Summary/index.js | 17 + js/src/views/Contracts/Summary/summary.js | 52 + js/src/views/Contracts/contracts.css | 18 + js/src/views/Contracts/contracts.js | 154 +++ js/src/views/Contracts/index.js | 17 + js/src/views/Dapp/dapp.css | 22 + js/src/views/Dapp/dapp.js | 48 + js/src/views/Dapp/index.js | 17 + js/src/views/Dapps/Summary/index.js | 17 + js/src/views/Dapps/Summary/summary.css | 43 + js/src/views/Dapps/Summary/summary.js | 60 + js/src/views/Dapps/dapps.css | 40 + js/src/views/Dapps/dapps.js | 168 +++ js/src/views/Dapps/index.js | 17 + js/src/views/ParityBar/index.js | 17 + js/src/views/ParityBar/parityBar.css | 153 +++ js/src/views/ParityBar/parityBar.js | 170 +++ .../views/Settings/Background/background.css | 46 + .../views/Settings/Background/background.js | 142 +++ js/src/views/Settings/Background/index.js | 17 + js/src/views/Settings/Views/defaults.js | 97 ++ js/src/views/Settings/Views/index.js | 23 + js/src/views/Settings/Views/views.css | 49 + js/src/views/Settings/Views/views.js | 101 ++ js/src/views/Settings/actions.js | 29 + js/src/views/Settings/index.js | 31 + js/src/views/Settings/layout.css | 54 + js/src/views/Settings/middleware.js | 125 ++ js/src/views/Settings/reducers.js | 40 + js/src/views/Settings/settings.css | 62 + js/src/views/Settings/settings.js | 82 ++ .../Signer/components/Account/Account.css | 44 + .../Signer/components/Account/Account.js | 109 ++ .../Account/AccountLink/AccountLink.css | 20 + .../Account/AccountLink/AccountLink.js | 66 + .../components/Account/AccountLink/index.js | 17 + .../views/Signer/components/Account/index.js | 17 + .../RequestFinishedWeb3.js | 80 ++ .../components/RequestFinishedWeb3/index.js | 17 + .../RequestPendingWeb3/RequestPendingWeb3.js | 78 ++ .../components/RequestPendingWeb3/index.js | 17 + .../components/SignRequest/SignRequest.css | 74 ++ .../components/SignRequest/SignRequest.js | 113 ++ .../Signer/components/SignRequest/index.js | 17 + .../SignRequestWeb3/SignRequestWeb3.js | 95 ++ .../components/SignRequestWeb3/index.js | 17 + .../TransactionFinished.css | 55 + .../TransactionFinished.js | 107 ++ .../components/TransactionFinished/index.js | 17 + .../TransactionFinishedWeb3.js | 92 ++ .../TransactionFinishedWeb3/index.js | 17 + .../TransactionMainDetails.css | 72 ++ .../TransactionMainDetails.js | 168 +++ .../TransactionMainDetails/index.js | 17 + .../TransactionPending/TransactionPending.css | 44 + .../TransactionPending/TransactionPending.js | 106 ++ .../components/TransactionPending/index.js | 17 + .../TransactionPendingForm.css | 45 + .../TransactionPendingForm.js | 93 ++ .../TransactionPendingFormConfirm.css | 41 + .../TransactionPendingFormConfirm.js | 133 ++ .../TransactionPendingFormConfirm/index.js | 17 + .../TransactionPendingFormReject.css | 25 + .../TransactionPendingFormReject.js | 93 ++ .../TransactionPendingFormReject/index.js | 17 + .../TransactionPendingForm/index.js | 17 + .../TransactionPendingWeb3.js | 106 ++ .../TransactionPendingWeb3/index.js | 17 + .../TransactionSecondaryDetails.css | 70 ++ .../TransactionSecondaryDetails.js | 173 +++ .../TransactionSecondaryDetails/index.js | 1 + .../components/TxHashLink/TxHashLink.js | 63 + .../Signer/components/TxHashLink/index.js | 17 + .../Signer/components/constants/constants.js | 26 + js/src/views/Signer/components/index.js | 18 + .../views/Signer/components/util/account.js | 25 + js/src/views/Signer/components/util/logger.js | 38 + js/src/views/Signer/components/util/react.js | 21 + .../Signer/components/util/transaction.js | 121 ++ .../components/util/transaction.spec.js | 79 ++ js/src/views/Signer/components/util/util.js | 35 + .../Signer/containers/Embedded/embedded.css | 29 + .../Signer/containers/Embedded/embedded.js | 113 ++ .../views/Signer/containers/Embedded/index.js | 17 + .../containers/RequestsPage/RequestsPage.css | 25 + .../containers/RequestsPage/RequestsPage.js | 158 +++ .../Signer/containers/RequestsPage/index.js | 17 + js/src/views/Signer/index.js | 23 + js/src/views/Signer/signer.css | 24 + js/src/views/Signer/signer.js | 36 + js/src/views/Signer/utils/extension.js | 19 + js/src/views/Signer/utils/utils.js | 19 + js/src/views/Status/actions/app.js | 19 + js/src/views/Status/actions/clipboard.js | 22 + js/src/views/Status/actions/debug.js | 23 + js/src/views/Status/actions/localstorage.js | 20 + js/src/views/Status/actions/logger.js | 24 + js/src/views/Status/actions/mining.js | 24 + js/src/views/Status/actions/modify-mining.js | 23 + js/src/views/Status/actions/rpc.js | 28 + js/src/views/Status/actions/status.js | 29 + .../Animated/AnimateChildren.css | 55 + .../Animated/Animated.js | 28 + .../Animated/children.js | 63 + .../components-compositors/Animated/index.js | 17 + .../components/AutoComplete/AutoComplete.js | 44 + .../AutoComplete/AutoComplete.spec.js | 44 + .../Status/components/AutoComplete/index.js | 17 + js/src/views/Status/components/Box/Box.js | 47 + .../views/Status/components/Box/Box.spec.js | 70 ++ js/src/views/Status/components/Box/index.js | 17 + js/src/views/Status/components/Call/Call.css | 40 + js/src/views/Status/components/Call/Call.js | 69 ++ .../views/Status/components/Call/Call.spec.js | 92 ++ js/src/views/Status/components/Call/index.js | 17 + .../views/Status/components/Calls/Calls.css | 44 + js/src/views/Status/components/Calls/Calls.js | 132 ++ .../Status/components/Calls/Calls.spec.js | 135 +++ js/src/views/Status/components/Calls/index.js | 17 + .../components/CallsToolbar/CallsToolbar.css | 66 + .../components/CallsToolbar/CallsToolbar.js | 132 ++ .../CallsToolbar/CallsToolbar.spec.js | 118 ++ .../Status/components/CallsToolbar/index.js | 17 + .../views/Status/components/Debug/Debug.css | 67 + js/src/views/Status/components/Debug/Debug.js | 114 ++ js/src/views/Status/components/Debug/index.js | 17 + .../EditableValue/EditableValue.css | 74 ++ .../components/EditableValue/EditableValue.js | 192 +++ .../Status/components/EditableValue/index.js | 17 + .../components/JsonEditor/JsonEditor.css | 28 + .../components/JsonEditor/JsonEditor.js | 98 ++ .../Status/components/JsonEditor/index.js | 17 + .../Status/components/Markdown/Markdown.css | 20 + .../Status/components/Markdown/Markdown.js | 58 + .../views/Status/components/Markdown/index.js | 17 + .../MiningSettings/MiningSettings.js | 99 ++ .../MiningSettings/decodeExtraData.js | 33 + .../MiningSettings/decodeExtraData.spec.js | 28 + .../Status/components/MiningSettings/index.js | 17 + .../MiningSettings/numberFromString.js | 25 + .../MiningSettings/numberFromString.spec.js | 36 + .../Status/components/Response/Response.css | 20 + .../Status/components/Response/Response.js | 65 + .../components/Response/Response.spec.js | 47 + .../views/Status/components/Response/index.js | 17 + .../Status/components/RpcCalls/RpcCalls.css | 32 + .../Status/components/RpcCalls/RpcCalls.js | 337 ++++++ .../views/Status/components/RpcCalls/index.js | 17 + .../Status/components/RpcDocs/RpcDocs.css | 35 + .../Status/components/RpcDocs/RpcDocs.js | 104 ++ .../views/Status/components/RpcDocs/index.js | 17 + .../views/Status/components/RpcNav/RpcNav.css | 28 + .../views/Status/components/RpcNav/RpcNav.js | 35 + .../views/Status/components/RpcNav/index.js | 17 + .../ScrollTopButton/ScrollTopButton.css | 41 + .../ScrollTopButton/ScrollTopButton.js | 71 ++ .../components/ScrollTopButton/index.js | 17 + .../Status/components/ScrollTopButton/util.js | 47 + .../views/Status/components/Status/Status.css | 74 ++ .../views/Status/components/Status/Status.js | 145 +++ .../views/Status/components/Status/index.js | 17 + js/src/views/Status/constants/index.js | 17 + .../Status/containers/RpcPage/RpcPage.js | 57 + .../views/Status/containers/RpcPage/index.js | 17 + .../containers/StatusPage/StatusPage.js | 60 + .../Status/containers/StatusPage/index.js | 17 + .../containers/StatusPage/statusPage.css | 18 + js/src/views/Status/data/rpc.json | 1075 +++++++++++++++++ js/src/views/Status/index.js | 17 + js/src/views/Status/middleware/index.js | 25 + .../views/Status/middleware/localstorage.js | 74 ++ .../Status/middleware/localstorage.spec.js | 196 +++ js/src/views/Status/reducers/debug.js | 66 + js/src/views/Status/reducers/index.js | 31 + js/src/views/Status/reducers/logger.js | 32 + js/src/views/Status/reducers/mining.js | 66 + js/src/views/Status/reducers/rpc.js | 64 + js/src/views/Status/reducers/settings.js | 60 + js/src/views/Status/reducers/status.js | 92 ++ js/src/views/Status/status.css | 18 + js/src/views/Status/status.js | 37 + js/src/views/Status/util/error.js | 30 + js/src/views/Status/util/error.spec.js | 109 ++ js/src/views/Status/util/index.js | 38 + js/src/views/Status/util/index.spec.js | 51 + js/src/views/Status/util/react.js | 21 + js/src/views/Status/util/rpc-md.js | 27 + js/src/views/index.js | 47 + js/test/babel.js | 17 + js/test/e2e/ethapi.js | 33 + js/test/mocha.config.js | 45 + js/test/mocha.opts | 3 + js/test/mockRpc.js | 95 ++ js/test/types.js | 42 + js/webpack.config.js | 222 ++++ js/webpack.vendor.js | 84 ++ 969 files changed, 57315 insertions(+) create mode 100644 js/.babelrc create mode 100644 js/.codeclimate.yml create mode 100644 js/.editorconfig create mode 100644 js/.eslintrc.json create mode 100644 js/.gitignore create mode 100644 js/.istanbul.yml create mode 100644 js/.npmignore create mode 100644 js/LICENSE create mode 100644 js/README.md create mode 100755 js/assets/fonts/Roboto/LICENSE.txt create mode 100644 js/assets/fonts/Roboto/font.css create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Black.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-BlackItalic.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Bold.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-BoldItalic.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Italic.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Light.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-LightItalic.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Medium.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-MediumItalic.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Regular.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-Thin.ttf create mode 100755 js/assets/fonts/Roboto/ttf/Roboto-ThinItalic.ttf create mode 100644 js/assets/fonts/Roboto/v15/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100644 js/assets/fonts/Roboto/v15/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100644 js/assets/fonts/Roboto/v15/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100644 js/assets/fonts/Roboto/v15/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 create mode 100644 js/assets/fonts/Roboto/v15/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100644 js/assets/fonts/Roboto/v15/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100644 js/assets/fonts/Roboto/v15/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 create mode 100755 js/assets/fonts/RobotoMono/LICENSE.txt create mode 100644 js/assets/fonts/RobotoMono/font.css create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Bold.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-BoldItalic.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Italic.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Light.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-LightItalic.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Medium.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-MediumItalic.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Regular.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-Thin.ttf create mode 100755 js/assets/fonts/RobotoMono/ttf/RobotoMono-ThinItalic.ttf create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz-pRBTtN4E2_qSPBnw6AgMc.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz0ExlR2MysFCBK8OirNw2kM.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz2MSHb9EAJwuSzGfuRChQzQ.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz2dsm03krrxlabhmVQFB99s.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz9Dnm4qiMZlH5rhYv_7LI2Y.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz9TIkQYohD4BpHvJ3NvbHoA.woff2 create mode 100644 js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59FzyJ0caWjaSBdV-xZbEgst_k.woff2 create mode 100644 js/assets/images/contracts/augur-68x68.png create mode 100644 js/assets/images/contracts/beer-64x64.png create mode 100644 js/assets/images/contracts/beer.png create mode 100644 js/assets/images/contracts/dgd-64x64.png create mode 100644 js/assets/images/contracts/dgd.png create mode 100644 js/assets/images/contracts/dgx-64x64.png create mode 100644 js/assets/images/contracts/dgx.png create mode 100644 js/assets/images/contracts/ethereum-black-64x64.png create mode 100644 js/assets/images/contracts/ethereum-black.png create mode 100644 js/assets/images/contracts/ethereum-white.png create mode 100644 js/assets/images/contracts/firstblood-64x64.png create mode 100644 js/assets/images/contracts/firstblood.png create mode 100644 js/assets/images/contracts/gavcoin-64x64.png create mode 100644 js/assets/images/contracts/gavcoin.png create mode 100644 js/assets/images/contracts/maker.svg create mode 100644 js/assets/images/contracts/pluton.svg create mode 100644 js/assets/images/contracts/singular.svg create mode 100644 js/assets/images/contracts/unicorn-64x64.png create mode 100644 js/assets/images/contracts/unicorn.png create mode 100644 js/assets/images/contracts/unknown-64x64.png create mode 100644 js/assets/images/contracts/unknown.png create mode 100644 js/assets/images/dapps/blocks-350.jpg create mode 100644 js/assets/images/dapps/coins-64x64.jpg create mode 100644 js/assets/images/dapps/coins.jpg create mode 100644 js/assets/images/dapps/hex-64x64.jpg create mode 100644 js/assets/images/dapps/hex.jpg create mode 100644 js/assets/images/dapps/interlock-64x64.png create mode 100644 js/assets/images/dapps/interlock.png create mode 100644 js/assets/images/dapps/link-64x64.jpg create mode 100644 js/assets/images/dapps/link.jpg create mode 100644 js/assets/images/dapps/register-64x64.jpg create mode 100644 js/assets/images/dapps/register.jpg create mode 100644 js/assets/images/dapps/signature.png create mode 100644 js/assets/images/ethcore-block-blue.png create mode 100644 js/assets/images/ethcore-block.png create mode 100644 js/assets/images/ethcore-logo-white-square.png create mode 100644 js/assets/images/parity-x56.png create mode 100644 js/assets/images/parity.xcf create mode 100644 js/assets/images/paritybar.png create mode 100644 js/assets/images/shapeshift-btn.png create mode 100644 js/assets/images/shapeshift-logo.png create mode 100644 js/build-server.js create mode 100644 js/package.json create mode 100755 js/scripts/build.sh create mode 100755 js/scripts/install-deps.sh create mode 100755 js/scripts/lint.sh create mode 100755 js/scripts/release.sh create mode 100755 js/scripts/test.sh create mode 100755 js/scripts/update-precompiled.sh create mode 100644 js/src/3rdparty/etherscan/account.js create mode 100644 js/src/3rdparty/etherscan/account.spec.js create mode 100644 js/src/3rdparty/etherscan/call.js create mode 100644 js/src/3rdparty/etherscan/index.js create mode 100644 js/src/3rdparty/etherscan/stats.js create mode 100644 js/src/3rdparty/etherscan/stats.spec.js create mode 100644 js/src/3rdparty/shapeshift/helpers.spec.js create mode 100644 js/src/3rdparty/shapeshift/index.js create mode 100644 js/src/3rdparty/shapeshift/rpc.js create mode 100644 js/src/3rdparty/shapeshift/rpc.spec.js create mode 100644 js/src/3rdparty/shapeshift/shapeshift.js create mode 100644 js/src/3rdparty/shapeshift/shapeshift.spec.js create mode 100644 js/src/abi/README.md create mode 100644 js/src/abi/abi.js create mode 100644 js/src/abi/decoder/bytesTaken.js create mode 100644 js/src/abi/decoder/bytesTaken.spec.js create mode 100644 js/src/abi/decoder/decodeResult.js create mode 100644 js/src/abi/decoder/decodeResult.spec.js create mode 100644 js/src/abi/decoder/decoder.js create mode 100644 js/src/abi/decoder/decoder.spec.js create mode 100644 js/src/abi/decoder/index.js create mode 100644 js/src/abi/encoder/encoder.js create mode 100644 js/src/abi/encoder/encoder.spec.js create mode 100644 js/src/abi/encoder/index.js create mode 100644 js/src/abi/encoder/mediate.js create mode 100644 js/src/abi/encoder/mediate.spec.js create mode 100644 js/src/abi/index.js create mode 100644 js/src/abi/spec/constructor.js create mode 100644 js/src/abi/spec/constructor.spec.js create mode 100644 js/src/abi/spec/event/decodedLog.js create mode 100644 js/src/abi/spec/event/decodedLog.spec.js create mode 100644 js/src/abi/spec/event/decodedLogParam.js create mode 100644 js/src/abi/spec/event/decodedLogParam.spec.js create mode 100644 js/src/abi/spec/event/event.js create mode 100644 js/src/abi/spec/event/event.spec.js create mode 100644 js/src/abi/spec/event/eventParam.js create mode 100644 js/src/abi/spec/event/eventParam.spec.js create mode 100644 js/src/abi/spec/event/index.js create mode 100644 js/src/abi/spec/function.js create mode 100644 js/src/abi/spec/function.spec.js create mode 100644 js/src/abi/spec/index.js create mode 100644 js/src/abi/spec/interface.js create mode 100644 js/src/abi/spec/interface.spec.js create mode 100644 js/src/abi/spec/param.js create mode 100644 js/src/abi/spec/param.spec.js create mode 100644 js/src/abi/spec/paramType/format.js create mode 100644 js/src/abi/spec/paramType/format.spec.js create mode 100644 js/src/abi/spec/paramType/index.js create mode 100644 js/src/abi/spec/paramType/paramType.js create mode 100644 js/src/abi/spec/paramType/paramType.spec.js create mode 100644 js/src/abi/spec/paramType/types.js create mode 100644 js/src/abi/token/index.js create mode 100644 js/src/abi/token/token.js create mode 100644 js/src/abi/token/token.spec.js create mode 100644 js/src/abi/util/address.js create mode 100644 js/src/abi/util/address.spec.js create mode 100644 js/src/abi/util/pad.js create mode 100644 js/src/abi/util/pad.spec.js create mode 100644 js/src/abi/util/signature.js create mode 100644 js/src/abi/util/signature.spec.js create mode 100644 js/src/abi/util/slice.js create mode 100644 js/src/abi/util/slice.spec.js create mode 100644 js/src/abi/util/sliceAs.js create mode 100644 js/src/abi/util/sliceAs.spec.js create mode 100644 js/src/abi/util/types.js create mode 100644 js/src/abi/util/types.spec.js create mode 100644 js/src/api/README.md create mode 100644 js/src/api/api.js create mode 100644 js/src/api/api.spec.js create mode 100644 js/src/api/contract/contract.js create mode 100644 js/src/api/contract/contract.spec.js create mode 100644 js/src/api/contract/index.js create mode 100644 js/src/api/format/input.js create mode 100644 js/src/api/format/input.spec.js create mode 100644 js/src/api/format/output.js create mode 100644 js/src/api/format/output.spec.js create mode 100644 js/src/api/index.js create mode 100644 js/src/api/rpc/db/db.js create mode 100644 js/src/api/rpc/db/db.spec.js create mode 100644 js/src/api/rpc/db/index.js create mode 100644 js/src/api/rpc/eth/eth.e2e.js create mode 100644 js/src/api/rpc/eth/eth.js create mode 100644 js/src/api/rpc/eth/eth.spec.js create mode 100644 js/src/api/rpc/eth/index.js create mode 100644 js/src/api/rpc/ethcore/ethcore.e2e.js create mode 100644 js/src/api/rpc/ethcore/ethcore.js create mode 100644 js/src/api/rpc/ethcore/ethcore.spec.js create mode 100644 js/src/api/rpc/ethcore/index.js create mode 100644 js/src/api/rpc/index.js create mode 100644 js/src/api/rpc/net/index.js create mode 100644 js/src/api/rpc/net/net.e2e.js create mode 100644 js/src/api/rpc/net/net.js create mode 100644 js/src/api/rpc/net/net.spec.js create mode 100644 js/src/api/rpc/personal/index.js create mode 100644 js/src/api/rpc/personal/personal.e2e.js create mode 100644 js/src/api/rpc/personal/personal.js create mode 100644 js/src/api/rpc/personal/personal.spec.js create mode 100644 js/src/api/rpc/shh/index.js create mode 100644 js/src/api/rpc/shh/shh.js create mode 100644 js/src/api/rpc/trace/index.js create mode 100644 js/src/api/rpc/trace/trace.e2e.js create mode 100644 js/src/api/rpc/trace/trace.js create mode 100644 js/src/api/rpc/trace/trace.spec.js create mode 100644 js/src/api/rpc/web3/index.js create mode 100644 js/src/api/rpc/web3/web3.e2e.js create mode 100644 js/src/api/rpc/web3/web3.js create mode 100644 js/src/api/rpc/web3/web3.spec.js create mode 100644 js/src/api/subscriptions/eth.js create mode 100644 js/src/api/subscriptions/eth.spec.js create mode 100644 js/src/api/subscriptions/index.js create mode 100644 js/src/api/subscriptions/logging.js create mode 100644 js/src/api/subscriptions/logging.spec.js create mode 100644 js/src/api/subscriptions/manager.js create mode 100644 js/src/api/subscriptions/manager.spec.js create mode 100644 js/src/api/subscriptions/personal.js create mode 100644 js/src/api/subscriptions/personal.spec.js create mode 100644 js/src/api/subscriptions/signer.js create mode 100644 js/src/api/transport/http/http.e2e.js create mode 100644 js/src/api/transport/http/http.js create mode 100644 js/src/api/transport/http/http.spec.js create mode 100644 js/src/api/transport/http/index.js create mode 100644 js/src/api/transport/index.js create mode 100644 js/src/api/transport/jsonRpcBase.js create mode 100644 js/src/api/transport/jsonRpcBase.spec.js create mode 100644 js/src/api/transport/ws/index.js create mode 100644 js/src/api/transport/ws/ws.e2e.js create mode 100644 js/src/api/transport/ws/ws.js create mode 100644 js/src/api/transport/ws/ws.spec.js create mode 100644 js/src/api/util/decode.js create mode 100644 js/src/api/util/decode.spec.js create mode 100644 js/src/api/util/format.js create mode 100644 js/src/api/util/format.spec.js create mode 100644 js/src/api/util/identity.js create mode 100644 js/src/api/util/index.js create mode 100644 js/src/api/util/sha3.js create mode 100644 js/src/api/util/sha3.spec.js create mode 100644 js/src/api/util/types.js create mode 100644 js/src/api/util/types.spec.js create mode 100644 js/src/api/util/wei.js create mode 100644 js/src/api/util/wei.spec.js create mode 100644 js/src/contracts/abi/basiccoin.json create mode 100644 js/src/contracts/abi/basiccoinmanager.json create mode 100644 js/src/contracts/abi/dappreg.json create mode 100644 js/src/contracts/abi/eip20.json create mode 100644 js/src/contracts/abi/gavcoin.json create mode 100644 js/src/contracts/abi/githubhint.json create mode 100644 js/src/contracts/abi/index.js create mode 100644 js/src/contracts/abi/owned.json create mode 100644 js/src/contracts/abi/registry.json create mode 100644 js/src/contracts/abi/signaturereg.json create mode 100644 js/src/contracts/abi/tokenreg.json create mode 100644 js/src/contracts/contracts.js create mode 100644 js/src/contracts/dappreg.js create mode 100644 js/src/contracts/index.js create mode 100644 js/src/contracts/registry.js create mode 100644 js/src/contracts/signaturereg.js create mode 100644 js/src/contracts/tokenreg.js create mode 100644 js/src/dapps/basiccoin.html create mode 100644 js/src/dapps/basiccoin.js create mode 100644 js/src/dapps/basiccoin/AddressSelect/addressSelect.css create mode 100644 js/src/dapps/basiccoin/AddressSelect/addressSelect.js create mode 100644 js/src/dapps/basiccoin/AddressSelect/index.js create mode 100644 js/src/dapps/basiccoin/Application/Header/header.css create mode 100644 js/src/dapps/basiccoin/Application/Header/header.js create mode 100644 js/src/dapps/basiccoin/Application/Header/index.js create mode 100644 js/src/dapps/basiccoin/Application/Loading/index.js create mode 100644 js/src/dapps/basiccoin/Application/Loading/loading.css create mode 100644 js/src/dapps/basiccoin/Application/Loading/loading.js create mode 100644 js/src/dapps/basiccoin/Application/application.css create mode 100644 js/src/dapps/basiccoin/Application/application.js create mode 100644 js/src/dapps/basiccoin/Application/index.js create mode 100644 js/src/dapps/basiccoin/Application/pages.js create mode 100644 js/src/dapps/basiccoin/Container/container.css create mode 100644 js/src/dapps/basiccoin/Container/container.js create mode 100644 js/src/dapps/basiccoin/Container/index.js create mode 100644 js/src/dapps/basiccoin/Deploy/Deployment/deployment.css create mode 100644 js/src/dapps/basiccoin/Deploy/Deployment/deployment.js create mode 100644 js/src/dapps/basiccoin/Deploy/Deployment/index.js create mode 100644 js/src/dapps/basiccoin/Deploy/Event/event.css create mode 100644 js/src/dapps/basiccoin/Deploy/Event/event.js create mode 100644 js/src/dapps/basiccoin/Deploy/Event/index.js create mode 100644 js/src/dapps/basiccoin/Deploy/Events/events.css create mode 100644 js/src/dapps/basiccoin/Deploy/Events/events.js create mode 100644 js/src/dapps/basiccoin/Deploy/Events/index.js create mode 100644 js/src/dapps/basiccoin/Deploy/deploy.js create mode 100644 js/src/dapps/basiccoin/Deploy/index.js create mode 100644 js/src/dapps/basiccoin/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/basiccoin/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/basiccoin/IdentityIcon/index.js create mode 100644 js/src/dapps/basiccoin/Overview/Owner/index.js create mode 100644 js/src/dapps/basiccoin/Overview/Owner/owner.css create mode 100644 js/src/dapps/basiccoin/Overview/Owner/owner.js create mode 100644 js/src/dapps/basiccoin/Overview/Token/index.js create mode 100644 js/src/dapps/basiccoin/Overview/Token/token.css create mode 100644 js/src/dapps/basiccoin/Overview/Token/token.js create mode 100644 js/src/dapps/basiccoin/Overview/index.js create mode 100644 js/src/dapps/basiccoin/Overview/overview.css create mode 100644 js/src/dapps/basiccoin/Overview/overview.js create mode 100644 js/src/dapps/basiccoin/Transfer/Event/event.js create mode 100644 js/src/dapps/basiccoin/Transfer/Event/index.js create mode 100644 js/src/dapps/basiccoin/Transfer/Events/events.js create mode 100644 js/src/dapps/basiccoin/Transfer/Events/index.js create mode 100644 js/src/dapps/basiccoin/Transfer/Send/index.js create mode 100644 js/src/dapps/basiccoin/Transfer/Send/send.css create mode 100644 js/src/dapps/basiccoin/Transfer/Send/send.js create mode 100644 js/src/dapps/basiccoin/Transfer/index.js create mode 100644 js/src/dapps/basiccoin/Transfer/transfer.js create mode 100644 js/src/dapps/basiccoin/_form.css create mode 100644 js/src/dapps/basiccoin/_status.css create mode 100644 js/src/dapps/basiccoin/background.jpg create mode 100644 js/src/dapps/basiccoin/parity.js create mode 100644 js/src/dapps/basiccoin/services.js create mode 100644 js/src/dapps/gavcoin.html create mode 100644 js/src/dapps/gavcoin.js create mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css create mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js create mode 100644 js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js create mode 100644 js/src/dapps/gavcoin/AccountSelector/accountSelector.js create mode 100644 js/src/dapps/gavcoin/AccountSelector/index.js create mode 100644 js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css create mode 100644 js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js create mode 100644 js/src/dapps/gavcoin/AccountSelectorText/index.js create mode 100644 js/src/dapps/gavcoin/Accounts/accounts.css create mode 100644 js/src/dapps/gavcoin/Accounts/accounts.js create mode 100644 js/src/dapps/gavcoin/Accounts/index.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionRefund/index.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js create mode 100644 js/src/dapps/gavcoin/Actions/ActionTransfer/index.js create mode 100644 js/src/dapps/gavcoin/Actions/StepComplete/index.js create mode 100644 js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js create mode 100644 js/src/dapps/gavcoin/Actions/actions.css create mode 100644 js/src/dapps/gavcoin/Actions/actions.js create mode 100644 js/src/dapps/gavcoin/Actions/index.js create mode 100644 js/src/dapps/gavcoin/Actions/validation.js create mode 100644 js/src/dapps/gavcoin/Application/application.js create mode 100644 js/src/dapps/gavcoin/Application/index.js create mode 100644 js/src/dapps/gavcoin/Events/Event/event.js create mode 100644 js/src/dapps/gavcoin/Events/Event/index.js create mode 100644 js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js create mode 100644 js/src/dapps/gavcoin/Events/EventBuyin/index.js create mode 100644 js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js create mode 100644 js/src/dapps/gavcoin/Events/EventNewTranch/index.js create mode 100644 js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js create mode 100644 js/src/dapps/gavcoin/Events/EventRefund/index.js create mode 100644 js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js create mode 100644 js/src/dapps/gavcoin/Events/EventTransfer/index.js create mode 100644 js/src/dapps/gavcoin/Events/events.css create mode 100644 js/src/dapps/gavcoin/Events/events.js create mode 100644 js/src/dapps/gavcoin/Events/index.js create mode 100644 js/src/dapps/gavcoin/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/gavcoin/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/gavcoin/IdentityIcon/index.js create mode 100644 js/src/dapps/gavcoin/Loading/index.js create mode 100644 js/src/dapps/gavcoin/Loading/loading.css create mode 100644 js/src/dapps/gavcoin/Loading/loading.js create mode 100644 js/src/dapps/gavcoin/Status/index.js create mode 100644 js/src/dapps/gavcoin/Status/status.css create mode 100644 js/src/dapps/gavcoin/Status/status.js create mode 100644 js/src/dapps/gavcoin/format/index.js create mode 100644 js/src/dapps/gavcoin/parity.js create mode 100644 js/src/dapps/githubhint.html create mode 100644 js/src/dapps/githubhint.js create mode 100644 js/src/dapps/githubhint/Application/application.css create mode 100644 js/src/dapps/githubhint/Application/application.js create mode 100644 js/src/dapps/githubhint/Application/index.js create mode 100644 js/src/dapps/githubhint/Button/button.css create mode 100644 js/src/dapps/githubhint/Button/button.js create mode 100644 js/src/dapps/githubhint/Button/index.js create mode 100644 js/src/dapps/githubhint/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/githubhint/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/githubhint/IdentityIcon/index.js create mode 100644 js/src/dapps/githubhint/Loading/index.js create mode 100644 js/src/dapps/githubhint/Loading/loading.css create mode 100644 js/src/dapps/githubhint/Loading/loading.js create mode 100644 js/src/dapps/githubhint/parity.js create mode 100644 js/src/dapps/githubhint/services.js create mode 100644 js/src/dapps/registry.html create mode 100644 js/src/dapps/registry.js create mode 100644 js/src/dapps/registry/Accounts/accounts.css create mode 100644 js/src/dapps/registry/Accounts/accounts.js create mode 100644 js/src/dapps/registry/Accounts/actions.js create mode 100644 js/src/dapps/registry/Accounts/index.js create mode 100644 js/src/dapps/registry/Application/application.css create mode 100644 js/src/dapps/registry/Application/application.js create mode 100644 js/src/dapps/registry/Application/index.js create mode 100644 js/src/dapps/registry/Container.js create mode 100644 js/src/dapps/registry/Events/actions.js create mode 100644 js/src/dapps/registry/Events/events.css create mode 100644 js/src/dapps/registry/Events/events.js create mode 100644 js/src/dapps/registry/Events/index.js create mode 100644 js/src/dapps/registry/Events/reducers.js create mode 100644 js/src/dapps/registry/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/registry/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/registry/IdentityIcon/index.js create mode 100644 js/src/dapps/registry/Lookup/actions.js create mode 100644 js/src/dapps/registry/Lookup/index.js create mode 100644 js/src/dapps/registry/Lookup/lookup.css create mode 100644 js/src/dapps/registry/Lookup/lookup.js create mode 100644 js/src/dapps/registry/Lookup/reducers.js create mode 100644 js/src/dapps/registry/Names/actions.js create mode 100644 js/src/dapps/registry/Names/index.js create mode 100644 js/src/dapps/registry/Names/names.css create mode 100644 js/src/dapps/registry/Names/names.js create mode 100644 js/src/dapps/registry/Names/reducers.js create mode 100644 js/src/dapps/registry/Records/actions.js create mode 100644 js/src/dapps/registry/Records/index.js create mode 100644 js/src/dapps/registry/Records/records.css create mode 100644 js/src/dapps/registry/Records/records.js create mode 100644 js/src/dapps/registry/Records/reducers.js create mode 100644 js/src/dapps/registry/actions.js create mode 100644 js/src/dapps/registry/addresses/accounts-reducer.js create mode 100644 js/src/dapps/registry/addresses/actions.js create mode 100644 js/src/dapps/registry/addresses/contacts-reducer.js create mode 100644 js/src/dapps/registry/parity.js create mode 100644 js/src/dapps/registry/reducers.js create mode 100644 js/src/dapps/registry/store.js create mode 100644 js/src/dapps/registry/ui/address.js create mode 100644 js/src/dapps/registry/ui/hash.js create mode 100644 js/src/dapps/registry/ui/image.js create mode 100644 js/src/dapps/registry/ui/record-type-select.js create mode 100644 js/src/dapps/signaturereg.html create mode 100644 js/src/dapps/signaturereg.js create mode 100644 js/src/dapps/signaturereg/Application/application.css create mode 100644 js/src/dapps/signaturereg/Application/application.js create mode 100644 js/src/dapps/signaturereg/Application/index.js create mode 100644 js/src/dapps/signaturereg/Button/button.css create mode 100644 js/src/dapps/signaturereg/Button/button.js create mode 100644 js/src/dapps/signaturereg/Button/index.js create mode 100644 js/src/dapps/signaturereg/Events/events.css create mode 100644 js/src/dapps/signaturereg/Events/events.js create mode 100644 js/src/dapps/signaturereg/Events/index.js create mode 100644 js/src/dapps/signaturereg/Header/header.css create mode 100644 js/src/dapps/signaturereg/Header/header.js create mode 100644 js/src/dapps/signaturereg/Header/index.js create mode 100644 js/src/dapps/signaturereg/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/signaturereg/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/signaturereg/IdentityIcon/index.js create mode 100644 js/src/dapps/signaturereg/Import/import.css create mode 100644 js/src/dapps/signaturereg/Import/import.js create mode 100644 js/src/dapps/signaturereg/Import/index.js create mode 100644 js/src/dapps/signaturereg/Loading/index.js create mode 100644 js/src/dapps/signaturereg/Loading/loading.css create mode 100644 js/src/dapps/signaturereg/Loading/loading.js create mode 100644 js/src/dapps/signaturereg/format.js create mode 100644 js/src/dapps/signaturereg/parity.js create mode 100644 js/src/dapps/signaturereg/services.js create mode 100644 js/src/dapps/style.css create mode 100644 js/src/dapps/tokenreg.html create mode 100644 js/src/dapps/tokenreg.js create mode 100644 js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.css create mode 100644 js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.js create mode 100644 js/src/dapps/tokenreg/Accounts/AccountSelector/container.js create mode 100644 js/src/dapps/tokenreg/Accounts/AccountSelector/index.js create mode 100644 js/src/dapps/tokenreg/Accounts/actions.js create mode 100644 js/src/dapps/tokenreg/Accounts/reducer.js create mode 100644 js/src/dapps/tokenreg/Actions/Query/index.js create mode 100644 js/src/dapps/tokenreg/Actions/Query/query.js create mode 100644 js/src/dapps/tokenreg/Actions/Register/index.js create mode 100644 js/src/dapps/tokenreg/Actions/Register/register.js create mode 100644 js/src/dapps/tokenreg/Actions/actions.css create mode 100644 js/src/dapps/tokenreg/Actions/actions.js create mode 100644 js/src/dapps/tokenreg/Actions/component.js create mode 100644 js/src/dapps/tokenreg/Actions/container.js create mode 100644 js/src/dapps/tokenreg/Actions/index.js create mode 100644 js/src/dapps/tokenreg/Actions/reducer.js create mode 100644 js/src/dapps/tokenreg/Application/application.css create mode 100644 js/src/dapps/tokenreg/Application/application.js create mode 100644 js/src/dapps/tokenreg/Application/index.js create mode 100644 js/src/dapps/tokenreg/Chip/chip.css create mode 100644 js/src/dapps/tokenreg/Chip/chip.js create mode 100644 js/src/dapps/tokenreg/Chip/index.js create mode 100644 js/src/dapps/tokenreg/Container.js create mode 100644 js/src/dapps/tokenreg/IdentityIcon/identityIcon.css create mode 100644 js/src/dapps/tokenreg/IdentityIcon/identityIcon.js create mode 100644 js/src/dapps/tokenreg/IdentityIcon/index.js create mode 100644 js/src/dapps/tokenreg/Inputs/Text/container.js create mode 100644 js/src/dapps/tokenreg/Inputs/Text/index.js create mode 100644 js/src/dapps/tokenreg/Inputs/Text/input-text.js create mode 100644 js/src/dapps/tokenreg/Inputs/inputs.css create mode 100644 js/src/dapps/tokenreg/Inputs/validation.js create mode 100644 js/src/dapps/tokenreg/Loading/index.js create mode 100644 js/src/dapps/tokenreg/Loading/loading.css create mode 100644 js/src/dapps/tokenreg/Loading/loading.js create mode 100644 js/src/dapps/tokenreg/Status/actions.js create mode 100644 js/src/dapps/tokenreg/Status/index.js create mode 100644 js/src/dapps/tokenreg/Status/reducer.js create mode 100644 js/src/dapps/tokenreg/Status/status.css create mode 100644 js/src/dapps/tokenreg/Status/status.js create mode 100644 js/src/dapps/tokenreg/Tokens/Token/add-meta.js create mode 100644 js/src/dapps/tokenreg/Tokens/Token/index.js create mode 100644 js/src/dapps/tokenreg/Tokens/Token/token.css create mode 100644 js/src/dapps/tokenreg/Tokens/Token/token.js create mode 100644 js/src/dapps/tokenreg/Tokens/actions.js create mode 100644 js/src/dapps/tokenreg/Tokens/container.js create mode 100644 js/src/dapps/tokenreg/Tokens/index.js create mode 100644 js/src/dapps/tokenreg/Tokens/reducer.js create mode 100644 js/src/dapps/tokenreg/Tokens/tokens.css create mode 100644 js/src/dapps/tokenreg/Tokens/tokens.js create mode 100644 js/src/dapps/tokenreg/constants.js create mode 100644 js/src/dapps/tokenreg/parity.js create mode 100644 js/src/dapps/tokenreg/reducers.js create mode 100644 js/src/dapps/tokenreg/store.js create mode 100644 js/src/dapps/tokenreg/utils.js create mode 100644 js/src/environment/empty.js create mode 100644 js/src/environment/index.js create mode 100644 js/src/environment/integration-tests/fake-backend.js create mode 100644 js/src/environment/integration-tests/index.js create mode 100644 js/src/environment/perf-debug/index.js create mode 100644 js/src/environment/perf-debug/why-update.js create mode 100644 js/src/environment/tests/index.js create mode 100644 js/src/environment/tests/test-utils.js create mode 100644 js/src/error_pages.css create mode 100644 js/src/images/dapps/blocks-350.png create mode 100644 js/src/index.html create mode 100644 js/src/index.js create mode 100644 js/src/jsonrpc/README.md create mode 100644 js/src/jsonrpc/generator/build-json.js create mode 100644 js/src/jsonrpc/generator/build-markdown.js create mode 100644 js/src/jsonrpc/index.js create mode 100644 js/src/jsonrpc/index.spec.js create mode 100644 js/src/jsonrpc/interfaces/db.js create mode 100644 js/src/jsonrpc/interfaces/eth.js create mode 100644 js/src/jsonrpc/interfaces/ethcore.js create mode 100644 js/src/jsonrpc/interfaces/net.js create mode 100644 js/src/jsonrpc/interfaces/personal.js create mode 100644 js/src/jsonrpc/interfaces/shh.js create mode 100644 js/src/jsonrpc/interfaces/trace.js create mode 100644 js/src/jsonrpc/interfaces/web3.js create mode 100644 js/src/jsonrpc/rollup.config.js create mode 100644 js/src/jsonrpc/types.js create mode 100644 js/src/modals/AddAddress/addAddress.js create mode 100644 js/src/modals/AddAddress/index.js create mode 100644 js/src/modals/AddContract/addContract.js create mode 100644 js/src/modals/AddContract/index.js create mode 100644 js/src/modals/CreateAccount/AccountDetails/accountDetails.js create mode 100644 js/src/modals/CreateAccount/AccountDetails/index.js create mode 100644 js/src/modals/CreateAccount/AccountDetailsGeth/accountDetailsGeth.css create mode 100644 js/src/modals/CreateAccount/AccountDetailsGeth/accountDetailsGeth.js create mode 100644 js/src/modals/CreateAccount/AccountDetailsGeth/index.js create mode 100644 js/src/modals/CreateAccount/CreationType/creationType.js create mode 100644 js/src/modals/CreateAccount/CreationType/index.js create mode 100644 js/src/modals/CreateAccount/NewAccount/index.js create mode 100644 js/src/modals/CreateAccount/NewAccount/newAccount.js create mode 100644 js/src/modals/CreateAccount/NewGeth/index.js create mode 100644 js/src/modals/CreateAccount/NewGeth/newGeth.css create mode 100644 js/src/modals/CreateAccount/NewGeth/newGeth.js create mode 100644 js/src/modals/CreateAccount/NewImport/index.js create mode 100644 js/src/modals/CreateAccount/NewImport/newImport.js create mode 100644 js/src/modals/CreateAccount/RecoveryPhrase/index.js create mode 100644 js/src/modals/CreateAccount/RecoveryPhrase/recoveryPhrase.js create mode 100644 js/src/modals/CreateAccount/createAccount.css create mode 100644 js/src/modals/CreateAccount/createAccount.js create mode 100644 js/src/modals/CreateAccount/index.js create mode 100644 js/src/modals/DeployContract/DetailsStep/detailsStep.js create mode 100644 js/src/modals/DeployContract/DetailsStep/index.js create mode 100644 js/src/modals/DeployContract/ErrorStep/errorStep.js create mode 100644 js/src/modals/DeployContract/ErrorStep/index.js create mode 100644 js/src/modals/DeployContract/deployContract.css create mode 100644 js/src/modals/DeployContract/deployContract.js create mode 100644 js/src/modals/DeployContract/index.js create mode 100644 js/src/modals/EditMeta/editMeta.js create mode 100644 js/src/modals/EditMeta/index.js create mode 100644 js/src/modals/ExecuteContract/DetailsStep/detailsStep.js create mode 100644 js/src/modals/ExecuteContract/DetailsStep/index.js create mode 100644 js/src/modals/ExecuteContract/executeContract.css create mode 100644 js/src/modals/ExecuteContract/executeContract.js create mode 100644 js/src/modals/ExecuteContract/index.js create mode 100644 js/src/modals/FirstRun/Completed/completed.js create mode 100644 js/src/modals/FirstRun/Completed/index.js create mode 100644 js/src/modals/FirstRun/Welcome/index.js create mode 100644 js/src/modals/FirstRun/Welcome/welcome.js create mode 100644 js/src/modals/FirstRun/firstRun.js create mode 100644 js/src/modals/FirstRun/index.js create mode 100644 js/src/modals/Shapeshift/AwaitingDepositStep/awaitingDepositStep.js create mode 100644 js/src/modals/Shapeshift/AwaitingDepositStep/index.js create mode 100644 js/src/modals/Shapeshift/AwaitingExchangeStep/awaitingExchangeStep.js create mode 100644 js/src/modals/Shapeshift/AwaitingExchangeStep/index.js create mode 100644 js/src/modals/Shapeshift/CompletedStep/completedStep.js create mode 100644 js/src/modals/Shapeshift/CompletedStep/index.js create mode 100644 js/src/modals/Shapeshift/ErrorStep/errorStep.js create mode 100644 js/src/modals/Shapeshift/ErrorStep/index.js create mode 100644 js/src/modals/Shapeshift/OptionsStep/index.js create mode 100644 js/src/modals/Shapeshift/OptionsStep/optionsStep.css create mode 100644 js/src/modals/Shapeshift/OptionsStep/optionsStep.js create mode 100644 js/src/modals/Shapeshift/Price/index.js create mode 100644 js/src/modals/Shapeshift/Price/price.js create mode 100644 js/src/modals/Shapeshift/Value/index.js create mode 100644 js/src/modals/Shapeshift/Value/value.css create mode 100644 js/src/modals/Shapeshift/Value/value.js create mode 100644 js/src/modals/Shapeshift/index.js create mode 100644 js/src/modals/Shapeshift/shapeshift.css create mode 100644 js/src/modals/Shapeshift/shapeshift.js create mode 100644 js/src/modals/Transfer/Details/details.js create mode 100644 js/src/modals/Transfer/Details/index.js create mode 100644 js/src/modals/Transfer/Extras/extras.js create mode 100644 js/src/modals/Transfer/Extras/index.js create mode 100644 js/src/modals/Transfer/errors.js create mode 100644 js/src/modals/Transfer/index.js create mode 100644 js/src/modals/Transfer/transfer.css create mode 100644 js/src/modals/Transfer/transfer.js create mode 100644 js/src/modals/index.js create mode 100644 js/src/parity.js create mode 100644 js/src/redux/actions.js create mode 100644 js/src/redux/index.js create mode 100644 js/src/redux/middleware.js create mode 100644 js/src/redux/providers/balances.js create mode 100644 js/src/redux/providers/balancesActions.js create mode 100644 js/src/redux/providers/balancesReducer.js create mode 100644 js/src/redux/providers/imagesActions.js create mode 100644 js/src/redux/providers/imagesReducer.js create mode 100644 js/src/redux/providers/index.js create mode 100644 js/src/redux/providers/personal.js create mode 100644 js/src/redux/providers/personalActions.js create mode 100644 js/src/redux/providers/personalReducer.js create mode 100644 js/src/redux/providers/signer.js create mode 100644 js/src/redux/providers/signerActions.js create mode 100644 js/src/redux/providers/signerMiddleware.js create mode 100644 js/src/redux/providers/signerReducer.js create mode 100644 js/src/redux/providers/status.js create mode 100644 js/src/redux/providers/statusActions.js create mode 100644 js/src/redux/providers/statusReducer.js create mode 100644 js/src/redux/reducers.js create mode 100644 js/src/redux/store.js create mode 100644 js/src/redux/util.js create mode 100644 js/src/reset.css create mode 100644 js/src/secureApi.js create mode 100644 js/src/ui/Actionbar/actionbar.css create mode 100644 js/src/ui/Actionbar/actionbar.js create mode 100644 js/src/ui/Actionbar/index.js create mode 100644 js/src/ui/Badge/badge.css create mode 100644 js/src/ui/Badge/badge.js create mode 100644 js/src/ui/Badge/index.js create mode 100644 js/src/ui/Balance/balance.css create mode 100644 js/src/ui/Balance/balance.js create mode 100644 js/src/ui/Balance/index.js create mode 100644 js/src/ui/Button/button.js create mode 100644 js/src/ui/Button/index.js create mode 100644 js/src/ui/ConfirmDialog/confirmDialog.css create mode 100644 js/src/ui/ConfirmDialog/confirmDialog.js create mode 100644 js/src/ui/ConfirmDialog/index.js create mode 100644 js/src/ui/Container/Title/index.js create mode 100644 js/src/ui/Container/Title/title.css create mode 100644 js/src/ui/Container/Title/title.js create mode 100644 js/src/ui/Container/container.css create mode 100644 js/src/ui/Container/container.js create mode 100644 js/src/ui/Container/index.js create mode 100644 js/src/ui/ContextProvider/contextProvider.js create mode 100644 js/src/ui/ContextProvider/index.js create mode 100644 js/src/ui/Errors/actions.js create mode 100644 js/src/ui/Errors/errors.css create mode 100644 js/src/ui/Errors/errors.js create mode 100644 js/src/ui/Errors/index.js create mode 100644 js/src/ui/Errors/middleware.js create mode 100644 js/src/ui/Errors/reducers.js create mode 100644 js/src/ui/Form/AddressSelect/addressSelect.css create mode 100644 js/src/ui/Form/AddressSelect/addressSelect.js create mode 100644 js/src/ui/Form/AddressSelect/index.js create mode 100644 js/src/ui/Form/FormWrap/formWrap.css create mode 100644 js/src/ui/Form/FormWrap/formWrap.js create mode 100644 js/src/ui/Form/FormWrap/index.js create mode 100644 js/src/ui/Form/Input/index.js create mode 100644 js/src/ui/Form/Input/input.js create mode 100644 js/src/ui/Form/InputAddress/index.js create mode 100644 js/src/ui/Form/InputAddress/inputAddress.css create mode 100644 js/src/ui/Form/InputAddress/inputAddress.js create mode 100644 js/src/ui/Form/InputAddressSelect/index.js create mode 100644 js/src/ui/Form/InputAddressSelect/inputAddressSelect.css create mode 100644 js/src/ui/Form/InputAddressSelect/inputAddressSelect.js create mode 100644 js/src/ui/Form/InputInline/index.js create mode 100644 js/src/ui/Form/InputInline/inputInline.css create mode 100644 js/src/ui/Form/InputInline/inputInline.js create mode 100644 js/src/ui/Form/Select/index.js create mode 100644 js/src/ui/Form/Select/select.js create mode 100644 js/src/ui/Form/form.css create mode 100644 js/src/ui/Form/form.js create mode 100644 js/src/ui/Form/index.js create mode 100644 js/src/ui/IdentityIcon/identityIcon.css create mode 100644 js/src/ui/IdentityIcon/identityIcon.js create mode 100644 js/src/ui/IdentityIcon/index.js create mode 100644 js/src/ui/IdentityName/identityName.js create mode 100644 js/src/ui/IdentityName/index.js create mode 100644 js/src/ui/MethodDecoding/index.js create mode 100644 js/src/ui/MethodDecoding/methodDecoding.css create mode 100644 js/src/ui/MethodDecoding/methodDecoding.js create mode 100644 js/src/ui/Modal/Busy/busy.css create mode 100644 js/src/ui/Modal/Busy/busy.js create mode 100644 js/src/ui/Modal/Busy/index.js create mode 100644 js/src/ui/Modal/Completed/completed.css create mode 100644 js/src/ui/Modal/Completed/completed.js create mode 100644 js/src/ui/Modal/Completed/index.js create mode 100644 js/src/ui/Modal/Title/index.js create mode 100644 js/src/ui/Modal/Title/title.js create mode 100644 js/src/ui/Modal/index.js create mode 100644 js/src/ui/Modal/modal.css create mode 100644 js/src/ui/Modal/modal.js create mode 100644 js/src/ui/Page/index.js create mode 100644 js/src/ui/Page/page.css create mode 100644 js/src/ui/Page/page.js create mode 100644 js/src/ui/ParityBackground/index.js create mode 100644 js/src/ui/ParityBackground/parityBackground.js create mode 100644 js/src/ui/SignerIcon/index.js create mode 100644 js/src/ui/SignerIcon/signerIcon.js create mode 100644 js/src/ui/Theme/index.js create mode 100644 js/src/ui/Theme/theme.js create mode 100644 js/src/ui/Tooltips/Tooltip/index.js create mode 100644 js/src/ui/Tooltips/Tooltip/tooltip.js create mode 100644 js/src/ui/Tooltips/actions.js create mode 100644 js/src/ui/Tooltips/index.js create mode 100644 js/src/ui/Tooltips/reducers.js create mode 100644 js/src/ui/Tooltips/tooltips.css create mode 100644 js/src/ui/Tooltips/tooltips.js create mode 100644 js/src/ui/TxHash/index.js create mode 100644 js/src/ui/TxHash/txHash.css create mode 100644 js/src/ui/TxHash/txHash.js create mode 100644 js/src/ui/index.js create mode 100644 js/src/util/validation.js create mode 100644 js/src/views/Account/Header/header.css create mode 100644 js/src/views/Account/Header/header.js create mode 100644 js/src/views/Account/Header/index.js create mode 100644 js/src/views/Account/Transactions/Transaction/index.js create mode 100644 js/src/views/Account/Transactions/Transaction/transaction.js create mode 100644 js/src/views/Account/Transactions/index.js create mode 100644 js/src/views/Account/Transactions/transactions.css create mode 100644 js/src/views/Account/Transactions/transactions.js create mode 100644 js/src/views/Account/account.css create mode 100644 js/src/views/Account/account.js create mode 100644 js/src/views/Account/index.js create mode 100644 js/src/views/Accounts/List/index.js create mode 100644 js/src/views/Accounts/List/list.css create mode 100644 js/src/views/Accounts/List/list.js create mode 100644 js/src/views/Accounts/Summary/index.js create mode 100644 js/src/views/Accounts/Summary/summary.js create mode 100644 js/src/views/Accounts/accounts.css create mode 100644 js/src/views/Accounts/accounts.js create mode 100644 js/src/views/Accounts/index.js create mode 100644 js/src/views/Address/Delete/delete.js create mode 100644 js/src/views/Address/Delete/index.js create mode 100644 js/src/views/Address/address.css create mode 100644 js/src/views/Address/address.js create mode 100644 js/src/views/Address/index.js create mode 100644 js/src/views/Addresses/addresses.css create mode 100644 js/src/views/Addresses/addresses.js create mode 100644 js/src/views/Addresses/index.js create mode 100644 js/src/views/Application/Container/container.js create mode 100644 js/src/views/Application/Container/index.js create mode 100644 js/src/views/Application/DappContainer/dappContainer.js create mode 100644 js/src/views/Application/DappContainer/index.js create mode 100644 js/src/views/Application/FrameError/frameError.css create mode 100644 js/src/views/Application/FrameError/frameError.js create mode 100644 js/src/views/Application/FrameError/index.js create mode 100644 js/src/views/Application/Status/index.js create mode 100644 js/src/views/Application/Status/status.css create mode 100644 js/src/views/Application/Status/status.js create mode 100644 js/src/views/Application/TabBar/index.js create mode 100644 js/src/views/Application/TabBar/tabBar.css create mode 100644 js/src/views/Application/TabBar/tabBar.js create mode 100644 js/src/views/Application/application.css create mode 100644 js/src/views/Application/application.js create mode 100644 js/src/views/Application/index.js create mode 100644 js/src/views/Connection/connection.css create mode 100644 js/src/views/Connection/connection.js create mode 100644 js/src/views/Connection/index.js create mode 100644 js/src/views/Contract/Events/events.js create mode 100644 js/src/views/Contract/Events/index.js create mode 100644 js/src/views/Contract/Queries/index.js create mode 100644 js/src/views/Contract/Queries/inputQuery.js create mode 100644 js/src/views/Contract/Queries/queries.css create mode 100644 js/src/views/Contract/Queries/queries.js create mode 100644 js/src/views/Contract/contract.css create mode 100644 js/src/views/Contract/contract.js create mode 100644 js/src/views/Contract/index.js create mode 100644 js/src/views/Contracts/Summary/index.js create mode 100644 js/src/views/Contracts/Summary/summary.js create mode 100644 js/src/views/Contracts/contracts.css create mode 100644 js/src/views/Contracts/contracts.js create mode 100644 js/src/views/Contracts/index.js create mode 100644 js/src/views/Dapp/dapp.css create mode 100644 js/src/views/Dapp/dapp.js create mode 100644 js/src/views/Dapp/index.js create mode 100644 js/src/views/Dapps/Summary/index.js create mode 100644 js/src/views/Dapps/Summary/summary.css create mode 100644 js/src/views/Dapps/Summary/summary.js create mode 100644 js/src/views/Dapps/dapps.css create mode 100644 js/src/views/Dapps/dapps.js create mode 100644 js/src/views/Dapps/index.js create mode 100644 js/src/views/ParityBar/index.js create mode 100644 js/src/views/ParityBar/parityBar.css create mode 100644 js/src/views/ParityBar/parityBar.js create mode 100644 js/src/views/Settings/Background/background.css create mode 100644 js/src/views/Settings/Background/background.js create mode 100644 js/src/views/Settings/Background/index.js create mode 100644 js/src/views/Settings/Views/defaults.js create mode 100644 js/src/views/Settings/Views/index.js create mode 100644 js/src/views/Settings/Views/views.css create mode 100644 js/src/views/Settings/Views/views.js create mode 100644 js/src/views/Settings/actions.js create mode 100644 js/src/views/Settings/index.js create mode 100644 js/src/views/Settings/layout.css create mode 100644 js/src/views/Settings/middleware.js create mode 100644 js/src/views/Settings/reducers.js create mode 100644 js/src/views/Settings/settings.css create mode 100644 js/src/views/Settings/settings.js create mode 100644 js/src/views/Signer/components/Account/Account.css create mode 100644 js/src/views/Signer/components/Account/Account.js create mode 100644 js/src/views/Signer/components/Account/AccountLink/AccountLink.css create mode 100644 js/src/views/Signer/components/Account/AccountLink/AccountLink.js create mode 100644 js/src/views/Signer/components/Account/AccountLink/index.js create mode 100644 js/src/views/Signer/components/Account/index.js create mode 100644 js/src/views/Signer/components/RequestFinishedWeb3/RequestFinishedWeb3.js create mode 100644 js/src/views/Signer/components/RequestFinishedWeb3/index.js create mode 100644 js/src/views/Signer/components/RequestPendingWeb3/RequestPendingWeb3.js create mode 100644 js/src/views/Signer/components/RequestPendingWeb3/index.js create mode 100644 js/src/views/Signer/components/SignRequest/SignRequest.css create mode 100644 js/src/views/Signer/components/SignRequest/SignRequest.js create mode 100644 js/src/views/Signer/components/SignRequest/index.js create mode 100644 js/src/views/Signer/components/SignRequestWeb3/SignRequestWeb3.js create mode 100644 js/src/views/Signer/components/SignRequestWeb3/index.js create mode 100644 js/src/views/Signer/components/TransactionFinished/TransactionFinished.css create mode 100644 js/src/views/Signer/components/TransactionFinished/TransactionFinished.js create mode 100644 js/src/views/Signer/components/TransactionFinished/index.js create mode 100644 js/src/views/Signer/components/TransactionFinishedWeb3/TransactionFinishedWeb3.js create mode 100644 js/src/views/Signer/components/TransactionFinishedWeb3/index.js create mode 100644 js/src/views/Signer/components/TransactionMainDetails/TransactionMainDetails.css create mode 100644 js/src/views/Signer/components/TransactionMainDetails/TransactionMainDetails.js create mode 100644 js/src/views/Signer/components/TransactionMainDetails/index.js create mode 100644 js/src/views/Signer/components/TransactionPending/TransactionPending.css create mode 100644 js/src/views/Signer/components/TransactionPending/TransactionPending.js create mode 100644 js/src/views/Signer/components/TransactionPending/index.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingForm.css create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingForm.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormConfirm/TransactionPendingFormConfirm.css create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormConfirm/TransactionPendingFormConfirm.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormConfirm/index.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormReject/TransactionPendingFormReject.css create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormReject/TransactionPendingFormReject.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/TransactionPendingFormReject/index.js create mode 100644 js/src/views/Signer/components/TransactionPendingForm/index.js create mode 100644 js/src/views/Signer/components/TransactionPendingWeb3/TransactionPendingWeb3.js create mode 100644 js/src/views/Signer/components/TransactionPendingWeb3/index.js create mode 100644 js/src/views/Signer/components/TransactionSecondaryDetails/TransactionSecondaryDetails.css create mode 100644 js/src/views/Signer/components/TransactionSecondaryDetails/TransactionSecondaryDetails.js create mode 100644 js/src/views/Signer/components/TransactionSecondaryDetails/index.js create mode 100644 js/src/views/Signer/components/TxHashLink/TxHashLink.js create mode 100644 js/src/views/Signer/components/TxHashLink/index.js create mode 100644 js/src/views/Signer/components/constants/constants.js create mode 100644 js/src/views/Signer/components/index.js create mode 100644 js/src/views/Signer/components/util/account.js create mode 100644 js/src/views/Signer/components/util/logger.js create mode 100644 js/src/views/Signer/components/util/react.js create mode 100644 js/src/views/Signer/components/util/transaction.js create mode 100644 js/src/views/Signer/components/util/transaction.spec.js create mode 100644 js/src/views/Signer/components/util/util.js create mode 100644 js/src/views/Signer/containers/Embedded/embedded.css create mode 100644 js/src/views/Signer/containers/Embedded/embedded.js create mode 100644 js/src/views/Signer/containers/Embedded/index.js create mode 100644 js/src/views/Signer/containers/RequestsPage/RequestsPage.css create mode 100644 js/src/views/Signer/containers/RequestsPage/RequestsPage.js create mode 100644 js/src/views/Signer/containers/RequestsPage/index.js create mode 100644 js/src/views/Signer/index.js create mode 100644 js/src/views/Signer/signer.css create mode 100644 js/src/views/Signer/signer.js create mode 100644 js/src/views/Signer/utils/extension.js create mode 100644 js/src/views/Signer/utils/utils.js create mode 100644 js/src/views/Status/actions/app.js create mode 100644 js/src/views/Status/actions/clipboard.js create mode 100644 js/src/views/Status/actions/debug.js create mode 100644 js/src/views/Status/actions/localstorage.js create mode 100644 js/src/views/Status/actions/logger.js create mode 100644 js/src/views/Status/actions/mining.js create mode 100644 js/src/views/Status/actions/modify-mining.js create mode 100644 js/src/views/Status/actions/rpc.js create mode 100644 js/src/views/Status/actions/status.js create mode 100644 js/src/views/Status/components-compositors/Animated/AnimateChildren.css create mode 100644 js/src/views/Status/components-compositors/Animated/Animated.js create mode 100644 js/src/views/Status/components-compositors/Animated/children.js create mode 100644 js/src/views/Status/components-compositors/Animated/index.js create mode 100644 js/src/views/Status/components/AutoComplete/AutoComplete.js create mode 100644 js/src/views/Status/components/AutoComplete/AutoComplete.spec.js create mode 100644 js/src/views/Status/components/AutoComplete/index.js create mode 100644 js/src/views/Status/components/Box/Box.js create mode 100644 js/src/views/Status/components/Box/Box.spec.js create mode 100644 js/src/views/Status/components/Box/index.js create mode 100644 js/src/views/Status/components/Call/Call.css create mode 100644 js/src/views/Status/components/Call/Call.js create mode 100644 js/src/views/Status/components/Call/Call.spec.js create mode 100644 js/src/views/Status/components/Call/index.js create mode 100644 js/src/views/Status/components/Calls/Calls.css create mode 100644 js/src/views/Status/components/Calls/Calls.js create mode 100644 js/src/views/Status/components/Calls/Calls.spec.js create mode 100644 js/src/views/Status/components/Calls/index.js create mode 100644 js/src/views/Status/components/CallsToolbar/CallsToolbar.css create mode 100644 js/src/views/Status/components/CallsToolbar/CallsToolbar.js create mode 100644 js/src/views/Status/components/CallsToolbar/CallsToolbar.spec.js create mode 100644 js/src/views/Status/components/CallsToolbar/index.js create mode 100644 js/src/views/Status/components/Debug/Debug.css create mode 100644 js/src/views/Status/components/Debug/Debug.js create mode 100644 js/src/views/Status/components/Debug/index.js create mode 100644 js/src/views/Status/components/EditableValue/EditableValue.css create mode 100644 js/src/views/Status/components/EditableValue/EditableValue.js create mode 100644 js/src/views/Status/components/EditableValue/index.js create mode 100644 js/src/views/Status/components/JsonEditor/JsonEditor.css create mode 100644 js/src/views/Status/components/JsonEditor/JsonEditor.js create mode 100644 js/src/views/Status/components/JsonEditor/index.js create mode 100644 js/src/views/Status/components/Markdown/Markdown.css create mode 100644 js/src/views/Status/components/Markdown/Markdown.js create mode 100644 js/src/views/Status/components/Markdown/index.js create mode 100644 js/src/views/Status/components/MiningSettings/MiningSettings.js create mode 100644 js/src/views/Status/components/MiningSettings/decodeExtraData.js create mode 100644 js/src/views/Status/components/MiningSettings/decodeExtraData.spec.js create mode 100644 js/src/views/Status/components/MiningSettings/index.js create mode 100644 js/src/views/Status/components/MiningSettings/numberFromString.js create mode 100644 js/src/views/Status/components/MiningSettings/numberFromString.spec.js create mode 100644 js/src/views/Status/components/Response/Response.css create mode 100644 js/src/views/Status/components/Response/Response.js create mode 100644 js/src/views/Status/components/Response/Response.spec.js create mode 100644 js/src/views/Status/components/Response/index.js create mode 100644 js/src/views/Status/components/RpcCalls/RpcCalls.css create mode 100644 js/src/views/Status/components/RpcCalls/RpcCalls.js create mode 100644 js/src/views/Status/components/RpcCalls/index.js create mode 100644 js/src/views/Status/components/RpcDocs/RpcDocs.css create mode 100644 js/src/views/Status/components/RpcDocs/RpcDocs.js create mode 100644 js/src/views/Status/components/RpcDocs/index.js create mode 100644 js/src/views/Status/components/RpcNav/RpcNav.css create mode 100644 js/src/views/Status/components/RpcNav/RpcNav.js create mode 100644 js/src/views/Status/components/RpcNav/index.js create mode 100644 js/src/views/Status/components/ScrollTopButton/ScrollTopButton.css create mode 100644 js/src/views/Status/components/ScrollTopButton/ScrollTopButton.js create mode 100644 js/src/views/Status/components/ScrollTopButton/index.js create mode 100644 js/src/views/Status/components/ScrollTopButton/util.js create mode 100644 js/src/views/Status/components/Status/Status.css create mode 100644 js/src/views/Status/components/Status/Status.js create mode 100644 js/src/views/Status/components/Status/index.js create mode 100644 js/src/views/Status/constants/index.js create mode 100644 js/src/views/Status/containers/RpcPage/RpcPage.js create mode 100644 js/src/views/Status/containers/RpcPage/index.js create mode 100644 js/src/views/Status/containers/StatusPage/StatusPage.js create mode 100644 js/src/views/Status/containers/StatusPage/index.js create mode 100644 js/src/views/Status/containers/StatusPage/statusPage.css create mode 100644 js/src/views/Status/data/rpc.json create mode 100644 js/src/views/Status/index.js create mode 100644 js/src/views/Status/middleware/index.js create mode 100644 js/src/views/Status/middleware/localstorage.js create mode 100644 js/src/views/Status/middleware/localstorage.spec.js create mode 100644 js/src/views/Status/reducers/debug.js create mode 100644 js/src/views/Status/reducers/index.js create mode 100644 js/src/views/Status/reducers/logger.js create mode 100644 js/src/views/Status/reducers/mining.js create mode 100644 js/src/views/Status/reducers/rpc.js create mode 100644 js/src/views/Status/reducers/settings.js create mode 100644 js/src/views/Status/reducers/status.js create mode 100644 js/src/views/Status/status.css create mode 100644 js/src/views/Status/status.js create mode 100644 js/src/views/Status/util/error.js create mode 100644 js/src/views/Status/util/error.spec.js create mode 100644 js/src/views/Status/util/index.js create mode 100644 js/src/views/Status/util/index.spec.js create mode 100644 js/src/views/Status/util/react.js create mode 100644 js/src/views/Status/util/rpc-md.js create mode 100644 js/src/views/index.js create mode 100644 js/test/babel.js create mode 100644 js/test/e2e/ethapi.js create mode 100644 js/test/mocha.config.js create mode 100644 js/test/mocha.opts create mode 100644 js/test/mockRpc.js create mode 100644 js/test/types.js create mode 100644 js/webpack.config.js create mode 100644 js/webpack.vendor.js diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a23f4c9622..1db0cc49e2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -308,3 +308,46 @@ test-linux: - rust-test dependencies: - linux-stable +js-release: + stage: build + image: ethcore/javascript:latest + only: + - js + - master + - beta + - tags + - stable + before_script: + - ./js/scripts/install-deps.sh + script: + - ./js/scripts/build.sh + - ./js/scripts/release.sh + tags: + - javascript +js-lint: + stage: test + image: ethcore/javascript:latest + before_script: + - ./js/scripts/install-deps.sh + script: + - ./js/scripts/lint.sh + tags: + - javascript-test +js-test: + stage: test + image: ethcore/javascript:latest + before_script: + - ./js/scripts/install-deps.sh + script: + - ./js/scripts/test.sh + tags: + - javascript-test +js-pack: + stage: test + image: ethcore/javascript:latest + before_script: + - ./js/scripts/install-deps.sh + script: + - ./js/scripts/build.sh + tags: + - javascript-test diff --git a/js/.babelrc b/js/.babelrc new file mode 100644 index 0000000000..27c6978855 --- /dev/null +++ b/js/.babelrc @@ -0,0 +1,15 @@ +{ + "presets": ["es2017", "es2016", "es2015", "stage-0", "react"], + "plugins": [ + "transform-runtime", + "transform-decorators-legacy", + "transform-class-properties", + "lodash" + ], + "retainLines": true, + "env": { + "production": { + "plugins": ["transform-react-remove-prop-types"] + } + } +} diff --git a/js/.codeclimate.yml b/js/.codeclimate.yml new file mode 100644 index 0000000000..ca6414f588 --- /dev/null +++ b/js/.codeclimate.yml @@ -0,0 +1,8 @@ +engines: + eslint: + enabled: true + channel: "eslint-2" + +ratings: + paths: + - "**.js" diff --git a/js/.editorconfig b/js/.editorconfig new file mode 100644 index 0000000000..3c229b5dc1 --- /dev/null +++ b/js/.editorconfig @@ -0,0 +1,10 @@ +root = true +[*] +indent_style=space +indent_size=2 +tab_width=2 +end_of_line=lf +charset=utf-8 +trim_trailing_whitespace=true +max_line_length=120 +insert_final_newline=true diff --git a/js/.eslintrc.json b/js/.eslintrc.json new file mode 100644 index 0000000000..b649a1beaf --- /dev/null +++ b/js/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "extends": ["semistandard", "standard-react"], + "parser": "babel-eslint", + "env": { + "browser": true, + "mocha": true, + "node": true + }, + "globals": { + "expect": true, + "FileReader": true + }, + "rules": { + "object-curly-spacing": ["error", "always"], + "no-debugger": "error", + "no-alert": "error", + "jsx-quotes": ["error", "prefer-single"], + "react/jsx-curly-spacing": ["error", "always"] + } +} diff --git a/js/.gitignore b/js/.gitignore new file mode 100644 index 0000000000..c846423fc2 --- /dev/null +++ b/js/.gitignore @@ -0,0 +1,5 @@ +node_modules +npm-debug.log +.build +.coverage +.happypack diff --git a/js/.istanbul.yml b/js/.istanbul.yml new file mode 100644 index 0000000000..4535167dbf --- /dev/null +++ b/js/.istanbul.yml @@ -0,0 +1,6 @@ +instrumentation: + root: src + extensions: + - .js +reporting: + dir: ./.coverage diff --git a/js/.npmignore b/js/.npmignore new file mode 100644 index 0000000000..5093a29b85 --- /dev/null +++ b/js/.npmignore @@ -0,0 +1 @@ +scripts/ diff --git a/js/LICENSE b/js/LICENSE new file mode 100644 index 0000000000..9cecc1d466 --- /dev/null +++ b/js/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/js/README.md b/js/README.md new file mode 100644 index 0000000000..41252bc916 --- /dev/null +++ b/js/README.md @@ -0,0 +1,12 @@ +# parity.js + +JavaScript APIs and UIs for Parity. + +## development + +0. Install [Node](https://nodejs.org/) if not already available +0. Change to the `js` directory inside `parity/` +0. Install the npm modules via `npm install` +0. Parity should be run with `parity --signer-no-validation [...options]` (where `options` can be `--chain testnet`) +0. Start the development environment via `npm start` +0. Connect to the [UI](http://localhost:3000) diff --git a/js/assets/fonts/Roboto/LICENSE.txt b/js/assets/fonts/Roboto/LICENSE.txt new file mode 100755 index 0000000000..75b52484ea --- /dev/null +++ b/js/assets/fonts/Roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/js/assets/fonts/Roboto/font.css b/js/assets/fonts/Roboto/font.css new file mode 100644 index 0000000000..5eea2bfd1f --- /dev/null +++ b/js/assets/fonts/Roboto/font.css @@ -0,0 +1,56 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(v15/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} diff --git a/js/assets/fonts/Roboto/ttf/Roboto-Black.ttf b/js/assets/fonts/Roboto/ttf/Roboto-Black.ttf new file mode 100755 index 0000000000000000000000000000000000000000..fbde625d403cc1fe3be06e15ae90c448c013eee5 GIT binary patch literal 163488 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%0Da2vjx1R*A2K(2Xs$lp|U%Rpv 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

}`N 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 RlaLSiI;{f(T?y`Heg+E#ii`jN literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-BlackItalic.ttf b/js/assets/fonts/Roboto/ttf/Roboto-BlackItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..60f7782a2e4aba9bbc96d7634799eaa05512c927 GIT binary patch literal 165444 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-BoldItalic.ttf b/js/assets/fonts/Roboto/ttf/Roboto-BoldItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..3c9a7a37361b6ae0571b33f09b6b55367e188cfe GIT binary patch literal 163644 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-Italic.ttf b/js/assets/fonts/Roboto/ttf/Roboto-Italic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..ff6046d5bfa7cd4498ad4a549d2d9028f6c73372 GIT binary patch literal 161484 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
  • 2a-ytx-(Y1%*Q`;e(V?9Smc22g?_xG~I&%zq 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≀A#j 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%0AHUW;|^l zV;^I@VfV6o8Ts~c_Ho9W_5k|~V-hXU*~U~_p>vFP?7{Y6-UxKQJ;ZpI_j(UA-nWO_ z!;O#Z5%x%9x_y;>l`+%4&c4o=WskB)86Vp>+cz7Z*dN&+G3%wF>gOy~-vd87OO0MY ze`l$=83+Meou$_E&Qg0Y|F=Tc4?xoOysp;t01hxmsn$^XFf-0Ep;|-T*47Qc&A{90 zFzX%QUEqDL=cxm%1*)|@05}a82!My)wsf-98s3i(=PhG#)zulGj&^#YwFjs(ST%bV zyI`CR3zZD$61y=Fj_vHH{ zu+Q1WSn4jLu`|GE!?B$cH9BxS80bY0hxIxJ^)+~=F&JRS665w{oI%34F%Gx~_|hpf z&vgcvgMssa^MN721;B;C4bE2cM&KskW?(dM3verNo3qQj9blIaGY_~ExCgiwxDWUT za6j;Xv(tPKcnEkHc*KdCK-0eUm5CL`oyMQVuYF*?Eu!aMpon6-L z&Q6QESYt>Z%Qx`z>CgS>m|}B0$wuy$DzXYy>s~A)pl8a-ag(#dRF~D)18=t2yrBSi^BI z$6Aj2IR4D>7mokt_$$ZXIR4IYKgT3T$JuHtX8o?u`C!Q~jL^bprEOPja@P%iGZ9ZAM$C0)5_wK5wH%XljmfwxHMB(CcmJ^)@rc z8>Zu=C7dnRFyIE@X5e{eoAov$b?*So4!7PXZJtwMEpWEj1Ax^6v>v-xqp1Ou7t>a0% zdD1$bw2mjO<4Nmy(i)z$PBp_a#8s{nH?IM%1+D|G2j&2!KsitWgn=lq(}^Q}al03A z9QU4sr_c!uw8PDeJAgdkPSp%OkD}*M^gN25N73^rIvPbsqv&W9 z9gU)+QFJtljz-bZC^{NNN2BOy6djGCqfvA;ijGCmohW*vbtYoqfuluii}2)(I_$+MGm9LVH7!xB7;#psamJR zxXsDO+Mk7FvECUP#h_6P8pWVb4En^NPYn9Rpid0?#Gp?M`oy454En^NPYn9Rpic~1 z#GpkCTEw753|hpXMGRWRphXN?#GpkCTEw753|hpXMGRWRphXN?#GpkCTEw753|hpX zMGRWRsDF(5$Ebgd`p2k$jQYo@e~kLasDF(5GyV@S&w%>JsDF(5$Ebgd`p2k$jQYo@ ze~eif7dz#&4CQdNEta|5ycf6+_y=%5unbrMtaQq;dgWNVa;#c8mZ%&nRF2k{qxI!z zeK}fRj@Fl>_2p=NIhtOsCDD0YwQwFcZU@Ey=P~3whMdQc z^B8g-L(XH!c?>y^A?GpVJcgXdknU4vb&!6w&WlWVLG+2>*!Fawy+^+KQ&C8f;PxHmL@i zRD<{1jo%}I-oWv|W57f}?|@SPEJ62*^(-}@HEk2KoV)Qj+e#;Q)ED%T$ed z5ikOvHs+PURlwE2Q@}I8bHEG0KLJW^P6hr2uy=&H9QYRaHzghlTn9W2aF6u`0ClVl zz$V})YC@T8%4Aa}n=;vl09}B?0Lo<_0Z=CUXrL$X5%oHSnun=*n3{*Fd6=4qsd<>1 zhpBm3&36`4`)1TWOzp$eK1}Vy)ILn@!_+=Z?ZebQOzp$eK1}Vy)ILn@!_+=Z?ZebQ zOzp$eK1}Vy)ILn@!_+=Z?ZebQOzp$eK1}Vy)ILn@!_+=Z?ZebQOzp$eK1}Vy)ILn@ z!_+=Z?ZebQOzp$eK1}Vy)ILn@!_+=Z?ZebQOzp$eK1}Vy)ILmPsw-{KiB2)Czwu9B<%wqf<<4u^w-t!g_)8_c{Mq+NSl^BCeNmz8qM~`3@k?c>>r2>;?7# zzW~1izXM69f>ynP7QKSjyny za&)J$Q-uDWiT<96{+@~co=HuMsA&;3EuyAH)U=427E#k8YFR`ri>PH0wJV}#MbxH< zS`<LN;AM5&7?brGd5qSQtB&`XH(e}bJ3VW&gb z=@520q%L$8sf&P%of35k$4g1OoECeyQ-)0_!-j{j;UP7Nv@bb+P1*u@SqSbT{N=^Y z4z-lo(94_%Ha>)n52=;R5ncuUYTEhloF7z?^OM>Ieie`a_5d}&USJ>iKXd#y@GGz% zaGXW75h26o*oGFSol{185u&{a8OM{B%W)vbK>&52?Fi9!glIcLv>hSZju34}h_)kS zj&l}anM<(DC0OPX^B=(dzyo+S4+0MX4+D=lW!Sbd+L{n;O^CK8L|YT0tqIZAglKC* zv^62xnhx2Ll#%~-pc04xJAhq4l~YC= z6|!!17U36fvGSY}>}nZ)@fKQ&68z#Vv|l0XW&WSY^(!1-<@z;nD2tWP^<-cQ*B=10 zI4>amQ;zew{+#n~fQ6i|=2!%*0e;~B5?~{FZst0~u@szgpaO{U-!3Oadl;fU4ACBj zXb(fQhauX-5ba@z_Ao^2RYL1kLhDsR>s3PQRYL1kLhDsRTN$FQ4AEAGXvs=wFGKjO zTku)8;InSAbAb~8yit7CEwm41v=3#p4`nudwa*1E1+E3I2W~(v#?fMJrp4Nf6ep14 z1X7$piW5j}0;#P+YC}kE2&qjVwF#uQ3aL#XwIQT6h7RN)sXLL>1d^ISQr94R{+E`ih~kh%m?mq6+g zNLLloRfTj_Azf8SR|x3}AzcZiD}i(+kgf#Ml|Z@@NLK>sN+4Ycq$`1RC6KNJ(v?8E z5=c-L5>$l*RUtuDNKh3LRD}eEke~$8Q-$P&ken){rV6P^ASnqXC4{6TkdP1(5~7vf zY)u1Z00pGaC+%~N-vA3aU(K-ySOaVZN=YjRDu7+g7RUk`0F8hqKn~CxXbH3e4hN0| zdH}})y`3sJUIoXi;CK}ruY%)MaJ&kRhv0Y!j)xe9VFVCQyD^-Nz}X0#jlkImoQ=TE z2;7Xo$%t@p1;=lJeNF_9Mc`HhZbjf$1a3v(Rs?QEjN2KJ90QC4?qO8%HYWn7B5*1K zry_7F0!JcnBmzewa3lgpB5))EM`rE&}BuP%Z-HB2X>@hIDUseS)`g8YgH4YST%tMf9&hf|HnS>#6IuDKJUan6T?uA%<;hgVLu4_yA%7n z6Z=aHLN$V4QS9qZYYgY(IO;yqM2@z>8fF6Hj&aViopc754g1ABo*xh23AJ z`r$kF$D=rrr)wW_IG)G|>^B}SB?_zW`Ts{?6aR0arnG9R68zoZ)H*BCqwkGur_yNa z{6NXWMki;x(F@{Eo?2~p2gs=<+zUHHu5SZy^Lcy$L$;|I9Ae%?+}Vs z+1g({6%SndtfzC-e(M<=2jjP%FI29wFQC=E2pG!sFl@8-XK#h-g;2c^s!xXME1-G; zs?We@EXHRn#$PN}g~0dxzuu{Z@{^%_LWMZrg6%1FDxv-&e7|CRzhadD_5d}&UZ57g z^kp{SI#Eynwr!ItB!<;E_ zY7Lw!gj0oZst`^U!l^95`40;g> zI5q>{tQd~%gkzK8SOQVqkOZP5jz_CI&RtU!m@xhAmzl!193b-}{jwRq$ z0-viGpQ{*-?Sxx9;nYsJREe*pdm#xc=G4Ne8E|O^9Af`LxN|Nr*qIEM5^$&z4prKh zl7=UOUsQ}=RE%F#Y~RSel$9A4L1zven*+zDz_Dd;Y!4ip2FKRIv9)k)t>{Z3$M3=U z5!eLI7TOh8R~EyqwW2Ro923AEpa$3r)Up=qXO8~{eg*aej3f$TQx7Na~wW4GB947@)8Lr4fm+A39jt7GB{L* z<=c(btHSCre&H;DQ`_KF8Jt>xUhP1y%HUF&Sij4hQn*lNK7yAy9$3IRWq=!HaH9-v zEPxve;Kl;1T@{osv&L|I-dO$B}<@W36v~>lIx&k36v~> zk|j{G1WGdJ5NJ!=(2Mq?Hx}o3uKRO-B62;D^FhFQ{7-9(oQIL~b;xuCYL-C75~x@L z6-%IE2~-S2#V}M1BhwLNI)Y3`km*QDrXx_c1euOQ*>Fmxbx*JanXZPqB~Z5nnT|l& z5-3}O97mAjNJ@^YQ*vAlrAwf63341qj^oI29663c?UIxnS0l#}YRajqy_Duqj>Sfg#~ zF|H>9_*~3NYDU~E%FLu@aH&)kbH1MQA35Jh{5{0EYne(}ecw`5bN!1`YFNb1@vj*D zZf3OR*p{>dIkpEn0-b?gr1j&-bHx&!#Bl)feFn0A9{yWU%*meIl%Y<5>bjolp+zONW?ZIVjD3z#?Xl0Gk$<{Y_o=QejVpG zaDFquvn>2%Vs%lZq!ek`W_?WBJkGx$?Q38GX-i344s76h6YvwDJ%uoMG17MfaUcQg z0rmp>fM0-L0p2ZdC0VJf028nQXl_Gu8=4abjM|3)U4X*?Xh|F}N*pk19}V;b1~4LY z8ZZzT?39YJy4>z$xx32K(0X4UA-UUXz{s&!5~^K%f0s8cXG% z2RYO{oU%%hltrpEPC~ZNBYg;PA^kAdB1Mqv9OOC&xy~`q2ZjI_02czIuttw^d>nWJ zsB5LPXB$QybD&xnSI^sWO4`TF<>`1aUcQg0rmp>fM0-Lf!~3o%0V7;kjEV4F$ek5p04(CwTFx4 zQccBox)9mZ{?o-AhmuBlk+U4+Ovj~zyhouC(9d}rIa>*5X2FrS;l|r3-zbc1Erseu zQ2a+Iy%I{lE#7H=jweE0?dP0F|6&Ne-eJx=*!{KmHw*D^7UJJ5#J^dHf3pzk&Vr(E zBZF@vgKr~)v!LiKs5uKt&Vq`wQa;SvP;VB#%0hgVh4?B9q2fxYIIEs75~kL(sP!yr zJ&RhuO^w6UHcahiF)OJb@mPFkYE?n4wxcPlDDRBiQ)=_sIaj!sYDk*gZrQQMGx1%+clw6MnSD-PKXiOy~ z-hsyKKx1~GF_macrL~)W?EoU`rvU?j!OnKHrV_2GL~APToA{r6nSs@hlAb7~FQ@bs zl)jwOmr?o(N?#$Rk8!NVv$4dxDW?YI)IgWKoRXJQ@^VV*m9m^t>eA_PfQovhtDtlh zlx`O#DyKvhl&FFdRZyZ`?7!EK-;?MAf6wtpc^dOTm=7_EelPP2c-k(WwhKDdK&Kk$ zR0ExAppmvJyP!=Cw5g%)HPpR^y4UceUDUOPd1Dvi?Og<10*s(HRmhQ8pTvT8bB(u! zuTq7tQiZQlg|DLfwsCxwDtwhHe3dF>v5Kxu$Z)Uzz>|408wBkHjg~<7pm}g z6ZWMXv8nh5Rrm%~_y$$Xrb~}E*5cRJ;@8$v^1YOHFQwGujZKpRyL8vKF7R7Jsr9f3ns-gJ<@F#&KvIhsJT}8;8De zEb9T#HV$p$&^8WjK`xcUv>a6dG`e#-VQ<`o^Jc9NNaAZ5-Ohp=lhN#<7CCp=%tP#-VB4zL3bx z#lWSUGp7NX#-VAPnOQ;V(@5x5i>0Z>($r#UYOyq$Cbd|OS}aE`JF3->nO{tgUdPS7 zShzlw){&3}b>Q_P$q+PCXZW8wEWE6jU=`+$D{_XAJU?mi1V z5Bx82@MYY)0$54!TF1TfIF18!yn7-?9rM=lZXMh9;@Yb@F9LK-dm}hHt{vjI3;F!J zc=kcg3L_N0N9Z2g$?Db%dxd6`~{#|IC&;J(yLpi^d*z0Y;9Y7v%C-C3IYVn9n;vnWt0A3Mu z(-O>0OE5Pr0jCRzr56%QFC>;;NG!e3{IeMlUL5x^?wJ5Q2|Nw%v%vGfi@?jkE5K{O z8^D{uTfk)CZQvc?T_9sNMJlFShy;|UV!GuPl7u7_A_?V4LSZVdTbL2oZ9-hP331&f z)+gW=faAt?3$1TB*RkDYq@xAIcngu5LZqfpW@~KbNGnn=##=}$vB9bWzZ$3kYJs1D ze*?b(`vC_@W5+1l0sOa+Uv)@B(N_D?Rhir z`7A8U*#OoDnT;c_ajZlfIgKNyapW_Od}@oSebJ^oWjpezE#!7Ae&U+>R{8k)=4Y6i1fg$Wj~`i6bL%WF(G^#F3FWG7?8d z;>buG8Hpn!abzTpjKqpTJ_;zILm=OZN@%_Hys#2lqY_%95?Z4Y>qB4~ zFaw-ccs8Y!uM}#HgIbFz<9d96O;GA5DAiF~QsSOaY7dkeiYHQv=TVC1Q3@3n<8hSQ zLx2mN#ZX`|WhlkM);iadn~o%J`j5GViJB6{=FVbPpx3gNY(LS+|L}aN+Xm{kfx2y= zZX2lE2I{tfx^19t8>rg`>b8N^W@j-Y?rdNXa4vAMlZOuFt6@%C-kPMx;quX?d~_)v zUCKw7^3k7sbS59$o`=rlqci#FOFp`ikFMmSEBWY2K6;Xmp5&t^`RGYLHaCyfHILRc zkJdGh)-?~^$wznc(VcvBC*OP-;F;)7KDv{S?&PC8`RGnQx|5IY`Pkb$THHKzEFU|Yho0r5XZhBf{9nNFbKo0bHBbbs0XBlS znPZ6KE+-#d%SYGp(Y1VZEgxOWN7wSvwS06fAN!X_tD8rwn@6jgN2{AhtD8rwn};6e zqlfwEVLtXR4_(Yx4UDgml0x8HU=@JnHkjFGti^v>=WH~J>D!rH#ks2GEak7DiQnQ0 zuR_j>oUc-M%m?R3?wG4=QsdlJZG2B&#f)g^lpUn(0;igkN=exxIOI%9TtA2Qm9b7Z zeFdWzU#garuZHqfXO!<7o~HBuoSZgr-+Wf2oP*WA4Da*`)tvUa8SDM7;0g1c)#^Lu z>3&JBU*lgE@^ofW>d{r6#Y|P*rw8{kEYbMn2DJo=EXTLo=(NBJT*MoH*3#NPf}A&@ zWjK}5Kjx`3f3+#8tI2T(IY!7aLXHu}6}5zFTs`--Ik@F|t}D26!QBMzCU7@_yNMDv z;mKG7bq!P;fPb7hYON!t=~3$zl;>mCwX{%ZF6Ek~;@E-T=`$-va)LzW4kDI%q_f57 zfp>E(*L{JLDBS?&S)Aj1V_X96FiO-x9qN3d=)FLlZR~m)heDO=bLV^J1~gYI@t1V` zq>|B(T1E`_JL|9~FE09M9)?0dN`dr~vPsj8mqa+?U|K-Q1UuIkMU_FNCJ< zi2mo~RF17lq+F#UT^UIMsJuZ(Q2!)7(DVx#^MV_yq#mjw+xnC`F-Xe$lcyfVSP1<+PgR01R0A73oFLKll z`pi3>spNh){CI?t6~L1Rp<01TI*-7c`wT;Mhd&Qe;)f~04U~E_d>Rj*^5N5i(BV^f zH5KYU0Cgup-CLn<7@pli%_c&hS@7i7xL^aT|E0*ZfuG<{)w=X?$2 zt3|WEN0v-VbrVmF)8n4c815p{Tn?8~mk4#Kq%Lu|-GX}TpzIqc%LdA^o^q5>j%Ac1 zVw{KG48cRbj5Pi1x)Q$wifg)hbD5vQ(pNf5$W4!K{XmXukex`q=+0Df`<}?kP-uDu zqn@`VtJzszSL)n{B_QvqxI`|Nv{NKQb zK`NF^!iSbT{U-R(loH$oA6mkPEcnn9J~V|7&5eVS5%@3@KD2@lC&GuOlyo$F7)1RW zQ`%FE0m*9WUuc|@tbz~6!iTHiLqqrwp!7YVg>{x(Uq0hyB)M%waynjbq7x= zfG)*6RaG_71m zlZXQ}#HMKb(i9r&`Ss@@<3pW|==4sRSAQFp;sGLU{YmxN~mQFRivPB>KtPZRd|H*mES>r5oV$S={d$NA} zzx+vV|1S~$faW~qCOPY{w#wN>396h=olVYYrje zSdJVt$BwiBzXkdd!}jk`FaTd@$!%PrO`9Fn@;u4oY~&l|9WJG!(Vios^{?+=Rd%*nG`^Uee&Ew--?k8lN;9;w@9%uaVx2L)$f2_^l z-G&vo%DI&94bCli1nfc&1XLDUc@36wB6;TEHK=4Col~+S*Wc53RkV+FK8#u^{9uKb zo%*=?Q_m_(3qTw8iSrHm{|y?x13hs+sUse=a=y~Kk-SI$p?BcR{0N1h(w~3+oObx5 zfBA7f^Zu%@7nI#(pCY}EU*Q+)8IaBRnv}Q&`>AwgRlco`Vh@xCtP4Jwv@=*)-;UM% zgV;4+ujcQd^g8~IvX1`{;;+LQR~o@CNL^$Fe>c|df6DrPy60E^ngVg_q8ZOx8i~<9i}2_kUxB z+lB~IZPuARjC~NMg$(s9*WX=6_ zS#v)_*4)pOHTSb*&Hcx+=Kd2|b3a?w+|Q9U_X}jr{X$uDUnpzt7s;CY#j@spiLAL_ zDr@eS$(sA+vgUq;thxVI*4(d@HTSDnbH7immUZ?&=ympLvtDPfSQTvLDb@vBV^qvy zoxR$v*V(JMUT3codY!%cRj;#G`&nn7Z&P1e>QE^F(1$lCg2WNm#+hDe_5YBy_4mu#`Uhlf{e!Z${$W{L|Cp?;e_YnqKOt-DpOm%rPs!T)r)6zDJ5&%4 z)N*Wy92>}SS7ci6T5GYQs2eifoo@i?J{-x{JN{%LlSk7Z)jKUUpbyfM9*f@pCkvVE z4d!ut^^O+(@CtMJW+RRIT>&TXZHhFWNQ-|G-)3mZ$+U`R@NL1)7iZ#;oW=J5(V14F zGp*5?i&%kwG2b?5&n4jKeK6XJ{81X5PlidA*ZHE3|hUJ0#p=-mluA!{b#uc13!W z+#WL@1M_j_VwmOxa{}j2m``y2r1>Q0PqFicZ9Z*2O+I@64cmOye3o;)3x{n!Z$8ht z-iyOFUo>CjT<^#cz&cE%Y_FKF@Z49;S2=&pe2w$h&DS}9!+eADe3SQ%nQxkJaz4qN z#Q9s;lvdc3_o&hPCi^w8C({R<>peZP#J*&SeaRC0k|p*fTkJ~%u`dn9zBCm3(opP6 zL+lH!oVmbc*9UfTTF7~!S;+Y!a}no@%_W>KHJ4K6W#%#{v)o+HIb(pFf6IG41LjJ0 z1!*G|s;yY4wql{$iiK({7OJsWsK#QUvc*DWi-pP-3zaPvDqAd6wpgg9SSV&enXImX z3(ODVyxOc*%}wUYtAk{>kmlxIb1&z5&yeQkJ}lZnShS0j$-Yt-tDxRnN@cOT)KC>* zhpA!An;LEn=ie)=E0o1vQzO6`X^m9P^`28;UTs~i8nE-!wVYpPUB_M5Th}uhHOd;r z8iX6H8_3~C>qh3g++^JZ&du1(W@0y6i`{G^cC($>%{JK0`^f(vSkLx)-zxAQvK~^| zdiN@xGM+g)9ofSQ>0%$N$0*O^*5hDKz|ID-vrmElG}bnNwSAT{JZB+G>~8fuC3(Sm zfik>ky{KAPFJX&YVT&iKHr6ZFE2^dSs`VveUY^@fEkS@~AJ>V&SV)(8AM)0)ZCXIZn@4di3y4Vl&_)+an`wl$lwv1-{_q~*gK?|wa{8fdZATFK8u)blw&Qn7E_WXyd5^nTFTrb z(^_UNBhTf`K{Bls)(Xy7S*yr@wY8f3i>x*Lu4Q&oji7fjoC{btx~I$CzdgbsiRfS`j2+jc4jkmv?^E!(vEgz2l?!@c9Kt=*-WNYWmWOS z1hbkY5m*!H|M`H`^mI^ zvwq|JcV~5SNV;{pW``)N*-8S<(z#hP8=BbQ` zwzE%T51D4{S$aC>1KCTanSBN;XWHqOTQ$%vH>F}%9MzbXn;CHS5POI^koNl$)!x3; zzEpK$@3x_&53`4n&TcvEMl-@5p*pai+emQOGlzWGGlzUe*`xSn&m5k@o;kF4CJ}sZ z&neGWZB1+2oR(61tgTZmy>8>P*~{-pes#NkptR!I>Uh4{c$R%>Q*~S3K-%(#(v~-p zw!E>l_`yG__JD@J*YqPu5Fk05j`8JidJV)B{ z_R^N;NL$`aJ;pa%P2`)+tln3+>kYoyiqR|1C-H5X(Z*+|+IYS1l`SoOj^oRYKI{25XQ!PXsh#$$+c4uXM2c?vTd7jMEu^InNK4;dG4Bb=R`YGi z+hq1~uKjD9{jq-L{1?6lsDHClRzUoK0DEPzLpHl*nT*m{j7GOa9oT2l$THZyG367q zHd=G8J%gZl293ls$T1Ey4kW$3(VpK9Mh9}}XmsSfv(cGfz0;PR@)C|WjwjE4MnBSX zja<_E8~quR8fXk8UGKdWFwQjwlYSvHFq<2f8kd4O)EG+2&BkcF5WO>(A$~?{*`Lex zHd>3f(Hd{#aQucN&7=4|!$g8J{ETezEwaV8Xeho#6Y(u9e2Y72^|e^M9HD;{09nUC#BsUrGna$<}1<(*8k? z_y>)}KagG>K8N-XnuvdpV|~c{9fKa;41Tqj5XkTnEb$L)>r?Af(zTb+NW6p`>vQXK z>i&iG1?ATsL$-Jfws;Ip#AC=2U!jfo3hgtz1S`W!u*5&G#XqpcKWHQVL3`^5>j$35 z>I#0fuaGUiLXcfRH*vn%+RW2`vVP)Rdk;bJ8(N9qkRyIWEAbn0#BXRNenXB`X;spq zhpjN44Qn*WS$h&~#FJ=m?Xq@}XN+0W&8^+cUul`)TUZ&sg_Yr3SQ);BmEl`h8NP*; z;agZ4zJ-Os{)8=_ge^XVE#8AIeuFI@gDt*-E&f5a_y0y&5f6uARANWvBFGa(@YDi$wD8W01)1QZbws-U!} zcz_q8BD$Ld&{_nm6ytqG0mUnb(2rItqV=dq1);y^*(AHM^z+%$Kl)F3KYa7<%)GO+ z^Umx%^LyT%>521RjPFuTOz);w+r! za1Pj?`-1}+GivPgoC^-&A)weF(Q1Eq)&7W9`@^gDN3_}>ULMC75jdaoL9stts{IkK z_D3=oaS<%DbNCz+#}j!X&L{CCoQp-`QHvyAEs|uO&eIW6!X;oSmx43!RC_DzKQYs^ zQClRM%efpDk60v;P#ECEqKL>?6S@}iSX~SGN?i+i1IAMP!^+8`{zYLl?EvkeFMM?Q zuo*7Fy3Lj5T63eh&D>`mF^`3$won|};#b1mVYLj0a&Vrx)Xc()(2LDYupZW$N1+D< z^Cl=0?J!U8VY0FAa{(-oY36dQMtz-G0W0Hv&fgz+iH zUpVZ%6tidIgn|@nCZ9Vo1@m?(Z5wDM(Xbvm!HUX&#WWHtNl(F=nPpfpVhI$9JIy-d zhYAt+WDF}L0ba;nu&PF3ea{Q9+VyO6m060lLRXsyOcm^yKuQmkl0>M4sj$69n&?xunI1AV2Fj+E zwFNAk_OSl?z=|7!bw4M<@+!qj*$d4L<`!61>&-^2AR0&;i93N^P@wS)!bmA z)ts?{r&(rhHTRf@%_gkn97x*|^>7BP$#htdxp;nHGORdR7krUfZdSoo+h8`!s?Wt4 zmBl!jF}oBC`rUsQgBGSa~cQmLrjel#$99 zWn4I%E7v9|QZU_;+jD%WC{BHD0{8;YN6e?*)(uA&Z{Qf<4IG8uz;UTJa4hr&j_uySQSS{LN4$E( z_GmaRj13&O#IBF6kF9Gs>T!;vm8{Y&<--mR_C>SbevY-OpRwDqR`m}1tgW@r+2`#G zvSzh?*}j5Rt6!5ft8E?DtbWVxw7cwX`?h_@{?&d#BWR#KXuq_F>{s?{`#1ZI{nmbG zzqfz4KiI?eM|;Hn!~SHC+GF--dmI9p<&TKSK`g_Dg4BW{sU=0xY1D_jgk66rj@nW? zil+ohr1q3d9q0@?O2_DDI!-5?fxtk{L1go|2-m_zx|S}=o#sw=(Jsb$U94;6TDvwb z&b4*zT)azgi7v^tcggMy*THpkDXx<{)1BoyyR%&v*VT1%-CYmY)Ae$xuD9#s(pJ%W~N+$Mtjl-2gYx4RX0|up8orx?yg(8{tN|k#4jbLP9_$JKK7YXVl*D@}hTo$$6wM#f>C_tcaX;?l zsqR{_47TIrum%6WZ^bwNvwbUqy>Xt|b}D_5j=4VQi9bo}Y3yzG1SC0WMZ3^`PTK22 zdug*C7?0j}sy(joKk9S;O^*xow^y~d?38|jZ6)m8vX(3$$rSV!?O!##RErtJb z8GMy1pdH=}o$xm3gR7wn-UB`GerSIWLFapfd{jj>w27XeEwq)MqNiy)G{0JCeJ?@R zdkx;bH{sRW4gKz2=yQ8%AMJ+{_X$+D&!Mn=Nnb%p!x~m}7+TaSXi&F9d%6>v(;8?^ z_+^5-*WKsVLS{j$>azlK zN2jBae3RkXY@FwT7Iz^Sz91yLFeLoaU^s0G2_G8_clU;br-g*C4GB*OhI1lpA&dEO z4N4NQKrpY5=zw{2MZ^5=b#u(dK*`RtC3dl0g&upz9>$oJK_hXGZi2d6M;~J}O2SB! z?Pfy%TZDaV9>mTyb?z_}lMHx3=I|1X4KHH9)JRW~r?aQGryuq%EAy=J)Orp^z`uhT zbR6cpDVUk|qI{IeN8>?16@pbxo_eq5gcn9wivA81aKqjJW@Ux--=g$zD>fgBZcJJ5JOLD%pDrDO=GkK@LI|ht0f$^qO4?? z0PUnRFF=S7K5i-BRIrNgk~Hvi|LfV$zU}v0c$u34AkR2IP>G~N5PVA zXOii4dClHg-!>nDohD+gT+k_;v}SEzR!3R*kt+W1b4$2dLO` z#Tp53)^@H&h>vziEW9{Urn@B#)t;pMQZ64!Yx9%zyDIorrTk058u(l#Zz=V?I16n% zZ^&!DUQ?}=RP<)EGVj*-bsF=2u+03RhU`5_Nu+oBNb1cGUx}0?3#{g4U=7q%DM{dN zpuZw^gN8J=9m&_{B*xFuOPkdQo)D0{muT!LunN9i$$J>s*mmGa$F*|D1NZ+&c`ctE zzLUnYBTZ*N=~+noqzZ)is8Yg7T3{8&gVlT;SkvtO^gxJ@yMcaa$da-bSPc#N7v+ZL zEGfH#et4`UWhz(=o%xq3`ys@~*`S{XfmJ*JtmeUBv$}x(EGct9KlEowIS{Od3f=I@ zdAY>le=FGEGDqwQ9n%BV5q@%v7xFAvF0@MQpaR>X9c+sN%ta@_qL3#fr$WmVOQHu< z(WOvI#S@$g9dSA4mMd`dfrYUWv*^2^E2f*BII>X3fq9!nUz1Ua;AwleDO7fuWZuUg z^L{>{_hUKi0{j*+IF4a7!47HAJGFgS`BurZ@(HF$dRx_ShEP~MO`{*wUb!kx(@1M7 z&@*W(1tFn{FX>PRWn$!?~zs5707RHsAD?S}i7iP{ZV zf%#B?#pVmX8+P2pE~H&a%I0t<^X=x4*iv{>b19X2QyQgHe;Po8LSo_h#yxL~yC0A7 zDiMl=)MBLFL}&6`zJe>blIQXK=2!6iU@UeEnkQG_x?nEtkx#IE@*d6O^gWuFiE^8+ zKPuOaO*tgJOthPT0uy)-dFC<}xxH)Ov+vsv?1#4A?zJD;eKeE?(=ZxNL-^0Q XDz@2YO+x)8BOh4hvzWUBKRZu=id8dyHalu}9;2qEQp0i5iV1 zMiXN+mPE0OpidGt%AS3HbCz8oPyX-we&2O{*Yz#V&Z#qZzwfzcW+jvm;(;%b7@DjT1z5(}L29KCL zsL!#(8bV@65n3>8$bgZP;{Dqd6XHD!02K}y*muC&&p&a-yMTuz4#5SNTb?U$-WliN zLq?99wBLVCEu6n4#F#T8yMN!%wR&yMUnX_VHJ-NgM#c;56u-;o2GJ{Vg- znBg`dg4d|*vE!_L$pFHPFZumZV+M{2IQTY^kkENJzeG4~7$N3+&n&&&>-I0g#1pNtnEq2Ok51%jW=u8 zt{HF7YS9pdkU`pYjF<@B%3!=up@h^F`;mU47l{|HkX4%Zq^4BMx?L**v)^E2)(Mj3?rM6CyarcvTC5-xsCHb|97cgdZs*W4vX#6PU3 z#czSz=hla;nzdMHPWGXmB6KH>g*@wImPan2%}{X&F^K*oSsV^{Ymqc|f%FzfS>K>v zS0<5QT4Hq(eTfG@)?CE1-HEF>o}`FFtmnirc>WBoIg>!P8SiJ2mcl(UK)OsO3a_lk zgsaxWs2{WKq&l?_6WeZGE7c_3IsKWR^^rJ`v=-M}UrW=74zRYTZ>)vlZR>4e9J#6q zBE5uJoZnfSKZj$Ms*(T;>{R!9a z39HoinY5oA(`d*+O?9$bxMKa0)BWFywu^Nk=Y`4#&WqB*`B1({saC6l51bd}iWp16 zqyfZR@&?f+3U`NUo21^B>uVK2;!gqAPj64KPc2hNM~WfDmj zvq?41i}Ho@LY!g!p4Y0}q3{2yIqr}Jl?MM-Lq;V^(m4KNF5u(z;c)(YUB`Z%%QKg$ z|FK?zb|7!kQW7UlB+)9Zy@*$79b8(6vNY>bCRr!g&ov)GKPU<2I>Jm=cU4aytKv)& z0@_A#nYGo{ZEC%~^!y&`)+B^ABf*@HoR`;YZ4ZP1IHRjuZ>SiNYkx*e>#pHL>m%&XBu;2W(e= zYY}m>bVm7wIF-CceI4~llr5|ajT0lt6Alw(W0QE*dO~_-JK z9GBgW*4?T-gDn*lw8QoL7t&MAwq6uNASV;?uCJ|4*tVM7)=IlbJHC)pYaBzJ^k$xpBR63->$3a$Ay(;xNy7tx!x^5&+Q;Td->9G*+ zyddj=XM{?_=gZIC3GfC$(6p!LwTQW*B zh*Z*iLp;TIq@AWY-ffQ(LBcdWpwAiB&+T@Z+bp&J2=IjaK-e2@r@7D6?6Q8PIfnK| z!C!JX(66eSsI>v4kESYV%<&T2kr2cJ(b63}TWtMQY;N74^&)jO22x#fig-z&KR z;DZWCE4vTkddB&r+BU8?+{XP4nTF1Bo@qt05xU)#%MIt9)R`QE?Vc|UCXZF0Vg-$M zTmO_wYcAt8h`(#Md-mFH7ge2t4C0;Ukd;Jx zZSRZgg({niNxZn&`qEBcM{V~pr98FsmdibtJ+3FJ{QRS~!^riR%OckoRc7~*1fdaP z(o#A(>Sv@nkM%TXNfV7snrULlUht|f?8Ap*6j`iYV!f*wXT7VvfOvB}V%x{CCq5({ zJX#LhH&#l7?7(h0XjbYUR9k>pQjKHLzN6-}gq}EjGmmAtk5>J&^#P|Xk1Or9!w+*i z%k|XeQ}6!MfABaLaxuVO+kN2wRNMWaop1kN)pj}fe_N|In8$l*Rx4ti2X=q@|G2jM z_Wx7;&sd{07O=+z|5L5%A&)7!KK@HB?NdGzf=HoY#n|vqj6O?i_949LRS)@T8~pk@O8Yg|SHu z?cdPNLh?d-3iIhtK0M>Clm7AKJ=(s;z0C#<`~VeoZpNG+W^X~80`zVJoW z`FKz$vHpxPp|9|Uq_R$AD8{3MXrc87QNcKDDQP8cBfT}RZAJVO^%COC$FSP>);+q~ zq=&G;`is~f?e8S1ycTv6Coz%4!WMb}W;f`X7i?)9{GAuK$xq54RYQ(RI z6KIiuqC*Ko@j<~g>noH$Q3`NA62(^(tv4}NYb4bsqeNsl(AP?-fGmdX7zLY>0z1`D z?XwAB*a>^zMXgiCQ^ZNSPn=ZP8lygC{SSQuzkM3_7n6E|jBA&0+z(~28n-x!^R4Tt zl{^=gQBinJZlf4cZlL_4URy>bUW-i;pGF|I!F$pu^k12D5vP!97z1jl*(!@(*6Z3x z>o?k}fMEjeA4eaVhyzotb2VPpJz_j@0WQvvAt%vn{RZb_q`EjBOM1fJJHehfNok11 z-{YBfD1(VnGYt2$tv`w`*1t5v(8fHRTku?4(oecX>Whs4&mQY`__}_)9TX?TT1ny& zQcLZR^QtWog#r?!qj>iR>rMC_gBXctW|B1FL$V$5U@dVf?B4?LijT2Ik?QaX+0tw> z8nz$~xr#B;NiqiU<0s-!60Fj;KJpUVtyjUTJd^<_(@}C!R-;Ts*(r9iUK9ObbF%@% zI?_!10b>Eg{c7=s-SM_gXQ*N0!4GS`S~y?9kN>fN_MCs^3+He7!eu~}QI320!sTW? z83%lqf=)bt!t*FRpW>{_6u)nit&tV_=W0z3jyff5kdg)f+Ciyg)`Bh0|GQ9VuF^lURavDrE9U zv9C2o{Ly+}#UFg(xT(+EaPi}CbNy23%5~1x_eicA95>#FN)K)u0H+;yJI-9@9c^>` zdHc`_wN0+0oL{gLsy=g?^Y+m;-g8xTcrfmx4^_swE^!^=cETPTjD#APHJLE(o}dTcW7ZYDM0}tJgTfHl#QrK!sBU58H_km?XVMj}}Vr;Z?w)KC1;7f{kRh3p&sQ zckFNT+TM=s0p2nG&Fu@V9`B`uAVrQ}!0` zy4;5g&p%uK_j8p3TrfpRFX;uY6%46$feSkqU@rcWAZnOSJrtpKl2!`}sayehMZHD? z=r~(}7X%)S3A}d+XlRLEj~6(RRnp+9s!?2Z@Bsy&Y5bo0(Q*mJ!|Kzj7;;g>Elw83 z+ry#laY&6_0?>1*EU33cJ#R~GLX|4KgA-eSKn2fmv??g3D)9ffrUGRD;t$wbRNn=d z_H+9aj@pim#?}MgVx{5>qXLs2Ce%IDGt@scC^R~>d1#-|fe{yq*z42pMa62hSP{9G!e=5| zRQR^g1Ay-x^DBk#Ea1BV_#kPe@XZ5!ONEbxtALM)IYA_-ZqTftEr5@h3?`$=*JLt9 z0KS^06bF1Cn|1=eW2WO3;OkxrpGP_P1^_+^_$c5j0eqmW^|keZ^|bYnRkrT1uCZoX zJ6oGuW34XAUS+GYMfp&fu8dYjDZ`aPN+-)7mj75@SzcO-EQOZSmQxR|KiK_X(t~~v z+zWaYWEErbo<0Z!cmp$Dgpn0`h{6Li0RQ% z=-QTplFKWXVS91KF)v)EO(-)^;Ka!mxb&H*`=ee~S{kALu(UKr&7awd(gfuIiW#LD z3g#iz(gO866v!F{49pKD0LOh$C)o-efI8Dw=s?uRZH4kt2&~d2UZH10U9cC+Z0_u4vd3YXKVPUbYP|!kH zio$UOErgFzF5`G5>Z>R};`k)$>$XBq*+_@zp3u`chAohcfUhM{jX@A#V|X^GE=oNd zKSDhVWj>DIq6R&KFpDODH^FUeMZk#KL{Kn)Ec8NcK=Hsaa5tfClQ)h>p!P)x!f`fg zykH8&F>o~X(!4)90PCDL0dsqk(iF5e1YrBQG>sxuW$@G3XyC@_y{#{;YC=5 z+Q(KfyGufV2QNZC>PTCmYf;D9im(QCcNEY@!1YjOE5b(98e5@&GZcL1Mc9NI^b7UG z@n+Qiw!(QF3i|OPY(pJwE1c({&22>ho}qngMc9FQ0Lnl-54H_xklP%rfE z6>Fw3CR3B4jm@-AteM4_X|<48vk+ryY8E1zcFYLNH07D{S`5fDH8l2mlu!+4D9D$S3EyT$v-dDFMk0PXmXU!YLBK+g@pw03t=H) zA%HNmajaP%)2dTO6Mz^35S?PoRhz_`ony?^P`Sh$jG{TFyiOU%>ci^wKdK`+oimP+ zs=|{|nE~c70Bg!QY5?6zuW>A0W6bq)j+#hT#=&Z&alkQBO?c86*IlB`B$~+7l|@t8 zjpF-=TWa-)00YrQlOr@aF5KS(heuf3`ZdG6`H|2(EiS~1ABm1@QuQjqK5qP)rhkWe zu>t%@TfbK6ySnZzQ>#|u*YtA-v`r1;M@|#_wN4D-N6srI_OM-Znb4p&hvyqOK+Z*XPc^3Z~Wu)U}_h4Mh4u);4hIJz=5XY<_g=7qo$#ksm z=uO&^K2#)U2q9idAI#*gCkAT@aaHn(rx1b>Vk+?xmmr&FCSDpp;;s3b7+81WiEKVJ zz4X(E*#9@Cb2Rpx8w0A$}zmN=>A%5xtJq+}9ekYY}pL z=}fu?x}mx}-QW7d`oEm|JDqkmI(Kzm>ipIv&84f$a+jMfife}JYS(veE!_^gd$=!j z|IGbwLp8%>!)e1`9`PPsJVtn|^!UQ#XOF);=Xky_HZp$V73DS4+r_)9_eb83eBymt z`JDFk^d0H@t6wX>MU})#Ju2<3^s9eW|Iz-3{fh(A13Cw63wRvxI50dgC-8OU{*^CO zejcd?u2#>9TR#c^p7y#uohvH!oCl?8TLoGYj{-n zn(zbRXT$G=7e}xN?}#Z83nDf~9E!LYaW~?xNSDa4$i&ExBM(Pjio6^7GKxicM|Ft$ zA?i_-rHWUTm@18`tgmXQ8dbG!)y`FiRh?6HUA39j7FF9;?O3%Rsy(V!673mXHM&9c zm(f?FpF~?@yknwc(qq=f`o_k^){pHFJ0NyK?9JHcaV*Xl7ZH~fw=2GD{E+x5@r&a( z#vh3PCjO`R2l4N#Ypai|UQ)wYBfLgpjb=46YYeaPTg@3YSJm8E^JvZUHE-1{tf?dz z5&{$A5}G7*OZcKzc&)@*&1?0pHKA5ct#!3_)H2sPRqIZzr?vj7t*sqYyISqU+Vg6! zuPxU;QTsye-)a}vexImK?3B1Nac|=B#P1TXB|c9qNpeXVl5{cYPEt`aN%l;RNKQ^Z zn=&_LRm!fE&r(jNTur&3@@J|h)i1SbYVFhpshv^>q>f6Rmbx-^bLzvijI?2CQ`45D zZAvqzol5&T?Md4EI&O6)*ZEJnKHZd_l-?%2Px{34rRiJJ<@7V@Ki74tJFV{Hdj0BM zub)tVZT(N`e^vj7`j6^c8t5B%H;8Faw?UT%BO1(Wu%W@B2A3KCj|UljTj;Ho4fu z(ln@PQq$a~A2r?3ba&H3O}}n>sp*ZT51PJf#+o@btI@1ivq8;1Xf~laX|8K-XrA7@ zN%J<%mo?9Cey;fsEnHi8x2W7=eT$D<3N6R9oZoUy%e^g+x4hi)x0Zjln$ha-*0HVk zx2fA^eVb=(N4MS9c5geWoohSqc8lA6)UL37yY@#qM0LpS@I}XJ9cy;{sFQoA&`z~F zHSLtqX;`Ocof~&<-}#5mk2?R|rEix>UEXvZ*>!x^oUY5expkZ0?e}hPGTbsu8ND+G zXPnNsnDJ9)OlGajtyxvG24qdhnvr!O>&L8Lv+id-%lc2&yY8%ev+k$5U+BSlwCIuB zsEwAavHfA#LtyJzoPeR}kn+vj$l2YoyBecCU)Ut+(UepmYk_8;GWdjI|X z4-ar2kUXINfZqo^8E6_fWZ>?BF9)?6bZ{^kJa(`$r00-vLlz8`h6WCuKXl2^RYP|V zH4m#gY|C(`;UUA5hqoA>GyLxn14sNgvi``6A7p&6RVMpC(QlJMD+*t)@?%zGM2M8C7P?oAJ|(-)20Y@n)tl(|u;Z%<(fX&5D_o zH|zH7gxU3Gx0=0X_R~4-=Ioi)BL%={Vi z^XA`MP-DS_1v3_sg-aH$UASZ6{)HzOUd>6!S(>vhXJ@WHcX005+?lzHa`SUP&OMNO zB=>yot=ytKny1h6$P3G>mA5PJK;EgmYk80J-Ys%n6ufA`qQ{Gr#a@e}7N;(5v$*%- z!HcsO&sqG@;$4f6Exx$;_Tu6tbcxrJm?ia=bXd}J$FuQtmbG2>czOTjzpiMr;>!=?KHRv{uyW4If{#)^TKUnlRoSa1u9~}Q*{b!ccCGqs z)yY*CSN*c8U{&#|_p7z5E3J-RowT~q>UOKUuO72{-s}>h`q1jLt8c7+u=?fd zl6+mhSH3B~W`3jmcKO}&$K>bcZ^=KBe-G66|8%=-gAA`^^Mo}T0d(2ob^lBuUo%!y}bU+`s?e9Hb@&PZ>Y7Q^@jc% zrf&Ff!~PBDHr(Ct*G89(VH;C7cGx&%61;THr?3tVAIRZY_r$q$jwQc8*R@1AO9w9p1C=9^UBQ|Hy_>n>*kUz z0bA0ywAj*ROU{<_TjREN+S+?-_ST$jW46uSwr1O*ZCAJ5+4k~d@#A(McmMd=_LV#0 zcBJlf**S6Nid}xYuI*0ReRPlSp2d69_wN0q`6qk!8TZBRYqqcNzN!2E+#k5V>;94Z zw|&~+)0|JO2kIYacc9mS`~!OrTs!dMz~AN}<_ibM$Zqnw&qjSV>Tu%W&4-_T9`N~^ z&o6)e_mQzj?jG%Vbj#5P$6}66IQHU;0bf@6a@v;%jt3s!cl_p84Zhm@Rq=@dCyt+Z zbTawmw39EsZu9lguYdT)|C^TIEcxcxsT!vipDI3`etOgC8)u@=v_G@z%*8X0zHRjF zfp4FkjXyj6?9FpS&h0$+?RUoSvcB8$opOHM`O_D|FRZ;#aMA1HvWu@S1zp;G>E@;4 z@1^gjeE;%t^UHacAN`R2!xvWqu4G>M?8=*~^{-C7dg`j>$GShR`*G)wZ+^=DspMML zwaq_A{k-(&H`jYy|Kqy#myW+|{pGJ4={FAE^uIalSMuwcTOqej-)?;S;2r&)v3I84 zxqY|E-OqlD{q4~2Ucb-%{il0%@9n>L<9@>ZzV}ZQ=n4W0suwgY=vpwOU}nL}g4Yi! zKiKuq@8N`pGafE@xb)%Lhg%=HKT3Tx@X`23iywXb=-8tRkM2Br`KaWv?s4$r#K)~4 z_j)|;ao*#tj}JXQ`}oe|;wR*Z=aYyhb)GbS()vl~Cq14FcrxP2j3>*UYo^O8s$@5dse|rA#`P)LLLZ8B@!j!_6g+ zzj@j7<&UpYUp0Ky_En!(qhC#aHUHI$R~ujLd36|(oP>3^M5uyDPe7(iPh5yQ$(CIV z9v+@4W*38*T;bmu^;@rgyIvt?(j>#o;sXw{;JTUW3Bd_*ubU~0jNnZf*)?8iZIw=~ z%ucsu7uy9_+XZGYyWOr{BP7HlMDU>0g9;(EHVqM~Sn9AdiAs_31$BAA1Vy3DVv)@6 zwo6*ebT;w52b*N+#d_tiUdVnVS&NxTh2M>&$;{orAxF#3{|2WE;B?_|YF(Y8GeT|z z{F!N{SIjiNdJP(8OrW(AlM;QrkQ0xjT`z5Tr}(x?O=;UIHK{$_FADEYrnP3Q<(O8C zHN!w3GwXk{Qy7|xpj(8EC<59SLO>LD1q3o{ub8#*X2D?AT`}u;9|Ag&_!nK+Bd^n5 z>dL>R5lRko`G|j^)igBt5cmX;V6w#4stUE8)CP26u%D<*06r=c{Bg&hBUjmlaUxWX zmxkXA+Vj!5zy}{(3w*U=j~>>5u2Tll zb(?6)X1Yb`!^>vn+$LoZOQtDEwUCC^Sh0gDj7m%b5;g)b3%DglMMg#9UlJrBDJenggs%2}ZLVf3qp3_|Q zRjP~|U-ziH^ThFAg>Q)1m6@S`p&i(NShE&%ZtLWf8kG_PXaBHw#7OU7@0un}IWcRo zz_RojIkirPvtFB=mY$_!U(H#m)3|*xXWBZATW_?8gG=f|pUSgte5Cb8#T7H3PeM6!+Q6*4Q-~#Al z)cE>x8I24J)g-%|9g|)~ba}9^=j!&7G<3q`>z%wW`fb^&DCy>NUl!6MjVC4l5t{4a zGGvrfb>IH8T{O*;nh&6}KVRHx)RKC8uZcp(72UEnc5JU4pSGMTFZaLeJwar5gJ`WV zI@+ht#6FXRElqkhA1@z zlco>xfM97njUWy&3-M+b7(}BdN%AF_0MmH-Y9kqNo>iN+dmFCo9TY*?fPTrJ9MLfs z)|!rFDIY9X-dZkQK6z2O+HL+Y`ZcZArz=v@A1U#yy{0$(mO<95ev81?nh9DLq7prg zNrtE-A0JOGW29NcwU_?lnUt{~w-fcBDR-6lyd5l_&YVVf>|4;(qHI5`Jhl9VEC|J} zg;v52SYbC}vSBKMy`swaE0xf=pIMJuAMXd8Ba$ST!U$ip1dwjyl>*GKR?oAGIoK>$OaRp3*O!~r_K?NBxCf1JRE2F`15~x0^2KBpp{4_sGP@d<+TH+sP7ulK^gW)v(R%ZjiMOpm4@R8)}fNI9 zt@%$BH1Pc18Zj!4*_^z3KZ*#=8b=se;e&$b+4*qfy?K55wb3Vu( zCtwIQbbXe{X5N{z z^u=uKGdwl?Gdhs2wzOcG9S26wS`937W^M!D7C?qJfNvU7(}q$7OQLd*qa;;e7}gr8 z^rtk0TX%83MN};8Z%egc;hI$WU4i(5Pj`_tP_GFhBOek<;>d8>KfXGrgugmgz;{$B z6^#%Jqn(O6oalI$F;~nn6(oYisLXfu=lYGYMmY+ajRrZgJUyX{u)`uqnUom8zrqn5 z(bAxt6VzDlSghk&l-W(^s{H=*sfVtf)T32%jT?12H}PoAGAyXTTHsYt`#zPU!78s@ASy|bf>>#_$6 z$M5f>l>+N4J(T0{R4rT1tL`ca85z^JxNEacv8z|-F*fn{oE86>Ckmsl&K|x+S*lFB zK!0UjTJ>!@XRRo{-JLlCt2LtG*RP13ft%-hEMz90WQowhYPGIIY;hddqi|)i&;hb$ z!1ODH#O)PMF<(J|SdL<5tw9#c5r@mGz{{(WFT#Z;BTK#v6PgMx7c5K91EP4c zS-2^-_%DdmSi%NT1cxVy-Lm{pMbL(pOp0N%3mz(qzEKvx;}ET~z7l>zY~e@3NiR7l zB9e1B$Y6FVb`VFS{Ceq#}EReBAocx-1D}Pn#Qs zfZHMujn2>M4r<<_ z6uTzCE;`;^tK4{zt1u7hRC~g46l$r79T&Ai2+z%AUC}XgMB<>9L9Xl=7@DJ@(q*?@ z402<~nHq1Yqno5e&qN^ZixCdjYELz)fGx#JLyae{z!Qf>hQp+K5)erA^z~sHicvXY zHI;7S&NdUg<}MmDMX%j_e_ogQjTY#%RpK*qyK2R>I@ABNOZoNre64Qit<5|42jo3G zt=!olikqm3W}p9>`mYnk*^e##rD4evE6 zS}<`rHSSw*z1fGNutNDwS#)B*^5-JTS}pEMx6|aG?qEccbx;ttDd)fYN%`;$ZM{tp zhPS4#usQqvLr9f%JFN7lu+m!i`ldD|DH~PTGir8<<1X-~|F+Zirv-F$f)kOG6_BC>CCWye|d8VN>8 zm1@l4Wp(QXiFD?6)r*$7-Ab*5(L zI8BL*0H|eyS|PzH8y(;xTPFuP&Ol+rByn8yJRy3XzG14Sx-$*LRWyowBNX$iMOPC!>PyG0Hq?cY7J0^qrwxhQmD6d3e#;Y}BXf93OB#6qJryCXt(w|S~ z4;p;9x8O`;VR1Nbeg|)y!JDSClP^ypn4Jt}_fnozh`{VoJCAf-9I$dGlyOESdri?3 zSs5mV83o^(;Wj%HRYLPVr`id=&OzTR$4^!J{KKZg*ZezfXMd z{tUt1etRr$0#IY*4@tWjfBBp1uvomng&Ntrd}hZr^q)?&dU zLckE=C(H4+Y-do=C~hQBEh=7n3vwPGo3s3o6w*bZ0^w?316;ORpUHwK4>fhV?ZD|mRjRKbHo zg}5KDC`|zl4#_50E_Y^Ae7Uq_^%@cCaD$6jl4=IARDj2fsxeIB<9=~@d*$|_<+o?+ zwe@#Q*mC*S8$+>A!QNX{e3@oh?t#&X%I#3*`_+))jL!UH{Ukb$hIGsp#XoOTO10A8 z&vUzdcA1IYY2~kNoRk)-oa`iP%Z=MBFw_aw$H~rJhq!T1;9#|0qmCG1m&(Fqbv(+G z6$t{86=L4&QI@<>Z!B+yu?a)pu!WY%lG(BiS$m2MFJZP>hsrjR{;SbZ+e@I)uPv_u zF_ubWe9{+3ZX{85Q8WFvmn%f@4qv5H2hOsygZ|)p0v37mc+yvOAHwk0p9U)hS16ttdV_M<0sff+?l+8jU_(NT+|1IW^F=6H3LwZor*ELTA<3sJ8mh zFfxU(p0dVvHc&HO!+HWBtxByV#Naf9C4AQg)Ed8*zNU37ljvHdkc~Z}GzQiBZ>EYR zyW}2^xS$2XX+R_)SE<_QfAu2eG!P;NNynr^12!kTB**gR0#vHBCCz1(o*(=RAuF)N z&Udv#M|jUA!ZD{p30M9@1L=4QM76fFVcIELoH>=AIZbg=(Kf2K(8?5 zslb*B@@v;tnMrCSqg5*|XzJt)h1lj6D=CNHSc>Vn&tHqi_b&j;Q*6|Ol^%`^dU3+jCC;t~O4{r#objTj{c#Fk&E^bK#ngv=fhbj0k^tSc5~vKAuUe z+tObq>9lG2L-!ZlpwvZ^vS_gUt6o!cV)q%RCp$UKo45a7n3pi;&Bp1pEj4yqDvHY8 zH`A1p${$%91ixV;kM$MA)yn0^M}8C~>h_n-+hCzS&p8-L8`;Uro8tj*<5KEvR3h1> z+CF@QBB|D^qH%}2EHihIXK+=jDPq(X7Gd}EbXu=B7W(!9g?K0z-Ydm4V8JIIZrP)h zORTb`0AAZGeK)(6 z_uOU-cFU)FB7C(Gny5%57*sQ>4ym+Eu+bWuk>JlkYvGeCpIS-#_@5PvizaR3*xfgl zU!S5Com}ef*J~0cbwBgUO;c-P=8pSSx_+1Urwe5?{PlF&f(B*I5rsMLH+1dVP5FSn z81})@K7vNcSB_?X(N{o#@(0I?d#@X+w)v7QS@NsIsV=aMr+iD*mGPFY_;;N9~g1*MTv*=&egwA<(<;8c=mpG_YX!X zZ&?k?58%Xui%Wh;v+Q(dC2Zli(UY+!o|16uGx1BrR#iz~S*RB6(6|cH9t@TQb8{yI zJC#ZkK!fOemWe)OrJN!JbAFnG4RVy@3CK@k6gSW6pjR7JI=uJgqavhK9633mwa;fA z?w`=>*1lVkb8VFPT03^!_^obUCt5xH+}UaA`}}23r%7*gd9x>Nr8AZ{4Qh8|*|e_) z3Bu^}v+0-_0vpqJW{ZH1ck-tm8Nld-tMlnJ%&}o1HYFP{B_0YMX_4ztOd);7mxl;U@UDuU z#v%-P)-4yVaU9nJ$Ju~ILy{|u*ek@C70ju_XcE-~fKBjM7<8}>%#Zq6OvTDms-gA7 z(eK)$T}qB1aln7u%Z2ojC092GwiSA)V53!UY1e3bcV!Gv{ixcvEZHh22P7E&2>6#^ zqzM=h%zJOSUN}%`UevF+Iz93O9VRw?*Io>Ne;Zc(q}TxXTanh1ngKdzyGO48Rt2fH zGeLz!3lZ1aAmJ*Ba8j+XaDt!N;vpMppn^7s{xO|Gt66T*x=PV)Wt#FctD&5y2H|7o zY6-K%GH=Us_7poKDA@{_+5jdUsbLe03NWcX+o@xR2@=TrxAh3&13Sjj<21-Jqx;)F z=tdFfe9pD$>wfO1^9(>p%KctZ%2m5}fbufzh z`zQ1~1wA)Xdqz$PPt$llE-k}@51z^o2#n~MuWdL)mtn?cRM0l%W6jdHabIb=@xB|g zn?fA=hWb^|nKDm#MMf+K!tjnHZV&`aSYc6wm*pqAW!J}FiQARh>=#Q_PL;{l1_Jg* z0FwY4C+remjyMPnKwI`_$^1}Z>dBLU;evRTb;azffUFds25_ger&&#v9dZ|f1w>gk z^;G94ZPa945C5WwS7|)=KcUtq!fmlVF=2K4eAy``mO~4#A6e>E)#+^H$I1u`VOLKa zBF98^ZrjOEjs2bCkv5PGT1Pg(=){v+_4O{sKx2%tj#2E%ol{v_lly~6$KwdPB9Y@% z6T1nR)Q;j&k9{r)xgdCKq37_zfk z@o}KHLuoh}%BDrY8w~^EQCf(IppN-`qG|zqt$-*bF)2~hdgWf6dALX9P3lxMV)D+7 z2PImV)n!@#wlOOvt@qI}za7e7vjlPB1P!rVoh^!Yzo`>Haw-#-D)n@x<0>wAMbYWx@e0=yPpm2M2DOE32gD3HDMdA zd7^mlP|pb%q~2Bj00+`AvdaMnJTdpwR~FT|ClF2L020ES1F8_(!M4vbm+^)hW^9mE zIbf^GP4t5NWy5gT3N_*A%T0zVfQ}VCYCf^C*W$}FcJv%lr2KWwFk^52VNCx%)ppOy z9nc|uVa`q#w2L~;6~u`w<{cT8E3$_t>ZUcH_8}8<>DB4TqjQN$L(Ig)4#?&Nlew~o zDFkqtJq*aA*?6GBZ%4*HK#~0khu`cUf9RzD5B{v@q2B)4{%rK2VE=ej@-lzg^H8zB zl^?r0)QFELJRFiH8}+tvdBva*!wf9P;b~T6ghF`efFZC(h!i9>D@5Nd`Jumy;JNWx z?!}9h+$`PnQ--gdJ*n~C;N!jMHwfpQv%G|y!WC6_P;CxUSicqynZ1cgc{BPB7q)4X zm()8hrddbGTyL1CUK)SmP5R5;K0G&Q!&enEzA%n+Qnhw=M$?fqk7yNqymzi#?@qp;x6 zxZP(M^E}~1dvzLgsALNGWPPKw6B~k0ftYokD~sx^Gnc!tQa-70+d-`$f$Ff=qZA|i zN+4OIQ!{r+DVD{(vcXfenm)FBFqxrc$Urj7$G@eLndEEBQ()-|HwbniMbd(E&X)CV zYRtW|K<*xK;m!HR6syn0i+Ht!AJ*ID7b3`xvfuC3C(PiPlF16-Q+FpqTZKIk+ zOq`ib-#@taUc&}-TsBt}7fx?IS!DN5)~TD2Hf)+8&7pTEio(~})<%&fCc@vUMz)Y? zX~gPb(?m5?uoK0es8%^^pFNcc<3SPkxMc}Sm_2aHhi5!gTaN?euJae}Ter$M?!^R2 zaGg7E$if#edBW+XBD?;Tr8)aDI%0~z=9RnyBn-Mlm|nU859m(nVtPfjPvDk){9OSs zhb&=~gao&1e7QxRw#1T9ZdD3(d2#&3#pda$ZTON;F_n5JwZ-a`#FUndwcwKCqBNxn z`gXyr5GbOqsNkY#Uk|HxXD5m(DG(01Y~lxM%2((4#LEW9JQ0r)G~5v+`6Sd#G8!H5 zghtZS=X{Rm*Kg((7dg}aeC6hKIAC>JimC4h@BWN2kFT9qiL0o0Di))*NCuG2IL|O4 zC$T$Syte69-q%9g95Cl{oFRWH_bq8T(^G0{4T zm0q5x?9q^tHC<_IrKaU0K*Txb3y1{Rb+s$CUpqv07OCl%1h9ZQzre$I54&SEL*TnY z$VAzvT;{cc>8OBE1^U}_Qfim>DOmNyF;1mA7oZA-mA znRmXIYoRnSYswC9&7i((GHSc&Sjc87!a^*6w|1ZMc8SQA{k?kJ(3yg8YIna`ABy7I zo|8L6W6vplL|2ujL0C~#7S&ZQg}OpWrw;q<>Z{V$ZrfGlI6h^8U0J$?V^(pxNDb^@ z*^(eXYL-cz&9p^!qU1II`l~XmVJoY&O?kUe z5XWJ?`>%A=LM#|MGbz1Zi`h$IyOqk5Md1XugK5AlS;fqR6&a$9AFzXd|3|N-#vOLd zR061Rla4P)kezK+MeNGYk)NbDS6Rv@`m+? z5IPkBzl>Jdu^F}IjM*H>ft&&#*L4U%V?Z{!n4pA-VP)pdP8n8}A(q5)& z2HOU&s=Ia&Rl8_E@dWUm99|xS+WntQ44#~6<;^7$#jr{|#Rf1DZY2m|Z2#0_Ll>pF zz|4z+)7XuDb6$LTclcb94ft#_J8o$Z5jIWI%oCj6pXIP&PYoc3~$?BJ*ZYdW18098O zLE`MBkC%ILv=(}P7ZjYLY`j(f?VqQ+w_F|_`>6Tel-$HuyD!B>P6JxEepB`h;#BTV zXNVWDG|C6reW}!Ta@elOf-ld0^X(3>hGk2u5ujl)84uGcOrBvZ5GTM-g(V_(5E8IX zM!ev1=A#ZX#x)9A82Y8#xfLDfjA|U*xTitz`t*s&T8;}BzCLhUWUa@95ADH6DUXzo z=w=jV7|TIxIPGY2ADJq~(Ox zE%}Q5)$bK4Ev1dvGC2i%;#z?Qt*y@Z`L#$y?A>I~auK^Xtgg4c$1)W!C*)dn`cbP= z#G88wxstaU#d=qat<=nuM#J}D*|HhxJ}qq1;&CJM_VS^xGiG`H=5~Ec{F&;*b5q?| zrPtrYosOHglHKXiY1y70``M6=bji8O&k6%p{x;9+Aq@?^R}k{!`o5z@jq>{Cu<6`d zyoUAKf!Qt-)<6fUk(JF_R9N3?4>sf=qq;ahs6tx1!a7^N_YXrqtV_oNLX1O=>M#&X zT`S}RA%+o1r~5)ic}hb~tl8(kw8*d*`FLcq-Qgu-c#{EvejCH`gAI#r&OCHcS1fhx zlr__>GK~vkT|b@ETextZh0Djzy`On*s3_k2oc10pvIV1_o#Sz%4!@*7Q+x#-iXrvn z(AYRGo1tYhkaioyH$7pjkI{RGLywTXlB+t-_^K5cL2VRQD9oGqq9*UIalzHoCb?Lg22994pf7v*ZjrnN9(qp^MZ(6m0jrrjGWKo=abK(c*CgH(r zkiPcth{>=eKKPXr)tRV+KKqo3eK?4PU)&a$eGJ$>AiLX6+~avV$ryjg-56{{C?;Y? z6_+p|bSzagW0^hn7HHM&oLKekR(8jU$24#Wn7H77wn@MwWbQGIF@Jd&0PW_-zx}YURT2`}6iecoynN*+8k?WD2LHhew73wK@vUkZv6Bb**bKIP zDw0ouMPqjp6x4{NHeQQ<%iI0?yx*1o2mvJzh40vFv~XJq6AwyfF^ic(X30^hX&i0r z46Fq^z;{O>0#Zl9ppeXTe5F5vRkI7<>sc;jMGBbTlKq2ue2ckShGec&-lL)Qe17WneNc!uR@N$QerSYmae7lOlM+z3>`43A*I>GoY; zSN*b=D}H}3z0}N@G-;!&_puK%mFM1WXZyIi(P{HK-mo@vozUM{YM?Vd8_cbOhFS$JNMM zFgkjiDQQAZdVTk_F|!+UO}Q%G73NCcV}%5MZI?h9WOol9)l2rd4j%C$p9{gz@QuAS zefZ|4(8yYe5oL$8bz;+|wUZk+rvFK9+_ZL5lP1#ljcOz`VU7DVr;V%Qpy7a~JU7w{ zs~4Zb=J0);sbrNLmsW?#rLx7kNm!bqb08QGK0D4h6QS_x?oMAj$21ym z93w)O_}Z0lPgr5TYFCRqv${@~FFlOH!d|15$ne)oJ??mwo z|4DO3PO#5}_MmiSti~8FdseB+3FT=p2bKCqyV;P%DypS`C9tjKb`sTdOnLcW%BzfK zPKJY?AlZ$8+nGEU5LDq#Xz3kL4>Mh1p?pYZpXq|o!(<{GiZCRiCd@uO8>YEFkXX-= z!;qEza`zBtk!o8{4A|#9lqwpH_l6 z*e!cHW2>htJ5pog=hV#;>eh~o!Fv7{_#a&M;}^^#g;|A|mKSDG{0bT@<}5lvxFAGe z6&dy(0!`a~Dxkp1Yp%McL6~_a&XON2MAHdW`~+>5?i6HL0*JQ6Qu+N35q2<1CJo4D zIkjOUPT5q0855NFuB?9Z9m(AEsA0cdjvdC?%OP!QR>g59hq&y4j0vIT{t8= z+z<}QHid-qTUb$PGC@C6%3i8!N>N`jm}^`yha2Sjj$7*dPXz%@;)$AYEWc#%X82iD zSn<*&%f3DuUtet)7{}8%QNF56i;5cSbC>q|wxWpUxy(2}V*`yk@9RDE_cf5@qx5L) zkLFWx*+-H#w}qCuVq4%UiD3m-OvB}~TMl$`PRq<=Kc1z1e-JB5YV_P+CJ5qo8vDs+ z8njb{L@yqt91uEEX~F1mt>Xp+PY$f>84(`RyIx~4hq6YAY3bNZh8=~Hr*KjA8`#0g zH;OrS_(KBWlLXn4UWuKSJU4M&cp&U!51oWzq~w;q5r% z6jX)RW)n2XUUT|jOY$SOJ-hz`CT6KiSGh>UuS^@XtN5d~UUDrL!!#@wtXW&Qbt$ha+lt z!^Q-@B8MHNZA{9c^q$8R3>eM&5|a8=?bU**zEaqHI(vl?S#xlgQ_2ODX7% zUjg1@+3!cY_I1%lS50l?^10K2IWs?$q}A;<(%x+SLRzU)qpI<=SuHww4P$eM%$Qi` z1N_H)*rU9Jy_HTNN0lw>%jKvltWH*ErZ~jZkLUQNK`i_@{j_C3I#D&+M)D@C>>`F= z934znm6^f+fc_a%I@!J#-2aCiY9~7Fl(6_8j0jl4i2x_)Px4 z5q^i24?kjJKpV|B-Ht8^}tem-w|8wvvV){GC zmv+X;+eo^~uH|w?6%y(d@+Io5q&-inrY!78M~m{}Xkh@7kmF zO{^h3D0G3I`N=}*s&8zu(wCcxDw}=ML~d%6mfp5)owT;>Y&xdF+9ju{o3yF*CncT6 z!{WP{g{RmW8UFmj2*RyHl%9K0L1p;1vu-x}-IqfFk#at->9$+2RZ zTbFtxCu){xvg){Maslf-wuQ}>K122lZTxdbSp`aPxyFC7fL^%A5FFAAhWsz?-a9^u zs{0?`duL`hy>~)72|Yj{q4(Z<5v3^7LXl8H3B5M~rK180N)ZVwVna}hilTxIDWaf) zh%`k|$WFfRb7$`CEb@H5&*%I5@AteOH`!%!_m*={eV=pEBVEXghV$o%<7L>WSPYq) zy^i`~9^ku_slb+ozzS;Y4i}yT(&R!+*(7KJ-{N+a6$1mY6k!bvOU|Y+;cKumgYNTS zv-y_2;BA+`6zB~7a^2Eb0-XUvULNDuqGhKML4Nqrc|@RgRQ+gO(=DGvGuhB|)b_r5 zn}H)ZA3vn!pkbU(803JI<&fOth2)-zBw?2_lWO4NbNJV^irP*`mhy$8JztBTvyt`h z2l&x(4p_G%%pe?LqhcY|s^f3=;BRJVuhFxP-+(fszirMp;BP*sDz)-&Bmzy8fM- zseGF5c{-0rr+aSK=X37&W`ldM?)s}*@lk!~Q9YLp;gjhGJ*n5GY%#1i3$*WYOkwYo z-pA*7r@rHAfX@l0M`xSP8pyM?)@q*Czn(5+2Ojb?Rk)(>G{$Zy$Hv*d^N^>*eVz`G zPdoA*H}N!1#F<@O_8bg#aYHGKriPer6=S}o=e%PIXAZGT%^VX?E3Iu$7dj?*pSCnV zr|szo6n4mTh_Ts_(y`vBt+D-VPgi!)e2tmpmu@%a3*=?=Irvlr1))~5stXFD{KF&z zX9u^K?&) zlHt;A*>Flui!pB|?HlEj6u0sFj^3=ex7(fPOLoASW97#2C3-`d8^`pn=ILtl#9c%^ zZsZn^!aWmrQOholGWSSij|g6nV^UXv_jX&blxp1h)WpHjAF6I%rH(BpK*vw7&FUfjSMb($^h=cMxV~qk}Xdr{A#92&uu$PZYp0|#b2_4<+8A>nP0=|AfOl_);7;mnsWR!HC{G^gj;Mgxj} z$_S5E+pJ+Xi!XL!L2TM5Tzz8M?MX9s=uhe&Z{TS?x+#r1YFeq|$|@GtvQ^2qHPB); z_TD6-E0H%KXod=;5l3qK5Soz`_TbZn>=*CTBK%3)W6B0|Y@!}9HaOA+@6#4N#+o!@ zj7>CR%p@PjnCmd>Kv_>`oGXsUc4FoN(Jp4*K+L?5z2_a>LbnIf=+JbCJ5ueRAo$yQ zxkCkVkX){Q4`^lLY^6R9(@PK+Y88bVzrkj;1zF&~_Cjz;NslE(R85C=9*K-t!20QejW^}=1kM+Z$uCl|97h@8 zRoesSSOpazQmc~x&8Boc2yYUT7I6?#-9t2rci7zj?v!W|L;(M)X!E_Gw2x5_AOtQV zQ4}o80E$7421({Mq~s+6-ZH;y?HSToa+*=qF=y)A6)6{n?$hhPrcv?-dJzYrsBL4MsRg?=-Y zj_qVaPzUP4k*j&1Ra3RUtY=5{X8(FN+xD!YeP+!$-!TKTFlp7AbB%Mw4GdZ}*4SS@ z&qg?YMisaRpRaYUxE`JdM+zT7qOb$k9HtIfx71uGTwk)*W zvQpcP$D4ThMhZ7U8dfw(5he$`%px@`FdMmrc4%)@AO)`hua8QMsvK26N`1^-#`uf6 zhOJUJdv9{x?79RMt_!Ge|GJ~```&|fzo-i=@r}Br^e?uE4#a0Ui{RYljWIxl5ahBr zCcre+yzk0}xpS>Q0Mks%%yJ6*Gedecovtj3T~Rbh0*!MCX-po@ENJV_7^;Vp3PUhc z9X@t{tyewk_xc4e?b5+uq>dN%Dg>l|%GoKW9@+5rp^p-xJx_!bj_t9gZQUkcmFz26 zRDOH@iXi`v%F+SPRAu{|E;S^wTl+04-~H@nH*cGnHeTV~+eALTt{c~8EI>@}k8hVQ zc%JiGS=;I~d~5KROzGFDQEPr#nLj_ZO2wtbUu)~N2_uh_Zv_e=O|ZVu1OT{_p=(mTHL{f6VjhB$X=JA( zf0#wb*0Y)C;NlcKmx?%D*8aiBx5d-VSNtPK78)B-pVS8NEce)+Ev#fcD|A76R_cQE z>_^%?b6gj6!Sbcn)7HpR7o?{zXdlX_ku}>7Pn);NdOF}73g(bj=x7O^(H5OY7TPD%>H&M#B*TFnyNtSg-q8`aO^X4dYwXc5=o!I7o5DMl7^Hl7{T!`TLduQo{C-n}C8XcEExoY)_>8INtIj;It_W zYhkLLnRdLl8dXxEobsLLP{+CrI<{+AuhY}*8`SAS|M8YzvkDDh^rJ{Cd|$0S0d-I+ zv`u~T10ZywI4YJFsz^1&oHGz#?cuIuRK%(zYK7u8&7@nw)@f5nAC=%Un}`R2!#*hn z!?k5dC8KmJwg>+8Jn&FZCF;>ZX))4;M6{i17m!X0rfR69c(QqDzmCuS(69f%4bME~ z;(k#ZZm;aw_sI>s>@Kwj>Ri3__eL3fF z-EJFoeKF_BE7{3eA2q07)TjX;63N-jTeIue_iPT~%7NY8iEahzPS9c>lNR6bQkUgH zl^W)QPZu)8>B)vcN{^&&;~Anr8W9xOUOwS7ir|69cjh~0VH8jkMk#krB!a+)Ay8go zW{-)P6|w~5yO56;LDUWp#%J&YN5PLA?kEdSus6#n5hrF3J;+0QC=Qss=l?mi$jt1b z)CM!N3w}?WmI(k3idyj5)NPLg0Nm}`@X0SxV%MLV^2lRzAMcU95cuD?E&AO#iaH)O z`ZjsKEfSesP1;Uhs!I5;T&dU(S}9}#b_~0Lb*7#}1rp1nbJY18cGd7w6*%rO@_!3j zv^+_smx^>ewXC)mPm_-4bQE-@n%2c}*~OI&K4E%@%F6NBa8?c4yy0t-9uCr?Zflp# zQC#pKEig_1;|R?RC$L5DB5EMTBI;P^jxHncS^)hdn0H2K$Rf`muqWEmP`jik&wP)c&BG4DGU${tF6q3zD<(X8#Es?dW zj?uDbyR_P68U(fI(Q6o2_U3x4DtTg1R7pwh*|UzqVwYFqBfGB}#+uk`EFs5I?;>(6 ztD(Bq26uu{of%c~a?SOX$HdD^^72`qk47kPwqmhzMG@tNPdy>3JZYK<*~R5iI?vL~ z+!+ZehH99Rm{B>Seg-lxqr%+PEoF^_WUlr2L-ru6*1t44v#RHVnV3r32lnU<^?#9= z>9c>UhgGQXU*~Cp`-mz}u6Cd>*o%;ah3s!gH&7u8kx5;QvL62wd;p?MJdXT)sK z_gu#lm@&qYa@CkkXKS3HEYO;bl+!eun`kC$jN@cOYs%Tkbz?`=A6-rHM0r{_8|v8L z_19VUcA_~iPzwPWehl8*KaRh%=?%RA0npqC2bo)kC^u_jVN{L9x(c8F6*2*VC3 zs3#-@gr>YNVmw!d91q<8Z_pno9Uf~lVqs*(3JD=bVZ+A=D#j?1&W%x$tWomW2G-IX zMS8gmn~3fdjpAbYh<=GXg>lLgeZxPK1vx|Y$`XNoGh%#(=o5lN$`^6oQohK5g|D-w zOth$PSH@m_r5Ip0TPy_NG++Jj0|_8MqDd~?YF zqa+%4)YnI-eu%fF1JSwJ?KBXbPH&|gAE$$GkjnLn2shEUa>AWiMK~NXv)#)w;WtRm z%+7@0U}NTP`q4jgH2pZ3`9&sq5i(2ZU3O-pOkUtF>m_}_L%nLOJ3U;C2>(TfC4&ev zD#CR((Mz>V1kFotL7tV9ti0S~Y4wqQUSZ4!ym>tQ!5rmdR)X@ri8WH&ceP~m$R6=5 z@$&~0mU(Y0TUp)#!864j0M9(><(bwUkTDr?2Lul`sCOv5RiJNBowRyHy*L-il}ds# zhd6E-oIKc~a3kYb$Q9USBv%@WQ4q5;buFXnoU4X4%5au#jbh3SV-#_dj8TRc$x)GCu1)8>`OyBVJ;O7DPWF5H;G1}o0M$aB+Mqqloa`%f2anYF%C%zHcEd6TByjJ zcJ7pat6XC>(Q_92fxnf0INWA!zK9`JHui%>c=uN**K`%b%x{8Cto-BZhY_LBVm3n@ zUD;zaB4nkw`{3f}7OI`ay^cgQAm6ysJ^&rdJrLzbnH$AXNVkm=zrj%evl2Jen;HPp zC)BHkWOAP};!q<2&W8sAaBcXYMcR^CPaB?N>VP8Z+mU&x^)D(r<#kc#?#}BI6DL-= zTa{0!a;KycpOETVq`vmz{o7RcP7QjIanZ--#dpA+a3U&Y#U?n$A$N>)V4-YV5oD<# zT6dKGMfiJgVcpqrB!lQBAzWmeCxAOy7tzhb1zHY(2ygt9QnUbah9VjR`v4LLQpP6{ zTO`s$;_y#@uJK?(_SXlK4#Zziyr_Ppm;5U)Tm5LqvSnl$QgpGcpjsndII46eYe=Vu z2%xkOqR0r-uH%HsKZPh+X>RGg2cDsES_-*jL=p>1r+DR(6?c?gEXpswukDf}Itogw zp#!UF=UBcb`817PR>&x0j>Aj$7%~cTbeU90-m5RQALWQ_cpX8e* zEvZ0S2GH86b5JM})z!MROY z`V(((gnRy>Jal~C$@tuHU4I7ageI;o#X5sfC&Fuq%5_@q1EO|uc2fNkh7yrJ!nbs* zo$zxzvz_GUcH$a%D@C{i7^z)?#Hk8p4v_iy|EFWy{l5SAcCFb8maDs13;h@Nst!Py z-kBA9E_;5UT?4OD4vTnIHCj0k4#TlKCM8*cY3btx-6;)RE3iU%G{n>SY=wMUsE*{Y zl>Srf6IE=)(->RqQ#rvyU-bM#+406G^f~ZVw0|_0AGAHj^T6BeCZ5O0dSn6(W zW<;C+)4Y(sA*O-J_z@qZX%JA1CUIz8;@TP43zj4+N2J| z_X+hQ;`@$5p5&ztLAWHzq(3DXbe<{BmAt!Tr*_9KgNGmwOnSBG?x2pPF`}S}<>Ksv zK`W>PfY0%_^tt1nqzTNRo}2+2%8(^2DbCVWq^3ee|5c&Nwo{J}xdrpey ziaFwY8mk_noLEo}c065gsS(;I61nrv2QiaA8nk>PPC=@df^Ovfm6%CF>3LIv-N6n~ zf+0fWAL2MD#UKs7c+|qkGpliG6ZO)#Q(Nn`PtUC|GtH&9e)Ep!I(zp`)U}S=cbrFk z7;>b%ntcBPs=HlOlZaBn!Tp?w&6NTEjGGyc#851^I=vArRq`Eiq2#=U!c44&DMEuq z#VX$vZm;VPGj?ZhbX+O;w`K1RtjpD{)uuN{p-Uc0#ltzsOnUVB+9 zbk(xP8O@%?IPf`Q9C%>KVGW)_BfX)OS|g1{?`i4vPd^9rg^2caF1_wrgf1`Cjbnwo zjA4hPmP8Efa5@?vhT~J{)5jv0La`WmmEO|h?nsBow~WlTSD!$f(^k^}NOoHlN*^=` z;mcgEOc*7obby#&7N8Nvu+#SqDSns^1Cz zo-6KKA=_r$6x@OY^QMI1h~^2d-qU!-vDdgM2-Hg(23(zLyy6aE9KqEyg`|HDk{2E~A%es>u)yB8#;IiP0#(L1F6>tt2lgw} zT4NN+Q8M%fR4>*TMa0yX3;i=uuSqpE@HzfceBQM5t~Gnw1LIqVI!;;NDy>5Zv!D@Lhpjy@gr!b?#rr2*Boz~{Y<&mG^0*&v>;rHP%#^Wb|! z9mnvkroLy%Q;GFNbqwWW=WOUpVif3EZfz>0jTi+|G88texN}lF6K|vv>kbVNg){+A za#)5MK#^o!B7+bz#)euVY$y2yg`o)(6D%l4IdE*jorRwz9j_@0%Vy}UYks0clw4OL zcChltkL%xI38fd!3LZ)DdBxg#Aoyfp`#6Lwy*eqL3TYQp8nbtP6kD-wHEC~13Iga3 zxJx*|Y`9B=Z$xtlN^J(5P83f{7YPye5+CH#B#qpa4l8ry$tw0zA636d`m79<`?yY3 zKoY;?dHOAH$q!a$$5s^mKp~K=I8OtIMtDYnLqjLE8$ert7GTAcHEBV_6h)-kh$)VG zgwYd-7fRo~7)8ieF$%JVuNd+bqeS|QLh@CN;wb1YDrJ#yBI`6g&s{igAF_PB!GL5h*2oK{=TJyU=zx9o1zHVI zcM5bVmn|1w2w$o8`M6X??h!%yNitb6Z#6=sQXp_@>p2@?hwFmm6@mx(#O2H)EJ9WQ zzq>W|z^cgsHh*A)S>A_^$|Lo{)>U9?&kxv zin{EI#SFyQu%1`5MkXgQWv@}yMMU_-h_Iwf@Pxr_Wn%sg{(I zbS(DFj{1*Ru3V+_(9loRje9=fEcUG+{zRYqgW+ZEh{z_zWYRpAe1HWO#)l?-s(<_ZiZjhTEnFc1VJo84 zt6$gX{>U=cx7++Riqhs-ccoZAd}Jt^-Mn^6`SfI3$7Ul6AuZeLEtU4pct=^s7&o`| zIuxOIxtkVE(n5u9Em?x_2$9hUz1UXK8epCPADIakGV0*NzwB-GCd9jGGNKBWaJ`y` zlb(hWrhN0^m60F6*sO6%UdF_-Yc`kN6cqj4j#@)1=4EXu6L?seS5ot}52=u82;Z)J zwf9N)$DGBy8+5cQPOdL3h)icyoLnXJtVuDD@+n??g^zk-om_B$!JiS!w6dg0EAcj} zphGNgEez1lsz~*h4Qq0de8n{|F4?{UfO(@u65#T@^|G(0__-Rb8?p0z;n8MYpNxD1 zg@2+ot-(v5m34b}4xKSqf34M!C+F$U z>t}mUK|6~#PNPMgRht?;wfY>h8C_Izx z4)Lzqr{)ZqIrdPkQU4Bx4Jyw-T4BX#%ZJ6H78HKRr@0_u$gnOE&)-`4`0j>7%7knV z89ORe;eO@xPrm>9$GG2=C;Cj@7Uxo)czp89@qRpI6V+wqZ8}saYQKDYR_j)++UU3R zGz`ep2}>8f&Q`{PqrsmkG3yMP1G>F$EJFTv5>9c#u7tSczxu?QN-H_{D*WK5Ac zkEC!v?_y#6KH$#48n7_MNlmXv3{e0&HxI(M{P4o)U6J2>HX==b`{t^1LxkKNKXv}= z)NJ5~z=hATZ!ZRUw*0DJN3*M+SCGtI^a6SgtT1{GK;O^?sw?4@8S0L*d1ZWRFpA;} z@`4GjCLKstSSKzQ6j?V{5{so^NiI;UHZXL{)@RR0 zONlyORa_HZ=)d4va@VdA>dM!)2bFyBkm7EOgCCs&i926%l=dwe^=3!!x}qW(1AAzasjEXPO$CA#6^Gr-%R6$M4vj&Gt%H%Sth&E1^o^ z)1wiEPY+1Zx4qKMa)6ogRbaZ#xX8;~4o|t1qihaKgtkCvuo})HeBQ$N+;Oh-GS)pG z4^0%&(uIcXCLeg(HpUwvbW0&Hyi<_7lw#e*p&A>OICk4rFp2B9x z5iPw$+JFLgsp)w7UE^t%Q>x3SEwE*EV{8+#mTIgHI?s4@5zBFyC}crgbVq_DV$R5O z(0(^oP0uSAG5Ui!097okHBJV(g5~kN5j!5Qc7+9DK5v~&@HyB^LgO}23p74Ok7@i* zz2jRB9U%C~Plnw-1`qvvVtg3b;`spY__jEh)Ptts`2y`{jBmu&#`A-yW%VHHT9bN{ z(aXq1`(yY9$E%yY`(ud-E@=LLpuSnUfQ4U#Q271 zW4v15JHEC5@#m1GC!Tj<{`bZHlb3_`r?q!{OEU{Shd8Eq-msZy{)U}1UY+C}-NguA{J(L@e=gz!~LLM*xcoYiIkp}l_!ctvvY^zj=$8P zWpb^G(^C(jF7$#oj)s2_c1T61Jd%jNDR)o@E*kpHlkPC1o<1Vl(#tADzx* z0%luJn^!d=h%im0x_QL~<CNd^6RVZ*RKL07k6}|rF z*+)N4h~dl8x_QlWaO}CZ4bgiCJNhvSGa% z!6HDQELi`a;=Io&=zEzC5HxwN=sp^tw^=4EJ!~W#uMZ>LAE0#Cieo{aF z%#|bBkacPp%2q~)saTz?-2(J2R>vH=`mr)Xy9}GWvVg&dDi7AYfaeIG5t_w%P-jv#~We|4hTBMK@sQ#Yy=?@ zL^+yf6gF+5FAX|`sjD$2vDj>#qxQpU2 z9izN#I=^vGKlWwMKlR&3wNm{{R#pEJ-&J~DAI3VA9uz0qK!8&a*Hy9`hdPunB}J*G zG*&t*0~FU|(r7`((C-y zVaVgn+Yav6GPzPtYFP?!I+&-sdQv})*srMmBKzLRdktWV{nBA!sG6&v-g~k{w7p@T zQ|igmEAp@9o(Wd4Hx%x=ht!Ti@1zv{zzM1yQ(9VbM?G750W<)#N=Y2uOwYIKFQpBf z(@{YLHy>p_5mQEy5EepJbZpu+Okj#dVMeeEMCFrMG}3UnJl}?7_xBITPYW;4f)r&_ zfO_c}EwFBVl@;-r%~O+FV*g7Hsy~;$u3Z;rohPvUwgnrS9o8kE?=I74|ymcI6w6(bnqGPpl{)A|vd)nc0_7hG$|hHcSc#KXh`%LW4V|I!K2yjZ z;Db~Y%|LCqN(M)@^fj_JWmKaW*0I<1f#VR>FVzK}@u%;UD6^>h9me3LJ1}E^{Dwl# zvd)-LKctN+$FqS(0Q4b`1RXI;EtjhBtJhfddz;y0evCr@oj+0Dmh%S67xS(l_UsqT z8y(K@zM)(f^}5A-;1BWr{jk^6&lfcXu=3fq=rec-V$iaehff79v35cPaMh@w#ZiZ1 z064F^DZLcnW$y|8BT4*f^nru3F*ZmN5wN$^EA5$2p?6AAlfD$y)&bOXp-{mAWx3ui zo$b}vFZ*_~pR4Z1aoZT$VH``X_{rp(gg{3|+ z%g@#dG=BL0WAL3^yVhzLT7inLlsJ1};sln>N%%B_76hh?&I*K7>c*Z<$LTp`XF6d= z%Ci#=UTLKZ8;o|!p-}NKoF1@OsKLh1dw$Vx@T)ieEOn?&?jNKRG`@+t&*F3ti8Q~N z5HU`|*x-!tKXrki8y9#~JA)D}tc{%#ZDi=yMAH(|18u=8Xs%wj94b;Fs7B47>AwsG z4X69u<`>dE$+eZ~=_NBh`9$gPp;F;E&B^TeiaEhbf<{32)7hAli)vud6f8^6^25m8 zkaRsMJ$D)fT*&8*HqJ6?32@F*&2~(F9w?; z(kig&C%kb`pM*Rm_oLTkis9^+Cc{994>$Y&6?1;DB%d#9HmV}I-MG<5G6NP z`Q|KR(V@HaE3ahS%~){`{h)R%TDCLuuBUf+(cD>UKT?`UOrAS))kmr)KtFzIW2s}Q zvSX+A^qprnF-MzrsF@i1%xi(%?f3qYRmH)cj(+cfgPJ`gu{ZSvU5v+GoWfqjqkBR? z0=0p72;&s_2J+^JXp?*+>{Yrsu?B#R5>ieeoy}eliQ*j$5{|rb@YbY95==!zjIi1q zrOCXV@jdSLtf+r*r}drI=gyYxcBi|aqCL^)h1upk&03(Xm(5mSIBncS{~d5GnVa4bq0R1{6IrR>(V7f zk1BU^bGhJzy)0tO^FI!b4z8u&IhmoC{T!AV%j*O*te&8icz#>XUu$68%A(c>23au6BvFW)1iq3T%}PU(Iwub zSLrWm1Luo);th=AWD^tqB$qKANPPDTY2mjrFuJQx`Pu$%2T5F0o=UJXO3_1i5oBx;mo1bOF{#QS44lzv?o;C zAxFB|;7rY#;o>|iB-mN2amRka^;ZsBPyJ++=*7op?CMe7LnxF!UFSUBIeYq~7h+IY z(OEO0CRg4p%X#;9?NA{2>>Ca0N59G<=PBx{xt_OjY7ZL6mBsAXLRI@}A6YrS=!I%N zs6Gn%!;|hP(c2iY8WHD0S#XP`%L`z6)1wVl7bpf}QB{-OGxC>qq?*$=#g=B83 zhe)0hszcL|i&Ss;OW>`Ji4}EJQ6!O{ee1j6kaPX|`31~7JLmavy?(zN_RPiDVY34L zdv_VIB4Tmd6=Pls3+dB)PJ(ts{bu{&@m1d$KlkKlMeVBRYTF8rjP$JJrWMQ3|=KU>>4i~xKNuJ~o zKoj`tV{Dl2`Jv;rZpFW|hP>qdMZFn2uXwP#=s$T`t?kSJcDJhIaW^-zez! zmRTz^lju&wG9VOSEU+f7t9wSQi=H#QeSSdbQXFRt3fdG#Z;d6T>jc~P(G&#W!p~3o8wKJq<8Am5~gc%h=DzE+C*^~e@-6NyG&4a{`Nb!R-1Fxdz zjuRIX#DEqApa!gm94?0aoq_NjH7r&;C+aa5UD%U8ZPbAClPfg}4CpvszmXWSV-Jh+ zoCk{RIo<#E>3$gvQU|u#x+Oomb=|zgjJ_;*5v%BCp@%VZ!M%ahq<(FF|9!tU3K-Ms zBufR#Sa?=J^xl9u%|4fAjvI!kcvdF;!nQ^&dSmmd$ak;p*OZWX3!Yp^DB`(j>;3in z_jjt@D`%k}?9`I$xYvqf1a4j=P!!4wAW9(O{#4 zXc1I1*g278=g><5UiO}d{1Gh@+|}plgdBTTU_EtOc~c{NdB4Mt7` z`9V;^I5n3Lpy=h}jE%zOjAXyQb%gsTS7%8-ynTo<|FoL=Wqltz7OibO-HvV4;X&=* z@!O73D$}mEYjvD8WoV)%W^QeZSIWc9$D2KmA4hv)Sz?%~FCy5{rYRXaM#l z7@5&t+L9O0N~`jwEZ_hXG%qFe8i*bR>#ojL+GSNS+EUF{>z4dgr7_x3A>94aLL~;8 zLn^c<yieL->9*3F%D38m#A&;@LuH)Splb=a^C1IK#=zPt6f-kZh(%N$+vxSW zV`|X$z{zqjIdsp;!sandGAj#ZCfK^Ss{QJhlo1ggT(M&Rg0jQ()%tB-y=q{^N@dD~ zG}Qi4x86UJoU5_Jetd8~S3PyqvhSC#!Wnxj6gsV0B^j%jDD-`}9jJ>H-ajIA+=lvi zH516~DyW^InKjSM%;`$tVwFHhHbckls#=MN4z4k;>E%v}6(1(~fVRs8kn0RfqYC0K zrzROsGRN(;t}iHsM5W+UIW=OH>r;9ctqm%}Lg%JWd-bb`z<~qiRNd~UO&l>JyQ#mc zQN>M7&qN2jwX^#G)sH2gU9vzuli9c9Zq7br>z;mWc4E2E`pdg+?=ZZ2>jpLALvzv# z7+d;j?eYtIzxH8OvVKIo3wan$ig)40KUVsedInTP{n3JL{n32Tl|H9yW$!^ydHp25 zXH6P1Jg5MR!LvmzZQ-yZ#$_QV$y7|wOI6?A@B|?yGqb~6bVhTu$MyF&T-)$Un%Y+> z^6ZsZ$(I)K-X(LCq65%vK1HpQAau}+aHOC^T8PmjFvJ@HvI3^WkHl0ZbCTH_w&Hok zz_s``0?f@L76kwVP6#{-UOv3RheV5+PS^ObzO9#^DE`=AaRpbtyGOJ<%&$3n{0q^6 zieHb8`A^65hNF+QS*fX4K5EgT+Yf(h>IBbyesHv^yuNXKgE45?eegx>dOdxiaucga zfn5^(AOcZdVWGN81yvyO1OhQ^54qn(X9nCMn^gjx)Q8)G)rt-zU`mjBUYf&75X_2j z@UeT3`JLB#bRWApMoqjva+6D$GGbDNX8vlqx}P14N;HYsl0iQH--%LMQrF-KW+AXHEmAGS1-3sCDErbs`}cQ)z9;K zB{N`B59l@e`9#>(TE89>Hz^a8ogc-lxHebi%S%>;-3Qb0oXl-7s)#GEZq2S)cW|Mi zK%-{hwO7@2+>&tg$Wa_We=hZ5+#(IhAccbzlE*v#OkWKa;Nj71Yqvw2^9a=sg*r>v#iS2ag8f>tIIG zjT8_&IYA#~T*_&9!R_^KVP^w&XZJ0l#sze`2<#gw@i~13HomR&tBJ9zg?ejWk}E5prG^}&;7WG`S)Et zRKGp-iFpZp?)YapU;fw9+xp1_y*gi!ack$yHrAd`KaKXjj-NDIEAvP z@)crY?dbV}E2UHuhhNdFfh%_pb5$wGEco5&|j*PCD17_Zl0U#798^C(*=S~;a^Fx#g(GgTGKtPBkTgrrl%p^VE%ZJ=S1~@p? z-g_9d=7P*Kv~JBiC$W2h1sOc=c6g+=o6T|2c@lx7Y3PK~VfS51F~hZXdk zlo${m6jbG6&7jDFOIwDojhp+`i?8zYYMr&Kew|%7MR9Ig$6D&|w5wibt)gz<(RkLZ znMKOPS>Nk@zESzaCoj3wE2mh0R*9rwd+1KO_Lht)z#lpVQ3V4{o=i~%fvpg?OnYB? zAsqPyf6_DXLX@`<=R%%}sEUCfDP%w^kv9XOc$v{A#&Om($06SeFa49A!AS8YW=Nca z6V(wIsEqtCJg)Q>JtO@uxL=)1FR4qR|0Y4>%Xddrs7Q(k?D`aw%lde=ga?;SCN*9p zwW7_87enti!i$e@9r)Qo!b(~!t>8`o}*s9E5-74c4OwR@emfxKsA z;P?wAPG!=m87!UaXC^+axLC^Q$}IZbgD279ZI}LO980~>p4HBK3XYEs#PvqP8|lRQ zZnAAi`XwD3IUDFH}g zVMB#!N8-pwSDJx24;OK*_l(NPn+)S;%{N<>WHR zD)eTB1F8Z6>kf!CAdn(mCE|fX&}cG5ePBf{Bg+EIbb9YuM4k&#n#`gTWg)TWkOQCWpGxPKIx``=ci z4?yG+@i5@&9#STaAmNEyD$d=nk|9 zgkoG?av?z;17Efw$i-D~sxVfdD-zv+en_DIpr>_MI{Jq@;Su`BdgS7lLW2t?je2In z-P8K~4Cq!r>tnMx|MQd6xA;MI;p9;>RVBqUR{dGTXhgJ<>e{n8V%3H0ZDv*Nw@6-O z?ql^sfJ6<4&o9L>*BxckCDA>s{WFpf` zQ+la}m%S%qevE;!?1(`;&=$&ot#4PQnZVi-m>S-fh*+}eGDR~;QwFHpQ}x|97oRM2 zIh!A1iQB&`3H(c&GGX=C4cP4rJ>K6rt!VMS40iS>{U(sNH`b3~3t62P6jlHG>I;h% z?W?QolgGEbtvc5{OPoPu_+j-GpnWRB-)V3Lp%2N`i_U<=5tU?7Upqi}@o~lx-ZRE3 zY+1DE445H01A5(|U=!%}0x5+$t57>k1)KD1;rxVSE>;LRrG3onT`nH*_gi;w>4LAH zQt!CNjvK!@BN-QpS`eKDWkF(tVvgaU#@(v=!VRuQ5#OuWd)6$=li&ps0dfmt&ex-O>@VRNxeM zr9&aeg$A0cD4KDVv=kP;=Zn}GkVPvq)f zr}WzFSmSC>JC#IFdz1S?LTF<|{uAQ$;Q57YD_~O()-92_UG#L3;FV{^)6Ll|FRv8T zOD8DtDlYcA(8`RIHGk$WiE|>3~yN+TAmJ#F@Juy-%aNjr8Uy^pK!ly4P7>%Z5U0*aG?Z znz*e%vVdaK@qROALwyAL+4>0hn-nYPQqD}e{)p;qVoeF8ym!L;5meElKLKpB-Vrt0 zXwjlWb*g7V1N|pYc$ogtZO`|>!Ib>b)1bho@^OwE8M|@h1e&0L_99?E6%Lz3=ueXK z76J$Fg-oM$kxT;@nxn7RR$yHrSXU2sgwY=XeJca8E~<8dt@T-&#MIz=5!@A>5NwwW z-X8R#PLi6Ro}`VlLLc1$&xhmZ5w2XP~= zl{_SCCI2EHsg=0H{6%&(>b`nU5vz9lg$W007;O_OLy%LI)`?Z7!+}BE1XKoq5q?#F zereR5QP1mj^aH#%V31|5JU{%-@I~xRR>yOe<>}w^ah@ggpAyNR_iW+=#D5(;3iw7+ z={0p5{Gt^cGu9Mct2PdPYq;+?+oMGcW-|& zvFfWM-n|;c_~nCa&?K(T9Cb8aVW>=i+Ka?vaMJ$B9}$%4!w!TmD(p<2Xe<7nR92@@K2bE-S3qmDvJQO%m`rx@pN@xSl)*f5*BK6bGYMQRKpS3OIQ zI3u**fhSGIed_0qHe&K9F#u~DuY@UrGawdMJyz(ZxJN+&qDChIhenYpps}H-dld)D zzVvF`Z~_q2Pk@JNP$UXHinE|krIDo$9UQ%X2tO1XndU5~&~1Van}zy)H^+sAzo(zt z8CCvT`7Jjlghjl|D!v+1@scMcYWb?@XW#jiFJH0u*SLUyu(|nK#(MqM=2!JAYZZ3z z{nadZ^DY**fwPZF&b^AYD&gn9FS&7gU;7rrr~2W%|Ai(hr*Af8YQ6tLranxJI=x~P zAX%>%J-u_>PYv$hGNkDJM9(*@KhFOs?g1L!;QU*<(Tc`8f1i8c!>{F~fLIa2G8ihI zbsdZgK=!i$D8;BqARO+wlfQn~rJM2X@3apaz?`3hL)`1k8&+2NpXb;yJ$J?|XGOk^ z_y;oPTu)#&LZcwA?=uY__@NIok$2N>`2!6nw!%;-NU4bA$*0+_(|6CX9cS)%{yAD= z?uF1Q@U8fM{YCNpp^okj0`mVarXa)^Sxz?RgO~!5CXxd<9g8&=aWX#hIlHysbc1_A zwmIF8@chX7VP4#^5U2D!elv6%#9MGqB;O@!)n}Wm%}^Xtn*qzR8R`F{ZUgS+)w7}7 z7*b^?A3wlzp%e=CM|V6woYiOWD5y3wc83O!90`TyE5?5R@T9I@^L(mDuoZ;FkT(l+S9#X%>eF9O@^`j+PyhXu^SZ~6 zo!PKJ(Z2ni9UruDA2N$qvP&!qE{|JlC+cJMlW3{Sv|q>usDZke|G>u)2k-A}cd+68 z#R*BIn`P$E#TJ1nxhYbrd9OU}P=FtaxFX1%ICpXY8?$#nz*7Nm?05kKWXXGr8i0@b zc!jl0M|d7-olrIrj)4md5D1wnPaA@u40b3YPtE>GFJW&D0|gemnswu~(M8`$oc9@j zXN|(X(+*Dx2$(Zx*M;;bjn!xVS)P}0@5WqY-J4g2$LIXrA~eqX^O5I}CO`7+fr`3X z|NJtb-l&=N7i@@PQ0`aS9@r4E@cu*?_t3NO{@7c6 zPR-lJQ#?QN(M^sPF8wSYor{$VW9F-jJNRN~G1On;9O_3oMP4#@G=rCapfeJ_iAuni z#Tkf3#8S(e97TABCB94^Enq9c%MZOF)^MG&V5oAL|%Me zEd+((fXM?YN_Dz&V>1oMupo2LIDg@tFCt>}lRqy0sBah#fXQ*W-?Pyl_;p>cpE}s& zg&Ccub_jH-uE%?i-xSS*hafD#vMps|WlyeWF|Cc<8$Vyp_tqd3cC$J6fklvFH&P|=73;x*jd10koScU+z+P*O&7 z?`-!Hlo8(BKW=m!KxQ}MO6kYJxG&;>HA{@EjCbxwM6qEj&(rM}8b@CQ61N3Iz;nH& zBB<5~6@x%@kz6%^H7c=&iz+L&262F_wEgUbm5*=n4>-|%AlI%OKc0Pi;AsDVR$c$t z_jQbahe0TX%hXD3c5LbrKe^}1mlgJz{wGt~HmTE0+0ACvZ6tc#$6*^5Vh4P4ROC`E zs}a6vuTcnIB%BJ$V7<=zYy0^d%7l_d7=xG2)eoqH#C}Ghf<#0#wRA^36;`BZEs=Do;o}QO<^gts%xhsFq(=%Xn^zw`Gr1!_yMDzZzt{E* ztbMC5ihHh_p#PKG=-|K`JJ`&U1)dVt6qc!?sQeZEFa0)dgUBaWyWlpo5w^@O$k_s{ zAR66q1pg9(NX}Q>ZTUvn*Yb_EQ?y2TOMFFbSh%#WmxU4Yw{H3W-N+_g$279B?9$oo zueBemAJV^IA75pWTgJ7$)^-T1!>Z}s{zkXO*YytcA8*9&>%G`^`p`AZakuPV(-w_+ToI3B%0| z{+DAWwF1>^+yg>ax^gKPuk6$M4Q|~+)rw9{Ek286y2m^BniLql^{wRRdJOS*b!y&j zZ0NP1f8H8f{HT)9c0x|-)K0_JbW!+wYg+W|(R#kdb~E0ld81amLld_04Ya9-ipYTZ zbEvIB3BLBX+$5or$TvQR@3p^OhW#ymU^PUo!v0pe-`;<%$nyuiBIEo+e#p}hScisW zvx;xk&cOZ#29A7%j^~Wnt+c-}GvZn^F|#1YP=iK&?vzjT-)Cmhn~bzD!XFobPUH4| z<^0JBKGn?G4L{tGPG}@Hq4e-V(BDmKhw9nw`mvEH1f9%k>fhT6L0|WL2cN*f(o(ez z<`_mkfd_3Nxo^_^5%##bN4)s*jBEQ@IaWmp#&N&nY01xcGBFo}%39&KKvezr zex00%xQg(nkv|$s^!H~4dvExc`qSn0 z&&Ch;GNhF6UFN@${+U}W$jYZOe8!8fx7UZazrO!^C$^^Jb+l}5hbrF<*kPj32N8Yp zp7`c+{g0D|!Sb;0PF0rRD2J`TzF!$@iWFG&9|3_EED(g?`ya$-AtqyaL{K}$l$=A|l^^j9}rTd(gH;H;AQ%A^mlE22-Ezy>{r zT~Qnj^Z{BIrvn(;%E&V-a!1ywORGfwSOt+qRud8!u6UA8f{x_*`0z1d+DQDOh{#FR z)e6x-W68CsrZ|&24BGo+RicRlBxQ7MgYIHwXgE=rfGU(BM+Fg0{E9q{oEikBi=|AJ z^h|}vHE+@T+9NGnuZ4FX@YOl{$8>59gi*tm&uoU~>r9w=kiYHEwB_m5XJ=(z@~Hkw zz=F8EIT@*^>Or3^%f8U7q;h`iWaHWyFWoFqkbd5Sy%K-=t@?SD_A+&v=TP4|r(HbA zlNZQZ^{TcP9e?@pKviEyz9XPue6UvW`a!|{1JQwu@{RtraXviP5}Do`B^)NgQv!R1 z*ugi~H?XzquWwjB@^tNz-vF3epiG2H;z3&mP|8#I{uCe@BOI;WAvPqu4>$KAamfzc zA>m|A6d{K`&Sp%B8%@||GrNs;IY$|Et!3YVhrWocbsePwf}ZJCFz_17kKyO`v-bMy z)iNhJl~@iyk>E?tih?g89`&!q3kLa660#ViSBQX`#b$UtHmQ;9@CMcrRLxpJfxNeK zzuXRG;{6W=UyRTXI_u-NP|8@fCo{-z{m)bQ58fk@`1gR*h`qakW`JpI__0Z<+CzT0DkRkjM z+zSWpq9y|98!{wpd$+!?}!o5CkGml zAWxo53kv2fqc|QM>IF6zB!%>B(FfRr8I~Br@^g@M1!xD>?h=*i2oQw;1a6W5ni-;; z&3v~NOMQRwk;lS#%-*GgCQm#1gx{x~KzFPI^3)!Gq;N;PYv6!Muf+5DXK$(M63^P0 z*Yq2Wswm3TQ?r;3e&jisSAW2@fpeCr$_KkCstm|Bya@G>850AKP?W$t5KdCo zP4p4CK02>uD?}Ksga{PmvzFy{DFRCek?Z4%#nLG7iX+a=5TylUBeR@NHD>?sExyvv z!1dL!a|bPe`5nC)*s=Maxt~5dofKlWR3FRUsj|B7=0p0L#vPHZQk(Jq(gGIM?qC5k z>WhrHmP9^S)^Dnb8#U^$QAc8W+UTSWj4HZ!RX1uU<1Pg2t(1SDi=@MIs+d{OsfGyk zp$Wk=rMe*_yZbh#?oK_Jsyyb-P6Zi+(o1@RaLc5l^(4UB-V1>~fjogs8H&Q&94Vj< zFPb0JkqYM$3`xZad5CZt8e@1f!i*k)sr_--BPKCAdFDG=U#8{B*#N z#haYR=Z?w!63oVeO>v_v8@>iN%4<^=huRSw#F}k&Mu7ORyX2THo`XCh3qOX>;gQPC zQmZxj)(t6L>NrkP`c}KVV=oViF8Ao@q=*50O5S&UrUpm61XF50)81USm5kJ#`Zu>U zSgEU@f0BLfIjVoa_@kW`1c2AVu5vz#6+eg?i!@g(tOqIYd^AI8=ld?7g-g_!YWxPk zsV`~_*T&0e=t|ig(GNw9NwGeKt!Z_=DJ|V!M|EE7l;-#(!9lB+7>d+Ck= zZl|phhPbCPP~;OT@j-wJJ}He)YdS6mF?$kSqXnfzWzj<4CD*|J7A>cUk?$ z=OZ?id-}|~Uqrulcekc!?V1f*7`6NUZcTG_Zqa{c^lrqkJtyv}yjT0}s(SB;s@}g} zu~O?^iaL9us@=a|rBb^tiZXqQDk!#j=_O|p7Mq4l##n)8eTbpt<1iK_{^gC8ivq)g zPu%SiU1A6UW4nS$#_DKc*6Li8;tTJ$ZJo}fv59}Y+4t$RS?_FjM~=N#pw_P4ZCvEo z>jf(6a@FfJG;A#HTh}8ORo=Gg3RS(dkMH($Zq=-dqK$ou7kfHqW;W}{lnMEq;^Q(h zOMGXXJK8|20y849e?9;fxe9lLzi1B$1;*R@!mWgQgXRE_6$epr6-*{trq|*jM4%UD zg7Zvwk!TX=RO1qQ@u_^z=`?Q~_rSYJ@21{OJEI@50?%rzBSz3!ZMEazLC;4PIuI*M zEiF;5IO7CI9b;RWVsccmG8yUeuFP13@5;FGp^zoCGGkeg7PiyFB7GUCDLk@LMNblV z+Dx&LnZQB zPL`v8=IN`?0+y_2`@tISTP0}bKWLwz^4LOmVpe%v6N4JdQDFpm-^8twZ_@EE>GFz+ zj4QlxJIbXKe?(l*rBeMJ;*>TU5Aa(=#vnhvsA@7L%h=D;9an~~DGoB0l#B<#_-bUH ziPg_DwDi3%cV>^>`|dsf`I8D)eOaGfOw%g`1W%pLVmsZ*(qFr|@Z?0N8uG@NJ0*9O zPK?!HZIP~i@Av0`%m3m6J3MH|AvKUyVL$7CAddapGhMne&p5Ci;(^Fg*aCYc)3M4O zY}*x|c!#Bvk(3Omzo0O!l*0jL3 z@4EUv?|tE?i~8#~bG520R=-033FGMq zi|jrUv!jZ5&ZXG5NZ5Ks#=eOO$$j(b>EI*9e3Viv!-}?7==wxv(IPH`;w4mI0$_MA zhLuoHK>386aL0&eu)AVk6?2af6(oZH*?>-eW&r%w%@lM`i*|)yneMEpb+d3 zYu%m?QQF+=EO(vl)O!H;`4$-}oO)_%lpz)g3ud})WpdwrQfdFUD|3VyrYuxW5Qt^s z66-{;7wD@fEck>wHp1i_IdnAU;)sZ7adc2D|0e5q;it>FkJS+8wc)ku*WSI(#)|_x z!Y9DaHIL0WI?p0;a2$DW4(A}8TNz|C7P^B(UndGO%U&G9{FI02vpS!n5?}~AsyM^$ zj1xx%AGpn(=MNjz_*bBcy*>*Z8QGxFFcG__pMb20w;APPaY+E4o^<-_*gALWg!L>M z8Z_e0un}`N#?-x2Cxw+^Ec}l8z9)lK)*C7r>W!27CN^-=R80x>6!S+p8#@n**MOgY z;*2lwEMc$UG-Gg@rM3LoCtkS9<6jG3+2zpda&F!LQA2u0>`su+r(n6 zngFvrP}(3T4+asIg(bsEB8R`RW>ltdvB=bzgtC`U>`_kXE4OTnioc%VWX|;&&JMqK z%q*A_oyfjFr2n}4_^A+fMo$U*>A?0KHLENQ=6?D>_A(ngZ6D8PDOe*ik^I)-OjD8n zy~bVE$p1#a3W-n>PC$94Vp;Ny&w_naUvHoT7gPEq-2N`HMpR_>o@X&i`67W5+6=xD z`;cZl1GCBA>mn63fhd_8(%#q&A^>YQhyrl(yj8u}p86~KxTa4jWp(wC9w|tnuFDzW z9uf#z7&T{OOg%n>RYDZ5|Hgd9vmS`0DSWPHoJkE0sxERW!JgM7IVg3h*qQK}x~hN< zXph#p%NTnE;I7XeNjeaFB;Wim_ox^pz=7C+BPakg;l1G?9GL0YB@iF&63XNn{u-ZM z0t(1ym+Ul??lfqI$0a6o&=0hQzpg7^{Wgea)#go6@z)Yu+_gTPh^NxnnNbOXc(%VV zNYQ&kY06@!K|&V~Zr@R>@(O>GgeJ`0AxH?)W{2KXt?pWatk@iQH2rJVqS@hCbD$HJ zLHResZ6%aJNj$Q~7OH+3mC8hhi;Y)9J@Phrafg-{D+W9F>P+s?YS165g%#I0QCtHB zsB1u_s8p>6eRq`;#Z{;%uYnaUmq%_*Gy5Pb%ZY?p7difNbF3O?Rz-BSW$KoYz$f$d z^XY%j|8lrrxPE8wP*LQi8I!vvz0qe=$}1%<%rT@ z?C_pXXzU}#9^F3f!pO=ypE`B}Ma_o|ZMdr9+hgXeVKYbMPr|<|o2*Lf*ts|Kw#rdw z3M#->bsTh8GU}35GQ6IZjBOJaP|}mIex$cgUNhk2MT7(%;De4Y8~`HpcZ`N3cyG3& z5gIYZql}vkuQM(oUL|@@Xls&ktt*WrRIj1pju8+7BLjCV<=s*mE-Cr8YmD6W z6l;rR<04V&%tT=-;AQ2ojhPJAspgE1is79_rQO;s2C$s>EC^=8x-$*=HlX+C==;}y z)6mn~IWNknwA*a{yT{OT)Pi4XLE8C0ShZTOymSA!cJ>CVmh;L!M7nd4S(=IXe>i-B zWgWxaaYk1LAQoX>;x)pw=6uw8D<KE4p3uvfkusE7DH`O9a6*e$=IJmm$Z zEdw^OWOWRpD@y<;jXzT!76h}>RQ+=0Pk!4v=0&aZ0Y7<Y*inb}G2$tEO(^o39Y1QL4hy;no10SqDZ-lT&RQ97b1 zMT)?(B8pu=5o}n%hw}7Uc`5-LMaa(nKIcx^UDV(AegFOX9+TbK*}LbSd+s^so*E_& z7YHZtRUH6vI|^Arfv7{Lf_(FNu3VoD?0S4g{iNujEj-^`zpAlCqh|05_eRb>V-MY< zxNHWywM}jZJX1CUDmGhi1ZWNcW@-z`EL@ahgG%5tvkEw3V^DHR%~3N1AnX9odVS`H zjT$)pGR?VO6L;V$a%@jWSTrW|`mW-+Wg zi%NPk>F8O7r!>&s-lRMpe=1?GJ2Gr5{<6pxiD3)bqAZsBO*b}?oz9uUre$eg|1fJa z3d0?gp8BQLNH)5m=GNY7^KJ8yY~(<;@dW1C$h$&rC_j%AL8fhxQO_2Nx{i0jOHAHw zo(aJ;Tu_U2fe$9*vwz&jPEdLtOiE-Ai3!4UXH&(bDMCcl@)VOLE?nr~4U>*1?b{d6 zQ?$G9Bpy%PyE|UZ^nO}C-!4y#Kb}xFTU94Gj>{d&S-DgD;=_dhXkVmEU=y7z^WA!% zvzW?9YhQcr#bzVesJd5=ooG3pfs2gves8~`wnJP_2l)1nx|{dvP13iy;Gej5G^QyO zU~|`*US)zE%LyY%h$l4|(8jHT@ z7_lh6ze0hLC9C3E-e{>PLH#=po0l-aF0VcooZ58q6D;4_Z8-?vUq4dMau< zgJSlEM?aw)3)b$v@2R+=d1cQkcWAg!-=LWJ>@&1EeOiM%J)UaS zqjwW(x47!kncUUP{d2rbIx(Hzpk0SWOC``Cpw3xSH0#Qyf$-@YyXkBtn@WAkH#Nx zX3274L9g=YYClw!C8>SWjw7RUWZtw1lY-Nml+7wFtdA92s;}7VgFU}=jf~zG9<@vE zWG_E6@A@Yd3h&x(qb&dW8k7E2K1@2Te(&kjshBG>C!9T-lhdXbljclkVJ+MDx3iyC z^6dJVzLn}8udVFgau^#^j$&0D_W$qH+G;d7M@@Kv?Rr)LEEu`|?8Dqw0Sq(14`5nh zO)I&cg%w~~g%5z(PVNO)E(#@)KIhKytwHrDSIrA9Xs7>^n;@GiyW{Mk)`q*_`upRb z&RKu?_49Fm<1Q##5`VOEeuC6IUOVPE<`ABPKjAs(aZtA3JEeOLy7Uk994we8D_7^t zS-24R5#9r2k!0ZHvC8ex>+v`!TJLYztH6)RYXiIp0hS6AS#Tx@KZ#GpbETqmj0gp+ zfzsK8DR-6+N4Zg`*W+^PIPxRUd=!k+$@+{8L*+LK z@EK{ZIgU|T={|4&hx`wZ%JPrLP5*;5sg$4a_dit5oeT6p`xpQX=_lB;lTaDf=2usA{M$c!Lw zk6MeBusQ!NG{u)`{LzYe*-yHQ>6SSzj})Vc~(XH9giols@t|*diFy&0|xY& zygMO89WZDoiq%hWvb6U?nf-~!75Q5?8#+@~PVIhh-eWQ+n4u@3k97-3dc-N97Y|t_ zP0}L8O?9H!9Rly^Uu+?Rdcy18>*x9LB+I$iPh+8;0iKE%w2RC(_)qrYv(pc1ud^+O zrXONc56wKpIx=nKp=q#2u*x6gr@h}O9_Ui&l>_l9*-a6LUx8@C5lrv^ zDrpPY^$F|>zUhfj61>0L<8aCNu?nS~JDr9cn&JfwrU`;AtlsDX7}& z9z7i=lN3jfDXZ4QXmz)>c8Wnv!p7|Yhs;BaX-C8g7o#VRt7RU^`GHUj^koqGBN(NB zZ>W|cEv99ZyS>#R3c9bWE0xp1)!o~7JN<%dpxE96qufQl+c*p7N4XnYHvlQr0yGeF z7G&nAc%6^PDZI{5Q5F!CMz6*Fe|)Wf7mB^#^ZwuU>D51(;q{QgrF??Y zt54OKpov2VJ;?Dv-&Ac*(By&on?9+YxxO^_8T zYBv5~sIbCphr(3FnH}qtP!iJ-t4f~lA`X?nrgN|awJ$?h<0$Qod+S5Av(c=j^nt{> zwA3zCmPp!(R;+$mbaCs={8)5x+l@_PH5VH$KNZb-Yfov>A&Z8zYepA#BxY-m*DBY> zZteLx|BkV~P4V>~n0BN&t4pUWr?vn!ZH&qfNGBDQ9}u+=CHF%&CL?~y@)4P}Ad<8N z@(eRyg}z1kD)cRBG%J-k9nl9%lLcGB}1+Us5-(5X3~c#y(!Go&xg*# zg%92GG~=8Bk>DrV1C$}`%`DlqtAl-R=C9ypPOCr^i`KKP;bvA8k7l@; z73GlIUHOR5$&7VF-3vv5bsz#(C*<|$u>s(`4r6vEvl0TtjC6D-h(1QxApVX*9D04H zLx7Dfq130&Zd4Evl~qXt&X&>(3Y~>)-mu#q23ae|#%?U0Ja+LRmRu_|W^$SK-XNCL zvB#h(ysGD0#l`Nuclx2VLpB$%w(Z(ZT#fR!GIy*T3|l4TkVN7nACD9JM0A)S|F{bV z>uLtvA|Tb2%>h<$LGY&4()1L#)djp4RF9^7&L*vpOW6qML}d7a8U6E5HO@SV+nkSl_zBN-cx@uT6Z zeNUMRdG6og%tWN6k-?DWa}f&?r68hwX_}UeAR>09@S2|P!x|%VtP(I&*R*g%m0?MvNTDlN|POz(JuKj|64 zpFGINzNd`=1n**2loJ~W!Tq!Pzl4BLiD(vr0R4Fecx}BadOwl6vj=}ZQ)^s{G4_#` z$38m9UOz+OU$#2h8G!`{@@ORywJ$2R5DEgSI#>=m7-)Ssc1wC-H53u(!J$3`Vb}RA zpkgH;=wo19LMch|OXWBTQ|Z)wuJhId*Gr?5wGS#|Zgflw4_`j>c$waiP8%k#*E|Qb zd)j;Um+j24X!69_vWI$%QAdZb(6f&6XS*16!z{Q3s3sPLH<`?0Fq-(o9Vh(6Xrt&; z-U&=qxIsATABxmxf>A2gnpAJK{_^ z{&e;RFaipCKvd~oZM%xMn2Il=CKc{~ zuHR?Vy}KYQ6SSt3M~nM+jr-NSPvL$Y)EA@5NI9Z162_M!#W)#=#Y4s>o<}4g{jM|^ ze~~o+eu|1iuq2MqX)I!4YmE#>=gVJFh38rJoLlP$w_mTb z=NMY+h}H;je4Ei4?${U+(}M&gUVlg=Z^UuKibg^~i)k`@a$QFpQ1tsBbGkS_MnaQOY3B2ZlwPM)JT9ak4S)*%mQGce}$JqFmQZA zx?mJYg}ej;c0B^4FkisF=e1!)tS8IXIpXe6By#3!_jU zgTqt4lmYm@qZ4j@t~Jc$Z#+1khXUbS2;l;?*Uoqz*D(zkCxAYX@&y=6b@~u6n#dI} zns5Fd#$d7D@O!)Ska+7}gY;TIhDI{gA6j9*`YW{23%Ve~b4CWA*{xV4Ri`4U`b$cx zMoyR3i@7`%p36c<-!3|F=7>(5#9zh>{z9?7Q1;TAb`s~CU zOzIEdFJj)pPXQ5QZd{Za6=gnf{Dso#n+V9okJk``7Lt{?GDYef<1@xfJu^J}zqmEY zvw9NPiqwY>JAE&fukg$UIKVqJ2jx-VJ=|8}2bqa#0h#&cA0P|U%gHe0u(v{~57B}6 ze+O{_5}SGJOzp__if-C?N_FNl+37QttMz1OKv+jRrJ}egcHlT9Q0Tn~jWFr}6Qw1| zEZIz?%Mt}|0OF8P5Nz#1LYz;sQSxkn68yKqn1r2@F!6qAyt>S4d?~g1JAu5~=!Z$z z*1om(0k$2sf$k_nn^1LT5|FZGMxqHeW2zQzmLS}D$oBJ#+=9Llph=({4`p9D;a8vl zCn2GU9&SOQ4Udid)oF1#-F3v;LqqfqhTuR~Buf`e){ z72s||)T@VmQR(vWo!C_VEutxt$EZ^QT*dDfRVZHi$v(pkEeS5}+=VN82 zX4Lzl=XlK~wQq5_Rz}FeLj_sE4z+b>nJ@fl^S}XzSWVVP`ILX4t(?_t-7`|qFD&7s zJuGOxB!BdLVVmZkYoDKr;B3#3?Tyzm+c$mde}HaIZ{KK6cKNR8srV>PLQZstUE@y9 zZ$LOfJdkO376q-$ofohT{|T#9?22-CP%O|_yo!A1KFTKNpVMmM4pu@o=&Difx)!Dl ztdda{I0RBvH6FOjF9ecBIzC|()j%A`=__c-flgKK{@jXH53Rc}JX)>t`>P3Caw3$m zLmdgl39&I{+lS136g^j>)1PQOLK`1lT_zV$ z+;4<FPK6{0wdalnyr>jaXAC$PK7k5=^1Xn+! z2V#V6)L-E;sVLw)E#NZG(|=D=b_-5-h#oBl&4hqdj8mMHAB$4C`TVPkohv%Mllt_| zYq0uhTJ^n58_sqels0%|URhZVz5X=Tp`%y_=<`DFeuMDqJ&ARo&MG;gvkI-x`vT89 zwWsV8f#*p0gsG=GvGf2O2gpw|jg@4h?+inRVsIG0c(4#cFmw}~J?YddssXUywS$?` z?o93Ai@faet;>g|e%s>SFY>iBXYPF||6r7q1cnEo4#B^`xkVnl0g=$8P3)TKZ4^b| zC!k?}MqZmA5EA)3p^hK|ftDN4AT-;8rrq@n?#ldh7TbcP{Pku3LWKfp=IPU(u2zi# zP~}^|ChA+_6!VjgP4sagYMlgZHj$fxszVGc6SkS{B&hlUU^5YY2^GKo8DiN@LJgo= z6Qgb=Ld0;PusMK+Ma7SoP!C+a|0$psi7=V5U>BK%RO*1obXAqG15KZ7G;GpbI?nW7 zSZ7z>zdmtvRa{!bCUw?EBZTsc&_uo;RWq9>gk8HDcI!iSj-XuzO}haCPT~QrEb{yH zJr_Lpdf?0RcQtb)vm{(Bm=Wu1vb|Jn-q_Ot!wcBVP-S2X@Vpu z*R&|Qm0(e*49&cK0-WlL8C5zUs|#|nROxC!aZ&9q6&LlK5~W48LUw-P5__&^5Z2qs z)dRQchIQtMrT9sC6Y(=tdt|gbrFI>X2nhGAX-I0JRooAuJ5yAWM#6=^`yG2HQ^Zn0 zV)*>ZnH`buMz^fqlKJtQe_BW}_A2juD!c>PjfVccNk znoyiU>fc!y%~f)z>tvpe=*RRA(<%Bfy*!=L;L}mVr&@X*ySWeiJ!tZA12^qADSS;-r-otI}TH$Ql*b{^UnR(Jucq zuJ=RTxw2~hh*IfkY5pTTp-!!ieLyWEwYEeZ;0_CP?!eD_4}b^%p>-gP;XWL`LKc4J zeHPCns+(6Avaq(`)qC;be}rG+GPWryV)0&jMQVf^8{Le&hjG%JBD@fP>d&xcdetoR z8SI}-?Nwzc_D>S(AtxI8e3ajT+9c4w@_W+fRauBjv|;r5krDkPs`!CAeGXegmXdV^ z(eH+7tpFZoD8+13&{Qy`2S@V=*39$5JMSbWYiBECCqLdPJbdXC51-;$haIOT=Ty}qF3bUrQ@h$}FRb4j5&4_D&GhAA5mP3f5GI&TYzZsm59I!^ zbNB5!?(7XC%U0N#ZiQhklD6l`vn1rkm$cIGDE0Nejr*^|cQi{_#h^^keQ7j&Ms)J( zpe)8p#UcMNMAQ(}IdOp82yit7oWaBbLd9@%8*#~bP)-w%59cVnUUa-JZ-qZ}CiBx( zA-;WQG7>J3i>NmwN^euG06Nt2w2Az|^4pr0cxhi@kIaG^i_*(In@ew1V!@X1`F9;J zp5w7+BhK&*o-F_!vxwF@$}O>0akesd=>4-WrFVcR|A$$KDiHcCTJc{08~9Y}fGUTZ z;Io%e$*X6@>BRSUH|><#JabWcA93o1sSIVk?yWffb_|Lcpj8_RePIuhFK`8|m~Lml ziWSp}A*XnOJl$t!z>19!_y3|9@Ruyj09B2AngMki)5jN;*>ezoCstm0LX4Av-#sTN z!fQ~<^Wy&fJVErUP^$vIY-7LIWd)S~jL3ipqf!OcIsHRqNVnIYv8}|Icm_E;dHOSY z-wRbT$FY^N>KF(9evFfH1>9A{hhijIQmE#I7zvi5MHmTBVWj3)T(!hg-W8b0EWx){ zi8)4k|7)Kl>XseQ=M4SgCE{bKz9{&Z?T*gJuz}4SaJ{<5RXo!f&mgONvVa&|O!Rhx ztnGx1#zN&Zdg5kLU3Wd|8)0c?9#g;`vCKG8Hc`ou*j+%3BAf%h%-g{7yTk)zaq6P- z!gMZEbcsq#AvU1^3M5Hee&baZ*}P>^RMqp^rDvb}ZFH3c>1bp~%)y8Ee3aVi&9Duh zxAnAFBSNA!D5v?6?YquTd|P|vs4O33b>CXghW1^tMUpz7t5NfArS$Gc89mxgm`U_e z;Qa|zF?!+rGe+P}%-VhhbhMpthZVTZB54Is6|vxoD_dVD@h#;8=%@G=Lv4~N%y=g6 z3IwsJE3p@=^dA+yy~qPVBk@jH1&jn7JI#n-L!MA4J|Ry)7xN)c?t4n_SfM83DR>72 zRNu0$^b{g!nqI*fS5Obt-29xVhkOMD)j&Zz2oW%z0k6nI4c^DWHj)v~o@8|Jrn5)D zaYLNO$*d7@+;AIh9+Ja^fJ)ADCs};ltt3+gPIpw8D8w1icMI!FM-pQ6lxivpY*G{= z8E*=uzMdml(#)z_`~9wn(9QQAd*{DFf5>G+$`40HPkU%f8k*)D(fTLdIJ*2?sVrZ6 znOavYEPv=>nY{r2*)Q4@8Af=_rpO&?%*H6;B_;&s=XYNE|DQk-8Q$EH{I89}{xSi* z5tcE5V9$w6X-bOLe(&>qo2Z@!>EaJc$cL#ZZuMyKRi@T>w7U$ls?i( zF%rzLMwKDJD7tNkHTpq}G{yE6)<~~`5pD2yQ6*714t`oB#+i~zu{#va6=g^Xy*Cr_ z1AUZI7Ot-cp2@g^+;+h=^l?Z6=;M^)-~*WPO!^h!F)`s$o0%iAa`u2VQmmPqAnGy90ccbB zy`{ZuwjAl=ks5%elGPH>1Z(Z2FThg(WgmcMEbmj7|b_nx8Ab6H(PPRfoqC*A0jSeVyA?r7hCL2wO1nzM0 z9-N92;K4%>0AO0!&aP&e+Vv~iJcLdDIxBUWc7sJ-VsluoR%;611qe5q}4>e$xlDcuz1R?^=f$1~-(U&zEX!{^ZUU?Ur_p zja{6&^sPHz*o_%(ZokS)2ky=M+Ds{ob?qEHsVq!11uVSKED=xrp zVL69wXzPOG2>2ZAS$;Y?^cLTt1;D{}k&Qzws^Z7SiiV;I4rx!(ZI9>Ahd&-08oJH9 z%{4^3zUXjdboqE`2aiYAyFB&1rE4xu_0$1dNI#D53H`XB8M{me1J5eCkE{ry45(}e*Y0W9@8Nd47haMkXR`I?hNridqj;cK7 zs|Z8#g0^Hf$SN9IPs}YcJl8V&ne}m(^9? zXSO^M#O98ftMK>PtZ66;{XS!t-Y7rRB4f{j4h5ZfFssX$z{bC|J+E@^+JSkG@O~>| zJ8Gb6Q?_4yctHmyqcNR?ezSE4M+pK*%oSvkh^`RUk`n>=0^-~`!fb&ZfGoCz0vsuP z?YQCkf$mAsa6kjj7G#0Il^>A`J5On@$Z=mr2ggkMe$$o>N^t0sU#ji>ATIup_D9OC zSKkX#MwRyLVE-{aUs5JqoZYhr>(OJoc4-%r=1uE1S>>-X`>LfO>@-vMt?xNKuga`G znC+w5N$E0H*=Z|wXNg*tBIlcScEC2bb^)s{j!|%g`kDK2hVqMJiP8%>V$O+*8F&Gr zFErA%jd@{>9SM;r??NV)LKWnWx#u_^&3Jy@GZ7IJOSR9d-TD5v$Y||u$9_Swnjn2x zrTW<=qib!-mZgxGh@xTqfzxdE)UwGkro_H{$6DRy zmo1`xoNKiG(n(0pOw6*HQHd)_w;2fovAL{PD;t(&mQ3}VC8A9If{TnCxuh6C$?$26wosEFZ>JpQy#39KhpNkH-`R{q-<@dAG848V zB)bS`kkKiJhhJ{#rsBZl+$W(PHEF>!e~XJE@p$n1)3&psD} z;Lesmy)UD*;dWOKls2r@dkmL*b#g$b~3)mBxJ`R_~i!;%^alYT-7i-;&9 zQLrOcne_sCh2+;>b;w%1KMy=}G{WiGLbW=|`S@}qe!WmNwV)*nVi_z#tlWRJ-7ic0 zgJWK@1d?%(W*G_@Tmx&E3Y%t--z-IVg1H5S<9To)@>wPD>+SEC1ex_iZJbogpocjj6i{Uug& z*7a=%j)k$8phq{++Ok(YwW_5Rw1#ae_J&x>*EIKw5H4W7%9QzP$NeVWoZcykAt|R-Bb#M+(7#$nfKZK+vJ2ADX+7P zXWv`jYtD|Re@d+$5*)s^{IMg9h5sBL^04+>yu62{>|^%lSn3WY4?5AF^Xsp9I&_)+ zn8Yu9GiV??a!I?f88c|^y(%4)d!xo^+kh(0qU?{kFhVwv-1oyea?aq8i4Dv$qn-lJ zd`ANI6VyEs$ADQ-7Ot?IDT7CH<*Ok3g!dM#eYZG5iP`qshW%x&iyoSF&=G16o^X_p z-#oGGiPK{wdEL#8x!X|LhqrsV`RhB2TaKGUH1&x02c-daP8G!B2PaeAR~_GiSWJA2 zbV1^N0ahb|7QQxze}=w0itA-!4PP~6FSXNxG=_2tR15v1z1B5LF3!@rZDwF=E1n5u zJm$XILh->+QO6r9Y?qP?kNKU~(HdV}@@Af5^e*@9h=1c*cYvibzX zCVoXk(mz3rup?hNIzUVvhKMx_@4C*B1#Lii5CF5I+L;V#N~ZSWAR_B}GgpQvasRFn zk)+)|b-*1VoZL66r4_bf@-B(_(as?X!J4PP{D2EwC*e8=wM{_EfpJAEDZ5=vAjbKUF;6RNEjy~@YtN5KV`q?r9+HqkK%q)+^5r^@jULQ ziu-`a-ygzeC^j*ExVD3;*5Y~cgwyy7#eK5!{k5C8?w>Gi{fK~+r&AAc#F~(0XC~VX z%TC}kPVI^^S@>b{jPXB01eX`SrL%Gu@w@o0_}$^K*$KQ!r^WL)ef#j{{Z8A#9pd?3 z`hBUL38(!7(e)gD7=nSn1`DE*>t(SK!>QHW!TezDSyun zFm*`$QWWlw6OmH*EbD2TEI7U~=Kxy_E55N7X+=V9&-KehEz7Ag?rP z4~qLz3-P;Iprn^Y1Q;U9#q%yfNh#V&QSCa1s$GlwBLzi1u5I*>00U(_DJUKk$&V1T$=mCjLi*V#1YccxDKmv9pN@ckX*)2k7)6 zF)NHBpt&fZAC3JKPWzI+Dekus_g}!9CSv`Y3QV=*Yi0tMcLdJxZE@d8_r2c(msiE}E%f_X zS-O7}6pQ{8fC)TL;JB^0zen2`!24#%R}J2`HGucckkg6x89vFEF;2FiglS4VYewq~ zi@g!=p!aaJFT*oru29)Dxy)v#XW)@+V(fxF*sY1`F>@U0hV5sTZZqt!;vQrnQ9~zoB^Afbxhn`Y*QMSWWYJE5`z(8`fv?#{OoX zZH@j*ms{r3*66jbxEffaD~r@Gt|vIboIJGuvLCQU|Fzwh=F|S8 z=Ub!8N7Ref=)VCoiut@h>_$Byg8iC(mo@rtZ7-Nl`;T5=j85wAI6uKjCkq?@zse}ze` zk`Y0GReBKSuzy}9lc&)tSuq9lEs81l$92l{lQpm=0v>q&1!veVI1Fhgq*V!Tzqmg` z*G_=1m()}G^B8@aY{&vc3RE%16p;dg15l&@Ju^V(0PthiF@IN#Q{NhAqU{}cZonll zjv*^W|H}~NrVazil-7)%z$m%CQI!9vFPfu(k37e!n{*@mo5V*VO%E51s0gY#IiSKTHYdPN|@{O*66?3USjpl(XD(TjBao#ecr@J^wEFGxA=(v=+$*fAU&*; z`n@&!ueRf?%HNG{a48!7O~FU>(SNON@eyluc>J8!=ztwj33^0_^cye}_IINv=+Eo0 z6Ccq>|E-qANBl=O;s!_uehEE&bgCgf@)Bzq& z%GF>Sy&>X`Xi3_n>mG>ek1?nKUOm3Tz5vktVLa0XG7^;Hd&cY4wus2R z92>?VdX|bwmlN72bpXks4j|&bu6>qj8< zXVd-NBpHRjn@v+{>5>s%=z0d6!rLwO1$nz^Up%Pq3vexSKVlqvo{)@U9O(w*KFMfV zesj#o9`c|oWrCtZAY4B%fsTAKie4M!zU1S|9z_))qxuqr;DE>=zw&l8pN3 zzX3CrWb_}swm?jK9wG5|9ab6%T z+0bjPu}yw>|JdzV>EDc9+kpQ5vD?{R|C_OE7*FeCgV*YCgTk{}V-pe!ZbQSviI3oh z7O2AwTAvMCzaQ@E0b^IU#-7NcSOfEEYix6mh_Oj7h_N9TMl9D5yo zWU*iWBldBDwo*~#{rVW<{&aCR8j5|NC*)yc;DWTA_r&vEAP?&a4SKL~AGyY2HGfd@ zRND7=p7yjNW8WL|v>+FKPw;dXP<%bX0WgZ-0OdZcSQgee6LwI_VLDH;j{4g3aGWQN zu`R1}RpV)lt&E@(7=yQ1P)dLAHS=jJlP>ii#%{-^_{J7SY?7QQ|1fqt+e^N&E$6-o z2~o;n6&Xo7+=3T&G9j_XPWB($KG}pDlrqiNiN+e+ghU@3XHjG9iOd0ca6eAWS?V}} zwk2=^N-3@|pS3Vj&BTbd(ta4OX)&@``CkM@VC9t&@7m}iSuc5f$w%O zvRmgD$b{RlukPYmK#uu7--_t=2`kF?J1FQl|va<;urVWq9CiD*TUo& zL4z2B?klQyt_2CvpnwDzyrRnc^?kmV=ju(A1 z5!Qh=6=A|WExO9a7OG5@P--v%w&+53bLR(4`?cuj!;!%eIo-EL$=g^9q<6!s*uQVH z(RJGv9iw$9;K6(la-{5(xBEBmALnKAUJ11{rCnd!y1n0uo>|PxlyCKWt867D|8&pW zLu)BH0KL=J)_YOY5WUov*=#8`R3MGwX7u=tp`i;5jl-#*sI`l zR24oEa#-qzL*ZVaSOyrlWh%hsfX@I0=-Hu}r72Y}#O2tl^jy2}$$3{X#%j1nHJBM_ z4DL6EU~nQH!Ytwi6D%->IQ$1wQZFQA%eI~mKeTt{H}K8v(Jrxg+j)$UXu*MebvfM6 z`3n~>eZ9(zlH`<6V>7i&y;eQ6eeQn%!TT~}9|HpDbMBx}igCm&@?0ojVkg+iPk>c| zM~c0X6c!SkHMf2HumrnpLyu0KJ9O^&&d7DZ^9ypCG#Qx4ktPKbElgst3F7`1*(UYG z*g4YVaJoO4k>!nhpVCh8p@{to!dj-g!(&AFKQdJmWU8RajSq5RMu|0mx1$1>n1wxg zPI;BIPpihv{c6s%q_m5vF$=U)y>@Lpd1CU19eeHGaPoy|=Pu$<{Q(|MRiO3{42s;L3V!1D=wtGwRE|rwsH0KhqWzfY;4o(O<9>VrE;A# z#E81hND_U#Ysa5Kw|$&zA~6%YN%dYyh=g;ISrq*&mTT?5?ALJ51GU(N6+Ik zhSeNBb=pwSM85Yoi8Bd&BSs>+k73Y8^!xG=>%LRJPoGPA9RcirRtNiE0+rija)%QH zehY-9q1d+2iP zYm`sLwL7RV8==^GfP!#dnVuH2_l64vIT!EU8C@B&hE8@pc>=Gp} zQ|SYDEvq0P#gygy-qoUHa;mr68jnV~JNZ6=U#zF~4s$Cgz(&MBipjCV4<_Q23Pp86 z@t(Zpu}+9d(_5ZHzDg7a7v3A)Q4{zX|2g8dr5l@#T|9qNkUjjR6|E+xmEg7g)}qZp zYWOP;&Dj*Bgg(z_N#(P(qe_#)*8M_*)h3Nw3=Cy1rAecf{X;|O?U3MmxAAH70bwCZ zqbB&nMlV0al~N?T99-0H&0)?88kOVqLivb%a8Z|)2W5U}VXHN+yZd{}V|!M%Y~Ppj zK^=Ow8Gt|Sd(pdr9mTsLUHH$PkZdxbQ}_1$@uxGWQc(Env&y*mBy{f8u-G{2o=1)Vpp-;(Mqnj^j|y6|NmV&RXu34rue@ zwK;4DTMGCJy*K2R;0HO7jzs$kuZF+O`?alHI;UiVwjqVVd^v_H#99uSElrwLPH3VX zGKxROuPFy4ReH}hg+FHM72+&S1WG1nn%6|WM(V4)g!*sY+>w5LyoF3LDLEiXLxfYs z8oW^GH1r1f^Wj#;JaFQ`7OyYb$G{((qk;{x)x5!k)>EcM_Ib0bEEf-GIpWQSmBVv7 zwR~ocrm*wP7jiz-^O2MW=qcJ&enx2Axioh~&(_t(W9~S2$$OP^z{z%Zf?t2EfPH7y z-*9I;L=amxHomnvC~?de{-m!kocUBtCOgU%i5%EGdJzj|n0F#FwpwgnELyup`M!^> z=F3!cC&!9%0@%(dTp1N5V%QlnO_1A(+Mtj?DvHriQ#ieEmJ_&ud{3wUNs{)p8aI^h z&#IKO+K;XlvcJlXn5{{V#U`@&v&Y{Jx)FSE$byI%R!~K|5RGWgTn8 zHq3rx*V{Mk^5qlkEtxMHzw43Npc05pdod^`8Swy_z)=m`tL_jH6$k0$LfK(l0Vb|F z;#wWNizJA3Y@jy*sI*cz=o3LZ6i1*0S0UO*va{Gth~I$gSh7~%h2SLB_bwa1Mfvc! zjV=!a0OXA%_+17X(TQ$K;I3e;@fT>*Wf`S^K}7j#riy>4>O(?_(1?Grs7Z!=H@sHz zom8Zb6*`r*AE$hjjDG`e{7XAF;MRcmQ{GF)zX8`TvAzRtdVboJ{F^rXdYcWrZfu^W z<|a#T?b@zVy%qLBz-St9`LsJn$7N0w zOu#zk0+1!#?51825P@h`CK1>cZYl~FK+K(=#(+LNe#zLNNYElGIAz39jDss9&#!t3 zzG+Ac5My;qwgX{^g#zQRj}SI6{leHxo=$~L6x8vi1nzw7O4^N1r@isXvFHceB_}Vs zYnQom!^ezYtWDZ6?2k$|b>8daYTjSY4Q0snW3?}c1X)TPbbB-mV#f4XMFc6 z{-CyzdA?U%OnP8{Ib*8!r*@c2&puGJE{GBDae99YiW8ixKya>svhd;}I@PAm$9eei7Ex6O-3bRkjyt` z+^4|0Rii05O2m|d*(06=j671&JL3fsErNYQd?bwOv!GwpQwOzzLP60r1R;Z9Rk4`> zC4f#4vwFW1OkMdU93lQ-_6*I@V zZFrj-c2C z(J@qZN{#nyiO;{@P~jmWCt{NP1CU(_f@wp-P<|Anj*HOJP%?l5Yz*l_Wx*Y)(BX8^(oQ=R927cd z{LrcDoT=OXJtppG(mu!jq+M-Tr(Z^`saIUQ@l+i)B1wD3!G`e2cFjjkmUza8$y{3f z=MJ`Z(OMV-5;#wNKa=w#&#Ya93c_t5TOzS{t6=wLfg66|uA+0pDuS!ynt8#6t0_|~ zXFO4dSy|Nugk)L#io`-lUaM$ZNK{B#NZpWDA-zI|hfE3yD)JW}LM3YzYO_b#)9iKa zt?WvGtO1vB=Cz8f>ulxhQ(mPPUs|G!E@8 zD1U>*BDv(45H=3NE^54@s*mclBP^IYyfTX0%0^gIHj0X87qHid-G2DFs)yrWtcs+8 z%Huy}|5)`{P~>Z=AN1C=6Rdl%=Yu$2*K>z`n>Pb_GaI$4(JXl;RezPL?c&||E?AV; z%-h9lWJ$Z&l7;L{jc)&y8#763#+q_i6&S?}$SZ*NBwL9)$}a*1%=IsV0Ub^(5+Fz(196XM>(Kh_{ta%dqtHMoLzBh!Y)Eh2~ZLa zPQDmuQYFGrTa|9pQe)+X0^-*y-JPmXbpcFRwNtDhT8^}Ym;~EV3n|iFl~C8IQ0^F% z{Fe5GYub{L-)Dc9fPV$Iv$4vKpR<1|I`U<;AnxtcG+P#LlD#MVbOP%NyUHja&m&#-pbvRHcL|N1wx z&rZi&OeIj%UY0YVW;4ZTJ;%S$&egb8{cP6Tv1c>S&Z7d%C?li2eN%fkmNnKq%(2WB z9Wk|3d-v+qtM8V+%im#l&R@O*cSr$Wv2fxtv_p_>r(mgUffGgww3SA-X10xP*1QGH zmJx5GD`YyZjWP4aNQu_Z{gzRmxLp4J{m<6^Sj{Xsn$isk%DB8#6akfvg-nmos zN3sNSs*3ouD0dy}Q>s1I(0YeewhR5Pu%H0K044B6jIJm^22_wRRjmi4fHS>d!YjKKycH!(bdwKo(h227ed2MIiwh`=`1zYgJ3o90E!*TwlETvgNi+(t&Hz{m6 zDA@DUY^i*XoIUFijzf97wTHR9aVl%nYEb(g_3JcZ%?h;%eE&o3)*O*>mT$B6S#3$j zKAiXO(v!~RLp$HV(Xj*CuAXGEkUmc03nwQj2f*R%$RF;kWIv>!a(UO z_CfT4?7AvGk_r-i1fXH0Tle%5GKFB<1&GHcGyx~**n~cB4#_CUrt*>{FZW82yUvIk zTGFq|yPFoR3zg%vyKhAX?JPZ8RpAAFtDw2w)bk6YqLo*8Jp1aMFBSRZnp!Vtu96=4 zb+(4`md8KI&hD=$+mQ4rL#wr^KO!1Sf~B$=WaLxsG+jofMbSwKSIB={V~t&t4MMSc zU027O>Lx?C!W4*}((s9u50Z&Dq6;>}7+4w*rjwZ82^WZnw}=G_syoGc=g!EcqJnOx z_yaJkv$>L2DR_l z{lUnPpmv>ljgQcxyxRLGuA?G*!xyfx$2ajhPo9W}D5#flXmBv^(EdLt}rz?GZD8|6OH+mcE~ zA;nAFkT1Z>sb>X=nnU)eV`Sha>mzMm@Jkqwp@vbNVFnusO)?fIq)el(T)N!iNV8^b zCl)Vme0s&OGOc`h_o>}iMYF~7E$vCp7HCV*+G{zRM& zRuy?Kae9}(INw=O@CcLBTRgIgUXHa24kBTu2_AMucdYde?GD9>1>D17-9$bbu>gcv z$7E5dX_ynh_|d@@rj~Sc_EeP5b>e)aYSJfz_R z4@{N$7RJ|XU~#AxweHS_dfJJxvQ*ekswvIWeqw2*bdo#a{Y_b=Y(xI?hqlgqIsPuO z{SI-aO7BQ8-rJ(|l`ko>`8x3(oG=-|Ho*5CA8c5o_RvE* zDL1h~wQc>}L3Q$ovx9w5)hnY|ov&M}-fjyPHl$wpr6Ga$_|gMi=*H#r<2npxSF8)| z9VfU>Ol&-da$#gs;HHryT0qsn_~<>Q5)WBAvHg-ZVH=*l@Nawg6WX5#R-Yb^WT>C zZ;UT!JbJ36eDFd49z&sdRr4k*XqpZCp;JV{(e|-6mMr)ZEMnYm3W}(Ti}udlum9*d z{9^@E<-G5ePw&>UZ-O54jP|>HSM1Y+C=1#xj z$~p&=E>@n+lp6E0Ggy9#vsQuuVUVpExB>}Y8(G{5P?LVdoBLC^!6k(m;w0X zZQk(To*HjVypYKTv)b|!RN`y>7E12hI>Tph1Uo(z9aUOm&)eIyC3=Di1M>i`O$|OT zc0MTtuqQ(&&=vBe3vM-upmQgPKhRX&Ev;oBD;PF>L*EUm+QU$~m8c8Sok+?k-YUc! zv_2RYor3bm!%d(|shDY+4Cx2h}@TJ1xzqCB7>)vr(IlnuqpxO9&5+8PCP*&lr{0Xx1 zE-1;NwU;vNN#K{w-OQ*BMvEkj3}$w>SR|^A<>$15eDk#vfuILAMCmA)3dN)UDBLOnA?uugdYSM9MDt=VNbkmhfWu@V?*-b#0p5 zQ2GNf(sb~^e({+yh*$fHap8bV#|=COB_$s5&#(pM zfk!~OaRr|0!8d#jrQyvHHGyKuW==J*V86?#!_m`M{mY$oWowHrcdtEnaYEU=W}{0> zS}tFiU$&~~i*B{&tVk?fRByn({&iL?kscX8+cE!gDX-Bym(M$Iyh(W=k1dZa%q>8IJF#AsrvyUW!O8ZWALK%ntAevyIYYRlsGoHJ?N#}_e1YkmcXF88d1YG-NkQux4XT>zqjT=O(PML$CUd5JqOX3%T!b}q~$)Eu>WaK#!3E=JJzo%MgSWAN2F!|K^Z0<15g)G zfFuWx<@^t*^V1-KItY8<4dw+3nx%aah&t4UB}Af^d#rxa*QqUCGBEee;rfHB6s7}n zQEY5D=&WS)&t6+a#q#u_v!fy|RRaYQ_JFwJ7tf>lG7wkXr$mq*i^#m2thA1LVCZl` zkdqnGPXM*TL;J~E60Fn!+!Y*)NqDt7e2q83pX)TBO+h64T#Y_&l zgOhTGf3*g3s6dFO(3aD^TnUz!3+NJf5oTK*b*QeBFMn|onWFa2nf0T)beTIZe9Ymr zXY<;O>OMB|UD}Z#xz7$x`C@#Nle&Ma6?Ada!FBv@M$w>q#R6mRaMrS>whnl4cz?9- z#QyAJd&6C$Yd1&}{rJ-Yi{8SVaC^LIZz4&!pv+G? zhBI;CZx5vS>g84KT#NLS7XA&n-G#M;!KyHzs!c6Kl32>5z#)p$2cS@#_^WXkO7MzO zd8wMBQECruRmsSfMcKSrj`|Kt>J>JXeEWivqq)=-IEEu}R^;$!s_hF8>C(MuYOow@ zm#_0a-Fi$7jbu^n-Vae0T%2+2JO0C{0Yj#TMQhg+?gXh!Io7o})*kWm{*!OThtW!$ z$m?S)#PMys^YOvOFd8gd+w5SI#;ofA-o5pZ_EiVIJZ@WWiJyCN&|u!V_3$1+gHCUL zjVH}(ylO9(FFiX5^~t;kv?)RDk+T^N{h>OvoaXTLbVlat0Av&ngZ@*3{xlP9Gtj|u zfo-vExox#=9ec_>bp0cQ&!M8EGp=ZMj%$jz))Uue;@U!7JBVu+aqT0n1I2ZOxQ-In z@#0!0u9L)dj<_xm*Tv$xR9shz>l&yF=+{iUr2|N$16es1Hj!$&XD-HN?i^e?FTiD0 z4_ub5#AWSLTw1TeC8T)=f*#og!X{+chj8N1^|*2oiZ#zwj#3Q0LQP|XJ0AU)>03C~ zS~rRFXZzkk=fjDn25OZGS8Sa;cLU#t&7)kU7hGd6xG>=s7u+o^8-;7k1sA4|xdUk( zqTC&QpA=)R7hJ#=kk=u~HT;6>feWrd7pQ4CwENz^!BG=_hV>3)Yq#V4gX4^#zSvk$ zs2w$T;^Uz2>lQ1D6NMdwp>Bjd)1KpW*bB)f3Ii5YR4@wkute*ZOcnkN9PXH!53+WO z(V^$jad(rpZA;%f=K<=V8P5zm62oMm@`h zYtO5NO%U@GsWxibvR|llVN}zg@jd&F<%8q_wVMS0Il8bs>-9L<8}~+5S>d10*Jrik zUQ1QJh+}#AWvTc6n_4z8CcHQ66wjjKJ!SDMGTt*Wo<+pJ7sn#wJQL$sM4YEQj)lju zfdl45g|x~XUirbK+U4=(wI&_KU)5GtYhoP!9i3RajD1=%oAdd@CJkS}`K*!Ji#!{( zg`ADjst)QrKw{lm!8qHm?c`RyIq%(`_0*PiFJgWB^J3mOxAGiodVccc^V(bXYOLzC z0|%yQ-yWzuaX{(cQI)z*6aW3$XtMZEI>qe03xXuBeN?&NZe{$R3-muwMr{vxE~=je zO@&^Z0&Sn->$-^!q==gn>Z~h0%EfVN%5$f2QJ5aSI=JXy1;=3oCA`9ILS2S|MtJH_ z+nSo#yOZLmJro*+NlF8(6RMI4DUdHBkK*G%8S#$HczD+1(H<&3Q%;m#uWVh}PL52? z>hi!dn;zN4-{nneHf~fjH1GWR^N2~}vTW~DS+BC5^x>~fnj|_`bXm0J;f47PS~Vzc z*7|{NLl1ho$stc5Ox61tP9RUpYlWsCin_LPn5d`)dkQ9mYmjjg5sba6A^l9P!B3}j zt07{-DAVoN3jtfvr)W|{CTJD^D3FwY>X9Qy;hM)M1if=UU5+y@kdvB`LaaeE6 zwh8jhM#)d(RUA%clii7;x(|7Ruzr62AYt4yf6@98DV!E;9*#_?Z!JxdsJ^uXu^Zs6 zg|W@g)rYV$e;1IjSHp5$Y-bKvA&;p1hZLoa$z(gUbB}#AELuuG_SAQe zeNYrFr)ejbC=*6*e=}9pG{bNj`dJTYHNl&lDk6ig-Fq20ep*S< zjwc1O=+IdFO={yAM_!ZVsK^IJBSAjGAHv}S0tco8b1p+AYg%N>8g0Eo(U-5jq zzv8?UDxIq=#84QuHcm(@@iNi2$!+sHAqk_HIjT6_nQu(DvfCCWiW3EgiM9*~oe}%8 zRd}RaP0mBn@Sbw9Y%e%~9wa9DV8VJ3GO#(f%@yjbhQ-$aBfsk5$50{VLk0ITcRr<0`CrjHG>)VXyzrQmR*P@Ae0c+F9QhdUj5#CvUk(PnRVM2sbVmLpbezY1Lby9qlh@nAsgaI5B(!&vZ0HTWsZ(O=~A+`HM(gN zzACG7Vb!3bjBsgh%I2`dUtc`@YS8u2^?k;Mhp-v!d)DvKR?_KHEcadv*#80nlf?X@VTtH4i)kv^R@@0aW`!@>Q0fQbL(%^P*^FvwaQ;9!5FHQ)4Xj|172DZr*3fegmN0EMaQyKSP$FrvZ*Fu^`3;D##H!Pqwa zR^_c3klL)RCy#xveam-yieR3a&-h|bt|y1!AZ)ZpWK$S28htF?#D+NOn%J;724TZI ziWvpEU?KP8BJL0yaUHBTEa1QjwT8g|-$DyT7J6-qUspxypJ=yLKCX9DH1L9sqJU?R zA3P>r1U%-OzlR6G82D*eTd^Gxj^#5X!IMC~Jsl_!%}7A;7HCOXc?(SwtuB?+G!a-b zdnR&Q9j{mZ1u&)JL_5NrCQh{Ehc$bh2m&&pGW|aSndZ{D)5J2t73=5wafhUmGnMvK zfC~ux7g0k(F{M}xkrSgrL_uwJB9O+ctjN}kyH&|mHoI=_n&5ZY z%t;THBY*)`q^78exk2s+3uPvHM<jB?#g@7 zpJ?@wV)sCwlBd(`Oio@ueS7j-->8cBO6|sXS*{{YE_uuIiRX9rTYlp))4BB8<8|6K zyrL>+PeDw2SD%MPvLrM7+Q ztM(dA4nKEXRkmo~t@!XqS-p^MR|hoh*jACEZoW`GcM_Xk`AehJQ4ztD$1Zy@JhU* zD}+h0_r63uvcWAo5ABlQNaBY(59i~0#CI>|yrds^nO*KE4Sd{-! zL~9O8|5x%KDCtH@K8aHsLiQpdmGf*ZaV9UemD|)J7pHKUB+?Ga;~H&!4XAS{PPGBK zLU7W{$SE`s12+#JaZ~$c-}Z^!yN#T%b<7BZ|uHP!$gKstcW8Vp5F_(`E^UB13w3nOLg zf}w12xJNhNyfRr3YX=PqV*j|R4A{;^N>0SZ;Ly| zr#@lx`9*fXu<035N=6!ssNPOPeh`S1(r$6NU8|q8Hs+);pR$3;|%ez6}LLNP1|L z*h%OarlWy$llfAs4kfaDbos)~lC*t*EI%`6#`-Un{JQnK!TwbzuV z+lqH?Jg9n$$&-+wGIR92o=rxhbv>V^wXdGnsAl#04cI(qZoOP*O%wzZ9kTh$Qatj6 z>g$9h;txzjSR5A7=CTF6k)nnKfPpd*zSHElKno5Yl)3?ayLhQ!-N zsMGe=?NwAVN0v`4S-CMpP14Ri+r5c`B#;65ee7z!l(mCNLrdGQnL2kD=f~EzfAc@V z+MpI$$yJ8*XjmUXt=Nf}&jw&B1wBO6s;Sma6gc|JJV5#|3mS|B$5nCO29K^1WZhI$ zk(Pq##QC0#j-#9Ilq#g!Bl8f(pKKLe)tDSgMJCYvNRL$;&0=3CYbOgEwZ#EYesS@v z9q4)%J!n*GpR8gZVM6G260x_cC^kYgsoFfm?KU`<*WXtz_YZz(s_e4vruT6C82Y zqg}}o37hi}9w9id>cd_z6A}1}=`44SVq|SY2$kP8u+nc~gQ8bPJ(=)T1`z8m3JDeVX z0!cUoR0PF?2SpJ?Q3OFb1q4q}Ktu#V@IvJ9j-Uc7AU<-*DPRbK2E=d#VK-tzBH*JU znf-seXJ-$^_xHT-=kpgUb8OE{cU5&&b#-<1x)+|BztVgt_qM2nNBfI?dVY&*6LkG1 z@!;dSF=1ebK24fGGitJ~PZ=Tl>iI4Ex@1d#1m_cJX{JVuKwzg}Y2PZL>a;ZIdC3U1 zLeG$0!DA$;9)X;V4*eFd$wjN4bahY;7-6%BJJ_luo%q1&kF&%b_r*tD+PwX>@oQq2 zPo6Z_<$AT}LNVYuQS-KIo3|9*+la?rr^-VoPUtvN?ua&m`X(4@$cHN~A|D)ka|NCS z+xHb>dZlrq@*1}mFRZ@*>ufPHQ_pQVe=L$A(_h6ZzQ$Stnzx%L#h%$s2}uSOP54(_ zNMj`|8WlN_8AO0eWGju4Or=ZQX(ZomlBCzj%*Ydsr_P8=PV-Ek`g~kc>dHF$9plNh z+IM_ryt(4l*##?z19^4!`zyrRyita+dPS>IMih(rg#UZSDN*R%cxjt}HI4gos<(Wn zceS40`mXp)ygzfRH3$85E#tO4^F=%ZnM8pN_axhKddw~nv7zRe?0Tu08>e0hfwEpn z$*MoFMo`DHha|Xij;+eEI__xv)yknA z2M#lg5qm#tv?YHh>yFM}I`{M>)0k2=`%=sIripJ>o2Nf#bo`%U*y>h4QdfULe{QLy z;Y=a{>Z;z-*Jej07@WpO^cgjfcYbj?kU~q)ucfIj6zE9|qh*JZeMbhk@xR=i*f=A) zlv|BXcCp^{c0X1_4EaX1Fb3fF?Q~(YIqSk(WX4jQWv->~L_4xeea`u|>LkvEvU*fc zHUjRIOzG5+3#CuEazueJtDmnbJtgvc+-BVL=U9_{zXh44el{PX)hR^oC8|6RcH@=! zcHSJ(_@G7&1t!oiq9&ykC^<4iP6nl!4?Uf2o!qzcSdC}OC&%42WY~+TQ_NY_Vsoi! zo?LBc7yN_A7$zI9L{SS|Y-T@d5rvN@gh%J|K?{!2K*;Tiu;#nU^U6AzJZnZlMS=BV zj`5uw5g0pFTw@hnorTNf5- zCdUFHDOukxXVj-0X_-TdtYk-RsWUDh2Xn|@=S=P5ln6QN#&@qyh!Jrc*B!%EH>9_8 z)rqURZHF&IW`M^8B989yXljRIx}c5I2w@b&sT5N|r*o3MgDIO7hwzMJN@`~5^A0th zCgP?_Q~Qv(($aH8rs~~I^?FBoRO}KTZTluR$*+BW!7A7?bXt7Izf0umM>x*)*@CM3 ztmX+i@#y#7zBopCPxAb&%zMpuh>UB9E;a1=4MVy_?TSatY&cvl$E#uMt}yOH@f`@8 z%&4aB9DCM6dPd}=g<;QG$UWm>&|Kq^*#e{`>QMO1CH@cay_~Whi)<#_)^|YL>@LvD$G}HCj(g^|F=Yo5g zckgD8StH#>8XjP~6%ifRF*=B9RH`;E9OKfv6gq>hlkCKkL!Qu?_$0+1T>p_-&_9mHgWImx88??is(HxhxC?~%v@kMPu&I$W!(sX zbmq(=`h#P+N#+l2gdj&Xp+)$CwEKCvsks5{YH}$l!aXo4#Qg7{^S-$|B_`{=3$M%B zAcNVUiEhI+%$^S#ao=-mYbKko2xH;3?+MonCaC@M&Dz#a)@S;}tGbMw40_L>yq?)0 z*Pe|?2+7$6U^j+rwn{=MK5!&Ngn$axU$V9%ojtls*`87AAniJdRk_N-IC8>zerCn4 zlVZZma-;EuACSF=j3)LsU0?CdM0UCnNz(AJKOG?(RY!8_;mAf+Lscn9Uk1Av3!Zq9 zC(1s=sskiWQ<9AE$T*#iWQ|qgJJE4>dAo5|o%c4}+_rodmHN!M;m@(+dOZ`>@MN{e z+DFywS{iLQbuq`QzI)Mr9@e4h9ny4bEo$o7IT!xeRk0a$6L=Gu*_FL`kvB!)I6`~` z{o0NnS%$cWT*uN_3HsN+d$)bXu8KZSil;?h^(pZ$>p$ZA7c37`ad8vHgzEC@=ctMQ zjQ?k21vN=z&7JF?Fz-l$u*hH#DT5HCCd$MMnwzI@shC#tw~tqEcUQzL?lCk8G#>l3 zhy^lB#WGXBUqV8P8id2)$*8)G0ewyj=}X_B>!+W#^aY~Nt~@36*DPDe|Xi=m`Yh}fV@>Z z<}!JH5!V<=k3ja(id!xBZ6Nv%@#h^C;s>iS2u=}|lFFU^Rc0@wZGHA(*Oer&8*ovh z##1j&$tULLh!_j)VC_k&Cs%TM;*(H*h^x@N9EBNLsq3e$&W?|AMUQ*nxqi*g))$B8zMLTRIsQd? zNa2odbLU#I&h7eQX}_zl9{Gf!xBqHopdWalNKistydT8aDlVp_r$F*5L&u}wer>g?gqODacSMQK>;rm@i0zm-0P!ml*h3>F{J%9qTRYw|dh?e^`{| zj&{dBHd3mc+12wetG2ddf&C%ATzy&hEn3WTy5Eb-6DW3Br z+N=lPg_L0=uYn-U&T#Hh?B&iRb}l2&xKP_V`t6*ZeN)}_#nnG;J|6qCaqqBa8Ka0n z_x+eJo?TyJ!c>dfh(vL<+dRBp3>j^@Hm!QT^XN%t^dV+Cl-AL}X(BkSt9|6jQtPN? z)P)^;krB}C5kmz>WO%adeZJV~Y-1Lkc6rvuEW$5FWlhS`ANKgOWdD};XJ;+W(#LoP zaPBFRcRTZERlTg1l=eK91-slJ|AbVrCpts!UBSP(&ALRqY;*6$UOw5 zlPGY2jxUQQz3aMTi*D>~M*ntXPHxfQ$Kx~JKk(&%G4VA#g^)A)-FCNq)Th?;zVCX( zpVkgx+@m}SD~dEImuR)wDxW-O4BR(q`0?IIc@LP-QiMxhQEZeyxmsWg*}hQTFk z=%=j~)Bn)t9jf+P1I6`y{-B$o|2$%?XPO4l0MVI3t+YkC!tl@%7?c#&?eI89yL?R6H{(#O)BcM?-2u^adMWM)3%nQpweSYBBnnq}Y0~En{W6 zMj`9cxV4L+u~G2FGoF*8+d}KP8E@|}56zl&zQ2g0E(cAY`LcUAbxGHTD$M+2UHGI+ zVhwz`>XAscvrAP+xb1O8K|xu zFnz{{?!DB#miFTRz3vKaU1B=N_KY16J1Q0?AiO8BC1F8{^%7eqc24Y>I3Uq|H<6_> znwy9pLOW{&8^vu;R_F>JnauhhKz$xkqG6LJw63X&=F6bL#)t2{vTeV(ake++_6|8C z8>P0c-!JyIjt#~(NNrc!^v#-8akT4QSHl7`_>+IgOSM{!V#vA{~-bEIP z1lhY1>Ls*H=$z0qVL-yD1iN=7!$iq{>0P;bO*2`@66#*<`zChTvVFE|MX-B`ybgQB z2Kv6s+-Ho8ipDF--sAt!NM@n&WkM zt4mFBpPBaP-B}%#^eQwayMI7>)hC+zenTMVOj_P>TD)M{!NB=RP6DjMeL zaO)~U(MDL=j;W=r?4a{l6Kb?YjDxgR4NcAR*rqp)P$4#U{E>dCxI#3t8napPZ!4@F zR*CRh7lf(*Ddtvts=pMkTSN6eL|LfW1XZV?M=qjH5gs|GP7J=}_w6q-8WOGbcrj3< zR+n@wztQ^7Z!(nb!g=d4@riyk%v!3eP4(0c%iQw6ww65U%7l87WszB)s&r|1rej*P zO7D`6A@X$koOH$&_ok2LD$Kl)8ZWfWNYeUmHkPzXQEGp;vQB+zTUizT#ZwKfx!C@L z`~2AM;-*%VwPS03?p;F-X=~vF^#ANifYzDXFpn#2Rw-gQ7F_Qp$M!0aMh>vCTtl{m zGyq)8=&5brq}D+MCIy#opnJmN?`Rxzzr;S~(ikT2W$Fst7>rnj$6AqN%+0Yrx^n9D zP5a{$t^b^(9sDtoB6r1;>0Ux6q^E{`lK`8BK{qEKi3qg{ z?9EK1ky~rp1bvukrsc`C(aNuB^F*35!@H)veBhZi{Vpk5+R!?1;*$l}jGZZ5J)$Nq z8N9H++jO61-SfcPXAHW%&9sRhW$N|b5%E(DbIRBYHGi>An`U3n&3csRnEj+FhHe?( z`6|)2!;q&8*R$e>38u0AeJLHHSg_eyD@2lC7EC3enl2YFho!i|Qy3q%(QaeqA)w|g z`b`s^FUi{bcGoTq+clY3|I$M1+^QWcbK91*oLxGE-($U@S=wqw0;y^xza31Y%pK;n zace9&ea~s@4LzIHwZ+gLpQGNy{E*7I#n2n;;t33iBk3bjJNaNaf9dzTx5Ddk2XVOF zjw@jPu~vYZY6Yd^RB~Kc>Q#=fMGEOqbgU=CPHCH=%+>4=@gQY*f)=`R4#P36J0b4Q zzT&y%2aTQ9nn_l9h4@;y-`&(-oVSJxu`AkoQRu_^-PDh{V&#!`@1UirXxnG-u&dOa zL><)#v^1i3tMzS8vx6;_T|F4DBXqU$7;{rkUYU(qF7u0oVL}dr!p5`=9wVIA(m7&x zb%h7%0d!hUPNMQVPIuqA?PMG%IB3ommjp90M*Pm zIE_`a7_LOxnn8{oSJ>+Mh&DQoKt;`9;N!(5m`deDBA(FrH&S4sN@RHBU*y#@Gj@Jm zBfp}Z+m*Ip_ySv6oo=d|$2ME%ud)P+zsvwoYeTDnR>=~9sVwqT0ra7vvU zU{AcEvPQ+XWHA~pi~;e|nZenru zN{s%6L~S(i%C@6#`{ z>WgC%s<%|L`J&L`{ilsea|ttmS9|I^Gk^@HktxAgoEUo_=y>}OTKgiWJQ@Wp2P&sR zL*>$QJ4!?ORsyRvNgw%|ZV+XHzDCu;3_2w-{qGNyR)z5T2S^mQ3N6b@t z|2rO<6Q5r4Tz!4%Z8vwl>AFthb;il>&sse=XIkHf7WUEg&)@8RlhL>55+PIz$fHeS zZt2&&$)l;f3pVXkM|3C@;hc9I;}PTvxClHku0R-vFI3Kkhy?yZQn7SFJm` z;sXBg3;V#HoOKz&x8t=5{~SRQF%uKv^KoPyi&NCdn*j69GQfO*TXF|ytCqVrx+QnG z7rSwR{l5aw#hMYfB9VLdAuOzkl`L9YKS{dd+m;mnyjo>%_>wxmMx9fLHZ}igMmuPV zNk(v1DM)&U>@w)BdLFtGKa%W>OlrTj>-2}#%5F6~9$(cxtI?1rY9~FYP=+Ra%BrZ) zzcyk&T-#Ti2X|xGV`j4XA|9q&JR(_o%Y!*_ls1bXotzO6DiqZdj7Y^)4d(CnB-(MR ziE`0SCY^%8degj2DrMy9$x))eNUA>E-!pDl%B}5h$vOY4-XmXs;=;Ih#=EwxdYsMiNoh-FQ6{n%D^QR4?v0mTiX!o@W2UmNd0yvNe zxcKaB=(EzLhK~@78&?)iz*wc_0?kKOxgI?~S2q8)g3}+0-UX-a=G$6MVcvZwUrj;^ z#RYibVwex=(~zPdO!{=BPdxaM?Vtu5HV+%8~=r*AxP4K50N=YTl><;OHWS}Q{_MR_xWn@|3 zeQo6zSRdu+ow~g?nBd+Kcm8m-{<~|}+n;`K3dU8|@amoVu)eqSN6*TgOXB>0x=N{c z6O(mi#66ubQ#nez;ZJ2Z$l3Ouo)mkwo%lN~U^hf?m(w2Eqf#83F$~2tCzM?%tO2a1 zaH_A5v8%t^%HMse`)l_T6FIz}s`}1%WYv*DcFk|TTh<&-OJmNxE-_VguzTZF#G5U* zRg|{V`JF@-9<7#)(hd_pp6FB=Mf)TpSXOREkB&x6wuWz3LJ68W^H$ohXh7^CBYPAi}%|cK%qmjK+CVI;&U76veXPGIyyKD_t05 zE|xBg*g3J0?PstbHWvwJ)(;Mb?EIAWY;GF3zff3TfjQj_|ss-#K84o^S|>7=&1|QL);}T$6u*?SNdOq_AieJ>?*YxdjD1NP z(GVE4`I_wh^tVp*`(!snL`zE&sl1*b$wI=uUV| zXoQub))Nyq(pi&D(PUFNTeX}`6=hSj#Tw%fe1yn`u+YAEh9dFO+MpF=tcbFggBnaq zv+TO@`5^5~6HDa?*u935dh zOMwtFT!^#^*Ed#nX!Y{41gK%i%*fXeQk8a9Y5xE$RQF>TlGo#*+_)4?x~h`2mt9>Hjg@9jD7)-ow5cbYaa+^*U` zEPVTQ>sPBZ+o&yC_%a?{P|KaZ=-tlOw~Tky{qysMD_QlCvt!8h)#r^#tLi7jKlksZ zF{x3lJL$UUF4F3XXwlXz)Ia^?(#?ByuR)JT_&CL*B}s=z zIFV!H0^?^nUbaOJXHYpXt+94{|J@y?{cU2ynxcB5Gr1wTmYt;jP3@D2WRD5dQm!BT ztH_Vg<_?*|oHA16hoWiZbZ?yOatMA5+TiFxIp5__-~4mq=q!>^V+a6Rz z(b+@e3WNau7df=()vf;}i!WKeqDH&Z?Fl1&M8@6y{9t| zKo5@Kxgg5w+v{{#fF0IBL0Nr8M&xH${4EPG!sm=!1m%EA8TpVYO)V^~2GYRdj)4K% zfJQVi?tJ6SBgwDLk6ULLQDd(X*L?4-tdn`+Nb1~|p82rlgr}bR>~g(*N?g*oBr(PJ zQtA(@Mbk!)W|xU1)3gqroB!e>-RQi&hjH3i{Mv1Kw~&EK*V+(g^f)$XI_q5T@uaBi z6OzJCzQv2;-;-#gTqZ&f_rOUO4h7xFX{1mZ2egD89HpX+-!^9a{^sC6t=*>a{I84W zzqEh`t-J9;Dh;Z6RqKECk(?Ay_GB4jQ;QXQX<>U9T->J|;YNm)WDXxst$3BnhjiDW zRpiXDsfBwuQbW#VPjae^E23?(U&>*eAr z0~?wmaUz*je4;%dNKqWx#E{f6zGUXx7mm2*FP!#1v?LVHjD2alJ)e^s$hFd@UfS!mUv(!h$)06oSFQhKeRM_aoOhe)|DLN~TT`DWy0(`I zS2DUZH|FUnH|le<4*Wq})~8|005hN_*ugsw3`RQ?E|TI-To~O-JL3 z%viy&FJit}_M5tw-A^U^goc>1v(Vv@Ytkhp5ks;vIlRt{VtK2=8>5>P>lJhJbyMQU z4&CsR`DU$IDKFM~{%W?IyXV=){e}&h-AX)G%X&UpJSwIl3+jAXSJz8ci@E*h?fjM< zfw&wxR?O=U|Dac*Hqe8d-42#|>i=c81Db?*P7Cy;#&A|+hqIb-(agDsn4hT6FMr?d z0ACk6J1&sfZjELn8}$u|n-E&$^jhc&OD?pi`LEj^G?u0(A_a?0Vk(c-cTyopBdv+_ zNig}X>};~e#a4fttzWue_WQB!#J%(9ydUd||E@z+x9&F%ON@=`*6pU@iB`R^nEkI_ zF|IMccbFw_H)aG-Bf#IMb9(b$kuk71_J$?@Zj?VCVf}&*$H>2Bd1Al_<;u zCkDQd5Z|YF_5Ats*WCP>-d?!AUc9VW+$>C?Kh(G90JRz<8P9YM`D;?az#xxlV*qN) zObNsc%KoK>%1#79(0wL<3EFz@1UWA8#HoW^jT5FT;e>DrYv)jBEJbv_G-I&Qn>K~& zQT7H3xn`}jxy6${yZiDY5qo<0WADH9MU3G-W!7FaYjCgDFFg5SR$(Ac#)m*bZid6QE(;Ua{3bR%{ zrtN!Ai&jgWFlIuH!B~}CDpjEq#-7f~BFVEThhO?k$vB!g?c34&k7Vg}MDEcQdk^dP z+&bfh;zH()@tF$(l(;X95;dVj zAb-BXw^Q|q;d{`X;WpK}wK)3_rsyC;_>!GK=mvw?oIKeHiP&f@jTOX~irDCy_G)W z4m}DP82=EnWnAuBtr4ZU+P2BcNLSViKWz?i=~=d4kO*ogbGY)?I1LPrdc#ahoGzg` zIZR>ph{{#_Z@7tKP_0mH$d#i#n=IF5d@*7?LFIlg#F1~i`#te# zZE*Ea--({gXubXlk#_avhCb)Qs~L+d|149VJL!p+#*;MPwRL@dr(u(r7<;c5E%5JP zm*@uUIgpCga<9jRF4dv(MtCWgo0V zV$AcVeqw!>PU6OivrO|zD}5ZXGm`IU(T&hVwrH3q-fmHRXx|i7Z>JG|=Rl`LAr6d^ z?jTQ`efa0b1%ro}cywqNrGoWs227p%{jGnKGzv-lV5i z>h%_h#A${(Y1H{9qWTe2FWpF7P>&~G*3HMnZ>)XCPbmA;&t^0-Af2{7?a}PEIf44B z?>h~1OiQ92)!49R%T*g|7S+V3GN9(DnuNyHtJ#u+XLe1DiprXPc^)5<{1FZ$PpUnL zh!`{29_PHj41gE`8D!>$S@ncD2Omn*Yl?OUb`)l(Ro@vq?WyPIUfyYa%BF#0vpd=q zeP^1Oe(tpzmRz8K&uQ|c#k$$6pmm<{mfNZlby{9}4I8<$lLFCU?V)EjJ0KAqX4?dC zXp?{)@Xz#A3eTbEe;XavAjq#WI;=_XN_9?{R_38{qQf#|beJP+LZpuBR%6kdOFndbB2+s94g%VlVRQS2wy&Gi*CFSmH&!)9I-yE?&m zP8b98+H!@HC&f@6P5NfoV3!Dz2vd(nwUB{satELcEi;F6%}_H3xq0T19BbvTbB{b5 z7hN-Fzi9UHQ4t&aYeMx`el1lu=1qU$^CqI?M?%|-sedjSJGW4Df7dXrb3V~1%5A-7 zd0VbOXu98=P5mGCm$`aS|3>&=(!*BcE8+OJ`llqS68FD6FEnb}36?V2OPm0Feg>$ok? zXU2=`U%dC@MH`d;TyW1-k9;v$xb76$ zo8VQM#jg%Al5tpI*Wx`_OIcVo;p9qFR+rPtU>6NJLm0P2XlJ=!q-hV_qU1^?&DH}g zE{NCHi|i@su9^p|_qWHcd1Jq5eo5`58Y^EStJ`PR`t6r(x7M%K%@cpJXPr1WXTrR9 z7@+BL-rh9^?5B~ruA3*;&RmDFCihB{29WYK{k4A5ry1fDIo=Enr<4?M&|Ft1b%$<} z+oX-`6!!LL65U#!K52I8^n~cx_=ew!)*sI~Ha#J6P_g9|x46aCQ~IyAer>3`ubI++ zh0vR(8_!uw?&x#tX3_m)gWUUzKC$Lor)C?8ZQ74qKge)dyZ@8arv2zma@MZFNxM~s zYdEc{N!GS*o(A?l2MuKQFS}JLxr5WH;1mk6-=X=l6)58Hqu|(Ol*$u3{cKkC&)ym%J?YL8;3@N%Jt`Bd5->Y#cS4_CVH1f#-PU!uv-q+ zu^g{20cW>+V#D?UjhJo`rh7 zG00KmXE)xv@OWK4`>GL%F}K|^Xh!nSG1HGvUb8ng{QS6$*l`X19=TUi-(rN{WEY->RZGlLUaeu(u!$ex@gFq)q3tFqbZ zbzEC5S0JCQf0DJtOlRzrMV=7H{~B+P7#xRGgjH=jpj@^CiZx6ObwWNI$xj)f9DrFF zfiP&t`Q%1EsQ_cl@6^Wlo;Fo~n`7LQZ4H|DK|@M&z8?1T9h$nWy2MD6?r5QH`-mea6r5~q3-4_ z);7^$iBWMOSD$j3oGF;0PuKmf_3VYWR~xIp9uX}pyJ8BCa#?PW{<>b_`h;>{hnG|J zm*u2GU6y-FpJAA;k14lXl}onUsb&`_r*?3AUZ0_RUF#^bEBsw*noYhdJ@Bqq_1BFS z>Rmg--=+A*dDj!X>#XYw-u0C#Q`7#Q3UH9`!n;I7WTU_v-`8j9zpBzZ!oRF6GFe(~ zGXeklzqJ;cw?L`d8ha84){4sHKZssuo+PaM;>}k>Hkp_HEJ}jUjFd?Pd~o=UkOQztl!=(`n=x+&r4sYB@TV?m=FNOH+;96n@e(7?rjn8C5k261IZYdN2MxTS zBKJcPJx8RlzIltaE8a9R;`LP@j=q2NR6N^ScWZ^&4PRJI@*ec^aW7!{IYWAun~QTWn`N|iylzf2pzW^@hh=xn-@wNi459l4>aZ2S^VpzL;spQ ze_dgX#Fxunn78}Rv^tHpStmZ8`O?*6M8mfpuFZtepni9~*gZDpo)?VI_uXykBK^R; z->2#3OP2Na=3lJ$ml^t1t6GYm%qKp{?>O{vmV*`#=|6%N-s1O~GtBq2cr4j&o>V() z7Cp*|aZ+OHuSyQ@QW$L|8AFYfzHU8Ddb(3t0>BKa99N=oY$pKO60(k$Wj7MtE06iI z<62o;XSs$Aow2T_N!pI#_s#gCX1a^85V>mV2A7LqT&uffSta_@x6ORTbbY(Ie#dLZ zy*Z6cbv723_+}b(y`%~6k>bi-%CR_A~?_!Z?5v8PV z^LvdlVyfzE4|<{+$Sfwd$ccy&Q0{bRUQKldd4Y#Jr06^`byb)ESpdQ|xh21NXn5zz zijguzdVf>~MkYV7E|=Yla3iJ7e5 z*P9qWftx7fJHP24$zJ51dbODLA0_|z<)5Tl1OP0Se+KYp&Bj_qwT{*zg=c5^17HBnb`%n7&gUE>X8sPbs!HjrAzUK#GL%kSl~Em~J?AEWWW zY8d5DkZc<-_izi8?i^Nnf*27h?Fh{k31Ow9-SqcGgug`vLb)$%p{$330FFd1ypAsPY_py zN~;0B#A%|9rNFx-mgKv^QoA6Qf^SX^FRO5%%4)+#DGZQguTF`I)S|93OUg0z^%L@a zTGtuD_c@l|3RmELl-2(eR(3+8VA)`ptvjsjCPhv8-Y7A|-yqbg;G3hvN*_`+Ri(9I z{ysLf2vJBc!KJ8d9BBa;D5^90%{xbGuVBkVcP!8vfj6m)NUDxUWEnX0Xz05^%dp`; zl%60Sr!;TGU7izBMq*sP5sZ&_N<_Xza-;et^_ptei?>`F{ub3jyI#YzkL(sw=E@Q_ zd{Zq{S=&_Y4+d(#=_0jH3%qk2UglfaU)`ZNAmGntQ{>Pc7g@yrJX*X^n0Fpfr6 zjsnNE7Bs!2A*h!3IT}h;T3+Bna0iD&a$Z&~)%Mg(4>%`1DM8<(r=Rq@x|-iIB%)?MZ#)Tn-vd>Tf*JML&_h|D>c>LYr; zKJ0ify#`oT`C1f~ky!MO31CCfi`l?>0j{#kNQ%lbQ1k((MBVTbE`Ojz6btOS<5Qv6 z@Rr8mW#p>Kz*~ks<-DaqpoHwrwNweI7g<+n1*J()K4gcLjaT%xCE1v(gY*tcy)b!- z^p*6sCFDaB)R&QZ0qtSSP*s0fLe^jI6G{Ckqxf1{Bvvn#|ED&-=Jc@4HW5Kc%DLij zLU0;Dazb$ZRP9W;4r)d1h&*tZts$Fbg+W3G;%GxGLW0ncQ7$K4%Xj9~%eopa~t#`)wn`4^>?3o}JhU>rGinHuD zKI9)@w~jYP*){jiuzJa?W7M27(%wBTC9V99uG%c0bi;9q-+0ckmB@@{&QUG|*^ULuL z%Bpwl3cjO*Imf<_y}C?qY|J3GM-6qIxK>9WhrdA#(@s}+3s9**)k5iMq|6JUwkW?q zn3br>wvYjk?@?OOx`k5@w7rxdwzeOtEegFQ$eT`|R(fAiQfX;z%*2KPJ?_XG+cJ>6 zX=~|+v{g3s(7+CF$}%V1b%JF^Vd*KGN!bHxU+F;mGF1D1khG$G_3byIQL+LYEL%m! zPToWrh24F@R%NJG$!C#ztyLf5$y$LY$!%(8tGCPa3G(eX1ncSa50(E^af>WNKe$f4 zg<3Xq-eO%PGo( zMMp}chL=#iP?nG~<`o-1lu^4!2frijdb`YUdXuv2DU)5oW;H=;Yn!6BU22q8VpE$^ zSpON6LKC#No>7@}>#@eerD7`Vt`O{$Qr@c>Hpf6v^HG^}SNThD?-v$0Nlm~+RCGwx zv#ci~pu%vY_9GO3AaGUs+hy|I$ypyveJnPl{q-9?o72KG@m~0K)|Tcy?+jW118+_{ zyfh*$FZfY8krn@t-2fa85pq^FAZ>!ymeaRv+e}&n(l&$Jt_YS5_GX9js;sj1R9S7< z5Y>P1l+`L>y_>{)Afp1KNR?4Ra(I5|>%liVl2PSfkh0S*jqFUf^#y?xiYM?bsxtVm zW3cxX)`QwWl0XS^EU|E3ksU)RL+V3|tXM-Ea1AsdiM1Up*-F1R=fZ>8`qAp;ImWZK zHgA62xMJ(8$aH%wOe#HPgKAM?g8zE!F!v<}+PWGLCtlW({v#$>ovmZsf0X+tUA4J? zGH}0#^#k{xKsUsx@+SiKZ&u~^A&W-1>Qep)N?N|>UG@IUc+Wa@|2MmQwWaQ(3Czjr z{KeJi?}~%eH5^2J-lhJ; z-BbQQ>UX}c|G&qI{{_F)wP`1xS$H$=3u#`0Zx9lnK>SeaHL1H_aG?0y&8X{9^ z!Cx`-U)9*jjmlfF00MYgsJ;wd|Dt7_o~hO%OIc`APbCYd+qJ{79@JJ+2AfpqkcE)LD^vIO!X{bEL8q2hlBnbM7r6dUMMvqrGw2HygEK@m-n~~75 znM~-|Y-2NmMMgE7)Qrdwe>3Tv{ z;Yn%IOv-%Lkg;_EW_>8Y!c(_N1LcOiXz~HH0RBisf9tUP1Lno@4@4bYbMxt*)28YF zj|>DauC8Hq6<_5neJqrOK#p?WFxMkDle7Yl5m*%>@f3lypw~qHqLhQ9+mzmS#=F75 z3wwd5jGJ5@yHPIh?99qePm%n?85wZpSrTWfM#WAdu5#7U*h;zRQ$<;l2v?Q~31u1b zkQf{wGa6#SoywbGCn0HV4mjOueRx*fWgD$G!~>z+xEGqiwrKHd*;?}*IQJfpp<;(@ zMWJ-Hqqx-&&Kb`I+oRbLB<{VQ6cth;Rd{InN!BlX(u5WKigr#+A*pedGd_^K)YNO1 zeRSjLTNb>M`48DkKlnD?x=AE+w@*tG!$af+VP~thQ=>qkjqIRPU8` zv8j5mHb$Gn2#2vQy*D;sQ7I{+%19}KH|17U0vY0rrLLuav(pFtku|SUCR@GDPw*r) z(HhIIi4k~q4ZhaUy3;5z|HXZ*O?e+*OBDB;T6dZMR^^)q%D2Gh?9uH(ObG;nSp5vB&t z&9HM9nWa7o+;?kDw1a{3D6I>5q3n0YXz`*`;5<&NA$kPPT6eXXE?`OgHMfBSA(^&lpI5rz`@!eO5V!T1A%cseeGs-_d)FubmBC>+#TxOV|iv2HIemfK~3$tw&kjWx+kyOM7;Cz|MJTZQv3SUsy^Qw!*LMb z8^LjmHjI0tv`01^g0nzw4{q!9{ zfmp3Syl-~xc2jSy*8Pu-8Ll-OGG_2FEqC~R<3?gXoAM=;);XAASAtCRq2F}8%%LlT z5oYxLqsNZcu2g^X)!$C)Z`Wai$Bfi^{QWQQm)T3?U)sQ5`9*mx{}R$eKUV+55p|cK zGmf#`Z=_w%*%7WA(|4QFubY!S?^62o<#1|C#i>_nt>MnLTCSF-<+GnR>DmnK1;#_O$lf{|+4zz+SDUB3%$V|3?KSOnZNB!Vwh+(5Vr_}G zMcbzB&~|FO$xT0Z zQSveIgm_XsB_@hVB-o$KYUQcoSussKC#H+%*;@AnF;mPEv&9_ol9(&zkplV^!S-t6 zbunMOAr^?OVw>15c8IUUPO(euCb3(g*dxdoAohv<;#-zC7mEYpp!i-K5yMKGbE5vV{)Yax{;s}MUtv6FylBibA?nt=BRK;*yxw7H{`jan^IzrPkv2yX3*=dcrA?;B&W)?lwiWkY%v+n+BmYFw zz_^L|y>n~j&y3p?e=7c5-Y0pVX^4S|3tfy5(Dy|tU=pWiDm82b2dKEsuL2I zxfA7`q=B-H`LDJC6Y|%jsS=yX6M5%}lqd6gr1s(Th%@@uM;qFjg9+qTMW1I>7@$@|T^wCU8mZu4W8jLh$S$=8>@pV#HGR{1mY3NAZ; zc_T@`7BeJv^9rs=zT%cEpKdcWw^nOiQXsEO>*=jMZKB(aY}2XDP};J#&5N8%Se09g zwsrw}jtu_l zFH*P|IeZXFday@w@m#oEO!)&<*xpbnE1I(PQ*@JwZ>> zll2rmO|PM6=$U$Ly^h{MZ>%@bo9nrHo}RC_)7$G^^r?cp?87!&e@UOK&(mMlUm@agzP>jnCU`p5cmeTBYK_voMM ztMt|STK#i{pxB<8kxDB`+xWn(& z`ua~1H&CYC4NT#=slc-d5hyaJo7QIoO2KGDX^N~z5v#7PFqbD$+~1<)F33*-UJ6B(=sGp+(U16Kpr0@nfE{ilo@fE$6Efu2Aw z;5OiPf0@w-=nLEhjImA|hdx6A0;W%TVb`gR$8yNteFM&B-@Z^zAbGb{T!U zOk}8jS|%RQlIe?O^usdxUKxFl-IL&D6Nm!RfEqw1&=KeYbOnY1BY^q90$?FP-RJ{l z^no(^KpB0Y4Bjk*H_PD7GI+BL-YkPR%izs2c(V-tD}(>a;J-3>ugn;&B^wU|V}WtN zBfvyp68MoJ0L8|`{@0QA-Qle3fg6Auf!l$lz%t+?;A7wuU>EQ;um{)+>;sB{gTNu6 z1ULd51C9eH052Sx0dxc21l|HXz^8!ZJQIil(tsL3CeRV+0(1q20V9CK8_SUj?_GkR6LH|;q!9% zyc|9+htJF5^K$sS96m3H!|(EcZ4~LV_s*jC&Z2Y9iU<5>&?9HjBWK}~ zU(p3;k^N_p`Dc;&XOZh?k=19B)n}2_XOUxPkz;3(V`q_LXN}R+;bCAbFb;SGm^#d0n&hU;5y(|U?T85Fb7zsC5Rmyc}|?5O*sJH)jI%J0iA)X zfop+>fZ;#^uoUM<;x+$1^wNH@jNZJTd*5?i=HG`cb3(t9<7oeWbkcr(9OqMjx!ivl zSj71Tpcqco0TXZo(LgK^4h4M(=SI8 zl%NSp&;%uDf)cHl|4Z#w;5KIBdvm;v({AOSm&wLH+0rmp>fMVbva0n;?jsVAin{;e z{x3xg5C_Bq$^K&Gb}@3h7>!ecRecz%`Y=}YVR0qU2FL~4`%BSAC0Nym(MTm?5zk7S z>MhRS;kWnb2On^+0BiX}|4&H4Qt^qu3SCevR``8ruM)IZiCE?T5zG3pSc9dr*8i>e z-2Ves_F?ozF;@0r@gLstJLUf5cmb#e{QfU>4IoNHXNL~m08D=g61EgASfbM&o%ZOo zM^6G$fHdyc05Ukw z{}L@+f)*}83zwjUOVGk4XyFpHa0yzt1ie{|-YiCM7Na+d(VNBS&0_RsF&erA4PAnU zEn4FGcH=qIF8qI;G4%x&4RGX@}tAD!8}`F0O)$ ztKixyxV93mErDxG;MyvWMAsgI3#;J3N;t3z4lIH5%IS|ua9#--xIJ)OB^>92(<xTOkise)6g;EobFqXf<RYAQ< zs8Xksf5~x=K^-8cA4q-DK!e%&x&2R{t;Se^%A#8?2%mXop zi7g)wWqnZA2W5Rw)(2&MP}2uBeNfW}HGNRi2i1H~%?H(dP|XL`d{E5?)qGIR2i1H~ z%?H(dP|XL`d{E5?)qGIK2St2P!>6d=;rJ==yWa<T(!3{5*5{!zl&%Q%aROt6(2Y-WQD7do;dA^E~<3w!Gc;#OW9|iT` zo*W4=0tJ6%_)FuoyMc?1i0~XB$4?>0Pa(%oA;%_TCU|t z?RK`K?E~}$?gB|+aghm% z3yyQ_(#e}%XT=nPy9`~kPXBYHH)zQ7~ERA4c%k@E38b%v+T@YETeI>S?Ec#yyYx!Im=tlBHhj*)y}E6 zx&7zV8yj%U2PmuF{xHYzFRbMHQ(!f~*N`0NkR0cb9OsZ6=iptpe;0Cp7k-L;_$j`{ zhCHWi$bMLr{gLH&bCh=DCXSoY?v1hkngY^x#6nf}<3O$-@b41Reza}IbIN9Xhu=R2 zw(RAK@A;jaX* zS3tRyJmcZ`DaTbDS94rLnGFhSmHKwRyMwXZS4g0}{z1r!oytbN9cx_LseL#~TeUAo z>{T%9MJDe;ChtNf??NW;LMHD*ChtNf?;>u%jhu-C^8E|J`VO#O1=g2gGw#D?+=som z53Dc49^8kmwhvovpNIqEfyVxYP+%bxSO)f&;Xzsm_BVn3Wnh097JC)gUxsbA4_j;> z*k35V_Wue67D9njP@qa2;rb-kUarfyKE=4Q5*zD3l>ZaB08|5hu%`j!$j9E=2ZaiC z>VloM4?AlgRN9A~wGaDhpI!&32h<1h{5zo54(zCXP^t=BY9EwZ2&KN(2Xj6I7|Hc$ z|1zkxOdm&?@mxO&wI2s2;#-@-z30IC49d;~W^sQG$3@(Kk0Wh^dZ(b=DX4Y|ik-y9 z+J}v`4;xF4KB}PH9;kLo-^F|O`WHdDJ^Htt`~3T$;4-MU49YEoYRjP5CMdQEifw{o zo1oYxD7FcTZ6e~s?MJ2o`Tj*vY#S6i1H}rUSP>K}f?`FgzbxV2Dt{4FD}ri8P^}26 z6+yK{P;C)ZD}ZVRP;C)ZTM5+)pjrV`I|J1Upjr`BD}ri^px7cPRu09^K&?eks~l>b z3G|uGP^(Dx8z@!;#fqR<5fm$eVntA_2#OU!vF)lqQ5UFI1l5Y5S`kz$f@(!jtq7_W zLA4^NwhgLngK9-kP0FiEC|3mK7D2g9P_78d6+yX0P_6*V6+k&D(_}we1oiBGW>Zhf zxk{*41oetkpPR#Rk&=CtP_PIJ7D2&sC|C{!%T=HIoO@pY>wyhQM#}zI2o=kq;9@Aa z9qJW9y#lCL0QCx>UIElw3H4S&y_HaJCDdC9^;SZ?l|(b;`!_(TQYcjlrAm>xQnFP- zsZu0cC6cWYij_jKQYcmm#Y&;r1}L@xDOU-#Hb9wDWN;LM5~Wb06iSpriBc$03MGyr-74unrBI?2N|Zv0QYcXhB}$=0DU>LM5~WDK zN+e$eQm+z;SBb>?8LE^*jZ&zw0csqD8l_O96l!e18kH2-K)?A3jF*D(Qu<0MSS|(2 zrAW9+q+2DDt&%=c3WiI;aH*1N-}sM#(Nc6nC6cTXDOQODt0W2unG3J`0=(`6gT-J_ zj%JJD^Lj$ z(F>oS4)D1bK0h7c^D;2&1+&HQ`7dC%80;2<-D0p?40h#6uo&zXgWbLG`7dC%80;2< z-D0p?40embZZX&`2D`;zw-`S6!RJ0OS{&f>U%+fJnDv6$Jz%yN%oc-LFMRHU&wT+t z{{<|2;qx;6abODkIhAkDpzKUw7Wd|Gw0Zm&uwM-Ji{bIp@c3zX{4_jX1_g?tKrs|3 z4)FLd@VE~iuYkwB@c3RRQVfs#;Bg;3?t{mD_?<7uo}vViO^vbZ@m*_|0vlZ`%&X z#BW-fu(V`77EZ3s5#PSvoFh1a*2kdrF+6f*c;w3P$d%!dE5jpK2EC8rl`GSS10y*f zO|KdQjOSd+vd1_|yWt6rlQ@Dy9ULlI_9FM@a{e;#2EDF;cQ6XTt5>Gv*k}B{op&+s zsqdl;^CD30sJ;)L`IhVNfMVtobif4gcpK3`EWp0pMk0_5qyja73?K_=fyLVjxDsds zZp63-V15K1ItmXRg@=y9Lr0DNtQEfk;CYkhP02S`YT0PBe0nr? zB)wf)fK_lq6%_piiv9vctDtBVRQv_%RY9pLda|_gs-V^{0sGYz8e^C~i)cMjnTY-1j1FQn1CAJ;ReFfOM z94unP_hzJg2Y`)1>#FdO--$2odFucppx4Dp{|<4$pUPP8R(&%%qul>AQG<<%pR^^L zmq@}y+UljZB+*-v=q*X~mLz&h61^n}9C+ywN%V*$dPGu~WRsRJso%IKrQ2g1Cvlw2 zk$1q+N#MvUUegl6k+gulaC4$9=@^gg=l26}En^Y5IuUM0>T$n}bK4g4iYoBB-t+uzKf}$0~ zfGi3qNTe+wAOcFlq7st;B5-a1<5rvVexEt_CO3eZ`u^Vj^Zw3!p6AY;GiS~-&uq^; zGxHp3a+sPNrY47}$zf`8n3~Ma4j==-k`XmIOid0`b|O8C1&!}V-9J_p%pEga8=%h_-^8xGHbyK}6(w4Yy*mA-(hQRW6B zwT7ANcVT|f4d8hziH_rUyq^uXvf|&23d;?vX;H9UHwAZ)_!s&n)o7eRYONH``S;PDI}MNXkYtPDKc(-U=Za+ zI@E(ga#lpnifCK=$z36BYd`Yzem#?T&-42_z1C7-Iq(kuHv!v-{}I1CnOpZq6F(3b z1Pp=ZGs!^#IS|SVpu7Nz3!qe}EP%=)s4R$4`59CeK_xp*2@9w!q8%1N>0u~645hN7 zUI3*9P*?+G3fWpI2cNl8eX#tD_#?!A%1g5fn)}K|SfxsX@R`og~>qL=tqR2W?XBa)p zaw{Q5k#nNRIZ@=CC^C#lgHhy@sOXcBQHqgKqR1#wWRxf}N)#C-sx{yOA;$k?dOOlU zMu{S$$UHZSj1omgi6Wy!bt9lL(2O4MB6>u0e|j*_AgxkoqsS&vWRoZ|cQLX@F|tP# z*&~YF5!G|}|1!VOgp3hI#)u+gM49;)Q(vRV6j9EMl&@ZvAOn{m|CS*CmLTVr(5hth zvIP0I1ZuxTUM+#bFOf$}pr{0Sv;=vy1WHPfIZN~sU>WcRu$}&R0B{2^7#Irt*lK2b zc%m(O-ij{oD17zk zC6B^e58iq@6*(%*Z*`y+&;V!zGzP8)ZUjaU|Cjv!3Ydm}I`A<5M}f!i&*JxG06ORi zkHS|EzIyQ0BgaSKsmDGs_(abo{F6MF&DAxh-kZP*U?s2$__;dubjHFAAQKS%y6DhFcP@JK#e~K6D zdhyPLi$1(3E$C#O_+JT+>%$iiPjuqh{Qjr9@HYMiw;j*{=melmKm)h|4d4bhQBQs` z|3z2+F)f&VV=n!S`vtwi3+QfB(XysG+=b&gP9NY3pf6!p@+C3l_!#&U$Oj65 zBH#deoWwm8wfG^79fm*_hXenXKfH(b}vhRXjX~pzP z8!62kdfhxqw15)LiRpWDbPfEOKy9Et_XC}8L4wXVhf z%ucjocA*us1Fe|dXT|J1D`wYOvCHa=n+4QEH`4%U1T+E81eyaaf!4r}?KA1Y{a!$C zK=zzm%I~RqP|rN-nMXbIsAnGa%%h%p)H9D>z@r!Ns81gC$)o;w)F0_-GpI8ja%UR#MS9jk zdI9NK3+Yi;l8Zv>jz`_`s5>6HNux*bs3#tEM0(V>s3#uvM0(Uha=4ourjf%!>WN1^ z@u(*rbwqm9LV5>}df`zoJnDn=s)cYMjq>#+$2d z`>&A-zNKB3B6kEje5n=ikpC5R`Le<&8th<{pUHh0-7D(zsVT@SC+qZOG|FW(%4Ial zWi*nVYPpO?xr|1+j7GVPM!Aeex$IgV#w_| z2p#!wWgT3R^^SZvvkrRl;mA6qi+uD*#c<^~Tp8%3lG;d867BHrvXms1X@p4%kMX+# zNPH>i%_y;(QDQfv#BOGT%k9XW2e0zrRUW*`gI9U*Di2=e!K*xYl?SiTKCt)dUH1I^ zQ!V$Gt1s!ZLjEeKI0O|-=_hxmmK~RjX)99Y=I|Rpm{U1{wVK1$omiS{sX-K zb9Rgyc8(8ZZZMQwjq}GiGq5N5kbkkWz<fqx_aH8t(N%Hc>7X% z_!;b)xQAU6cdI;qv5GRA{1Vx^#Ggx#KUsZ8T@OK3ntu-zF4gJ$&+w<|nocX-l(1(0 zy-+*~iudSW`1k34enj6y_y~WQ{=*WEf7S!O3b+G6G6MaB>aQT%o=$ErpsI zaB?&hr9t;-I9UVAs=&#%P?rWLtLvVn2jS#vP+1cyFM!H4IC&eCUIC@m;AAg-Z|N~O znWNX0M&V>TIC&G4r$BiKPPT=UI~`5_N0VRAsSUj!srjssEp)0wXFhZugwFlY>7h5s zfW|}6mB)MXc*lplBNvWHy*sGa(*id#UT-H%O6X&xqM+U#q*M;EzS$E^PkaySOwN#} zqTT4t+T}oGr(5WG%WJBAf^yu9CBifP#m*pR5JS<>F*ZTteiiYz$7tMW^%+rU2>F}f z)i!9mk2d^E==(kNje@>UpzpX|?=N8%y@|Qz0%+Vw4f@2*V_(%STaz|GYY8=|#QmDq zkxXjAxY>-k5c~f~^%xvH0S8a;^f6A6_Jw0ZnXl%u2U6sSuaUhZcOr%7@D=VnrzT@s zO=u~C7Fk;=f`&q9D3JNCQxy)&et?xcQ$UFp^PXe8=P>V)Swd|~%SkMkEfGuVapkUy8&_b#ihNFEWSjR?|41Zg9p>-crp znJ^xSBZ9;cLE?xYZA6eZIFSU*2A%^J5QjV>g^owUh#+A^kT4=h7!f3k2$Dqv$s&Se z5kazuxXpo|jnsyVe_N#@~F}Lq0X^C^VHgy2`_Ho;T&CjJZfQ4IIbc>(BJJ`s^C_Ulz+PmA^`{g!A(* ze`fHUzYY2w|1cCp{bl}c|2DsblNHsR>gWkGShx7e3!XcSx(@LxTxffK;zDm%>5D!h z;bH~fp=2F;cYCqg7`yxjed&u&x+oh*fGab8i~Jsl`+wj!BQZQqEj?RsRmWFda?e#g z2#RB&?dM-Ym*r|%uK0h5zA$$A^U8d~;=a;+&X1H`evZ%DmEYco12J>4c+^cGCT|{v!V$jBbuU z!@rv+OYQT;ek;G&UnYM44Sxr_V%P%#B-9kYh!&D?VQ*4mk0=lFcl!IJyklja7QYiK z-}qn0pCDewx(b)&Ep>@iKe_DF)PCW#lwoxw#@OYLjQfavoBu9(+66Ge5o<0ZRCU_N zZrW@?LcA<`DaRj;WtrkwEtLQAK7oY#<{ypKobrb&_!x4fR^bY8Vl>;2P*42=+b2+) zPr53$`F6EwQ)5Z9qFv-cOx%r{k@o;*9oBRQ| zQU2}z8f=hYD+tN13a#=MddeqBGwfHReRh^7urKWR+p&}4Am3HEST}O~jX-uhIA}j7 z^~!bxU<_OAuc7_3SBN$c=V$DfU0RO+wzQ4X-$+`1w|I)dujLS2I{kHe-ucr`A6r6w zKE)VZC$|e|SJ+*Zv;OH&S$@|4)RX=dPx;Fk|I0b$e^tT>{~?Z??jQa?aJv81N}uoF zgq@WwSX$YNt(9#tYb*b)bN)TBywVHXE4{J4axJI*D|^;|7S>n9_R3$Z)s^Qt;r|M! z`{itZaGHO8g8h}a^%b$bB9>S7CRkmmc!vKdwpLDXZl6>8_Qbx4o!Adf>j!7`Pk&PX zhtBDb{r}{o{>0c>{i*I~& z6#Uo?!5>y(v_9#Iuij%pq&of##V2^MBvJ!^rpm-$N7Zq}sz_aMeN`XaTs3FT-BPs# zw^pseXREW(Hk_-@1-DUc!0l8!a0k@^+(~r;^F29scyv?U*vZtLm7OfCk(`hJ0(AkJ zo*t@)Q;!~tdPT3*3;%`cLj1i|Z~WJ=+eFigU5ozbR%{tm!*0nmLZ++fXxQ#n_mHC* zY6djli^Yj_tV`X`-3QbIj*FG4-#PWMH1&Hz9#jt!{}1X9q&!p2U9iLIp5N9^FEz+@t@;v;U z$I4U|{pBn8vst0aqTgH$50_xGrUw1zYW!G4frj;JJyc;8g%mcc&F}|%R(#q01N8wk zY**WzhS;^*!QBtpF{80=wUfN$s$8DhrFN0RZnYa4_Nu+a`9yufQ=h7Q{GX}Mpt(>L zLUWNSatxNQ_CvYsvT2C@tIv7rkUB)n!-_hF9jv3gH;VqR0X_5yIQ*6R%4tMT{SDfq zZ`HTh{-a7cwXw6}IyE%L4zbO^mw=rtY_3!xBv~gDCsn69jj_EF2B+(E!s*q~J=M~D z&0MUo5Z**L;i=}jxr2Rj-GY$T?C0SdLz?fr;E{SHs}^H4_PO*} zJr>HxVPm2iHeNX8j-8hYq(4zl#6Ou`Lt#BdPa(B?^gXOq-LLQG*$3D)6vhV3?+AZH zKSIdk`f>0R`U&up>>twDh4~X7QhkbjL>l`rPvej1h?9h!n7_h-*?KnkIsF{?dG;BF zu^Tgo)aL8?=s*|f1>`+jXM-2(#pLvL_8~RIp3D+xTgrZLLDd(~)Nn?8keJS>54nXHYeNZf}U~?r6TQuK+zsK%M z8bzwns&F|O*rvgvH1=si_>i8{=={Ho@Q2WmgAwan8iw%x#9hx!W9n z3%3RSmTpV@t=v}lTf43CpXHu~w&@)A9PoMWc}@uXIc=QU*wATy^PPx_Hp}w`@4+O z*x(u9WMPMAApRRTvy+8Ao`uH~ z{)lZwV}Hxr0121b413_f?A&9t{^=|0r=t*qI$P$-b5ZfpWO5KViIEa>%=Nk4 z1Q*Xm%uZx15y?Z`Nl;qMNnXOd+bx4+a+(N|UU0=ZQ~sM6Py9c1m6yorV}=M0K(OR9 zDFG^`UyssAgsQ|BkW0QidOBd^-&PlCIL^(Q_~O*yEu$f>fefBW=6Q)J6vpS@5<9r0Z3WaBT8{X{ zA(P>xZ3V3>OkV2a&$J=&CnQfn4kVVeK)K}EARWnPoNl?3NUQvhUs9LOpzH;LdMnRK zT@QZa@#4RUyo`rQ{)B$H%I^o|AJ8Lr;;ll$gW486C;v0Z-KkeR)#~IcNSQIq#*|d! ztuuJ8y!FMO3c`c;2Q5Z&6_kBVavO*86oa_s&kKLcTbGo*T!}4OC=)t<{E~Ek{E`+J zhj`3*{wn($^ho7=IQ4&!a>d>wu_qCKVlNl`kM|fsFCgus9D;I`o+E(78W+z;;%^q? zmh}BHg%Rs-!EX?wR%}GG)0@PH{@4HifCDmSN?jH#J#>mrN=~m}Yq^iLwLI0@T7D^L z2iRJcUMz(+*buElN7je0bOvBcQ|x5l!*h`+zS3@Ok26Ut`)-*+n(iNS@wa#E{Ymaq)&SfUc+=`kx-Gs`p0| zBUZ@o<|N20=NT-TE^@G4I->og5oVCZ!z~_Z@okmDBgT$5<461~JaWvhe`W5pc!tHl zv-sgk;c<72HM2$v{>2X%=Tz29K9#>ss8{;uaR4QyDyI z?1=H9_7-=wxTnRJR0>bxo6vnH3BJzafff&|ByJzNm6+{Aqb(k1@#IS44xzh<*&*~> ziyyT3(MsZup(lyiF%+@*d5d4FB<>V?m6)AEuUq`4#j7icJBQX0vvX*p#ak`@sFJu# zXb&;Fgz_yuVDXX4;K@=qj$8bV#ifFiOl7bgUu1+i)povE`xog?S&2f~nWLg-l@O8Z z6=Q(lOD(>{;)}p8z2k+9Jt705eX!vHzQFo>THM3p^DR!XSR^bNj|5+C@f8;LvG_8J z+gjY-;&v9dvAC|l$D*(K6Af$!2Hhq-aKgjU}lu@h2}MrZ5Elu=5@2gEOp;fns*}#!S~E2W6Wm0zLsRFm@OvR zR5kCLt>y!>&1^S2%!ek$d~7~4XP9ax)ufrQNjKF^hN)pPO;=Ns??>)5wM`w9Wpep~ ze4g25>Y4hcfoW(OnZ{MW7bmsC4<$@8s{Bnt;0zZ z)=}59X1a;>(XFh7?r=V0<#QLSoY-D;@|^;w$T`4z<`Ktpik;(p3F{l@JLlhyuat6G zo2<$@WIAh(nW|Ro%LNTpW7SkOQ!P|0b(T6uou}HW_Nt@mth%yl*n_pf-mC+TIORJ4 z|5D$pf2&gEqZn3Nv#enfz6y|{&#+$xU?;o%Hb4g729TAh+PaR;(sgw``;~x(x)Cc> zO<7|apa<)r`bK?|9-)7!Z)fFbf}X_M&~Nl~)`srY_pzokPrs}evPL6gdlIt7SCtulgkO^oesesR!}S*os|$CtO3~cb-je} zI_2@*bCHFVnxLkTLLhw_n&f#4~uEJ?aH4b>O_M80(- zX~>&Cwf8Dg`8Z({C_{;P7(9u!BS~!#cnT{>lA6m{Mb30S|0e1J8}_YDHFk&9dAU<$ z@08j*K`sv1@Xu|yd?zXc39zBlOkG9D1lI25t*j@iN%{+k!wUYX`F&dAqF0c(5sAwx zmQXkZJcZRQp-^&n1m8qT9}62up7m92`LBjaEbU1wm6b@dY9RM@vAuJ10?o&5$gQWL z|IWt>cXOerZjVU>@Z9u(?PilU3P8cMkgA**v`fcb@Y$t_`FAmrh%Csp{jjQ#mS! zS!G;Olo@g_{%O@jH7yI(^sL5wVm>wdOum!{d$cy%uOpR>V~i&3bz+WeTdPZJbo#nW zz=I^dyENt_6p5$&Dfn%5)e|%M+wflV@v_MiwbHsQAQ5_cG;)iZmIlk0@%;l!9xzhA8pYc?Bh5Xlr1NBKq NB=zG+r1ji${|`g+Rr~+| literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-Regular.ttf b/js/assets/fonts/Roboto/ttf/Roboto-Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..8c082c8de090865264d37594e396c4d6c0099fe4 GIT binary patch literal 162876 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-Thin.ttf b/js/assets/fonts/Roboto/ttf/Roboto-Thin.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d69555029c3e184189c6cf9961c9cb21205bda96 GIT binary patch literal 163132 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 B#Bu-t literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-ThinItalic.ttf b/js/assets/fonts/Roboto/ttf/Roboto-ThinItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..07172ff666ad2d590e29324165b6c7b8e2be72ee GIT binary patch literal 168276 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%0Ay~d>kvf8cPe?;(_E`Q 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/v15/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 b/js/assets/fonts/Roboto/v15/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4411cbc8754cf7ec78501ba711efabe15b936675 GIT binary patch literal 10324 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/v15/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 b/js/assets/fonts/Roboto/v15/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..feec9f1e6a187f63cbb826958bbc01c050b5b9c8 GIT binary patch literal 8040 zcmV-uAD7^FPew8T0RR9103T=o4gdfE078%e03Qzk0ssI200000000000000000000 z0000RjeHz|CI(;thYS%63fg$g1QLP-0X7081BYY_gLD7{AO(UL2Ot|aIJ2U5v|0%f zMcL&1C5o~^X=eYI0&c(%aG3Rr#wD!)d#d`@Ztc-h9a_V$g;X{5O)KU*pMSqoJ36$g zRS^CTiFw-eiFk~U_%VNl)rJxz&wuIo?A%tjG=B^TL4tr8W9rCW0<3&$MhEv z9So8PGrqeNSgpWr&$F^%WVM;y53tUE7b;HVzMYtk!zO1Tr(zrzIFWZ87T9JgH(iI> z%tG{7sHH{zsaRRC`aQRAclYkzM^K{>Wkr<*Ju?GzHM4sPO8FVlGzfsl|Eskj3#^^J zDJror-9oW~0K9LmcP4N!vwKjM|5d08SN60}K)7T~_J5b{30V}9*tM!I@LENF{b>pR z0A^xGTI`&aAb9PyzAl3A&_9(Wa<&{*1Ld9%=VU>wSsrC6XP| zDr7s!Nm`P9jOCSxG6a~aW2&x1Xn~6MitftxIx5=g{Qu_OY<_260eIB73SZ&kWPW-} zJ9$fVmzZQ^&q^f6q)50mZv7hii??el5PpmezZf~h9K&$P*akLwuM>2lqR;M*cYL98tS zLcQGJ1n7fcARz5oFrcZn837(RA|ea20s#-T0f{oiCl02;SwRpVs4G6Iv0AHw4>{-Y&&)fo0Opcd`RR$*P2VaL5YY}Oa@VzwVI~=|Jfvz7ssEES2P;_X!%(mQoeY6>V!V7Ez@v64ZQBb^Yfm*D$ z^?nH3)=3%|Y3+WcP?wPxLhO9b%SJ84$;W z@oq5#EC8DXaV8kR3k3;MEFRS~_6d9I z7H|P3sJg+-0Vf1BVNy_yOO2Xqv@My{d4L;y;4$H*x5Ermp>BQy!XVkB5p;+_R7ANg zax6w7$#a0yooMFh4c;O`EOL9x3NYDRV2veozNrhA#Km?tShC9=zvS`Do!&)xz@GvF zZ9}nKEO5eo433Hm{7S4YdJFvE0B;!z&Td;a?u00~;m>zJ{Dc7an1)fiX%zYuWlVr^ zeQ1Fk?n z-LAwhY@HUZy7asE1Au^oH++$ed^DpU>o~>1@B>L=uC<@e=2^Be93A)gap4 zc6SF3h@b*M;mZ${S9!Fjc^xRD9j$Ibe*jpw{_uZj`LKDv`~D}u4?p})-Zs4bdHW3r zfaA5FV{sMNle1lqY`U9$xo)&Wj~@fqTvw`0xeAr4;22JzJ7dJyUH1$cGHe8%|CGHe zuPk}(jed9BH(-y$2yfk3#lzP~EAs$u2jSI2xe)}j3;qJa2XX{>5JXlC

    bDLv#~} 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/LICENSE.txt b/js/assets/fonts/RobotoMono/LICENSE.txt new file mode 100755 index 0000000000..75b52484ea --- /dev/null +++ b/js/assets/fonts/RobotoMono/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/js/assets/fonts/RobotoMono/font.css b/js/assets/fonts/RobotoMono/font.css new file mode 100644 index 0000000000..5e9ab5721c --- /dev/null +++ b/js/assets/fonts/RobotoMono/font.css @@ -0,0 +1,56 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz0ExlR2MysFCBK8OirNw2kM.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz2dsm03krrxlabhmVQFB99s.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59FzyJ0caWjaSBdV-xZbEgst_k.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz2MSHb9EAJwuSzGfuRChQzQ.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz-pRBTtN4E2_qSPBnw6AgMc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz9Dnm4qiMZlH5rhYv_7LI2Y.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local('Roboto Mono Light'), local('RobotoMono-Light'), url(v4/N4duVc9C58uwPiY8_59Fz9TIkQYohD4BpHvJ3NvbHoA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-Bold.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..07ef607d50c2e0b48d251910fc75c7eb83a41b34 GIT binary patch literal 114752 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-BoldItalic.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-BoldItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..1cca0bf456a3b6b42b3c92e81b4f4ebfa7d41f95 GIT binary patch literal 122808 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

    my#&Iogj%gPMT!rkQYnYa~3nbMLY z-DaEHFSS25B`ecda2f6hhl#@-E;rAa=4QE&?>6^~bo<$?q$C~*51Wh}kU-7k>?|V5 zPLoRd+Zz0Wj8vziUr(>G18g@MKTvUD{h?~`qHR))K%Af%;?FtVoG8U`gjTDnD_ za95fV5%dem-Mx_tiM?6#O%zN%6YgjT3KY)Fo?+oVv-a+U}6lY-?q<)g1z(MY=<6BPV3m zoAT1Kdb``?htG?2x3i5Ln>lj4iVW+C_zp6@y{+D8n>sPGzHQr7H*-1MZTpjx!gU?> z!SvGxKW^3;B_aA`WY&}C!dQ+<6fcSG*E1Z+JmD~PpOV1$>24NsG8Fm`%|;>KP*lHA zfc1vaAsi-7bsIw(aN>%rC>?A@y}_LmGTm*%9ag712u>Lo4u5l4vmyRqD86VHVmKU? z+4b!${oNJ)!+OC?9g(*V{UhC-Z1s$AXV{r=7hAm`+|^cZB7BRj-b}cgt=>X7%vSG5 zxVx?1pYW}=`T)Xr*sM`*HZ{`SPX->0boZBm(nxm?o8fNL|9_$5ZP2j?cw3<(;hxZu za4+acI2<|>?hPFY_koUtBcLPU+o2=jzR;1d&1M}et3ad;rU}iqrlNeZsXSf4ZX5Yq zl+7L4-yMmXbSIp6D7@`wt5UctDV&i1D?| z&9`H1)_AFJ9O#(y<{FKL;%C*Pc%w58z{9_^A>m2&v8)qvWJms?@Xsd6hGV;uBHi(} zs4jye-3h-&3Mb43c_NC$=-kH|WgSYD7p5FuSvfR(C>o1QH0x*(mkQlhDd^ zMg_rtN#YJj?Vn#66>hZ-t^}_EEw`;viig_-o}jY2v#Gu(kImfAt->0%pGSypSq^Fg z{n4629wdgRqxPXRZ>&nF_pHBa?0IT-UbtJNy7JHr@l;nB!r57pb{G9@N`#F zSU4o4BVRyL3i$nu5GX>8r3noHY;T4`p=ocW2{^itxQ|oSNWgU#Zku=tkVAf)COCMYf$1QK~ zs|xC7=gJP(B?BEJ-FImXQaweJP2F?rEP9G^h%MY2MOI5k!#p@Esy>Q!L9leyTJVIiSb7yURa-z3KJ?s$Wwxcc%`-S-7XmeS|4(@o+jIg;Afku+moUp4k9o?G8 zPNQt(j_#2#>peD{H<5k z5e)_IB^nB35)B2ih$a<*$wWhe`-p}DQ;3EFQ;8-Wf%}Pu0uK-k1+s~T0xqI)Ado{e z6v!nS3gi(D1@dj~fnGCDqYL*CL{FEYyAdjo{)FgcTol^egS^x;=t5G@lp&%nk|83U zWpfYqk`~j2BrTC4BAqQmMEao3eV3QClrAJ`nG6wWxeO6$g>8R;iF*c5j{a`{e7ESG zG0)TG;6r~HjK4V!0~NL$EwdVa&#pHtj)TU~xZ6xdKME%Y-opm^NBDQd5)d4#&>oCKoa7h)8&)ppNtVkT77S}Y%GSJ%QEXlURr$wT^;pb vgdH=<%W^UP0trUgS;>K;jluqX{X6@ag8Ln2%}=;Z&!R_3t2gJR8OHwsUum9p literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-Light.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-Light.ttf new file mode 100755 index 0000000000000000000000000000000000000000..63229b2805b102f626c06e29752fe28e1ce9471f GIT binary patch literal 118976 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-LightItalic.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-LightItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..f25bed56adba942784c953710324ef0bba7577fa GIT binary patch literal 127568 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-MediumItalic.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-MediumItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..307efad8fcaa533cdc695b8f1aae696ba662431e GIT binary patch literal 123640 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-Regular.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b158a334eb372a9ab2ecd4f2566e60d561e71a9f GIT binary patch literal 114624 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

    WH`00`s@p7bm8Ow12>ck9v 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

    lr~Z#iIB^qAyre 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

    3PrzD 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/gavcoin-64x64.png b/js/assets/images/contracts/gavcoin-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..13b25a3411f50a19957367864aa6b1bcf542f376 GIT binary patch literal 11587 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

    y~ARR)n(?cc1O0A7~g0An_pL^!E;OIDe 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°Y*`2#lBJ9ZuW8><=gGM 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/maker.svg b/js/assets/images/contracts/maker.svg new file mode 100644 index 0000000000..3c2c6e6345 --- /dev/null +++ b/js/assets/images/contracts/maker.svg @@ -0,0 +1,18 @@ + + + + logo-maker + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/assets/images/contracts/pluton.svg b/js/assets/images/contracts/pluton.svg new file mode 100644 index 0000000000..ecbcee82ef --- /dev/null +++ b/js/assets/images/contracts/pluton.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/assets/images/contracts/singular.svg b/js/assets/images/contracts/singular.svg new file mode 100644 index 0000000000..a735ca7e12 --- /dev/null +++ b/js/assets/images/contracts/singular.svg @@ -0,0 +1,3 @@ + diff --git a/js/assets/images/contracts/unicorn-64x64.png b/js/assets/images/contracts/unicorn-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..be9dacf33f6cfa6d5b61f487d81cada26862c9e8 GIT binary patch literal 6304 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 Eg3EJ1rvLx| literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/unknown-64x64.png b/js/assets/images/contracts/unknown-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b39a80a372151cb98f216568917953a2b76727 GIT binary patch literal 2248 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 T%&ip|_-AQmLoP7cAN&6SN7O$Y literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/blocks-350.jpg b/js/assets/images/dapps/blocks-350.jpg new file mode 100644 index 0000000000000000000000000000000000000000..524f9267c50777c162f3f2081933716329926907 GIT binary patch literal 235011 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/signature.png b/js/assets/images/dapps/signature.png new file mode 100644 index 0000000000000000000000000000000000000000..36b341a036642764e48a0a958077b2440f370cbe GIT binary patch literal 2655 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

    3<7NXmqZ``_Fd}? zH>M?>XA5kB>GxSK%$6VUo2_xE{$~b2hWGyAowj3P`4OX8N1e@=9=J!fdY{~NZ!r8D z2b*A{kVc@fO&q&t4^0?NqdF@#rmeZKy2TsLUA!BkMyrg^`w%B$80PIL=45(PN$zR6 zYY!#5UT~GE7U58!D-imeH2`j$sg2-UEA*x=UG^U@X>M7=PKg{qHKiWyKvj_3jsMUB ziQt;5+SCdHMa3gOdp=v zqA5|Ur{`X{4Hd*tpmll*$SK2(>7X|=a?(1WH}aMrZXk79@DBreCaZC>u|2W(OSF$@ zu&uCBcR`UC_2Evdi>jpUfd14fd8AJDWpy+SIr zjN<=4B_)FQn-R6b*tqjIgAMsTV?%zg{ynRjawgi2zHA_G*aI}GKzrRhTq|4x68;b5 CeA1i% literal 0 HcmV?d00001 diff --git a/js/assets/images/ethcore-block.png b/js/assets/images/ethcore-block.png new file mode 100644 index 0000000000000000000000000000000000000000..bac46e5c957818ec16eef0d841366a4f8b599a24 GIT binary patch literal 11437 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/ethcore-logo-white-square.png b/js/assets/images/ethcore-logo-white-square.png new file mode 100644 index 0000000000000000000000000000000000000000..a300b5a0a891c31fbf7ff3c43a5afdf3f00fa4ba GIT binary patch literal 41621 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�x`nw}$NspLLtEcr|txk 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/parity.xcf b/js/assets/images/parity.xcf new file mode 100644 index 0000000000000000000000000000000000000000..37fa206c0f14228e678afdf88291be984594b044 GIT binary patch literal 17562 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 UNeC=?`fpe89tW_oaNy_v08PtwZ2$lO literal 0 HcmV?d00001 diff --git a/js/assets/images/paritybar.png b/js/assets/images/paritybar.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b0e1457409c386690e52ab1091393de19aedc4 GIT binary patch literal 1971 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/shapeshift-logo.png b/js/assets/images/shapeshift-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..586a01ef13a7ce480d46b88fe6dc457d3083c966 GIT binary patch literal 15127 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. + +/** + * Run `PARITY_URL="127.0.0.1:8180" NODE_ENV="production" npm run build` + * to build the project ; use this server to test that the minifed + * version is working (this is a simple proxy server) + */ + +var express = require('express'); +var proxy = require('http-proxy-middleware'); + +var app = express(); + +app.use(express.static('build')); + +app.use('/api/*', proxy({ + target: 'http://127.0.0.1:8080', + changeOrigin: true +})); + +app.use('/rpc/*', proxy({ + target: 'http://127.0.0.1:8080', + changeOrigin: true +})); + +app.listen(3000); diff --git a/js/package.json b/js/package.json new file mode 100644 index 0000000000..04c29ac7a9 --- /dev/null +++ b/js/package.json @@ -0,0 +1,140 @@ +{ + "name": "parity.js", + "version": "0.0.1", + "main": "release/index.js", + "jsnext:main": "src/index.js", + "author": "Ethcore Team ", + "maintainers": [ + "Jaco Greeff" + ], + "contributors": [], + "license": "GPL-3.0", + "repository": { + "type": "git", + "url": "git+https://github.com/ethcore/parity.js.git" + }, + "keywords": [ + "Ethereum", + "ABI", + "API", + "Web3", + "RPC", + "Parity", + "Promise" + ], + "scripts": { + "build": "npm run build:dll && npm run build:app", + "build:app": "webpack --progress", + "build:dll": "webpack --config webpack.vendor.js --progress", + "ci:build": "npm run ci:build:dll && npm run ci:build:app", + "ci:build:app": "NODE_ENV=production webpack", + "ci:build:dll": "NODE_ENV=production webpack --config webpack.vendor.js", + "clean": "rm -rf ./build ./coverage", + "coveralls": "npm run testCoverage && coveralls < coverage/lcov.info", + "lint": "eslint --ignore-path .gitignore ./src/", + "start": "npm install && npm run build:dll && npm run start:app", + "start:app": "webpack-dev-server -d --history-api-fallback --open --hot --inline --progress --colors --port 3000", + "test": "mocha 'src/**/*.spec.js'", + "test:coverage": "istanbul cover _mocha -- 'src/**/*.spec.js'", + "test:e2e": "mocha 'src/**/*.e2e.js'" + }, + "devDependencies": { + "babel-cli": "^6.10.1", + "babel-core": "^6.10.4", + "babel-eslint": "^6.1.2", + "babel-loader": "^6.2.3", + "babel-plugin-lodash": "^3.2.2", + "babel-plugin-transform-class-properties": "^6.11.5", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-react-remove-prop-types": "^0.2.9", + "babel-plugin-transform-runtime": "^6.9.0", + "babel-polyfill": "^6.13.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-es2015-rollup": "^1.1.1", + "babel-preset-es2016": "^6.11.3", + "babel-preset-es2017": "^6.14.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-0": "^6.5.0", + "babel-register": "6.9.0", + "babel-runtime": "^6.9.2", + "chai": "^3.5.0", + "chai-enzyme": "0.4.2", + "cheerio": "0.20.0", + "copy-webpack-plugin": "^3.0.1", + "core-js": "^2.4.1", + "coveralls": "^2.11.11", + "css-loader": "^0.23.1", + "enzyme": "2.3.0", + "eslint": "^3.1.0", + "eslint-config-semistandard": "^6.0.2", + "eslint-config-standard": "^5.3.5", + "eslint-config-standard-react": "^3.0.0", + "eslint-plugin-promise": "^2.0.0", + "eslint-plugin-react": "^5.1.1", + "eslint-plugin-standard": "^2.0.0", + "extract-text-webpack-plugin": "^1.0.1", + "file-loader": "^0.8.5", + "happypack": "^2.2.1", + "history": "^2.0.0", + "html-loader": "^0.4.3", + "ignore-styles": "2.0.0", + "image-webpack-loader": "^1.8.0", + "istanbul": "^1.0.0-alpha.2", + "jsdom": "9.2.1", + "json-loader": "^0.5.4", + "less": "^2.7.1", + "less-loader": "^2.2.3", + "mocha": "^3.0.0-1", + "mock-local-storage": "1.0.2", + "mock-socket": "^3.0.1", + "nock": "^8.0.0", + "postcss-import": "^8.1.2", + "postcss-loader": "^0.8.1", + "postcss-simple-vars": "^3.0.0", + "react-addons-test-utils": "^15.3.0", + "react-copy-to-clipboard": "^4.2.3", + "react-hot-loader": "^1.3.0", + "rucksack-css": "^0.8.6", + "sinon": "^1.17.4", + "sinon-as-promised": "^4.0.2", + "sinon-chai": "^2.8.0", + "style-loader": "^0.13.0", + "url-loader": "^0.5.7", + "webpack": "^1.13.2", + "webpack-dev-server": "^1.15.2", + "webpack-error-notification": "0.1.6", + "webpack-hot-middleware": "^2.7.1", + "websocket": "^1.0.23" + }, + "dependencies": { + "bignumber.js": "^2.3.0", + "blockies": "0.0.2", + "bytes": "^2.4.0", + "es6-promise": "^3.2.1", + "format-json": "^1.0.3", + "format-number": "^2.0.1", + "geopattern": "^1.2.3", + "isomorphic-fetch": "^2.2.1", + "js-sha3": "^0.5.2", + "lodash": "^4.11.1", + "marked": "^0.3.6", + "material-ui": "^0.15.4", + "moment": "^2.14.1", + "react": "^15.2.1", + "react-addons-css-transition-group": "^15.2.1", + "react-dom": "^15.2.1", + "react-redux": "^4.4.5", + "react-router": "^2.6.1", + "react-router-redux": "^4.0.5", + "react-tap-event-plugin": "^1.0.0", + "react-tooltip": "^2.0.3", + "redux": "^3.5.2", + "redux-actions": "^0.10.1", + "redux-thunk": "^2.1.0", + "rlp": "^2.0.0", + "store": "^1.3.20", + "utf8": "^2.1.1", + "validator": "^5.7.0", + "whatwg-fetch": "^1.0.0" + } +} diff --git a/js/scripts/build.sh b/js/scripts/build.sh new file mode 100755 index 0000000000..07487ffd55 --- /dev/null +++ b/js/scripts/build.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# change into the js directory (one down from scripts) +pushd `dirname $0` +cd .. + +# run build (production) and store the exit code +EXITCODE=0 +npm run ci:build || EXITCODE=1 + +# back to root +popd + +# exit with exit code +exit $EXITCODE diff --git a/js/scripts/install-deps.sh b/js/scripts/install-deps.sh new file mode 100755 index 0000000000..67113f27ea --- /dev/null +++ b/js/scripts/install-deps.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# change into the js directory (one down from scripts) +pushd `dirname $0` +cd .. + +# install deps and store the exit code +EXITCODE=0 +npm install --progress=false || EXITCODE=1 + +# back to root +popd + +# exit with exit code +exit $EXITCODE diff --git a/js/scripts/lint.sh b/js/scripts/lint.sh new file mode 100755 index 0000000000..147bb0a2d0 --- /dev/null +++ b/js/scripts/lint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# change into the js directory (one down from scripts) +pushd `dirname $0` +cd .. + +# run lint & tests and store the exit code +EXITCODE=0 +npm run lint || EXITCODE=1 + +# back to root +popd + +# exit with exit code +exit $EXITCODE diff --git a/js/scripts/release.sh b/js/scripts/release.sh new file mode 100755 index 0000000000..05dc1d7840 --- /dev/null +++ b/js/scripts/release.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# change into the build directory +pushd `dirname $0` +cd ../.build + +# variables +UTCDATE=`date -u "+%Y%m%d-%H%M%S"` + +# init git +rm -rf ./.git +git init + +# our user details +git config push.default simple +git config merge.ours.driver true +git config user.email "jaco+gitlab@ethcore.io" +git config user.name "GitLab Build Bot" + +# add local files and send it up +git remote add origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/js-precompiled.git +git fetch origin +git checkout -b $CI_BUILD_REF_NAME +git add . +git commit -m "$UTCDATE [compiled]" +git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" +git push origin $CI_BUILD_REF_NAME + +# back to root +popd + +# exit with exit code +exit 0 diff --git a/js/scripts/test.sh b/js/scripts/test.sh new file mode 100755 index 0000000000..6827b243ca --- /dev/null +++ b/js/scripts/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# change into the js directory (one down from scripts) +pushd `dirname $0` +cd .. + +# run lint & tests and store the exit code +EXITCODE=0 +npm run test || EXITCODE=1 + +# back to root +popd + +# exit with exit code +exit $EXITCODE diff --git a/js/scripts/update-precompiled.sh b/js/scripts/update-precompiled.sh new file mode 100755 index 0000000000..2d1fa93964 --- /dev/null +++ b/js/scripts/update-precompiled.sh @@ -0,0 +1,18 @@ +#!/bin/bash + + +# change into the submodule build directory +pushd `dirname $0` +cd ../build + +if [ -z "$1" ]; then + popd + echo "Usage: $0 " + exit 1 +fi + +git fetch origin $1 +git merge $1 -X theirs + +popd +exit 0 diff --git a/js/src/3rdparty/etherscan/account.js b/js/src/3rdparty/etherscan/account.js new file mode 100644 index 0000000000..596e6d9cbf --- /dev/null +++ b/js/src/3rdparty/etherscan/account.js @@ -0,0 +1,73 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const PAGE_SIZE = 25; + +import util from '../../api/util'; +import { call } from './call'; + +function _call (method, params, test) { + return call('account', method, params, test); +} + +function balance (address, test = false) { + return _call('balance', { + address: address, + tag: 'latest' + }, test).then((balance) => { + // same format as balancemulti below + return { + account: address, + balance: balance + }; + }); +} + +function balances (addresses, test = false) { + return _call('balancemulti', { + address: addresses.join(','), + tag: 'latest' + }, test); +} + +function transactions (address, page, test = false) { + // page offset from 0 + return _call('txlist', { + address: address, + page: (page || 0) + 1, + offset: PAGE_SIZE, + sort: 'desc' + }, test).then((transactions) => { + return transactions.map((tx) => { + return { + from: util.toChecksumAddress(tx.from), + to: util.toChecksumAddress(tx.to), + hash: tx.hash, + blockNumber: tx.blockNumber, + timeStamp: tx.timeStamp, + value: tx.value + }; + }); + }); +} + +const account = { + balance: balance, + balances: balances, + transactions: transactions +}; + +export { account }; diff --git a/js/src/3rdparty/etherscan/account.spec.js b/js/src/3rdparty/etherscan/account.spec.js new file mode 100644 index 0000000000..283fab3d29 --- /dev/null +++ b/js/src/3rdparty/etherscan/account.spec.js @@ -0,0 +1,69 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import etherscan from './'; + +const TESTADDR = '0xbf885e2b55c6bcc84556a3c5f07d3040833c8d00'; + +describe.skip('etherscan/account', () => { + const checkBalance = function (balance, addr) { + expect(balance).to.be.ok; + expect(balance.account).to.equal(addr); + expect(balance.balance).to.be.ok; + }; + + it('retrieves an account balance', () => { + return etherscan.account + .balance(TESTADDR) + .then((balance) => { + checkBalance(balance, TESTADDR); + }); + }); + + it('retrieves multi account balances', () => { + const addresses = ['0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', TESTADDR]; + + return etherscan.account + .balances(addresses) + .then((balances) => { + expect(balances).to.be.ok; + expect(balances.length).to.equal(2); + balances.forEach((balance, idx) => { + checkBalance(balance, addresses[idx]); + }); + }); + }); + + describe('transactions', () => { + it('retrieves a list of transactions (default)', () => { + return etherscan.account + .transactions(TESTADDR) + .then((transactions) => { + expect(transactions).to.be.ok; + expect(transactions.length).to.equal(25); + }); + }); + + it('retrieves a list of transactions (page 1)', () => { + return etherscan.account + .transactions(TESTADDR, 1) + .then((transactions) => { + expect(transactions).to.be.ok; + expect(transactions.length).to.equal(25); + }); + }); + }); +}); diff --git a/js/src/3rdparty/etherscan/call.js b/js/src/3rdparty/etherscan/call.js new file mode 100644 index 0000000000..1324bcc9d4 --- /dev/null +++ b/js/src/3rdparty/etherscan/call.js @@ -0,0 +1,51 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const options = { + method: 'GET', + headers: { + 'Accept': 'application/json' + } +}; + +export function call (module, action, _params, test) { + const host = test ? 'testnet.etherscan.io' : 'api.etherscan.io'; + let params = ''; + + if (_params) { + Object.keys(_params).map((param) => { + const value = _params[param]; + + params = `${params}&${param}=${value}`; + }); + } + + return fetch(`http://${host}/api?module=${module}&action=${action}${params}`, options) + .then((response) => { + if (response.status !== 200) { + throw { code: response.status, message: response.statusText }; // eslint-disable-line + } + + return response.json(); + }) + .then((result) => { + if (result.message === 'NOTOK') { + throw { code: -1, message: result.result }; // eslint-disable-line + } + + return result.result; + }); +} diff --git a/js/src/3rdparty/etherscan/index.js b/js/src/3rdparty/etherscan/index.js new file mode 100644 index 0000000000..55aeba4733 --- /dev/null +++ b/js/src/3rdparty/etherscan/index.js @@ -0,0 +1,25 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { account } from './account'; +import { stats } from './stats'; + +const etherscan = { + account: account, + stats: stats +}; + +export default etherscan; diff --git a/js/src/3rdparty/etherscan/stats.js b/js/src/3rdparty/etherscan/stats.js new file mode 100644 index 0000000000..ecefefe7d8 --- /dev/null +++ b/js/src/3rdparty/etherscan/stats.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { call } from './call'; + +function _call (action, test) { + return call('stats', action, null, test); +} + +function price (test = false) { + return _call('ethprice', test); +} + +function supply (test = false) { + return _call('ethsupply', test); +} + +const stats = { + price: price, + supply: supply +}; + +export { stats }; diff --git a/js/src/3rdparty/etherscan/stats.spec.js b/js/src/3rdparty/etherscan/stats.spec.js new file mode 100644 index 0000000000..fde2b035c2 --- /dev/null +++ b/js/src/3rdparty/etherscan/stats.spec.js @@ -0,0 +1,35 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import etherscan from './'; + +describe.skip('etherscan/stats', () => { + it('retrieves the latest price', () => { + return etherscan.stats + .price() + .then((price) => { + expect(price).to.be.ok; + }); + }); + + it('retrieves the ether total', () => { + return etherscan.stats + .supply() + .then((supply) => { + expect(supply).to.be.ok; + }); + }); +}); diff --git a/js/src/3rdparty/shapeshift/helpers.spec.js b/js/src/3rdparty/shapeshift/helpers.spec.js new file mode 100644 index 0000000000..a82b2f6c39 --- /dev/null +++ b/js/src/3rdparty/shapeshift/helpers.spec.js @@ -0,0 +1,71 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import chai from 'chai'; +import nock from 'nock'; + +global.expect = chai.expect; // eslint-disable-line no-undef + +import 'isomorphic-fetch'; +import es6Promise from 'es6-promise'; +es6Promise.polyfill(); + +import initShapeshift from './'; +import initRpc from './rpc'; + +const APIKEY = '0x123454321'; + +const shapeshift = initShapeshift(APIKEY); +const rpc = initRpc(APIKEY); + +function mockget (requests) { + let scope = nock(rpc.ENDPOINT); + + requests.forEach((request) => { + scope = scope + .get(`/${request.path}`) + .reply(request.code || 200, () => { + return request.reply; + }); + }); + + return scope; +} + +function mockpost (requests) { + let scope = nock(rpc.ENDPOINT); + + requests.forEach((request) => { + scope = scope + .post(`/${request.path}`) + .reply(request.code || 200, (uri, body) => { + scope.body = scope.body || {}; + scope.body[request.path] = body; + + return request.reply; + }); + }); + + return scope; +} + +export { + APIKEY, + mockget, + mockpost, + shapeshift, + rpc +}; diff --git a/js/src/3rdparty/shapeshift/index.js b/js/src/3rdparty/shapeshift/index.js new file mode 100644 index 0000000000..5dd91e4f42 --- /dev/null +++ b/js/src/3rdparty/shapeshift/index.js @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import initRpc from './rpc'; +import initShapeshift from './shapeshift'; + +export default function (apikey) { + return initShapeshift(initRpc(apikey)); +} diff --git a/js/src/3rdparty/shapeshift/rpc.js b/js/src/3rdparty/shapeshift/rpc.js new file mode 100644 index 0000000000..919f0b07f6 --- /dev/null +++ b/js/src/3rdparty/shapeshift/rpc.js @@ -0,0 +1,67 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const ENDPOINT = 'https://cors.shapeshift.io'; + +function call (method, options) { + return fetch(`${ENDPOINT}/${method}`, options) + .then((response) => { + if (!response.ok) { + throw new Error(response.statusText); + } + + return response.json(); + }) + .then((result) => { + if (result.error) { + throw new Error(result.error); + } + + return result; + }); +} + +export default function (apiKey) { + function get (method) { + return call(method, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + } + + function post (method, data) { + const params = Object.assign({}, { apiKey }, data); + const body = JSON.stringify(params); + + return call(method, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Content-Length': body.length + }, + body + }); + } + + return { + ENDPOINT, + get, + post + }; +} diff --git a/js/src/3rdparty/shapeshift/rpc.spec.js b/js/src/3rdparty/shapeshift/rpc.spec.js new file mode 100644 index 0000000000..8de9e86413 --- /dev/null +++ b/js/src/3rdparty/shapeshift/rpc.spec.js @@ -0,0 +1,77 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { APIKEY, mockget, mockpost, rpc } from './helpers.spec.js'; + +describe('shapeshift/rpc', () => { + describe('GET', () => { + const REPLY = { test: 'this is some result' }; + + let scope; + let result; + + beforeEach(() => { + scope = mockget([{ path: 'test', reply: REPLY }]); + + return rpc + .get('test') + .then((_result) => { + result = _result; + }); + }); + + it('does GET', () => { + expect(scope.isDone()).to.be.true; + }); + + it('retrieves the info', () => { + expect(result).to.deep.equal(REPLY); + }); + }); + + describe('POST', () => { + const REPLY = { test: 'this is some result' }; + + let scope; + let result; + + beforeEach(() => { + scope = mockpost([{ path: 'test', reply: REPLY }]); + + return rpc + .post('test', { input: 'stuff' }) + .then((_result) => { + result = _result; + }); + }); + + it('does POST', () => { + expect(scope.isDone()).to.be.true; + }); + + it('retrieves the info', () => { + expect(result).to.deep.equal(REPLY); + }); + + it('passes the input object', () => { + expect(scope.body.test.input).to.equal('stuff'); + }); + + it('passes the apikey specified', () => { + expect(scope.body.test.apiKey).to.equal(APIKEY); + }); + }); +}); diff --git a/js/src/3rdparty/shapeshift/shapeshift.js b/js/src/3rdparty/shapeshift/shapeshift.js new file mode 100644 index 0000000000..344a448022 --- /dev/null +++ b/js/src/3rdparty/shapeshift/shapeshift.js @@ -0,0 +1,93 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default function (rpc) { + const subscriptions = []; + + function getCoins () { + return rpc.get('getcoins'); + } + + function getMarketInfo (pair) { + return rpc.get(`marketinfo/${pair}`); + } + + function getStatus (depositAddress) { + return rpc.get(`txStat/${depositAddress}`); + } + + function shift (toAddress, returnAddress, pair) { + return rpc.post('shift', { + withdrawal: toAddress, + pair: pair, + returnAddress: returnAddress + }); + } + + function subscribe (depositAddress, callback) { + const idx = subscriptions.length; + + subscriptions.push({ + depositAddress, + callback, + idx + }); + } + + function _getSubscriptionStatus (subscription) { + if (!subscription) { + return; + } + + getStatus(subscription.depositAddress) + .then((result) => { + switch (result.status) { + case 'no_deposits': + case 'received': + subscription.callback(null, result); + return; + + case 'complete': + subscription.callback(null, result); + subscriptions[subscription.idx] = null; + return; + + case 'failed': + subscription.callback({ + message: status.error, + fatal: true + }); + subscriptions[subscription.idx] = null; + return; + } + }) + .catch(subscription.callback); + } + + function _pollStatus () { + subscriptions.forEach(_getSubscriptionStatus); + } + + setInterval(_pollStatus, 2000); + + return { + getCoins, + getMarketInfo, + getStatus, + shift, + subscribe + }; +} diff --git a/js/src/3rdparty/shapeshift/shapeshift.spec.js b/js/src/3rdparty/shapeshift/shapeshift.spec.js new file mode 100644 index 0000000000..36b1506a27 --- /dev/null +++ b/js/src/3rdparty/shapeshift/shapeshift.spec.js @@ -0,0 +1,124 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { mockget, mockpost, shapeshift } from './helpers.spec.js'; + +describe('shapeshift/calls', () => { + describe('getCoins', () => { + const REPLY = { + BTC: { + name: 'Bitcoin', + symbol: 'BTC', + image: 'https://shapeshift.io/images/coins/bitcoin.png', + status: 'available' + }, + ETH: { + name: 'Ether', + symbol: 'ETH', + image: 'https://shapeshift.io/images/coins/ether.png', + status: 'available' + } + }; + + let scope; + + before(() => { + scope = mockget([{ path: 'getcoins', reply: REPLY }]); + + return shapeshift.getCoins(); + }); + + it('makes the call', () => { + expect(scope.isDone()).to.be.ok; + }); + }); + + describe('getMarketInfo', () => { + const REPLY = { + pair: 'btc_ltc', + rate: 128.17959917, + minerFee: 0.003, + limit: 0, + minimum: 0.00004632 + }; + + let scope; + + before(() => { + scope = mockget([{ path: 'marketinfo/btc_ltc', reply: REPLY }]); + + return shapeshift.getMarketInfo('btc_ltc'); + }); + + it('makes the call', () => { + expect(scope.isDone()).to.be.ok; + }); + }); + + describe('getStatus', () => { + const REPLY = { + status: '0x123', + address: '0x123' + }; + + let scope; + + before(() => { + scope = mockget([{ path: 'txStat/0x123', reply: REPLY }]); + + return shapeshift.getStatus('0x123'); + }); + + it('makes the call', () => { + expect(scope.isDone()).to.be.ok; + }); + }); + + describe('shift', () => { + const REPLY = { + deposit: '1BTC', + depositType: 'btc', + withdrawal: '0x456', + withdrawalType: 'eth' + }; + + let scope; + + before(() => { + scope = mockpost([{ path: 'shift', reply: REPLY }]); + + return shapeshift.shift('0x456', '1BTC', 'btc_eth'); + }); + + it('makes the call', () => { + expect(scope.isDone()).to.be.ok; + }); + + describe('body', () => { + it('has withdrawal set', () => { + expect(scope.body.shift.withdrawal).to.equal('0x456'); + }); + + it('has returnAddress set', () => { + expect(scope.body.shift.returnAddress).to.equal('1BTC'); + }); + + it('has pair set', () => { + expect(scope.body.shift.pair).to.equal('btc_eth'); + }); + }); + }); +}); diff --git a/js/src/abi/README.md b/js/src/abi/README.md new file mode 100644 index 0000000000..6ad6098593 --- /dev/null +++ b/js/src/abi/README.md @@ -0,0 +1,32 @@ +# ethabi-js + +A very early, very POC-type port of [https://github.com/ethcore/ethabi](https://github.com/ethcore/ethabi) to JavaScript + +[![Build Status](https://travis-ci.org/jacogr/ethabi-js.svg?branch=master)](https://travis-ci.org/jacogr/ethabi-js) +[![Coverage Status](https://coveralls.io/repos/github/jacogr/ethabi-js/badge.svg?branch=master)](https://coveralls.io/github/jacogr/ethabi-js?branch=master) +[![Dependency Status](https://david-dm.org/jacogr/ethabi-js.svg)](https://david-dm.org/jacogr/ethabi-js) +[![devDependency Status](https://david-dm.org/jacogr/ethabi-js/dev-status.svg)](https://david-dm.org/jacogr/ethabi-js#info=devDependencies) + +## contributing + +Clone the repo and install dependencies via `npm install`. Tests can be executed via + +- `npm run testOnce` (100% covered unit tests) + +## installation + +Install the package with `npm install --save ethabi-js` from the [npm registry ethabi-js](https://www.npmjs.com/package/ethabi-js) + + +## implementation +### approach + +- this version tries to stay as close to the original Rust version in intent, function names & purpose +- it is a basic port of the Rust version, relying on effectively the same test-suite (expanded where deemed appropriate) +- it is meant as a library to be used in other projects, i.e. [ethapi-js](https://www.npmjs.com/package/ethapi-js) + +### differences to original Rust version + +- internally the library operates on string binary representations as opposed to Vector bytes, lengths are therefore 64 bytes as opposed to 32 bytes +- function names are adapted from the Rust standard snake_case to the JavaScript standard camelCase +- due to the initial library focus, the cli component (as implemented by the original) is not supported nor mplemented diff --git a/js/src/abi/abi.js b/js/src/abi/abi.js new file mode 100644 index 0000000000..cdf3b1f639 --- /dev/null +++ b/js/src/abi/abi.js @@ -0,0 +1,20 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Interface from './spec/interface'; + +export default class Abi extends Interface { +} diff --git a/js/src/abi/decoder/bytesTaken.js b/js/src/abi/decoder/bytesTaken.js new file mode 100644 index 0000000000..49b443d213 --- /dev/null +++ b/js/src/abi/decoder/bytesTaken.js @@ -0,0 +1,30 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class BytesTaken { + constructor (bytes, newOffset) { + this._bytes = bytes; + this._newOffset = newOffset; + } + + get bytes () { + return this._bytes; + } + + get newOffset () { + return this._newOffset; + } +} diff --git a/js/src/abi/decoder/bytesTaken.spec.js b/js/src/abi/decoder/bytesTaken.spec.js new file mode 100644 index 0000000000..65bb9e1b6f --- /dev/null +++ b/js/src/abi/decoder/bytesTaken.spec.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BytesTaken from './bytesTaken'; + +describe('abi/decoder/BytesTaken', () => { + describe('constructor', () => { + it('sets the bytes of the object', () => { + expect((new BytesTaken(1, 2)).bytes).to.equal(1); + }); + + it('sets the newOffset of the object', () => { + expect((new BytesTaken(3, 4)).newOffset).to.equal(4); + }); + }); +}); diff --git a/js/src/abi/decoder/decodeResult.js b/js/src/abi/decoder/decodeResult.js new file mode 100644 index 0000000000..8595642dfb --- /dev/null +++ b/js/src/abi/decoder/decodeResult.js @@ -0,0 +1,30 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class DecodeResult { + constructor (token, newOffset) { + this._token = token; + this._newOffset = newOffset; + } + + get token () { + return this._token; + } + + get newOffset () { + return this._newOffset; + } +} diff --git a/js/src/abi/decoder/decodeResult.spec.js b/js/src/abi/decoder/decodeResult.spec.js new file mode 100644 index 0000000000..892836d07a --- /dev/null +++ b/js/src/abi/decoder/decodeResult.spec.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import DecodeResult from './decodeResult'; + +describe('abi/decoder/DecodeResult', () => { + describe('constructor', () => { + it('sets the token of the object', () => { + expect((new DecodeResult('token', 2)).token).to.equal('token'); + }); + + it('sets the newOffset of the object', () => { + expect((new DecodeResult('baz', 4)).newOffset).to.equal(4); + }); + }); +}); diff --git a/js/src/abi/decoder/decoder.js b/js/src/abi/decoder/decoder.js new file mode 100644 index 0000000000..0d21831222 --- /dev/null +++ b/js/src/abi/decoder/decoder.js @@ -0,0 +1,145 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import utf8 from 'utf8'; + +import Token from '../token/token'; +import BytesTaken from './bytesTaken'; +import DecodeResult from './decodeResult'; +import ParamType from '../spec/paramType/paramType'; +import { sliceData } from '../util/slice'; +import { asAddress, asBool, asI32, asU32 } from '../util/sliceAs'; +import { isArray, isInstanceOf } from '../util/types'; + +const NULL = '0000000000000000000000000000000000000000000000000000000000000000'; + +export default class Decoder { + static decode (params, data) { + if (!isArray(params)) { + throw new Error('Parameters should be array of ParamType'); + } + + const slices = sliceData(data); + let offset = 0; + + return params.map((param) => { + const result = Decoder.decodeParam(param, slices, offset); + offset = result.newOffset; + return result.token; + }); + } + + static peek (slices, position) { + if (!slices || !slices[position]) { + return NULL; + } + + return slices[position]; + } + + static takeBytes (slices, position, length) { + const slicesLength = Math.floor((length + 31) / 32); + let bytesStr = ''; + + for (let idx = 0; idx < slicesLength; idx++) { + bytesStr = `${bytesStr}${Decoder.peek(slices, position + idx)}`; + } + + const bytes = (bytesStr.substr(0, length * 2).match(/.{1,2}/g) || []).map((code) => parseInt(code, 16)); + + return new BytesTaken(bytes, position + slicesLength); + } + + static decodeParam (param, slices, offset) { + if (!isInstanceOf(param, ParamType)) { + throw new Error('param should be instanceof ParamType'); + } + + const tokens = []; + let taken; + let lengthOffset; + let length; + let newOffset; + + switch (param.type) { + case 'address': + return new DecodeResult(new Token(param.type, asAddress(Decoder.peek(slices, offset))), offset + 1); + + case 'bool': + return new DecodeResult(new Token(param.type, asBool(Decoder.peek(slices, offset))), offset + 1); + + case 'int': + return new DecodeResult(new Token(param.type, asI32(Decoder.peek(slices, offset))), offset + 1); + + case 'uint': + return new DecodeResult(new Token(param.type, asU32(Decoder.peek(slices, offset))), offset + 1); + + case 'fixedBytes': + taken = Decoder.takeBytes(slices, offset, param.length); + + return new DecodeResult(new Token(param.type, taken.bytes), taken.newOffset); + + case 'bytes': + lengthOffset = asU32(Decoder.peek(slices, offset)).div(32).toNumber(); + length = asU32(Decoder.peek(slices, lengthOffset)).toNumber(); + taken = Decoder.takeBytes(slices, lengthOffset + 1, length); + + return new DecodeResult(new Token(param.type, taken.bytes), offset + 1); + + case 'string': + if (param.indexed) { + taken = Decoder.takeBytes(slices, offset, 32); + + return new DecodeResult(new Token('fixedBytes', taken.bytes), offset + 1); + } + + lengthOffset = asU32(Decoder.peek(slices, offset)).div(32).toNumber(); + length = asU32(Decoder.peek(slices, lengthOffset)).toNumber(); + taken = Decoder.takeBytes(slices, lengthOffset + 1, length); + + const str = taken.bytes.map((code) => String.fromCharCode(code)).join(''); + + return new DecodeResult(new Token(param.type, utf8.decode(str)), offset + 1); + + case 'array': + lengthOffset = asU32(Decoder.peek(slices, offset)).div(32).toNumber(); + length = asU32(Decoder.peek(slices, lengthOffset)).toNumber(); + newOffset = lengthOffset + 1; + + for (let idx = 0; idx < length; idx++) { + const result = Decoder.decodeParam(param.subtype, slices, newOffset); + newOffset = result.newOffset; + tokens.push(result.token); + } + + return new DecodeResult(new Token(param.type, tokens), offset + 1); + + case 'fixedArray': + newOffset = offset; + + for (let idx = 0; idx < param.length; idx++) { + const result = Decoder.decodeParam(param.subtype, slices, newOffset); + newOffset = result.newOffset; + tokens.push(result.token); + } + + return new DecodeResult(new Token(param.type, tokens), newOffset); + + default: + throw new Error(`Invalid param type ${param.type} in decodeParam`); + } + } +} diff --git a/js/src/abi/decoder/decoder.spec.js b/js/src/abi/decoder/decoder.spec.js new file mode 100644 index 0000000000..eeaf716c89 --- /dev/null +++ b/js/src/abi/decoder/decoder.spec.js @@ -0,0 +1,310 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import Decoder from './decoder'; +import ParamType from '../spec/paramType'; +import Token from '../token'; +import { padU32 } from '../util/pad'; + +describe('abi/decoder/Decoder', () => { + const stringToBytes = function (str) { + return str.match(/.{1,2}/g).map((code) => parseInt(code, 16)); + }; + + const address1 = '0000000000000000000000001111111111111111111111111111111111111111'; + const address2 = '0000000000000000000000002222222222222222222222222222222222222222'; + const address3 = '0000000000000000000000003333333333333333333333333333333333333333'; + const address4 = '0000000000000000000000004444444444444444444444444444444444444444'; + const bool1 = '0000000000000000000000000000000000000000000000000000000000000001'; + const bytes1 = '1234000000000000000000000000000000000000000000000000000000000000'; + const bytes2 = '1000000000000000000000000000000000000000000000000000000000000000'; + const bytes3 = '10000000000000000000000000000000000000000000000000000000000002'; + const bytes4 = '0010000000000000000000000000000000000000000000000000000000000002'; + const int1 = '0111111111111111111111111111111111111111111111111111111111111111'; + const intn = 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85'; + const string1 = '6761766f66796f726b0000000000000000000000000000000000000000000000'; + const tokenAddress1 = new Token('address', `0x${address1.slice(-40)}`); + const tokenAddress2 = new Token('address', `0x${address2.slice(-40)}`); + const tokenAddress3 = new Token('address', `0x${address3.slice(-40)}`); + const tokenAddress4 = new Token('address', `0x${address4.slice(-40)}`); + const tokenBool1 = new Token('bool', true); + const tokenFixedBytes1 = new Token('fixedBytes', [0x12, 0x34]); + const tokenBytes1 = new Token('bytes', [0x12, 0x34]); + const tokenBytes2 = new Token('bytes', stringToBytes(bytes2).concat(stringToBytes(bytes2))); + const tokenBytes3 = new Token('bytes', stringToBytes(bytes3)); + const tokenBytes4 = new Token('bytes', stringToBytes(bytes4)); + const tokenInt1 = new Token('int', new BigNumber(int1, 16)); + const tokenIntn = new Token('int', new BigNumber(-123)); + const tokenUint1 = new Token('uint', new BigNumber(int1, 16)); + const tokenUintn = new Token('uint', new BigNumber(intn, 16)); + const tokenString1 = new Token('string', 'gavofyork'); + const slices = [ address1, address2, address3, address4 ]; + + describe('peek', () => { + it('returns the slice at the correct position', () => { + expect(Decoder.peek(slices, 1)).to.equal(slices[1]); + }); + + it('returns empty on invalid slices', () => { + expect(Decoder.peek(null, 4)).to.equal('0000000000000000000000000000000000000000000000000000000000000000'); + }); + }); + + describe('takeBytes', () => { + it('returns a single slice', () => { + expect(Decoder.takeBytes(slices, 0, 32).bytes).to.deep.equal(stringToBytes(slices[0])); + }); + + it('returns a single partial slice', () => { + expect(Decoder.takeBytes(slices, 0, 20).bytes).to.deep.equal(stringToBytes(slices[0].substr(0, 40))); + }); + + it('returns multiple slices', () => { + expect(Decoder.takeBytes(slices, 0, 64).bytes).to.deep.equal(stringToBytes(`${slices[0]}${slices[1]}`)); + }); + + it('returns a single offset slice', () => { + expect(Decoder.takeBytes(slices, 1, 32).bytes).to.deep.equal(stringToBytes(slices[1])); + }); + + it('returns multiple offset slices', () => { + expect(Decoder.takeBytes(slices, 1, 64).bytes).to.deep.equal(stringToBytes(`${slices[1]}${slices[2]}`)); + }); + + it('returns the requires length from slices', () => { + expect( + Decoder.takeBytes(slices, 1, 75).bytes + ).to.deep.equal(stringToBytes(`${slices[1]}${slices[2]}${slices[3]}`.substr(0, 150))); + }); + }); + + describe('decodeParam', () => { + it('throws an error on non ParamType param', () => { + expect(() => Decoder.decodeParam({})).to.throw(/ParamType/); + }); + + it('throws an error on invalid param type', () => { + const pt = new ParamType('address'); + pt._type = 'noMatch'; + + expect(() => Decoder.decodeParam(pt)).to.throw(/noMatch/); + }); + + it('decodes an address', () => { + expect( + Decoder.decodeParam(new ParamType('address'), [address1], 0).token + ).to.deep.equal(tokenAddress1); + }); + + it('decodes a bool', () => { + expect( + Decoder.decodeParam(new ParamType('bool'), [bool1], 0).token + ).to.deep.equal(tokenBool1); + }); + + it('decodes an int', () => { + expect( + Decoder.decodeParam(new ParamType('int'), [int1], 0).token + ).to.deep.equal(tokenInt1); + }); + + it('decodes a negative int', () => { + expect( + Decoder.decodeParam(new ParamType('int'), [intn], 0).token + ).to.deep.equal(tokenIntn); + }); + + it('decodes an uint', () => { + expect( + Decoder.decodeParam(new ParamType('uint'), [int1], 0).token + ).to.deep.equal(tokenUint1); + }); + + it('decodes an uint (negative as int)', () => { + expect( + Decoder.decodeParam(new ParamType('uint'), [intn], 0).token + ).to.deep.equal(tokenUintn); + }); + + it('decodes fixedBytes', () => { + expect( + Decoder.decodeParam(new ParamType('fixedBytes', null, 2), [bytes1], 0).token + ).to.deep.equal(tokenFixedBytes1); + }); + + it('decodes bytes', () => { + expect( + Decoder.decodeParam(new ParamType('bytes'), [padU32(0x20), padU32(2), bytes1], 0).token + ).to.deep.equal(tokenBytes1); + }); + + it('decodes string', () => { + expect( + Decoder.decodeParam(new ParamType('string'), [padU32(0x20), padU32(9), string1], 0).token + ).to.deep.equal(tokenString1); + }); + + it('decodes string (indexed)', () => { + expect( + Decoder.decodeParam(new ParamType('string', null, 0, true), [bytes1], 0) + ).to.deep.equal(Decoder.decodeParam(new ParamType('fixedBytes', null, 32, true), [bytes1], 0)); + }); + }); + + describe('decode', () => { + it('throws an error on invalid params', () => { + expect(() => Decoder.decode(null, '123')).to.throw(/array/); + }); + + describe('address', () => { + it('decodes an address', () => { + expect( + Decoder.decode( + [new ParamType('address')], + `${address1}` + ) + ).to.deep.equal([tokenAddress1]); + }); + + it('decodes 2 addresses', () => { + expect( + Decoder.decode( + [new ParamType('address'), new ParamType('address')], + `${address1}${address2}` + ) + ).to.deep.equal([tokenAddress1, tokenAddress2]); + }); + + it('decodes a fixedArray of addresses', () => { + expect( + Decoder.decode( + [new ParamType('fixedArray', new ParamType('address'), 2)], + `${address1}${address2}` + ) + ).to.deep.equal([new Token('fixedArray', [tokenAddress1, tokenAddress2])]); + }); + + it('decodes a dynamic array of addresses', () => { + expect( + Decoder.decode( + [new ParamType('array', new ParamType('address'))], + `${padU32(0x20)}${padU32(2)}${address1}${address2}` + ) + ).to.deep.equal([new Token('array', [tokenAddress1, tokenAddress2])]); + }); + + it('decodes a dynamic array of fixed arrays', () => { + expect( + Decoder.decode( + [new ParamType('array', new ParamType('fixedArray', new ParamType('address'), 2))], + `${padU32(0x20)}${padU32(2)}${address1}${address2}${address3}${address4}` + ) + ).to.deep.equal([ + new Token('array', [ + new Token('fixedArray', [tokenAddress1, tokenAddress2]), + new Token('fixedArray', [tokenAddress3, tokenAddress4]) + ]) + ]); + }); + }); + + describe('int', () => { + it('decodes an int', () => { + expect( + Decoder.decode( + [new ParamType('int')], + `${int1}` + ) + ).to.deep.equal([tokenInt1]); + }); + }); + + describe('uint', () => { + it('decodes an uint', () => { + expect( + Decoder.decode( + [new ParamType('uint')], + `${int1}` + ) + ).to.deep.equal([tokenUint1]); + }); + }); + + describe('fixedBytes', () => { + it('decodes fixedBytes', () => { + expect( + Decoder.decode( + [new ParamType('fixedBytes', null, 2)], + `${bytes1}` + ) + ).to.deep.equal([tokenFixedBytes1]); + }); + }); + + describe('bytes', () => { + it('decodes bytes', () => { + expect( + Decoder.decode( + [new ParamType('bytes')], + `${padU32(0x20)}${padU32(2)}${bytes1}` + ) + ).to.deep.equal([tokenBytes1]); + }); + + it('decodes bytes sequence', () => { + expect( + Decoder.decode( + [new ParamType('bytes')], + `${padU32(0x20)}${padU32(0x40)}${bytes2}${bytes2}` + ) + ).to.deep.equal([tokenBytes2]); + }); + + it('decodes bytes seuence (2)', () => { + expect( + Decoder.decode( + [new ParamType('bytes'), new ParamType('bytes')], + `${padU32(0x40)}${padU32(0x80)}${padU32(0x1f)}${bytes3}00${padU32(0x20)}${bytes4}` + ) + ).to.deep.equal([tokenBytes3, tokenBytes4]); + }); + }); + + describe('bool', () => { + it('decodes a single bool', () => { + expect( + Decoder.decode( + [new ParamType('bool')], + bool1 + ) + ).to.deep.equal([tokenBool1]); + }); + }); + + describe('string', () => { + it('decodes a string', () => { + expect( + Decoder.decode( + [new ParamType('string')], + `${padU32(0x20)}${padU32(9)}${string1}` + ) + ).to.deep.equal([tokenString1]); + }); + }); + }); +}); diff --git a/js/src/abi/decoder/index.js b/js/src/abi/decoder/index.js new file mode 100644 index 0000000000..f9839c10d8 --- /dev/null +++ b/js/src/abi/decoder/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './decoder'; diff --git a/js/src/abi/encoder/encoder.js b/js/src/abi/encoder/encoder.js new file mode 100644 index 0000000000..bb3a17d264 --- /dev/null +++ b/js/src/abi/encoder/encoder.js @@ -0,0 +1,72 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { padAddress, padBool, padBytes, padFixedBytes, padU32, padString } from '../util/pad'; +import Mediate from './mediate'; +import Token from '../token/token'; +import { isArray, isInstanceOf } from '../util/types'; + +export default class Encoder { + static encode (tokens) { + if (!isArray(tokens)) { + throw new Error('tokens should be array of Token'); + } + + const mediates = tokens.map((token) => Encoder.encodeToken(token)); + const inits = mediates + .map((mediate, idx) => mediate.init(Mediate.offsetFor(mediates, idx))) + .join(''); + const closings = mediates + .map((mediate, idx) => mediate.closing(Mediate.offsetFor(mediates, idx))) + .join(''); + + return `${inits}${closings}`; + } + + static encodeToken (token) { + if (!isInstanceOf(token, Token)) { + throw new Error('token should be instanceof Token'); + } + + switch (token.type) { + case 'address': + return new Mediate('raw', padAddress(token.value)); + + case 'int': + case 'uint': + return new Mediate('raw', padU32(token.value)); + + case 'bool': + return new Mediate('raw', padBool(token.value)); + + case 'fixedBytes': + return new Mediate('raw', padFixedBytes(token.value)); + + case 'bytes': + return new Mediate('prefixed', padBytes(token.value)); + + case 'string': + return new Mediate('prefixed', padString(token.value)); + + case 'fixedArray': + case 'array': + return new Mediate(token.type, token.value.map((token) => Encoder.encodeToken(token))); + + default: + throw new Error(`Invalid token type ${token.type} in encodeToken`); + } + } +} diff --git a/js/src/abi/encoder/encoder.spec.js b/js/src/abi/encoder/encoder.spec.js new file mode 100644 index 0000000000..008861602d --- /dev/null +++ b/js/src/abi/encoder/encoder.spec.js @@ -0,0 +1,290 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Encoder from './encoder'; +import Token from '../token'; +import { padAddress, padFixedBytes, padU32 } from '../util/pad'; + +describe('abi/encoder/Encoder', () => { + describe('encodeToken', () => { + it('requires token as Token', () => { + expect(() => Encoder.encodeToken()).to.throw(/Token/); + }); + + it('encodes address tokens in Mediate(raw)', () => { + const mediate = Encoder.encodeToken(new Token('address', '123')); + + expect(mediate.type).to.equal('raw'); + expect(mediate.value).to.be.ok; + }); + + it('encodes bool tokens in Mediate(raw)', () => { + const mediatet = Encoder.encodeToken(new Token('bool', true)); + const mediatef = Encoder.encodeToken(new Token('bool', false)); + + expect(mediatet.type).to.equal('raw'); + expect(mediatet.value).to.be.ok; + + expect(mediatef.type).to.equal('raw'); + expect(mediatef.value).to.be.ok; + }); + + it('encodes int tokens in Mediate(raw)', () => { + const mediate = Encoder.encodeToken(new Token('int', '123')); + + expect(mediate.type).to.equal('raw'); + expect(mediate.value).to.be.ok; + }); + + it('encodes uint tokens in Mediate(raw)', () => { + const mediate = Encoder.encodeToken(new Token('uint', '123')); + + expect(mediate.type).to.equal('raw'); + expect(mediate.value).to.be.ok; + }); + + it('encodes fixedBytes tokens in Mediate(raw)', () => { + const mediate = Encoder.encodeToken(new Token('fixedBytes', '123')); + + expect(mediate.type).to.equal('raw'); + expect(mediate.value).to.be.ok; + }); + + it('encodes bytes tokens in Mediate(prefixed)', () => { + const mediate = Encoder.encodeToken(new Token('bytes', '123')); + + expect(mediate.type).to.equal('prefixed'); + expect(mediate.value).to.be.ok; + }); + + it('encodes string tokens in Mediate(prefixed)', () => { + const mediate = Encoder.encodeToken(new Token('string', '123')); + + expect(mediate.type).to.equal('prefixed'); + expect(mediate.value).to.be.ok; + }); + + it('encodes fixedArray tokens in Mediate(fixedArray)', () => { + const mediate = Encoder.encodeToken(new Token('fixedArray', [new Token('uint', '123')])); + + expect(mediate.type).to.equal('fixedArray'); + expect(mediate.value).to.be.ok; + }); + + it('encodes array tokens in Mediate(array)', () => { + const mediate = Encoder.encodeToken(new Token('array', [new Token('uint', '123')])); + + expect(mediate.type).to.equal('array'); + expect(mediate.value).to.be.ok; + }); + + it('throws an Error on invalid tokens', () => { + const token = new Token('address'); + token._type = 'noMatch'; + + expect(() => Encoder.encodeToken(token)).to.throw(/noMatch/); + }); + }); + + describe('encode', () => { + it('requires tokens array', () => { + expect(() => Encoder.encode()).to.throw(/array/); + }); + + describe('addresses', () => { + const address1 = '1111111111111111111111111111111111111111'; + const address2 = '2222222222222222222222222222222222222222'; + const address3 = '3333333333333333333333333333333333333333'; + const address4 = '4444444444444444444444444444444444444444'; + const encAddress1 = padAddress(address1); + const encAddress2 = padAddress(address2); + const encAddress3 = padAddress(address3); + const encAddress4 = padAddress(address4); + const tokenAddress1 = new Token('address', address1); + const tokenAddress2 = new Token('address', address2); + const tokenAddress3 = new Token('address', address3); + const tokenAddress4 = new Token('address', address4); + + it('encodes an address', () => { + const token = tokenAddress1; + + expect(Encoder.encode([token])).to.equal(encAddress1); + }); + + it('encodes an array of addresses', () => { + const expected = `${padU32(0x20)}${padU32(2)}${encAddress1}${encAddress2}`; + const token = new Token('array', [tokenAddress1, tokenAddress2]); + + expect(Encoder.encode([token])).to.equal(expected); + }); + + it('encodes an fixedArray of addresses', () => { + const expected = `${encAddress1}${encAddress2}`; + const token = new Token('fixedArray', [tokenAddress1, tokenAddress2]); + + expect(Encoder.encode([token])).to.equal(expected); + }); + + it('encodes two addresses', () => { + const expected = `${encAddress1}${encAddress2}`; + const tokens = [tokenAddress1, tokenAddress2]; + + expect(Encoder.encode(tokens)).to.equal(expected); + }); + + it('encodes fixed array of dynamic array addresses', () => { + const tokens1 = new Token('array', [tokenAddress1, tokenAddress2]); + const tokens2 = new Token('array', [tokenAddress3, tokenAddress4]); + const fixed = new Token('fixedArray', [tokens1, tokens2]); + const expected = `${padU32(0x40)}${padU32(0xa0)}${padU32(2)}${encAddress1}${encAddress2}${padU32(2)}${encAddress3}${encAddress4}`; + + expect(Encoder.encode([fixed])).to.equal(expected); + }); + + it('encodes dynamic array of fixed array addresses', () => { + const tokens1 = new Token('fixedArray', [tokenAddress1, tokenAddress2]); + const tokens2 = new Token('fixedArray', [tokenAddress3, tokenAddress4]); + const dynamic = new Token('array', [tokens1, tokens2]); + const expected = `${padU32(0x20)}${padU32(2)}${encAddress1}${encAddress2}${encAddress3}${encAddress4}`; + + expect(Encoder.encode([dynamic])).to.equal(expected); + }); + + it('encodes dynamic array of dynamic array addresses', () => { + const tokens1 = new Token('array', [tokenAddress1]); + const tokens2 = new Token('array', [tokenAddress2]); + const dynamic = new Token('array', [tokens1, tokens2]); + const expected = `${padU32(0x20)}${padU32(2)}${padU32(0x80)}${padU32(0xc0)}${padU32(1)}${encAddress1}${padU32(1)}${encAddress2}`; + + expect(Encoder.encode([dynamic])).to.equal(expected); + }); + + it('encodes dynamic array of dynamic array addresses (2)', () => { + const tokens1 = new Token('array', [tokenAddress1, tokenAddress2]); + const tokens2 = new Token('array', [tokenAddress3, tokenAddress4]); + const dynamic = new Token('array', [tokens1, tokens2]); + const expected = `${padU32(0x20)}${padU32(2)}${padU32(0x80)}${padU32(0xe0)}${padU32(2)}${encAddress1}${encAddress2}${padU32(2)}${encAddress3}${encAddress4}`; + + expect(Encoder.encode([dynamic])).to.equal(expected); + }); + + it('encodes fixed array of fixed array addresses', () => { + const tokens1 = new Token('fixedArray', [tokenAddress1, tokenAddress2]); + const tokens2 = new Token('fixedArray', [tokenAddress3, tokenAddress4]); + const dynamic = new Token('fixedArray', [tokens1, tokens2]); + const expected = `${encAddress1}${encAddress2}${encAddress3}${encAddress4}`; + + expect(Encoder.encode([dynamic])).to.equal(expected); + }); + }); + + describe('bytes', () => { + const bytes1 = '0x1234'; + const bytes2 = '0x10000000000000000000000000000000000000000000000000000000000002'; + const bytes3 = '0x1000000000000000000000000000000000000000000000000000000000000000'; + + it('encodes fixed bytes', () => { + const token = new Token('fixedBytes', bytes1); + + expect(Encoder.encode([token])).to.equal(padFixedBytes(bytes1)); + }); + + it('encodes bytes', () => { + const token = new Token('bytes', bytes1); + + expect(Encoder.encode([token])).to.equal(`${padU32(0x20)}${padU32(2)}${padFixedBytes(bytes1)}`); + }); + + it('encodes bytes (short of boundary)', () => { + const token = new Token('bytes', bytes2); + + expect(Encoder.encode([token])).to.equal(`${padU32(0x20)}${padU32(0x1f)}${padFixedBytes(bytes2)}`); + }); + + it('encodes bytes (two blocks)', () => { + const input = `${bytes3}${bytes3.slice(-64)}`; + const token = new Token('bytes', input); + + expect(Encoder.encode([token])).to.equal(`${padU32(0x20)}${padU32(0x40)}${padFixedBytes(input)}`); + }); + + it('encodes two consecutive bytes', () => { + const in1 = '0x10000000000000000000000000000000000000000000000000000000000002'; + const in2 = '0x0010000000000000000000000000000000000000000000000000000000000002'; + const tokens = [new Token('bytes', in1), new Token('bytes', in2)]; + + expect(Encoder.encode(tokens)).to.equal(`${padU32(0x40)}${padU32(0x80)}${padU32(0x1f)}${padFixedBytes(in1)}${padU32(0x20)}${padFixedBytes(in2)}`); + }); + }); + + describe('string', () => { + it('encodes a string', () => { + const string = 'gavofyork'; + const stringEnc = padFixedBytes('0x6761766f66796f726b'); + const token = new Token('string', string); + + expect(Encoder.encode([token])).to.equal(`${padU32(0x20)}${padU32(string.length.toString(16))}${stringEnc}`); + }); + }); + + describe('uint', () => { + it('encodes a uint', () => { + const token = new Token('uint', 4); + + expect(Encoder.encode([token])).to.equal(padU32(4)); + }); + }); + + describe('int', () => { + it('encodes a int', () => { + const token = new Token('int', 4); + + expect(Encoder.encode([token])).to.equal(padU32(4)); + }); + }); + + describe('bool', () => { + it('encodes a bool (true)', () => { + const token = new Token('bool', true); + + expect(Encoder.encode([token])).to.equal(padU32(1)); + }); + + it('encodes a bool (false)', () => { + const token = new Token('bool', false); + + expect(Encoder.encode([token])).to.equal(padU32(0)); + }); + }); + + describe('comprehensive test', () => { + it('encodes a complex sequence', () => { + const bytes = '0x131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'; + const tokens = [new Token('int', 5), new Token('bytes', bytes), new Token('int', 3), new Token('bytes', bytes)]; + + expect(Encoder.encode(tokens)).to.equal(`${padU32(5)}${padU32(0x80)}${padU32(3)}${padU32(0xe0)}${padU32(0x40)}${bytes.substr(2)}${padU32(0x40)}${bytes.substr(2)}`); + }); + + it('encodes a complex sequence (nested)', () => { + const array = [new Token('int', 5), new Token('int', 6), new Token('int', 7)]; + const tokens = [new Token('int', 1), new Token('string', 'gavofyork'), new Token('int', 2), new Token('int', 3), new Token('int', 4), new Token('array', array)]; + const stringEnc = padFixedBytes('0x6761766f66796f726b'); + + expect(Encoder.encode(tokens)).to.equal(`${padU32(1)}${padU32(0xc0)}${padU32(2)}${padU32(3)}${padU32(4)}${padU32(0x100)}${padU32(9)}${stringEnc}${padU32(3)}${padU32(5)}${padU32(6)}${padU32(7)}`); + }); + }); + }); +}); diff --git a/js/src/abi/encoder/index.js b/js/src/abi/encoder/index.js new file mode 100644 index 0000000000..e19ff81e67 --- /dev/null +++ b/js/src/abi/encoder/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './encoder'; diff --git a/js/src/abi/encoder/mediate.js b/js/src/abi/encoder/mediate.js new file mode 100644 index 0000000000..cb7fce6a75 --- /dev/null +++ b/js/src/abi/encoder/mediate.js @@ -0,0 +1,142 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const TYPES = ['raw', 'prefixed', 'fixedArray', 'array']; + +import { padU32 } from '../util/pad'; + +export default class Mediate { + constructor (type, value) { + Mediate.validateType(type); + + this._type = type; + this._value = value; + } + + initLength () { + switch (this._type) { + case 'raw': + return this._value.length / 2; + + case 'array': + case 'prefixed': + return 32; + + case 'fixedArray': + return this._value + .reduce((total, mediate) => { + return total + mediate.initLength(); + }, 0); + } + } + + closingLength () { + switch (this._type) { + case 'raw': + return 0; + + case 'prefixed': + return this._value.length / 2; + + case 'array': + return this._value + .reduce((total, mediate) => { + return total + mediate.initLength(); + }, 32); + + case 'fixedArray': + return this._value + .reduce((total, mediate) => { + return total + mediate.initLength() + mediate.closingLength(); + }, 0); + } + } + + init (suffixOffset) { + switch (this._type) { + case 'raw': + return this._value; + + case 'fixedArray': + return this._value + .map((mediate, idx) => mediate.init(Mediate.offsetFor(this._value, idx)).toString(16)) + .join(''); + + case 'prefixed': + case 'array': + return padU32(suffixOffset); + } + } + + closing (offset) { + switch (this._type) { + case 'raw': + return ''; + + case 'prefixed': + return this._value; + + case 'fixedArray': + return this._value + .map((mediate, idx) => mediate.closing(Mediate.offsetFor(this._value, idx)).toString(16)) + .join(''); + + case 'array': + const prefix = padU32(this._value.length); + const inits = this._value + .map((mediate, idx) => mediate.init(offset + Mediate.offsetFor(this._value, idx) + 32).toString(16)) + .join(''); + const closings = this._value + .map((mediate, idx) => mediate.closing(offset + Mediate.offsetFor(this._value, idx)).toString(16)) + .join(''); + + return `${prefix}${inits}${closings}`; + } + } + + get type () { + return this._type; + } + + get value () { + return this._value; + } + + static offsetFor (mediates, position) { + if (position < 0 || position >= mediates.length) { + throw new Error(`Invalid position ${position} specified for Mediate.offsetFor`); + } + + const initLength = mediates + .reduce((total, mediate) => { + return total + mediate.initLength(); + }, 0); + + return mediates + .slice(0, position) + .reduce((total, mediate) => { + return total + mediate.closingLength(); + }, initLength); + } + + static validateType (type) { + if (TYPES.filter((_type) => type === _type).length) { + return true; + } + + throw new Error(`Invalid type ${type} received for Mediate.validateType`); + } +} diff --git a/js/src/abi/encoder/mediate.spec.js b/js/src/abi/encoder/mediate.spec.js new file mode 100644 index 0000000000..cfd0211f2f --- /dev/null +++ b/js/src/abi/encoder/mediate.spec.js @@ -0,0 +1,105 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Mediate from './mediate'; + +describe('abi/encoder/Mediate', () => { + const LONG15 = '1234567890abcdef000000000000000000000000000000000000000000000000'; + const DOUBLE15 = `${LONG15}${LONG15}`; + const ARRAY = [new Mediate('raw', DOUBLE15), new Mediate('raw', LONG15)]; + + describe('validateType', () => { + it('validates raw', () => { + expect(Mediate.validateType('raw')).to.be.true; + }); + + it('validates prefixed', () => { + expect(Mediate.validateType('prefixed')).to.be.true; + }); + + it('validates fixedArray', () => { + expect(Mediate.validateType('fixedArray')).to.be.true; + }); + + it('validates array', () => { + expect(Mediate.validateType('array')).to.be.true; + }); + + it('throws an error on invalid types', () => { + expect(() => Mediate.validateType('noMatch')).to.throw(/noMatch/); + }); + }); + + describe('offsetFor', () => { + it('thows an error when offset < 0', () => { + expect(() => Mediate.offsetFor([1], -1)).to.throw(/Invalid position/); + }); + + it('throws an error when offset >= length', () => { + expect(() => Mediate.offsetFor([1], 1)).to.throw(/Invalid position/); + }); + }); + + describe('constructor', () => { + it('throws an error on invalid types', () => { + expect(() => new Mediate('noMatch', '1')).to.throw(/noMatch/); + }); + + it('sets the type of the object', () => { + expect((new Mediate('raw', '1')).type).to.equal('raw'); + }); + + it('sets the value of the object', () => { + expect((new Mediate('raw', '1')).value).to.equal('1'); + }); + }); + + describe('initLength', () => { + it('returns correct variable byte length for raw', () => { + expect(new Mediate('raw', DOUBLE15).initLength()).to.equal(64); + }); + + it('returns correct fixed byte length for array', () => { + expect(new Mediate('array', [1, 2, 3, 4]).initLength()).to.equal(32); + }); + + it('returns correct fixed byte length for prefixed', () => { + expect(new Mediate('prefixed', 0).initLength()).to.equal(32); + }); + + it('returns correct variable byte length for fixedArray', () => { + expect(new Mediate('fixedArray', ARRAY).initLength()).to.equal(96); + }); + }); + + describe('closingLength', () => { + it('returns 0 byte length for raw', () => { + expect(new Mediate('raw', DOUBLE15).closingLength()).to.equal(0); + }); + + it('returns prefix + size for prefixed', () => { + expect(new Mediate('prefixed', DOUBLE15).closingLength()).to.equal(64); + }); + + it('returns prefix + size for array', () => { + expect(new Mediate('array', ARRAY).closingLength()).to.equal(128); + }); + + it('returns total length for fixedArray', () => { + expect(new Mediate('fixedArray', ARRAY).closingLength()).to.equal(96); + }); + }); +}); diff --git a/js/src/abi/index.js b/js/src/abi/index.js new file mode 100644 index 0000000000..f055a69133 --- /dev/null +++ b/js/src/abi/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './abi'; diff --git a/js/src/abi/spec/constructor.js b/js/src/abi/spec/constructor.js new file mode 100644 index 0000000000..89ea99610e --- /dev/null +++ b/js/src/abi/spec/constructor.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Encoder from '../encoder/encoder'; +import Param from './param'; + +export default class Constructor { + constructor (abi) { + this._inputs = Param.toParams(abi.inputs || []); + } + + get inputs () { + return this._inputs; + } + + inputParamTypes () { + return this._inputs.map((input) => input.kind); + } + + encodeCall (tokens) { + return Encoder.encode(tokens); + } +} diff --git a/js/src/abi/spec/constructor.spec.js b/js/src/abi/spec/constructor.spec.js new file mode 100644 index 0000000000..e02f6cf71f --- /dev/null +++ b/js/src/abi/spec/constructor.spec.js @@ -0,0 +1,52 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Constructor from './constructor'; +import Param from './param'; +import Token from '../token'; + +describe('abi/spec/Constructor', () => { + const inputsArr = [{ name: 'boolin', type: 'bool' }, { name: 'stringin', type: 'string' }]; + const bool = new Param('boolin', 'bool'); + const string = new Param('stringin', 'string'); + + const inputs = [bool, string]; + const cr = new Constructor({ inputs: inputsArr }); + + describe('constructor', () => { + it('stores the inputs as received', () => { + expect(cr.inputs).to.deep.equal(inputs); + }); + + it('matches empty inputs with []', () => { + expect(new Constructor({}).inputs).to.deep.equal([]); + }); + }); + + describe('inputParamTypes', () => { + it('retrieves the input types as received', () => { + expect(cr.inputParamTypes()).to.deep.equal([bool.kind, string.kind]); + }); + }); + + describe('encodeCall', () => { + it('encodes correctly', () => { + const result = cr.encodeCall([new Token('bool', true), new Token('string', 'jacogr')]); + + expect(result).to.equal('0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066a61636f67720000000000000000000000000000000000000000000000000000'); + }); + }); +}); diff --git a/js/src/abi/spec/event/decodedLog.js b/js/src/abi/spec/event/decodedLog.js new file mode 100644 index 0000000000..3993b527b5 --- /dev/null +++ b/js/src/abi/spec/event/decodedLog.js @@ -0,0 +1,30 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class DecodedLog { + constructor (params, address) { + this._params = params; + this._address = address; + } + + get address () { + return this._address; + } + + get params () { + return this._params; + } +} diff --git a/js/src/abi/spec/event/decodedLog.spec.js b/js/src/abi/spec/event/decodedLog.spec.js new file mode 100644 index 0000000000..e6ed1a0229 --- /dev/null +++ b/js/src/abi/spec/event/decodedLog.spec.js @@ -0,0 +1,28 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import DecodedLog from './decodedLog'; + +const log = new DecodedLog('someParams', 'someAddress'); + +describe('abi/spec/event/DecodedLog', () => { + describe('constructor', () => { + it('sets internal state', () => { + expect(log.params).to.equal('someParams'); + expect(log.address).to.equal('someAddress'); + }); + }); +}); diff --git a/js/src/abi/spec/event/decodedLogParam.js b/js/src/abi/spec/event/decodedLogParam.js new file mode 100644 index 0000000000..ed456fcce8 --- /dev/null +++ b/js/src/abi/spec/event/decodedLogParam.js @@ -0,0 +1,45 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ParamType from '../paramType/paramType'; +import Token from '../../token/token'; +import { isInstanceOf } from '../../util/types'; + +export default class DecodedLogParam { + constructor (name, kind, token) { + if (!isInstanceOf(kind, ParamType)) { + throw new Error('kind not instanceof ParamType'); + } else if (!isInstanceOf(token, Token)) { + throw new Error('token not instanceof Token'); + } + + this._name = name; + this._kind = kind; + this._token = token; + } + + get name () { + return this._name; + } + + get kind () { + return this._kind; + } + + get token () { + return this._token; + } +} diff --git a/js/src/abi/spec/event/decodedLogParam.spec.js b/js/src/abi/spec/event/decodedLogParam.spec.js new file mode 100644 index 0000000000..a031282ad8 --- /dev/null +++ b/js/src/abi/spec/event/decodedLogParam.spec.js @@ -0,0 +1,42 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import DecodedLogParam from './decodedLogParam'; +import ParamType from '../paramType'; +import Token from '../../token'; + +describe('abi/spec/event/DecodedLogParam', () => { + describe('constructor', () => { + const pt = new ParamType('bool'); + const tk = new Token('bool'); + + it('disallows kind not instanceof ParamType', () => { + expect(() => new DecodedLogParam('test', 'param')).to.throw(/ParamType/); + }); + + it('disallows token not instanceof Token', () => { + expect(() => new DecodedLogParam('test', pt, 'token')).to.throw(/Token/); + }); + + it('stores all parameters received', () => { + const log = new DecodedLogParam('test', pt, tk); + + expect(log.name).to.equal('test'); + expect(log.kind).to.equal(pt); + expect(log.token).to.equal(tk); + }); + }); +}); diff --git a/js/src/abi/spec/event/event.js b/js/src/abi/spec/event/event.js new file mode 100644 index 0000000000..f64fe0498b --- /dev/null +++ b/js/src/abi/spec/event/event.js @@ -0,0 +1,113 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Decoder from '../../decoder/decoder'; +import DecodedLog from './decodedLog'; +import DecodedLogParam from './decodedLogParam'; +import EventParam from './eventParam'; +import { asAddress } from '../../util/sliceAs'; +import { eventSignature } from '../../util/signature'; + +export default class Event { + constructor (abi) { + this._name = abi.name; + this._inputs = EventParam.toEventParams(abi.inputs || []); + this._anonymous = !!abi.anonymous; + + const { id, signature } = eventSignature(this._name, this.inputParamTypes()); + this._id = id; + this._signature = signature; + } + + get name () { + return this._name; + } + + get id () { + return this._id; + } + + get inputs () { + return this._inputs; + } + + get anonymous () { + return this._anonymous; + } + + get signature () { + return this._signature; + } + + inputParamTypes () { + return this._inputs.map((input) => input.kind); + } + + inputParamNames () { + return this._inputs.map((input) => input.name); + } + + indexedParams (indexed) { + return this._inputs.filter((input) => input.indexed === indexed); + } + + decodeLog (topics, data) { + const topicParams = this.indexedParams(true); + const dataParams = this.indexedParams(false); + + let address; + let toSkip; + + if (!this.anonymous) { + address = asAddress(topics[0]); + toSkip = 1; + } else { + toSkip = 0; + } + + const topicTypes = topicParams.map((param) => param.kind); + const flatTopics = topics + .filter((topic, idx) => idx >= toSkip) + .map((topic) => { + return (topic.substr(0, 2) === '0x') + ? topic.substr(2) + : topic; + }).join(''); + const topicTokens = Decoder.decode(topicTypes, flatTopics); + + if (topicTokens.length !== (topics.length - toSkip)) { + throw new Error('Invalid topic data'); + } + + const dataTypes = dataParams.map((param) => param.kind); + const dataTokens = Decoder.decode(dataTypes, data); + + const namedTokens = {}; + + topicParams.forEach((param, idx) => { + namedTokens[param.name] = topicTokens[idx]; + }); + dataParams.forEach((param, idx) => { + namedTokens[param.name] = dataTokens[idx]; + }); + + const inputParamTypes = this.inputParamTypes(); + const decodedParams = this.inputParamNames() + .map((name, idx) => new DecodedLogParam(name, inputParamTypes[idx], namedTokens[name])); + + return new DecodedLog(decodedParams, address); + } +} diff --git a/js/src/abi/spec/event/event.spec.js b/js/src/abi/spec/event/event.spec.js new file mode 100644 index 0000000000..f7252a9d2d --- /dev/null +++ b/js/src/abi/spec/event/event.spec.js @@ -0,0 +1,111 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import Event from './event'; +import EventParam from './eventParam'; +import DecodedLogParam from './decodedLogParam'; +import ParamType from '../paramType'; +import Token from '../../token'; + +describe('abi/spec/event/Event', () => { + const inputArr = [{ name: 'a', type: 'bool' }, { name: 'b', type: 'uint', indexed: true }]; + const inputs = [new EventParam('a', 'bool', false), new EventParam('b', 'uint', true)]; + const event = new Event({ name: 'test', inputs: inputArr, anonymous: true }); + + describe('constructor', () => { + it('stores the parameters as received', () => { + expect(event.name).to.equal('test'); + expect(event.inputs).to.deep.equal(inputs); + expect(event.anonymous).to.be.true; + }); + + it('matches empty inputs with []', () => { + expect(new Event({ name: 'test' }).inputs).to.deep.equal([]); + }); + + it('sets the event signature', () => { + expect(new Event({ name: 'baz' }).signature) + .to.equal('a7916fac4f538170f7cd12c148552e2cba9fcd72329a2dd5b07a6fa906488ddf'); + }); + }); + + describe('inputParamTypes', () => { + it('returns all the types', () => { + expect(event.inputParamTypes()).to.deep.equal([new ParamType('bool'), new ParamType('uint', null, 256, true)]); + }); + }); + + describe('inputParamNames', () => { + it('returns all the names', () => { + expect(event.inputParamNames()).to.deep.equal(['a', 'b']); + }); + }); + + describe('indexedParams', () => { + it('returns all indexed parameters (indexed)', () => { + expect(event.indexedParams(true)).to.deep.equal([inputs[1]]); + }); + + it('returns all indexed parameters (non-indexed)', () => { + expect(event.indexedParams(false)).to.deep.equal([inputs[0]]); + }); + }); + + describe('decodeLog', () => { + it('decodes an event', () => { + const event = new Event({ + name: 'foo', + inputs: [ + { name: 'a', type: 'int' }, + { name: 'b', type: 'int', indexed: true }, + { name: 'c', type: 'address' }, + { name: 'd', type: 'address', indexed: true } + ] + }); + const decoded = event.decodeLog([ + '0000000000000000000000004444444444444444444444444444444444444444', + '0000000000000000000000000000000000000000000000000000000000000002', + '0000000000000000000000001111111111111111111111111111111111111111' ], + '00000000000000000000000000000000000000000000000000000000000000030000000000000000000000002222222222222222222222222222222222222222'); + + expect(decoded.address).to.equal('0x4444444444444444444444444444444444444444'); + expect(decoded.params).to.deep.equal([ + new DecodedLogParam('a', new ParamType('int', null, 256), new Token('int', new BigNumber(3))), + new DecodedLogParam('b', new ParamType('int', null, 256, true), new Token('int', new BigNumber(2))), + new DecodedLogParam('c', new ParamType('address'), new Token('address', '0x2222222222222222222222222222222222222222')), + new DecodedLogParam('d', new ParamType('address', null, 0, true), new Token('address', '0x1111111111111111111111111111111111111111')) + ]); + }); + + it('decodes an anonymous event', () => { + const event = new Event({ name: 'foo', inputs: [{ name: 'a', type: 'int' }], anonymous: true }); + const decoded = event.decodeLog([], '0000000000000000000000000000000000000000000000000000000000000003'); + + expect(decoded.address).to.not.be.ok; + expect(decoded.params).to.deep.equal([ + new DecodedLogParam('a', new ParamType('int', null, 256), new Token('int', new BigNumber(3))) + ]); + }); + + it('throws on invalid topics', () => { + const event = new Event({ name: 'foo', inputs: [{ name: 'a', type: 'int' }], anonymous: true }); + + expect(() => event.decodeLog(['0000000000000000000000004444444444444444444444444444444444444444'], '0000000000000000000000000000000000000000000000000000000000000003')).to.throw(/Invalid/); + }); + }); +}); diff --git a/js/src/abi/spec/event/eventParam.js b/js/src/abi/spec/event/eventParam.js new file mode 100644 index 0000000000..d8a3b585d8 --- /dev/null +++ b/js/src/abi/spec/event/eventParam.js @@ -0,0 +1,41 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { toParamType } from '../paramType/format'; + +export default class EventParam { + constructor (name, type, indexed = false) { + this._name = name; + this._indexed = indexed; + this._kind = toParamType(type, indexed); + } + + get name () { + return this._name; + } + + get kind () { + return this._kind; + } + + get indexed () { + return this._indexed; + } + + static toEventParams (params) { + return params.map((param) => new EventParam(param.name, param.type, param.indexed)); + } +} diff --git a/js/src/abi/spec/event/eventParam.spec.js b/js/src/abi/spec/event/eventParam.spec.js new file mode 100644 index 0000000000..6858e98001 --- /dev/null +++ b/js/src/abi/spec/event/eventParam.spec.js @@ -0,0 +1,43 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import EventParam from './eventParam'; + +describe('abi/spec/event/EventParam', () => { + describe('constructor', () => { + it('sets the properties', () => { + const param = new EventParam('foo', 'uint', true); + expect(param.name).to.equal('foo'); + expect(param.kind.type).to.equal('uint'); + expect(param.indexed).to.be.true; + }); + + it('uses defaults for indexed', () => { + expect(new EventParam('foo', 'uint').indexed).to.be.false; + }); + }); + + describe('toEventParams', () => { + it('maps an array of params', () => { + const params = EventParam.toEventParams([{ name: 'foo', type: 'uint' }]); + + expect(params.length).to.equal(1); + expect(params[0].indexed).to.be.false; + expect(params[0].name).to.equal('foo'); + expect(params[0].kind.type).to.equal('uint'); + }); + }); +}); diff --git a/js/src/abi/spec/event/index.js b/js/src/abi/spec/event/index.js new file mode 100644 index 0000000000..0925882d3e --- /dev/null +++ b/js/src/abi/spec/event/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './event'; diff --git a/js/src/abi/spec/function.js b/js/src/abi/spec/function.js new file mode 100644 index 0000000000..0c91a9b6f9 --- /dev/null +++ b/js/src/abi/spec/function.js @@ -0,0 +1,87 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Decoder from '../decoder/decoder'; +import Encoder from '../encoder/encoder'; +import Param from './param'; +import { methodSignature } from '../util/signature'; + +export default class Func { + constructor (abi) { + this._abi = abi; + this._name = abi.name; + this._constant = !!abi.constant; + this._payable = abi.payable; + this._inputs = Param.toParams(abi.inputs || []); + this._outputs = Param.toParams(abi.outputs || []); + + const { id, signature } = methodSignature(this._name, this.inputParamTypes()); + this._id = id; + this._signature = signature; + } + + get abi () { + return this._abi; + } + + get constant () { + return this._constant; + } + + get name () { + return this._name; + } + + get id () { + return this._id; + } + + get payable () { + return this._payable; + } + + get inputs () { + return this._inputs; + } + + get outputs () { + return this._outputs; + } + + get signature () { + return this._signature; + } + + inputParamTypes () { + return this._inputs.map((input) => input.kind); + } + + outputParamTypes () { + return this._outputs.map((output) => output.kind); + } + + encodeCall (tokens) { + return `${this._signature}${Encoder.encode(tokens)}`; + } + + decodeInput (data) { + return Decoder.decode(this.inputParamTypes(), data); + } + + decodeOutput (data) { + return Decoder.decode(this.outputParamTypes(), data); + } +} diff --git a/js/src/abi/spec/function.spec.js b/js/src/abi/spec/function.spec.js new file mode 100644 index 0000000000..1650bd3146 --- /dev/null +++ b/js/src/abi/spec/function.spec.js @@ -0,0 +1,89 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Func from './function'; +import Param from './param'; +import Token from '../token'; + +describe('abi/spec/Function', () => { + const inputsArr = [{ name: 'boolin', type: 'bool' }, { name: 'stringin', type: 'string' }]; + const outputsArr = [{ name: 'output', type: 'uint' }]; + + const uint = new Param('output', 'uint'); + const bool = new Param('boolin', 'bool'); + const string = new Param('stringin', 'string'); + const inputs = [bool, string]; + const outputs = [uint]; + + const func = new Func({ + name: 'test', + inputs: inputsArr, + outputs: outputsArr + }); + + describe('constructor', () => { + it('stores the parameters as received', () => { + expect(func.name).to.equal('test'); + expect(func.constant).to.be.false; + expect(func.inputs).to.deep.equal(inputs); + expect(func.outputs).to.deep.equal(outputs); + }); + + it('matches empty inputs with []', () => { + expect(new Func({ name: 'test', outputs: outputsArr }).inputs).to.deep.equal([]); + }); + + it('matches empty outputs with []', () => { + expect(new Func({ name: 'test', inputs: inputsArr }).outputs).to.deep.equal([]); + }); + + it('sets the method signature', () => { + expect(new Func({ name: 'baz' }).signature).to.equal('a7916fac'); + }); + + it('allows constant functions', () => { + expect(new Func({ name: 'baz', constant: true }).constant).to.be.true; + }); + }); + + describe('inputParamTypes', () => { + it('retrieves the input types as received', () => { + expect(func.inputParamTypes()).to.deep.equal([bool.kind, string.kind]); + }); + }); + + describe('outputParamTypes', () => { + it('retrieves the output types as received', () => { + expect(func.outputParamTypes()).to.deep.equal([uint.kind]); + }); + }); + + describe('encodeCall', () => { + it('encodes the call correctly', () => { + const result = func.encodeCall([new Token('bool', true), new Token('string', 'jacogr')]); + + expect(result).to.equal('023562050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066a61636f67720000000000000000000000000000000000000000000000000000'); + }); + }); + + describe('decodeOutput', () => { + it('decodes the result correctly', () => { + const result = func.decodeOutput('1111111111111111111111111111111111111111111111111111111111111111'); + + expect(result[0].value.toString(16)).to.equal('1111111111111111111111111111111111111111111111111111111111111111'); + }); + }); +}); diff --git a/js/src/abi/spec/index.js b/js/src/abi/spec/index.js new file mode 100644 index 0000000000..89354d49b5 --- /dev/null +++ b/js/src/abi/spec/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './interface'; diff --git a/js/src/abi/spec/interface.js b/js/src/abi/spec/interface.js new file mode 100644 index 0000000000..1ea32e9a9c --- /dev/null +++ b/js/src/abi/spec/interface.js @@ -0,0 +1,73 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Constructor from './constructor'; +import Event from './event/event'; +import Func from './function'; +import Token from '../token'; + +export default class Interface { + constructor (abi) { + this._interface = Interface.parseABI(abi); + } + + get interface () { + return this._interface; + } + + get constructors () { + return this._interface.filter((item) => item instanceof Constructor); + } + + get events () { + return this._interface.filter((item) => item instanceof Event); + } + + get functions () { + return this._interface.filter((item) => item instanceof Func); + } + + encodeTokens (paramTypes, values) { + const createToken = function (paramType, value) { + if (paramType.subtype) { + return new Token(paramType.type, value.map((entry) => createToken(paramType.subtype, entry))); + } + + return new Token(paramType.type, value); + }; + + return paramTypes.map((paramType, idx) => createToken(paramType, values[idx])); + } + + static parseABI (abi) { + return abi.map((item) => { + switch (item.type) { + case 'constructor': + return new Constructor(item); + + case 'event': + return new Event(item); + + case 'function': + case 'fallback': + return new Func(item); + + default: + throw new Error(`Unknown ABI type ${item.type}`); + } + }); + } +} diff --git a/js/src/abi/spec/interface.spec.js b/js/src/abi/spec/interface.spec.js new file mode 100644 index 0000000000..ba5c38a28a --- /dev/null +++ b/js/src/abi/spec/interface.spec.js @@ -0,0 +1,126 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Interface from './interface'; +import ParamType from './paramType'; +import Token from '../token'; + +describe('abi/spec/Interface', () => { + const construct = { + type: 'constructor', + inputs: [] + }; + const event = { + type: 'event', + name: 'Event2', + anonymous: false, + inputs: [{ name: 'a', type: 'uint256', indexed: true }, { name: 'b', type: 'bytes32', indexed: false }] + }; + const func = { + type: 'function', + name: 'foo', + inputs: [{ name: 'a', type: 'uint256' }], + outputs: [] + }; + + describe('parseABI', () => { + it('throws on invalid types', () => { + expect(() => Interface.parseABI([{ type: 'noMatch' }])).to.throw(/noMatch/); + }); + + it('creates constructors', () => { + expect(Interface.parseABI([ construct ])).to.deep.equal([{ _inputs: [] }]); + }); + + it('creates events', () => { + expect(Interface.parseABI([ event ])[0].name).to.equal('Event2'); + }); + + it('creates functions', () => { + expect(Interface.parseABI([ func ])[0].name).to.equal('foo'); + }); + + it('parse complex interfaces', () => { + expect(Interface.parseABI([ construct, event, func ]).length).to.equal(3); + }); + }); + + describe('constructor', () => { + const int = new Interface([ construct, event, func ]); + + it('contains the full interface', () => { + expect(int.interface.length).to.equal(3); + }); + + it('contains the constructors', () => { + expect(int.constructors.length).to.equal(1); + }); + + it('contains the events', () => { + expect(int.events.length).to.equal(1); + }); + + it('contains the functions', () => { + expect(int.functions.length).to.equal(1); + }); + }); + + describe('encodeTokens', () => { + const int = new Interface([ construct, event, func ]); + + it('encodes simple types', () => { + expect( + int.encodeTokens( + [new ParamType('bool'), new ParamType('string'), new ParamType('int'), new ParamType('uint')], + [true, 'gavofyork', -123, 123] + ) + ).to.deep.equal([ + new Token('bool', true), new Token('string', 'gavofyork'), new Token('int', -123), new Token('uint', 123) + ]); + }); + + it('encodes array', () => { + expect( + int.encodeTokens( + [new ParamType('array', new ParamType('bool'))], + [[true, false, true]] + ) + ).to.deep.equal([ + new Token('array', [ + new Token('bool', true), new Token('bool', false), new Token('bool', true) + ]) + ]); + }); + + it('encodes simple with array of array', () => { + expect( + int.encodeTokens( + [ + new ParamType('bool'), + new ParamType('fixedArray', new ParamType('array', new ParamType('uint')), 2) + ], + [true, [[0, 1], [2, 3]]] + ) + ).to.deep.equal([ + new Token('bool', true), + new Token('fixedArray', [ + new Token('array', [new Token('uint', 0), new Token('uint', 1)]), + new Token('array', [new Token('uint', 2), new Token('uint', 3)]) + ]) + ]); + }); + }); +}); diff --git a/js/src/abi/spec/param.js b/js/src/abi/spec/param.js new file mode 100644 index 0000000000..95c3b9d18f --- /dev/null +++ b/js/src/abi/spec/param.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { toParamType } from './paramType/format'; + +export default class Param { + constructor (name, type) { + this._name = name; + this._kind = toParamType(type); + } + + get name () { + return this._name; + } + + get kind () { + return this._kind; + } + + static toParams (params) { + return params.map((param) => new Param(param.name, param.type)); + } +} diff --git a/js/src/abi/spec/param.spec.js b/js/src/abi/spec/param.spec.js new file mode 100644 index 0000000000..bd172e4a6c --- /dev/null +++ b/js/src/abi/spec/param.spec.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Param from './param'; + +describe('abi/spec/Param', () => { + describe('constructor', () => { + const param = new Param('foo', 'uint'); + + it('sets the properties', () => { + expect(param.name).to.equal('foo'); + expect(param.kind.type).to.equal('uint'); + }); + }); + + describe('toParams', () => { + it('maps an array of params', () => { + const params = Param.toParams([{ name: 'foo', type: 'uint' }]); + + expect(params.length).to.equal(1); + expect(params[0].name).to.equal('foo'); + expect(params[0].kind.type).to.equal('uint'); + }); + }); +}); diff --git a/js/src/abi/spec/paramType/format.js b/js/src/abi/spec/paramType/format.js new file mode 100644 index 0000000000..459eb15f43 --- /dev/null +++ b/js/src/abi/spec/paramType/format.js @@ -0,0 +1,80 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ParamType from './paramType'; + +export function toParamType (type, indexed) { + if (type[type.length - 1] === ']') { + const last = type.lastIndexOf('['); + const length = type.substr(last + 1, type.length - last - 2); + const subtype = toParamType(type.substr(0, last)); + + if (length.length === 0) { + return new ParamType('array', subtype, 0, indexed); + } + + return new ParamType('fixedArray', subtype, parseInt(length, 10), indexed); + } + + switch (type) { + case 'address': + case 'bool': + case 'bytes': + case 'string': + return new ParamType(type, null, 0, indexed); + + case 'int': + case 'uint': + return new ParamType(type, null, 256, indexed); + + default: + if (type.indexOf('uint') === 0) { + return new ParamType('uint', null, parseInt(type.substr(4), 10), indexed); + } else if (type.indexOf('int') === 0) { + return new ParamType('int', null, parseInt(type.substr(3), 10), indexed); + } else if (type.indexOf('bytes') === 0) { + return new ParamType('fixedBytes', null, parseInt(type.substr(5), 10), indexed); + } + + throw new Error(`Cannot convert ${type} to valid ParamType`); + } +} + +export function fromParamType (paramType) { + switch (paramType.type) { + case 'address': + case 'bool': + case 'bytes': + case 'string': + return paramType.type; + + case 'int': + case 'uint': + return `${paramType.type}${paramType.length}`; + + case 'fixedBytes': + return `bytes${paramType.length}`; + + case 'fixedArray': + return `${fromParamType(paramType.subtype)}[${paramType.length}]`; + + case 'array': + return `${fromParamType(paramType.subtype)}[]`; + + default: + throw new Error(`Cannot convert from ParamType ${paramType.type}`); + } +} diff --git a/js/src/abi/spec/paramType/format.spec.js b/js/src/abi/spec/paramType/format.spec.js new file mode 100644 index 0000000000..90e5229d5b --- /dev/null +++ b/js/src/abi/spec/paramType/format.spec.js @@ -0,0 +1,228 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ParamType from './paramType'; +import { fromParamType, toParamType } from './format'; + +describe('abi/spec/paramType/format', () => { + describe('fromParamType', () => { + it('errors on invalid types', () => { + expect(() => fromParamType({ type: 'noMatch' })).to.throw(/noMatch/); + }); + + describe('simple types', () => { + it('converts address to address', () => { + const pt = new ParamType('address'); + + expect(fromParamType(pt)).to.equal('address'); + }); + + it('converts bool to bool', () => { + const pt = new ParamType('bool'); + + expect(fromParamType(pt)).to.equal('bool'); + }); + + it('converts bytes to bytes', () => { + const pt = new ParamType('bytes'); + + expect(fromParamType(pt)).to.equal('bytes'); + }); + + it('converts string to string', () => { + const pt = new ParamType('string'); + + expect(fromParamType(pt)).to.equal('string'); + }); + }); + + describe('length types', () => { + it('converts int32 to int32', () => { + const pt = new ParamType('int', null, 32); + + expect(fromParamType(pt)).to.equal('int32'); + }); + + it('converts uint64 to int64', () => { + const pt = new ParamType('uint', null, 64); + + expect(fromParamType(pt)).to.equal('uint64'); + }); + + it('converts fixedBytes8 to bytes8', () => { + const pt = new ParamType('fixedBytes', null, 8); + + expect(fromParamType(pt)).to.equal('bytes8'); + }); + }); + + describe('arrays', () => { + it('converts string[2] to string[2]', () => { + const pt = new ParamType('fixedArray', new ParamType('string'), 2); + + expect(fromParamType(pt)).to.equal('string[2]'); + }); + + it('converts bool[] to bool[]', () => { + const pt = new ParamType('array', new ParamType('bool')); + + expect(fromParamType(pt)).to.equal('bool[]'); + }); + + it('converts bool[][2] to bool[][2]', () => { + const pt = new ParamType('fixedArray', new ParamType('array', new ParamType('bool')), 2); + + expect(fromParamType(pt)).to.equal('bool[][2]'); + }); + + it('converts bool[2][] to bool[2][]', () => { + const pt = new ParamType('array', new ParamType('fixedArray', new ParamType('bool'), 2)); + + expect(fromParamType(pt)).to.equal('bool[2][]'); + }); + }); + }); + + describe('toParamType', () => { + it('errors on invalid types', () => { + expect(() => toParamType('noMatch')).to.throw(/noMatch/); + }); + + describe('simple mapping', () => { + it('converts address to address', () => { + const pt = toParamType('address'); + + expect(pt.type).to.equal('address'); + }); + + it('converts bool to bool', () => { + const pt = toParamType('bool'); + + expect(pt.type).to.equal('bool'); + }); + + it('converts bytes to bytes', () => { + const pt = toParamType('bytes'); + + expect(pt.type).to.equal('bytes'); + }); + + it('converts string to string', () => { + const pt = toParamType('string'); + + expect(pt.type).to.equal('string'); + }); + }); + + describe('number', () => { + it('converts int to int256', () => { + const pt = toParamType('int'); + + expect(pt.type).to.equal('int'); + expect(pt.length).to.equal(256); + }); + + it('converts uint to uint256', () => { + const pt = toParamType('uint'); + + expect(pt.type).to.equal('uint'); + expect(pt.length).to.equal(256); + }); + }); + + describe('sized types', () => { + it('converts int32 to int32', () => { + const pt = toParamType('int32'); + + expect(pt.type).to.equal('int'); + expect(pt.length).to.equal(32); + }); + + it('converts uint16 to uint16', () => { + const pt = toParamType('uint32'); + + expect(pt.type).to.equal('uint'); + expect(pt.length).to.equal(32); + }); + + it('converts bytes8 to fixedBytes8', () => { + const pt = toParamType('bytes8'); + + expect(pt.type).to.equal('fixedBytes'); + expect(pt.length).to.equal(8); + }); + }); + + describe('arrays', () => { + describe('fixed arrays', () => { + it('creates fixed array', () => { + const pt = toParamType('bytes[8]'); + + expect(pt.type).to.equal('fixedArray'); + expect(pt.subtype.type).to.equal('bytes'); + expect(pt.length).to.equal(8); + }); + + it('creates fixed arrays of fixed arrays', () => { + const pt = toParamType('bytes[45][3]'); + + expect(pt.type).to.equal('fixedArray'); + expect(pt.length).to.equal(3); + expect(pt.subtype.type).to.equal('fixedArray'); + expect(pt.subtype.length).to.equal(45); + expect(pt.subtype.subtype.type).to.equal('bytes'); + }); + }); + + describe('dynamic arrays', () => { + it('creates a dynamic array', () => { + const pt = toParamType('bytes[]'); + + expect(pt.type).to.equal('array'); + expect(pt.subtype.type).to.equal('bytes'); + }); + + it('creates a dynamic array of dynamic arrays', () => { + const pt = toParamType('bool[][]'); + + expect(pt.type).to.equal('array'); + expect(pt.subtype.type).to.equal('array'); + expect(pt.subtype.subtype.type).to.equal('bool'); + }); + }); + + describe('mixed arrays', () => { + it('creates a fixed dynamic array', () => { + const pt = toParamType('bool[][3]'); + + expect(pt.type).to.equal('fixedArray'); + expect(pt.length).to.equal(3); + expect(pt.subtype.type).to.equal('array'); + expect(pt.subtype.subtype.type).to.equal('bool'); + }); + + it('creates a dynamic fixed array', () => { + const pt = toParamType('bool[3][]'); + + expect(pt.type).to.equal('array'); + expect(pt.subtype.type).to.equal('fixedArray'); + expect(pt.subtype.length).to.equal(3); + expect(pt.subtype.subtype.type).to.equal('bool'); + }); + }); + }); + }); +}); diff --git a/js/src/abi/spec/paramType/index.js b/js/src/abi/spec/paramType/index.js new file mode 100644 index 0000000000..23bb83f067 --- /dev/null +++ b/js/src/abi/spec/paramType/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './paramType'; diff --git a/js/src/abi/spec/paramType/paramType.js b/js/src/abi/spec/paramType/paramType.js new file mode 100644 index 0000000000..99a2915d65 --- /dev/null +++ b/js/src/abi/spec/paramType/paramType.js @@ -0,0 +1,52 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import TYPES from './types'; + +export default class ParamType { + constructor (type, subtype = null, length = 0, indexed = false) { + ParamType.validateType(type); + + this._type = type; + this._subtype = subtype; + this._length = length; + this._indexed = indexed; + } + + get type () { + return this._type; + } + + get subtype () { + return this._subtype; + } + + get length () { + return this._length; + } + + get indexed () { + return this._indexed; + } + + static validateType (type) { + if (TYPES.filter((_type) => type === _type).length) { + return true; + } + + throw new Error(`Invalid type ${type} received for ParamType`); + } +} diff --git a/js/src/abi/spec/paramType/paramType.spec.js b/js/src/abi/spec/paramType/paramType.spec.js new file mode 100644 index 0000000000..e8d8c32540 --- /dev/null +++ b/js/src/abi/spec/paramType/paramType.spec.js @@ -0,0 +1,87 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ParamType from './paramType'; + +describe('abi/spec/paramType/ParamType', () => { + describe('validateType', () => { + it('validates address', () => { + expect(ParamType.validateType('address')).to.be.true; + }); + + it('validates fixedArray', () => { + expect(ParamType.validateType('fixedArray')).to.be.true; + }); + + it('validates array', () => { + expect(ParamType.validateType('array')).to.be.true; + }); + + it('validates fixedBytes', () => { + expect(ParamType.validateType('fixedBytes')).to.be.true; + }); + + it('validates bytes', () => { + expect(ParamType.validateType('bytes')).to.be.true; + }); + + it('validates bool', () => { + expect(ParamType.validateType('bool')).to.be.true; + }); + + it('validates int', () => { + expect(ParamType.validateType('int')).to.be.true; + }); + + it('validates uint', () => { + expect(ParamType.validateType('uint')).to.be.true; + }); + + it('validates string', () => { + expect(ParamType.validateType('string')).to.be.true; + }); + + it('throws an error on invalid types', () => { + expect(() => ParamType.validateType('noMatch')).to.throw(/noMatch/); + }); + }); + + describe('constructor', () => { + it('throws an error on invalid types', () => { + expect(() => new ParamType('noMatch')).to.throw(/noMatch/); + }); + + it('sets the type of the object', () => { + expect((new ParamType('bool', null, 1)).type).to.equal('bool'); + }); + + it('sets the subtype of the object', () => { + expect((new ParamType('array', 'bool', 1)).subtype).to.equal('bool'); + }); + + it('sets the length of the object', () => { + expect((new ParamType('array', 'bool', 1)).length).to.equal(1); + }); + + it('sets the index of the object', () => { + expect((new ParamType('array', 'bool', 1, true)).indexed).to.be.true; + }); + + it('sets default values where none supplied', () => { + expect(Object.values(new ParamType('string'))).to.deep.equal(['string', null, 0, false]); + }); + }); +}); diff --git a/js/src/abi/spec/paramType/types.js b/js/src/abi/spec/paramType/types.js new file mode 100644 index 0000000000..d789a6ed80 --- /dev/null +++ b/js/src/abi/spec/paramType/types.js @@ -0,0 +1,19 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const TYPES = ['address', 'bytes', 'int', 'uint', 'bool', 'string', 'array', 'fixedBytes', 'fixedArray']; + +export default TYPES; diff --git a/js/src/abi/token/index.js b/js/src/abi/token/index.js new file mode 100644 index 0000000000..4b822b4bdf --- /dev/null +++ b/js/src/abi/token/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './token'; diff --git a/js/src/abi/token/token.js b/js/src/abi/token/token.js new file mode 100644 index 0000000000..84c675ee63 --- /dev/null +++ b/js/src/abi/token/token.js @@ -0,0 +1,42 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import TYPES from '../spec/paramType/types'; + +export default class Token { + constructor (type, value) { + Token.validateType(type); + + this._type = type; + this._value = value; + } + + get type () { + return this._type; + } + + get value () { + return this._value; + } + + static validateType (type) { + if (TYPES.filter((_type) => type === _type).length) { + return true; + } + + throw new Error(`Invalid type ${type} received for Token`); + } +} diff --git a/js/src/abi/token/token.spec.js b/js/src/abi/token/token.spec.js new file mode 100644 index 0000000000..2abaad6ac9 --- /dev/null +++ b/js/src/abi/token/token.spec.js @@ -0,0 +1,75 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Token from './token'; + +describe('abi/token/token', () => { + describe('validateType', () => { + it('validates address', () => { + expect(Token.validateType('address')).to.be.true; + }); + + it('validates fixedArray', () => { + expect(Token.validateType('fixedArray')).to.be.true; + }); + + it('validates array', () => { + expect(Token.validateType('array')).to.be.true; + }); + + it('validates fixedBytes', () => { + expect(Token.validateType('fixedBytes')).to.be.true; + }); + + it('validates bytes', () => { + expect(Token.validateType('bytes')).to.be.true; + }); + + it('validates bool', () => { + expect(Token.validateType('bool')).to.be.true; + }); + + it('validates int', () => { + expect(Token.validateType('int')).to.be.true; + }); + + it('validates uint', () => { + expect(Token.validateType('uint')).to.be.true; + }); + + it('validates string', () => { + expect(Token.validateType('string')).to.be.true; + }); + + it('throws an error on invalid types', () => { + expect(() => Token.validateType('noMatch')).to.throw(/noMatch/); + }); + }); + + describe('constructor', () => { + it('throws an error on invalid types', () => { + expect(() => new Token('noMatch', '1')).to.throw(/noMatch/); + }); + + it('sets the type of the object', () => { + expect((new Token('bool', '1')).type).to.equal('bool'); + }); + + it('sets the value of the object', () => { + expect((new Token('bool', '1')).value).to.equal('1'); + }); + }); +}); diff --git a/js/src/abi/util/address.js b/js/src/abi/util/address.js new file mode 100644 index 0000000000..f0e188f2c3 --- /dev/null +++ b/js/src/abi/util/address.js @@ -0,0 +1,65 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { keccak_256 } from 'js-sha3'; // eslint-disable-line camelcase + +export function isChecksumValid (_address) { + const address = _address.replace('0x', ''); + const hash = keccak_256(address.toLowerCase(address)); + + for (let n = 0; n < 40; n++) { + const hashval = parseInt(hash[n], 16); + const isLower = address[n].toUpperCase() !== address[n]; + const isUpper = address[n].toLowerCase() !== address[n]; + + if ((hashval > 7 && isLower) || (hashval <= 7 && isUpper)) { + return false; + } + } + + return true; +} + +export function isAddress (address) { + if (address && address.length === 42) { + if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { + return false; + } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { + return true; + } + + return isChecksumValid(address); + } + + return false; +} + +export function toChecksumAddress (_address) { + const address = (_address || '').toLowerCase(); + + if (!isAddress(address)) { + return ''; + } + + const hash = keccak_256(address.slice(-40)); + let result = '0x'; + + for (let n = 0; n < 40; n++) { + result = `${result}${parseInt(hash[n], 16) > 7 ? address[n + 2].toUpperCase() : address[n + 2]}`; + } + + return result; +} diff --git a/js/src/abi/util/address.spec.js b/js/src/abi/util/address.spec.js new file mode 100644 index 0000000000..9b0ec38cbb --- /dev/null +++ b/js/src/abi/util/address.spec.js @@ -0,0 +1,100 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { isChecksumValid, isAddress, toChecksumAddress } from './address'; + +describe('abi/util/address', () => { + const value = '63Cf90D3f0410092FC0fca41846f596223979195'; + const address = `0x${value}`; + const lowercase = `0x${value.toLowerCase()}`; + const uppercase = `0x${value.toUpperCase()}`; + const invalid = '0x' + value.split('').map((char) => { + if (char >= 'a' && char <= 'f') { + return char.toUpperCase(); + } else if (char >= 'A' && char <= 'F') { + return char.toLowerCase(); + } + + return char; + }).join(''); + const invalidhex = '0x01234567890123456789012345678901234567gh'; + + describe('isChecksumValid', () => { + it('returns false when fully lowercase', () => { + expect(isChecksumValid(lowercase)).to.be.false; + }); + + it('returns false when fully uppercase', () => { + expect(isChecksumValid(uppercase)).to.be.false; + }); + + it('returns false on a mixed-case address', () => { + expect(isChecksumValid(invalid)).to.be.false; + }); + + it('returns true on a checksummed address', () => { + expect(isChecksumValid(address)).to.be.true; + }); + }); + + describe('isAddress', () => { + it('returns true when fully lowercase', () => { + expect(isAddress(lowercase)).to.be.true; + }); + + it('returns true when fully uppercase', () => { + expect(isAddress(uppercase)).to.be.true; + }); + + it('returns true when checksummed', () => { + expect(isAddress(address)).to.be.true; + }); + + it('returns false when invalid checksum', () => { + expect(isAddress(invalid)).to.be.false; + }); + + it('returns false on valid length, non-hex', () => { + expect(isAddress(invalidhex)).to.be.false; + }); + }); + + describe('toChecksumAddress', () => { + it('returns empty when no address specified', () => { + expect(toChecksumAddress()).to.equal(''); + }); + + it('returns empty on invalid address structure', () => { + expect(toChecksumAddress('0xnotaddress')).to.equal(''); + }); + + it('returns formatted address on checksum input', () => { + expect(toChecksumAddress(address)).to.equal(address); + }); + + it('returns formatted address on lowercase input', () => { + expect(toChecksumAddress(lowercase)).to.equal(address); + }); + + it('returns formatted address on uppercase input', () => { + expect(toChecksumAddress(uppercase)).to.equal(address); + }); + + it('returns formatted address on mixed input', () => { + expect(toChecksumAddress(invalid)).to.equal(address); + }); + }); +}); diff --git a/js/src/abi/util/pad.js b/js/src/abi/util/pad.js new file mode 100644 index 0000000000..a7d9404316 --- /dev/null +++ b/js/src/abi/util/pad.js @@ -0,0 +1,75 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import utf8 from 'utf8'; + +import { isArray } from './types'; + +const ZERO_64 = '0000000000000000000000000000000000000000000000000000000000000000'; + +export function padAddress (_input) { + const input = _input.substr(0, 2) === '0x' ? _input.substr(2) : _input; + + return `${ZERO_64}${input}`.slice(-64); +} + +export function padBool (input) { + return `${ZERO_64}${input ? '1' : '0'}`.slice(-64); +} + +export function padU32 (input) { + let bn = new BigNumber(input); + + if (bn.lessThan(0)) { + bn = new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16) + .plus(bn).plus(1); + } + + return `${ZERO_64}${bn.toString(16)}`.slice(-64); +} + +function stringToBytes (input) { + if (isArray(input)) { + return input; + } else if (input.substr(0, 2) === '0x') { + return input.substr(2).toLowerCase().match(/.{1,2}/g).map((value) => parseInt(value, 16)); + } else { + return input.split('').map((char) => char.charCodeAt(0)); + } +} + +export function padBytes (_input) { + const input = stringToBytes(_input); + + return `${padU32(input.length)}${padFixedBytes(input)}`; +} + +export function padFixedBytes (_input) { + const input = stringToBytes(_input); + const sinput = input.map((code) => `0${code.toString(16)}`.slice(-2)).join(''); + const max = Math.floor((sinput.length + 63) / 64) * 64; + + return `${sinput}${ZERO_64}`.substr(0, max); +} + +export function padString (input) { + const array = utf8.encode(input) + .split('') + .map((char) => char.charCodeAt(0)); + + return padBytes(array); +} diff --git a/js/src/abi/util/pad.spec.js b/js/src/abi/util/pad.spec.js new file mode 100644 index 0000000000..96c7336824 --- /dev/null +++ b/js/src/abi/util/pad.spec.js @@ -0,0 +1,124 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import { padAddress, padBool, padBytes, padFixedBytes, padString, padU32 } from './pad'; + +describe('abi/util/pad', () => { + const SHORT15 = '1234567890abcdef'; + const BYTES15 = [0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef]; + const LONG15 = `${SHORT15}000000000000000000000000000000000000000000000000`; + const PAD123 = '0000000000000000000000000000000000000000000000000000000000000123'; + + describe('padAddress', () => { + it('pads to 64 characters', () => { + expect(padAddress('123')).to.equal(PAD123); + }); + + it('strips leading 0x when passed in', () => { + expect(padFixedBytes(`0x${PAD123}`)).to.equal(PAD123); + }); + }); + + describe('padBool', () => { + const TRUE = '0000000000000000000000000000000000000000000000000000000000000001'; + const FALSE = '0000000000000000000000000000000000000000000000000000000000000000'; + + it('pads true to 64 characters', () => { + expect(padBool(true)).to.equal(TRUE); + }); + + it('pads false to 64 characters', () => { + expect(padBool(false)).to.equal(FALSE); + }); + }); + + describe('padU32', () => { + it('left pads length < 64 bytes to 64 bytes', () => { + expect(padU32(1)).to.equal('0000000000000000000000000000000000000000000000000000000000000001'); + }); + + it('pads hex representation', () => { + expect(padU32(0x123)).to.equal(PAD123); + }); + + it('pads decimal representation', () => { + expect(padU32(291)).to.equal(PAD123); + }); + + it('pads string representation', () => { + expect(padU32('0x123')).to.equal(PAD123); + }); + + it('pads BigNumber representation', () => { + expect(padU32(new BigNumber(0x123))).to.equal(PAD123); + }); + + it('converts negative numbers to 2s complement', () => { + expect(padU32(-123)).to.equal('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85'); + }); + }); + + describe('padFixedBytes', () => { + it('right pads length < 64 bytes to 64 bytes (string)', () => { + expect(padFixedBytes(`0x${SHORT15}`)).to.equal(LONG15); + }); + + it('right pads length < 64 bytes to 64 bytes (array)', () => { + expect(padFixedBytes(BYTES15)).to.equal(LONG15); + }); + + it('right pads length > 64 bytes (64 byte multiples)', () => { + expect(padFixedBytes(`0x${LONG15}${SHORT15}`)).to.equal(`${LONG15}${LONG15}`); + }); + + it('strips leading 0x when passed in', () => { + expect(padFixedBytes(`0x${SHORT15}`)).to.equal(LONG15); + }); + }); + + describe('padBytes', () => { + it('right pads length < 64, adding the length (string)', () => { + const result = padBytes(`0x${SHORT15}`); + + expect(result.length).to.equal(128); + expect(result).to.equal(`${padU32(8)}${LONG15}`); + }); + + it('right pads length < 64, adding the length (array)', () => { + const result = padBytes(BYTES15); + + expect(result.length).to.equal(128); + expect(result).to.equal(`${padU32(8)}${LONG15}`); + }); + + it('right pads length > 64, adding the length', () => { + const result = padBytes(`0x${LONG15}${SHORT15}`); + + expect(result.length).to.equal(192); + expect(result).to.equal(`${padU32(0x28)}${LONG15}${LONG15}`); + }); + }); + + describe('padString', () => { + it('correctly converts & pads strings', () => { + const result = padString('gavofyork'); + + expect(result.length).to.equal(128); + expect(result).to.equal(padBytes('0x6761766f66796f726b')); + }); + }); +}); diff --git a/js/src/abi/util/signature.js b/js/src/abi/util/signature.js new file mode 100644 index 0000000000..10aedf13f9 --- /dev/null +++ b/js/src/abi/util/signature.js @@ -0,0 +1,31 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { keccak_256 } from 'js-sha3'; // eslint-disable-line camelcase +import { fromParamType } from '../spec/paramType/format'; + +export function eventSignature (name, params) { + const types = (params || []).map(fromParamType).join(','); + const id = `${name || ''}(${types})`; + + return { id, signature: keccak_256(id) }; +} + +export function methodSignature (name, params) { + const { id, signature } = eventSignature(name, params); + + return { id, signature: signature.substr(0, 8) }; +} diff --git a/js/src/abi/util/signature.spec.js b/js/src/abi/util/signature.spec.js new file mode 100644 index 0000000000..61664b8fca --- /dev/null +++ b/js/src/abi/util/signature.spec.js @@ -0,0 +1,68 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { eventSignature, methodSignature } from './signature'; + +describe('abi/util/signature', () => { + describe('eventSignature', () => { + it('encodes signature baz() correctly', () => { + expect(eventSignature('baz', [])) + .to.deep.equal({ id: 'baz()', signature: 'a7916fac4f538170f7cd12c148552e2cba9fcd72329a2dd5b07a6fa906488ddf' }); + }); + + it('encodes signature baz(uint32) correctly', () => { + expect(eventSignature('baz', [{ type: 'uint', length: 32 }])) + .to.deep.equal({ id: 'baz(uint32)', signature: '7d68785e8fc871be024b75964bd86d093511d4bc2dc7cf7bea32c48a0efaecb1' }); + }); + + it('encodes signature baz(uint32, bool) correctly', () => { + expect(eventSignature('baz', [{ type: 'uint', length: 32 }, { type: 'bool' }])) + .to.deep.equal({ id: 'baz(uint32,bool)', signature: 'cdcd77c0992ec5bbfc459984220f8c45084cc24d9b6efed1fae540db8de801d2' }); + }); + + it('encodes no-name signature correctly as ()', () => { + expect(eventSignature(undefined, [])) + .to.deep.equal({ id: '()', signature: '861731d50c3880a2ca1994d5ec287b94b2f4bd832a67d3e41c08177bdd5674fe' }); + }); + + it('encodes no-params signature correctly as ()', () => { + expect(eventSignature(undefined, undefined)) + .to.deep.equal({ id: '()', signature: '861731d50c3880a2ca1994d5ec287b94b2f4bd832a67d3e41c08177bdd5674fe' }); + }); + }); + + describe('methodSignature', () => { + it('encodes signature baz() correctly', () => { + expect(methodSignature('baz', [])).to.deep.equal({ id: 'baz()', signature: 'a7916fac' }); + }); + + it('encodes signature baz(uint32) correctly', () => { + expect(methodSignature('baz', [{ type: 'uint', length: 32 }])).to.deep.equal({ id: 'baz(uint32)', signature: '7d68785e' }); + }); + + it('encodes signature baz(uint32, bool) correctly', () => { + expect(methodSignature('baz', [{ type: 'uint', length: 32 }, { type: 'bool' }])).to.deep.equal({ id: 'baz(uint32,bool)', signature: 'cdcd77c0' }); + }); + + it('encodes no-name signature correctly as ()', () => { + expect(methodSignature(undefined, [])).to.deep.equal({ id: '()', signature: '861731d5' }); + }); + + it('encodes no-params signature correctly as ()', () => { + expect(methodSignature(undefined, undefined)).to.deep.equal({ id: '()', signature: '861731d5' }); + }); + }); +}); diff --git a/js/src/abi/util/slice.js b/js/src/abi/util/slice.js new file mode 100644 index 0000000000..417efea54d --- /dev/null +++ b/js/src/abi/util/slice.js @@ -0,0 +1,35 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { padAddress } from './pad'; + +export function sliceData (_data) { + if (!_data || !_data.length) { + return []; + } + + let data = (_data.substr(0, 2) === '0x') ? _data.substr(2) : _data; + + if (!data.length) { + data = padAddress(''); + } + + if (data.length % 64) { + throw new Error(`Invalid data length (not mod 64) passed to sliceData, ${data}, % 64 == ${data.length % 64}`); + } + + return data.match(/.{1,64}/g); +} diff --git a/js/src/abi/util/slice.spec.js b/js/src/abi/util/slice.spec.js new file mode 100644 index 0000000000..92608c5906 --- /dev/null +++ b/js/src/abi/util/slice.spec.js @@ -0,0 +1,48 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { sliceData } from './slice'; + +describe('abi/util/slice', () => { + describe('sliceData', () => { + const slice1 = '131a3afc00d1b1e3461b955e53fc866dcf303b3eb9f4c16f89e388930f48134b'; + const slice2 = '2124768576358735263578356373526387638357635873563586353756358763'; + + it('throws an error on mod 64 != 0', () => { + expect(() => sliceData('123')).to.throw(/sliceData/); + }); + + it('returns an empty array when length === 0', () => { + expect(sliceData('')).to.deep.equal([]); + }); + + it('returns an array with the slices otherwise', () => { + const sliced = sliceData(`${slice1}${slice2}`); + + expect(sliced.length).to.equal(2); + expect(sliced[0]).to.equal(slice1); + expect(sliced[1]).to.equal(slice2); + }); + + it('removes leading 0x when passed in', () => { + const sliced = sliceData(`0x${slice1}${slice2}`); + + expect(sliced.length).to.equal(2); + expect(sliced[0]).to.equal(slice1); + expect(sliced[1]).to.equal(slice2); + }); + }); +}); diff --git a/js/src/abi/util/sliceAs.js b/js/src/abi/util/sliceAs.js new file mode 100644 index 0000000000..47c3e9758d --- /dev/null +++ b/js/src/abi/util/sliceAs.js @@ -0,0 +1,47 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { toChecksumAddress } from './address'; + +export function asU32 (slice) { + // TODO: validation + + return new BigNumber(slice, 16); +} + +export function asI32 (slice) { + if (new BigNumber(slice.substr(0, 1), 16).toString(2)[0] === '1') { + return new BigNumber(slice, 16) + .minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)) + .minus(1); + } + + return new BigNumber(slice, 16); +} + +export function asAddress (slice) { + // TODO: address validation? + + return toChecksumAddress(`0x${slice.slice(-40)}`); +} + +export function asBool (slice) { + // TODO: everything else should be 0 + + return new BigNumber(slice[63]).eq(1); +} diff --git a/js/src/abi/util/sliceAs.spec.js b/js/src/abi/util/sliceAs.spec.js new file mode 100644 index 0000000000..af68860089 --- /dev/null +++ b/js/src/abi/util/sliceAs.spec.js @@ -0,0 +1,54 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { asAddress, asBool, asI32, asU32 } from './sliceAs'; + +describe('abi/util/sliceAs', () => { + const MAX_INT = 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'; + + describe('asAddress', () => { + it('correctly returns the last 0x40 characters', () => { + const address = '1111111111222222222233333333334444444444'; + expect(asAddress(`000000000000000000000000${address}`)).to.equal(`0x${address}`); + }); + }); + + describe('asBool', () => { + it('correctly returns true', () => { + expect(asBool('0000000000000000000000000000000000000000000000000000000000000001')).to.be.true; + }); + + it('correctly returns false', () => { + expect(asBool('0000000000000000000000000000000000000000000000000000000000000000')).to.be.false; + }); + }); + + describe('asI32', () => { + it('correctly decodes positive numbers', () => { + expect(asI32('000000000000000000000000000000000000000000000000000000000000007b').toString()).to.equal('123'); + }); + + it('correctly decodes negative numbers', () => { + expect(asI32('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85').toString()).to.equal('-123'); + }); + }); + + describe('asU32', () => { + it('returns a maxium U32', () => { + expect(asU32(MAX_INT).toString(16)).to.equal(MAX_INT); + }); + }); +}); diff --git a/js/src/abi/util/types.js b/js/src/abi/util/types.js new file mode 100644 index 0000000000..649f26db6c --- /dev/null +++ b/js/src/abi/util/types.js @@ -0,0 +1,27 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export function isArray (test) { + return Object.prototype.toString.call(test) === '[object Array]'; +} + +export function isString (test) { + return Object.prototype.toString.call(test) === '[object String]'; +} + +export function isInstanceOf (test, clazz) { + return test instanceof clazz; +} diff --git a/js/src/abi/util/types.spec.js b/js/src/abi/util/types.spec.js new file mode 100644 index 0000000000..2e1a538a6a --- /dev/null +++ b/js/src/abi/util/types.spec.js @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { isArray, isString, isInstanceOf } from './types'; +import Token from '../token'; + +describe('abi/util/types', () => { + describe('isArray', () => { + it('correctly identifies empty arrays as Array', () => { + expect(isArray([])).to.be.true; + }); + + it('correctly identifies non-empty arrays as Array', () => { + expect(isArray([1, 2, 3])).to.be.true; + }); + + it('correctly identifies strings as non-Array', () => { + expect(isArray('not an array')).to.be.false; + }); + + it('correctly identifies objects as non-Array', () => { + expect(isArray({})).to.be.false; + }); + }); + + describe('isString', () => { + it('correctly identifies empty string as string', () => { + expect(isString('')).to.be.true; + }); + + it('correctly identifies string as string', () => { + expect(isString('123')).to.be.true; + }); + }); + + describe('isInstanceOf', () => { + it('correctly identifies build-in instanceof', () => { + expect(isInstanceOf(new String('123'), String)).to.be.true; // eslint-disable-line no-new-wrappers + }); + + it('correctly identifies own instanceof', () => { + expect(isInstanceOf(new Token('int', 123), Token)).to.be.true; + }); + + it('correctly reports false for own', () => { + expect(isInstanceOf({ type: 'int' }, Token)).to.be.false; + }); + }); +}); diff --git a/js/src/api/README.md b/js/src/api/README.md new file mode 100644 index 0000000000..691a24cca9 --- /dev/null +++ b/js/src/api/README.md @@ -0,0 +1,145 @@ +# ethapi-js + +A thin, fast, low-level Promise-based wrapper around the Ethereum APIs. + +[![Build Status](https://travis-ci.org/jacogr/ethapi-js.svg?branch=master)](https://travis-ci.org/jacogr/ethapi-js) +[![Coverage Status](https://coveralls.io/repos/github/jacogr/ethapi-js/badge.svg?branch=master)](https://coveralls.io/github/jacogr/ethapi-js?branch=master) +[![Dependency Status](https://david-dm.org/jacogr/ethapi-js.svg)](https://david-dm.org/jacogr/ethapi-js) +[![devDependency Status](https://david-dm.org/jacogr/ethapi-js/dev-status.svg)](https://david-dm.org/jacogr/ethapi-js#info=devDependencies) + +## contributing + +Clone the repo and install dependencies via `npm install`. Tests can be executed via + +- `npm run testOnce` (100% covered unit tests) +- `npm run testE2E` (E2E against a running RPC-enabled testnet Parity/Geth instance, `parity --testnet` and for WebScokets, `geth --testnet --ws --wsorigins '*' --rpc`) +- setting the environment `DEBUG=true` will display the RPC POST bodies and responses on E2E tests + +## installation + +Install the package with `npm install --save ethapi-js` from the [npm registry ethapi-js](https://www.npmjs.com/package/ethapi-js) + +## usage + +### initialisation + +```javascript +// import the actual EthApi class +import EthApi from 'ethapi-js'; + +// do the setup +const transport = new EthApi.Transport.Http('http://localhost:8545'); // or .Ws('ws://localhost:8546') +const ethapi = new EthApi(transport); +``` + +You will require native Promises and fetch support (latest browsers only), they can be utilised by + +```javascript +import 'isomorphic-fetch'; + +import es6Promise from 'es6-promise'; +es6Promise.polyfill(); +``` + +### making calls + +perform a call + +```javascript +ethapi.eth + .coinbase() + .then((coinbase) => { + console.log(`The coinbase is ${coinbase}`); + }); +``` + +multiple promises + +```javascript +Promise + .all([ + ethapi.eth.coinbase(), + ethapi.net.listening() + ]) + .then(([coinbase, listening]) => { + // do stuff here + }); +``` + +chaining promises + +```javascript +ethapi.eth + .newFilter({...}) + .then((filterId) => ethapi.eth.getFilterChanges(filterId)) + .then((changes) => { + console.log(changes); + }); +``` + +### contracts + +attach contract + +```javascript +const abi = [{ name: 'callMe', inputs: [{ type: 'bool', ...}, { type: 'string', ...}]}, ...abi...]; +const contract = new ethapi.newContract(abi); +``` + +deploy + +```javascript +contract + .deploy('0xc0de', [params], 'superPassword') + .then((address) => { + console.log(`the contract was deployed at ${address}`); + }); +``` + +attach a contract at address + +```javascript +// via the constructor & .at function +const contract = api.newContract(abi).at('0xa9280...7347b'); +// or on an already initialised contract +contract.at('0xa9280...7347b'); +// perform calls here +``` + +find & call a function + +```javascript +contract.named + .callMe + .call({ gas: 21000 }, [true, 'someString']) // or estimateGas or sendTransaction + .then((result) => { + console.log(`the result was ${result}`); + }); +``` + +parse events from transaction receipt + +```javascript +contract + .parseTransactionEvents(txReceipt) + .then((receipt) => { + receipt.logs.forEach((log) => { + console.log('log parameters', log.params); + }); + }); +``` + +## apis + +APIs implement the calls as exposed in the [Ethcore JSON Ethereum RPC](https://github.com/ethcore/ethereum-rpc-json/) definitions. Mapping follows the naming conventions of the originals, i.e. `eth_call` becomes `eth.call`, `personal_accounts` becomes `personal.accounts`, etc. + +- [ethapi.db](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#db) +- [ethapi.eth](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#eth) +- [ethapi.ethcore](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#ethcore) +- [ethapi.net](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#net) +- [ethapi.personal](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#personal) +- [ethapi.shh](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#shh) +- [ethapi.trace](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#trace) +- [ethapi.web3](https://github.com/ethcore/ethereum-rpc-json/blob/master/interfaces.md#web3) + +As a verification step, all exposed interfaces are tested for existing and pointing to the correct endpoints by using the generated interfaces from the above repo. diff --git a/js/src/api/api.js b/js/src/api/api.js new file mode 100644 index 0000000000..c821297727 --- /dev/null +++ b/js/src/api/api.js @@ -0,0 +1,125 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Http, Ws } from './transport'; +import Contract from './contract'; + +import { Db, Eth, Ethcore, Net, Personal, Shh, Trace, Web3 } from './rpc'; +import Subscriptions from './subscriptions'; +import util from './util'; +import { isFunction } from './util/types'; + +export default class Api { + constructor (transport) { + if (!transport || !isFunction(transport.execute)) { + throw new Error('EthApi needs transport with execute() function defined'); + } + + this._transport = transport; + + this._db = new Db(transport); + this._eth = new Eth(transport); + this._ethcore = new Ethcore(transport); + this._net = new Net(transport); + this._personal = new Personal(transport); + this._shh = new Shh(transport); + this._trace = new Trace(transport); + this._web3 = new Web3(transport); + + this._subscriptions = new Subscriptions(this); + } + + get db () { + return this._db; + } + + get eth () { + return this._eth; + } + + get ethcore () { + return this._ethcore; + } + + get net () { + return this._net; + } + + get personal () { + return this._personal; + } + + get shh () { + return this._shh; + } + + get trace () { + return this._trace; + } + + get transport () { + return this._transport; + } + + get web3 () { + return this._web3; + } + + get util () { + return util; + } + + newContract (abi, address) { + return new Contract(this, abi).at(address); + } + + subscribe (subscriptionName, callback) { + return this._subscriptions.subscribe(subscriptionName, callback); + } + + unsubscribe (subscriptionName, subscriptionId) { + return this._subscriptions.unsubscribe(subscriptionName, subscriptionId); + } + + pollMethod (method, input, validate) { + const [_group, endpoint] = method.split('_'); + const group = `_${_group}`; + + return new Promise((resolve, reject) => { + const timeout = () => { + this[group][endpoint](input) + .then((result) => { + if (validate ? validate(result) : result) { + resolve(result); + } else { + setTimeout(timeout, 500); + } + }) + .catch((error) => { + console.error('pollMethod', error); + reject(error); + }); + }; + + timeout(); + }); + } + + static Transport = { + Http: Http, + Ws: Ws + } +} diff --git a/js/src/api/api.spec.js b/js/src/api/api.spec.js new file mode 100644 index 0000000000..bbd140d4d7 --- /dev/null +++ b/js/src/api/api.spec.js @@ -0,0 +1,47 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, endpointTest } from '../../test/mockRpc'; + +import Api from './api'; + +import ethereumRpc from '../jsonrpc/'; + +describe('api/Api', () => { + describe('constructor', () => { + it('requires defined/non-null transport object', () => { + expect(() => new Api()).to.throw(/Api needs transport/); + expect(() => new Api(null)).to.throw(/Api needs transport/); + }); + + it('requires an execute function on the transport object', () => { + expect(() => new Api({})).to.throw(/Api needs transport/); + expect(() => new Api({ execute: true })).to.throw(/Api needs transport/); + }); + }); + + describe('interface', () => { + const api = new Api(new Api.Transport.Http(TEST_HTTP_URL)); + + Object.keys(ethereumRpc).sort().forEach((endpoint) => { + describe(endpoint, () => { + Object.keys(ethereumRpc[endpoint]).sort().forEach((method) => { + endpointTest(api, endpoint, method); + }); + }); + }); + }); +}); diff --git a/js/src/api/contract/contract.js b/js/src/api/contract/contract.js new file mode 100644 index 0000000000..40caa76433 --- /dev/null +++ b/js/src/api/contract/contract.js @@ -0,0 +1,319 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Abi from '../../abi'; +import Api from '../api'; +import { isInstanceOf } from '../util/types'; + +let nextSubscriptionId = 0; + +export default class Contract { + constructor (api, abi) { + if (!isInstanceOf(api, Api)) { + throw new Error('API instance needs to be provided to Contract'); + } else if (!abi) { + throw new Error('ABI needs to be provided to Contract instance'); + } + + this._api = api; + this._abi = new Abi(abi); + + this._subscriptions = {}; + this._constructors = this._abi.constructors.map(this._bindFunction); + this._functions = this._abi.functions.map(this._bindFunction); + this._events = this._abi.events.map(this._bindEvent); + + this._instance = {}; + + this._events.forEach((evt) => { + this._instance[evt.name] = evt; + }); + this._functions.forEach((fn) => { + this._instance[fn.name] = fn; + }); + + this._sendSubscriptionChanges(); + } + + get address () { + return this._address; + } + + get constructors () { + return this._constructors; + } + + get events () { + return this._events; + } + + get functions () { + return this._functions; + } + + get instance () { + this._instance.address = this._address; + return this._instance; + } + + get api () { + return this._api; + } + + get abi () { + return this._abi; + } + + at (address) { + this._address = address; + return this; + } + + deploy (options, values, statecb) { + let gas; + + const setState = (state) => { + if (!statecb) { + return; + } + + return statecb(null, state); + }; + + setState({ state: 'estimateGas' }); + + return this._api.eth + .estimateGas(this._encodeOptions(this.constructors[0], options, values)) + .then((_gas) => { + gas = _gas.mul(1.2); + options.gas = gas.toFixed(0); + + setState({ state: 'postTransaction', gas }); + return this._api.eth.postTransaction(this._encodeOptions(this.constructors[0], options, values)); + }) + .then((requestId) => { + setState({ state: 'checkRequest', requestId }); + return this._pollCheckRequest(requestId); + }) + .then((txhash) => { + setState({ state: 'getTransactionReceipt', txhash }); + return this._pollTransactionReceipt(txhash, gas); + }) + .then((receipt) => { + if (receipt.gasUsed.eq(gas)) { + throw new Error(`Contract not deployed, gasUsed == ${gas.toFixed(0)}`); + } + + setState({ state: 'hasReceipt', receipt }); + this._address = receipt.contractAddress; + return this._address; + }) + .then((address) => { + setState({ state: 'getCode' }); + return this._api.eth.getCode(this._address); + }) + .then((code) => { + if (code === '0x') { + throw new Error('Contract not deployed, getCode returned 0x'); + } + + setState({ state: 'completed' }); + return this._address; + }); + } + + parseEventLogs (logs) { + return logs.map((log) => { + const signature = log.topics[0].substr(2); + const event = this.events.find((evt) => evt.signature === signature); + + if (!event) { + throw new Error(`Unable to find event matching signature ${signature}`); + } + + const decoded = event.decodeLog(log.topics, log.data); + + log.params = {}; + log.event = event.name; + + decoded.params.forEach((param) => { + log.params[param.name] = param.token.value; + }); + + return log; + }); + } + + parseTransactionEvents (receipt) { + receipt.logs = this.parseEventLogs(receipt.logs); + + return receipt; + } + + _pollCheckRequest = (requestId) => { + return this._api.pollMethod('eth_checkRequest', requestId); + } + + _pollTransactionReceipt = (txhash, gas) => { + return this.api.pollMethod('eth_getTransactionReceipt', txhash, (receipt) => { + if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) { + return false; + } + + return true; + }); + } + + _encodeOptions (func, options, values) { + const tokens = func ? this._abi.encodeTokens(func.inputParamTypes(), values) : null; + const call = tokens ? func.encodeCall(tokens) : null; + + if (options.data && options.data.substr(0, 2) === '0x') { + options.data = options.data.substr(2); + } + options.data = `0x${options.data || ''}${call || ''}`; + + return options; + } + + _addOptionsTo (options = {}) { + return Object.assign({ + to: this._address + }, options); + } + + _bindFunction = (func) => { + func.call = (options, values = []) => { + return this._api.eth + .call(this._encodeOptions(func, this._addOptionsTo(options), values)) + .then((encoded) => func.decodeOutput(encoded)) + .then((tokens) => tokens.map((token) => token.value)) + .then((returns) => returns.length === 1 ? returns[0] : returns); + }; + + if (!func.constant) { + func.postTransaction = (options, values = []) => { + return this._api.eth + .postTransaction(this._encodeOptions(func, this._addOptionsTo(options), values)); + }; + + func.estimateGas = (options, values = []) => { + return this._api.eth + .estimateGas(this._encodeOptions(func, this._addOptionsTo(options), values)); + }; + } + + return func; + } + + _bindEvent = (event) => { + event.subscribe = (options = {}, callback) => { + return this._subscribe(event, options, callback); + }; + + event.unsubscribe = (subscriptionId) => { + return this.unsubscribe(subscriptionId); + }; + + return event; + } + + subscribe (eventName = null, options = {}, callback) { + return new Promise((resolve, reject) => { + let event = null; + + if (eventName) { + event = this._events.find((evt) => evt.name === eventName); + + if (!event) { + const events = this._events.map((evt) => evt.name).join(', '); + reject(new Error(`${eventName} is not a valid eventName, subscribe using one of ${events} (or null to include all)`)); + return; + } + } + + return this._subscribe(event, options, callback).then(resolve).catch(reject); + }); + } + + _subscribe (event = null, _options, callback) { + const subscriptionId = nextSubscriptionId++; + const options = Object.assign({}, _options, { + address: this._address, + topics: [event ? event.signature : null] + }); + + return this._api.eth + .newFilter(options) + .then((filterId) => { + return this._api.eth + .getFilterLogs(filterId) + .then((logs) => { + callback(null, this.parseEventLogs(logs)); + this._subscriptions[subscriptionId] = { + options, + callback, + filterId + }; + + return subscriptionId; + }); + }); + } + + unsubscribe (subscriptionId) { + return this._api.eth + .uninstallFilter(this._subscriptions[subscriptionId].filterId) + .then(() => { + delete this._subscriptions[subscriptionId]; + }) + .catch((error) => { + console.error('unsubscribe', error); + }); + } + + _sendSubscriptionChanges = () => { + const subscriptions = Object.values(this._subscriptions); + const timeout = () => setTimeout(this._sendSubscriptionChanges, 1000); + + Promise + .all( + subscriptions.map((subscription) => { + return this._api.eth.getFilterChanges(subscription.filterId); + }) + ) + .then((logsArray) => { + logsArray.forEach((logs, idx) => { + if (!logs || !logs.length) { + return; + } + + try { + subscriptions[idx].callback(null, this.parseEventLogs(logs)); + } catch (error) { + this.unsubscribe(idx); + console.error('_sendSubscriptionChanges', error); + } + }); + + timeout(); + }) + .catch((error) => { + console.error('_sendSubscriptionChanges', error); + timeout(); + }); + } +} diff --git a/js/src/api/contract/contract.spec.js b/js/src/api/contract/contract.spec.js new file mode 100644 index 0000000000..7ac3e099c9 --- /dev/null +++ b/js/src/api/contract/contract.spec.js @@ -0,0 +1,539 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import sinon from 'sinon'; + +import { TEST_HTTP_URL, mockHttp } from '../../../test/mockRpc'; + +import Abi from '../../abi'; + +import Api from '../api'; +import Contract from './contract'; +import { isInstanceOf, isFunction } from '../util/types'; + +const transport = new Api.Transport.Http(TEST_HTTP_URL); +const eth = new Api(transport); + +describe('api/contract/Contract', () => { + const ADDR = '0x0123456789'; + const ABI = [ + { + type: 'function', name: 'test', + inputs: [{ name: 'boolin', type: 'bool' }, { name: 'stringin', type: 'string' }], + outputs: [{ type: 'uint' }] + }, + { + type: 'function', name: 'test2', + outputs: [{ type: 'uint' }, { type: 'uint' }] + }, + { type: 'constructor' }, + { type: 'event', name: 'baz' }, + { type: 'event', name: 'foo' } + ]; + const VALUES = [true, 'jacogr']; + const ENCODED = '0x023562050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066a61636f67720000000000000000000000000000000000000000000000000000'; + const RETURN1 = '0000000000000000000000000000000000000000000000000000000000123456'; + const RETURN2 = '0000000000000000000000000000000000000000000000000000000000456789'; + let scope; + + describe('constructor', () => { + it('needs an EthAbi instance', () => { + expect(() => new Contract()).to.throw(/API instance needs to be provided to Contract/); + }); + + it('needs an ABI', () => { + expect(() => new Contract(eth)).to.throw(/ABI needs to be provided to Contract instance/); + }); + + describe('internal setup', () => { + const contract = new Contract(eth, ABI); + + it('sets EthApi & parsed interface', () => { + expect(contract.address).to.not.be.ok; + expect(contract.api).to.deep.equal(eth); + expect(isInstanceOf(contract.abi, Abi)).to.be.ok; + }); + + it('attaches functions', () => { + expect(contract.functions.length).to.equal(2); + expect(contract.functions[0].name).to.equal('test'); + }); + + it('attaches constructors', () => { + expect(contract.constructors.length).to.equal(1); + }); + + it('attaches events', () => { + expect(contract.events.length).to.equal(2); + expect(contract.events[0].name).to.equal('baz'); + }); + }); + }); + + describe('at', () => { + it('sets returns the functions, events & sets the address', () => { + const contract = new Contract(eth, [ + { + constant: true, + inputs: [{ + name: '_who', + type: 'address' + }], + name: 'balanceOf', + outputs: [{ + name: '', + type: 'uint256' + }], + type: 'function' + }, + { + anonymous: false, + inputs: [{ + indexed: false, + name: 'amount', + type: 'uint256' + }], + name: 'Drained', + type: 'event' + } + ]); + contract.at('6789'); + + expect(Object.keys(contract.instance)).to.deep.equal(['Drained', 'balanceOf', 'address']); + expect(contract.address).to.equal('6789'); + }); + }); + + describe('parseTransactionEvents', () => { + it('checks for unmatched signatures', () => { + const contract = new Contract(eth, [{ anonymous: false, name: 'Message', type: 'event' }]); + expect(() => contract.parseTransactionEvents({ + logs: [{ + data: '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063cf90d3f0410092fc0fca41846f5962239791950000000000000000000000000000000000000000000000000000000056e6c85f0000000000000000000000000000000000000000000000000001000000004fcd00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d706f7374286d6573736167652900000000000000000000000000000000000000', + topics: [ + '0x954ba6c157daf8a26539574ffa64203c044691aa57251af95f4b48d85ec00dd5', + '0x0000000000000000000000000000000000000000000000000001000000004fe0' + ] + }] + })).to.throw(/event matching signature/); + }); + + it('parses a transaction log into the data', () => { + const contract = new Contract(eth, [ + { + anonymous: false, name: 'Message', type: 'event', + inputs: [ + { indexed: true, name: 'postId', type: 'uint256' }, + { indexed: false, name: 'parentId', type: 'uint256' }, + { indexed: false, name: 'sender', type: 'address' }, + { indexed: false, name: 'at', type: 'uint256' }, + { indexed: false, name: 'messageId', type: 'uint256' }, + { indexed: false, name: 'message', type: 'string' } + ] + } + ]); + const decoded = contract.parseTransactionEvents({ + blockHash: '0xa9280530a3b47bee2fc80f2862fd56502ae075350571d724d6442ea4c597347b', + blockNumber: '0x4fcd', + cumulativeGasUsed: '0xb57f', + gasUsed: '0xb57f', + logs: [{ + address: '0x22bff18ec62281850546a664bb63a5c06ac5f76c', + blockHash: '0xa9280530a3b47bee2fc80f2862fd56502ae075350571d724d6442ea4c597347b', + blockNumber: '0x4fcd', + data: '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063cf90d3f0410092fc0fca41846f5962239791950000000000000000000000000000000000000000000000000000000056e6c85f0000000000000000000000000000000000000000000000000001000000004fcd00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d706f7374286d6573736167652900000000000000000000000000000000000000', + logIndex: '0x0', + topics: [ + '0x954ba6c157daf8a26539574ffa64203c044691aa57251af95f4b48d85ec00dd5', + '0x0000000000000000000000000000000000000000000000000001000000004fe0' + ], + transactionHash: '0xca16f537d761d13e4e80953b754e2b15541f267d6cad9381f750af1bae1e4917', + transactionIndex: '0x0' + }], + to: '0x22bff18ec62281850546a664bb63a5c06ac5f76c', + transactionHash: '0xca16f537d761d13e4e80953b754e2b15541f267d6cad9381f750af1bae1e4917', + transactionIndex: '0x0' + }); + const log = decoded.logs[0]; + + expect(log.event).to.equal('Message'); + expect(log.address).to.equal('0x22bff18ec62281850546a664bb63a5c06ac5f76c'); + expect(log.params).to.deep.equal({ + at: new BigNumber('1457965151'), + message: 'post(message)', + messageId: new BigNumber('281474976731085'), + parentId: new BigNumber(0), + postId: new BigNumber('281474976731104'), + sender: '0x63Cf90D3f0410092FC0fca41846f596223979195' + }); + }); + }); + + describe('_pollTransactionReceipt', () => { + const contract = new Contract(eth, ABI); + const ADDRESS = '0xD337e80eEdBdf86eDBba021797d7e4e00Bb78351'; + const BLOCKNUMBER = '555000'; + const RECEIPT = { contractAddress: ADDRESS.toLowerCase(), blockNumber: BLOCKNUMBER }; + const EXPECT = { contractAddress: ADDRESS, blockNumber: new BigNumber(BLOCKNUMBER) }; + + let scope; + let receipt; + + describe('success', () => { + before(() => { + scope = mockHttp([ + { method: 'eth_getTransactionReceipt', reply: { result: null } }, + { method: 'eth_getTransactionReceipt', reply: { result: null } }, + { method: 'eth_getTransactionReceipt', reply: { result: RECEIPT } } + ]); + + return contract + ._pollTransactionReceipt('0x123') + .then((_receipt) => { + receipt = _receipt; + }); + }); + + it('sends multiple getTransactionReceipt calls', () => { + expect(scope.isDone()).to.be.true; + }); + + it('passes the txhash through', () => { + expect(scope.body.eth_getTransactionReceipt.params[0]).to.equal('0x123'); + }); + + it('receives the final receipt', () => { + expect(receipt).to.deep.equal(EXPECT); + }); + }); + + describe('error', () => { + before(() => { + scope = mockHttp([{ method: 'eth_getTransactionReceipt', reply: { error: { code: -1, message: 'failure' } } }]); + }); + + it('returns the errors', () => { + return contract + ._pollTransactionReceipt('0x123') + .catch((error) => { + expect(error.message).to.match(/failure/); + }); + }); + }); + }); + + describe('deploy', () => { + const contract = new Contract(eth, ABI); + const ADDRESS = '0xD337e80eEdBdf86eDBba021797d7e4e00Bb78351'; + const RECEIPT_PEND = { contractAddress: ADDRESS.toLowerCase(), gasUsed: 50, blockNumber: 0 }; + const RECEIPT_DONE = { contractAddress: ADDRESS.toLowerCase(), gasUsed: 50, blockNumber: 2500 }; + const RECEIPT_EXCP = { contractAddress: ADDRESS.toLowerCase(), gasUsed: 1200, blockNumber: 2500 }; + + let scope; + + describe('success', () => { + before(() => { + scope = mockHttp([ + { method: 'eth_estimateGas', reply: { result: 1000 } }, + { method: 'eth_postTransaction', reply: { result: '0x678' } }, + { method: 'eth_checkRequest', reply: { result: null } }, + { method: 'eth_checkRequest', reply: { result: '0x890' } }, + { method: 'eth_getTransactionReceipt', reply: { result: null } }, + { method: 'eth_getTransactionReceipt', reply: { result: RECEIPT_PEND } }, + { method: 'eth_getTransactionReceipt', reply: { result: RECEIPT_DONE } }, + { method: 'eth_getCode', reply: { result: '0x456' } } + ]); + + return contract.deploy({ data: '0x123' }, []); + }); + + it('calls estimateGas, postTransaction, checkRequest, getTransactionReceipt & getCode in order', () => { + expect(scope.isDone()).to.be.true; + }); + + it('passes the options through to postTransaction (incl. gas calculation)', () => { + expect(scope.body.eth_postTransaction.params).to.deep.equal([ + { data: '0x123', gas: '0x4b0' } + ]); + }); + + it('sets the address of the contract', () => { + expect(contract.address).to.equal(ADDRESS); + }); + }); + + describe('error', () => { + it('fails when gasUsed == gas', () => { + mockHttp([ + { method: 'eth_estimateGas', reply: { result: 1000 } }, + { method: 'eth_postTransaction', reply: { result: '0x678' } }, + { method: 'eth_checkRequest', reply: { result: '0x789' } }, + { method: 'eth_getTransactionReceipt', reply: { result: RECEIPT_EXCP } } + ]); + + return contract + .deploy({ data: '0x123' }, []) + .catch((error) => { + expect(error.message).to.match(/not deployed, gasUsed/); + }); + }); + + it('fails when no code was deployed', () => { + mockHttp([ + { method: 'eth_estimateGas', reply: { result: 1000 } }, + { method: 'eth_postTransaction', reply: { result: '0x678' } }, + { method: 'eth_checkRequest', reply: { result: '0x789' } }, + { method: 'eth_getTransactionReceipt', reply: { result: RECEIPT_DONE } }, + { method: 'eth_getCode', reply: { result: '0x' } } + ]); + + return contract + .deploy({ data: '0x123' }, []) + .catch((error) => { + expect(error.message).to.match(/not deployed, getCode/); + }); + }); + }); + }); + + describe('bindings', () => { + let contract; + let cons; + let func; + + beforeEach(() => { + contract = new Contract(eth, ABI); + contract.at(ADDR); + cons = contract.constructors[0]; + func = contract.functions.find((fn) => fn.name === 'test'); + }); + + describe('_addOptionsTo', () => { + it('works on no object specified', () => { + expect(contract._addOptionsTo()).to.deep.equal({ to: ADDR }); + }); + + it('uses the contract address when none specified', () => { + expect(contract._addOptionsTo({ from: 'me' })).to.deep.equal({ to: ADDR, from: 'me' }); + }); + + it('overrides the contract address when specified', () => { + expect(contract._addOptionsTo({ to: 'you', from: 'me' })).to.deep.equal({ to: 'you', from: 'me' }); + }); + }); + + describe('attachments', () => { + it('attaches .call, .postTransaction & .estimateGas to constructors', () => { + expect(isFunction(cons.call)).to.be.true; + expect(isFunction(cons.postTransaction)).to.be.true; + expect(isFunction(cons.estimateGas)).to.be.true; + }); + + it('attaches .call, .postTransaction & .estimateGas to functions', () => { + expect(isFunction(func.call)).to.be.true; + expect(isFunction(func.postTransaction)).to.be.true; + expect(isFunction(func.estimateGas)).to.be.true; + }); + + it('attaches .call only to constant functions', () => { + func = (new Contract(eth, [{ type: 'function', name: 'test', constant: true }])).functions[0]; + + expect(isFunction(func.call)).to.be.true; + expect(isFunction(func.postTransaction)).to.be.false; + expect(isFunction(func.estimateGas)).to.be.false; + }); + }); + + describe('postTransaction', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_postTransaction', reply: { result: ['hashId'] } }]); + }); + + it('encodes options and mades an eth_postTransaction call', () => { + return func + .postTransaction({ someExtras: 'foo' }, VALUES) + .then(() => { + expect(scope.isDone()).to.be.true; + expect(scope.body.eth_postTransaction.params[0]).to.deep.equal({ + someExtras: 'foo', + to: ADDR, + data: ENCODED + }); + }); + }); + }); + + describe('estimateGas', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_estimateGas', reply: { result: ['0x123'] } }]); + }); + + it('encodes options and mades an eth_estimateGas call', () => { + return func + .estimateGas({ someExtras: 'foo' }, VALUES) + .then((amount) => { + expect(scope.isDone()).to.be.true; + expect(amount.toString(16)).to.equal('123'); + expect(scope.body.eth_estimateGas.params).to.deep.equal([{ + someExtras: 'foo', + to: ADDR, + data: ENCODED + }]); + }); + }); + }); + + describe('call', () => { + it('encodes options and mades an eth_call call', () => { + scope = mockHttp([{ method: 'eth_call', reply: { result: RETURN1 } }]); + + return func + .call({ someExtras: 'foo' }, VALUES) + .then((result) => { + expect(scope.isDone()).to.be.true; + expect(scope.body.eth_call.params).to.deep.equal([{ + someExtras: 'foo', + to: ADDR, + data: ENCODED + }, 'latest']); + expect(result.toString(16)).to.equal('123456'); + }); + }); + + it('encodes options and mades an eth_call call (multiple returns)', () => { + scope = mockHttp([{ method: 'eth_call', reply: { result: `${RETURN1}${RETURN2}` } }]); + + return contract.functions[1] + .call({}, []) + .then((result) => { + expect(scope.isDone()).to.be.true; + expect(result.length).to.equal(2); + expect(result[0].toString(16)).to.equal('123456'); + expect(result[1].toString(16)).to.equal('456789'); + }); + }); + }); + }); + + describe('subscribe', () => { + const abi = [ + { + anonymous: false, name: 'Message', type: 'event', + inputs: [ + { indexed: true, name: 'postId', type: 'uint256' }, + { indexed: false, name: 'parentId', type: 'uint256' }, + { indexed: false, name: 'sender', type: 'address' }, + { indexed: false, name: 'at', type: 'uint256' }, + { indexed: false, name: 'messageId', type: 'uint256' }, + { indexed: false, name: 'message', type: 'string' } + ] + } + ]; + const logs = [{ + address: '0x22bff18ec62281850546a664bb63a5c06ac5f76c', + blockHash: '0xa9280530a3b47bee2fc80f2862fd56502ae075350571d724d6442ea4c597347b', + blockNumber: '0x4fcd', + data: '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063cf90d3f0410092fc0fca41846f5962239791950000000000000000000000000000000000000000000000000000000056e6c85f0000000000000000000000000000000000000000000000000001000000004fcd00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d706f7374286d6573736167652900000000000000000000000000000000000000', + logIndex: '0x0', + topics: [ + '0x954ba6c157daf8a26539574ffa64203c044691aa57251af95f4b48d85ec00dd5', + '0x0000000000000000000000000000000000000000000000000001000000004fe0' + ], + transactionHash: '0xca16f537d761d13e4e80953b754e2b15541f267d6cad9381f750af1bae1e4917', + transactionIndex: '0x0' + }]; + const parsed = [{ + address: '0x22bfF18ec62281850546a664bb63a5C06AC5F76C', + blockHash: '0xa9280530a3b47bee2fc80f2862fd56502ae075350571d724d6442ea4c597347b', + blockNumber: new BigNumber(20429), + data: '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063cf90d3f0410092fc0fca41846f5962239791950000000000000000000000000000000000000000000000000000000056e6c85f0000000000000000000000000000000000000000000000000001000000004fcd00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d706f7374286d6573736167652900000000000000000000000000000000000000', + event: 'Message', + logIndex: new BigNumber(0), + params: { + at: new BigNumber(1457965151), + message: 'post(message)', + messageId: new BigNumber(281474976731085), + parentId: new BigNumber(0), + postId: new BigNumber(281474976731104), + sender: '0x63Cf90D3f0410092FC0fca41846f596223979195' + }, + topics: [ + '0x954ba6c157daf8a26539574ffa64203c044691aa57251af95f4b48d85ec00dd5', '0x0000000000000000000000000000000000000000000000000001000000004fe0' + ], + transactionHash: '0xca16f537d761d13e4e80953b754e2b15541f267d6cad9381f750af1bae1e4917', + transactionIndex: new BigNumber(0) + }]; + let contract; + + beforeEach(() => { + contract = new Contract(eth, abi); + contract.at(ADDR); + }); + + describe('invalid events', () => { + it('fails to subscribe to an invalid names', () => { + return contract + .subscribe('invalid') + .catch((error) => { + expect(error.message).to.match(/invalid is not a valid eventName/); + }); + }); + }); + + describe('valid events', () => { + let cbb; + let cbe; + + beforeEach(() => { + scope = mockHttp([ + { method: 'eth_newFilter', reply: { result: '0x123' } }, + { method: 'eth_getFilterLogs', reply: { result: logs } }, + { method: 'eth_newFilter', reply: { result: '0x123' } }, + { method: 'eth_getFilterLogs', reply: { result: logs } } + ]); + cbb = sinon.stub(); + cbe = sinon.stub(); + + return contract.subscribe('Message', {}, cbb); + }); + + it('sets the subscriptionId returned', () => { + return contract + .subscribe('Message', {}, cbe) + .then((subscriptionId) => { + expect(subscriptionId).to.equal(1); + }); + }); + + it('creates a new filter and retrieves the logs on it', () => { + return contract + .subscribe('Message', {}, cbe) + .then((subscriptionId) => { + expect(scope.isDone()).to.be.true; + }); + }); + + it('returns the logs to the callback', () => { + return contract + .subscribe('Message', {}, cbe) + .then((subscriptionId) => { + expect(cbe).to.have.been.calledWith(null, parsed); + }); + }); + }); + }); +}); diff --git a/js/src/api/contract/index.js b/js/src/api/contract/index.js new file mode 100644 index 0000000000..18051a69f9 --- /dev/null +++ b/js/src/api/contract/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './contract'; diff --git a/js/src/api/format/input.js b/js/src/api/format/input.js new file mode 100644 index 0000000000..16ca2b7f29 --- /dev/null +++ b/js/src/api/format/input.js @@ -0,0 +1,139 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { isArray, isHex, isInstanceOf, isString } from '../util/types'; + +export function inAddress (address) { + // TODO: address validation if we have upper-lower addresses + return inHex(address); +} + +export function inBlockNumber (blockNumber) { + if (isString(blockNumber)) { + switch (blockNumber) { + case 'earliest': + case 'latest': + case 'pending': + return blockNumber; + } + } + + return inNumber16(blockNumber); +} + +export function inData (data) { + if (data && data.length && !isHex(data)) { + data = data.split('').map((chr) => { + return `0${chr.charCodeAt(0).toString(16)}`.slice(-2); + }).join(''); + } + + return inHex(data); +} + +export function inTopics (_topics) { + let topics = (_topics || []) + .filter((topic) => topic) + .map(inHex); + + while (topics.length < 4) { + topics.push(null); + } + + return topics; +} + +export function inFilter (options) { + if (options) { + Object.keys(options).forEach((key) => { + switch (key) { + case 'address': + if (isArray(options[key])) { + options[key] = options[key].map(inAddress); + } else { + options[key] = inAddress(options[key]); + } + break; + + case 'fromBlock': + case 'toBlock': + options[key] = inBlockNumber(options[key]); + break; + + case 'limit': + options[key] = inNumber10(options[key]); + break; + + case 'topics': + options[key] = inTopics(options[key]); + } + }); + } + + return options; +} + +export function inHex (str) { + if (str && str.substr(0, 2) === '0x') { + return str.toLowerCase(); + } + + return `0x${(str || '').toLowerCase()}`; +} + +export function inNumber10 (number) { + if (isInstanceOf(number, BigNumber)) { + return number.toNumber(); + } + + return (new BigNumber(number || 0)).toNumber(); +} + +export function inNumber16 (number) { + if (isInstanceOf(number, BigNumber)) { + return inHex(number.toString(16)); + } + + return inHex((new BigNumber(number || 0)).toString(16)); +} + +export function inOptions (options) { + if (options) { + Object.keys(options).forEach((key) => { + switch (key) { + case 'from': + case 'to': + options[key] = inAddress(options[key]); + break; + + case 'gas': + case 'gasPrice': + case 'value': + case 'nonce': + options[key] = inNumber16(options[key]); + break; + + case 'data': + options[key] = inData(options[key]); + break; + } + }); + } + + return options; +} diff --git a/js/src/api/format/input.spec.js b/js/src/api/format/input.spec.js new file mode 100644 index 0000000000..219886d05f --- /dev/null +++ b/js/src/api/format/input.spec.js @@ -0,0 +1,245 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { inAddress, inBlockNumber, inData, inFilter, inHex, inNumber10, inNumber16, inOptions } from './input'; +import { isAddress } from '../../../test/types'; + +describe('api/format/input', () => { + const address = '0x63cf90d3f0410092fc0fca41846f596223979195'; + + describe('inAddress', () => { + const address = '63cf90d3f0410092fc0fca41846f596223979195'; + + it('adds the leading 0x as required', () => { + expect(inAddress(address)).to.equal(`0x${address}`); + }); + + it('returns verified addresses as-is', () => { + expect(inAddress(`0x${address}`)).to.equal(`0x${address}`); + }); + + it('returns lowercase equivalents', () => { + expect(inAddress(address.toUpperCase())).to.equal(`0x${address}`); + }); + + it('returns 0x on null addresses', () => { + expect(inAddress()).to.equal('0x'); + }); + }); + + describe('inBlockNumber()', () => { + it('returns earliest as-is', () => { + expect(inBlockNumber('earliest')).to.equal('earliest'); + }); + + it('returns latest as-is', () => { + expect(inBlockNumber('latest')).to.equal('latest'); + }); + + it('returns pending as-is', () => { + expect(inBlockNumber('pending')).to.equal('pending'); + }); + + it('formats existing BigNumber into hex', () => { + expect(inBlockNumber(new BigNumber(0x123456))).to.equal('0x123456'); + }); + + it('formats hex strings into hex', () => { + expect(inBlockNumber('0x123456')).to.equal('0x123456'); + }); + + it('formats numbers into hex', () => { + expect(inBlockNumber(0x123456)).to.equal('0x123456'); + }); + }); + + describe('inData', () => { + it('formats to hex', () => { + expect(inData('123456')).to.equal('0x123456'); + }); + + it('converts a string to a hex representation', () => { + expect(inData('jaco')).to.equal('0x6a61636f'); + }); + }); + + describe('inHex', () => { + it('leaves leading 0x as-is', () => { + expect(inHex('0x123456')).to.equal('0x123456'); + }); + + it('adds a leading 0x', () => { + expect(inHex('123456')).to.equal('0x123456'); + }); + + it('returns uppercase as lowercase (leading 0x)', () => { + expect(inHex('0xABCDEF')).to.equal('0xabcdef'); + }); + + it('returns uppercase as lowercase (no leading 0x)', () => { + expect(inHex('ABCDEF')).to.equal('0xabcdef'); + }); + + it('handles empty & null', () => { + expect(inHex()).to.equal('0x'); + expect(inHex('')).to.equal('0x'); + }); + }); + + describe('inFilter', () => { + ['address'].forEach((input) => { + it(`formats ${input} address as address`, () => { + const block = {}; + block[input] = address; + const formatted = inFilter(block)[input]; + + expect(isAddress(formatted)).to.be.true; + expect(formatted).to.equal(address); + }); + }); + + ['fromBlock', 'toBlock'].forEach((input) => { + it(`formats ${input} number as blockNumber`, () => { + const block = {}; + block[input] = 0x123; + const formatted = inFilter(block)[input]; + + expect(formatted).to.equal('0x123'); + }); + }); + + it('ignores and passes through unknown keys', () => { + expect(inFilter({ someRandom: 'someRandom' })).to.deep.equal({ someRandom: 'someRandom' }); + }); + + it('formats an filter options object with relevant entries converted', () => { + expect( + inFilter({ + address: address, + fromBlock: 'latest', + toBlock: 0x101, + extraData: 'someExtraStuffInHere', + limit: 0x32 + }) + ).to.deep.equal({ + address: address, + fromBlock: 'latest', + toBlock: '0x101', + extraData: 'someExtraStuffInHere', + limit: 50 + }); + }); + }); + + describe('inNumber10()', () => { + it('formats existing BigNumber into number', () => { + expect(inNumber10(new BigNumber(123))).to.equal(123); + }); + + it('formats hex strings into decimal', () => { + expect(inNumber10('0x0a')).to.equal(10); + }); + + it('formats numbers into number', () => { + expect(inNumber10(123)).to.equal(123); + }); + + it('formats undefined into 0', () => { + expect(inNumber10()).to.equal(0); + }); + }); + + describe('inNumber16()', () => { + it('formats existing BigNumber into hex', () => { + expect(inNumber16(new BigNumber(0x123456))).to.equal('0x123456'); + }); + + it('formats hex strings into hex', () => { + expect(inNumber16('0x123456')).to.equal('0x123456'); + }); + + it('formats numbers into hex', () => { + expect(inNumber16(0x123456)).to.equal('0x123456'); + }); + + it('formats undefined into 0', () => { + expect(inNumber16()).to.equal('0x0'); + }); + }); + + describe('inOptions', () => { + ['data'].forEach((input) => { + it(`converts ${input} to hex data`, () => { + const block = {}; + block[input] = '1234'; + const formatted = inData(block[input]); + + expect(formatted).to.equal('0x1234'); + }); + }); + + ['from', 'to'].forEach((input) => { + it(`formats ${input} address as address`, () => { + const block = {}; + block[input] = address; + const formatted = inOptions(block)[input]; + + expect(isAddress(formatted)).to.be.true; + expect(formatted).to.equal(address); + }); + }); + + ['gas', 'gasPrice', 'value', 'nonce'].forEach((input) => { + it(`formats ${input} number as hexnumber`, () => { + const block = {}; + block[input] = 0x123; + const formatted = inOptions(block)[input]; + + expect(formatted).to.equal('0x123'); + }); + }); + + it('ignores and passes through unknown keys', () => { + expect(inOptions({ someRandom: 'someRandom' })).to.deep.equal({ someRandom: 'someRandom' }); + }); + + it('formats an options object with relevant entries converted', () => { + expect( + inOptions({ + from: address, + to: address, + gas: new BigNumber('0x100'), + gasPrice: 0x101, + value: 258, + nonce: '0x104', + data: '0123456789', + extraData: 'someExtraStuffInHere' + }) + ).to.deep.equal({ + from: address, + to: address, + gas: '0x100', + gasPrice: '0x101', + value: '0x102', + nonce: '0x104', + data: '0x0123456789', + extraData: 'someExtraStuffInHere' + }); + }); + }); +}); diff --git a/js/src/api/format/output.js b/js/src/api/format/output.js new file mode 100644 index 0000000000..611c2e74e7 --- /dev/null +++ b/js/src/api/format/output.js @@ -0,0 +1,165 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { toChecksumAddress } from '../../abi/util/address'; + +export function outAccountInfo (infos) { + const ret = {}; + + Object.keys(infos).forEach((address) => { + const info = infos[address]; + + ret[outAddress(address)] = { + name: info.name, + uuid: info.uuid, + meta: JSON.parse(info.meta) + }; + }); + + return ret; +} + +export function outAddress (address) { + return toChecksumAddress(address); +} + +export function outBlock (block) { + if (block) { + Object.keys(block).forEach((key) => { + switch (key) { + case 'author': + case 'miner': + block[key] = outAddress(block[key]); + break; + + case 'difficulty': + case 'gasLimit': + case 'gasUsed': + case 'nonce': + case 'number': + case 'totalDifficulty': + block[key] = outNumber(block[key]); + break; + + case 'timestamp': + block[key] = outDate(block[key]); + break; + } + }); + } + + return block; +} + +export function outDate (date) { + return new Date(outNumber(date).toNumber() * 1000); +} + +export function outLog (log) { + Object.keys(log).forEach((key) => { + switch (key) { + case 'blockNumber': + case 'logIndex': + case 'transactionIndex': + log[key] = outNumber(log[key]); + break; + + case 'address': + log[key] = outAddress(log[key]); + break; + } + }); + + return log; +} + +export function outNumber (number) { + return new BigNumber(number || 0); +} + +export function outPeers (peers) { + return { + active: outNumber(peers.active), + connected: outNumber(peers.connected), + max: outNumber(peers.max) + }; +} + +export function outReceipt (receipt) { + if (receipt) { + Object.keys(receipt).forEach((key) => { + switch (key) { + case 'blockNumber': + case 'cumulativeGasUsed': + case 'gasUsed': + case 'transactionIndex': + receipt[key] = outNumber(receipt[key]); + break; + + case 'contractAddress': + receipt[key] = outAddress(receipt[key]); + break; + } + }); + } + + return receipt; +} + +export function outSignerRequest (request) { + if (request) { + Object.keys(request).forEach((key) => { + switch (key) { + case 'id': + request[key] = outNumber(request[key]); + break; + + case 'payload': + request[key].transaction = outTransaction(request[key].transaction); + break; + } + }); + } + + return request; +} + +export function outTransaction (tx) { + if (tx) { + Object.keys(tx).forEach((key) => { + switch (key) { + case 'blockNumber': + case 'gasPrice': + case 'gas': + case 'nonce': + case 'transactionIndex': + case 'value': + tx[key] = outNumber(tx[key]); + break; + + case 'creates': + case 'from': + case 'to': + tx[key] = outAddress(tx[key]); + break; + } + }); + } + + return tx; +} diff --git a/js/src/api/format/output.spec.js b/js/src/api/format/output.spec.js new file mode 100644 index 0000000000..af1280f3bf --- /dev/null +++ b/js/src/api/format/output.spec.js @@ -0,0 +1,247 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { outBlock, outAccountInfo, outAddress, outDate, outNumber, outPeers, outReceipt, outTransaction } from './output'; +import { isAddress, isBigNumber, isInstanceOf } from '../../../test/types'; + +describe('api/format/output', () => { + const address = '0x63cf90d3f0410092fc0fca41846f596223979195'; + const checksum = '0x63Cf90D3f0410092FC0fca41846f596223979195'; + + describe('outAccountInfo', () => { + it('returns meta objects parsed', () => { + expect(outAccountInfo( + { '0x63cf90d3f0410092fc0fca41846f596223979195': { + name: 'name', uuid: 'uuid', meta: '{"name":"456"}' } + } + )).to.deep.equal({ + '0x63Cf90D3f0410092FC0fca41846f596223979195': { + name: 'name', uuid: 'uuid', meta: { name: '456' } + } + }); + }); + }); + + describe('outAddress', () => { + it('retuns the address as checksummed', () => { + expect(outAddress(address)).to.equal(checksum); + }); + + it('retuns the checksum as checksummed', () => { + expect(outAddress(checksum)).to.equal(checksum); + }); + }); + + describe('outBlock', () => { + ['author', 'miner'].forEach((input) => { + it(`formats ${input} address as address`, () => { + const block = {}; + block[input] = address; + const formatted = outBlock(block)[input]; + + expect(isAddress(formatted)).to.be.true; + expect(formatted).to.equal(checksum); + }); + }); + + ['difficulty', 'gasLimit', 'gasUsed', 'number', 'nonce', 'totalDifficulty'].forEach((input) => { + it(`formats ${input} number as hexnumber`, () => { + const block = {}; + block[input] = 0x123; + const formatted = outBlock(block)[input]; + + expect(isInstanceOf(formatted, BigNumber)).to.be.true; + expect(formatted.toString(16)).to.equal('123'); + }); + }); + + ['timestamp'].forEach((input) => { + it(`formats ${input} number as Date`, () => { + const block = {}; + block[input] = 0x57513668; + const formatted = outBlock(block)[input]; + + expect(isInstanceOf(formatted, Date)).to.be.true; + expect(formatted.getTime()).to.equal(1464940136000); + }); + }); + + it('ignores and passes through unknown keys', () => { + expect(outBlock({ someRandom: 'someRandom' })).to.deep.equal({ someRandom: 'someRandom' }); + }); + + it('formats a block with all the info converted', () => { + expect( + outBlock({ + author: address, + miner: address, + difficulty: '0x100', + gasLimit: '0x101', + gasUsed: '0x102', + number: '0x103', + nonce: '0x104', + totalDifficulty: '0x105', + timestamp: '0x57513668', + extraData: 'someExtraStuffInHere' + }) + ).to.deep.equal({ + author: checksum, + miner: checksum, + difficulty: new BigNumber('0x100'), + gasLimit: new BigNumber('0x101'), + gasUsed: new BigNumber('0x102'), + number: new BigNumber('0x103'), + nonce: new BigNumber('0x104'), + totalDifficulty: new BigNumber('0x105'), + timestamp: new Date('2016-06-03T07:48:56.000Z'), + extraData: 'someExtraStuffInHere' + }); + }); + }); + + describe('outDate', () => { + it('converts a second date in unix timestamp', () => { + expect(outDate(0x57513668)).to.deep.equal(new Date('2016-06-03T07:48:56.000Z')); + }); + }); + + describe('outNumber', () => { + it('returns a BigNumber equalling the value', () => { + const bn = outNumber('0x123456'); + + expect(isBigNumber(bn)).to.be.true; + expect(bn.eq(0x123456)).to.be.true; + }); + + it('assumes 0 when ivalid input', () => { + expect(outNumber().eq(0)).to.be.true; + }); + }); + + describe('outPeers', () => { + it('converts all internal numbers to BigNumbers', () => { + expect(outPeers({ active: 789, connected: '456', max: 0x7b })).to.deep.equal({ + active: new BigNumber(789), + connected: new BigNumber(456), + max: new BigNumber(123) + }); + }); + }); + + describe('outReceipt', () => { + ['contractAddress'].forEach((input) => { + it(`formats ${input} address as address`, () => { + const block = {}; + block[input] = address; + const formatted = outReceipt(block)[input]; + + expect(isAddress(formatted)).to.be.true; + expect(formatted).to.equal(checksum); + }); + }); + + ['blockNumber', 'cumulativeGasUsed', 'cumulativeGasUsed', 'gasUsed', 'transactionIndex'].forEach((input) => { + it(`formats ${input} number as hexnumber`, () => { + const block = {}; + block[input] = 0x123; + const formatted = outReceipt(block)[input]; + + expect(isInstanceOf(formatted, BigNumber)).to.be.true; + expect(formatted.toString(16)).to.equal('123'); + }); + }); + + it('ignores and passes through unknown keys', () => { + expect(outReceipt({ someRandom: 'someRandom' })).to.deep.equal({ someRandom: 'someRandom' }); + }); + + it('formats a receipt with all the info converted', () => { + expect( + outReceipt({ + contractAddress: address, + blockNumber: '0x100', + cumulativeGasUsed: '0x101', + gasUsed: '0x102', + transactionIndex: '0x103', + extraData: 'someExtraStuffInHere' + }) + ).to.deep.equal({ + contractAddress: checksum, + blockNumber: new BigNumber('0x100'), + cumulativeGasUsed: new BigNumber('0x101'), + gasUsed: new BigNumber('0x102'), + transactionIndex: new BigNumber('0x103'), + extraData: 'someExtraStuffInHere' + }); + }); + }); + + describe('outTransaction', () => { + ['from', 'to'].forEach((input) => { + it(`formats ${input} address as address`, () => { + const block = {}; + block[input] = address; + const formatted = outTransaction(block)[input]; + + expect(isAddress(formatted)).to.be.true; + expect(formatted).to.equal(checksum); + }); + }); + + ['blockNumber', 'gasPrice', 'gas', 'nonce', 'transactionIndex', 'value'].forEach((input) => { + it(`formats ${input} number as hexnumber`, () => { + const block = {}; + block[input] = 0x123; + const formatted = outTransaction(block)[input]; + + expect(isInstanceOf(formatted, BigNumber)).to.be.true; + expect(formatted.toString(16)).to.equal('123'); + }); + }); + + it('ignores and passes through unknown keys', () => { + expect(outTransaction({ someRandom: 'someRandom' })).to.deep.equal({ someRandom: 'someRandom' }); + }); + + it('formats a transaction with all the info converted', () => { + expect( + outTransaction({ + from: address, + to: address, + blockNumber: '0x100', + gasPrice: '0x101', + gas: '0x102', + nonce: '0x103', + transactionIndex: '0x104', + value: '0x105', + extraData: 'someExtraStuffInHere' + }) + ).to.deep.equal({ + from: checksum, + to: checksum, + blockNumber: new BigNumber('0x100'), + gasPrice: new BigNumber('0x101'), + gas: new BigNumber('0x102'), + nonce: new BigNumber('0x103'), + transactionIndex: new BigNumber('0x104'), + value: new BigNumber('0x105'), + extraData: 'someExtraStuffInHere' + }); + }); + }); +}); diff --git a/js/src/api/index.js b/js/src/api/index.js new file mode 100644 index 0000000000..b03419eacc --- /dev/null +++ b/js/src/api/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './api'; diff --git a/js/src/api/rpc/db/db.js b/js/src/api/rpc/db/db.js new file mode 100644 index 0000000000..9b20316006 --- /dev/null +++ b/js/src/api/rpc/db/db.js @@ -0,0 +1,43 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inHex } from '../../format/input'; + +export default class Db { + constructor (transport) { + this._transport = transport; + } + + getHex (dbName, keyName) { + return this._transport + .execute('db_getHex', dbName, keyName); + } + + getString (dbName, keyName) { + return this._transport + .execute('db_getString', dbName, keyName); + } + + putHex (dbName, keyName, hexData) { + return this._transport + .execute('db_putHex', dbName, keyName, inHex(hexData)); + } + + putString (dbName, keyName, stringData) { + return this._transport + .execute('db_putString', dbName, keyName, stringData); + } +} diff --git a/js/src/api/rpc/db/db.spec.js b/js/src/api/rpc/db/db.spec.js new file mode 100644 index 0000000000..4379b51c41 --- /dev/null +++ b/js/src/api/rpc/db/db.spec.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; + +import Http from '../../transport/http'; +import Db from './db'; + +const instance = new Db(new Http(TEST_HTTP_URL)); + +describe('api/rpc/Db', () => { + let scope; + + describe('putHex', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'db_putHex', reply: { result: [] } }]); + }); + + it('formats the inputs correctly', () => { + return instance.putHex('db', 'key', '1234').then(() => { + expect(scope.body.db_putHex.params).to.deep.equal(['db', 'key', '0x1234']); + }); + }); + }); +}); diff --git a/js/src/api/rpc/db/index.js b/js/src/api/rpc/db/index.js new file mode 100644 index 0000000000..cd7c2b0b84 --- /dev/null +++ b/js/src/api/rpc/db/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './db'; diff --git a/js/src/api/rpc/eth/eth.e2e.js b/js/src/api/rpc/eth/eth.e2e.js new file mode 100644 index 0000000000..973ea1c517 --- /dev/null +++ b/js/src/api/rpc/eth/eth.e2e.js @@ -0,0 +1,170 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; +import { isAddress } from '../../../../test/types'; + +describe('ethapi.eth', () => { + const ethapi = createHttpApi(); + const address = '0x63cf90d3f0410092fc0fca41846f596223979195'; + + let latestBlockNumber; + let latestBlockHash; + + describe('accounts', () => { + it('returns the available accounts', () => { + return ethapi.eth.accounts().then((accounts) => { + accounts.forEach((account) => { + expect(isAddress(account)).to.be.true; + }); + }); + }); + }); + + describe('blockNumber', () => { + it('returns the current blockNumber', () => { + return ethapi.eth.blockNumber().then((blockNumber) => { + latestBlockNumber = blockNumber; + expect(blockNumber.gt(0xabcde)).to.be.true; + }); + }); + }); + + describe('coinbase', () => { + it('returns the coinbase', () => { + return ethapi.eth.coinbase().then((coinbase) => { + expect(isAddress(coinbase)).to.be.true; + }); + }); + }); + + describe('gasPrice', () => { + it('returns the current gasPrice', () => { + return ethapi.eth.gasPrice().then((gasPrice) => { + expect(gasPrice.gt(0)).to.be.true; + }); + }); + }); + + describe('getBalance', () => { + it('returns the balance for latest block', () => { + return ethapi.eth.getBalance(address).then((balance) => { + expect(balance.gt(0)).to.be.true; + }); + }); + + it('returns the balance for a very early block', () => { + const atBlock = '0x65432'; + const atValue = '18e07120a6e164fee1b'; + + return ethapi.eth + .getBalance(address, atBlock) + .then((balance) => { + expect(balance.toString(16)).to.equal(atValue); + }) + .catch((error) => { + // Parity doesn't support pruned-before-block balance lookups + expect(error.message).to.match(/not supported/); + }); + }); + + it('returns the balance for a recent/out-of-pruning-range block', () => { + return ethapi.eth + .getBalance(address, latestBlockNumber.minus(1000)) + .then((balance) => { + expect(balance.gt(0)).to.be.true; + }); + }); + }); + + describe('getBlockByNumber', () => { + it('returns the latest block', () => { + return ethapi.eth.getBlockByNumber().then((block) => { + expect(block).to.be.ok; + }); + }); + + it('returns a block by blockNumber', () => { + return ethapi.eth.getBlockByNumber(latestBlockNumber).then((block) => { + latestBlockHash = block.hash; + expect(block).to.be.ok; + }); + }); + + it('returns a block by blockNumber (full)', () => { + return ethapi.eth.getBlockByNumber(latestBlockNumber, true).then((block) => { + expect(block).to.be.ok; + }); + }); + }); + + describe('getBlockByHash', () => { + it('returns the specified block', () => { + return ethapi.eth.getBlockByHash(latestBlockHash).then((block) => { + expect(block).to.be.ok; + expect(block.hash).to.equal(latestBlockHash); + }); + }); + + it('returns the specified block (full)', () => { + return ethapi.eth.getBlockByHash(latestBlockHash, true).then((block) => { + expect(block).to.be.ok; + expect(block.hash).to.equal(latestBlockHash); + }); + }); + }); + + describe('getBlockTransactionCountByHash', () => { + it('returns the transactions of the specified hash', () => { + return ethapi.eth.getBlockTransactionCountByHash(latestBlockHash).then((count) => { + expect(count).to.be.ok; + expect(count.gte(0)).to.be.true; + }); + }); + }); + + describe('getBlockTransactionCountByNumber', () => { + it('returns the transactions of latest', () => { + return ethapi.eth.getBlockTransactionCountByNumber().then((count) => { + expect(count).to.be.ok; + expect(count.gte(0)).to.be.true; + }); + }); + + it('returns the transactions of a specified number', () => { + return ethapi.eth.getBlockTransactionCountByNumber(latestBlockNumber).then((count) => { + expect(count).to.be.ok; + expect(count.gte(0)).to.be.true; + }); + }); + }); + + describe('getTransactionCount', () => { + it('returns the count for an address', () => { + return ethapi.eth.getTransactionCount(address).then((count) => { + expect(count).to.be.ok; + expect(count.gte(0x1000c2)).to.be.ok; + }); + }); + + it('returns the count for an address at specified blockNumber', () => { + return ethapi.eth.getTransactionCount(address, latestBlockNumber).then((count) => { + expect(count).to.be.ok; + expect(count.gte(0x1000c2)).to.be.ok; + }); + }); + }); +}); diff --git a/js/src/api/rpc/eth/eth.js b/js/src/api/rpc/eth/eth.js new file mode 100644 index 0000000000..60eb172a33 --- /dev/null +++ b/js/src/api/rpc/eth/eth.js @@ -0,0 +1,329 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inAddress, inBlockNumber, inData, inFilter, inHex, inNumber16, inOptions } from '../../format/input'; +import { outAddress, outBlock, outLog, outNumber, outReceipt, outTransaction } from '../../format/output'; + +export default class Eth { + constructor (transport) { + this._transport = transport; + } + + accounts () { + return this._transport + .execute('eth_accounts') + .then((accounts) => (accounts || []).map(outAddress)); + } + + blockNumber () { + return this._transport + .execute('eth_blockNumber') + .then(outNumber); + } + + call (options, blockNumber = 'latest') { + return this._transport + .execute('eth_call', inOptions(options), inBlockNumber(blockNumber)); + } + + checkRequest (requestId) { + return this._transport + .execute('eth_checkRequest', inNumber16(requestId)); + } + + coinbase () { + return this._transport + .execute('eth_coinbase') + .then(outAddress); + } + + compileLLL (code) { + return this._transport + .execute('eth_compileLLL', inData(code)); + } + + compileSerpent (code) { + return this._transport + .execute('eth_compileSerpent', inData(code)); + } + + compileSolidity (code) { + return this._transport + .execute('eth_compileSolidity', inData(code)); + } + + estimateGas (options) { + return this._transport + .execute('eth_estimateGas', inOptions(options)) + .then(outNumber); + } + + fetchQueuedTransactions () { + return this._transport + .execute('eth_fetchQueuedTransactions'); + } + + flush () { + return this._transport + .execute('eth_flush'); + } + + gasPrice () { + return this._transport + .execute('eth_gasPrice') + .then(outNumber); + } + + getBalance (address, blockNumber = 'latest') { + return this._transport + .execute('eth_getBalance', inAddress(address), inBlockNumber(blockNumber)) + .then(outNumber); + } + + getBlockByHash (hash, full = false) { + return this._transport + .execute('eth_getBlockByHash', inHex(hash), full) + .then(outBlock); + } + + getBlockByNumber (blockNumber = 'latest', full = false) { + return this._transport + .execute('eth_getBlockByNumber', inBlockNumber(blockNumber), full) + .then(outBlock); + } + + getBlockTransactionCountByHash (hash) { + return this._transport + .execute('eth_getBlockTransactionCountByHash', inHex(hash)) + .then(outNumber); + } + + getBlockTransactionCountByNumber (blockNumber = 'latest') { + return this._transport + .execute('eth_getBlockTransactionCountByNumber', inBlockNumber(blockNumber)) + .then(outNumber); + } + + getCode (address, blockNumber = 'latest') { + return this._transport + .execute('eth_getCode', inAddress(address), inBlockNumber(blockNumber)); + } + + getCompilers () { + return this._transport + .execute('eth_getCompilers'); + } + + getFilterChanges (filterId) { + return this._transport + .execute('eth_getFilterChanges', inNumber16(filterId)) + .then((logs) => logs.map(outLog)); + } + + getFilterChangesEx (filterId) { + return this._transport + .execute('eth_getFilterChangesEx', inNumber16(filterId)); + } + + getFilterLogs (filterId) { + return this._transport + .execute('eth_getFilterLogs', inNumber16(filterId)) + .then((logs) => logs.map(outLog)); + } + + getFilterLogsEx (filterId) { + return this._transport + .execute('eth_getFilterLogsEx', inNumber16(filterId)); + } + + getLogs (options) { + return this._transport + .execute('eth_getLogs', inFilter(options)); + } + + getLogsEx (options) { + return this._transport + .execute('eth_getLogsEx', inFilter(options)); + } + + getStorageAt (address, index = 0, blockNumber = 'latest') { + return this._transport + .execute('eth_getStorageAt', inAddress(address), inNumber16(index), inBlockNumber(blockNumber)); + } + + getTransactionByBlockHashAndIndex (hash, index = 0) { + return this._transport + .execute('eth_getTransactionByBlockHashAndIndex', inHex(hash), inNumber16(index)) + .then(outTransaction); + } + + getTransactionByBlockNumberAndIndex (blockNumber = 'latest', index = 0) { + return this._transport + .execute('eth_getTransactionByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index)) + .then(outTransaction); + } + + getTransactionByHash (hash) { + return this._transport + .execute('eth_getTransactionByHash', inHex(hash)) + .then(outTransaction); + } + + getTransactionCount (address, blockNumber = 'latest') { + return this._transport + .execute('eth_getTransactionCount', inAddress(address), inBlockNumber(blockNumber)) + .then(outNumber); + } + + getTransactionReceipt (txhash) { + return this._transport + .execute('eth_getTransactionReceipt', inHex(txhash)) + .then(outReceipt); + } + + getUncleByBlockHashAndIndex (hash, index = 0) { + return this._transport + .execute('eth_getUncleByBlockHashAndIndex', inHex(hash), inNumber16(index)); + } + + getUncleByBlockNumberAndIndex (blockNumber = 'latest', index = 0) { + return this._transport + .execute('eth_getUncleByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index)); + } + + getUncleCountByBlockHash (hash) { + return this._transport + .execute('eth_getUncleCountByBlockHash', inHex(hash)) + .then(outNumber); + } + + getUncleCountByBlockNumber (blockNumber = 'latest') { + return this._transport + .execute('eth_getUncleCountByBlockNumber', inBlockNumber(blockNumber)) + .then(outNumber); + } + + getWork () { + return this._transport + .execute('eth_getWork'); + } + + hashrate () { + return this._transport + .execute('eth_hashrate') + .then(outNumber); + } + + inspectTransaction () { + return this._transport + .execute('eth_inspectTransaction'); + } + + mining () { + return this._transport + .execute('eth_mining'); + } + + newBlockFilter () { + return this._transport + .execute('eth_newBlockFilter'); + } + + newFilter (options) { + return this._transport + .execute('eth_newFilter', inFilter(options)); + } + + newFilterEx (options) { + return this._transport + .execute('eth_newFilterEx', inFilter(options)); + } + + newPendingTransactionFilter () { + return this._transport + .execute('eth_newPendingTransactionFilter'); + } + + notePassword () { + return this._transport + .execute('eth_notePassword'); + } + + pendingTransactions () { + return this._transport + .execute('eth_pendingTransactions'); + } + + postTransaction (options) { + return this._transport + .execute('eth_postTransaction', inOptions(options)); + } + + protocolVersion () { + return this._transport + .execute('eth_protocolVersion'); + } + + register () { + return this._transport + .execute('eth_register'); + } + + sendRawTransaction (data) { + return this._transport + .execute('eth_sendRawTransaction', inData(data)); + } + + sendTransaction (options) { + return this._transport + .execute('eth_sendTransaction', inOptions(options)); + } + + sign () { + return this._transport + .execute('eth_sign'); + } + + signTransaction () { + return this._transport + .execute('eth_signTransaction'); + } + + submitHashrate (hashrate, clientId) { + return this._transport + .execute('eth_submitHashrate', inNumber16(hashrate), clientId); + } + + submitWork (nonce, powHash, mixDigest) { + return this._transport + .execute('eth_submitWork', inNumber16(nonce), powHash, mixDigest); + } + + syncing () { + return this._transport + .execute('eth_syncing'); + } + + uninstallFilter (filterId) { + return this._transport + .execute('eth_uninstallFilter', inHex(filterId)); + } + + unregister () { + return this._transport + .execute('eth_unregister'); + } +} diff --git a/js/src/api/rpc/eth/eth.spec.js b/js/src/api/rpc/eth/eth.spec.js new file mode 100644 index 0000000000..65377db509 --- /dev/null +++ b/js/src/api/rpc/eth/eth.spec.js @@ -0,0 +1,474 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; +import { isBigNumber } from '../../../../test/types'; + +import Http from '../../transport/http'; +import Eth from './eth'; + +const instance = new Eth(new Http(TEST_HTTP_URL)); + +describe('rpc/Eth', () => { + const address = '0x63Cf90D3f0410092FC0fca41846f596223979195'; + let scope; + + describe('accounts', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_accounts', reply: { result: [address.toLowerCase()] } }]); + }); + + it('returns a list of accounts, formatted', () => { + return instance.accounts().then((accounts) => { + expect(accounts).to.deep.equal([address]); + }); + }); + }); + + describe('blockNumber', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_blockNumber', reply: { result: '0x123456' } }]); + }); + + it('returns the current blockNumber, formatted', () => { + return instance.blockNumber().then((blockNumber) => { + expect(isBigNumber(blockNumber)).to.be.true; + expect(blockNumber.toString(16)).to.equal('123456'); + }); + }); + }); + + describe('call', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_call', reply: { result: [] } }]); + }); + + it('formats the input options & blockNumber', () => { + return instance.call({ data: '12345678' }, 'earliest').then(() => { + expect(scope.body.eth_call.params).to.deep.equal([{ data: '0x12345678' }, 'earliest']); + }); + }); + + it('provides a latest blockNumber when not specified', () => { + return instance.call({ data: '12345678' }).then(() => { + expect(scope.body.eth_call.params).to.deep.equal([{ data: '0x12345678' }, 'latest']); + }); + }); + }); + + describe('coinbase', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_coinbase', reply: { result: address.toLowerCase() } }]); + }); + + it('returns the coinbase, formatted', () => { + return instance.coinbase().then((account) => { + expect(account).to.deep.equal(address); + }); + }); + }); + + ['LLL', 'Serpent', 'Solidity'].forEach((type) => { + const method = `compile${type}`; + + describe(method, () => { + beforeEach(() => { + scope = mockHttp([{ method: `eth_${method}`, reply: { result: '0x123' } }]); + }); + + it('formats the input as data, returns the output', () => { + return instance[method]('0xabcdef').then((result) => { + expect(scope.body[`eth_${method}`].params).to.deep.equal(['0xabcdef']); + expect(result).to.equal('0x123'); + }); + }); + }); + }); + + describe('estimateGas', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_estimateGas', reply: { result: '0x123' } }]); + }); + + it('converts the options correctly', () => { + return instance.estimateGas({ gas: 21000 }).then(() => { + expect(scope.body.eth_estimateGas.params).to.deep.equal([{ gas: '0x5208' }]); + }); + }); + + it('returns the gas used', () => { + return instance.estimateGas({}).then((gas) => { + expect(isBigNumber(gas)).to.be.true; + expect(gas.toString(16)).to.deep.equal('123'); + }); + }); + }); + + describe('gasPrice', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_gasPrice', reply: { result: '0x123' } }]); + }); + + it('returns the fomratted price', () => { + return instance.gasPrice().then((price) => { + expect(isBigNumber(price)).to.be.true; + expect(price.toString(16)).to.deep.equal('123'); + }); + }); + }); + + describe('getBalance', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getBalance', reply: { result: '0x123' } }]); + }); + + it('passes in the address (default blockNumber)', () => { + return instance.getBalance(address).then(() => { + expect(scope.body.eth_getBalance.params).to.deep.equal([address.toLowerCase(), 'latest']); + }); + }); + + it('passes in the address & blockNumber', () => { + return instance.getBalance(address, 0x456).then(() => { + expect(scope.body.eth_getBalance.params).to.deep.equal([address.toLowerCase(), '0x456']); + }); + }); + + it('returns the balance', () => { + return instance.getBalance(address, 0x123).then((balance) => { + expect(isBigNumber(balance)).to.be.true; + expect(balance.toString(16)).to.deep.equal('123'); + }); + }); + }); + + describe('getBlockByHash', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getBlockByHash', reply: { result: { miner: address.toLowerCase() } } }]); + }); + + it('formats the input hash as a hash, default full', () => { + return instance.getBlockByHash('1234').then(() => { + expect(scope.body.eth_getBlockByHash.params).to.deep.equal(['0x1234', false]); + }); + }); + + it('formats the input hash as a hash, full true', () => { + return instance.getBlockByHash('1234', true).then(() => { + expect(scope.body.eth_getBlockByHash.params).to.deep.equal(['0x1234', true]); + }); + }); + + it('formats the output into block', () => { + return instance.getBlockByHash('1234').then((block) => { + expect(block.miner).to.equal(address); + }); + }); + }); + + describe('getBlockByNumber', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getBlockByNumber', reply: { result: { miner: address.toLowerCase() } } }]); + }); + + it('assumes blockNumber latest & full false', () => { + return instance.getBlockByNumber().then(() => { + expect(scope.body.eth_getBlockByNumber.params).to.deep.equal(['latest', false]); + }); + }); + + it('uses input blockNumber & full false', () => { + return instance.getBlockByNumber('0x1234').then(() => { + expect(scope.body.eth_getBlockByNumber.params).to.deep.equal(['0x1234', false]); + }); + }); + + it('formats the input blockNumber, full true', () => { + return instance.getBlockByNumber(0x1234, true).then(() => { + expect(scope.body.eth_getBlockByNumber.params).to.deep.equal(['0x1234', true]); + }); + }); + + it('formats the output into block', () => { + return instance.getBlockByNumber(0x1234).then((block) => { + expect(block.miner).to.equal(address); + }); + }); + }); + + describe('getBlockTransactionCountByHash', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getBlockTransactionCountByHash', reply: { result: '0x123' } }]); + }); + + it('formats input hash properly', () => { + return instance.getBlockTransactionCountByHash('abcdef').then(() => { + expect(scope.body.eth_getBlockTransactionCountByHash.params).to.deep.equal(['0xabcdef']); + }); + }); + + it('formats the output number', () => { + return instance.getBlockTransactionCountByHash('0x1234').then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.toString(16)).to.equal('123'); + }); + }); + }); + + describe('getBlockTransactionCountByNumber', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getBlockTransactionCountByNumber', reply: { result: '0x123' } }]); + }); + + it('specified blockNumber latest when none specified', () => { + return instance.getBlockTransactionCountByNumber().then(() => { + expect(scope.body.eth_getBlockTransactionCountByNumber.params).to.deep.equal(['latest']); + }); + }); + + it('formats input blockNumber properly', () => { + return instance.getBlockTransactionCountByNumber(0xabcdef).then(() => { + expect(scope.body.eth_getBlockTransactionCountByNumber.params).to.deep.equal(['0xabcdef']); + }); + }); + + it('formats the output number', () => { + return instance.getBlockTransactionCountByNumber('0x1234').then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.toString(16)).to.equal('123'); + }); + }); + }); + + describe('getCode', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getCode', reply: { result: '0x1234567890' } }]); + }); + + it('passes in the address (default blockNumber)', () => { + return instance.getCode(address).then(() => { + expect(scope.body.eth_getCode.params).to.deep.equal([address.toLowerCase(), 'latest']); + }); + }); + + it('passes in the address & blockNumber', () => { + return instance.getCode(address, 0x456).then(() => { + expect(scope.body.eth_getCode.params).to.deep.equal([address.toLowerCase(), '0x456']); + }); + }); + + it('returns the code', () => { + return instance.getCode(address, 0x123).then((code) => { + expect(code).to.equal('0x1234567890'); + }); + }); + }); + + describe('getStorageAt', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getStorageAt', reply: { result: '0x1234567890' } }]); + }); + + it('passes in the address (default index& blockNumber)', () => { + return instance.getStorageAt(address).then(() => { + expect(scope.body.eth_getStorageAt.params).to.deep.equal([address.toLowerCase(), '0x0', 'latest']); + }); + }); + + it('passes in the address, index & blockNumber', () => { + return instance.getStorageAt(address, 15, 0x456).then(() => { + expect(scope.body.eth_getStorageAt.params).to.deep.equal([address.toLowerCase(), '0xf', '0x456']); + }); + }); + + it('returns the storage', () => { + return instance.getStorageAt(address, 0x123).then((storage) => { + expect(storage).to.equal('0x1234567890'); + }); + }); + }); + + describe('getTransactionByBlockHashAndIndex', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getTransactionByBlockHashAndIndex', reply: { result: { to: address.toLowerCase() } } }]); + }); + + it('passes in the hash (default index)', () => { + return instance.getTransactionByBlockHashAndIndex('12345').then(() => { + expect(scope.body.eth_getTransactionByBlockHashAndIndex.params).to.deep.equal(['0x12345', '0x0']); + }); + }); + + it('passes in the hash & specified index', () => { + return instance.getTransactionByBlockHashAndIndex('6789', 0x456).then(() => { + expect(scope.body.eth_getTransactionByBlockHashAndIndex.params).to.deep.equal(['0x6789', '0x456']); + }); + }); + + it('returns the formatted transaction', () => { + return instance.getTransactionByBlockHashAndIndex('6789', 0x123).then((tx) => { + expect(tx).to.deep.equal({ to: address }); + }); + }); + }); + + describe('getTransactionByBlockNumberAndIndex', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getTransactionByBlockNumberAndIndex', reply: { result: { to: address.toLowerCase() } } }]); + }); + + it('passes in the default parameters', () => { + return instance.getTransactionByBlockNumberAndIndex().then(() => { + expect(scope.body.eth_getTransactionByBlockNumberAndIndex.params).to.deep.equal(['latest', '0x0']); + }); + }); + + it('passes in the blockNumber & specified index', () => { + return instance.getTransactionByBlockNumberAndIndex('0x6789', 0x456).then(() => { + expect(scope.body.eth_getTransactionByBlockNumberAndIndex.params).to.deep.equal(['0x6789', '0x456']); + }); + }); + + it('returns the formatted transaction', () => { + return instance.getTransactionByBlockNumberAndIndex('0x6789', 0x123).then((tx) => { + expect(tx).to.deep.equal({ to: address }); + }); + }); + }); + + describe('getTransactionByHash', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getTransactionByHash', reply: { result: { to: address.toLowerCase() } } }]); + }); + + it('passes in the hash', () => { + return instance.getTransactionByHash('12345').then(() => { + expect(scope.body.eth_getTransactionByHash.params).to.deep.equal(['0x12345']); + }); + }); + + it('returns the formatted transaction', () => { + return instance.getTransactionByHash('6789').then((tx) => { + expect(tx).to.deep.equal({ to: address }); + }); + }); + }); + + describe('getTransactionCount', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getTransactionCount', reply: { result: '0x123' } }]); + }); + + it('passes in the address (default blockNumber)', () => { + return instance.getTransactionCount(address).then(() => { + expect(scope.body.eth_getTransactionCount.params).to.deep.equal([address.toLowerCase(), 'latest']); + }); + }); + + it('passes in the address & blockNumber', () => { + return instance.getTransactionCount(address, 0x456).then(() => { + expect(scope.body.eth_getTransactionCount.params).to.deep.equal([address.toLowerCase(), '0x456']); + }); + }); + + it('returns the count, formatted', () => { + return instance.getTransactionCount(address, 0x123).then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.toString(16)).to.equal('123'); + }); + }); + }); + + describe('getUncleByBlockHashAndIndex', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getUncleByBlockHashAndIndex', reply: { result: [] } }]); + }); + + it('passes in the hash (default index)', () => { + return instance.getUncleByBlockHashAndIndex('12345').then(() => { + expect(scope.body.eth_getUncleByBlockHashAndIndex.params).to.deep.equal(['0x12345', '0x0']); + }); + }); + + it('passes in the hash & specified index', () => { + return instance.getUncleByBlockHashAndIndex('6789', 0x456).then(() => { + expect(scope.body.eth_getUncleByBlockHashAndIndex.params).to.deep.equal(['0x6789', '0x456']); + }); + }); + }); + + describe('getUncleByBlockNumberAndIndex', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getUncleByBlockNumberAndIndex', reply: { result: [] } }]); + }); + + it('passes in the default parameters', () => { + return instance.getUncleByBlockNumberAndIndex().then(() => { + expect(scope.body.eth_getUncleByBlockNumberAndIndex.params).to.deep.equal(['latest', '0x0']); + }); + }); + + it('passes in the blockNumber & specified index', () => { + return instance.getUncleByBlockNumberAndIndex('0x6789', 0x456).then(() => { + expect(scope.body.eth_getUncleByBlockNumberAndIndex.params).to.deep.equal(['0x6789', '0x456']); + }); + }); + }); + + describe('getUncleCountByBlockHash', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getUncleCountByBlockHash', reply: { result: '0x123' } }]); + }); + + it('passes in the hash', () => { + return instance.getUncleCountByBlockHash('12345').then(() => { + expect(scope.body.eth_getUncleCountByBlockHash.params).to.deep.equal(['0x12345']); + }); + }); + + it('formats the output number', () => { + return instance.getUncleCountByBlockHash('0x1234').then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.toString(16)).to.equal('123'); + }); + }); + }); + + describe('getUncleCountByBlockNumber', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'eth_getUncleCountByBlockNumber', reply: { result: '0x123' } }]); + }); + + it('passes in the default parameters', () => { + return instance.getUncleCountByBlockNumber().then(() => { + expect(scope.body.eth_getUncleCountByBlockNumber.params).to.deep.equal(['latest']); + }); + }); + + it('passes in the blockNumber', () => { + return instance.getUncleCountByBlockNumber('0x6789').then(() => { + expect(scope.body.eth_getUncleCountByBlockNumber.params).to.deep.equal(['0x6789']); + }); + }); + + it('formats the output number', () => { + return instance.getUncleCountByBlockNumber('0x1234').then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.toString(16)).to.equal('123'); + }); + }); + }); +}); diff --git a/js/src/api/rpc/eth/index.js b/js/src/api/rpc/eth/index.js new file mode 100644 index 0000000000..0d0e8c5570 --- /dev/null +++ b/js/src/api/rpc/eth/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './eth'; diff --git a/js/src/api/rpc/ethcore/ethcore.e2e.js b/js/src/api/rpc/ethcore/ethcore.e2e.js new file mode 100644 index 0000000000..ee4056b50f --- /dev/null +++ b/js/src/api/rpc/ethcore/ethcore.e2e.js @@ -0,0 +1,61 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; + +describe('ethapi.ethcore', () => { + const ethapi = createHttpApi(); + + describe('gasFloorTarget', () => { + it('returns and translates the target', () => { + return ethapi.ethcore.gasFloorTarget().then((value) => { + expect(value.gt(0)).to.be.true; + }); + }); + }); + + describe('netChain', () => { + it('returns and the chain', () => { + return ethapi.ethcore.netChain().then((value) => { + expect(value).to.equal('morden'); + }); + }); + }); + + describe('netPort', () => { + it('returns and translates the port', () => { + return ethapi.ethcore.netPort().then((value) => { + expect(value.gt(0)).to.be.true; + }); + }); + }); + + describe('transactionsLimit', () => { + it('returns and translates the limit', () => { + return ethapi.ethcore.transactionsLimit().then((value) => { + expect(value.gt(0)).to.be.true; + }); + }); + }); + + describe('rpcSettings', () => { + it('returns and translates the settings', () => { + return ethapi.ethcore.rpcSettings().then((value) => { + expect(value).to.be.ok; + }); + }); + }); +}); diff --git a/js/src/api/rpc/ethcore/ethcore.js b/js/src/api/rpc/ethcore/ethcore.js new file mode 100644 index 0000000000..1ccc95bbad --- /dev/null +++ b/js/src/api/rpc/ethcore/ethcore.js @@ -0,0 +1,168 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inAddress, inData, inNumber16 } from '../../format/input'; +import { outAddress, outNumber, outPeers } from '../../format/output'; + +export default class Ethcore { + constructor (transport) { + this._transport = transport; + } + + acceptNonReservedPeers () { + return this._transport + .execute('ethcore_acceptNonReservedPeers'); + } + + addReservedPeer (encode) { + return this._transport + .execute('ethcore_addReservedPeer', encode); + } + + defaultExtraData () { + return this._transport + .execute('ethcore_defaultExtraData'); + } + + devLogs () { + return this._transport + .execute('ethcore_devLogs'); + } + + devLogsLevels () { + return this._transport + .execute('ethcore_devLogsLevels'); + } + + dropNonReservedPeers () { + return this._transport + .execute('ethcore_dropNonReservedPeers'); + } + + extraData () { + return this._transport + .execute('ethcore_extraData'); + } + + gasFloorTarget () { + return this._transport + .execute('ethcore_gasFloorTarget') + .then(outNumber); + } + + generateSecretPhrase () { + return this._transport + .execute('ethcore_generateSecretPhrase'); + } + + hashContent (url) { + return this._transport + .execute('ethcore_hashContent', url); + } + + minGasPrice () { + return this._transport + .execute('ethcore_minGasPrice') + .then(outNumber); + } + + netChain () { + return this._transport + .execute('ethcore_netChain'); + } + + netPeers () { + return this._transport + .execute('ethcore_netPeers') + .then(outPeers); + } + + netMaxPeers () { + return this._transport + .execute('ethcore_netMaxPeers') + .then(outNumber); + } + + netPort () { + return this._transport + .execute('ethcore_netPort') + .then(outNumber); + } + + nodeName () { + return this._transport + .execute('ethcore_nodeName'); + } + + phraseToAddress (phrase) { + return this._transport + .execute('ethcore_phraseToAddress', phrase) + .then(outAddress); + } + + registryAddress () { + return this._transport + .execute('ethcore_registryAddress') + .then(outAddress); + } + + removeReservedPeer (encode) { + return this._transport + .execute('ethcore_removeReservedPeer', encode); + } + + rpcSettings () { + return this._transport + .execute('ethcore_rpcSettings'); + } + + setAuthor (address) { + return this._transport + .execute('ethcore_setAuthor', inAddress(address)); + } + + setExtraData (data) { + return this._transport + .execute('ethcore_setExtraData', inData(data)); + } + + setGasFloorTarget (quantity) { + return this._transport + .execute('ethcore_setGasFloorTarget', inNumber16(quantity)); + } + + setMinGasPrice (quantity) { + return this._transport + .execute('ethcore_setMinGasPrice', inNumber16(quantity)); + } + + setTransactionsLimit (quantity) { + return this._transport + .execute('ethcore_setTransactionsLimit', inNumber16(quantity)); + } + + transactionsLimit () { + return this._transport + .execute('ethcore_transactionsLimit') + .then(outNumber); + } + + unsignedTransactionsCount () { + return this._transport + .execute('ethcore_unsignedTransactionsCount') + .then(outNumber); + } +} diff --git a/js/src/api/rpc/ethcore/ethcore.spec.js b/js/src/api/rpc/ethcore/ethcore.spec.js new file mode 100644 index 0000000000..fd34550a71 --- /dev/null +++ b/js/src/api/rpc/ethcore/ethcore.spec.js @@ -0,0 +1,92 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; +import { isBigNumber } from '../../../../test/types'; + +import Http from '../../transport/http'; +import Ethcore from './ethcore'; + +const instance = new Ethcore(new Http(TEST_HTTP_URL)); + +describe('api/rpc/Ethcore', () => { + describe('gasFloorTarget', () => { + it('returns the gasfloor, formatted', () => { + mockHttp([{ method: 'ethcore_gasFloorTarget', reply: { result: '0x123456' } }]); + + return instance.gasFloorTarget().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(0x123456)).to.be.true; + }); + }); + }); + + describe('minGasPrice', () => { + it('returns the min gasprice, formatted', () => { + mockHttp([{ method: 'ethcore_minGasPrice', reply: { result: '0x123456' } }]); + + return instance.minGasPrice().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(0x123456)).to.be.true; + }); + }); + }); + + describe('netMaxPeers', () => { + it('returns the max peers, formatted', () => { + mockHttp([{ method: 'ethcore_netMaxPeers', reply: { result: 25 } }]); + + return instance.netMaxPeers().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(25)).to.be.true; + }); + }); + }); + + describe('newPeers', () => { + it('returns the peer structure, formatted', () => { + mockHttp([{ method: 'ethcore_netPeers', reply: { result: { active: 123, connected: 456, max: 789 } } }]); + + return instance.netPeers().then((peers) => { + expect(peers.active.eq(123)).to.be.true; + expect(peers.connected.eq(456)).to.be.true; + expect(peers.max.eq(789)).to.be.true; + }); + }); + }); + + describe('netPort', () => { + it('returns the connected port, formatted', () => { + mockHttp([{ method: 'ethcore_netPort', reply: { result: 33030 } }]); + + return instance.netPort().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(33030)).to.be.true; + }); + }); + }); + + describe('transactionsLimit', () => { + it('returns the tx limit, formatted', () => { + mockHttp([{ method: 'ethcore_transactionsLimit', reply: { result: 1024 } }]); + + return instance.transactionsLimit().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(1024)).to.be.true; + }); + }); + }); +}); diff --git a/js/src/api/rpc/ethcore/index.js b/js/src/api/rpc/ethcore/index.js new file mode 100644 index 0000000000..2372a21715 --- /dev/null +++ b/js/src/api/rpc/ethcore/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './ethcore'; diff --git a/js/src/api/rpc/index.js b/js/src/api/rpc/index.js new file mode 100644 index 0000000000..e7e94b9edb --- /dev/null +++ b/js/src/api/rpc/index.js @@ -0,0 +1,24 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export Db from './db'; +export Eth from './eth'; +export Ethcore from './ethcore'; +export Net from './net'; +export Personal from './personal'; +export Shh from './shh'; +export Trace from './trace'; +export Web3 from './web3'; diff --git a/js/src/api/rpc/net/index.js b/js/src/api/rpc/net/index.js new file mode 100644 index 0000000000..0739111e6a --- /dev/null +++ b/js/src/api/rpc/net/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './net'; diff --git a/js/src/api/rpc/net/net.e2e.js b/js/src/api/rpc/net/net.e2e.js new file mode 100644 index 0000000000..51d84f7a10 --- /dev/null +++ b/js/src/api/rpc/net/net.e2e.js @@ -0,0 +1,46 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; +import { isBoolean } from '../../../../test/types'; + +describe('ethapi.net', () => { + const ethapi = createHttpApi(); + + describe('listening', () => { + it('returns the listening status', () => { + return ethapi.net.listening().then((status) => { + expect(isBoolean(status)).to.be.true; + }); + }); + }); + + describe('peerCount', () => { + it('returns the peer count', () => { + return ethapi.net.peerCount().then((count) => { + expect(count.gte(0)).to.be.true; + }); + }); + }); + + describe('version', () => { + it('returns the version', () => { + return ethapi.net.version().then((version) => { + expect(version).to.be.ok; + }); + }); + }); +}); diff --git a/js/src/api/rpc/net/net.js b/js/src/api/rpc/net/net.js new file mode 100644 index 0000000000..96e99dc51f --- /dev/null +++ b/js/src/api/rpc/net/net.js @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { outNumber } from '../../format/output'; + +export default class Net { + constructor (transport) { + this._transport = transport; + } + + listening () { + return this._transport + .execute('net_listening'); + } + + peerCount () { + return this._transport + .execute('net_peerCount') + .then(outNumber); + } + + version () { + return this._transport + .execute('net_version'); + } +} diff --git a/js/src/api/rpc/net/net.spec.js b/js/src/api/rpc/net/net.spec.js new file mode 100644 index 0000000000..55029a29ef --- /dev/null +++ b/js/src/api/rpc/net/net.spec.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; +import { isBigNumber } from '../../../../test/types'; + +import Http from '../../transport/http'; +import Net from './net'; + +const instance = new Net(new Http(TEST_HTTP_URL)); + +describe('api/rpc/Net', () => { + describe('peerCount', () => { + it('returns the connected peers, formatted', () => { + mockHttp([{ method: 'net_peerCount', reply: { result: '0x123456' } }]); + + return instance.peerCount().then((count) => { + expect(isBigNumber(count)).to.be.true; + expect(count.eq(0x123456)).to.be.true; + }); + }); + }); +}); diff --git a/js/src/api/rpc/personal/index.js b/js/src/api/rpc/personal/index.js new file mode 100644 index 0000000000..a9ed260f25 --- /dev/null +++ b/js/src/api/rpc/personal/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './personal'; diff --git a/js/src/api/rpc/personal/personal.e2e.js b/js/src/api/rpc/personal/personal.e2e.js new file mode 100644 index 0000000000..f7fe42c54b --- /dev/null +++ b/js/src/api/rpc/personal/personal.e2e.js @@ -0,0 +1,53 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; +import { isAddress, isBoolean } from '../../../../test/types'; + +describe.skip('ethapi.personal', () => { + const ethapi = createHttpApi(); + const password = 'P@55word'; + let address; + + describe('newAccount', () => { + it('creates a new account', () => { + return ethapi.personal.newAccount(password).then((_address) => { + address = _address; + expect(isAddress(address)).to.be.ok; + }); + }); + }); + + describe('listAccounts', () => { + it('has the newly-created account', () => { + return ethapi.personal.listAccounts(password).then((accounts) => { + expect(accounts.filter((_address) => _address === address)).to.deep.equal([address]); + accounts.forEach((account) => { + expect(isAddress(account)).to.be.true; + }); + }); + }); + }); + + describe('unlockAccount', () => { + it('unlocks the newly-created account', () => { + return ethapi.personal.unlockAccount(address, password).then((result) => { + expect(isBoolean(result)).to.be.true; + expect(result).to.be.true; + }); + }); + }); +}); diff --git a/js/src/api/rpc/personal/personal.js b/js/src/api/rpc/personal/personal.js new file mode 100644 index 0000000000..2609bc5095 --- /dev/null +++ b/js/src/api/rpc/personal/personal.js @@ -0,0 +1,112 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inAddress, inNumber10, inNumber16, inOptions } from '../../format/input'; +import { outAccountInfo, outAddress, outSignerRequest } from '../../format/output'; + +export default class Personal { + constructor (transport) { + this._transport = transport; + } + + accountsInfo () { + return this._transport + .execute('personal_accountsInfo') + .then(outAccountInfo); + } + + confirmRequest (requestId, options, password) { + return this._transport + .execute('personal_confirmRequest', inNumber16(requestId), options, password); + } + + generateAuthorizationToken () { + return this._transport + .execute('personal_generateAuthorizationToken'); + } + + listAccounts () { + return this._transport + .execute('personal_listAccounts') + .then((accounts) => (accounts || []).map(outAddress)); + } + + listGethAccounts () { + return this._transport + .execute('personal_listGethAccounts') + .then((accounts) => (accounts || []).map(outAddress)); + } + + importGethAccounts (accounts) { + return this._transport + .execute('personal_importGethAccounts', (accounts || []).map(inAddress)) + .then((accounts) => (accounts || []).map(outAddress)); + } + + newAccount (password) { + return this._transport + .execute('personal_newAccount', password) + .then(outAddress); + } + + newAccountFromPhrase (phrase, password) { + return this._transport + .execute('personal_newAccountFromPhrase', phrase, password) + .then(outAddress); + } + + newAccountFromWallet (json, password) { + return this._transport + .execute('personal_newAccountFromWallet', json, password) + .then(outAddress); + } + + rejectRequest (requestId) { + return this._transport + .execute('personal_rejectRequest', inNumber16(requestId)); + } + + requestsToConfirm () { + return this._transport + .execute('personal_requestsToConfirm') + .then((requests) => (requests || []).map(outSignerRequest)); + } + + setAccountName (address, name) { + return this._transport + .execute('personal_setAccountName', inAddress(address), name); + } + + setAccountMeta (address, meta) { + return this._transport + .execute('personal_setAccountMeta', inAddress(address), JSON.stringify(meta)); + } + + signAndSendTransaction (options, password) { + return this._transport + .execute('personal_signAndSendTransaction', inOptions(options), password); + } + + signerEnabled () { + return this._transport + .execute('personal_signerEnabled'); + } + + unlockAccount (account, password, duration = 1) { + return this._transport + .execute('personal_unlockAccount', inAddress(account), password, inNumber10(duration)); + } +} diff --git a/js/src/api/rpc/personal/personal.spec.js b/js/src/api/rpc/personal/personal.spec.js new file mode 100644 index 0000000000..70734c7ee3 --- /dev/null +++ b/js/src/api/rpc/personal/personal.spec.js @@ -0,0 +1,97 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; + +import Http from '../../transport/http'; +import Personal from './personal'; + +const instance = new Personal(new Http(TEST_HTTP_URL)); + +describe('rpc/Personal', () => { + const account = '0x63cf90d3f0410092fc0fca41846f596223979195'; + const checksum = '0x63Cf90D3f0410092FC0fca41846f596223979195'; + let scope; + + describe('accountsInfo', () => { + it('retrieves the available account info', () => { + scope = mockHttp([{ method: 'personal_accountsInfo', reply: { + result: { + '0x63cf90d3f0410092fc0fca41846f596223979195': { + name: 'name', uuid: 'uuid', meta: '{"data":"data"}' + } + } + } }]); + + return instance.accountsInfo().then((result) => { + expect(result).to.deep.equal({ + '0x63Cf90D3f0410092FC0fca41846f596223979195': { + name: 'name', uuid: 'uuid', meta: { + data: 'data' + } + } + }); + }); + }); + }); + + describe('listAccounts', () => { + it('retrieves a list of available accounts', () => { + scope = mockHttp([{ method: 'personal_listAccounts', reply: { result: [account] } }]); + + return instance.listAccounts().then((result) => { + expect(result).to.deep.equal([checksum]); + }); + }); + + it('returns an empty list when none available', () => { + scope = mockHttp([{ method: 'personal_listAccounts', reply: { result: null } }]); + + return instance.listAccounts().then((result) => { + expect(result).to.deep.equal([]); + }); + }); + }); + + describe('newAccount', () => { + it('passes the password, returning the address', () => { + scope = mockHttp([{ method: 'personal_newAccount', reply: { result: account } }]); + + return instance.newAccount('password').then((result) => { + expect(scope.body.personal_newAccount.params).to.deep.equal(['password']); + expect(result).to.equal(checksum); + }); + }); + }); + + describe('unlockAccount', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'personal_unlockAccount', reply: { result: [] } }]); + }); + + it('passes account, password & duration', () => { + return instance.unlockAccount(account, 'password', 0xf).then(() => { + expect(scope.body.personal_unlockAccount.params).to.deep.equal([account, 'password', 15]); + }); + }); + + it('provides a default duration when not specified', () => { + return instance.unlockAccount(account, 'password').then(() => { + expect(scope.body.personal_unlockAccount.params).to.deep.equal([account, 'password', 1]); + }); + }); + }); +}); diff --git a/js/src/api/rpc/shh/index.js b/js/src/api/rpc/shh/index.js new file mode 100644 index 0000000000..7b323aeed6 --- /dev/null +++ b/js/src/api/rpc/shh/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './shh'; diff --git a/js/src/api/rpc/shh/shh.js b/js/src/api/rpc/shh/shh.js new file mode 100644 index 0000000000..ad545cac59 --- /dev/null +++ b/js/src/api/rpc/shh/shh.js @@ -0,0 +1,71 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class Personal { + constructor (transport) { + this._transport = transport; + } + + addToGroup (identity) { + return this._transport + .execute('shh_addToGroup', identity); + } + + getFilterChanges (filterId) { + return this._transport + .execute('shh_getFilterChanges', filterId); + } + + getMessages (filterId) { + return this._transport + .execute('shh_getMessages', filterId); + } + + hasIdentity (identity) { + return this._transport + .execute('shh_hasIdentity', identity); + } + + newFilter (options) { + return this._transport + .execute('shh_newFilter', options); + } + + newGroup () { + return this._transport + .execute('shh_newGroup'); + } + + newIdentity () { + return this._transport + .execute('shh_newIdentity'); + } + + post (options) { + return this._transport + .execute('shh_post', options); + } + + uninstallFilter (filterId) { + return this._transport + .execute('shh_uninstallFilter', filterId); + } + + version () { + return this._transport + .execute('shh_version'); + } +} diff --git a/js/src/api/rpc/trace/index.js b/js/src/api/rpc/trace/index.js new file mode 100644 index 0000000000..a140877093 --- /dev/null +++ b/js/src/api/rpc/trace/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './trace'; diff --git a/js/src/api/rpc/trace/trace.e2e.js b/js/src/api/rpc/trace/trace.e2e.js new file mode 100644 index 0000000000..1a0720927a --- /dev/null +++ b/js/src/api/rpc/trace/trace.e2e.js @@ -0,0 +1,35 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; + +describe('ethapi.trace', () => { + const ethapi = createHttpApi(); + + describe('block', () => { + it('returns the latest block', () => { + return ethapi.trace.block().then((block) => { + expect(block).to.be.ok; + }); + }); + + it('returns a specified block', () => { + return ethapi.trace.block('0x65432').then((block) => { + expect(block).to.be.ok; + }); + }); + }); +}); diff --git a/js/src/api/rpc/trace/trace.js b/js/src/api/rpc/trace/trace.js new file mode 100644 index 0000000000..4cf8fc8e5e --- /dev/null +++ b/js/src/api/rpc/trace/trace.js @@ -0,0 +1,43 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inBlockNumber, inHex, inNumber16 } from '../../format/input'; + +export default class Trace { + constructor (transport) { + this._transport = transport; + } + + filter (filterObj) { + return this._transport + .execute('trace_filter', filterObj); + } + + get (txHash, position) { + return this._transport + .execute('trace_get', inHex(txHash), inNumber16(position)); + } + + transaction (txHash) { + return this._transport + .execute('trace_transaction', inHex(txHash)); + } + + block (blockNumber = 'latest') { + return this._transport + .execute('trace_block', inBlockNumber(blockNumber)); + } +} diff --git a/js/src/api/rpc/trace/trace.spec.js b/js/src/api/rpc/trace/trace.spec.js new file mode 100644 index 0000000000..4a38f7a3f7 --- /dev/null +++ b/js/src/api/rpc/trace/trace.spec.js @@ -0,0 +1,44 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; + +import Http from '../../transport/http'; +import Trace from './trace'; + +const instance = new Trace(new Http(TEST_HTTP_URL)); + +describe('api/rpc/Trace', () => { + let scope; + + describe('block', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'trace_block', reply: { result: [] } }]); + }); + + it('assumes latest blockNumber when not specified', () => { + return instance.block().then(() => { + expect(scope.body.trace_block.params).to.deep.equal(['latest']); + }); + }); + + it('passed specified blockNumber', () => { + return instance.block(0x123).then(() => { + expect(scope.body.trace_block.params).to.deep.equal(['0x123']); + }); + }); + }); +}); diff --git a/js/src/api/rpc/web3/index.js b/js/src/api/rpc/web3/index.js new file mode 100644 index 0000000000..d0bb22941d --- /dev/null +++ b/js/src/api/rpc/web3/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './web3'; diff --git a/js/src/api/rpc/web3/web3.e2e.js b/js/src/api/rpc/web3/web3.e2e.js new file mode 100644 index 0000000000..15cc1934fb --- /dev/null +++ b/js/src/api/rpc/web3/web3.e2e.js @@ -0,0 +1,44 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createHttpApi } from '../../../../test/e2e/ethapi'; +import { isHexNumber } from '../../../../test/types'; + +describe('ethapi.web3', () => { + const ethapi = createHttpApi(); + + describe('clientVersion', () => { + it('returns the client version', () => { + return ethapi.web3.clientVersion().then((version) => { + const [client] = version.split('/'); + + expect(client === 'Parity' || client === 'Geth').to.be.ok; + }); + }); + }); + + describe('sha3', () => { + it('returns a keccak256 sha', () => { + const sha = '0xa7916fac4f538170f7cd12c148552e2cba9fcd72329a2dd5b07a6fa906488ddf'; + const hexStr = 'baz()'.split('').map((char) => char.charCodeAt(0).toString(16)).join(''); + + return ethapi.web3.sha3(`0x${hexStr}`).then((hash) => { + expect(isHexNumber(hash)).to.be.true; + expect(hash).to.equal(sha); + }); + }); + }); +}); diff --git a/js/src/api/rpc/web3/web3.js b/js/src/api/rpc/web3/web3.js new file mode 100644 index 0000000000..eb52a8bb72 --- /dev/null +++ b/js/src/api/rpc/web3/web3.js @@ -0,0 +1,33 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { inHex } from '../../format/input'; + +export default class Web3 { + constructor (transport) { + this._transport = transport; + } + + clientVersion () { + return this._transport + .execute('web3_clientVersion'); + } + + sha3 (hexStr) { + return this._transport + .execute('web3_sha3', inHex(hexStr)); + } +} diff --git a/js/src/api/rpc/web3/web3.spec.js b/js/src/api/rpc/web3/web3.spec.js new file mode 100644 index 0000000000..eb4a59cd16 --- /dev/null +++ b/js/src/api/rpc/web3/web3.spec.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; + +import Http from '../../transport/http'; +import Web3 from './web3'; + +const instance = new Web3(new Http(TEST_HTTP_URL)); + +describe('api/rpc/Web3', () => { + let scope; + + describe('sha3', () => { + beforeEach(() => { + scope = mockHttp([{ method: 'web3_sha3', reply: { result: [] } }]); + }); + + it('formats the inputs correctly', () => { + return instance.sha3('1234').then(() => { + expect(scope.body.web3_sha3.params).to.deep.equal(['0x1234']); + }); + }); + }); +}); diff --git a/js/src/api/subscriptions/eth.js b/js/src/api/subscriptions/eth.js new file mode 100644 index 0000000000..28d9cc6ff9 --- /dev/null +++ b/js/src/api/subscriptions/eth.js @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +export default class Eth { + constructor (updateSubscriptions, api) { + this._api = api; + this._updateSubscriptions = updateSubscriptions; + this._started = false; + + this._lastBlock = new BigNumber(-1); + } + + get isStarted () { + return this._started; + } + + start () { + this._started = true; + + return this._blockNumber(); + } + + _blockNumber = () => { + const nextTimeout = (timeout = 1000) => { + setTimeout(() => { + this._blockNumber(); + }, timeout); + }; + + if (!this._api.transport.isConnected) { + nextTimeout(500); + return; + } + + return this._api.eth + .blockNumber() + .then((blockNumber) => { + if (!blockNumber.eq(this._lastBlock)) { + this._lastBlock = blockNumber; + this._updateSubscriptions('eth_blockNumber', null, blockNumber); + } + + nextTimeout(); + }) + .catch(nextTimeout); + } +} diff --git a/js/src/api/subscriptions/eth.spec.js b/js/src/api/subscriptions/eth.spec.js new file mode 100644 index 0000000000..24398483e4 --- /dev/null +++ b/js/src/api/subscriptions/eth.spec.js @@ -0,0 +1,101 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import sinon from 'sinon'; +import 'sinon-as-promised'; + +import Eth from './eth'; + +const START_BLOCK = 5000; + +function stubApi (blockNumber) { + const _calls = { + blockNumber: [] + }; + + return { + _calls, + transport: { + isConnected: true + }, + eth: { + blockNumber: () => { + const stub = sinon.stub().resolves(new BigNumber(blockNumber || START_BLOCK))(); + _calls.blockNumber.push(stub); + return stub; + } + } + }; +} + +describe('api/subscriptions/eth', () => { + let api; + let eth; + let cb; + + beforeEach(() => { + api = stubApi(); + cb = sinon.stub(); + eth = new Eth(cb, api); + }); + + describe('constructor', () => { + it('starts the instance in a stopped state', () => { + expect(eth.isStarted).to.be.false; + }); + }); + + describe('start', () => { + describe('blockNumber available', () => { + beforeEach(() => { + return eth.start(); + }); + + it('sets the started status', () => { + expect(eth.isStarted).to.be.true; + }); + + it('calls eth_blockNumber', () => { + expect(api._calls.blockNumber.length).to.be.ok; + }); + + it('updates subscribers', () => { + expect(cb).to.have.been.calledWith('eth_blockNumber', null, new BigNumber(START_BLOCK)); + }); + }); + + describe('blockNumber not available', () => { + beforeEach(() => { + api = stubApi(-1); + eth = new Eth(cb, api); + return eth.start(); + }); + + it('sets the started status', () => { + expect(eth.isStarted).to.be.true; + }); + + it('calls eth_blockNumber', () => { + expect(api._calls.blockNumber.length).to.be.ok; + }); + + it('does not update subscribers', () => { + expect(cb).not.to.been.called; + }); + }); + }); +}); diff --git a/js/src/api/subscriptions/index.js b/js/src/api/subscriptions/index.js new file mode 100644 index 0000000000..3e627e62a1 --- /dev/null +++ b/js/src/api/subscriptions/index.js @@ -0,0 +1,19 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export Logging from './logging'; + +export default from './manager'; diff --git a/js/src/api/subscriptions/logging.js b/js/src/api/subscriptions/logging.js new file mode 100644 index 0000000000..b03558207f --- /dev/null +++ b/js/src/api/subscriptions/logging.js @@ -0,0 +1,44 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +let instance = null; + +export default class Logging { + constructor (updateSubscriptions) { + this._updateSubscriptions = updateSubscriptions; + + instance = this; + } + + get isStarted () { + return true; + } + + start () { + } + + static send (method, params, json) { + if (!instance) { + return; + } + + return instance._updateSubscriptions('logging', null, { + method, + params, + json + }); + } +} diff --git a/js/src/api/subscriptions/logging.spec.js b/js/src/api/subscriptions/logging.spec.js new file mode 100644 index 0000000000..2a1cabb46c --- /dev/null +++ b/js/src/api/subscriptions/logging.spec.js @@ -0,0 +1,49 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon'; + +import Logging from './logging'; + +describe('api/subscriptions/logging', () => { + let cb; + let logging; + + beforeEach(() => { + cb = sinon.stub(); + logging = new Logging(cb); + }); + + describe('constructor', () => { + it('starts the instance in a started state', () => { + expect(logging.isStarted).to.be.true; + }); + }); + + describe('send', () => { + const method = 'method'; + const params = 'params'; + const json = 'json'; + + beforeEach(() => { + Logging.send(method, params, json); + }); + + it('calls the subscription update', () => { + expect(cb).to.have.been.calledWith('logging', null, { method, params, json }); + }); + }); +}); diff --git a/js/src/api/subscriptions/manager.js b/js/src/api/subscriptions/manager.js new file mode 100644 index 0000000000..6f9b7cf7e2 --- /dev/null +++ b/js/src/api/subscriptions/manager.js @@ -0,0 +1,134 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { isError } from '../util/types'; + +import Eth from './eth'; +import Logging from './logging'; +import Personal from './personal'; +import Signer from './signer'; + +const events = { + 'logging': { module: 'logging' }, + 'eth_blockNumber': { module: 'eth' }, + 'personal_accountsInfo': { module: 'personal' }, + 'personal_listAccounts': { module: 'personal' }, + 'personal_requestsToConfirm': { module: 'signer' } +}; + +let nextSubscriptionId = 0; + +export default class Manager { + constructor (api) { + this._api = api; + + this.subscriptions = {}; + this.values = {}; + + Object.keys(events).forEach((subscriptionName) => { + this.subscriptions[subscriptionName] = {}; + this.values[subscriptionName] = { + error: null, + data: null + }; + }); + + this._logging = new Logging(this._updateSubscriptions); + this._eth = new Eth(this._updateSubscriptions, api); + this._personal = new Personal(this._updateSubscriptions, api, this); + this._signer = new Signer(this._updateSubscriptions, api, this); + } + + _validateType (subscriptionName) { + const subscription = events[subscriptionName]; + + if (!subscription) { + return new Error(`${subscriptionName} is not a valid interface, subscribe using one of ${Object.keys(events).join(', ')}`); + } + + return subscription; + } + + subscribe (subscriptionName, callback) { + return new Promise((resolve, reject) => { + const subscription = this._validateType(subscriptionName); + + if (isError(subscription)) { + reject(subscription); + return; + } + + const subscriptionId = nextSubscriptionId++; + const { error, data } = this.values[subscriptionName]; + const engine = this[`_${subscription.module}`]; + + this.subscriptions[subscriptionName][subscriptionId] = callback; + + if (!engine.isStarted) { + engine.start(); + } else { + this._sendData(subscriptionName, subscriptionId, callback, error, data); + } + + resolve(subscriptionId); + }); + } + + unsubscribe (subscriptionName, subscriptionId) { + return new Promise((resolve, reject) => { + const subscription = this._validateType(subscriptionName); + + if (isError(subscription)) { + reject(subscription); + return; + } + + if (!this.subscriptions[subscriptionName][subscriptionId]) { + reject(new Error(`Cannot find subscription ${subscriptionId} for type ${subscriptionName}`)); + return; + } + + delete this.subscriptions[subscriptionName][subscriptionId]; + resolve(); + }); + } + + _sendData (subscriptionName, subscriptionId, callback, error, data) { + try { + callback(error, data); + } catch (error) { + console.error(`Unable to update callback for ${subscriptionName}, subscriptionId ${subscriptionId}`, error); + this.unsubscribe(subscriptionName, subscriptionId); + } + } + + _updateSubscriptions = (subscriptionName, error, data) => { + if (!this.subscriptions[subscriptionName]) { + throw new Error(`Cannot find entry point for subscriptions of type ${subscriptionName}`); + } + + this.values[subscriptionName] = { error, data }; + Object.keys(this.subscriptions[subscriptionName]).forEach((subscriptionId) => { + const callback = this.subscriptions[subscriptionName][subscriptionId]; + + this._sendData(subscriptionName, subscriptionId, callback, error, data); + }); + } +} + +export { + events +}; diff --git a/js/src/api/subscriptions/manager.spec.js b/js/src/api/subscriptions/manager.spec.js new file mode 100644 index 0000000000..4b6b84b84a --- /dev/null +++ b/js/src/api/subscriptions/manager.spec.js @@ -0,0 +1,98 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon'; + +import Manager, { events } from './manager'; + +function newStub () { + const start = () => manager._updateSubscriptions(manager.__test, null, 'test'); + const manager = new Manager({ + transport: { + isConnected: true + } + }); + + manager._eth = { + isStarted: false, + start + }; + + manager._personal = { + isStarted: false, + start + }; + + manager._signer = { + isStarted: false, + start + }; + + return manager; +} + +describe('api/subscriptions/manager', () => { + let manager; + + beforeEach(() => { + manager = newStub(); + }); + + describe('constructor', () => { + it('sets up the subscription types & defaults', () => { + expect(Object.keys(manager.subscriptions)).to.deep.equal(Object.keys(events)); + expect(Object.keys(manager.values)).to.deep.equal(Object.keys(events)); + }); + }); + + describe('subscriptions', () => { + Object + .keys(events) + .filter((eventName) => eventName.indexOf('_') !== -1) + .forEach((eventName) => { + const { module } = events[eventName]; + let engine; + let cb; + let subscriptionId; + + describe(eventName, () => { + beforeEach(() => { + engine = manager[`_${module}`]; + manager.__test = eventName; + cb = sinon.stub(); + sinon.spy(engine, 'start'); + return manager + .subscribe(eventName, cb) + .then((_subscriptionId) => { + subscriptionId = _subscriptionId; + }); + }); + + it(`puts the ${module} engine in a started state`, () => { + expect(engine.start).to.have.been.called; + }); + + it('returns a subscriptionId', () => { + expect(subscriptionId).to.be.ok; + }); + + it('calls the subscription callback with updated values', () => { + expect(cb).to.have.been.calledWith(null, 'test'); + }); + }); + }); + }); +}); diff --git a/js/src/api/subscriptions/personal.js b/js/src/api/subscriptions/personal.js new file mode 100644 index 0000000000..d654199629 --- /dev/null +++ b/js/src/api/subscriptions/personal.js @@ -0,0 +1,77 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class Personal { + constructor (updateSubscriptions, api, subscriber) { + this._subscriber = subscriber; + this._api = api; + this._updateSubscriptions = updateSubscriptions; + this._started = false; + } + + get isStarted () { + return this._started; + } + + start () { + this._started = true; + + return Promise.all([ + this._listAccounts(), + this._accountsInfo(), + this._loggingSubscribe() + ]); + } + + _listAccounts = () => { + return this._api.personal + .listAccounts() + .then((accounts) => { + this._updateSubscriptions('personal_listAccounts', null, accounts); + }); + } + + _accountsInfo = () => { + return this._api.personal + .accountsInfo() + .then((info) => { + this._updateSubscriptions('personal_accountsInfo', null, info); + }); + } + + _loggingSubscribe () { + return this._subscriber.subscribe('logging', (error, data) => { + if (error || !data) { + return; + } + + switch (data.method) { + case 'personal_importGethAccounts': + case 'personal_newAccount': + case 'personal_newAccountFromPhrase': + case 'personal_newAccountFromWallet': + this._listAccounts(); + this._accountsInfo(); + return; + + case 'personal_setAccountName': + case 'personal_setAccountMeta': + this._accountsInfo(); + return; + } + }); + } +} diff --git a/js/src/api/subscriptions/personal.spec.js b/js/src/api/subscriptions/personal.spec.js new file mode 100644 index 0000000000..1a77b5f616 --- /dev/null +++ b/js/src/api/subscriptions/personal.spec.js @@ -0,0 +1,122 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon'; +import 'sinon-as-promised'; + +import Personal from './personal'; + +const TEST_INFO = { + '0xfa64203C044691aA57251aF95f4b48d85eC00Dd5': { + name: 'test' + } +}; +const TEST_LIST = ['0xfa64203C044691aA57251aF95f4b48d85eC00Dd5']; + +function stubApi (accounts, info) { + const _calls = { + accountsInfo: [], + listAccounts: [] + }; + + return { + _calls, + personal: { + accountsInfo: () => { + const stub = sinon.stub().resolves(info || TEST_INFO)(); + _calls.accountsInfo.push(stub); + return stub; + }, + + listAccounts: () => { + const stub = sinon.stub().resolves(accounts || TEST_LIST)(); + _calls.listAccounts.push(stub); + return stub; + } + } + }; +} + +function stubLogging () { + return { + subscribe: sinon.stub() + }; +} + +describe('api/subscriptions/personal', () => { + let api; + let cb; + let logging; + let personal; + + beforeEach(() => { + api = stubApi(); + cb = sinon.stub(); + logging = stubLogging(); + personal = new Personal(cb, api, logging); + }); + + describe('constructor', () => { + it('starts the instance in a stopped state', () => { + expect(personal.isStarted).to.be.false; + }); + }); + + describe('start', () => { + describe('info available', () => { + beforeEach(() => { + return personal.start(); + }); + + it('sets the started status', () => { + expect(personal.isStarted).to.be.true; + }); + + it('calls personal_accountsInfo', () => { + expect(api._calls.accountsInfo.length).to.be.ok; + }); + + it('calls personal_listAccounts', () => { + expect(api._calls.listAccounts.length).to.be.ok; + }); + + it('updates subscribers', () => { + expect(cb.firstCall).to.have.been.calledWith('personal_listAccounts', null, TEST_LIST); + expect(cb.secondCall).to.have.been.calledWith('personal_accountsInfo', null, TEST_INFO); + }); + }); + + describe('info not available', () => { + beforeEach(() => { + api = stubApi([], {}); + personal = new Personal(cb, api, logging); + return personal.start(); + }); + + it('sets the started status', () => { + expect(personal.isStarted).to.be.true; + }); + + it('calls personal_accountsInfo', () => { + expect(api._calls.accountsInfo.length).to.be.ok; + }); + + it('calls personal_listAccounts', () => { + expect(api._calls.listAccounts.length).to.be.ok; + }); + }); + }); +}); diff --git a/js/src/api/subscriptions/signer.js b/js/src/api/subscriptions/signer.js new file mode 100644 index 0000000000..af745261b4 --- /dev/null +++ b/js/src/api/subscriptions/signer.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class Signer { + constructor (updateSubscriptions, api, subscriber) { + this._subscriber = subscriber; + this._api = api; + this._updateSubscriptions = updateSubscriptions; + this._started = false; + } + + get isStarted () { + return this._started; + } + + start () { + this._started = true; + + return Promise.all([ + this._listRequests(true), + this._loggingSubscribe() + ]); + } + + _listRequests = (doTimeout) => { + const nextTimeout = (timeout = 1000) => { + if (doTimeout) { + setTimeout(() => { + this._listRequests(true); + }, timeout); + } + }; + + if (!this._api.transport.isConnected) { + nextTimeout(500); + return; + } + + return this._api.personal + .requestsToConfirm() + .then((requests) => { + this._updateSubscriptions('personal_requestsToConfirm', null, requests); + nextTimeout(); + }) + .catch(nextTimeout); + } + + _loggingSubscribe () { + return this._subscriber.subscribe('logging', (error, data) => { + if (error || !data) { + return; + } + + switch (data.method) { + case 'eth_postTransaction': + case 'eth_sendTranasction': + case 'eth_sendRawTransaction': + this._listRequests(false); + return; + } + }); + } +} diff --git a/js/src/api/transport/http/http.e2e.js b/js/src/api/transport/http/http.e2e.js new file mode 100644 index 0000000000..8f0aa48adc --- /dev/null +++ b/js/src/api/transport/http/http.e2e.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Http from './http'; + +const http = new Http('http://localhost:8545'); + +describe('transport/Http', () => { + it('connects and makes a call to web3_clientVersion', () => { + return http.execute('web3_clientVersion').then((version) => { + const [client] = version.split('/'); + + expect(client === 'Geth' || client === 'Parity').to.be.ok; + }); + }); +}); diff --git a/js/src/api/transport/http/http.js b/js/src/api/transport/http/http.js new file mode 100644 index 0000000000..65ba089cc4 --- /dev/null +++ b/js/src/api/transport/http/http.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Logging } from '../../subscriptions'; +import JsonRpcBase from '../jsonRpcBase'; + +/* global fetch */ +export default class Http extends JsonRpcBase { + constructor (url) { + super(); + + this._connected = true; + this._url = url; + } + + _encodeOptions (method, params) { + const json = this.encode(method, params); + + this.log(json); + + return { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Content-Length': json.length + }, + body: json + }; + } + + execute (method, ...params) { + const request = this._encodeOptions(method, params); + + return fetch(this._url, request) + .catch((error) => { + this._connected = false; + throw error; + }) + .then((response) => { + this._connected = true; + + if (response.status !== 200) { + this._connected = false; + this.error(JSON.stringify({ status: response.status, statusText: response.statusText })); + throw new Error(`${response.status}: ${response.statusText}`); + } + + return response.json(); + }) + .then((response) => { + Logging.send(method, params, { request, response }); + + if (response.error) { + this.error(JSON.stringify(response)); + throw new Error(`${response.error.code}: ${response.error.message}`); + } + + this.log(JSON.stringify(response)); + return response.result; + }); + } +} diff --git a/js/src/api/transport/http/http.spec.js b/js/src/api/transport/http/http.spec.js new file mode 100644 index 0000000000..94441bc519 --- /dev/null +++ b/js/src/api/transport/http/http.spec.js @@ -0,0 +1,122 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc'; +import Http from './http'; + +const transport = new Http(TEST_HTTP_URL); + +describe('api/transport/Http', () => { + describe('instance', () => { + it('encodes the options correctly', () => { + const opt = transport._encodeOptions('someMethod', ['param']); + const enc = { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Content-Length': 65 + }, + body: `{"jsonrpc":"2.0","method":"someMethod","params":["param"],"id":${transport._id - 1}}` + }; + + expect(opt).to.deep.equal(enc); + }); + }); + + describe('transport', () => { + const RESULT = ['this is some result']; + + let scope; + let result; + + beforeEach(() => { + scope = mockHttp([{ method: 'eth_call', reply: { result: RESULT } }]); + + return transport + .execute('eth_call', 1, 2, 3, 'test') + .then((_result) => { + result = _result; + }); + }); + + it('makes POST', () => { + expect(scope.isDone()).to.be.true; + }); + + it('sets jsonrpc', () => { + expect(scope.body.eth_call.jsonrpc).to.equal('2.0'); + }); + + it('sets the method', () => { + expect(scope.body.eth_call.method).to.equal('eth_call'); + }); + + it('passes the params', () => { + expect(scope.body.eth_call.params).to.deep.equal([1, 2, 3, 'test']); + }); + + it('increments the id', () => { + expect(scope.body.eth_call.id).not.to.equal(0); + }); + + it('passes the actual result back', () => { + expect(result).to.deep.equal(RESULT); + }); + }); + + describe('HTTP errors', () => { + let scope; + let error; + + beforeEach(() => { + scope = mockHttp([{ method: 'eth_call', reply: {}, code: 500 }]); + + return transport + .execute('eth_call') + .catch((_error) => { + error = _error; + }); + }); + + it('returns HTTP errors as throws', () => { + expect(scope.isDone()).to.be.true; + expect(error.message).to.match(/Internal Server Error/); + }); + }); + + describe('RPC errors', () => { + const ERROR = { code: -1, message: 'ERROR: RPC failure' }; + + let scope; + let error; + + beforeEach(() => { + scope = mockHttp([{ method: 'eth_call', reply: { error: ERROR } }]); + + return transport + .execute('eth_call') + .catch((_error) => { + error = _error; + }); + }); + + it('returns RPC errors as throws', () => { + expect(scope.isDone()).to.be.true; + expect(error.message).to.match(/RPC failure/); + }); + }); +}); diff --git a/js/src/api/transport/http/index.js b/js/src/api/transport/http/index.js new file mode 100644 index 0000000000..5ce7a652ea --- /dev/null +++ b/js/src/api/transport/http/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './http'; diff --git a/js/src/api/transport/index.js b/js/src/api/transport/index.js new file mode 100644 index 0000000000..8f67fba4d5 --- /dev/null +++ b/js/src/api/transport/index.js @@ -0,0 +1,18 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export Http from './http'; +export Ws from './ws'; diff --git a/js/src/api/transport/jsonRpcBase.js b/js/src/api/transport/jsonRpcBase.js new file mode 100644 index 0000000000..dc2f9bc8e9 --- /dev/null +++ b/js/src/api/transport/jsonRpcBase.js @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class JsonRpcBase { + constructor () { + this._id = 1; + this._debug = false; + this._connected = false; + } + + encode (method, params) { + const json = JSON.stringify({ + jsonrpc: '2.0', + method: method, + params: params, + id: this._id++ + }); + + return json; + } + + get id () { + return this._id; + } + + get isDebug () { + return this._debug; + } + + get isConnected () { + return this._connected; + } + + setDebug (flag) { + this._debug = flag; + } + + error (error) { + if (this.isDebug) { + console.error(error); + } + } + + log (log) { + if (this.isDebug) { + console.log(log); + } + } +} diff --git a/js/src/api/transport/jsonRpcBase.spec.js b/js/src/api/transport/jsonRpcBase.spec.js new file mode 100644 index 0000000000..78fc6549c2 --- /dev/null +++ b/js/src/api/transport/jsonRpcBase.spec.js @@ -0,0 +1,88 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon'; + +import JsonRpcBase from './jsonRpcBase'; + +const base = new JsonRpcBase(); + +describe('api/transport/JsonRpcBase', () => { + describe('encode', () => { + it('encodes the body correctly, incrementing id', () => { + const id = base.id; + const bdy = base.encode('someMethod', ['param1', 'param2']); + const enc = `{"jsonrpc":"2.0","method":"someMethod","params":["param1","param2"],"id":${id}}`; + + expect(bdy).to.equal(enc); + expect(base.id - id).to.equal(1); + }); + }); + + describe('setDebug', () => { + it('starts with disabled flag', () => { + expect(base.isDebug).to.be.false; + }); + + it('true flag switches on', () => { + base.setDebug(true); + expect(base.isDebug).to.be.true; + }); + + it('false flag switches off', () => { + base.setDebug(true); + expect(base.isDebug).to.be.true; + base.setDebug(false); + expect(base.isDebug).to.be.false; + }); + + describe('logging', () => { + beforeEach(() => { + sinon.spy(console, 'log'); + sinon.spy(console, 'error'); + }); + + afterEach(() => { + console.log.restore(); + console.error.restore(); + }); + + it('does not log errors with flag off', () => { + base.setDebug(false); + base.log('error'); + expect(console.log).to.not.be.called; + }); + + it('does not log errors with flag off', () => { + base.setDebug(false); + base.error('error'); + expect(console.error).to.not.be.called; + }); + + it('does log errors with flag on', () => { + base.setDebug(true); + base.log('error'); + expect(console.log).to.be.called; + }); + + it('does log errors with flag on', () => { + base.setDebug(true); + base.error('error'); + expect(console.error).to.be.called; + }); + }); + }); +}); diff --git a/js/src/api/transport/ws/index.js b/js/src/api/transport/ws/index.js new file mode 100644 index 0000000000..7b6e359346 --- /dev/null +++ b/js/src/api/transport/ws/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './ws'; diff --git a/js/src/api/transport/ws/ws.e2e.js b/js/src/api/transport/ws/ws.e2e.js new file mode 100644 index 0000000000..19e4ab8eb4 --- /dev/null +++ b/js/src/api/transport/ws/ws.e2e.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import Ws from './ws'; + +const ws = new Ws('ws://localhost:8546/'); + +describe('transport/Ws', () => { + it('connects and makes a call to web3_clientVersion', () => { + return ws.execute('web3_clientVersion').then((version) => { + const [client] = version.split('/'); + + expect(client === 'Geth' || client === 'Parity').to.be.ok; + }); + }); +}); diff --git a/js/src/api/transport/ws/ws.js b/js/src/api/transport/ws/ws.js new file mode 100644 index 0000000000..ecab2a5a27 --- /dev/null +++ b/js/src/api/transport/ws/ws.js @@ -0,0 +1,148 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { keccak_256 } from 'js-sha3'; // eslint-disable-line camelcase + +import { Logging } from '../../subscriptions'; +import JsonRpcBase from '../jsonRpcBase'; + +/* global WebSocket */ +export default class Ws extends JsonRpcBase { + constructor (url, token) { + super(); + + this._url = url; + this._token = token; + this._messages = {}; + + this._connecting = true; + this._lastError = null; + this._autoConnect = false; + + this._connect(); + } + + updateToken (token) { + this._token = token; + this._autoConnect = false; + + this._connect(); + } + + _connect () { + const time = parseInt(new Date().getTime() / 1000, 10); + const sha3 = keccak_256(`${this._token}:${time}`); + const hash = `${sha3}_${time}`; + + if (this._ws) { + this._ws.onerror = null; + this._ws.onopen = null; + this._ws.onclose = null; + this._ws.onmessage = null; + this._ws = null; + } + + this._connecting = true; + this._connected = false; + this._lastError = null; + + this._ws = new WebSocket(this._url, hash); + this._ws.onerror = this._onError; + this._ws.onopen = this._onOpen; + this._ws.onclose = this._onClose; + this._ws.onmessage = this._onMessage; + } + + _onOpen = (event) => { + console.log('ws:onOpen', event); + this._connected = true; + this._connecting = false; + this._autoConnect = true; + + Object.keys(this._messages) + .filter((id) => this._messages[id].queued) + .forEach(this._send); + } + + _onClose = (event) => { + console.log('ws:onClose', event); + this._connected = false; + this._connecting = false; + + if (this._autoConnect) { + this._connect(); + } + } + + _onError = (event) => { + console.error('ws:onError', event); + this._lastError = event; + } + + _onMessage = (event) => { + const result = JSON.parse(event.data); + const { method, params, json, resolve, reject } = this._messages[result.id]; + + Logging.send(method, params, { json, result }); + + if (result.error) { + this.error(event.data); + + reject(new Error(`${result.error.code}: ${result.error.message}`)); + delete this._messages[result.id]; + return; + } + + resolve(result.result); + delete this._messages[result.id]; + } + + _send = (id) => { + const message = this._messages[id]; + + message.queued = !this._connected; + + if (this._connected) { + this._ws.send(message.json); + } + } + + execute (method, ...params) { + return new Promise((resolve, reject) => { + const id = this.id; + const json = this.encode(method, params); + + this._messages[id] = { id, method, params, json, resolve, reject }; + this._send(id); + }); + } + + get token () { + return this._token; + } + + get isAutoConnect () { + return this._autoConnect; + } + + get isConnecting () { + return this._connecting; + } + + get lastError () { + return this._lastError; + } +} diff --git a/js/src/api/transport/ws/ws.spec.js b/js/src/api/transport/ws/ws.spec.js new file mode 100644 index 0000000000..c417e89110 --- /dev/null +++ b/js/src/api/transport/ws/ws.spec.js @@ -0,0 +1,85 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { TEST_WS_URL, mockWs } from '../../../../test/mockRpc'; +import Ws from './ws'; + +describe('api/transport/Ws', () => { + let transport; + let scope; + + describe('transport', () => { + let result; + + beforeEach(() => { + scope = mockWs([{ method: 'test_anyCall', reply: 'TestResult' }]); + transport = new Ws(TEST_WS_URL); + + return transport + .execute('test_anyCall', 1, 2, 3) + .then((_result) => { + result = _result; + }); + }); + + afterEach(() => { + scope.stop(); + }); + + it('makes call', () => { + expect(scope.isDone()).to.be.true; + }); + + it('sets jsonrpc', () => { + expect(scope.body.test_anyCall.jsonrpc).to.equal('2.0'); + }); + + it('sets the method', () => { + expect(scope.body.test_anyCall.method).to.equal('test_anyCall'); + }); + + it('passes the params', () => { + expect(scope.body.test_anyCall.params).to.deep.equal([1, 2, 3]); + }); + + it('increments the id', () => { + expect(scope.body.test_anyCall.id).not.to.equal(0); + }); + + it('passes the actual result back', () => { + expect(result).to.equal('TestResult'); + }); + }); + + describe('errors', () => { + beforeEach(() => { + scope = mockWs([{ method: 'test_anyCall', reply: { error: { code: 1, message: 'TestError' } } }]); + transport = new Ws(TEST_WS_URL); + }); + + afterEach(() => { + scope.stop(); + }); + + it('returns RPC errors when encountered', () => { + return transport + .execute('test_anyCall') + .catch((error) => { + expect(error).to.match(/TestError/); + }); + }); + }); +}); diff --git a/js/src/api/util/decode.js b/js/src/api/util/decode.js new file mode 100644 index 0000000000..065d516e9e --- /dev/null +++ b/js/src/api/util/decode.js @@ -0,0 +1,83 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { isHex } from './types'; + +import Func from '../../abi/spec/function'; +import { fromParamType, toParamType } from '../../abi/spec/paramType/format'; + +export function decodeCallData (data) { + if (!isHex(data)) { + throw new Error('Input to decodeCallData should be a hex value'); + } + + if (data.substr(0, 2) === '0x') { + return decodeCallData(data.slice(2)); + } else if (data.length < 8) { + throw new Error('Input to decodeCallData should be method signature + data'); + } + + const signature = data.substr(0, 8); + const paramdata = data.substr(8); + + return { + signature: `0x${signature}`, + paramdata: `0x${paramdata}` + }; +} + +export function decodeMethodInput (methodAbi, paramdata) { + if (!methodAbi) { + throw new Error('decodeMethodInput should receive valid method-specific ABI'); + } else if (!paramdata) { + throw new Error('decodeMethodInput should receive valid parameter input data'); + } else if (!isHex(paramdata)) { + throw new Error('Input to decodeMethodInput should be a hex value'); + } else if (paramdata.substr(0, 2) === '0x') { + return decodeMethodInput(methodAbi, paramdata.slice(2)); + } else if (paramdata.length % 64 !== 0) { + throw new Error('Parameter length in decodeMethodInput not a multiple of 64 characters'); + } + + return new Func(methodAbi).decodeInput(paramdata).map((decoded) => decoded.value); +} + +// takes a method in form name(...,types) and returns the inferred abi definition +export function methodToAbi (method) { + const length = method.length; + const typesStart = method.indexOf('('); + const typesEnd = method.indexOf(')'); + + if (typesStart === -1) { + throw new Error(`Missing start ( in call to decodeMethod with ${method}`); + } else if (typesEnd === -1) { + throw new Error(`Missing end ) in call to decodeMethod with ${method}`); + } else if (typesEnd < typesStart) { + throw new Error(`End ) is before start ( in call to decodeMethod with ${method}`); + } else if (typesEnd !== length - 1) { + throw new Error(`Extra characters after end ) in call to decodeMethod with ${method}`); + } + + const name = method.substr(0, typesStart); + const types = method.substr(typesStart + 1, length - (typesStart + 1) - 1).split(','); + const inputs = types.map((_type) => { + const type = fromParamType(toParamType(_type)); + + return { type }; + }); + + return { type: 'function', name, inputs }; +} diff --git a/js/src/api/util/decode.spec.js b/js/src/api/util/decode.spec.js new file mode 100644 index 0000000000..665af6d036 --- /dev/null +++ b/js/src/api/util/decode.spec.js @@ -0,0 +1,101 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import { decodeCallData, decodeMethodInput, methodToAbi } from './decode'; + +describe('api/util/decode', () => { + const METH = '0x70a08231'; + const ENCO = '0x70a082310000000000000000000000005A5eFF38DA95b0D58b6C616f2699168B480953C9'; + const DATA = '0x0000000000000000000000005A5eFF38DA95b0D58b6C616f2699168B480953C9'; + + describe('decodeCallData', () => { + it('throws on non-hex inputs', () => { + expect(() => decodeCallData('invalid')).to.throw(/should be a hex value/); + }); + + it('throws when invalid signature length', () => { + expect(() => decodeCallData(METH.slice(-6))).to.throw(/should be method signature/); + }); + + it('splits valid inputs properly', () => { + expect(decodeCallData(ENCO)).to.deep.equal({ + signature: METH, + paramdata: DATA + }); + }); + }); + + describe('decodeMethodInput', () => { + it('expects a valid ABI', () => { + expect(() => decodeMethodInput(null, null)).to.throw(/should receive valid method/); + }); + + it('expects valid parameter data', () => { + expect(() => decodeMethodInput({}, null)).to.throw(/should receive valid parameter/); + }); + + it('expect valid hex parameter data', () => { + expect(() => decodeMethodInput({}, 'invalid')).to.throw(/should be a hex value/); + }); + + it('throws on invalid lengths', () => { + expect(() => decodeMethodInput({}, DATA.slice(-32))).to.throw(/not a multiple of/); + }); + + it('correctly decodes valid inputs', () => { + expect(decodeMethodInput({ + type: 'function', + inputs: [ + { type: 'uint' } + ] + }, DATA)).to.deep.equal([ new BigNumber('0x5a5eff38da95b0d58b6c616f2699168b480953c9') ]); + }); + }); + + describe('methodToAbi', () => { + it('throws when no start ( specified', () => { + expect(() => methodToAbi('invalid,uint,bool)')).to.throw(/Missing start \(/); + }); + + it('throws when no end ) specified', () => { + expect(() => methodToAbi('invalid(uint,bool')).to.throw(/Missing end \)/); + }); + + it('throws when end ) is not in the last position', () => { + expect(() => methodToAbi('invalid(uint,bool)2')).to.throw(/Extra characters after end \)/); + }); + + it('throws when start ( is after end )', () => { + expect(() => methodToAbi('invalid)uint,bool(')).to.throw(/End \) is before start \(/); + }); + + it('throws when invalid types are present', () => { + expect(() => methodToAbi('method(invalidType,bool,uint)')).to.throw(/Cannot convert invalidType/); + }); + + it('returns a valid methodabi for a valid method', () => { + expect(methodToAbi('valid(uint,bool)')).to.deep.equals({ + type: 'function', + name: 'valid', + inputs: [ + { type: 'uint256' }, + { type: 'bool' } + ] + }); + }); + }); +}); diff --git a/js/src/api/util/format.js b/js/src/api/util/format.js new file mode 100644 index 0000000000..1b68e11388 --- /dev/null +++ b/js/src/api/util/format.js @@ -0,0 +1,19 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export function bytesToHex (bytes) { + return '0x' + bytes.map((b) => ('0' + b.toString(16)).slice(-2)).join(''); +} diff --git a/js/src/api/util/format.spec.js b/js/src/api/util/format.spec.js new file mode 100644 index 0000000000..c779d71efd --- /dev/null +++ b/js/src/api/util/format.spec.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { bytesToHex } from './format'; + +describe('api/util/format', () => { + describe('bytesToHex', () => { + it('correctly converts an empty array', () => { + expect(bytesToHex([])).to.equal('0x'); + }); + + it('correctly converts a non-empty array', () => { + expect(bytesToHex([0, 15, 16])).to.equal('0x000f10'); + }); + }); +}); diff --git a/js/src/api/util/identity.js b/js/src/api/util/identity.js new file mode 100644 index 0000000000..6a25590e3d --- /dev/null +++ b/js/src/api/util/identity.js @@ -0,0 +1,9 @@ +import blockies from 'blockies'; + +export function createIdentityImg (address, scale = 8) { + return blockies({ + seed: (address || '').toLowerCase(), + size: 8, + scale + }).toDataURL(); +} diff --git a/js/src/api/util/index.js b/js/src/api/util/index.js new file mode 100644 index 0000000000..fb0f79076b --- /dev/null +++ b/js/src/api/util/index.js @@ -0,0 +1,41 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { isAddress as isAddressValid, toChecksumAddress } from '../../abi/util/address'; +import { decodeCallData, decodeMethodInput, methodToAbi } from './decode'; +import { bytesToHex } from './format'; +import { fromWei, toWei } from './wei'; +import { sha3 } from './sha3'; +import { isArray, isFunction, isHex, isInstanceOf, isString } from './types'; +import { createIdentityImg } from './identity'; + +export default { + isAddressValid, + isArray, + isFunction, + isHex, + isInstanceOf, + isString, + bytesToHex, + createIdentityImg, + decodeCallData, + decodeMethodInput, + methodToAbi, + fromWei, + toChecksumAddress, + toWei, + sha3 +}; diff --git a/js/src/api/util/sha3.js b/js/src/api/util/sha3.js new file mode 100644 index 0000000000..fcbda091a2 --- /dev/null +++ b/js/src/api/util/sha3.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { keccak_256 } from 'js-sha3'; // eslint-disable-line camelcase + +export function sha3 (value) { + return `0x${keccak_256(value)}`; +} diff --git a/js/src/api/util/sha3.spec.js b/js/src/api/util/sha3.spec.js new file mode 100644 index 0000000000..bede8bd600 --- /dev/null +++ b/js/src/api/util/sha3.spec.js @@ -0,0 +1,25 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { sha3 } from './sha3'; + +describe('api/util/sha3', () => { + describe('sha3', () => { + it('constructs a correct sha3 value', () => { + expect(sha3('jacogr')).to.equal('0x2f4ff4b5a87abbd2edfed699db48a97744e028c7f7ce36444d40d29d792aa4dc'); + }); + }); +}); diff --git a/js/src/api/util/types.js b/js/src/api/util/types.js new file mode 100644 index 0000000000..a34f30649f --- /dev/null +++ b/js/src/api/util/types.js @@ -0,0 +1,56 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const HEXDIGITS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']; + +export function isArray (test) { + return Object.prototype.toString.call(test) === '[object Array]'; +} + +export function isError (test) { + return Object.prototype.toString.call(test) === '[object Error]'; +} + +export function isFunction (test) { + return Object.prototype.toString.call(test) === '[object Function]'; +} + +export function isHex (_test) { + if (_test.substr(0, 2) === '0x') { + return isHex(_test.slice(2)); + } + + const test = _test.toLowerCase(); + let hex = true; + + for (let idx = 0; hex && idx < test.length; idx++) { + hex = HEXDIGITS.includes(test[idx]); + } + + return hex; +} + +export function isObject (test) { + return Object.prototype.toString.call(test) === '[object Object]'; +} + +export function isString (test) { + return Object.prototype.toString.call(test) === '[object String]'; +} + +export function isInstanceOf (test, clazz) { + return test instanceof clazz; +} diff --git a/js/src/api/util/types.spec.js b/js/src/api/util/types.spec.js new file mode 100644 index 0000000000..252876be39 --- /dev/null +++ b/js/src/api/util/types.spec.js @@ -0,0 +1,112 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon'; + +import { isArray, isError, isFunction, isHex, isInstanceOf, isObject, isString } from './types'; +import Eth from '../rpc/eth'; + +describe('api/util/types', () => { + describe('isArray', () => { + it('correctly identifies null as false', () => { + expect(isArray(null)).to.be.false; + }); + + it('correctly identifies empty array as true', () => { + expect(isArray([])).to.be.true; + }); + + it('correctly identifies array as true', () => { + expect(isArray([1, 2, 3])).to.be.true; + }); + }); + + describe('isError', () => { + it('correctly identifies null as false', () => { + expect(isError(null)).to.be.false; + }); + + it('correctly identifies Error as true', () => { + expect(isError(new Error('an error'))).to.be.true; + }); + }); + + describe('isFunction', () => { + it('correctly identifies null as false', () => { + expect(isFunction(null)).to.be.false; + }); + + it('correctly identifies function as true', () => { + expect(isFunction(sinon.stub())).to.be.true; + }); + }); + + describe('isHex', () => { + it('correctly identifies hex by leading 0x', () => { + expect(isHex('0x123')).to.be.true; + }); + + it('correctly identifies hex without leading 0x', () => { + expect(isHex('123')).to.be.true; + }); + + it('correctly identifies non-hex values', () => { + expect(isHex('123j')).to.be.false; + }); + }); + + describe('isInstanceOf', () => { + it('correctly identifies build-in instanceof', () => { + expect(isInstanceOf(new String('123'), String)).to.be.true; // eslint-disable-line no-new-wrappers + }); + + it('correctly identifies own instanceof', () => { + expect(isInstanceOf(new Eth({}), Eth)).to.be.true; + }); + + it('correctly reports false for own', () => { + expect(isInstanceOf({}, Eth)).to.be.false; + }); + }); + + describe('isObject', () => { + it('correctly identifies empty object as object', () => { + expect(isObject({})).to.be.true; + }); + + it('correctly identifies non-empty object as object', () => { + expect(isObject({ data: '123' })).to.be.true; + }); + + it('correctly identifies Arrays as non-objects', () => { + expect(isObject([1, 2, 3])).to.be.false; + }); + + it('correctly identifies Strings as non-objects', () => { + expect(isObject('123')).to.be.false; + }); + }); + + describe('isString', () => { + it('correctly identifies empty string as string', () => { + expect(isString('')).to.be.true; + }); + + it('correctly identifies string as string', () => { + expect(isString('123')).to.be.true; + }); + }); +}); diff --git a/js/src/api/util/wei.js b/js/src/api/util/wei.js new file mode 100644 index 0000000000..d04e73921f --- /dev/null +++ b/js/src/api/util/wei.js @@ -0,0 +1,37 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +const UNITS = ['wei', 'ada', 'babbage', 'shannon', 'szabo', 'finney', 'ether', 'kether', 'mether', 'gether', 'tether']; + +export function _getUnitMultiplier (unit) { + const position = UNITS.indexOf(unit.toLowerCase()); + + if (position === -1) { + throw new Error(`Unknown unit ${unit} passed to wei formatter`); + } + + return 10 ** (position * 3); +} + +export function fromWei (value, unit = 'ether') { + return new BigNumber(value).div(_getUnitMultiplier(unit)); +} + +export function toWei (value, unit = 'ether') { + return new BigNumber(value).mul(_getUnitMultiplier(unit)); +} diff --git a/js/src/api/util/wei.spec.js b/js/src/api/util/wei.spec.js new file mode 100644 index 0000000000..8d0b1f09c7 --- /dev/null +++ b/js/src/api/util/wei.spec.js @@ -0,0 +1,57 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { _getUnitMultiplier, fromWei, toWei } from './wei'; + +describe('api/util/wei', () => { + describe('_getUnitMultiplier', () => { + it('returns 10^0 for wei', () => { + expect(_getUnitMultiplier('wei')).to.equal(10 ** 0); + }); + + it('returns 10^15 for finney', () => { + expect(_getUnitMultiplier('finney')).to.equal(10 ** 15); + }); + + it('returns 10^18 for ether', () => { + expect(_getUnitMultiplier('ether')).to.equal(10 ** 18); + }); + + it('throws an error on invalid units', () => { + expect(() => _getUnitMultiplier('invalid')).to.throw(/passed to wei formatter/); + }); + }); + + describe('fromWei', () => { + it('formats into ether when nothing specified', () => { + expect(fromWei('1230000000000000000').toString()).to.equal('1.23'); + }); + + it('formats into finney when specified', () => { + expect(fromWei('1230000000000000000', 'finney').toString()).to.equal('1230'); + }); + }); + + describe('toWei', () => { + it('formats from ether when nothing specified', () => { + expect(toWei(1.23).toString()).to.equal('1230000000000000000'); + }); + + it('formats from finney when specified', () => { + expect(toWei(1230, 'finney').toString()).to.equal('1230000000000000000'); + }); + }); +}); diff --git a/js/src/contracts/abi/basiccoin.json b/js/src/contracts/abi/basiccoin.json new file mode 100644 index 0000000000..0bdc66666f --- /dev/null +++ b/js/src/contracts/abi/basiccoin.json @@ -0,0 +1 @@ +[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"base","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"_totalSupply","type":"uint256"},{"name":"_owner","type":"address"}],"type":"constructor"},{"payable":false,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/abi/basiccoinmanager.json b/js/src/contracts/abi/basiccoinmanager.json new file mode 100644 index 0000000000..cafe09735c --- /dev/null +++ b/js/src/contracts/abi/basiccoinmanager.json @@ -0,0 +1 @@ +[{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"countByOwner","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"base","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"get","outputs":[{"name":"coin","type":"address"},{"name":"owner","type":"address"},{"name":"tokenreg","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_totalSupply","type":"uint256"},{"name":"_tla","type":"string"},{"name":"_name","type":"string"},{"name":"_tokenreg","type":"address"}],"name":"deploy","outputs":[{"name":"","type":"bool"}],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"getByOwner","outputs":[{"name":"coin","type":"address"},{"name":"owner","type":"address"},{"name":"tokenreg","type":"address"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"tokenreg","type":"address"},{"indexed":true,"name":"coin","type":"address"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/abi/dappreg.json b/js/src/contracts/abi/dappreg.json new file mode 100644 index 0000000000..f6bec35af1 --- /dev/null +++ b/js/src/contracts/abi/dappreg.json @@ -0,0 +1 @@ +[{"constant":true,"inputs":[{"name":"_id","type":"bytes32"},{"name":"_key","type":"bytes32"}],"name":"meta","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"bytes32"}],"name":"unregister","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"bytes32"}],"name":"get","outputs":[{"name":"id","type":"bytes32"},{"name":"owner","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"bytes32"},{"name":"_key","type":"bytes32"},{"name":"_value","type":"bytes32"}],"name":"setMeta","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"setDappOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"at","outputs":[{"name":"id","type":"bytes32"},{"name":"owner","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"bytes32"}],"name":"register","outputs":[],"payable":true,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"},{"indexed":true,"name":"key","type":"bytes32"},{"indexed":false,"name":"value","type":"bytes32"}],"name":"MetaChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"}],"name":"Registered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"Unregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/abi/eip20.json b/js/src/contracts/abi/eip20.json new file mode 100644 index 0000000000..6937e28c85 --- /dev/null +++ b/js/src/contracts/abi/eip20.json @@ -0,0 +1,163 @@ +[ + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "total", + "type": "uint256" + } + ], + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "remaining", + "type": "uint256" + } + ], + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + } +] diff --git a/js/src/contracts/abi/gavcoin.json b/js/src/contracts/abi/gavcoin.json new file mode 100644 index 0000000000..5170326f5a --- /dev/null +++ b/js/src/contracts/abi/gavcoin.json @@ -0,0 +1 @@ +[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_who","type":"address"},{"name":"_maxPrice","type":"uint256"}],"name":"buyin","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"remaining","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"},{"name":"_units","type":"uint256"}],"name":"refund","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"price","type":"uint256"},{"indexed":true,"name":"amount","type":"uint256"}],"name":"Buyin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"price","type":"uint256"},{"indexed":true,"name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"price","type":"uint256"}],"name":"NewTranch","type":"event"}] diff --git a/js/src/contracts/abi/githubhint.json b/js/src/contracts/abi/githubhint.json new file mode 100644 index 0000000000..bdbc162e4e --- /dev/null +++ b/js/src/contracts/abi/githubhint.json @@ -0,0 +1,81 @@ +[ + { + "constant":false, + "inputs":[ + { + "name":"_content", + "type":"bytes32" + }, + { + "name":"_url", + "type":"string" + } + ], + "name":"hintURL", + "outputs":[ + + ], + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_content", + "type":"bytes32" + }, + { + "name":"_accountSlashRepo", + "type":"string" + }, + { + "name":"_commit", + "type":"bytes20" + } + ], + "name":"hint", + "outputs":[ + + ], + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "name":"", + "type":"bytes32" + } + ], + "name":"entries", + "outputs":[ + { + "name":"accountSlashRepo", + "type":"string" + }, + { + "name":"commit", + "type":"bytes20" + }, + { + "name":"owner", + "type":"address" + } + ], + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_content", + "type":"bytes32" + } + ], + "name":"unhint", + "outputs":[ + + ], + "type":"function" + } +] diff --git a/js/src/contracts/abi/index.js b/js/src/contracts/abi/index.js new file mode 100644 index 0000000000..599f8a13b4 --- /dev/null +++ b/js/src/contracts/abi/index.js @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import basiccoin from './basiccoin.json'; +import basiccoinmanager from './basiccoinmanager.json'; +import dappreg from './dappreg.json'; +import eip20 from './eip20.json'; +import gavcoin from './gavcoin.json'; +import githubhint from './githubhint.json'; +import owned from './owned.json'; +import registry from './registry.json'; +import signaturereg from './signaturereg.json'; +import tokenreg from './tokenreg.json'; + +export { + basiccoin, + basiccoinmanager, + dappreg, + eip20, + gavcoin, + githubhint, + owned, + registry, + signaturereg, + tokenreg +}; diff --git a/js/src/contracts/abi/owned.json b/js/src/contracts/abi/owned.json new file mode 100644 index 0000000000..ccfeed85d0 --- /dev/null +++ b/js/src/contracts/abi/owned.json @@ -0,0 +1 @@ +[{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/abi/registry.json b/js/src/contracts/abi/registry.json new file mode 100644 index 0000000000..f97dc20c72 --- /dev/null +++ b/js/src/contracts/abi/registry.json @@ -0,0 +1 @@ +[{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"confirmReverse","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"},{"name":"_value","type":"bytes32"}],"name":"set","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"drop","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"}],"name":"getAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"setFee","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_to","type":"address"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserved","outputs":[{"name":"reserved","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_who","type":"address"}],"name":"proposeReverse","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"}],"name":"getUint","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"}],"name":"get","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"reverse","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"},{"name":"_value","type":"uint256"}],"name":"setUint","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"removeReverse","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_key","type":"string"},{"name":"_value","type":"address"}],"name":"setAddress","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Drained","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"FeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"}],"name":"Reserved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"Transferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"}],"name":"Dropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"key","type":"string"},{"indexed":false,"name":"plainKey","type":"string"}],"name":"DataChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":true,"name":"reverse","type":"address"}],"name":"ReverseProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":true,"name":"reverse","type":"address"}],"name":"ReverseConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":true,"name":"reverse","type":"address"}],"name":"ReverseRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/abi/signaturereg.json b/js/src/contracts/abi/signaturereg.json new file mode 100644 index 0000000000..a9b109ecd4 --- /dev/null +++ b/js/src/contracts/abi/signaturereg.json @@ -0,0 +1,128 @@ +[ + { + "constant": false, + "inputs": [ + { + "name": "_new", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSignatures", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "drain", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "bytes4" + } + ], + "name": "entries", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_method", + "type": "string" + } + ], + "name": "register", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "type": "function" + }, + { + "inputs": [], + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "creator", + "type": "address" + }, + { + "indexed": true, + "name": "signature", + "type": "bytes4" + }, + { + "indexed": false, + "name": "method", + "type": "string" + } + ], + "name": "Registered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "old", + "type": "address" + }, + { + "indexed": true, + "name": "current", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + } +] diff --git a/js/src/contracts/abi/tokenreg.json b/js/src/contracts/abi/tokenreg.json new file mode 100644 index 0000000000..e56a13eec4 --- /dev/null +++ b/js/src/contracts/abi/tokenreg.json @@ -0,0 +1 @@ +[{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"token","outputs":[{"name":"addr","type":"address"},{"name":"tla","type":"string"},{"name":"base","type":"uint256"},{"name":"name","type":"string"},{"name":"owner","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"setOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_tla","type":"string"},{"name":"_base","type":"uint256"},{"name":"_name","type":"string"}],"name":"register","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"},{"name":"_key","type":"bytes32"}],"name":"meta","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_tla","type":"string"},{"name":"_base","type":"uint256"},{"name":"_name","type":"string"},{"name":"_owner","type":"address"}],"name":"registerAs","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_tla","type":"string"}],"name":"fromTLA","outputs":[{"name":"id","type":"uint256"},{"name":"addr","type":"address"},{"name":"base","type":"uint256"},{"name":"name","type":"string"},{"name":"owner","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"tokenCount","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"unregister","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"fromAddress","outputs":[{"name":"id","type":"uint256"},{"name":"tla","type":"string"},{"name":"base","type":"uint256"},{"name":"name","type":"string"},{"name":"owner","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_key","type":"bytes32"},{"name":"_value","type":"bytes32"}],"name":"setMeta","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tla","type":"string"},{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"Registered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tla","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"Unregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"key","type":"bytes32"},{"indexed":false,"name":"value","type":"bytes32"}],"name":"MetaChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}] diff --git a/js/src/contracts/contracts.js b/js/src/contracts/contracts.js new file mode 100644 index 0000000000..c9d1c2390a --- /dev/null +++ b/js/src/contracts/contracts.js @@ -0,0 +1,58 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import DappReg from './dappreg'; +import Registry from './registry'; +import SignatureReg from './signaturereg'; +import TokenReg from './tokenreg'; + +let instance = null; + +export default class Contracts { + constructor (api) { + instance = this; + + this._api = api; + this._registry = new Registry(api); + this._dappreg = new DappReg(api, this._registry); + this._signaturereg = new SignatureReg(api, this._registry); + this._tokenreg = new TokenReg(api, this._registry); + } + + get registry () { + return this._registry; + } + + get dappReg () { + return this._dappreg; + } + + get signatureReg () { + return this._signaturereg; + } + + get tokenReg () { + return this._tokenreg; + } + + static create (api) { + return new Contracts(api); + } + + static get () { + return instance; + } +} diff --git a/js/src/contracts/dappreg.js b/js/src/contracts/dappreg.js new file mode 100644 index 0000000000..ef07e95c58 --- /dev/null +++ b/js/src/contracts/dappreg.js @@ -0,0 +1,72 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class DappReg { + constructor (api, registry) { + this._api = api; + this._registry = registry; + + this.getInstance(); + } + + getInstance () { + return this._registry.getContractInstance('dappreg'); + } + + count () { + return this.getInstance().then((instance) => { + return instance.count.call(); + }); + } + + at (index) { + return this.getInstance().then((instance) => { + return instance.at.call({}, [index]); + }); + } + + get (id) { + return this.getInstance().then((instance) => { + return instance.get.call({}, [id]); + }); + } + + meta (id, key) { + return this.getInstance().then((instance) => { + return instance.meta.call({}, [id, key]); + }); + } + + getImage (id) { + return this.meta(id, 'IMG'); + } +} diff --git a/js/src/contracts/index.js b/js/src/contracts/index.js new file mode 100644 index 0000000000..075837ce65 --- /dev/null +++ b/js/src/contracts/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './contracts'; diff --git a/js/src/contracts/registry.js b/js/src/contracts/registry.js new file mode 100644 index 0000000000..85b9d6bb51 --- /dev/null +++ b/js/src/contracts/registry.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import * as abis from './abi'; + +export default class Registry { + constructor (api) { + this._api = api; + this._contracts = []; + this._instance = null; + + this.getInstance(); + } + + getInstance () { + return new Promise((resolve, reject) => { + if (this._instance) { + resolve(this._instance); + return; + } + + this._api.ethcore + .registryAddress() + .then((address) => { + this._instance = this._api.newContract(abis.registry, address).instance; + resolve(this._instance); + }) + .catch(reject); + }); + } + + getContractInstance (_name) { + const name = _name.toLowerCase(); + + return new Promise((resolve, reject) => { + if (this._contracts[name]) { + resolve(this._contracts[name]); + return; + } + + this + .lookupAddress(name) + .then((address) => { + this._contracts[name] = this._api.newContract(abis[name], address).instance; + resolve(this._contracts[name]); + }) + .catch(reject); + }); + } + + lookupAddress (_name) { + const name = _name.toLowerCase(); + const sha3 = this._api.util.sha3(name); + + return this.getInstance().then((instance) => { + return instance.getAddress.call({}, [sha3, 'A']); + }) + .then((address) => { + console.log('lookupAddress', name, sha3, address); + return address; + }); + } +} diff --git a/js/src/contracts/signaturereg.js b/js/src/contracts/signaturereg.js new file mode 100644 index 0000000000..459f165b1d --- /dev/null +++ b/js/src/contracts/signaturereg.js @@ -0,0 +1,34 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class SignatureReg { + constructor (api, registry) { + this._api = api; + this._registry = registry; + + this.getInstance(); + } + + getInstance () { + return this._registry.getContractInstance('signaturereg'); + } + + lookup (signature) { + return this.getInstance().then((instance) => { + return instance.entries.call({}, [signature]); + }); + } +} diff --git a/js/src/contracts/tokenreg.js b/js/src/contracts/tokenreg.js new file mode 100644 index 0000000000..78bd5e4d91 --- /dev/null +++ b/js/src/contracts/tokenreg.js @@ -0,0 +1,40 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default class TokenReg { + constructor (api, registry) { + this._api = api; + this._registry = registry; + + this.getInstance(); + } + + getInstance () { + return this._registry.getContractInstance('tokenreg'); + } + + tokenCount () { + return this.getInstance().then((instance) => { + return instance.tokenCount.call(); + }); + } + + token (index) { + return this.getInstance().then((instance) => { + return instance.token.call({}, [index]); + }); + } +} diff --git a/js/src/dapps/basiccoin.html b/js/src/dapps/basiccoin.html new file mode 100644 index 0000000000..9bcc368f38 --- /dev/null +++ b/js/src/dapps/basiccoin.html @@ -0,0 +1,16 @@ + + + + + + + Basic Token Deployment + + +

    + + + + + + diff --git a/js/src/dapps/basiccoin.js b/js/src/dapps/basiccoin.js new file mode 100644 index 0000000000..e02990d14e --- /dev/null +++ b/js/src/dapps/basiccoin.js @@ -0,0 +1,47 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ReactDOM from 'react-dom'; +import React from 'react'; +import { createHashHistory } from 'history'; +import { Redirect, Router, Route, useRouterHistory } from 'react-router'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import Deploy from './basiccoin/Deploy'; +import Application from './basiccoin/Application'; +import Overview from './basiccoin/Overview'; +import Transfer from './basiccoin/Transfer'; + +const routerHistory = useRouterHistory(createHashHistory)({}); + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './basiccoin.html'; + +ReactDOM.render( + + + + + + + + , + document.querySelector('#container') +); diff --git a/js/src/dapps/basiccoin/AddressSelect/addressSelect.css b/js/src/dapps/basiccoin/AddressSelect/addressSelect.css new file mode 100644 index 0000000000..ddfd334e8b --- /dev/null +++ b/js/src/dapps/basiccoin/AddressSelect/addressSelect.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.iconMenu { +} + +.iconMenu option { + padding-left: 30px; +} diff --git a/js/src/dapps/basiccoin/AddressSelect/addressSelect.js b/js/src/dapps/basiccoin/AddressSelect/addressSelect.js new file mode 100644 index 0000000000..529e7753d9 --- /dev/null +++ b/js/src/dapps/basiccoin/AddressSelect/addressSelect.js @@ -0,0 +1,93 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './addressSelect.css'; + +export default class AddressSelect extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired + } + + static propTypes = { + addresses: PropTypes.array.isRequired, + onChange: PropTypes.func.isRequired + } + + state = { + selected: null + } + + componentDidMount () { + const { addresses } = this.props; + + this.onChange({ + target: { + value: addresses[0] + } + }); + } + + componentWillReceiveProps (newProps) { + const { addresses } = this.props; + let changed = addresses.length !== newProps.addresses.length; + + if (!changed) { + changed = addresses.filter((address, index) => newProps.addresses[index] !== address).length; + } + + if (changed) { + this.onChange({ target: { value: newProps.addresses[0] } }); + } + } + + render () { + const { addresses } = this.props; + const { selectedAddress } = this.state; + const style = { + background: `rgba(255, 255, 255, 0.75) url(${api.util.createIdentityImg(selectedAddress, 3)}) no-repeat 98% center` + }; + + return ( + + ); + } + + renderOption = (address) => { + const { accounts } = this.context; + const account = accounts[address]; + + return ( + + ); + } + + onChange = (event) => { + this.setState({ selectedAddress: event.target.value }); + this.props.onChange(event); + } +} diff --git a/js/src/dapps/basiccoin/AddressSelect/index.js b/js/src/dapps/basiccoin/AddressSelect/index.js new file mode 100644 index 0000000000..58059cd2e1 --- /dev/null +++ b/js/src/dapps/basiccoin/AddressSelect/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './addressSelect'; diff --git a/js/src/dapps/basiccoin/Application/Header/header.css b/js/src/dapps/basiccoin/Application/Header/header.css new file mode 100644 index 0000000000..5416d7c05c --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Header/header.css @@ -0,0 +1,71 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.header { +} + +.titlebar { + padding: 0.5em 1em; + margin: 0; + color: white; +} + +.navigation { + table-layout: fixed; + width: 100%; + border-spacing: 0.25em; + border-collapse: separate; + border-color: white; + background: white; +} + +.navigation tr { + height: 10em; +} + +.title { + font-size: 1.25em; + margin-bottom: 0.25em; +} + +.byline { + font-size: 1em; + opacity: 0.75; + margin-bottom: 0.25em; +} + +.description { + font-size: 0.5em; + opacity: 0.5; + line-height: 1.5em; +} + +.navNext, +.navCurrent { + color: white; + padding: 1em 2em; + vertical-align: middle; +} + +.navNext:hover { + cursor: pointer; + opacity: 0.8; +} + +.navCurrent { + font-size: 2em; +} diff --git a/js/src/dapps/basiccoin/Application/Header/header.js b/js/src/dapps/basiccoin/Application/Header/header.js new file mode 100644 index 0000000000..90fa909ef0 --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Header/header.js @@ -0,0 +1,80 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import PAGES from '../pages'; +import styles from './header.css'; + +export default class Header extends Component { + static contextTypes = { + router: PropTypes.object.isRequired + } + + render () { + const path = (window.location.hash || '').split('?')[0].split('/')[1]; + const offset = PAGES.findIndex((header) => header.path === path); + + return ( +
    + + + + { this.renderHeader(0, offset) } + { this.renderHeader(1, offset) } + + + { this.renderHeader(2, offset) } + + +
    +
    + ); + } + + renderHeader (position, offset) { + const index = (position + offset) % PAGES.length; + const page = PAGES[index]; + const background = `rgba(102, 34, 34, ${1 - (0.1 * position)})`; + + return ( + +
    + { page.title } +
    +
    + { page.byline } +
    +
    + { position ? null : page.description } +
    + + ); + } + + onNavigate = (route) => { + const { router } = this.context; + + return (event) => { + router.push(`/${route}`); + }; + } +} diff --git a/js/src/dapps/basiccoin/Application/Header/index.js b/js/src/dapps/basiccoin/Application/Header/index.js new file mode 100644 index 0000000000..4a51219067 --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Header/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './header'; diff --git a/js/src/dapps/basiccoin/Application/Loading/index.js b/js/src/dapps/basiccoin/Application/Loading/index.js new file mode 100644 index 0000000000..0468cab37d --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Loading/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './loading'; diff --git a/js/src/dapps/basiccoin/Application/Loading/loading.css b/js/src/dapps/basiccoin/Application/Loading/loading.css new file mode 100644 index 0000000000..915cc77dc2 --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Loading/loading.css @@ -0,0 +1,24 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.body { + width: 100%; + text-align: center; + padding-top: 5em; + font-size: 2em; + color: #999; +} diff --git a/js/src/dapps/basiccoin/Application/Loading/loading.js b/js/src/dapps/basiccoin/Application/Loading/loading.js new file mode 100644 index 0000000000..e698a0e80b --- /dev/null +++ b/js/src/dapps/basiccoin/Application/Loading/loading.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import styles from './loading.css'; + +export default class Loading extends Component { + render () { + return ( +
    + Attaching to contract ... +
    + ); + } +} diff --git a/js/src/dapps/basiccoin/Application/application.css b/js/src/dapps/basiccoin/Application/application.css new file mode 100644 index 0000000000..97b66be875 --- /dev/null +++ b/js/src/dapps/basiccoin/Application/application.css @@ -0,0 +1,28 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.container { + color: #444; + font-family: 'Roboto'; + vertical-align: middle; + min-height: 100vh; + position:relative; +} + +.body { + padding: 0 0.25em; +} diff --git a/js/src/dapps/basiccoin/Application/application.js b/js/src/dapps/basiccoin/Application/application.js new file mode 100644 index 0000000000..1e268e7203 --- /dev/null +++ b/js/src/dapps/basiccoin/Application/application.js @@ -0,0 +1,107 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import { attachInstances } from '../services'; + +import Header from './Header'; +import Loading from './Loading'; + +import styles from './application.css'; + +export default class Application extends Component { + static childContextTypes = { + accounts: PropTypes.object, + managerInstance: PropTypes.object, + registryInstance: PropTypes.object, + tokenregInstance: PropTypes.object + } + + static propTypes = { + children: PropTypes.node.isRequired + } + + state = { + accounts: null, + loading: true, + managerInstance: null, + registryInstance: null, + tokenregInstance: null + } + + componentDidMount () { + this.attachInstance(); + } + + render () { + const { children } = this.props; + const { loading } = this.state; + + if (loading) { + return ( + + ); + } + + return ( +
    +
    +
    + { children } +
    +
    + ); + } + + getChildContext () { + const { accounts, managerInstance, registryInstance, tokenregInstance } = this.state; + + return { + accounts, + managerInstance, + registryInstance, + tokenregInstance + }; + } + + attachInstance () { + Promise + .all([ + attachInstances(), + api.personal.accountsInfo() + ]) + .then(([{ managerInstance, registryInstance, tokenregInstance }, accountsInfo]) => { + this.setState({ + loading: false, + managerInstance, + registryInstance, + tokenregInstance, + accounts: Object + .keys(accountsInfo) + .filter((address) => !accountsInfo[address].meta.deleted) + .sort((a, b) => { + return (accountsInfo[b].uuid || '').localeCompare(accountsInfo[a].uuid || ''); + }) + .reduce((accounts, address) => { + accounts[address] = Object.assign(accountsInfo[address], { address }); + return accounts; + }, {}) + }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Application/index.js b/js/src/dapps/basiccoin/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/basiccoin/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/basiccoin/Application/pages.js b/js/src/dapps/basiccoin/Application/pages.js new file mode 100644 index 0000000000..5ab422ee4a --- /dev/null +++ b/js/src/dapps/basiccoin/Application/pages.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const PAGES = [ + { + path: 'overview', + title: 'Overview', + byline: 'Display all the current information relating to your own deployed tokens', + description: 'View the total number of tokens in circulation, the number of different tokens associated with your accounts as well as the types of tokens created by you. In addition view the balances associated with your accounts in reltion to the total in circulation.' + }, + { + path: 'transfer', + title: 'Transfer', + byline: 'Send tokens associated with your accounts to other addresses', + description: 'Send any tokens created byt you or received from others. In addition have a bird\'s eye view of all events relating to token transfers, be it yours, created byt others, either local or globally available on the network.' + }, + { + path: 'deploy', + title: 'Deploy', + byline: 'Deploy a new token to the network', + description: 'Token registration has never been this easy. Select the name for your token, the TLA and the number of tokens in circulation. Start sending the tokens to contacts right from this interface. Optionally you can register the token with the Token Registry which would allow you to transaction in tokens from anywhere these transactions are allowed.' + } +]; + +export default PAGES; diff --git a/js/src/dapps/basiccoin/Container/container.css b/js/src/dapps/basiccoin/Container/container.css new file mode 100644 index 0000000000..7cc00e11e2 --- /dev/null +++ b/js/src/dapps/basiccoin/Container/container.css @@ -0,0 +1,26 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.content { + padding: 4em; + margin-bottom: 0.25em; + text-align: center; +} + +.content:nth-child(odd) { + background: rgba(102, 34, 34, 0.075); +} diff --git a/js/src/dapps/basiccoin/Container/container.js b/js/src/dapps/basiccoin/Container/container.js new file mode 100644 index 0000000000..82805e71b5 --- /dev/null +++ b/js/src/dapps/basiccoin/Container/container.js @@ -0,0 +1,37 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import styles from './container.css'; + +export default class Container extends Component { + static propTypes = { + className: PropTypes.string, + children: PropTypes.node.isRequired + } + + render () { + const { className, children } = this.props; + const classes = `${styles.content} ${className}`; + + return ( +
    + { children } +
    + ); + } +} diff --git a/js/src/dapps/basiccoin/Container/index.js b/js/src/dapps/basiccoin/Container/index.js new file mode 100644 index 0000000000..87fbc567ef --- /dev/null +++ b/js/src/dapps/basiccoin/Container/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './container'; diff --git a/js/src/dapps/basiccoin/Deploy/Deployment/deployment.css b/js/src/dapps/basiccoin/Deploy/Deployment/deployment.css new file mode 100644 index 0000000000..f24729cf78 --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Deployment/deployment.css @@ -0,0 +1,19 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +@import '../../_form.css'; +@import '../../_status.css'; diff --git a/js/src/dapps/basiccoin/Deploy/Deployment/deployment.js b/js/src/dapps/basiccoin/Deploy/Deployment/deployment.js new file mode 100644 index 0000000000..f9232789b1 --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Deployment/deployment.js @@ -0,0 +1,320 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../../parity'; +import AddressSelect from '../../AddressSelect'; +import Container from '../../Container'; +import styles from './deployment.css'; + +const ERRORS = { + name: 'specify a valid name >2 & <32 characters', + tla: 'specify a valid TLA, 3 characters in length', + usedtla: 'the TLA used is not available for registration', + supply: 'supply needs to be valid >999 & <1 trillion' +}; + +export default class Deployment extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired, + router: PropTypes.object.isRequired, + managerInstance: PropTypes.object.isRequired, + registryInstance: PropTypes.object.isRequired, + tokenregInstance: PropTypes.object.isRequired + } + + state = { + base: null, + deployBusy: false, + deployDone: false, + deployError: null, + deployState: null, + globalReg: false, + globalFee: 0, + globalFeeText: '1.000', + fromAddress: null, + name: '', + nameError: ERRORS.name, + tla: '', + tlaError: ERRORS.tla, + totalSupply: '5000000', + totalSupplyError: null, + signerRequestId: null, + txHash: null + } + + componentDidMount () { + const { managerInstance, tokenregInstance } = this.context; + + Promise + .all([ + managerInstance.base.call(), + tokenregInstance.fee.call() + ]) + .then(([base, globalFee]) => { + this.setState({ + base, + baseText: base.toFormat(0), + globalFee, + globalFeeText: api.util.fromWei(globalFee).toFormat(3) + }); + }); + } + + render () { + const { deployBusy } = this.state; + + return deployBusy + ? this.renderDeploying() + : this.renderForm(); + } + + renderDeploying () { + const { deployDone, deployError, deployState } = this.state; + + if (deployDone) { + return ( + +
    + Your token has been deployed +
    +
    + ); + } + + if (deployError) { + return ( + +
    + Your deployment has encountered an error +
    +
    + { deployError } +
    +
    + ); + } + + return ( + +
    + Your token is currently being deployed to the network +
    +
    + { deployState } +
    +
    + ); + } + + renderForm () { + const { accounts } = this.context; + const { baseText, name, nameError, tla, tlaError, totalSupply, totalSupplyError } = this.state; + const hasError = !!(nameError || tlaError || totalSupplyError); + const error = `${styles.input} ${styles.error}`; + const addresses = Object.keys(accounts).filter((address) => accounts[address].uuid); + + //
    + // + // + //
    + // register on network (fee: { globalFeeText }ETH) + //
    + //
    + + return ( + +
    +
    + + +
    + the owner account to eploy from +
    +
    +
    + + +
    + { nameError || 'an identifying name for the token' } +
    +
    +
    + + +
    + { tlaError || 'unique network acronym for this token' } +
    +
    +
    + + +
    + { totalSupplyError || `number of tokens (base: ${baseText})` } +
    +
    +
    +
    +
    +
    + ); + } + + onChangeFrom = (event) => { + const fromAddress = event.target.value; + + this.setState({ fromAddress }); + } + + onChangeName = (event) => { + const name = event.target.value; + const nameError = name && (name.length > 2) && (name.length < 32) + ? null + : ERRORS.name; + + this.setState({ name, nameError }); + } + + onChangeRegistrar = (event) => { + this.setState({ globalReg: event.target.value === 'yes' }, this.testTlaAvailability); + } + + onChangeSupply = (event) => { + const totalSupply = parseInt(event.target.value, 10); + const totalSupplyError = isFinite(totalSupply) && totalSupply > 999 + ? null + : ERRORS.supply; + + this.setState({ totalSupply, totalSupplyError }); + } + + onChangeTla = (event) => { + const _tla = event.target.value; + const tla = _tla && (_tla.length > 3) + ? _tla.substr(0, 3) + : _tla; + const tlaError = tla && (tla.length === 3) + ? null + : ERRORS.tla; + + this.setState({ tla, tlaError }, this.testTlaAvailability); + } + + testTlaAvailability = () => { + const { registryInstance, tokenregInstance } = this.context; + const { globalReg, tla, tlaError } = this.state; + const tokenreg = globalReg ? tokenregInstance : registryInstance; + + if (tlaError && tlaError !== ERRORS.usedtla) { + return; + } + + tokenreg + .fromTLA.call({}, [tla]) + .then(([id, addr, base, name, owner]) => { + if (owner !== '0x0000000000000000000000000000000000000000') { + this.setState({ tlaError: ERRORS.usedtla }); + } else if (tlaError === ERRORS.usedtla) { + this.setState({ tlaError: null }); + } + }) + .catch((error) => { + console.log('testTlaAvailability', error); + }); + } + + onDeploy = () => { + const { managerInstance, registryInstance, tokenregInstance } = this.context; + const { base, deployBusy, fromAddress, globalReg, globalFee, name, nameError, tla, tlaError, totalSupply, totalSupplyError } = this.state; + const hasError = !!(nameError || tlaError || totalSupplyError); + + if (hasError || deployBusy) { + return; + } + + const tokenreg = (globalReg ? tokenregInstance : registryInstance).address; + const values = [base.mul(totalSupply), tla, name, tokenreg]; + const options = { + from: fromAddress, + value: globalReg ? globalFee : 0 + }; + + this.setState({ deployBusy: true, deployState: 'Estimating gas for the transaction' }); + + managerInstance + .deploy.estimateGas(options, values) + .then((gas) => { + this.setState({ deployState: 'Gas estimated, Posting transaction to the network' }); + + const gasPassed = gas.mul(1.2); + options.gas = gasPassed.toFixed(0); + console.log(`gas estimated at ${gas.toFormat(0)}, passing ${gasPassed.toFormat(0)}`); + + return managerInstance.deploy.postTransaction(options, values); + }) + .then((signerRequestId) => { + this.setState({ signerRequestId, deployState: 'Transaction posted, Waiting for transaction authorization' }); + + return api.pollMethod('eth_checkRequest', signerRequestId); + }) + .then((txHash) => { + this.setState({ txHash, deployState: 'Transaction authorized, Waiting for network confirmations' }); + + return api.pollMethod('eth_getTransactionReceipt', txHash, (receipt) => { + if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) { + return false; + } + + return true; + }); + }) + .then((txReceipt) => { + this.setState({ txReceipt, deployDone: true, deployState: 'Network confirmed, Received transaction receipt' }); + }) + .catch((error) => { + console.error('onDeploy', error); + this.setState({ deployError: error.message }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Deploy/Deployment/index.js b/js/src/dapps/basiccoin/Deploy/Deployment/index.js new file mode 100644 index 0000000000..927cff5691 --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Deployment/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './deployment'; diff --git a/js/src/dapps/basiccoin/Deploy/Event/event.css b/js/src/dapps/basiccoin/Deploy/Event/event.css new file mode 100644 index 0000000000..52eada915c --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Event/event.css @@ -0,0 +1,58 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +a.link, a.link:visited { + text-decoration: none; +} + +a.link:hover { + text-decoration: underline; +} + +a.link, a.link:hover, a.link:visited { + color: #822; + cursor: pointer; +} + +.mined { +} + +.pending { + opacity: 0.5; +} + +.mined td, +.pending td { + padding: 0.5em 1em; + line-height: 24px; +} + +.blocknumber { + text-align: right; +} + +.address { + text-align: left; +} + +.description { + text-align: left; +} + +.center { + text-align: right; +} diff --git a/js/src/dapps/basiccoin/Deploy/Event/event.js b/js/src/dapps/basiccoin/Deploy/Event/event.js new file mode 100644 index 0000000000..889822208d --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Event/event.js @@ -0,0 +1,103 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import moment from 'moment'; +import React, { Component, PropTypes } from 'react'; + +import { api } from '../../parity'; +import { getCoin, txLink } from '../../services'; +import IdentityIcon from '../../IdentityIcon'; + +import styles from './event.css'; + +export default class Event extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired, + registryInstance: PropTypes.object.isRequired, + tokenregInstance: PropTypes.object.isRequired + } + + static propTypes = { + event: PropTypes.object.isRequired + } + + state = { + block: null, + coin: {} + } + + componentDidMount () { + this.lookup(); + } + + render () { + const { event } = this.props; + const { block, coin } = this.state; + const isPending = event.type === 'pending'; + + return ( + + +
    { (isPending || !block) ? '' : moment(block.timestamp).fromNow() }
    +
    { isPending ? 'Pending' : event.blockNumber.toFormat() }
    + + { event.event } + +
    { isPending ? '' : coin.tla }
    +
    { isPending ? '' : coin.name }
    + + + { this.renderAddress(event.params.owner) } +
    + + { isPending || !coin.isGlobal ? '' : 'global' } + + ); + } + + renderAddress (address) { + const { accounts } = this.context; + const account = accounts[address]; + + return ( +
    + + { account ? account.name : address } +
    + ); + } + + renderHash (hash) { + return `${hash.substr(0, 10)}...${hash.slice(-10)}`; + } + + lookup () { + const { event } = this.props; + + if (event.type === 'pending') { + return; + } + + Promise + .all([ + api.eth.getBlockByNumber(event.blockNumber), + getCoin(event.params.tokenreg, event.params.coin) + ]) + .then(([block, coin]) => { + this.setState({ block, coin }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Deploy/Event/index.js b/js/src/dapps/basiccoin/Deploy/Event/index.js new file mode 100644 index 0000000000..0925882d3e --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Event/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './event'; diff --git a/js/src/dapps/basiccoin/Deploy/Events/events.css b/js/src/dapps/basiccoin/Deploy/Events/events.css new file mode 100644 index 0000000000..3cefaacb0b --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Events/events.css @@ -0,0 +1,33 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.statusHeader { + font-size: 1.25em; +} + +.eventList { + border: none; + margin: 0 auto; + border-collapse: collapse; +} + +.eventList tr:nth-child(even) { + background: rgba(102, 34, 34, 0.075); +} + +.eventList tr:nth-child(odd) { +} diff --git a/js/src/dapps/basiccoin/Deploy/Events/events.js b/js/src/dapps/basiccoin/Deploy/Events/events.js new file mode 100644 index 0000000000..a21672a8ef --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Events/events.js @@ -0,0 +1,141 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../../parity'; +import Container from '../../Container'; +import Event from '../Event'; + +import styles from './events.css'; + +export default class Events extends Component { + static contextTypes = { + managerInstance: PropTypes.object.isRequired + } + + state = { + blocks: {}, + loading: true, + events: [], + minedEvents: [], + pendingEvents: [] + } + + componentDidMount () { + const { managerInstance } = this.context; + const options = { + fromBlock: 0, + toBlock: 'pending', + limit: 50 + }; + + managerInstance.Created + .subscribe(options, this.receiveCreatedEvents) + .then((subscriptionIdCreated) => { + this.setState({ subscriptionIdCreated }); + }); + } + + componentWillUnmount () { + const { managerInstance } = this.context; + const { subscriptionIdCreated } = this.state; + + managerInstance.Created.unsubscribe(subscriptionIdCreated); + } + + render () { + const { loading } = this.state; + + return ( + + { loading ? this.renderLoading() : this.renderEvents() } + + ); + } + + renderEvents () { + const { events } = this.state; + + return events.length + ? this.renderEventsList() + : this.renderEventsNone(); + } + + renderEventsNone () { + return ( +
    + There are currently no events available +
    + ); + } + + renderEventsList () { + const { events } = this.state; + const rows = events.map((event) => { + return ( + + ); + }); + + return ( + + + { rows } + +
    + ); + } + + renderLoading () { + return ( +
    + Loading events +
    + ); + } + + logToEvent = (log) => { + log.key = api.util.sha3(JSON.stringify(log)); + + return log; + } + + receiveCreatedEvents = (error, logs) => { + if (error) { + console.error('receiveLogs', error); + return; + } + + const { minedEvents, pendingEvents } = this.state; + const minedNew = logs + .filter((log) => log.type === 'mined') + .map(this.logToEvent) + .filter((log) => !minedEvents.find((event) => event.transactionHash === log.transactionHash)) + .reverse() + .concat(minedEvents); + const pendingNew = logs + .filter((log) => log.type === 'pending') + .map(this.logToEvent) + .filter((log) => !pendingEvents.find((event) => event.transactionHash === log.transactionHash)) + .reverse() + .concat(pendingEvents) + .filter((log) => !minedNew.find((event) => event.transactionHash === log.transactionHash)); + const events = [].concat(pendingNew).concat(minedNew); + + this.setState({ loading: false, events, minedEvents: minedNew, pendingEvents: pendingNew }); + } +} diff --git a/js/src/dapps/basiccoin/Deploy/Events/index.js b/js/src/dapps/basiccoin/Deploy/Events/index.js new file mode 100644 index 0000000000..88ad6d407c --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/Events/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './events'; diff --git a/js/src/dapps/basiccoin/Deploy/deploy.js b/js/src/dapps/basiccoin/Deploy/deploy.js new file mode 100644 index 0000000000..34c7eed8a3 --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/deploy.js @@ -0,0 +1,31 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import Deployment from './Deployment'; +import Events from './Events'; + +export default class Deploy extends Component { + render () { + return ( +
    + + +
    + ); + } +} diff --git a/js/src/dapps/basiccoin/Deploy/index.js b/js/src/dapps/basiccoin/Deploy/index.js new file mode 100644 index 0000000000..53b4dbcfe5 --- /dev/null +++ b/js/src/dapps/basiccoin/Deploy/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './deploy'; diff --git a/js/src/dapps/basiccoin/IdentityIcon/identityIcon.css b/js/src/dapps/basiccoin/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..6abbcf808b --- /dev/null +++ b/js/src/dapps/basiccoin/IdentityIcon/identityIcon.css @@ -0,0 +1,22 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 24px; + height: 24px; + margin: 0 0.5em -4px 0; +} diff --git a/js/src/dapps/basiccoin/IdentityIcon/identityIcon.js b/js/src/dapps/basiccoin/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..ee1374f7ec --- /dev/null +++ b/js/src/dapps/basiccoin/IdentityIcon/identityIcon.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired, + className: PropTypes.string + } + + render () { + const { address, className } = this.props; + const classes = `${styles.icon} ${className}`; + + return ( + + ); + } +} diff --git a/js/src/dapps/basiccoin/IdentityIcon/index.js b/js/src/dapps/basiccoin/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/basiccoin/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/basiccoin/Overview/Owner/index.js b/js/src/dapps/basiccoin/Overview/Owner/index.js new file mode 100644 index 0000000000..4f38b38b9c --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Owner/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './owner'; diff --git a/js/src/dapps/basiccoin/Overview/Owner/owner.css b/js/src/dapps/basiccoin/Overview/Owner/owner.css new file mode 100644 index 0000000000..13e89d0612 --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Owner/owner.css @@ -0,0 +1,48 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.info { +} + +.owner { + vertical-align: top; + text-align: right; +} + +.owner>div { + border-radius: 1px; + padding: 1em 2em; + white-space: nowrap; +} + +.tokens { + text-align: left; +} + +.tokens>div { + border-radius: 1px; + background: #988; + padding: 1em; + margin: 0 0 0.25em 0.25em; + display: inline-block; + white-space: nowrap; + color: white; +} + +.icon { + margin: 0 0 -4px 1em; +} diff --git a/js/src/dapps/basiccoin/Overview/Owner/owner.js b/js/src/dapps/basiccoin/Overview/Owner/owner.js new file mode 100644 index 0000000000..cc30036937 --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Owner/owner.js @@ -0,0 +1,74 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import IdentityIcon from '../../IdentityIcon'; +import Token from '../Token'; +import styles from './owner.css'; + +export default class Owner extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired, + managerInstance: PropTypes.object.isRequired + } + + static propTypes = { + address: PropTypes.string.isRequired, + tokens: PropTypes.array.isRequired + } + + state = { + tokens: [] + } + + render () { + const { accounts } = this.context; + const { address, tokens } = this.props; + + if (!tokens.length) { + return null; + } + + return ( + + +
    + { accounts[address].name } + +
    + + + { this.renderTokens() } + + + ); + } + + renderTokens () { + const { tokens } = this.props; + + return tokens.map((token) => ( +
    + +
    + )); + } +} diff --git a/js/src/dapps/basiccoin/Overview/Token/index.js b/js/src/dapps/basiccoin/Overview/Token/index.js new file mode 100644 index 0000000000..4b822b4bdf --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Token/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './token'; diff --git a/js/src/dapps/basiccoin/Overview/Token/token.css b/js/src/dapps/basiccoin/Overview/Token/token.css new file mode 100644 index 0000000000..5324aa7c5a --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Token/token.css @@ -0,0 +1,53 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.info { +} + +.info>div { + display: inline-block; + padding: 0.25em 0.5em; + vertical-align: middle; +} + +.address { +} + +.tla { + background: #766; + border-radius: 1px; +} + +.name { +} + +.supply { +} + +.supply div { + display: block; + text-align: center; +} + +.supply .info { + font-size: 0.75em; + opacity: 0.75; +} + +.global { + font-size: 0.75em; +} diff --git a/js/src/dapps/basiccoin/Overview/Token/token.js b/js/src/dapps/basiccoin/Overview/Token/token.js new file mode 100644 index 0000000000..b0d4a965a6 --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/Token/token.js @@ -0,0 +1,68 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { totalSupply, getCoin } from '../../services'; +import styles from './token.css'; + +export default class Token extends Component { + static propTypes = { + address: PropTypes.string.isRequired, + tokenreg: PropTypes.string.isRequired + } + + state = { + coin: null, + totalSupply: null + } + + componentDidMount () { + this.lookupToken(); + } + + render () { + const { coin, totalSupply } = this.state; + + if (!coin) { + return null; + } + + return ( +
    +
    { coin.tla }
    +
    { coin.name }
    +
    +
    { totalSupply.div(1000000).toFormat(0) }
    +
    total supply
    +
    +
    + ); + } + + lookupToken () { + const { address, tokenreg } = this.props; + + Promise + .all([ + getCoin(tokenreg, address), + totalSupply(address) + ]) + .then(([coin, totalSupply]) => { + this.setState({ coin, totalSupply }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Overview/index.js b/js/src/dapps/basiccoin/Overview/index.js new file mode 100644 index 0000000000..d61fb3fb44 --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './overview'; diff --git a/js/src/dapps/basiccoin/Overview/overview.css b/js/src/dapps/basiccoin/Overview/overview.css new file mode 100644 index 0000000000..9757a81458 --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/overview.css @@ -0,0 +1,26 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +@import '../_status.css'; + +.body { +} + +.ownerTable { + margin: 0 auto; + border-collapse: collapse; +} diff --git a/js/src/dapps/basiccoin/Overview/overview.js b/js/src/dapps/basiccoin/Overview/overview.js new file mode 100644 index 0000000000..46831d782f --- /dev/null +++ b/js/src/dapps/basiccoin/Overview/overview.js @@ -0,0 +1,107 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import { loadOwnedTokens } from '../services'; +import Container from '../Container'; +import Owner from './Owner'; + +import styles from './overview.css'; + +export default class Overview extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired, + managerInstance: PropTypes.object.isRequired + } + + state = { + loading: true, + total: new BigNumber(0), + tokenOwners: [] + } + + componentDidMount () { + this.loadOwners(); + } + + render () { + const { loading } = this.state; + + return ( + + { loading ? this.renderLoading() : this.renderBody() } + + ); + } + + renderLoading () { + return ( +
    + Loading tokens +
    + ); + } + + renderBody () { + const { total } = this.state; + let owners = null; + + if (total.gt(0)) { + owners = ( + + + { this.renderOwners() } + +
    + ); + } + + return ( +
    +
    + You have { total.toFormat(0) } tokens created by your accounts +
    + { owners } +
    + ); + } + + renderOwners () { + const { tokens } = this.state; + + return Object.keys(tokens).map((address) => ( + + )); + } + + loadOwners () { + const { accounts } = this.context; + const addresses = Object + .values(accounts) + .filter((account) => account.uuid) + .map((account) => account.address); + + loadOwnedTokens(addresses) + .then(({ tokens, total }) => { + this.setState({ tokens, total, loading: false }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Transfer/Event/event.js b/js/src/dapps/basiccoin/Transfer/Event/event.js new file mode 100644 index 0000000000..190035b1d4 --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Event/event.js @@ -0,0 +1,106 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +// TODO: This is a copy & paste for Deploy/Event -> render() different. Not very DRY +import moment from 'moment'; +import React, { Component, PropTypes } from 'react'; + +import { api } from '../../parity'; +import { txLink } from '../../services'; +import IdentityIcon from '../../IdentityIcon'; +import styles from '../../Deploy/Event/event.css'; + +export default class Event extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired, + registryInstance: PropTypes.object.isRequired, + tokenregInstance: PropTypes.object.isRequired + } + + static propTypes = { + event: PropTypes.object.isRequired, + token: PropTypes.object.isRequired + } + + state = { + block: null + } + + componentDidMount () { + this.lookup(); + } + + render () { + const { event, token } = this.props; + const { block } = this.state; + const isPending = event.type === 'pending'; + + return ( + + +
    { (isPending || !block) ? '' : moment(block.timestamp).fromNow() }
    +
    { isPending ? 'Pending' : event.blockNumber.toFormat() }
    + + { event.event } + +
    { isPending ? '' : token.coin.tla }
    +
    { isPending ? '' : token.coin.name }
    + + + { this.renderAddress(event.params.from) } + + +
    { event.params.value.div(1000000).toFormat(6) }
    +
    + + + + { this.renderAddress(event.params.to) } + + + ); + } + + renderAddress (address) { + const { accounts } = this.context; + const account = accounts[address]; + + return ( +
    + + { account ? account.name : address } +
    + ); + } + + renderHash (hash) { + return `${hash.substr(0, 10)}...${hash.slice(-10)}`; + } + + lookup () { + const { event } = this.props; + + if (event.type === 'pending') { + return; + } + + api.eth + .getBlockByNumber(event.blockNumber) + .then((block) => { + this.setState({ block }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Transfer/Event/index.js b/js/src/dapps/basiccoin/Transfer/Event/index.js new file mode 100644 index 0000000000..0925882d3e --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Event/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './event'; diff --git a/js/src/dapps/basiccoin/Transfer/Events/events.js b/js/src/dapps/basiccoin/Transfer/Events/events.js new file mode 100644 index 0000000000..dcead03bb7 --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Events/events.js @@ -0,0 +1,145 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import { api } from '../../parity'; +import { loadAllTokens, subscribeEvents, unsubscribeEvents } from '../../services'; +import Container from '../../Container'; +import Event from '../Event'; + +import styles from '../../Deploy/Events/events.css'; + +export default class Events extends Component { + state = { + subscriptionId: 0, + loading: true, + events: [], + pendingEvents: [], + minedEvents: [], + tokens: [] + } + + componentDidMount () { + loadAllTokens() + .then((tokens) => { + const addresses = tokens.map((token) => token.address); + this.setState({ tokens }); + return subscribeEvents(addresses, this.eventCallback); + }) + .then((subscriptionId) => { + this.setState({ subscriptionId, loading: false }); + }) + .catch((error) => { + console.error('componentDidMount', error); + }); + } + + componentWillUnmount () { + const { subscriptionId } = this.state; + + if (subscriptionId) { + unsubscribeEvents(subscriptionId); + } + } + + render () { + const { loading } = this.state; + + return ( + + { loading ? this.renderLoading() : this.renderEvents() } + + ); + } + + renderLoading () { + return ( +
    + Attaching events +
    + ); + } + + renderEvents () { + const { events } = this.state; + + return events.length + ? this.renderEventsList() + : this.renderEventsNone(); + } + + renderEventsNone () { + return ( +
    + There are currently no events available +
    + ); + } + + renderEventsList () { + const { events, tokens } = this.state; + const rows = events.map((event) => { + const token = tokens.find((token) => token.address === event.address); + + return ( + + ); + }); + + return ( + + + { rows } + +
    + ); + } + + logToEvent = (log) => { + log.key = api.util.sha3(JSON.stringify(log)); + + return log; + } + + eventCallback = (error, logs) => { + if (error) { + console.error('eventCallback', error); + return; + } + + const { minedEvents, pendingEvents } = this.state; + const minedNew = logs + .filter((log) => log.type === 'mined') + .map(this.logToEvent) + .filter((log) => !minedEvents.find((event) => event.transactionHash === log.transactionHash)) + .reverse() + .concat(minedEvents); + const pendingNew = logs + .filter((log) => log.type === 'pending') + .map(this.logToEvent) + .filter((log) => !pendingEvents.find((event) => event.transactionHash === log.transactionHash)) + .reverse() + .concat(pendingEvents) + .filter((log) => !minedNew.find((event) => event.transactionHash === log.transactionHash)); + const events = [].concat(pendingNew).concat(minedNew); + console.log('*** events', events.map((event) => event.address)); + this.setState({ loading: false, events, minedEvents: minedNew, pendingEvents: pendingNew }); + } +} diff --git a/js/src/dapps/basiccoin/Transfer/Events/index.js b/js/src/dapps/basiccoin/Transfer/Events/index.js new file mode 100644 index 0000000000..88ad6d407c --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Events/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './events'; diff --git a/js/src/dapps/basiccoin/Transfer/Send/index.js b/js/src/dapps/basiccoin/Transfer/Send/index.js new file mode 100644 index 0000000000..ad3107789e --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Send/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './send'; diff --git a/js/src/dapps/basiccoin/Transfer/Send/send.css b/js/src/dapps/basiccoin/Transfer/Send/send.css new file mode 100644 index 0000000000..f24729cf78 --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Send/send.css @@ -0,0 +1,19 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +@import '../../_form.css'; +@import '../../_status.css'; diff --git a/js/src/dapps/basiccoin/Transfer/Send/send.js b/js/src/dapps/basiccoin/Transfer/Send/send.js new file mode 100644 index 0000000000..aee860fe25 --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/Send/send.js @@ -0,0 +1,327 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import { eip20 } from '../../../../contracts/abi'; + +import { api } from '../../parity'; +import { loadBalances } from '../../services'; +import AddressSelect from '../../AddressSelect'; +import Container from '../../Container'; + +import styles from './send.css'; + +export default class Send extends Component { + static contextTypes = { + accounts: PropTypes.object.isRequired + } + + state = { + loading: true, + tokens: null, + selectedToken: null, + availableBalances: [], + fromAddress: null, + fromBalance: null, + toAddress: null, + toKnown: true, + amount: 0, + amountError: null, + sendBusy: false, + sendError: null, + sendState: null, + sendDone: false, + signerRequestId: null, + txHash: null, + txReceipt: null + } + + componentDidMount () { + this.loadBalances(); + this.onAmountChange({ target: { value: '0' } }); + } + + render () { + const { loading } = this.state; + + return loading + ? this.renderLoading() + : this.renderBody(); + } + + renderBody () { + const { sendBusy } = this.state; + + return sendBusy + ? this.renderSending() + : this.renderForm(); + } + + renderSending () { + const { sendDone, sendError, sendState } = this.state; + + if (sendDone) { + return ( + +
    + Your token value transfer has been completed +
    +
    + ); + } + + if (sendError) { + return ( + +
    + Your deployment has encountered an error +
    +
    + { sendError } +
    +
    + ); + } + + return ( + +
    + Your token value is being transferred +
    +
    + { sendState } +
    +
    + ); + } + + renderLoading () { + return ( + +
    + Loading available tokens +
    +
    + ); + } + + renderForm () { + const { accounts } = this.context; + const { availableBalances, fromAddress, amount, amountError, toKnown, toAddress } = this.state; + const fromBalance = availableBalances.find((balance) => balance.address === fromAddress); + const fromAddresses = availableBalances.map((balance) => balance.address); + const toAddresses = Object.keys(accounts); + const toInput = toKnown + ? + : ; + const hasError = amountError; + const error = `${styles.input} ${styles.error}`; + const maxAmountHint = `Value to transfer (max: ${fromBalance ? fromBalance.balance.div(1000000).toFormat(6) : '1'})`; + + return ( + +
    +
    + + +
    + type of token to transfer +
    +
    +
    + + +
    + account to transfer from +
    +
    +
    + + +
    + the type of address input +
    +
    +
    +
    +
    + + +
    + { amountError || maxAmountHint } +
    +
    +
    +
    +
    +
    + ); + } + + renderTokens () { + const { tokens } = this.state; + + return tokens.map((token) => ( + + )); + } + + onSelectFrom = (event) => { + const fromAddress = event.target.value; + + this.setState({ fromAddress }); + } + + onChangeTo = (event) => { + const toAddress = event.target.value; + + this.setState({ toAddress }); + } + + onChangeToType = (event) => { + const toKnown = event.target.value === 'known'; + + this.setState({ toKnown }); + } + + onSelectToken = (event) => { + const { tokens } = this.state; + const address = event.target.value; + const selectedToken = tokens.find((_token) => _token.address === address); + const availableBalances = selectedToken.balances.filter((balance) => balance.balance.gt(0)); + + this.setState({ selectedToken, availableBalances }); + this.onSelectFrom({ target: { value: availableBalances[0].address } }); + } + + onAmountChange = (event) => { + const amount = parseFloat(event.target.value); + const amountError = !isFinite(amount) || amount <= 0 + ? 'amount needs to be > 0' + : null; + + this.setState({ amount, amountError }); + } + + onSend = () => { + const { amount, fromAddress, toAddress, amountError, selectedToken, sendBusy } = this.state; + const hasError = amountError; + + if (hasError || sendBusy) { + return; + } + + const values = [toAddress, new BigNumber(amount).mul(1000000).toFixed(0)]; + const options = { + from: fromAddress + }; + const instance = api.newContract(eip20, selectedToken.address).instance; + + this.setState({ sendBusy: true, sendState: 'Estimating gas for the transaction' }); + + instance + .transfer.estimateGas(options, values) + .then((gas) => { + this.setState({ sendState: 'Gas estimated, Posting transaction to the network' }); + + const gasPassed = gas.mul(1.2); + options.gas = gasPassed.toFixed(0); + console.log(`gas estimated at ${gas.toFormat(0)}, passing ${gasPassed.toFormat(0)}`); + + return instance.transfer.postTransaction(options, values); + }) + .then((signerRequestId) => { + this.setState({ signerRequestId, sendState: 'Transaction posted, Waiting for transaction authorization' }); + + return api.pollMethod('eth_checkRequest', signerRequestId); + }) + .then((txHash) => { + this.setState({ txHash, sendState: 'Transaction authorized, Waiting for network confirmations' }); + + return api.pollMethod('eth_getTransactionReceipt', txHash, (receipt) => { + if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) { + return false; + } + + return true; + }); + }) + .then((txReceipt) => { + this.setState({ txReceipt, sendDone: true, sendState: 'Network confirmed, Received transaction receipt' }); + }) + .catch((error) => { + console.error('onSend', error); + this.setState({ sendError: error.message }); + }); + } + + loadBalances () { + const { accounts } = this.context; + const myAccounts = Object + .values(accounts) + .filter((account) => account.uuid) + .map((account) => account.address); + + loadBalances(myAccounts) + .then((_tokens) => { + const tokens = _tokens.filter((token) => { + for (let index = 0; index < token.balances.length; index++) { + if (token.balances[index].balance.gt(0)) { + return true; + } + } + + return false; + }); + + this.setState({ tokens, loading: false }); + this.onSelectToken({ target: { value: tokens[0].address } }); + }); + } +} diff --git a/js/src/dapps/basiccoin/Transfer/index.js b/js/src/dapps/basiccoin/Transfer/index.js new file mode 100644 index 0000000000..24d36d7963 --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './transfer'; diff --git a/js/src/dapps/basiccoin/Transfer/transfer.js b/js/src/dapps/basiccoin/Transfer/transfer.js new file mode 100644 index 0000000000..842d4b7bcf --- /dev/null +++ b/js/src/dapps/basiccoin/Transfer/transfer.js @@ -0,0 +1,31 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import Events from './Events'; +import Send from './Send'; + +export default class Transfer extends Component { + render () { + return ( +
    + + +
    + ); + } +} diff --git a/js/src/dapps/basiccoin/_form.css b/js/src/dapps/basiccoin/_form.css new file mode 100644 index 0000000000..ffafdbeafa --- /dev/null +++ b/js/src/dapps/basiccoin/_form.css @@ -0,0 +1,105 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.button { + background: #622; +} + +.form { + text-align: left; + margin: 0 auto; + display: inline-block; +} + +.form .input { + margin-bottom: 1.5em; +} + +.form .input * { + display: inline-block; + margin: 0 0.5em; + padding: 0.5em; + font-size: 1em; +} + +.form label { + width: 25em; + opacity: 0.8; + text-align: right; +} + +.form .hint { + width: 25em; + opacity: 0.5; +} + +.form input, +.form select { + width: 18em; + color: #444; + background: rgba(255, 255, 255, 0.75); + border-radius: 1px; + border: 1px solid rgba(0, 0, 0, 0.25); + box-sizing: border-box; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; +} + +.form select { + height: 36px; +} + +.form input.small { + width: 9em; + margin-right: 9.5em; +} + +.form .error input { + border: 1px solid rgba(255, 0, 0, 0.5); + color: red; + background: rgba(255, 0, 0, 0.1); +} + +.form .error label { + color: red; +} + +.form .error .hint { + color: red; +} + +.buttonRow { + text-align: right; + width: 18em; +} + +.button { + color: white; + border: none; + border-radius: 1px; + padding: 1em 2em !important; + display: inline-block; + margin-left: 1em !important; + cursor: pointer; + position: relative; +} + +.button[disabled] { + opacity: 0.5; + cursor: default; +} diff --git a/js/src/dapps/basiccoin/_status.css b/js/src/dapps/basiccoin/_status.css new file mode 100644 index 0000000000..8fd93cfe40 --- /dev/null +++ b/js/src/dapps/basiccoin/_status.css @@ -0,0 +1,36 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.statusHeader { + font-size: 1.25em; + margin-bottom: 1.25em; + opacity: 0.75; +} + +.statusInfo { + margin-bottom: 0.25em; +} + +.statusState { + opacity: 0.75; + margin-top: 1em; +} + +.statusError { + color: red; + margin-top: 1em; +} diff --git a/js/src/dapps/basiccoin/background.jpg b/js/src/dapps/basiccoin/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c873064f581cff2718a31fd1dad77e11651a679c GIT binary patch literal 127459 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%0DGrQO}I@EZ$o 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%0Aau=oz8_s za2=2uBIqFSSTxWO0&gy!XgnaLgFulX=zwUzMil{+2krzi1PU|>=p0o99LS5jFa`|( z#DQZWz!wi-U%Vn9fbe1j15yJsP&)z=D27f0wYW%!fP>ysy`TmF05t$L0t|ftfD8?K zn*c!&7J-6Y7yzL_@6kaRIvq3|=nvA7VL(q_D5HyjBQY14VGtY(UN6*xgX|Cx9C2X` z-e3_paDu=95eSqI1!TlRfOr~oQDp)QfkT4G7@R5u7y-@Guo(FN!AW*O1Ox#>0s0`< zMIumBpfhMH9q=gz1)(8OeKIt3QAczd7BKx^p+U)D2m;Ut6dhzoqSJuR;8PeH0%ib= zE_9LiLK!pxPy@zfXp}BE1e5_<;0ua~z^NioI*5zX=%V4Ec4UAohz7w`5jfoo3V5K> zg)$fv5(5V{MS?RCfdd!-BM6*32mlPc2ZaN^X`m=Dzy$+fq=9h=hHUg(vYAu;AFf|1Jc0&%>ia`2w;GAf|Fq&5C@6C=^%h6pb67J zSpj`j2&H>*2vo%bW3mg%Ks_)BGJ-^Ox}Y;5fDNSz0h(#57yW;cOBaFw5iEudivVhX zm}#mPI)Fw3X9}JSlm;L~;6M;y4B`VD9Rv;rIHGYd&_AFq5CH=Epy9e8J{qNifdFPz z3?2(g4}o-WG9b%^n0W991h}Z8all0fC;$O=5U{z30A1u&1u!r;@Cx$kq9HN_=p{NN zh7O>GAaDq}_ktjVNCVV>3qXrS;IU|wE}BjU5WkQG4nyOy5Dtl;Lm~)R;DrHULE$b= z99;zJfBN8H7rjKlqT#9+NC+3*1;Jq$5P<-Q=m0tx9Eh)rA*dn%{)-5pTXZ2Dh^z{p zpm{K$N$>#AMa3ZyKTQV>umLW3RSaAgg9EU^AQ^}WaDwt(C<(z3Z~&MLO&~)<5J(Nu zVQ?@s3X1?RP{0gOCcDrLfWNR*g@7>*m_io@X%LVX!s$SG2z}8Tp!8%Hbp(zm2$bWZ z3Us3qE01S{q6+=K`P&#M=76bYU4!RwN0Hp-rK_XCS zIv4^E^aluG5RjKZ2H_wGXoXV6K)Qezz<>bh0C$}31tj1LxB%sWB>_UG0q_@)Ac8Ii zphY3U2$~Lw0eubx1dvc3OEu2ks$yQAUj||2g9KLhxVe)AV3EK4T%R{SOf?T+zF}>Pz)ji zZGgdpk1oam3y2N^y@5ulBGQ0RphJ)s7}7xDkO)Wzx)2S90kT}s2N`t{bPzy}0QSHg zg#`f6phl1?;(zS^PdUK&MNEJM7r*) z;7|vRyFdkKB0#s((SUt1FVVuF|L>#ye|unpZ8B9*$|e6l7V!Vaf)52Y)P!F={_o8- zVYJZyySL`W)|#kY^#8N9CMx@-BABjuw-)Vk*bmyJ@tkD-$vfYAn0sR02z}`oM8 z_&eUNg%s7jB-?Y!3gqfXaQ?1c?Zn8D0=OT$2_8@z5`?HCQQZ!*~%1QJ+S#! zUxKeVsJRe5LKUgOBwc%Nt0&U5&jyU|D)V)7avp^p7k&>l9Xz4Ef37!0)N>wlzSQsQ zXD(pzXkeA(rWSj)^d}P?g@;}_27^9E#HO|)Qd&2(j3g);lVXPcgIFLAH@*cA8_mH&E~#$+t;pDO zRWTx0#is6kqbuyeQEJZoFZ+_tcX8y-l;R`r1C*G9Mi+8cKeTnUIB-n8Xj#vooTwb# z7I0750y_uPoGre1oOLgj(+7J^x8SA6$y$-q)UFEWDkNi=Sd~IEe6BaAifS%v88J+O zb!yQ{*xyah$UPQzF4AO6!?;*B1W@s7Uu}`O4`U$_SCnFvY%^WoO%FByuz0yga^aF3 zYiyz(ziFO(-q>SbX~l!)^OvG^F%IVZH`yuU6#Nf# z4-f-oUSOqR!)rVTYnTEAv5C2HK;O*=1lfdf#)_Xm`_V#woPv90o-WmXXANtqQ(<~T zE)?Qe7PO7~@Hq7-L)=!sT;$ul&*L|NEtmhSF6V&_PZ>j%S;%D-?Wd!7Mfc~M)b|

    F@S(CS;P}0<}T#`j6L6(fNvd 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 literal 0 HcmV?d00001 diff --git a/js/src/dapps/basiccoin/parity.js b/js/src/dapps/basiccoin/parity.js new file mode 100644 index 0000000000..f6d59f44d5 --- /dev/null +++ b/js/src/dapps/basiccoin/parity.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export { + api +}; diff --git a/js/src/dapps/basiccoin/services.js b/js/src/dapps/basiccoin/services.js new file mode 100644 index 0000000000..ca586ea917 --- /dev/null +++ b/js/src/dapps/basiccoin/services.js @@ -0,0 +1,270 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import * as abis from '../../contracts/abi'; +import { api } from './parity'; + +let managerInstance; +let tokenregInstance; +let registryInstance; + +const registries = {}; +const subscriptions = {}; +let nextSubscriptionId = 1000; +let isTest = false; + +export function subscribeEvents (addresses, callback) { + const subscriptionId = nextSubscriptionId++; + const contract = api.newContract(abis.eip20); + const event = contract.events.filter((evt) => evt.name === 'Transfer'); + const options = { + address: addresses, + fromBlock: 0, + toBlock: 'pending', + limit: 50, + topics: [event.signature] + }; + + return api.eth + .newFilter(options) + .then((filterId) => { + subscriptions[subscriptionId] = { subscriptionId, filterId, addresses, callback, contract }; + + return api.eth.getFilterLogs(filterId); + }) + .then((logs) => callback(null, contract.parseEventLogs(logs))) + .then(() => subscriptionId) + .catch((error) => { + console.error('subscribeEvents', error); + throw error; + }); +} + +export function unsubscribeEvents (subscriptionId) { + api.eth + .uninstallFilter(subscriptions[subscriptionId].filterId) + .catch((error) => { + console.error('unsubscribeEvents', error); + }); + + delete subscriptions[subscriptionId]; +} + +function pollEvents () { + const loop = Object.values(subscriptions); + const timeout = () => setTimeout(pollEvents, 1000); + + Promise + .all(loop.map((subscription) => api.eth.getFilterChanges(subscription.filterId))) + .then((logsArray) => { + logsArray.forEach((logs, index) => { + const subscription = loop[index]; + + if (!logs || !logs.length) { + return; + } + + try { + subscription.callback(null, subscription.contract.parseEventLogs(logs)); + } catch (error) { + unsubscribeEvents(loop.subscriptionId); + console.error('pollEvents', error); + } + }); + + timeout(); + }) + .catch((error) => { + console.error('pollEvents', error); + timeout(); + }); +} + +export function attachInstances () { + pollEvents(); + + return Promise + .all([ + api.ethcore.registryAddress(), + api.ethcore.netChain() + ]) + .then(([registryAddress, netChain]) => { + const registry = api.newContract(abis.registry, registryAddress).instance; + isTest = netChain === 'morden' || netChain === 'testnet'; + + console.log(`contract was found at registry=${registryAddress}`); + console.log(`running on ${netChain}, isTest=${isTest}`); + + return Promise + .all([ + registry.getAddress.call({}, [api.util.sha3('playbasiccoinmgr'), 'A']), + registry.getAddress.call({}, [api.util.sha3('basiccoinreg'), 'A']), + registry.getAddress.call({}, [api.util.sha3('tokenreg'), 'A']) + ]); + }) + .then(([managerAddress, registryAddress, tokenregAddress]) => { + console.log(`contracts were found at basiccoinmgr=${managerAddress}, basiccoinreg=${registryAddress}, tokenreg=${registryAddress}`); + + managerInstance = api.newContract(abis.basiccoinmanager, managerAddress).instance; + registryInstance = api.newContract(abis.tokenreg, registryAddress).instance; + tokenregInstance = api.newContract(abis.tokenreg, tokenregAddress).instance; + + registries[registryInstance.address] = registryInstance; + registries[tokenregInstance.address] = tokenregInstance; + + return { + managerInstance, + registryInstance, + tokenregInstance + }; + }) + .catch((error) => { + console.error('attachInstances', error); + throw error; + }); +} + +export function totalSupply (address) { + return api.newContract(abis.eip20, address) + .instance.totalSupply.call(); +} + +export function getCoin (tokenreg, address) { + return registries[tokenreg].fromAddress + .call({}, [address]) + .then(([id, tla, base, name, owner]) => { + return { + id, tla, base, name, owner, + isGlobal: tokenregInstance.address === tokenreg + }; + }) + .catch((error) => { + console.error('getCoin', error); + throw error; + }); +} + +export function loadOwnedTokens (addresses) { + let total = new BigNumber(0); + + return Promise + .all( + addresses.map((address) => managerInstance.countByOwner.call({}, [address])) + ) + .then((counts) => { + return Promise.all( + addresses.reduce((promises, address, index) => { + total = counts[index].add(total); + for (let i = 0; counts[index].gt(i); i++) { + promises.push(managerInstance.getByOwner.call({}, [address, i])); + } + return promises; + }, []) + ); + }) + .then((_tokens) => { + const tokens = _tokens.reduce((tokens, token) => { + const [address, owner, tokenreg] = token; + tokens[owner] = tokens[owner] || []; + tokens[owner].push({ address, owner, tokenreg }); + return tokens; + }, {}); + + return { tokens, total }; + }) + .catch((error) => { + console.error('loadTokens', error); + throw error; + }); +} + +export function loadAllTokens () { + return managerInstance + .count.call() + .then((count) => { + const promises = []; + + for (let index = 0; count.gt(index); index++) { + promises.push(managerInstance.get.call({}, [index])); + } + + return Promise.all(promises); + }) + .then((_tokens) => { + const tokens = []; + + return Promise + .all( + _tokens.map(([address, owner, tokenreg]) => { + const isGlobal = tokenreg === tokenregInstance.address; + tokens.push({ address, owner, tokenreg, isGlobal }); + return registries[tokenreg].fromAddress.call({}, [address]); + }) + ) + .then((coins) => { + return tokens.map((token, index) => { + const [id, tla, base, name, owner] = coins[index]; + token.coin = { id, tla, base, name, owner }; + return token; + }); + }); + }) + .catch((error) => { + console.log('loadAllTokens', error); + throw error; + }); +} + +export function loadBalances (addresses) { + return loadAllTokens() + .then((tokens) => { + return Promise.all( + tokens.map((token) => { + return Promise.all( + addresses.map((address) => loadTokenBalance(token.address, address)) + ); + }) + ) + .then((_balances) => { + return tokens.map((token, tindex) => { + const balances = _balances[tindex]; + token.balances = addresses.map((address, aindex) => { + return { address, balance: balances[aindex] }; + }); + return token; + }); + }); + }) + .catch((error) => { + console.error('loadBalances', error); + throw error; + }); +} + +export function loadTokenBalance (tokenAddress, address) { + return api.newContract(abis.eip20, tokenAddress).instance + .balanceOf.call({}, [address]) + .catch((error) => { + console.error('loadTokenBalance', error); + throw error; + }); +} + +export function txLink (txHash) { + return `https://${isTest ? 'testnet.' : ''}etherscan.io/tx/${txHash}`; +} diff --git a/js/src/dapps/gavcoin.html b/js/src/dapps/gavcoin.html new file mode 100644 index 0000000000..928310a526 --- /dev/null +++ b/js/src/dapps/gavcoin.html @@ -0,0 +1,16 @@ + + + + + + + GAVcoin + + +

    + + + + + + diff --git a/js/src/dapps/gavcoin.js b/js/src/dapps/gavcoin.js new file mode 100644 index 0000000000..fae095ef25 --- /dev/null +++ b/js/src/dapps/gavcoin.js @@ -0,0 +1,33 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ReactDOM from 'react-dom'; +import React from 'react'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import Application from './gavcoin/Application'; + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './gavcoin.html'; + +ReactDOM.render( + , + document.querySelector('#container') +); diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css new file mode 100644 index 0000000000..3b7457cb70 --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.css @@ -0,0 +1,45 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.account { + padding: 4px 0 !important; + display: inline-block; +} + +.name { + display: inline-block; + margin-right: 1em; + text-transform: uppercase; +} + +.balance { + display: inline-block; + text-align: right; + color: #aaa; + font-family: 'Roboto Mono', monospace; +} + +.details { + display: inline-block; +} + +.image { + display: inline-block; +} + +.image img { + margin: 0 1em -11px 0; +} diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js new file mode 100644 index 0000000000..1a55e7f930 --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelector/AccountItem/accountItem.js @@ -0,0 +1,63 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import IdentityIcon from '../../IdentityIcon'; + +import styles from './accountItem.css'; + +export default class AccountItem extends Component { + static propTypes = { + account: PropTypes.object, + gavBalance: PropTypes.bool + }; + + render () { + const { account, gavBalance } = this.props; + + let balance; + let token; + + if (gavBalance) { + if (account.gavBalance) { + balance = account.gavBalance; + token = 'GAV'; + } + } else { + if (account.ethBalance) { + balance = account.ethBalance; + token = 'ETH'; + } + } + + return ( +
    +
    + +
    +
    +
    + { account.name || account.address } +
    +
    + { balance } { token } +
    +
    +
    + ); + } +} diff --git a/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js b/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js new file mode 100644 index 0000000000..570b3415aa --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelector/AccountItem/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './accountItem'; diff --git a/js/src/dapps/gavcoin/AccountSelector/accountSelector.js b/js/src/dapps/gavcoin/AccountSelector/accountSelector.js new file mode 100644 index 0000000000..e37d23598a --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelector/accountSelector.js @@ -0,0 +1,102 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; +import { MenuItem, SelectField } from 'material-ui'; + +import AccountItem from './AccountItem'; + +const NAME_ID = ' '; +let lastSelectedAccount = {}; + +export default class AccountSelect extends Component { + static propTypes = { + accounts: PropTypes.array, + account: PropTypes.object, + anyAccount: PropTypes.bool, + gavBalance: PropTypes.bool, + onSelect: PropTypes.func, + errorText: PropTypes.string, + floatingLabelText: PropTypes.string, + hintText: PropTypes.string + } + + componentDidMount () { + this.props.onSelect(lastSelectedAccount); + } + + render () { + const { account, accounts, anyAccount, errorText, floatingLabelText, gavBalance, hintText } = this.props; + + return ( + + { renderAccounts(accounts, { anyAccount, gavBalance }) } + + ); + } + + onSelect = (event, idx, account) => { + lastSelectedAccount = account || {}; + this.props.onSelect(lastSelectedAccount); + } +} + +function isPositive (numberStr) { + return new BigNumber(numberStr.replace(',', '')).gt(0); +} + +export function renderAccounts (accounts, options = {}) { + return accounts + .filter((account) => { + if (options.anyAccount) { + return true; + } + + if (account.uuid) { + return isPositive(account[options.gavBalance ? 'gavBalance' : 'ethBalance']); + } + + return false; + }) + .map((account) => { + const item = ( + + ); + + return ( + + { item } + + ); + }); +} diff --git a/js/src/dapps/gavcoin/AccountSelector/index.js b/js/src/dapps/gavcoin/AccountSelector/index.js new file mode 100644 index 0000000000..de529244a1 --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelector/index.js @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { renderAccounts } from './accountSelector'; + +export default from './accountSelector'; +export { + renderAccounts +}; diff --git a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css new file mode 100644 index 0000000000..0a969770d7 --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.css @@ -0,0 +1,28 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.addrtext { + position: relative; +} + +.input input { + padding-left: 48px !important; +} + +.addricon { + position: absolute; + top: 37px; +} diff --git a/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js new file mode 100644 index 0000000000..a83b0ec87a --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelectorText/accountSelectorText.js @@ -0,0 +1,106 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { TextField } from 'material-ui'; + +import IdentityIcon from '../IdentityIcon'; +import AccountSelector from '../AccountSelector'; + +import styles from './accountSelectorText.css'; + +const NAME_ID = ' '; + +export default class AccountSelectorText extends Component { + static propTypes = { + accounts: PropTypes.array, + account: PropTypes.object, + errorText: PropTypes.string, + gavBalance: PropTypes.bool, + anyAccount: PropTypes.bool, + floatingLabelText: PropTypes.string, + hintText: PropTypes.string, + selector: PropTypes.bool, + onChange: PropTypes.func + } + + render () { + const { selector } = this.props; + + return selector + ? this.renderDropDown() + : this.renderTextField(); + } + + renderDropDown () { + const { account, accounts, anyAccount, errorText, gavBalance, hintText, floatingLabelText, onChange } = this.props; + + return ( + + ); + } + + renderTextField () { + const { account, errorText, hintText, floatingLabelText } = this.props; + + return ( +
    + + { this.renderAddressIcon() } +
    + ); + } + + renderAddressIcon () { + const { account } = this.props; + + if (!account.address) { + return null; + } + + return ( +
    + +
    + ); + } + + onChangeAddress = (event, address) => { + const lower = address.toLowerCase(); + const account = this.props.accounts.find((_account) => _account.address.toLowerCase() === lower); + + this.props.onChange(account || { address }); + } +} diff --git a/js/src/dapps/gavcoin/AccountSelectorText/index.js b/js/src/dapps/gavcoin/AccountSelectorText/index.js new file mode 100644 index 0000000000..c3aab3e52a --- /dev/null +++ b/js/src/dapps/gavcoin/AccountSelectorText/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './accountSelectorText'; diff --git a/js/src/dapps/gavcoin/Accounts/accounts.css b/js/src/dapps/gavcoin/Accounts/accounts.css new file mode 100644 index 0000000000..7c45117106 --- /dev/null +++ b/js/src/dapps/gavcoin/Accounts/accounts.css @@ -0,0 +1,47 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.accounts { + padding: 4em 2em 0 2em; + text-align: center; + width: 100%; +} + +.account { + margin: 0.5em !important; + background: rgb(50, 100, 150) !important; + display: inline-block !important; +} + +.account img { + margin-bottom: -11px; + margin-left: -11px; +} + +.balance { + font-family: 'Roboto Mono', monospace; + color: rgba(255, 255, 255, 1) !important; +} + +.name { + color: rgba(255, 255, 255, 0.7) !important; + margin-right: 1em; + text-transform: uppercase; +} + +.none { + color: rgba(255, 255, 255, 0.7); +} diff --git a/js/src/dapps/gavcoin/Accounts/accounts.js b/js/src/dapps/gavcoin/Accounts/accounts.js new file mode 100644 index 0000000000..f510193ac2 --- /dev/null +++ b/js/src/dapps/gavcoin/Accounts/accounts.js @@ -0,0 +1,83 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { Chip } from 'material-ui'; + +import IdentityIcon from '../IdentityIcon'; + +import styles from './accounts.css'; + +export default class Accounts extends Component { + static contextTypes = { + api: PropTypes.object.isRequired, + instance: PropTypes.object.isRequired + } + + static propTypes = { + accounts: PropTypes.array + } + + render () { + const has = this._hasAccounts(); + + return ( +
    + { has ? this.renderAccounts() : this.renderEmpty() } +
    + ); + } + + renderEmpty () { + return ( +
    + You currently do not have any GAVcoin in any of your addresses, buy some +
    + ); + } + + renderAccounts () { + const { accounts } = this.props; + + return accounts + .filter((account) => account.hasGav) + .map((account) => { + return ( + + + + { account.name } + + + { account.gavBalance } + + + ); + }); + } + + _hasAccounts () { + const { accounts } = this.props; + + if (!accounts || !accounts.length) { + return false; + } + + return accounts.filter((account) => account.hasGav).length !== 0; + } +} diff --git a/js/src/dapps/gavcoin/Accounts/index.js b/js/src/dapps/gavcoin/Accounts/index.js new file mode 100644 index 0000000000..e9be1d5573 --- /dev/null +++ b/js/src/dapps/gavcoin/Accounts/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './accounts'; diff --git a/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js b/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js new file mode 100644 index 0000000000..f97e20a6c6 --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionBuyIn/actionBuyIn.js @@ -0,0 +1,206 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import { Dialog, FlatButton, TextField } from 'material-ui'; + +import { api } from '../../parity'; +import AccountSelector from '../../AccountSelector'; +import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; + +import styles from '../actions.css'; + +const NAME_ID = ' '; + +export default class ActionBuyIn extends Component { + static contextTypes = { + instance: PropTypes.object.isRequired + } + + static propTypes = { + accounts: PropTypes.array, + price: PropTypes.object, + onClose: PropTypes.func + } + + state = { + account: {}, + accountError: ERRORS.invalidAccount, + amount: 0, + amountError: ERRORS.invalidAmount, + maxPrice: api.util.fromWei(this.props.price.mul(1.2)).toString(), + maxPriceError: null, + sending: false, + complete: false + } + + render () { + const { complete } = this.state; + + if (complete) { + return null; + } + + return ( + + { this.renderFields() } + + ); + } + + renderActions () { + const { complete } = this.state; + + if (complete) { + return ( + + ); + } + + const { accountError, amountError, maxPriceError, sending } = this.state; + const hasError = !!(amountError || accountError || maxPriceError); + + return ([ + , + + ]); + } + + renderFields () { + const maxPriceLabel = `maximum price in ETH (current ${api.util.fromWei(this.props.price).toFormat(3)})`; + + return ( +
    + + + +
    + ); + } + + onChangeAddress = (account) => { + this.setState({ + account, + accountError: validateAccount(account) + }, this.validateTotal); + } + + onChangeAmount = (event, amount) => { + this.setState({ + amount, + amountError: validatePositiveNumber(amount) + }, this.validateTotal); + } + + onChangeMaxPrice = (event, maxPrice) => { + this.setState({ + maxPrice, + maxPriceError: validatePositiveNumber(maxPrice) + }); + } + + validateTotal = () => { + const { account, accountError, amount, amountError } = this.state; + + if (accountError || amountError) { + return; + } + + if (new BigNumber(amount).gt(account.ethBalance.replace(',', ''))) { + this.setState({ + amountError: ERRORS.invalidTotal + }); + } + } + + onSend = () => { + const { instance } = this.context; + const maxPrice = api.util.toWei(this.state.maxPrice); + const values = [this.state.account.address, maxPrice.toString()]; + const options = { + from: this.state.account.address, + value: api.util.toWei(this.state.amount).toString() + }; + + this.setState({ + sending: true + }); + + instance.buyin + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`buyin: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return instance.buyin.postTransaction(options, values); + }) + .then(() => { + this.props.onClose(); + this.setState({ + sending: false, + complete: true + }); + }) + .catch((error) => { + console.error('error', error); + this.setState({ + sending: false + }); + }); + } +} diff --git a/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js b/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js new file mode 100644 index 0000000000..2c0c2374fe --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionBuyIn/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './actionBuyIn'; diff --git a/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js b/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js new file mode 100644 index 0000000000..8ebbfb3512 --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionRefund/actionRefund.js @@ -0,0 +1,191 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import { Dialog, FlatButton, TextField } from 'material-ui'; + +import { api } from '../../parity'; +import AccountSelector from '../../AccountSelector'; +import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; + +import styles from '../actions.css'; + +const DIVISOR = 10 ** 6; +const NAME_ID = ' '; + +export default class ActionRefund extends Component { + static contextTypes = { + instance: PropTypes.object.isRequired + } + + static propTypes = { + accounts: PropTypes.array, + price: PropTypes.object, + onClose: PropTypes.func + } + + state = { + account: {}, + accountError: ERRORS.invalidAccount, + complete: false, + sending: false, + amount: 0, + amountError: ERRORS.invalidAmount, + price: api.util.fromWei(this.props.price).toString(), + priceError: null + } + + render () { + const { complete } = this.state; + + if (complete) { + return null; + } + + return ( + + { this.renderFields() } + + ); + } + + renderActions () { + if (this.state.complete) { + return ( + + ); + } + + const hasError = !!(this.state.priceError || this.state.amountError || this.state.accountError); + + return ([ + , + + ]); + } + + renderFields () { + const priceLabel = `price in ETH (current ${api.util.fromWei(this.props.price).toFormat(3)})`; + + return ( +
    + + + +
    + ); + } + + onChangeAddress = (account) => { + this.setState({ + account, + accountError: validateAccount(account) + }); + } + + onChangeAmount = (event, amount) => { + this.setState({ + amount, + amountError: validatePositiveNumber(amount) + }); + } + + onChangePrice = (event, price) => { + this.setState({ + price, + priceError: validatePositiveNumber(price) + }); + } + + onSend = () => { + const { instance } = this.context; + const price = api.util.toWei(this.state.price); + const amount = new BigNumber(this.state.amount).mul(DIVISOR); + const values = [price.toString(), amount.toFixed(0)]; + const options = { + from: this.state.account.address + }; + + this.setState({ + sending: true + }); + + instance.refund + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`refund: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return instance.refund.postTransaction(options, values); + }) + .then(() => { + this.props.onClose(); + this.setState({ + sending: false, + complete: true + }); + }) + .catch((error) => { + console.error('error', error); + this.setState({ + sending: false + }); + }); + } +} diff --git a/js/src/dapps/gavcoin/Actions/ActionRefund/index.js b/js/src/dapps/gavcoin/Actions/ActionRefund/index.js new file mode 100644 index 0000000000..d3b5b7e1bf --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionRefund/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './actionRefund'; diff --git a/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js b/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js new file mode 100644 index 0000000000..13ecc55e8e --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionTransfer/actionTransfer.js @@ -0,0 +1,220 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import { Dialog, FlatButton, TextField, Toggle } from 'material-ui'; + +import AccountSelector from '../../AccountSelector'; +import AccountSelectorText from '../../AccountSelectorText'; +import { ERRORS, validateAccount, validatePositiveNumber } from '../validation'; + +import styles from '../actions.css'; + +const DIVISOR = 10 ** 6; +const NAME_ID = ' '; + +export default class ActionTransfer extends Component { + static contextTypes = { + instance: PropTypes.object.isRequired + } + + static propTypes = { + accounts: PropTypes.array, + price: PropTypes.object, + onClose: PropTypes.func + } + + state = { + fromAccount: {}, + fromAccountError: ERRORS.invalidAccount, + toAccount: {}, + toAccountError: ERRORS.invalidRecipient, + inputAccount: false, + complete: false, + sending: false, + amount: 0, + amountError: ERRORS.invalidAmount + } + + render () { + const { complete } = this.state; + + if (complete) { + return null; + } + + return ( + + { this.renderFields() } + + ); + } + + renderActions () { + const { complete, sending, amountError, fromAccountError, toAccountError } = this.state; + + if (complete) { + return ( + + ); + } + + const hasError = !!(amountError || fromAccountError || toAccountError); + + return ([ + , + + ]); + } + + renderFields () { + const { accounts } = this.props; + const { fromAccount, fromAccountError, toAccount, toAccountError, inputAccount, amount, amountError } = this.state; + + return ( +
    + +
    + + +
    + +
    + ); + } + + onChangeFromAccount = (fromAccount) => { + this.setState({ + fromAccount, + fromAccountError: validateAccount(fromAccount) + }, this.validateTotal); + } + + onChangeToAccount = (toAccount) => { + this.setState({ + toAccount, + toAccountError: validateAccount(toAccount) + }); + } + + onChangeToInput = () => { + this.setState({ + inputAccount: !this.state.inputAccount + }); + } + + onChangeAmount = (event, amount) => { + this.setState({ + amount, + amountError: validatePositiveNumber(amount) + }, this.validateTotal); + } + + validateTotal = () => { + const { fromAccount, fromAccountError, amount, amountError } = this.state; + + if (fromAccountError || amountError) { + return; + } + + if (new BigNumber(amount).gt(fromAccount.gavBalance.replace(',', ''))) { + this.setState({ + amountError: ERRORS.invalidTotal + }); + } + } + + onSend = () => { + const { instance } = this.context; + const amount = new BigNumber(this.state.amount).mul(DIVISOR); + const values = [this.state.toAccount.address, amount.toFixed(0)]; + const options = { + from: this.state.fromAccount.address + }; + + this.setState({ + sending: true + }); + + instance.transfer + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`transfer: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return instance.transfer.postTransaction(options, values); + }) + .then(() => { + this.props.onClose(); + this.setState({ + sending: false, + complete: true + }); + }) + .catch((error) => { + console.error('error', error); + this.setState({ + sending: false + }); + }); + } +} diff --git a/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js b/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js new file mode 100644 index 0000000000..848800e00f --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/ActionTransfer/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './actionTransfer'; diff --git a/js/src/dapps/gavcoin/Actions/StepComplete/index.js b/js/src/dapps/gavcoin/Actions/StepComplete/index.js new file mode 100644 index 0000000000..7b95b1937a --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/StepComplete/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './stepComplete'; diff --git a/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js b/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js new file mode 100644 index 0000000000..a066a7c30d --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/StepComplete/stepComplete.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import styles from '../actions.css'; + +export default class StepComplete extends Component { + render () { + return ( +
    + ); + } +} diff --git a/js/src/dapps/gavcoin/Actions/actions.css b/js/src/dapps/gavcoin/Actions/actions.css new file mode 100644 index 0000000000..90ca3e18fe --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/actions.css @@ -0,0 +1,72 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.actions { + text-align: center; + padding: 2em 2em 0 2em; + width: 100%; +} + +.button { + margin: 0 0.5em; +} + +.button button { + background-color: rgba(50, 100, 150, 1) !important; + height: 56px !important; + padding: 0 10px !important; +} + +.button button[disabled] { + background-color: rgba(50, 50, 50, 0.25) !important; +} + +.dialog { +} + +.dialog h3 { + color: rgba(50, 100, 150, 1) !important; + text-transform: uppercase; +} + +.dialogtext { + padding-top: 1em; +} + +.link, .link:hover, .link:visited { + color: rgb(0, 188, 212); + text-decoration: none; +} + +.overlay { + position: relative; +} + +.overlay svg { + opacity: 0; +} + +.toggle { + text-align: right; +} + +.overlaytoggle { + position: absolute !important; + top: 40px; + right: 0; + display: inline-block !important; + width: auto !important; +} diff --git a/js/src/dapps/gavcoin/Actions/actions.js b/js/src/dapps/gavcoin/Actions/actions.js new file mode 100644 index 0000000000..e58d2223fa --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/actions.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { RaisedButton } from 'material-ui'; +import ActionAddShoppingCart from 'material-ui/svg-icons/action/add-shopping-cart'; +// import AvReplay from 'material-ui/svg-icons/av/replay'; +import ContentSend from 'material-ui/svg-icons/content/send'; + +import styles from './actions.css'; + +export default class Actions extends Component { + static propTypes = { + onAction: PropTypes.func.isRequired, + gavBalance: PropTypes.object.isRequired + } + + render () { + const { gavBalance } = this.props; + + return ( +
    + } + label='buy coins' + primary + onTouchTap={ this.onBuyIn } /> + } + label='send coins' + primary + onTouchTap={ this.onTransfer } /> +
    + ); + + // } + // label='claim refund' + // primary + // onTouchTap={ this.onRefund } /> + } + + onBuyIn = () => { + this.props.onAction('BuyIn'); + } + + onTransfer = () => { + const { gavBalance } = this.props; + + if (gavBalance && gavBalance.gt(0)) { + this.props.onAction('Transfer'); + } + } + + onRefund = () => { + this.props.onAction('Refund'); + } +} diff --git a/js/src/dapps/gavcoin/Actions/index.js b/js/src/dapps/gavcoin/Actions/index.js new file mode 100644 index 0000000000..865bd65ce1 --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/index.js @@ -0,0 +1,27 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ActionBuyIn from './ActionBuyIn'; +import ActionRefund from './ActionRefund'; +import ActionTransfer from './ActionTransfer'; + +export default from './actions'; + +export { + ActionBuyIn, + ActionRefund, + ActionTransfer +}; diff --git a/js/src/dapps/gavcoin/Actions/validation.js b/js/src/dapps/gavcoin/Actions/validation.js new file mode 100644 index 0000000000..d494c3392a --- /dev/null +++ b/js/src/dapps/gavcoin/Actions/validation.js @@ -0,0 +1,56 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { api } from '../parity'; + +export const ERRORS = { + invalidAccount: 'please select an account to transact with', + invalidRecipient: 'please select an account to send to', + invalidAddress: 'the address is not in the correct format', + invalidAmount: 'please enter a positive amount > 0', + invalidTotal: 'the amount is greater than the availale balance' +}; + +export function validatePositiveNumber (value) { + let bn = null; + + try { + bn = new BigNumber(value); + } catch (e) { + } + + if (!bn || !bn.gt(0)) { + return ERRORS.invalidAmount; + } + + return null; +} + +export function validateAccount (account) { + if (!account || !account.address) { + return ERRORS.invalidAccount; + } + + if (!api.util.isAddressValid(account.address)) { + return ERRORS.invalidAddress; + } + + account.address = api.util.toChecksumAddress(account.address); + + return null; +} diff --git a/js/src/dapps/gavcoin/Application/application.js b/js/src/dapps/gavcoin/Application/application.js new file mode 100644 index 0000000000..04c5abe019 --- /dev/null +++ b/js/src/dapps/gavcoin/Application/application.js @@ -0,0 +1,239 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component, PropTypes } from 'react'; + +import getMuiTheme from 'material-ui/styles/getMuiTheme'; +import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme'; + +const muiTheme = getMuiTheme(lightBaseTheme); + +import { api } from '../parity'; + +import * as abis from '../../../contracts/abi'; + +import Accounts from '../Accounts'; +import Actions, { ActionBuyIn, ActionRefund, ActionTransfer } from '../Actions'; +import Events from '../Events'; +import Loading from '../Loading'; +import Status from '../Status'; + +const DIVISOR = 10 ** 6; + +export default class Application extends Component { + static childContextTypes = { + api: PropTypes.object, + contract: PropTypes.object, + instance: PropTypes.object, + muiTheme: PropTypes.object + }; + + state = { + action: null, + address: null, + accounts: [], + blockNumber: new BigNumber(-1), + ethBalance: new BigNumber(0), + gavBalance: new BigNumber(0), + instance: null, + loading: true, + price: null, + remaining: null, + totalSupply: null + } + + componentDidMount () { + this.attachInterface(); + } + + render () { + const { accounts, address, blockNumber, gavBalance, loading, price, remaining, totalSupply } = this.state; + + if (loading) { + return ( + + ); + } + + return ( +
    + { this.renderModals() } + + + + + +
    + ); + } + + renderModals () { + const { action, accounts, price } = this.state; + + switch (action) { + case 'BuyIn': + return ( + + ); + case 'Refund': + return ( + + ); + case 'Transfer': + return ( + + ); + default: + return null; + } + } + + getChildContext () { + const { contract, instance } = this.state; + + return { + api, + contract, + instance, + muiTheme + }; + } + + onAction = (action) => { + this.setState({ + action + }); + } + + onActionClose = () => { + this.setState({ + action: null + }); + } + + onNewBlockNumber = (_error, blockNumber) => { + const { instance, accounts } = this.state; + + if (_error) { + console.error('onNewBlockNumber', _error); + return; + } + + Promise + .all([ + instance.totalSupply.call(), + instance.remaining.call(), + instance.price.call() + ]) + .then(([totalSupply, remaining, price]) => { + this.setState({ + blockNumber, + totalSupply, + remaining, + price + }); + + const gavQueries = accounts.map((account) => instance.balanceOf.call({}, [account.address])); + const ethQueries = accounts.map((account) => api.eth.getBalance(account.address)); + + return Promise.all([ + Promise.all(gavQueries), + Promise.all(ethQueries) + ]); + }) + .then(([gavBalances, ethBalances]) => { + this.setState({ + ethBalance: ethBalances.reduce((total, balance) => total.add(balance), new BigNumber(0)), + gavBalance: gavBalances.reduce((total, balance) => total.add(balance), new BigNumber(0)), + accounts: accounts.map((account, idx) => { + const ethBalance = ethBalances[idx]; + const gavBalance = gavBalances[idx]; + + account.ethBalance = api.util.fromWei(ethBalance).toFormat(3); + account.gavBalance = gavBalance.div(DIVISOR).toFormat(6); + account.hasGav = gavBalance.gt(0); + + return account; + }) + }); + }) + .catch((error) => { + console.error('onNewBlockNumber', error); + }); + } + + attachInterface = () => { + api.ethcore + .registryAddress() + .then((registryAddress) => { + console.log(`the registry was found at ${registryAddress}`); + + const registry = api.newContract(abis.registry, registryAddress).instance; + + return Promise + .all([ + registry.getAddress.call({}, [api.util.sha3('gavcoin'), 'A']), + api.personal.listAccounts(), + api.personal.accountsInfo() + ]); + }) + .then(([address, addresses, infos]) => { + console.log(`gavcoin was found at ${address}`); + + const contract = api.newContract(abis.gavcoin, address); + + this.setState({ + loading: false, + address, + contract, + instance: contract.instance, + accounts: addresses.map((address) => { + const info = infos[address]; + + return { + address, + name: info.name || 'Unnamed', + uuid: info.uuid + }; + }) + }); + + api.subscribe('eth_blockNumber', this.onNewBlockNumber); + }) + .catch((error) => { + console.error('attachInterface', error); + }); + } +} diff --git a/js/src/dapps/gavcoin/Application/index.js b/js/src/dapps/gavcoin/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/gavcoin/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/gavcoin/Events/Event/event.js b/js/src/dapps/gavcoin/Events/Event/event.js new file mode 100644 index 0000000000..4fb29a382a --- /dev/null +++ b/js/src/dapps/gavcoin/Events/Event/event.js @@ -0,0 +1,129 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import IdentityIcon from '../../IdentityIcon'; +import { formatBlockNumber, formatCoins, formatEth } from '../../format'; + +import styles from '../events.css'; + +const EMPTY_COLUMN = ( + +); + +export default class Event extends Component { + static contextTypes = { + accounts: PropTypes.array.isRequired + } + + static propTypes = { + event: PropTypes.object, + value: PropTypes.object, + price: PropTypes.object, + fromAddress: PropTypes.string, + toAddress: PropTypes.string + } + + render () { + const { event, fromAddress, toAddress, price, value } = this.props; + const { blockNumber, state, type } = event; + const cls = `${styles.event} ${styles[state]} ${styles[type.toLowerCase()]}`; + + return ( + + { this.renderBlockNumber(blockNumber) } + { this.renderType(type) } + { this.renderValue(value) } + { this.renderPrice(price) } + { this.renderAddress(fromAddress) } + { this.renderAddress(toAddress) } + + ); + } + + renderBlockNumber (blockNumber) { + return ( + + { formatBlockNumber(blockNumber) } + + ); + } + + renderAddress (address) { + if (!address) { + return EMPTY_COLUMN; + } + + return ( + + + { this.renderAddressName(address) } + + ); + } + + renderAddressName (address) { + const { accounts } = this.context; + const account = accounts.find((_account) => _account.address === address); + + if (account) { + return ( +
    + { account.name } +
    + ); + } + + return ( +
    + { address } +
    + ); + } + + renderPrice (price) { + if (!price) { + return EMPTY_COLUMN; + } + + return ( + + { formatEth(price) } ETH + + ); + } + + renderValue (value) { + if (!value) { + return EMPTY_COLUMN; + } + + return ( + + { formatCoins(value) } GAV + + ); + } + + renderType (type) { + return ( + + { type } + + ); + } +} diff --git a/js/src/dapps/gavcoin/Events/Event/index.js b/js/src/dapps/gavcoin/Events/Event/index.js new file mode 100644 index 0000000000..0925882d3e --- /dev/null +++ b/js/src/dapps/gavcoin/Events/Event/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './event'; diff --git a/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js b/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js new file mode 100644 index 0000000000..571da1bef1 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventBuyin/eventBuyin.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Event from '../Event'; + +export default class EventBuyin extends Component { + static propTypes = { + event: PropTypes.object + } + + render () { + const { event } = this.props; + const { buyer, price, amount } = event.params; + + return ( + + ); + } +} diff --git a/js/src/dapps/gavcoin/Events/EventBuyin/index.js b/js/src/dapps/gavcoin/Events/EventBuyin/index.js new file mode 100644 index 0000000000..77edc578af --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventBuyin/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './eventBuyin'; diff --git a/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js b/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js new file mode 100644 index 0000000000..16fa053515 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventNewTranch/eventNewTranch.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Event from '../Event'; + +export default class EventNewTranch extends Component { + static propTypes = { + event: PropTypes.object + } + + render () { + const { event } = this.props; + const { price } = event.params; + + return ( + + ); + } +} diff --git a/js/src/dapps/gavcoin/Events/EventNewTranch/index.js b/js/src/dapps/gavcoin/Events/EventNewTranch/index.js new file mode 100644 index 0000000000..46d1d2df62 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventNewTranch/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './eventNewTranch'; diff --git a/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js b/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js new file mode 100644 index 0000000000..5c4ed65620 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventRefund/eventRefund.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Event from '../Event'; + +export default class EventRefund extends Component { + static propTypes = { + event: PropTypes.object + } + + render () { + const { event } = this.props; + const { buyer, price, amount } = event.params; + + return ( + + ); + } +} diff --git a/js/src/dapps/gavcoin/Events/EventRefund/index.js b/js/src/dapps/gavcoin/Events/EventRefund/index.js new file mode 100644 index 0000000000..bac0f20dcc --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventRefund/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './eventRefund'; diff --git a/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js b/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js new file mode 100644 index 0000000000..64e489cb01 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventTransfer/eventTransfer.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Event from '../Event'; + +export default class EventTransfer extends Component { + static propTypes = { + event: PropTypes.object + } + + render () { + const { event } = this.props; + const { from, to, value } = event.params; + + return ( + + ); + } +} diff --git a/js/src/dapps/gavcoin/Events/EventTransfer/index.js b/js/src/dapps/gavcoin/Events/EventTransfer/index.js new file mode 100644 index 0000000000..a75b45a0ac --- /dev/null +++ b/js/src/dapps/gavcoin/Events/EventTransfer/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './eventTransfer'; diff --git a/js/src/dapps/gavcoin/Events/events.css b/js/src/dapps/gavcoin/Events/events.css new file mode 100644 index 0000000000..6fca623540 --- /dev/null +++ b/js/src/dapps/gavcoin/Events/events.css @@ -0,0 +1,94 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.events { + padding: 4em 2em; +} + +.list { + width: 100%; + border: none; + border-spacing: 0; +} + +.list td { + vertical-align: top; + padding: 4px 0.5em; + max-height: 32px; +} + +.event { + line-height: 32px; + vertical-align: top; +} + +.blocknumber, +.ethvalue, +.gavvalue { + font-family: 'Roboto Mono', monospace; +} + +.blocknumber, +.gavvalue { + text-align: right; +} + +.ethvalue { + text-align: center; +} + +.type { +} + +.account { +} + +.account img { + margin-bottom: -11px; +} + +.address { +} + +.name { + text-transform: uppercase; +} + +.event div { + display: inline; + margin-right: 1em; + vertical-align: top; +} + +.mined { +} + +.pending { + opacity: 0.5; +} + +.buyin { +} + +.refund { +} + +.transfer { +} + +.newtranch { + background: rgba(50, 250, 50, 0.1); +} diff --git a/js/src/dapps/gavcoin/Events/events.js b/js/src/dapps/gavcoin/Events/events.js new file mode 100644 index 0000000000..cb287b3a7f --- /dev/null +++ b/js/src/dapps/gavcoin/Events/events.js @@ -0,0 +1,158 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; + +import EventBuyin from './EventBuyin'; +import EventNewTranch from './EventNewTranch'; +import EventRefund from './EventRefund'; +import EventTransfer from './EventTransfer'; + +import styles from './events.css'; + +export default class Events extends Component { + static childContextTypes = { + accounts: PropTypes.array + } + + static contextTypes = { + contract: PropTypes.object.isRequired, + instance: PropTypes.object.isRequired + } + + static propTypes = { + accounts: PropTypes.array + } + + state = { + allEvents: [], + minedEvents: [], + pendingEvents: [] + } + + componentDidMount () { + this.setupFilters(); + } + + render () { + return ( +
    + + + { this.renderEvents() } + +
    +
    + ); + } + + renderEvents () { + const { allEvents } = this.state; + + if (!allEvents.length) { + return null; + } + + return allEvents + .map((event) => { + switch (event.type) { + case 'Buyin': + return ; + case 'NewTranch': + return ; + case 'Refund': + return ; + case 'Transfer': + return ; + } + }); + } + + getChildContext () { + const { accounts } = this.props; + + return { + accounts + }; + } + + setupFilters () { + const { contract } = this.context; + + const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex); + const logToEvent = (log) => { + const key = api.util.sha3(JSON.stringify(log)); + const { blockNumber, logIndex, transactionHash, transactionIndex, params, type } = log; + + return { + type: log.event, + state: type, + blockNumber, + logIndex, + transactionHash, + transactionIndex, + params, + key + }; + }; + + const options = { + fromBlock: 0, + toBlock: 'pending', + limit: 50 + }; + + contract.subscribe(null, options, (error, _logs) => { + if (error) { + console.error('setupFilters', error); + return; + } + + if (!_logs.length) { + return; + } + + const logs = _logs.map(logToEvent); + + const minedEvents = logs + .filter((log) => log.state === 'mined') + .reverse() + .concat(this.state.minedEvents) + .sort(sortEvents); + const pendingEvents = logs + .filter((log) => log.state === 'pending') + .reverse() + .concat(this.state.pendingEvents.filter((event) => { + return !logs.find((log) => { + const isMined = (log.state === 'mined') && (log.transactionHash === event.transactionHash); + const isPending = (log.state === 'pending') && (log.key === event.key); + + return isMined || isPending; + }); + })) + .sort(sortEvents); + const allEvents = pendingEvents.concat(minedEvents); + + this.setState({ + allEvents, + minedEvents, + pendingEvents + }); + }); + } +} diff --git a/js/src/dapps/gavcoin/Events/index.js b/js/src/dapps/gavcoin/Events/index.js new file mode 100644 index 0000000000..88ad6d407c --- /dev/null +++ b/js/src/dapps/gavcoin/Events/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './events'; diff --git a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..2b645d8239 --- /dev/null +++ b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 32px; + height: 32px; + border-radius: 50%; + margin-right: 0.5em; +} diff --git a/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..51f48d46ab --- /dev/null +++ b/js/src/dapps/gavcoin/IdentityIcon/identityIcon.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired + } + + render () { + const { address } = this.props; + + return ( + + ); + } +} diff --git a/js/src/dapps/gavcoin/IdentityIcon/index.js b/js/src/dapps/gavcoin/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/gavcoin/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/gavcoin/Loading/index.js b/js/src/dapps/gavcoin/Loading/index.js new file mode 100644 index 0000000000..0468cab37d --- /dev/null +++ b/js/src/dapps/gavcoin/Loading/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './loading'; diff --git a/js/src/dapps/gavcoin/Loading/loading.css b/js/src/dapps/gavcoin/Loading/loading.css new file mode 100644 index 0000000000..3ec65400f0 --- /dev/null +++ b/js/src/dapps/gavcoin/Loading/loading.css @@ -0,0 +1,21 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.loading { + width: 100%; + text-align: center; + padding-top: 2em; +} diff --git a/js/src/dapps/gavcoin/Loading/loading.js b/js/src/dapps/gavcoin/Loading/loading.js new file mode 100644 index 0000000000..9e00cc8f11 --- /dev/null +++ b/js/src/dapps/gavcoin/Loading/loading.js @@ -0,0 +1,31 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import { CircularProgress } from 'material-ui'; + +import styles from './loading.css'; + +export default class Loading extends Component { + render () { + return ( +
    + +
    + ); + } +} diff --git a/js/src/dapps/gavcoin/Status/index.js b/js/src/dapps/gavcoin/Status/index.js new file mode 100644 index 0000000000..44079b2248 --- /dev/null +++ b/js/src/dapps/gavcoin/Status/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './status'; diff --git a/js/src/dapps/gavcoin/Status/status.css b/js/src/dapps/gavcoin/Status/status.css new file mode 100644 index 0000000000..bb541b1788 --- /dev/null +++ b/js/src/dapps/gavcoin/Status/status.css @@ -0,0 +1,53 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ +.status { + background: rgba(25, 75, 125, 1); + color: rgba(255, 255, 255, 1); + padding: 4em 0 2em 0; + display: flex; + flex-wrap: wrap; +} + +.title { + margin-top: 0; + font-weight: 300; + font-size: 2.5rem; + text-transform: uppercase; +} + +.item { + flex: 0 1 30%; + width: 30%; + margin: 0 1.5%; + text-align: center; +} + +.byline { + font-size: 1.25em; + color: rgba(255, 255, 255, 0.7); +} + +.heading { + text-transform: uppercase; + letter-spacing: 0.25em; + font-size: 1.5em; + color: rgba(255, 255, 255, 0.7); +} + +.hero { + font-size: 4em; +} diff --git a/js/src/dapps/gavcoin/Status/status.js b/js/src/dapps/gavcoin/Status/status.js new file mode 100644 index 0000000000..81dd0cb169 --- /dev/null +++ b/js/src/dapps/gavcoin/Status/status.js @@ -0,0 +1,74 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { formatBlockNumber, formatCoins, formatEth } from '../format'; + +import styles from './status.css'; + +export default class Status extends Component { + static propTypes = { + address: PropTypes.string, + gavBalance: PropTypes.object, + blockNumber: PropTypes.object, + totalSupply: PropTypes.object, + remaining: PropTypes.object, + price: PropTypes.object, + children: PropTypes.node + } + + render () { + const { blockNumber, gavBalance, totalSupply, remaining, price } = this.props; + + if (!totalSupply) { + return null; + } + + return ( +
    +
    +
     
    +
    + { formatCoins(remaining, -1) } +
    +
    + available for { formatEth(price) }ETH +
    +
    +
    +
    GAVcoin
    +
    + { formatCoins(totalSupply, -1) } +
    +
    + total at { formatBlockNumber(blockNumber) } +
    +
    +
    +
     
    +
    + { formatCoins(gavBalance, -1) } +
    +
    + coin balance +
    +
    + { this.props.children } +
    + ); + } +} diff --git a/js/src/dapps/gavcoin/format/index.js b/js/src/dapps/gavcoin/format/index.js new file mode 100644 index 0000000000..5e32012d0a --- /dev/null +++ b/js/src/dapps/gavcoin/format/index.js @@ -0,0 +1,52 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; + +import { api } from '../parity'; + +const DIVISOR = 10 ** 6; +const ZERO = new BigNumber(0); + +export function formatBlockNumber (blockNumber) { + return ZERO.eq(blockNumber || 0) + ? 'Pending' + : `#${blockNumber.toFormat()}`; +} + +export function formatCoins (amount, decimals = 6) { + const adjusted = amount.div(DIVISOR); + + if (decimals === -1) { + if (adjusted.gte(10000)) { + decimals = 0; + } else if (adjusted.gte(1000)) { + decimals = 1; + } else if (adjusted.gte(100)) { + decimals = 2; + } else if (adjusted.gte(10)) { + decimals = 3; + } else { + decimals = 4; + } + } + + return adjusted.toFormat(decimals); +} + +export function formatEth (eth, decimals = 3) { + return api.util.fromWei(eth).toFormat(decimals); +} diff --git a/js/src/dapps/gavcoin/parity.js b/js/src/dapps/gavcoin/parity.js new file mode 100644 index 0000000000..f6d59f44d5 --- /dev/null +++ b/js/src/dapps/gavcoin/parity.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export { + api +}; diff --git a/js/src/dapps/githubhint.html b/js/src/dapps/githubhint.html new file mode 100644 index 0000000000..0084dd051c --- /dev/null +++ b/js/src/dapps/githubhint.html @@ -0,0 +1,16 @@ + + + + + + + GitHub Hint + + +
    + + + + + + diff --git a/js/src/dapps/githubhint.js b/js/src/dapps/githubhint.js new file mode 100644 index 0000000000..b737029906 --- /dev/null +++ b/js/src/dapps/githubhint.js @@ -0,0 +1,33 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ReactDOM from 'react-dom'; +import React from 'react'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import Application from './githubhint/Application'; + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './githubhint.html'; + +ReactDOM.render( + , + document.querySelector('#container') +); diff --git a/js/src/dapps/githubhint/Application/application.css b/js/src/dapps/githubhint/Application/application.css new file mode 100644 index 0000000000..aa4a68dc69 --- /dev/null +++ b/js/src/dapps/githubhint/Application/application.css @@ -0,0 +1,121 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.container { + background: #333; + font-family: 'Roboto'; + vertical-align: middle; + padding: 4em 0; + text-align: center; +} + +.form { + text-align: right; + margin: 0 auto; + border-radius: 5px; + width: 44em; + color: #eee; +} + +.box { + padding: 2em; + background: rgba(255, 255, 255, 0.1); + border-radius: 5px; + margin-bottom: 2em; +} + +.buttons { + text-align: center; + margin: 0 auto 2em auto; +} + +.box .buttons { + text-align: right; + margin: 2em 0 0 0; + position: relative; +} + +.box .buttons .addressSelect { + position: absolute; + top: 0; + left: 0; +} + +.box .description { + margin: 0 0 2em 0; + text-align: center; + opacity: 0.75; +} + +.progress { + margin: 2em 0 0 0; + opacity: 0.75; + text-align: center; +} + +.statusHeader { + font-size: 1em; +} + +.statusState, .statusError { + padding: 1em 0 0 0; +} + +.statusError { + color: #f66; +} + +.capture { +} + +.capture * { + display: inline-block; + padding: 0.75em; + vertical-align: middle; + box-sizing: border-box; + width: 20em; +} + +.capture input { + color: #333; + background: #eee; + border: none; + border-radius: 5px; + width: 100%; + font-size: 1em; + text-align: center; +} + +.capture input[disabled] { + opacity: 0.5; +} + +.capture input.error { + background: #fcc; +} + +.hashError { + padding-top: 0.5em; + color: #f66; + text-align: center; +} + +.hashOk { + padding-top: 0.5em; + opacity: 0.5; + text-align: center; +} diff --git a/js/src/dapps/githubhint/Application/application.js b/js/src/dapps/githubhint/Application/application.js new file mode 100644 index 0000000000..ea7e760c58 --- /dev/null +++ b/js/src/dapps/githubhint/Application/application.js @@ -0,0 +1,261 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import { api } from '../parity'; +import { attachInterface } from '../services'; +import Button from '../Button'; +import IdentityIcon from '../IdentityIcon'; +import Loading from '../Loading'; + +import styles from './application.css'; + +const INVALID_URL_HASH = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; +const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; + +export default class Application extends Component { + state = { + loading: true, + url: '', + urlError: null, + contentHash: '', + contentHashError: null, + registerBusy: false, + registerError: null, + registerState: '' + } + + componentDidMount () { + attachInterface() + .then((state) => { + this.setState(state, () => { + this.setState({ loading: false }); + }); + }); + } + + render () { + const { loading } = this.state; + + return loading + ? this.renderLoading() + : this.renderPage(); + } + + renderLoading () { + return ( + + ); + } + + renderPage () { + const { registerBusy, url, urlError, contentHash, contentHashError } = this.state; + + return ( +
    +
    +
    +
    + Provide a valid URL to register. The content information can be used in other contracts that allows for reverse lookups, e.g. image registries, dapp registries, etc. +
    +
    + +
    +
    + { contentHashError || contentHash } +
    + { registerBusy ? this.renderProgress() : this.renderButtons() } +
    +
    +
    + ); + } + + renderButtons () { + const { accounts, fromAddress, url, urlError, contentHashError } = this.state; + const account = accounts[fromAddress]; + + return ( +
    +
    + +
    + +
    + ); + } + + renderProgress () { + const { registerError, registerState } = this.state; + + if (registerError) { + return ( +
    +
    + Your registration has encountered an error +
    +
    + { registerError } +
    +
    + ); + } + + return ( +
    +
    + Your URL is being registered +
    +
    + { registerState } +
    +
    + ); + } + + onClickContentHash = () => { + this.setState({ fileHash: false, commit: '' }); + } + + onClickFileHash = () => { + this.setState({ fileHash: true, commit: 0 }); + } + + onChangeUrl = (event) => { + const url = event.target.value; + let urlError = null; + + if (url && url.length) { + var re = /^https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}/g; + urlError = re.test(url) + ? null + : 'not matching rexex'; + } + + this.setState({ url, urlError, contentHashError: 'hash lookup in progress' }, () => { + this.lookupHash(); + }); + } + + onClickRegister = () => { + const { url, urlError, contentHash, contentHashError, fromAddress, instance } = this.state; + + if (!!contentHashError || !!urlError || url.length === 0) { + return; + } + + this.setState({ registerBusy: true, registerState: 'Estimating gas for the transaction' }); + + const values = [contentHash, url]; + const options = { from: fromAddress }; + + instance + .hintURL.estimateGas(options, values) + .then((gas) => { + this.setState({ registerState: 'Gas estimated, Posting transaction to the network' }); + + const gasPassed = gas.mul(1.2); + options.gas = gasPassed.toFixed(0); + console.log(`gas estimated at ${gas.toFormat(0)}, passing ${gasPassed.toFormat(0)}`); + + return instance.hintURL.postTransaction(options, values); + }) + .then((signerRequestId) => { + this.setState({ signerRequestId, registerState: 'Transaction posted, Waiting for transaction authorization' }); + + return api.pollMethod('eth_checkRequest', signerRequestId); + }) + .then((txHash) => { + this.setState({ txHash, registerState: 'Transaction authorized, Waiting for network confirmations' }); + + return api.pollMethod('eth_getTransactionReceipt', txHash, (receipt) => { + if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) { + return false; + } + + return true; + }); + }) + .then((txReceipt) => { + this.setState({ txReceipt, registerBusy: false, registerState: 'Network confirmed, Received transaction receipt', url: '', contentHash: '' }); + }) + .catch((error) => { + console.error('onSend', error); + this.setState({ registerError: error.message }); + }); + } + + onSelectFromAddress = () => { + const { accounts, fromAddress } = this.state; + const addresses = Object.keys(accounts); + let index = 0; + + addresses.forEach((address, _index) => { + if (address === fromAddress) { + index = _index; + } + }); + + index++; + if (index >= addresses.length) { + index = 0; + } + + this.setState({ fromAddress: addresses[index] }); + } + + lookupHash () { + const { url, instance } = this.state; + + api.ethcore + .hashContent(url) + .then((contentHash) => { + console.log('lookupHash', contentHash); + if (contentHash === INVALID_URL_HASH) { + this.setState({ contentHashError: 'invalid url endpoint', contentHash: null }); + return; + } + + instance.entries + .call({}, [contentHash]) + .then(([accountSlashRepo, commit, owner]) => { + console.log('lookupHash', accountSlashRepo, api.util.bytesToHex(commit), owner); + + if (owner !== ZERO_ADDRESS) { + this.setState({ contentHashError: contentHash, contentHash: null }); + } else { + this.setState({ contentHashError: null, contentHash }); + } + }); + }) + .catch((error) => { + console.error('lookupHash', error); + this.setState({ contentHashError: error.message, contentHash: null }); + }); + } +} diff --git a/js/src/dapps/githubhint/Application/index.js b/js/src/dapps/githubhint/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/githubhint/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/githubhint/Button/button.css b/js/src/dapps/githubhint/Button/button.css new file mode 100644 index 0000000000..28519094b2 --- /dev/null +++ b/js/src/dapps/githubhint/Button/button.css @@ -0,0 +1,56 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.button { + background: #08a; + color: white; + border-radius: 5px; + font-size: 1em; + line-height: 24px; + height: 24px; + padding: 0.75em 1.5em; + cursor: pointer; + display: inline-block; + text-align: center; +} + +.button.first { + border-radius: 5px 0 0 5px; +} + +.button.middle { + border-radius: 0; +} + +.button.last { + border-radius: 0 5px 5px 0; +} + +.button.disabled { + opacity: 0.25; + cursor: default; +} + +.button.inverse { + color: #08a; + background: white; +} + +.button * { + display: inline-block; + vertical-align: top; +} diff --git a/js/src/dapps/githubhint/Button/button.js b/js/src/dapps/githubhint/Button/button.js new file mode 100644 index 0000000000..42fca1af7d --- /dev/null +++ b/js/src/dapps/githubhint/Button/button.js @@ -0,0 +1,53 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import styles from './button.css'; + +export default class Button extends Component { + static propTypes = { + children: PropTypes.node.isRequired, + className: PropTypes.string, + disabled: PropTypes.bool, + invert: PropTypes.bool, + first: PropTypes.bool, + last: PropTypes.bool, + middle: PropTypes.bool, + onClick: PropTypes.func.isRequired + } + + render () { + const { children, className, disabled, invert, first, last, middle } = this.props; + const classes = `${styles.button} ${disabled ? styles.disabled : ''} ${invert ? styles.inverse : ''} ${first ? styles.first : ''} ${last ? styles.last : ''} ${middle ? styles.middle : ''} ${className}`; + + return ( +
    + { children } +
    + ); + } + + onClick = (event) => { + const { disabled, onClick } = this.props; + + if (disabled) { + return; + } + + onClick(event); + } +} diff --git a/js/src/dapps/githubhint/Button/index.js b/js/src/dapps/githubhint/Button/index.js new file mode 100644 index 0000000000..f69a65e3d5 --- /dev/null +++ b/js/src/dapps/githubhint/Button/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './button'; diff --git a/js/src/dapps/githubhint/IdentityIcon/identityIcon.css b/js/src/dapps/githubhint/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..3fa1df99e4 --- /dev/null +++ b/js/src/dapps/githubhint/IdentityIcon/identityIcon.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 24px; + height: 24px; + border-radius: 50%; + margin-right: 0.5em; +} diff --git a/js/src/dapps/githubhint/IdentityIcon/identityIcon.js b/js/src/dapps/githubhint/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..0bc86731d4 --- /dev/null +++ b/js/src/dapps/githubhint/IdentityIcon/identityIcon.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired + } + + render () { + const { address } = this.props; + + return ( + + ); + } +} diff --git a/js/src/dapps/githubhint/IdentityIcon/index.js b/js/src/dapps/githubhint/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/githubhint/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/githubhint/Loading/index.js b/js/src/dapps/githubhint/Loading/index.js new file mode 100644 index 0000000000..0468cab37d --- /dev/null +++ b/js/src/dapps/githubhint/Loading/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './loading'; diff --git a/js/src/dapps/githubhint/Loading/loading.css b/js/src/dapps/githubhint/Loading/loading.css new file mode 100644 index 0000000000..b77d1a2372 --- /dev/null +++ b/js/src/dapps/githubhint/Loading/loading.css @@ -0,0 +1,24 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.loading { + width: 100%; + text-align: center; + padding-top: 5em; + font-size: 2em; + color: #999; +} diff --git a/js/src/dapps/githubhint/Loading/loading.js b/js/src/dapps/githubhint/Loading/loading.js new file mode 100644 index 0000000000..b884597d76 --- /dev/null +++ b/js/src/dapps/githubhint/Loading/loading.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import styles from './loading.css'; + +export default class Loading extends Component { + render () { + return ( +
    + Attaching to contract ... +
    + ); + } +} diff --git a/js/src/dapps/githubhint/parity.js b/js/src/dapps/githubhint/parity.js new file mode 100644 index 0000000000..f6d59f44d5 --- /dev/null +++ b/js/src/dapps/githubhint/parity.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export { + api +}; diff --git a/js/src/dapps/githubhint/services.js b/js/src/dapps/githubhint/services.js new file mode 100644 index 0000000000..ee198ff6df --- /dev/null +++ b/js/src/dapps/githubhint/services.js @@ -0,0 +1,64 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import * as abis from '../../contracts/abi'; +import { api } from './parity'; + +export function attachInterface () { + return api.ethcore + .registryAddress() + .then((registryAddress) => { + console.log(`the registry was found at ${registryAddress}`); + + const registry = api.newContract(abis.registry, registryAddress).instance; + + return Promise + .all([ + registry.getAddress.call({}, [api.util.sha3('githubhint'), 'A']), + api.personal.listAccounts(), + api.personal.accountsInfo() + ]); + }) + .then(([address, addresses, accountsInfo]) => { + console.log(`githubhint was found at ${address}`); + + const contract = api.newContract(abis.githubhint, address); + const accounts = addresses.reduce((obj, address) => { + const info = accountsInfo[address]; + + return Object.assign(obj, { + [address]: { + address, + name: info.name || 'Unnamed', + uuid: info.uuid + } + }); + }, {}); + const fromAddress = Object.keys(accounts)[0]; + + return { + accounts, + address, + accountsInfo, + contract, + instance: contract.instance, + fromAddress + }; + }) + .catch((error) => { + console.error('attachInterface', error); + }); +} diff --git a/js/src/dapps/registry.html b/js/src/dapps/registry.html new file mode 100644 index 0000000000..21b09dc12f --- /dev/null +++ b/js/src/dapps/registry.html @@ -0,0 +1,16 @@ + + + + + + + Token Registry + + +
    + + + + + + diff --git a/js/src/dapps/registry.js b/js/src/dapps/registry.js new file mode 100644 index 0000000000..ebcff155a1 --- /dev/null +++ b/js/src/dapps/registry.js @@ -0,0 +1,37 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import store from './registry/store'; +import Container from './registry/Container'; + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './registry.html'; + +ReactDOM.render( + + + , + document.querySelector('#container') +); diff --git a/js/src/dapps/registry/Accounts/accounts.css b/js/src/dapps/registry/Accounts/accounts.css new file mode 100644 index 0000000000..344a92867e --- /dev/null +++ b/js/src/dapps/registry/Accounts/accounts.css @@ -0,0 +1,38 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.button { + /* TODO remove !important once material design lite is used */ + padding: 0 !important; +} + +.icon { + /* TODO remove !important once material design lite is used */ + margin: 0 !important; + width: 30px !important; + height: 30px !important; +} + +.menuIcon { + display: inline-block; + vertical-align: middle; +} +.menuText { + display: inline-block; + line-height: 24px; + vertical-align: top; +} diff --git a/js/src/dapps/registry/Accounts/accounts.js b/js/src/dapps/registry/Accounts/accounts.js new file mode 100644 index 0000000000..fe262a84ff --- /dev/null +++ b/js/src/dapps/registry/Accounts/accounts.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import IconMenu from 'material-ui/IconMenu'; +import IconButton from 'material-ui/IconButton/IconButton'; +import AccountIcon from 'material-ui/svg-icons/action/account-circle'; +import MenuItem from 'material-ui/MenuItem'; + +import IdentityIcon from '../IdentityIcon'; +import renderAddress from '../ui/address'; + +import styles from './accounts.css'; + +export default class Accounts extends Component { + + static propTypes = { + actions: PropTypes.object.isRequired, + all: PropTypes.object.isRequired, + selected: PropTypes.object + } + + render () { + const { all, selected } = this.props; + + const accountsButton = ( + + { selected + ? () + : () + } + ); + + return ( + + { Object.values(all).map(this.renderAccount) } + + ); + } + + renderAccount = (account) => { + const { all, selected } = this.props; + const isSelected = selected && selected.address === account.address; + + return ( + + { renderAddress(account.address, all, {}) } + + ); + }; + + onAccountSelect = (e, address) => { + this.props.actions.select(address); + }; +} diff --git a/js/src/dapps/registry/Accounts/actions.js b/js/src/dapps/registry/Accounts/actions.js new file mode 100644 index 0000000000..4f2bd3c707 --- /dev/null +++ b/js/src/dapps/registry/Accounts/actions.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export const select = (address) => ({ type: 'accounts select', address }); diff --git a/js/src/dapps/registry/Accounts/index.js b/js/src/dapps/registry/Accounts/index.js new file mode 100644 index 0000000000..e9be1d5573 --- /dev/null +++ b/js/src/dapps/registry/Accounts/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './accounts'; diff --git a/js/src/dapps/registry/Application/application.css b/js/src/dapps/registry/Application/application.css new file mode 100644 index 0000000000..c5a54040e0 --- /dev/null +++ b/js/src/dapps/registry/Application/application.css @@ -0,0 +1,39 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.header { + display: flex; + justify-content: space-between; + margin: 0; padding: .3em 1em; + color: #fff; + background-color: #333; +} + +.header h1 { + margin-top: 0; + margin-bottom: 0; + line-height: 50px; + font-size: 200%; + text-transform: uppercase; +} + +.address { + margin-bottom: 0; + padding: 1rem; + font-size: 80%; + background-color: #f0f0f0; +} diff --git a/js/src/dapps/registry/Application/application.js b/js/src/dapps/registry/Application/application.js new file mode 100644 index 0000000000..3d3d8d582d --- /dev/null +++ b/js/src/dapps/registry/Application/application.js @@ -0,0 +1,88 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import getMuiTheme from 'material-ui/styles/getMuiTheme'; +import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme'; +const muiTheme = getMuiTheme(lightBaseTheme); + +import CircularProgress from 'material-ui/CircularProgress'; +import styles from './application.css'; +import Accounts from '../Accounts'; +import Events from '../Events'; +import Lookup from '../Lookup'; +import Names from '../Names'; +import Records from '../Records'; + +const nullable = (type) => React.PropTypes.oneOfType([ React.PropTypes.oneOf([ null ]), type ]); + +export default class Application extends Component { + static childContextTypes = { + muiTheme: PropTypes.object.isRequired, + api: PropTypes.object.isRequired + }; + getChildContext () { + return { muiTheme, api: window.parity.api }; + } + + static propTypes = { + actions: PropTypes.object.isRequired, + accounts: PropTypes.object.isRequired, + contacts: PropTypes.object.isRequired, + contract: nullable(PropTypes.object.isRequired), + fee: nullable(PropTypes.object.isRequired), + lookup: PropTypes.object.isRequired, + events: PropTypes.object.isRequired, + names: PropTypes.object.isRequired, + records: PropTypes.object.isRequired + }; + + render () { + const { + actions, + accounts, contacts, + contract, fee, + lookup, + events, + names, + records + } = this.props; + + return ( +
    +
    +

    RΞgistry

    + +
    + { contract && fee ? ( +
    + + + + +

    + The Registry is provided by the contract at { contract.address }. +

    +
    + ) : ( + + ) } +
    + ); + } + +} diff --git a/js/src/dapps/registry/Application/index.js b/js/src/dapps/registry/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/registry/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/registry/Container.js b/js/src/dapps/registry/Container.js new file mode 100644 index 0000000000..1464320e63 --- /dev/null +++ b/js/src/dapps/registry/Container.js @@ -0,0 +1,66 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; + +import Application from './Application'; +import * as actions from './actions'; + +const nullable = (type) => React.PropTypes.oneOfType([ React.PropTypes.oneOf([ null ]), type ]); + +class Container extends Component { + static propTypes = { + actions: PropTypes.object.isRequired, + accounts: PropTypes.object.isRequired, + contacts: PropTypes.object.isRequired, + contract: nullable(PropTypes.object.isRequired), + owner: nullable(PropTypes.string.isRequired), + fee: nullable(PropTypes.object.isRequired), + lookup: PropTypes.object.isRequired, + events: PropTypes.object.isRequired + }; + + componentDidMount () { + Promise.all([ + this.props.actions.addresses.fetch(), + this.props.actions.fetchContract() + ]).then(() => { + this.props.actions.events.subscribe('Reserved'); + }); + } + + render () { + return (); + } +} + +export default connect( + // redux -> react connection + (state) => state, + // react -> redux connection + (dispatch) => { + const bound = bindActionCreators(actions, dispatch); + bound.addresses = bindActionCreators(actions.addresses, dispatch); + bound.accounts = bindActionCreators(actions.accounts, dispatch); + bound.lookup = bindActionCreators(actions.lookup, dispatch); + bound.events = bindActionCreators(actions.events, dispatch); + bound.names = bindActionCreators(actions.names, dispatch); + bound.records = bindActionCreators(actions.records, dispatch); + return { actions: bound }; + } +)(Container); diff --git a/js/src/dapps/registry/Events/actions.js b/js/src/dapps/registry/Events/actions.js new file mode 100644 index 0000000000..e12c98c4f6 --- /dev/null +++ b/js/src/dapps/registry/Events/actions.js @@ -0,0 +1,85 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { api } from '../parity.js'; + +export const start = (name, from, to) => ({ type: 'events subscribe start', name, from, to }); +export const fail = (name) => ({ type: 'events subscribe fail', name }); +export const success = (name, subscription) => ({ type: 'events subscribe success', name, subscription }); + +export const event = (name, event) => ({ type: 'events event', name, event }); + +export const subscribe = (name, from = 0, to = 'pending') => + (dispatch, getState) => { + const { contract } = getState(); + if (!contract) return; + const opt = { fromBlock: from, toBlock: to, limit: 50 }; + + dispatch(start(name, from, to)); + + contract + .subscribe(name, opt, (error, events) => { + if (error) { + console.error(`error receiving events for ${name}`, error); + return; + } + + events.forEach((e) => { + api.eth.getBlockByNumber(e.blockNumber) + .then((block) => { + const data = { + type: name, + key: '' + e.transactionHash + e.logIndex, + state: e.type, + block: e.blockNumber, + index: e.logIndex, + transaction: e.transactionHash, + parameters: e.params, + timestamp: block.timestamp + }; + dispatch(event(name, data)); + }) + .catch((err) => { + console.error(`could not fetch block ${e.blockNumber}.`); + console.error(err); + }); + }); + }) + .then((subscriptionId) => { + dispatch(success(name, subscriptionId)); + }) + .catch((error) => { + console.error('event subscription failed', error); + dispatch(fail(name)); + }); + }; + +export const unsubscribe = (name) => + (dispatch, getState) => { + const state = getState(); + if (!state.contract) return; + const subscriptions = state.events.subscriptions; + if (!(name in subscriptions) || subscriptions[name] === null) return; + + state.contract + .unsubscribe(subscriptions[name]) + .then(() => { + dispatch({ type: 'events unsubscribe', name }); + }) + .catch((error) => { + console.error('event unsubscribe failed', error); + }); + }; diff --git a/js/src/dapps/registry/Events/events.css b/js/src/dapps/registry/Events/events.css new file mode 100644 index 0000000000..66277dae3d --- /dev/null +++ b/js/src/dapps/registry/Events/events.css @@ -0,0 +1,51 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.events { + margin: 1em; +} + +.options { + margin: 0 .5em; +} + +.reserved, .dropped, .dataChanged { +} + +.reserved abbr, .dropped abbr { + cursor: help; +} + +.pending { + opacity: .6; +} + +.owner code { + display: inline-block; + vertical-align: top; + line-height: 32px; + word-wrap: break-word; +} + +.eventsList { + width: 100%; + boder: none; +} + +.eventsList td { + padding: 0.25em 0.5em; +} diff --git a/js/src/dapps/registry/Events/events.js b/js/src/dapps/registry/Events/events.js new file mode 100644 index 0000000000..ffb1fc9190 --- /dev/null +++ b/js/src/dapps/registry/Events/events.js @@ -0,0 +1,167 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { Card, CardHeader, CardActions, CardText } from 'material-ui/Card'; +import Toggle from 'material-ui/Toggle'; +import moment from 'moment'; + +import { bytesToHex } from '../parity'; +import renderHash from '../ui/hash'; +import renderAddress from '../ui/address'; +import styles from './events.css'; + +const inlineButton = { + display: 'inline-block', + width: 'auto', + marginRight: '1em' +}; + +const renderStatus = (timestamp, isPending) => { + timestamp = moment(timestamp); + if (isPending) { + return (pending); + } + return ( + + ); +}; + +const renderEvent = (classNames, verb) => (e, accounts, contacts) => { + const classes = e.state === 'pending' + ? classNames + ' ' + styles.pending : classNames; + + return ( + + { renderAddress(e.parameters.owner, accounts, contacts) } + { verb } + { renderHash(bytesToHex(e.parameters.name)) } + { renderStatus(e.timestamp, e.state === 'pending') } + + ); +}; + +const renderDataChanged = (e, accounts, contacts) => { + let classNames = styles.dataChanged; + if (e.state === 'pending') { + classNames += ' ' + styles.pending; + } + + return ( + + { renderAddress(e.parameters.owner, accounts, contacts) } + updated + + key { new Buffer(e.parameters.plainKey).toString('utf8') } of { renderHash(bytesToHex(e.parameters.name)) } + + { renderStatus(e.timestamp, e.state === 'pending') } + + ); +}; + +const eventTypes = { + Reserved: renderEvent(styles.reserved, 'reserved'), + Dropped: renderEvent(styles.dropped, 'dropped'), + DataChanged: renderDataChanged +}; + +export default class Events extends Component { + + static propTypes = { + actions: PropTypes.object.isRequired, + subscriptions: PropTypes.object.isRequired, + pending: PropTypes.object.isRequired, + events: PropTypes.array.isRequired, + accounts: PropTypes.object.isRequired, + contacts: PropTypes.object.isRequired + } + + render () { + const { subscriptions, pending, accounts, contacts } = this.props; + return ( + + + + + + + + + + + { + this.props.events + .filter((e) => eventTypes[e.type]) + .map((e) => eventTypes[e.type](e, accounts, contacts)) + } + +
    +
    +
    + ); + } + + onReservedToggle = (e, isToggled) => { + const { pending, subscriptions, actions } = this.props; + if (!pending.Reserved) { + if (isToggled && subscriptions.Reserved === null) { + actions.subscribe('Reserved'); + } else if (!isToggled && subscriptions.Reserved !== null) { + actions.unsubscribe('Reserved'); + } + } + }; + onDroppedToggle = (e, isToggled) => { + const { pending, subscriptions, actions } = this.props; + if (!pending.Dropped) { + if (isToggled && subscriptions.Dropped === null) { + actions.subscribe('Dropped'); + } else if (!isToggled && subscriptions.Dropped !== null) { + actions.unsubscribe('Dropped'); + } + } + }; + onDataChangedToggle = (e, isToggled) => { + const { pending, subscriptions, actions } = this.props; + if (!pending.DataChanged) { + if (isToggled && subscriptions.DataChanged === null) { + actions.subscribe('DataChanged'); + } else if (!isToggled && subscriptions.DataChanged !== null) { + actions.unsubscribe('DataChanged'); + } + } + }; +} diff --git a/js/src/dapps/registry/Events/index.js b/js/src/dapps/registry/Events/index.js new file mode 100644 index 0000000000..15d43c375c --- /dev/null +++ b/js/src/dapps/registry/Events/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './events.js'; diff --git a/js/src/dapps/registry/Events/reducers.js b/js/src/dapps/registry/Events/reducers.js new file mode 100644 index 0000000000..6ff0011d34 --- /dev/null +++ b/js/src/dapps/registry/Events/reducers.js @@ -0,0 +1,76 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const initialState = { + subscriptions: { + Reserved: null, + Dropped: null, + DataChanged: null + }, + pending: { + Reserved: false, + Dropped: false, + DataChanged: false + }, + events: [] +}; + +const sortEvents = (a, b) => { + if (a.state === 'pending' && b.state !== 'pending') return -1; + if (a.state !== 'pending' && b.state === 'pending') return 1; + const d = b.block.minus(a.block).toFixed(0); + if (d === 0) return b.index.minus(a.index).toFixed(0); + return d; +}; + +export default (state = initialState, action) => { + if (!(action.name in state.subscriptions)) { // invalid event name + return state; + } + + if (action.type === 'events subscribe start') { + return { ...state, pending: { ...state.pending, [action.name]: true } }; + } + if (action.type === 'events subscribe fail') { + return { ...state, pending: { ...state.pending, [action.name]: false } }; + } + if (action.type === 'events subscribe success') { + return { + ...state, + pending: { ...state.pending, [action.name]: false }, + subscriptions: { ...state.subscriptions, [action.name]: action.subscription } + }; + } + + if (action.type === 'events unsubscribe') { + return { + ...state, + pending: { ...state.pending, [action.name]: false }, + subscriptions: { ...state.subscriptions, [action.name]: null }, + events: state.events.filter((event) => event.type !== action.name) + }; + } + + if (action.type === 'events event') { + return { ...state, events: state.events + .filter((event) => event.key !== action.event.key) + .concat(action.event) + .sort(sortEvents) + }; + } + + return state; +}; diff --git a/js/src/dapps/registry/IdentityIcon/identityIcon.css b/js/src/dapps/registry/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..3fa1df99e4 --- /dev/null +++ b/js/src/dapps/registry/IdentityIcon/identityIcon.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 24px; + height: 24px; + border-radius: 50%; + margin-right: 0.5em; +} diff --git a/js/src/dapps/registry/IdentityIcon/identityIcon.js b/js/src/dapps/registry/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..e4baf27057 --- /dev/null +++ b/js/src/dapps/registry/IdentityIcon/identityIcon.js @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired, + className: PropTypes.string, + style: PropTypes.object + } + + render () { + const { address, className, style } = this.props; + + return ( + + ); + } +} diff --git a/js/src/dapps/registry/IdentityIcon/index.js b/js/src/dapps/registry/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/registry/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/registry/Lookup/actions.js b/js/src/dapps/registry/Lookup/actions.js new file mode 100644 index 0000000000..a7df875854 --- /dev/null +++ b/js/src/dapps/registry/Lookup/actions.js @@ -0,0 +1,42 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { sha3 } from '../parity.js'; + +export const clear = () => ({ type: 'lookup clear' }); + +export const start = (name, key) => ({ type: 'lookup start', name, key }); + +export const success = (address) => ({ type: 'lookup success', result: address }); + +export const fail = () => ({ type: 'lookup error' }); + +export const lookup = (name, key) => (dispatch, getState) => { + const { contract } = getState(); + if (!contract) return; + const getAddress = contract.functions + .find((f) => f.name === 'getAddress'); + + name = name.toLowerCase(); + dispatch(start(name, key)); + getAddress.call({}, [sha3(name), key]) + .then((address) => dispatch(success(address))) + .catch((err) => { + console.error(`could not lookup ${key} for ${name}`); + if (err) console.error(err.stack); + dispatch(fail()); + }); +}; diff --git a/js/src/dapps/registry/Lookup/index.js b/js/src/dapps/registry/Lookup/index.js new file mode 100644 index 0000000000..f4ade7c001 --- /dev/null +++ b/js/src/dapps/registry/Lookup/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './lookup.js'; diff --git a/js/src/dapps/registry/Lookup/lookup.css b/js/src/dapps/registry/Lookup/lookup.css new file mode 100644 index 0000000000..12ddd040c0 --- /dev/null +++ b/js/src/dapps/registry/Lookup/lookup.css @@ -0,0 +1,28 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.lookup { + margin: 1em; +} + +.box { + margin: 0 1em; +} + +.spacing { + margin-left: 1em; +} diff --git a/js/src/dapps/registry/Lookup/lookup.js b/js/src/dapps/registry/Lookup/lookup.js new file mode 100644 index 0000000000..4238f11601 --- /dev/null +++ b/js/src/dapps/registry/Lookup/lookup.js @@ -0,0 +1,98 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { Card, CardHeader, CardText } from 'material-ui/Card'; +import TextField from 'material-ui/TextField'; +import RaisedButton from 'material-ui/RaisedButton'; +import SearchIcon from 'material-ui/svg-icons/action/search'; +import renderAddress from '../ui/address.js'; +import renderImage from '../ui/image.js'; + +import recordTypeSelect from '../ui/record-type-select.js'; +import styles from './lookup.css'; + +const nullable = (type) => React.PropTypes.oneOfType([ React.PropTypes.oneOf([ null ]), type ]); + +export default class Lookup extends Component { + + static propTypes = { + actions: PropTypes.object.isRequired, + name: PropTypes.string.isRequired, + type: PropTypes.string.isRequired, + result: nullable(PropTypes.string.isRequired), + accounts: PropTypes.object.isRequired, + contacts: PropTypes.object.isRequired + } + + state = { name: '', type: 'A' }; + + render () { + const name = this.state.name || this.props.name; + const type = this.state.type || this.props.type; + const { result, accounts, contacts } = this.props; + + let output = ''; + if (result) { + if (type === 'A') { + output = ({ renderAddress(result, accounts, contacts, false) }); + } else if (type === 'IMG') { + output = renderImage(result); + } else if (type === 'CONTENT') { + output = (
    + { result } +

    This is most likely just the hash of the content you are looking for

    +
    ); + } else { + output = ({ result }); + } + } + + return ( + + +
    + + { recordTypeSelect(type, this.onTypeChange, styles.spacing) } + } + onClick={ this.onLookupClick } + /> +
    + { output } +
    + ); + } + + onNameChange = (e) => { + this.setState({ name: e.target.value }); + }; + onTypeChange = (e, i, type) => { + this.setState({ type }); + this.props.actions.clear(); + }; + onLookupClick = () => { + this.props.actions.lookup(this.state.name, this.state.type); + }; +} diff --git a/js/src/dapps/registry/Lookup/reducers.js b/js/src/dapps/registry/Lookup/reducers.js new file mode 100644 index 0000000000..f96e784bdb --- /dev/null +++ b/js/src/dapps/registry/Lookup/reducers.js @@ -0,0 +1,53 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const initialState = { + pending: false, + name: '', type: '', + result: null +}; + +export default (state = initialState, action) => { + if (action.type === 'lookup clear') { + return { ...state, result: null }; + } + + if (action.type === 'lookup start') { + return { + pending: true, + name: action.name, type: action.entry, + result: null + }; + } + + if (action.type === 'lookup error') { + return { + pending: false, + name: initialState.name, type: initialState.type, + result: null + }; + } + + if (action.type === 'lookup success') { + return { + pending: false, + name: initialState.name, type: initialState.type, + result: action.result + }; + } + + return state; +}; diff --git a/js/src/dapps/registry/Names/actions.js b/js/src/dapps/registry/Names/actions.js new file mode 100644 index 0000000000..ee73ad78e5 --- /dev/null +++ b/js/src/dapps/registry/Names/actions.js @@ -0,0 +1,89 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { sha3, toWei } from '../parity.js'; + +const alreadyQueued = (queue, action, name) => + !!queue.find((entry) => entry.action === action && entry.name === name); + +export const reserveStart = (name) => ({ type: 'names reserve start', name }); + +export const reserveSuccess = (name) => ({ type: 'names reserve success', name }); + +export const reserveFail = (name) => ({ type: 'names reserve fail', name }); + +export const reserve = (name) => (dispatch, getState) => { + const state = getState(); + const account = state.accounts.selected; + const contract = state.contract; + if (!contract || !account) return; + if (alreadyQueued(state.names.queue, 'reserve', name)) return; + const reserve = contract.functions.find((f) => f.name === 'reserve'); + + name = name.toLowerCase(); + const options = { + from: account.address, + value: toWei(1).toString() + }; + const values = [ sha3(name) ]; + + dispatch(reserveStart(name)); + reserve.estimateGas(options, values) + .then((gas) => { + options.gas = gas.mul(1.2).toFixed(0); + return reserve.postTransaction(options, values); + }) + .then((data) => { + dispatch(reserveSuccess(name)); + }).catch((err) => { + console.error(`could not reserve ${name}`); + if (err) console.error(err.stack); + dispatch(reserveFail(name)); + }); +}; + +export const dropStart = (name) => ({ type: 'names drop start', name }); + +export const dropSuccess = (name) => ({ type: 'names drop success', name }); + +export const dropFail = (name) => ({ type: 'names drop fail', name }); + +export const drop = (name) => (dispatch, getState) => { + const state = getState(); + const account = state.accounts.selected; + const contract = state.contract; + if (!contract || !account) return; + if (alreadyQueued(state.names.queue, 'drop', name)) return; + const drop = contract.functions.find((f) => f.name === 'drop'); + + name = name.toLowerCase(); + const options = { from: account.address }; + const values = [ sha3(name) ]; + + dispatch(dropStart(name)); + drop.estimateGas(options, values) + .then((gas) => { + options.gas = gas.mul(1.2).toFixed(0); + return drop.postTransaction(options, values); + }) + .then((data) => { + dispatch(dropSuccess(name)); + }).catch((err) => { + console.error(`could not drop ${name}`); + if (err) console.error(err.stack); + dispatch(reserveFail(name)); + }); +}; diff --git a/js/src/dapps/registry/Names/index.js b/js/src/dapps/registry/Names/index.js new file mode 100644 index 0000000000..26195de884 --- /dev/null +++ b/js/src/dapps/registry/Names/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './names.js'; diff --git a/js/src/dapps/registry/Names/names.css b/js/src/dapps/registry/Names/names.css new file mode 100644 index 0000000000..a058d41ac0 --- /dev/null +++ b/js/src/dapps/registry/Names/names.css @@ -0,0 +1,40 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.names { + margin: 1em; +} + +.box { + margin: 0 1em 1em 1em; +} + +.spacing { + margin-left: 1em; +} + +.noSpacing { + margin-top: 0; +} + +.link { + color: #00BCD4; + text-decoration: none; +} +.link:hover { + text-decoration: underline; +} diff --git a/js/src/dapps/registry/Names/names.js b/js/src/dapps/registry/Names/names.js new file mode 100644 index 0000000000..907e3bf873 --- /dev/null +++ b/js/src/dapps/registry/Names/names.js @@ -0,0 +1,144 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { Card, CardHeader, CardText } from 'material-ui/Card'; +import TextField from 'material-ui/TextField'; +import DropDownMenu from 'material-ui/DropDownMenu'; +import MenuItem from 'material-ui/MenuItem'; +import RaisedButton from 'material-ui/RaisedButton'; +import CheckIcon from 'material-ui/svg-icons/navigation/check'; + +import { fromWei } from '../parity.js'; + +import styles from './names.css'; + +const useSignerText = (

    Use the Signer to authenticate the following changes.

    ); + +const renderNames = (names) => { + const out = []; + for (let name of names) { + out.push(({ name }), ', '); + } + out.pop(); + return out; +}; + +const renderQueue = (queue) => { + if (queue.length === 0) { + return null; + } + + const grouped = queue.reduce((grouped, change) => { + const last = grouped[grouped.length - 1]; + if (last && last.action === change.action) { + last.names.push(change.name); + } else { + grouped.push({ action: change.action, names: [change.name] }); + } + return grouped; + }, []); + + return ( +
      + { grouped.map(({ action, names }) => ( +
    • + { renderNames(names) } + { ' will be ' } + { action === 'reserve' ? 'reserved' : 'dropped' } +
    • + )) } +
    + ); +}; + +export default class Names extends Component { + + static propTypes = { + actions: PropTypes.object.isRequired, + fee: PropTypes.object.isRequired, + hasAccount: PropTypes.bool.isRequired, + pending: PropTypes.bool.isRequired, + queue: PropTypes.array.isRequired + } + + state = { + action: 'reserve', + name: '' + }; + + render () { + const { action, name } = this.state; + const { fee, hasAccount, pending, queue } = this.props; + + return ( + + + + { !hasAccount + ? (

    Please select an account first.

    ) + : (action === 'reserve' + ? (

    + The fee to reserve a name is { fromWei(fee).toFixed(3) }ETH. +

    ) + : (

    To drop a name, you have to be the owner.

    ) + ) + } + + + + + + } + onClick={ this.onSubmitClick } + /> + { queue.length > 0 + ? (
    { useSignerText }{ renderQueue(queue) }
    ) + : null + } +
    +
    + ); + } + + onNameChange = (e) => { + this.setState({ name: e.target.value }); + }; + onActionChange = (e, i, action) => { + this.setState({ action }); + }; + onSubmitClick = () => { + const { action, name } = this.state; + if (action === 'reserve') { + this.props.actions.reserve(name); + } else if (action === 'drop') { + this.props.actions.drop(name); + } + }; +} diff --git a/js/src/dapps/registry/Names/reducers.js b/js/src/dapps/registry/Names/reducers.js new file mode 100644 index 0000000000..1fcee57d8b --- /dev/null +++ b/js/src/dapps/registry/Names/reducers.js @@ -0,0 +1,55 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const initialState = { + hasAccount: false, + pending: false, + queue: [] +}; + +export default (state = initialState, action) => { + if (action.type === 'accounts select') { + return { ...state, hasAccount: !!action.address }; + } + + if (action.type === 'names reserve start') { + return { ...state, pending: true }; + } + if (action.type === 'names reserve success') { + return { + ...state, pending: false, + queue: state.queue.concat({ action: 'reserve', name: action.name }) + }; + } + if (action.type === 'names reserve fail') { + return { ...state, pending: false }; + } + + if (action.type === 'names drop start') { + return { ...state, pending: true }; + } + if (action.type === 'names drop success') { + return { + ...state, pending: false, + queue: state.queue.concat({ action: 'drop', name: action.name }) + }; + } + if (action.type === 'names drop fail') { + return { ...state, pending: false }; + } + + return state; +}; diff --git a/js/src/dapps/registry/Records/actions.js b/js/src/dapps/registry/Records/actions.js new file mode 100644 index 0000000000..8b14072119 --- /dev/null +++ b/js/src/dapps/registry/Records/actions.js @@ -0,0 +1,38 @@ +import { sha3 } from '../parity.js'; + +export const start = (name, key, value) => ({ type: 'records update start', name, key, value }); + +export const success = () => ({ type: 'records update success' }); + +export const fail = () => ({ type: 'records update error' }); + +export const update = (name, key, value) => (dispatch, getState) => { + const state = getState(); + const account = state.accounts.selected; + const contract = state.contract; + + if (!contract || !account) { + return; + } + + const fnName = key === 'A' ? 'setAddress' : 'set'; + const fn = contract.functions.find((f) => f.name === fnName); + + name = name.toLowerCase(); + const options = { from: account.address }; + const values = [ sha3(name), key, value ]; + + dispatch(start(name, key, value)); + fn.estimateGas(options, values) + .then((gas) => { + options.gas = gas.mul(1.2).toFixed(0); + return fn.postTransaction(options, values); + }) + .then((data) => { + dispatch(success()); + }).catch((err) => { + console.error(`could not update ${key} record of ${name}`); + if (err) console.error(err.stack); + dispatch(fail()); + }); +}; diff --git a/js/src/dapps/registry/Records/index.js b/js/src/dapps/registry/Records/index.js new file mode 100644 index 0000000000..e2528968e5 --- /dev/null +++ b/js/src/dapps/registry/Records/index.js @@ -0,0 +1 @@ +export default from './records.js'; diff --git a/js/src/dapps/registry/Records/records.css b/js/src/dapps/registry/Records/records.css new file mode 100644 index 0000000000..72b62595d0 --- /dev/null +++ b/js/src/dapps/registry/Records/records.css @@ -0,0 +1,28 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.records { + margin: 1em; +} + +.noSpacing { + margin-top: 0; +} + +.spacing { + margin-left: 1em; +} diff --git a/js/src/dapps/registry/Records/records.js b/js/src/dapps/registry/Records/records.js new file mode 100644 index 0000000000..355522e605 --- /dev/null +++ b/js/src/dapps/registry/Records/records.js @@ -0,0 +1,76 @@ +import React, { Component, PropTypes } from 'react'; +import { Card, CardHeader, CardText } from 'material-ui/Card'; +import TextField from 'material-ui/TextField'; +import RaisedButton from 'material-ui/RaisedButton'; +import SaveIcon from 'material-ui/svg-icons/content/save'; + +import recordTypeSelect from '../ui/record-type-select.js'; +import styles from './records.css'; + +export default class Records extends Component { + + static propTypes = { + actions: PropTypes.object.isRequired, + hasAccount: PropTypes.bool.isRequired, + pending: PropTypes.bool.isRequired, + name: PropTypes.string.isRequired, + type: PropTypes.string.isRequired, + value: PropTypes.string.isRequired + } + + state = { name: '', type: 'A', value: '' }; + + render () { + const { hasAccount, pending } = this.props; + const name = this.state.name || this.props.name; + const type = this.state.type || this.props.type; + const value = this.state.value || this.props.value; + + return ( + + + + { !hasAccount + ? (

    Please select an account first.

    ) + : (

    You can only modify entries of names that you previously registered.

    ) + } + + { recordTypeSelect(type, this.onTypeChange, styles.spacing) } + + } + onClick={ this.onSaveClick } + /> +
    +
    + ); + } + + onNameChange = (e) => { + this.setState({ name: e.target.value }); + }; + onTypeChange = (e, i, type) => { + this.setState({ type }); + }; + onValueChange = (e) => { + this.setState({ value: e.target.value }); + }; + onSaveClick = () => { + const { name, type, value } = this.state; + this.props.actions.update(name, type, value); + }; +} diff --git a/js/src/dapps/registry/Records/reducers.js b/js/src/dapps/registry/Records/reducers.js new file mode 100644 index 0000000000..a9a3ae3715 --- /dev/null +++ b/js/src/dapps/registry/Records/reducers.js @@ -0,0 +1,29 @@ +const initialState = { + hasAccount: false, + pending: false, + name: '', type: '', value: '' +}; + +export default (state = initialState, action) => { + if (action.type === 'accounts select') { + return { ...state, hasAccount: !!action.address }; + } + + if (action.type === 'records update start') { + return { + ...state, + pending: true, + name: action.name, type: action.entry, value: action.value + }; + } + + if (action.type === 'records update error' && action.type === 'records update success') { + return { + ...state, + pending: false, + name: initialState.name, type: initialState.type, value: initialState.value + }; + } + + return state; +}; diff --git a/js/src/dapps/registry/actions.js b/js/src/dapps/registry/actions.js new file mode 100644 index 0000000000..882af03603 --- /dev/null +++ b/js/src/dapps/registry/actions.js @@ -0,0 +1,68 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { registry as registryAbi } from '../../contracts/abi'; + +import { api } from './parity.js'; +import * as addresses from './addresses/actions.js'; +import * as accounts from './Accounts/actions.js'; +import * as lookup from './Lookup/actions.js'; +import * as events from './Events/actions.js'; +import * as names from './Names/actions.js'; +import * as records from './Records/actions.js'; + +export { addresses, accounts, lookup, events, names, records }; + +export const setContract = (contract) => ({ type: 'set contract', contract }); + +export const fetchContract = () => (dispatch) => + api.ethcore.registryAddress() + .then((address) => { + const contract = api.newContract(registryAbi, address); + dispatch(setContract(contract)); + dispatch(fetchFee()); + dispatch(fetchOwner()); + }) + .catch((err) => { + console.error('could not fetch contract'); + if (err) console.error(err.stack); + }); + +export const setFee = (fee) => ({ type: 'set fee', fee }); + +const fetchFee = () => (dispatch, getState) => { + const { contract } = getState(); + if (!contract) return; + contract.instance.fee.call() + .then((fee) => dispatch(setFee(fee))) + .catch((err) => { + console.error('could not fetch fee'); + if (err) console.error(err.stack); + }); +}; + +export const setOwner = (owner) => ({ type: 'set owner', owner }); + +export const fetchOwner = () => (dispatch, getState) => { + const { contract } = getState(); + if (!contract) return; + contract.instance.owner.call() + .then((owner) => dispatch(setOwner(owner))) + .catch((err) => { + console.error('could not fetch owner'); + if (err) console.error(err.stack); + }); +}; diff --git a/js/src/dapps/registry/addresses/accounts-reducer.js b/js/src/dapps/registry/addresses/accounts-reducer.js new file mode 100644 index 0000000000..20981877d6 --- /dev/null +++ b/js/src/dapps/registry/addresses/accounts-reducer.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const initialState = { + all: {}, + selected: null +}; + +export default (state = initialState, action) => { + if (action.type === 'addresses set') { + const accounts = action.addresses + .filter((address) => address.isAccount) + .reduce((accounts, account) => { + accounts[account.address] = account; + return accounts; + }, {}); + return { ...state, all: accounts }; + } + + if (action.type === 'accounts select' && state.all[action.address]) { + return { ...state, selected: state.all[action.address] }; + } + + return state; +}; diff --git a/js/src/dapps/registry/addresses/actions.js b/js/src/dapps/registry/addresses/actions.js new file mode 100644 index 0000000000..b6091acb57 --- /dev/null +++ b/js/src/dapps/registry/addresses/actions.js @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { api } from '../parity'; + +export const set = (addresses) => ({ type: 'addresses set', addresses }); + +export const fetch = () => (dispatch) => { + return Promise + .all([ + api.personal.listAccounts(), + api.personal.accountsInfo() + ]) + .then(([ accounts, data ]) => { + const addresses = Object.keys(data) + .filter((address) => data[address] && !data[address].meta.deleted) + .map((address) => ({ + ...data[address], address, + isAccount: accounts.includes(address) + })); + dispatch(set(addresses)); + }) + .catch((error) => { + console.error('could not fetch addresses', error); + }); +}; diff --git a/js/src/dapps/registry/addresses/contacts-reducer.js b/js/src/dapps/registry/addresses/contacts-reducer.js new file mode 100644 index 0000000000..6b0572e549 --- /dev/null +++ b/js/src/dapps/registry/addresses/contacts-reducer.js @@ -0,0 +1,31 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const initialState = {}; + +export default (state = initialState, action) => { + if (action.type === 'addresses set') { + const contacts = action.addresses + .filter((address) => !address.isAccount) + .reduce((contacts, contact) => { + contacts[contact.address] = contact; + return contacts; + }, {}); + return contacts; + } + + return state; +}; diff --git a/js/src/dapps/registry/parity.js b/js/src/dapps/registry/parity.js new file mode 100644 index 0000000000..cf9819b60e --- /dev/null +++ b/js/src/dapps/registry/parity.js @@ -0,0 +1,23 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const api = window.parity.api; +const { bytesToHex, sha3, toWei, fromWei } = window.parity.api.util; + +export { + api, + bytesToHex, sha3, toWei, fromWei +}; diff --git a/js/src/dapps/registry/reducers.js b/js/src/dapps/registry/reducers.js new file mode 100644 index 0000000000..e0f620b708 --- /dev/null +++ b/js/src/dapps/registry/reducers.js @@ -0,0 +1,55 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import accountsReducer from './addresses/accounts-reducer.js'; +import contactsReducer from './addresses/contacts-reducer.js'; +import lookupReducer from './Lookup/reducers.js'; +import eventsReducer from './Events/reducers.js'; +import namesReducer from './Names/reducers.js'; +import recordsReducer from './Records/reducers.js'; + +const contractReducer = (state = null, action) => + action.type === 'set contract' ? action.contract : state; + +const feeReducer = (state = null, action) => + action.type === 'set fee' ? action.fee : state; + +const ownerReducer = (state = null, action) => + action.type === 'set owner' ? action.owner : state; + +const initialState = { + accounts: accountsReducer(undefined, { type: '' }), + contacts: contactsReducer(undefined, { type: '' }), + contract: contractReducer(undefined, { type: '' }), + fee: feeReducer(undefined, { type: '' }), + owner: ownerReducer(undefined, { type: '' }), + lookup: lookupReducer(undefined, { type: '' }), + events: eventsReducer(undefined, { type: '' }), + names: namesReducer(undefined, { type: '' }), + records: recordsReducer(undefined, { type: '' }) +}; + +export default (state = initialState, action) => ({ + accounts: accountsReducer(state.accounts, action), + contacts: contactsReducer(state.contacts, action), + contract: contractReducer(state.contract, action), + fee: feeReducer(state.fee, action), + owner: ownerReducer(state.owner, action), + lookup: lookupReducer(state.lookup, action), + events: eventsReducer(state.events, action), + names: namesReducer(state.names, action), + records: recordsReducer(state.records, action) +}); diff --git a/js/src/dapps/registry/store.js b/js/src/dapps/registry/store.js new file mode 100644 index 0000000000..5fb7d4b6a4 --- /dev/null +++ b/js/src/dapps/registry/store.js @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createStore, applyMiddleware } from 'redux'; +import thunk from 'redux-thunk'; + +import reducer from './reducers'; + +export default createStore(reducer, applyMiddleware(thunk)); diff --git a/js/src/dapps/registry/ui/address.js b/js/src/dapps/registry/ui/address.js new file mode 100644 index 0000000000..e4a5a953e5 --- /dev/null +++ b/js/src/dapps/registry/ui/address.js @@ -0,0 +1,47 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; +import renderHash from './hash'; +import IdentityIcon from '../IdentityIcon'; + +const container = { + display: 'inline-block', + verticalAlign: 'middle', + height: '24px' +}; +const align = { + display: 'inline-block', + verticalAlign: 'top', + lineHeight: '24px' +}; + +export default (address, accounts, contacts, shortenHash = true) => { + let caption; + if (accounts[address]) { + caption = ({ accounts[address].name }); + } else if (contacts[address]) { + caption = ({ contacts[address].name }); + } else { + caption = ({ shortenHash ? renderHash(address) : address }); + } + return ( +
    + + { caption } +
    + ); +}; diff --git a/js/src/dapps/registry/ui/hash.js b/js/src/dapps/registry/ui/hash.js new file mode 100644 index 0000000000..4035a9bbe2 --- /dev/null +++ b/js/src/dapps/registry/ui/hash.js @@ -0,0 +1,24 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; + +export default (hash) => { + const shortened = hash.length > (2 + 9 + 9) + ? hash.substr(2, 9) + '...' + hash.slice(-9) + : hash.slice(2); + return ({ shortened }); +}; diff --git a/js/src/dapps/registry/ui/image.js b/js/src/dapps/registry/ui/image.js new file mode 100644 index 0000000000..7e7a52a88a --- /dev/null +++ b/js/src/dapps/registry/ui/image.js @@ -0,0 +1,30 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; + +const styles = { + padding: '.5em', + border: '1px solid #777' +}; + +export default (address) => ( + { +); diff --git a/js/src/dapps/registry/ui/record-type-select.js b/js/src/dapps/registry/ui/record-type-select.js new file mode 100644 index 0000000000..2cfbdf5406 --- /dev/null +++ b/js/src/dapps/registry/ui/record-type-select.js @@ -0,0 +1,27 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; +import DropDownMenu from 'material-ui/DropDownMenu'; +import MenuItem from 'material-ui/MenuItem'; + +export default (value, onSelect, className = '') => ( + + + + + +); diff --git a/js/src/dapps/signaturereg.html b/js/src/dapps/signaturereg.html new file mode 100644 index 0000000000..3f74be28ab --- /dev/null +++ b/js/src/dapps/signaturereg.html @@ -0,0 +1,16 @@ + + + + + + + Method Signature Registry + + +
    + + + + + + diff --git a/js/src/dapps/signaturereg.js b/js/src/dapps/signaturereg.js new file mode 100644 index 0000000000..72ddd0ca79 --- /dev/null +++ b/js/src/dapps/signaturereg.js @@ -0,0 +1,33 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ReactDOM from 'react-dom'; +import React from 'react'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import Application from './signaturereg/Application'; + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './signaturereg.html'; + +ReactDOM.render( + , + document.querySelector('#container') +); diff --git a/js/src/dapps/signaturereg/Application/application.css b/js/src/dapps/signaturereg/Application/application.css new file mode 100644 index 0000000000..4675b064e0 --- /dev/null +++ b/js/src/dapps/signaturereg/Application/application.css @@ -0,0 +1,29 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.container { + background: black; + color: #eee; + font-family: 'Roboto'; + vertical-align: middle; +} + +.actions { + position: absolute; + top: 1.5em; + right: 1.5em; +} diff --git a/js/src/dapps/signaturereg/Application/application.js b/js/src/dapps/signaturereg/Application/application.js new file mode 100644 index 0000000000..3878af4cfb --- /dev/null +++ b/js/src/dapps/signaturereg/Application/application.js @@ -0,0 +1,130 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import React, { Component } from 'react'; + +import { attachInterface, attachBlockNumber } from '../services'; +import Button from '../Button'; +import Events from '../Events'; +import Header from '../Header'; +import Import from '../Import'; +import Loading from '../Loading'; + +import styles from './application.css'; + +export default class Application extends Component { + state = { + accounts: {}, + address: null, + fromAddress: null, + accountsInfo: {}, + blockNumber: new BigNumber(0), + contract: null, + instance: null, + loading: true, + totalSignatures: new BigNumber(0), + showImport: false + } + + componentDidMount () { + attachInterface() + .then((state) => { + this.setState(state, () => { + this.setState({ loading: false }); + }); + + return attachBlockNumber(state.instance, (state) => { + this.setState(state); + }); + }) + .catch((error) => { + console.error('componentDidMount', error); + }); + } + + render () { + const { loading } = this.state; + + if (loading) { + return ( + + ); + } + + return ( +
    + { this.renderHeader() } + { this.renderImport() } + { this.renderEvents() } +
    + ); + } + + renderHeader () { + const { blockNumber, totalSignatures } = this.state; + + return ( +
    + ); + } + + renderImport () { + const { accounts, fromAddress, instance, showImport } = this.state; + + if (showImport) { + return ( + + ); + } + + return ( +
    + +
    + ); + } + + renderEvents () { + const { accountsInfo, contract } = this.state; + + return ( + + ); + } + + toggleImport = () => { + this.setState({ + showImport: !this.state.showImport + }); + } + + setFromAddress = (fromAddress) => { + this.setState({ + fromAddress + }); + } +} diff --git a/js/src/dapps/signaturereg/Application/index.js b/js/src/dapps/signaturereg/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/signaturereg/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/signaturereg/Button/button.css b/js/src/dapps/signaturereg/Button/button.css new file mode 100644 index 0000000000..444359c79e --- /dev/null +++ b/js/src/dapps/signaturereg/Button/button.css @@ -0,0 +1,43 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.button { + background: #f80; + color: white; + border-radius: 5px; + font-size: 1em; + line-height: 24px; + height: 24px; + padding: 0.75em 1.5em; + cursor: pointer; + display: inline-block; +} + +.button.disabled { + opacity: 0.25; + cursor: default; +} + +.button.inverse { + color: #f80; + background: white; +} + +.button * { + display: inline-block; + vertical-align: top; +} diff --git a/js/src/dapps/signaturereg/Button/button.js b/js/src/dapps/signaturereg/Button/button.js new file mode 100644 index 0000000000..9cbbcf478e --- /dev/null +++ b/js/src/dapps/signaturereg/Button/button.js @@ -0,0 +1,50 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import styles from './button.css'; + +export default class Button extends Component { + static propTypes = { + children: PropTypes.node.isRequired, + className: PropTypes.string, + disabled: PropTypes.bool, + invert: PropTypes.bool, + onClick: PropTypes.func.isRequired + } + + render () { + const { children, className, disabled, invert } = this.props; + const classes = `${styles.button} ${disabled ? styles.disabled : ''} ${invert ? styles.inverse : ''} ${className}`; + + return ( +
    + { children } +
    + ); + } + + onClick = (event) => { + const { disabled, onClick } = this.props; + + if (disabled) { + return; + } + + onClick(event); + } +} diff --git a/js/src/dapps/signaturereg/Button/index.js b/js/src/dapps/signaturereg/Button/index.js new file mode 100644 index 0000000000..f69a65e3d5 --- /dev/null +++ b/js/src/dapps/signaturereg/Button/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './button'; diff --git a/js/src/dapps/signaturereg/Events/events.css b/js/src/dapps/signaturereg/Events/events.css new file mode 100644 index 0000000000..5e9960e0ee --- /dev/null +++ b/js/src/dapps/signaturereg/Events/events.css @@ -0,0 +1,76 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.events { + padding: 3em; + text-align: center; +} + +.header { + font-size: 1.3em; + line-height: 1.3em; + vertical-align: middle; + text-align: center; + padding-bottom: 24px; + color: #f80; +} + +.events table { + border: none; + margin: 0 auto; + border-collapse: collapse; +} + +.events td { + padding: 0 0.5em 0.5em 0.5em; + white-space: nowrap; + text-align: left; + line-height: 24px; +} + +.events td * { + display: inline-block; + vertical-align: top; +} + +.pending { + opacity: 0.5; +} + +.mined { +} + +td.methodName { + color: #f80; +} + +td.signature { + color: #888; + text-align: right; +} + +td.timestamp { + text-align: right; +} + +td.blockNumber { + text-align: center; +} + +td.owner { + text-overflow: ellipsis; +} diff --git a/js/src/dapps/signaturereg/Events/events.js b/js/src/dapps/signaturereg/Events/events.js new file mode 100644 index 0000000000..302b512504 --- /dev/null +++ b/js/src/dapps/signaturereg/Events/events.js @@ -0,0 +1,84 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { formatBlockNumber, formatBlockTimestamp, formatSignature } from '../format'; +import { attachEvents } from '../services'; +import IdentityIcon from '../IdentityIcon'; + +import styles from './events.css'; + +export default class Events extends Component { + static propTypes = { + accountsInfo: PropTypes.object.isRequired, + contract: PropTypes.object.isRequired + } + + state = { + events: [] + } + + componentDidMount () { + const { contract } = this.props; + + attachEvents(contract, (state) => { + this.setState(state); + }); + } + + render () { + const { events } = this.state; + + if (!events.length) { + return null; + } + + return ( +
    + + + { this.renderEvents() } + +
    +
    + ); + } + + renderEvents () { + const { accountsInfo } = this.props; + const { events } = this.state; + + return events.map((event) => { + const name = accountsInfo[event.params.creator] + ? accountsInfo[event.params.creator].name + : event.params.creator; + + return ( + + { formatBlockTimestamp(event.block) } + { formatBlockNumber(event.blockNumber) } + + +
    { name }
    + + { formatSignature(event.params.signature) } + { event.params.method } + + ); + }); + } +} diff --git a/js/src/dapps/signaturereg/Events/index.js b/js/src/dapps/signaturereg/Events/index.js new file mode 100644 index 0000000000..88ad6d407c --- /dev/null +++ b/js/src/dapps/signaturereg/Events/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './events'; diff --git a/js/src/dapps/signaturereg/Header/header.css b/js/src/dapps/signaturereg/Header/header.css new file mode 100644 index 0000000000..8d95b959c2 --- /dev/null +++ b/js/src/dapps/signaturereg/Header/header.css @@ -0,0 +1,67 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.header { + position: relative; + height: 13.69em; + color: white; + border-bottom: 4px solid white; + overflow: hidden; +} + +.banner { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + font-size: 1.3em; + line-height: 1.3em; + padding: 24px; + background: #f80; +} + +.header img, +.content { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.header img { + opacity: 0.2; + width: 100%; +} + +.content { + text-align: center; + padding: 3em; +} + +.hero { + font-size: 5em; + line-height: 1.2em; + vertical-align: middle; +} + +.byline { + font-size: 1.3em; + line-height: 1.3em; + vertical-align: middle; +} diff --git a/js/src/dapps/signaturereg/Header/header.js b/js/src/dapps/signaturereg/Header/header.js new file mode 100644 index 0000000000..8dd7cd578a --- /dev/null +++ b/js/src/dapps/signaturereg/Header/header.js @@ -0,0 +1,48 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import styles from './header.css'; +import blocks from '../../../../assets/images/dapps/blocks-350.jpg'; + +export default class Header extends Component { + static propTypes = { + blockNumber: PropTypes.object.isRequired, + totalSignatures: PropTypes.object.isRequired + } + + render () { + const { totalSignatures } = this.props; + + return ( +
    +
    + contract signature registry +
    + +
    +
    + { totalSignatures.toFormat(0) } +
    +
    + signatures registered +
    +
    +
    + ); + } +} diff --git a/js/src/dapps/signaturereg/Header/index.js b/js/src/dapps/signaturereg/Header/index.js new file mode 100644 index 0000000000..37b5835f05 --- /dev/null +++ b/js/src/dapps/signaturereg/Header/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './header.js'; diff --git a/js/src/dapps/signaturereg/IdentityIcon/identityIcon.css b/js/src/dapps/signaturereg/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..3fa1df99e4 --- /dev/null +++ b/js/src/dapps/signaturereg/IdentityIcon/identityIcon.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 24px; + height: 24px; + border-radius: 50%; + margin-right: 0.5em; +} diff --git a/js/src/dapps/signaturereg/IdentityIcon/identityIcon.js b/js/src/dapps/signaturereg/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..0bc86731d4 --- /dev/null +++ b/js/src/dapps/signaturereg/IdentityIcon/identityIcon.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired + } + + render () { + const { address } = this.props; + + return ( + + ); + } +} diff --git a/js/src/dapps/signaturereg/IdentityIcon/index.js b/js/src/dapps/signaturereg/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/signaturereg/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/signaturereg/Import/import.css b/js/src/dapps/signaturereg/Import/import.css new file mode 100644 index 0000000000..8f9788c341 --- /dev/null +++ b/js/src/dapps/signaturereg/Import/import.css @@ -0,0 +1,151 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(55, 55, 55, 0.75); + text-align: center; +} + +.dialog { + margin-top: 1.5em; + border-radius: 5px; + width: 750px; + background: rgba(0, 0, 0, 0.9); + display: inline-block; +} + +.close { + top: 4px; + right: 4px; + position: absolute; + background: transparent; +} + +.header { + font-size: 1.3em; + line-height: 1.3em; + padding: 16px 24px; + background: #f80; + color: white; + position: relative; + margin-bottom: 24px; + border-radius: 5px 5px 0 0; +} + +.body { + padding: 0 24px; +} + +.body div { + text-align: center; +} + +.info { + padding: 0 24px 24px 24px; + line-height: 1.618em; +} + +.info textarea { + background: rgba(80, 80, 80, 0.25); + border-radius: 5px; + resize: none; + padding: 1em; + color: #eee; + font-size: 0.75em; + font-family: 'Roboto Mono'; + width: 100%; + border: none; + box-sizing: border-box; +} + +.info textarea.error { + background: rgba(255, 0, 0, 0.25); +} + +.info .error { + color: rgba(255, 0, 0, 1); + font-size: 0.75em; + line-height: 1.5em; +} + +.buttonrow { + position: relative; + padding: 24px 0; + margin: 0; + text-align: right !important; +} + +.addressSelect { + position: absolute; + top: 24px; + left: 0; +} + +.keys { + position: absolute; + left: 24px; + top: 16px; + padding: 4px 0; +} + +.fnconstant, +.fnexists, +.fnunknown, +.fntodo { + display: inline-block; + margin: 0.25em; + padding: 0.5em 1em; + border-radius: 2px; + color: white; + line-height: 1em; + font-size: 0.8em; +} + +.fnconstant { + color: #888; + background: #333; +} + +.fnexists { + color: #f80; + background: #333; +} + +.fnunknown { + color: #eee; +} + +.fntodo { + background: #f80; +} + +.hide { + opacity: 0; +} diff --git a/js/src/dapps/signaturereg/Import/import.js b/js/src/dapps/signaturereg/Import/import.js new file mode 100644 index 0000000000..dcf2b3f985 --- /dev/null +++ b/js/src/dapps/signaturereg/Import/import.js @@ -0,0 +1,236 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import { callRegister, postRegister } from '../services'; +import Button from '../Button'; +import IdentityIcon from '../IdentityIcon'; + +import styles from './import.css'; + +export default class Import extends Component { + static propTypes = { + accounts: PropTypes.object.isRequired, + fromAddress: PropTypes.string.isRequired, + instance: PropTypes.object.isRequired, + visible: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + onSetFromAddress: PropTypes.func.isRequired + } + + state = { + abi: null, + abiParsed: null, + abiError: 'Please add a valid ABI definition', + functions: null, + fnstate: {} + } + + render () { + const { visible, onClose } = this.props; + const { abiError } = this.state; + + if (!visible) { + return null; + } + + return ( +
    +
    +
    +
    +
    abi import
    + +
    + { abiError ? this.renderCapture() : this.renderRegister() } +
    +
    +
    + ); + } + + renderCapture () { + const { abiError } = this.state; + + return ( +
    +
    + Provide the ABI (Contract Interface) in the space provided below. Only non-constant functions (names & types) will be imported, while constant functions and existing signatures will be ignored. +
    +
    + +
    + { abiError } +
    +
    +
    + ); + } + + renderRegister () { + const { accounts, fromAddress } = this.props; + + const account = accounts[fromAddress]; + const count = this.countFunctions(); + let buttons = null; + + if (count) { + buttons = ( +
    +
    + +
    + +
    + ); + } + + return ( +
    +
    + The following functions have been extracted from the ABI provided and the state has been determined from interacting with the signature contract. +
    +
    +
    + { this.renderFunctions() } +
    +
    +
    + { count || 'no' } functions available for registration +
    + { buttons } +
    + ); + } + + renderFunctions () { + const { functions, fnstate } = this.state; + + if (!functions) { + return null; + } + + return functions.map((fn) => { + if (fn.constant) { + fnstate[fn.signature] = 'fnconstant'; + } else if (!fnstate[fn.signature]) { + this.testFunction(fn); + } + + return ( +
    + { fn.id } +
    + ); + }); + } + + sortFunctions = (a, b) => { + return a.name.localeCompare(b.name); + } + + countFunctions () { + const { functions, fnstate } = this.state; + + if (!functions) { + return 0; + } + + return functions.filter((fn) => fnstate[fn.signature] === 'fntodo').length; + } + + testFunction (fn) { + const { instance } = this.props; + const { fnstate } = this.state; + + callRegister(instance, fn.id) + .then((result) => { + fnstate[fn.signature] = result ? 'fntodo' : 'fnexists'; + this.setState(fnstate); + }) + .catch((error) => { + console.error(error); + }); + } + + onAbiEdit = (event) => { + let functions = null; + let abiError = null; + let abiParsed = null; + let abi = null; + + try { + abiParsed = JSON.parse(event.target.value); + functions = api.newContract(abiParsed).functions.sort(this.sortFunctions); + abi = JSON.stringify(abiParsed); + } catch (error) { + console.error('onAbiEdit', error); + abiError = error.message; + } + + this.setState({ + functions, + abiError, + abiParsed, + abi + }); + } + + onRegister = () => { + const { instance, fromAddress, onClose } = this.props; + const { functions, fnstate } = this.state; + + Promise + .all( + functions + .filter((fn) => !fn.constant) + .filter((fn) => fnstate[fn.signature] === 'fntodo') + .map((fn) => postRegister(instance, fn.id, { from: fromAddress })) + ) + .then(() => { + onClose(); + }) + .catch((error) => { + console.error('onRegister', error); + }); + } + + onSelectFromAddress = () => { + const { accounts, fromAddress, onSetFromAddress } = this.props; + const addresses = Object.keys(accounts); + let index = 0; + + addresses.forEach((address, _index) => { + if (address === fromAddress) { + index = _index; + } + }); + + index++; + if (index >= addresses.length) { + index = 0; + } + + onSetFromAddress(addresses[index]); + } +} diff --git a/js/src/dapps/signaturereg/Import/index.js b/js/src/dapps/signaturereg/Import/index.js new file mode 100644 index 0000000000..d2f352cf3d --- /dev/null +++ b/js/src/dapps/signaturereg/Import/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './import'; diff --git a/js/src/dapps/signaturereg/Loading/index.js b/js/src/dapps/signaturereg/Loading/index.js new file mode 100644 index 0000000000..0468cab37d --- /dev/null +++ b/js/src/dapps/signaturereg/Loading/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './loading'; diff --git a/js/src/dapps/signaturereg/Loading/loading.css b/js/src/dapps/signaturereg/Loading/loading.css new file mode 100644 index 0000000000..b77d1a2372 --- /dev/null +++ b/js/src/dapps/signaturereg/Loading/loading.css @@ -0,0 +1,24 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.loading { + width: 100%; + text-align: center; + padding-top: 5em; + font-size: 2em; + color: #999; +} diff --git a/js/src/dapps/signaturereg/Loading/loading.js b/js/src/dapps/signaturereg/Loading/loading.js new file mode 100644 index 0000000000..b884597d76 --- /dev/null +++ b/js/src/dapps/signaturereg/Loading/loading.js @@ -0,0 +1,29 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; + +import styles from './loading.css'; + +export default class Loading extends Component { + render () { + return ( +
    + Attaching to contract ... +
    + ); + } +} diff --git a/js/src/dapps/signaturereg/format.js b/js/src/dapps/signaturereg/format.js new file mode 100644 index 0000000000..24b6428f48 --- /dev/null +++ b/js/src/dapps/signaturereg/format.js @@ -0,0 +1,40 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import BigNumber from 'bignumber.js'; +import moment from 'moment'; + +import { api } from './parity'; + +const ZERO = new BigNumber(0); + +export function formatBlockNumber (blockNumber) { + return ZERO.eq(blockNumber || 0) + ? 'Pending' + : `${blockNumber.toFormat()}`; +} + +export function formatSignature (signature) { + return api.util.bytesToHex(signature); +} + +export function formatBlockTimestamp (block) { + if (!block || !block.timestamp) { + return null; + } + + return moment(block.timestamp).fromNow(); +} diff --git a/js/src/dapps/signaturereg/parity.js b/js/src/dapps/signaturereg/parity.js new file mode 100644 index 0000000000..f6d59f44d5 --- /dev/null +++ b/js/src/dapps/signaturereg/parity.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export { + api +}; diff --git a/js/src/dapps/signaturereg/services.js b/js/src/dapps/signaturereg/services.js new file mode 100644 index 0000000000..3963d394c7 --- /dev/null +++ b/js/src/dapps/signaturereg/services.js @@ -0,0 +1,173 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import * as abis from '../../contracts/abi'; +import { api } from './parity'; + +const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex); + +const logToEvent = (log) => { + const key = api.util.sha3(JSON.stringify(log)); + const { blockNumber, logIndex, transactionHash, transactionIndex, params, type } = log; + + return { + type: log.event, + state: type, + blockNumber, + logIndex, + transactionHash, + transactionIndex, + params, + key + }; +}; + +export function attachInterface (callback) { + return api.ethcore + .registryAddress() + .then((registryAddress) => { + console.log(`the registry was found at ${registryAddress}`); + + const registry = api.newContract(abis.registry, registryAddress).instance; + + return Promise + .all([ + registry.getAddress.call({}, [api.util.sha3('signaturereg'), 'A']), + api.personal.listAccounts(), + api.personal.accountsInfo() + ]); + }) + .then(([address, addresses, accountsInfo]) => { + console.log(`signaturereg was found at ${address}`); + + const contract = api.newContract(abis.signaturereg, address); + const accounts = addresses.reduce((obj, address) => { + const info = accountsInfo[address]; + + return Object.assign(obj, { + [address]: { + address, + name: info.name || 'Unnamed', + uuid: info.uuid + } + }); + }, {}); + const fromAddress = Object.keys(accounts)[0]; + + return { + accounts, + address, + accountsInfo, + contract, + instance: contract.instance, + fromAddress + }; + }) + .catch((error) => { + console.error('attachInterface', error); + }); +} + +export function attachBlockNumber (instance, callback) { + return api.subscribe('eth_blockNumber', (error, blockNumber) => { + if (error) { + console.error('blockNumber', error); + return; + } + + instance.totalSignatures + .call() + .then((totalSignatures) => { + callback({ + blockNumber, + totalSignatures + }); + }) + .catch((error) => { + console.error('totalSignatures', error); + }); + }); +} + +export function attachEvents (contract, callback) { + const blocks = { '0': {} }; + let mined = []; + let pending = []; + let events = []; + + const options = { + fromBlock: 0, + toBlock: 'pending', + limit: 50 + }; + + return contract.subscribe('Registered', options, (error, _logs) => { + if (error) { + console.error('events', error); + return; + } + + const logs = _logs.map(logToEvent); + + mined = logs + .filter((log) => log.state === 'mined') + .map((log) => { + const blockNumber = log.blockNumber.toString(); + + if (!blocks[blockNumber]) { + blocks[blockNumber] = {}; + getBlock(blockNumber).then((block) => { + Object.assign(blocks[blockNumber], block); + }); + } + + return Object.assign(log, { block: blocks[blockNumber] }); + }) + .reverse() + .concat(mined) + .sort(sortEvents); + + pending = logs + .filter((log) => log.state === 'pending') + .reverse() + .filter((event) => !pending.find((log) => log.params.method === event.params.method)) + .concat(pending) + .filter((event) => !mined.find((log) => log.params.method === event.params.method)) + .sort(sortEvents); + + events = pending.concat(mined); + + callback({ events }); + }); +} + +export function getBlock (blockNumber) { + return api.eth.getBlockByNumber(blockNumber); +} + +export function callRegister (instance, id, options = {}) { + return instance.register.call(options, [id]); +} + +export function postRegister (instance, id, options = {}) { + return instance.register + .estimateGas(options, [id]) + .then((gas) => { + options.gas = gas.mul(1.2).toFixed(0); + console.log('postRegister', `gas estimated at ${gas.toFormat(0)}, setting to ${gas.mul(1.2).toFormat(0)}`); + instance.register.postTransaction(options, [id]); + }); +} diff --git a/js/src/dapps/style.css b/js/src/dapps/style.css new file mode 100644 index 0000000000..b177a15f92 --- /dev/null +++ b/js/src/dapps/style.css @@ -0,0 +1,46 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +:root, +:root body { + background: #fff; + border: 0; + color: #333; + font-size: 16px; + font-family: 'Roboto', sans-serif; + font-weight: 300 !important; + margin: 0; + padding: 0; + vertical-align: top; +} + +:root, +:root body, +:root :global(#container) { + min-height: 100%; + width: 100%; + display: flex; + flex: 1; +} + +:root * { + font-weight: 300 !important; +} + +:root :global(#container) > div { + flex: 1; +} diff --git a/js/src/dapps/tokenreg.html b/js/src/dapps/tokenreg.html new file mode 100644 index 0000000000..ecb03d0055 --- /dev/null +++ b/js/src/dapps/tokenreg.html @@ -0,0 +1,16 @@ + + + + + + + Token Registry + + +
    + + + + + + diff --git a/js/src/dapps/tokenreg.js b/js/src/dapps/tokenreg.js new file mode 100644 index 0000000000..8ca70e114f --- /dev/null +++ b/js/src/dapps/tokenreg.js @@ -0,0 +1,39 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import ReactDOM from 'react-dom'; +import React from 'react'; +import { Provider } from 'react-redux'; + +import injectTapEventPlugin from 'react-tap-event-plugin'; +injectTapEventPlugin(); + +import store from './tokenreg/store'; +import Container from './tokenreg/Container'; + +import '../../assets/fonts/Roboto/font.css'; +import '../../assets/fonts/RobotoMono/font.css'; +import './style.css'; +import './tokenreg.html'; + +ReactDOM.render( + ( + + + + ), + document.querySelector('#container') +); diff --git a/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.css b/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.css new file mode 100644 index 0000000000..f6f8476bb3 --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.css @@ -0,0 +1,25 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.account-selector { +} + +.avatar > img { + margin: 0; + width: 100%; + height: 100%; +} diff --git a/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.js b/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.js new file mode 100644 index 0000000000..4c8525d7ee --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/AccountSelector/account-selector.js @@ -0,0 +1,120 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { List, ListItem } from 'material-ui/List'; +import Subheader from 'material-ui/Subheader'; +import Avatar from 'material-ui/Avatar'; + +import IdentityIcon from '../../IdentityIcon'; + +import styles from './account-selector.css'; + +class AccountSelectorItem extends Component { + + static propTypes = { + onSelectAccount: PropTypes.func.isRequired, + account: PropTypes.object.isRequired + }; + + render () { + const account = this.props.account; + + const props = Object.assign({}, this.props); + delete props.account; + delete props.onSelectAccount; + + const icon = ( + ); + + const avatar = ( + ); + + return ( + + ); + } + + onSelectAccount = () => { + this.props.onSelectAccount(this.props.account.address); + } + +} + +export default class AccountSelector extends Component { + + static propTypes = { + list: PropTypes.array.isRequired, + selected: PropTypes.object.isRequired, + handleSetSelected: PropTypes.func.isRequired + }; + + state = { + open: false + }; + + render () { + const nestedAccounts = this.renderAccounts(this.props.list); + const selectedAccount = ( + + ); + + return ( +
    + + Select an account + { selectedAccount } + +
    + ); + } + + renderAccounts (accounts) { + return accounts + .map((account, index) => ( + + )); + } + + onToggleOpen = () => { + this.setState({ open: !this.state.open }); + } + + onSelectAccount = (address) => { + this.props.handleSetSelected(address); + this.onToggleOpen(); + } + +} diff --git a/js/src/dapps/tokenreg/Accounts/AccountSelector/container.js b/js/src/dapps/tokenreg/Accounts/AccountSelector/container.js new file mode 100644 index 0000000000..6438d1dff7 --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/AccountSelector/container.js @@ -0,0 +1,45 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import AccountSelector from './account-selector'; + +import { setSelectedAccount } from '../actions'; + +class AccountSelectorContainer extends Component { + render () { + return (); + } +} + +const mapStateToProps = (state) => { + const { accounts } = state; + return { ...accounts }; +}; + +const mapDispatchToProps = (dispatch) => { + return { + handleSetSelected: (address) => { + dispatch(setSelectedAccount(address)); + } + }; +}; + +export default connect(mapStateToProps, mapDispatchToProps)(AccountSelectorContainer); diff --git a/js/src/dapps/tokenreg/Accounts/AccountSelector/index.js b/js/src/dapps/tokenreg/Accounts/AccountSelector/index.js new file mode 100644 index 0000000000..87fbc567ef --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/AccountSelector/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './container'; diff --git a/js/src/dapps/tokenreg/Accounts/actions.js b/js/src/dapps/tokenreg/Accounts/actions.js new file mode 100644 index 0000000000..2e597f2e55 --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/actions.js @@ -0,0 +1,61 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export const SET_ACCOUNTS = 'SET_ACCOUNTS'; +export const setAccounts = (accounts) => ({ + type: SET_ACCOUNTS, + accounts +}); + +export const SET_ACCOUNTS_INFO = 'SET_ACCOUNTS_INFO'; +export const setAccountsInfo = (accountsInfo) => ({ + type: SET_ACCOUNTS_INFO, + accountsInfo +}); + +export const SET_SELECTED_ACCOUNT = 'SET_SELECTED_ACCOUNT'; +export const setSelectedAccount = (address) => ({ + type: SET_SELECTED_ACCOUNT, + address +}); + +export const loadAccounts = () => (dispatch) => { + Promise + .all([ + api.personal.listAccounts(), + api.personal.accountsInfo() + ]) + .then(results => { + const [ accounts, accountsInfo ] = results; + + const accountsList = accounts + .map(address => ({ + ...accountsInfo[address], + address + })); + + console.log('accounts', accountsList); + + dispatch(setAccounts(accountsList)); + dispatch(setAccountsInfo(accountsInfo)); + dispatch(setSelectedAccount(accountsList[0].address)); + }) + .catch(e => { + console.error('loadAccounts error', e); + }); +}; diff --git a/js/src/dapps/tokenreg/Accounts/reducer.js b/js/src/dapps/tokenreg/Accounts/reducer.js new file mode 100644 index 0000000000..091df4c8a6 --- /dev/null +++ b/js/src/dapps/tokenreg/Accounts/reducer.js @@ -0,0 +1,57 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { + SET_ACCOUNTS, + SET_SELECTED_ACCOUNT, + SET_ACCOUNTS_INFO +} from './actions'; + +const initialState = { + list: [], + accountsInfo: {}, + selected: null +}; + +export default (state = initialState, action) => { + switch (action.type) { + case SET_ACCOUNTS: + return { + ...state, + list: [].concat(action.accounts) + }; + + case SET_ACCOUNTS_INFO: + return { + ...state, + accountsInfo: { ...action.accountsInfo } + }; + + case SET_SELECTED_ACCOUNT: { + const address = action.address; + const account = state.list.find(a => a.address === address); + + return { + ...state, + selected: account + }; + } + + default: + return state; + } +}; + diff --git a/js/src/dapps/tokenreg/Actions/Query/index.js b/js/src/dapps/tokenreg/Actions/Query/index.js new file mode 100644 index 0000000000..83bc6a337c --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/Query/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './query'; diff --git a/js/src/dapps/tokenreg/Actions/Query/query.js b/js/src/dapps/tokenreg/Actions/Query/query.js new file mode 100644 index 0000000000..16d13f2f04 --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/Query/query.js @@ -0,0 +1,207 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { Dialog, FlatButton, SelectField, MenuItem } from 'material-ui'; + +import InputText from '../../Inputs/Text'; +import Loading from '../../Loading'; +import Token from '../../Tokens/Token'; + +import { SIMPLE_TOKEN_ADDRESS_TYPE, SIMPLE_TLA_TYPE } from '../../Inputs/validation'; + +import styles from '../actions.css'; + +const initState = { + queryKey: 'tla', + form: { + valid: false, + value: '' + } +}; + +export default class QueryAction extends Component { + + static propTypes = { + show: PropTypes.bool.isRequired, + loading: PropTypes.bool.isRequired, + + onClose: PropTypes.func.isRequired, + handleQueryToken: PropTypes.func.isRequired, + handleQueryMetaLookup: PropTypes.func.isRequired, + + data: PropTypes.object, + notFound: PropTypes.bool, + metaLoading: PropTypes.bool, + metaData: PropTypes.object + } + + state = initState; + + render () { + return ( + + { this.renderContent() } + + ); + } + + renderActions () { + const { loading, data, notFound } = this.props; + + if (loading) { + return ( + + ); + } + + const complete = data || notFound; + + if (complete) { + return ([ + + ]); + } + + const isValid = this.state.form.valid; + + return ([ + , + + ]); + } + + renderContent () { + const { loading, notFound, data } = this.props; + + if (loading) { + return ( + + ); + } + + if (notFound) { + return ( +

    No token has been found in the registry...

    + ); + } + + if (data) { + return this.renderData(); + } + + return this.renderForm(); + } + + renderData () { + const { data } = this.props; + + return ( + + ); + } + + renderForm () { + return ( +
    + + + + + + { + this.state.queryKey !== 'tla' + ? () + : () + } +
    + ); + } + + onQueryKeyChange = (event, index, queryKey) => { + this.setState({ + queryKey, + form: { valid: false, value: '' } + }); + } + + onChange = (valid, value) => { + this.setState({ + form: { + valid, value + } + }); + } + + onQuery = () => { + if (!this.state.form.valid) return; + + const { queryKey, form } = this.state; + + this.props.handleQueryToken(queryKey, form.value); + } + + onClose = () => { + this.setState(initState); + this.props.onClose(); + } + +} diff --git a/js/src/dapps/tokenreg/Actions/Register/index.js b/js/src/dapps/tokenreg/Actions/Register/index.js new file mode 100644 index 0000000000..3099d1f42f --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/Register/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './register'; diff --git a/js/src/dapps/tokenreg/Actions/Register/register.js b/js/src/dapps/tokenreg/Actions/Register/register.js new file mode 100644 index 0000000000..78d823326f --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/Register/register.js @@ -0,0 +1,217 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { Dialog, FlatButton } from 'material-ui'; + +import AccountSelector from '../../Accounts/AccountSelector'; +import InputText from '../../Inputs/Text'; + +import { TOKEN_ADDRESS_TYPE, TLA_TYPE, UINT_TYPE, STRING_TYPE } from '../../Inputs/validation'; + +import styles from '../actions.css'; + +const defaultField = { value: '', valid: false }; +const initState = { + isFormValid: false, + fields: { + address: { + ...defaultField, + type: TOKEN_ADDRESS_TYPE, + floatingLabelText: 'Token address', + hintText: 'The token address' + }, + tla: { + ...defaultField, + type: TLA_TYPE, + floatingLabelText: 'Token TLA', + hintText: 'The token short name (3 characters)' + }, + base: { + ...defaultField, + type: UINT_TYPE, + floatingLabelText: 'Token Base', + hintText: 'The token precision' + }, + name: { + ...defaultField, + type: STRING_TYPE, + floatingLabelText: 'Token name', + hintText: 'The token name' + } + } +}; + +export default class RegisterAction extends Component { + + static propTypes = { + show: PropTypes.bool.isRequired, + sending: PropTypes.bool.isRequired, + complete: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + handleRegisterToken: PropTypes.func.isRequired, + + error: PropTypes.object + } + + state = initState; + + render () { + const { sending, error, complete } = this.props; + + return ( + + { this.renderContent() } + + ); + } + + renderActions () { + const { complete, sending, error } = this.props; + + if (error) { + return ( + + ); + } + + if (complete) { + return ( + + ); + } + + const isValid = this.state.isFormValid; + + return ([ + , + + ]); + } + + renderContent () { + const { error, complete } = this.props; + + if (error) return this.renderError(); + if (complete) return this.renderComplete(); + return this.renderForm(); + } + + renderError () { + const { error } = this.props; + + return (
    +

    { error.toString() }

    +
    ); + } + + renderComplete () { + return (
    +

    Your transaction has been posted. Please visit the Parity Signer to authenticate the transfer.

    +
    ); + } + + renderForm () { + return ( +
    + + { this.renderInputs() } +
    + ); + } + + renderInputs () { + const { fields } = this.state; + + return Object.keys(fields).map((fieldKey, index) => { + const onChange = this.onChange.bind(this, fieldKey); + const field = fields[fieldKey]; + + return ( + + ); + }); + } + + onChange (fieldKey, valid, value) { + const { fields } = this.state; + const field = fields[fieldKey]; + + const newFields = { + ...fields, + [ fieldKey ]: { + ...field, + valid, value + } + }; + + const isFormValid = Object.keys(newFields) + .map(key => newFields[key].valid) + .reduce((current, fieldValid) => { + return current && fieldValid; + }, true); + + this.setState({ + fields: newFields, + isFormValid + }); + } + + onRegister = () => { + const { fields } = this.state; + + const data = Object.keys(fields) + .reduce((dataObject, fieldKey) => { + dataObject[fieldKey] = fields[fieldKey].value; + return dataObject; + }, {}); + + this.props.handleRegisterToken(data); + } + + onClose = () => { + this.setState(initState); + this.props.onClose(); + } + +} diff --git a/js/src/dapps/tokenreg/Actions/actions.css b/js/src/dapps/tokenreg/Actions/actions.css new file mode 100644 index 0000000000..d8eba57f1e --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/actions.css @@ -0,0 +1,50 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.actions { + padding-top: 2rem; +} + +.button { + margin: 0 0.5em; +} + +.button button { + background-color: #27ae60 !important; + height: 56px !important; + padding: 0 10px !important; +} + +.button button[disabled] { + background-color: rgba(50, 50, 50, 0.25) !important; +} + +.dialog { +} + +.dialog h3 { + color: rgba(50, 100, 150, 1) !important; + text-transform: uppercase; +} + +.dialogtext { + padding-top: 1em; +} + +.error { + color: red; +} diff --git a/js/src/dapps/tokenreg/Actions/actions.js b/js/src/dapps/tokenreg/Actions/actions.js new file mode 100644 index 0000000000..0f3390ea4f --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/actions.js @@ -0,0 +1,215 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { getTokenTotalSupply } from '../utils'; + +const { sha3, bytesToHex } = window.parity.api.util; + +export const SET_REGISTER_SENDING = 'SET_REGISTER_SENDING'; +export const setRegisterSending = (isSending) => ({ + type: SET_REGISTER_SENDING, + isSending +}); + +export const SET_REGISTER_ERROR = 'SET_REGISTER_ERROR'; +export const setRegisterError = (e) => ({ + type: SET_REGISTER_ERROR, + error: e +}); + +export const REGISTER_RESET = 'REGISTER_RESET'; +export const registerReset = () => ({ + type: REGISTER_RESET +}); + +export const REGISTER_COMPLETED = 'REGISTER_COMPLETED'; +export const registerCompleted = () => ({ + type: REGISTER_COMPLETED +}); + +export const registerToken = (tokenData) => (dispatch, getState) => { + console.log('registering token', tokenData); + + const state = getState(); + const contractInstance = state.status.contract.instance; + const fee = state.status.contract.fee; + + const { address, base, name, tla } = tokenData; + + dispatch(setRegisterSending(true)); + + const values = [ address, tla, base, name ]; + const options = { + from: state.accounts.selected.address, + value: fee + }; + + Promise.resolve() + .then(() => { + return contractInstance + .fromTLA.call({}, [ tla ]) + .then(([id, address, base, name, owner]) => { + if (owner !== '0x0000000000000000000000000000000000000000') { + throw new Error(`A Token has already been registered with the TLA ${tla}`); + } + }); + }) + .then(() => { + return contractInstance + .fromAddress.call({}, [ address ]) + .then(([id, tla, base, name, owner]) => { + if (owner !== '0x0000000000000000000000000000000000000000') { + throw new Error(`A Token has already been registered with the Address ${address}`); + } + }); + }) + .then(() => { + return contractInstance + .register.estimateGas(options, values); + }) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`transfer: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return contractInstance.register.postTransaction(options, values); + }) + .then((result) => { + dispatch(registerCompleted()); + }) + .catch((e) => { + console.error('registerToken error', e); + dispatch(setRegisterError(e)); + }); +}; + +export const SET_QUERY_LOADING = 'SET_QUERY_LOADING'; +export const setQueryLoading = (isLoading) => ({ + type: SET_QUERY_LOADING, + isLoading +}); + +export const SET_QUERY_RESULT = 'SET_QUERY_RESULT'; +export const setQueryResult = (data) => ({ + type: SET_QUERY_RESULT, + data +}); + +export const SET_QUERY_NOT_FOUND = 'SET_QUERY_NOT_FOUND'; +export const setQueryNotFound = () => ({ + type: SET_QUERY_NOT_FOUND +}); + +export const QUERY_RESET = 'QUERY_RESET'; +export const queryReset = () => ({ + type: QUERY_RESET +}); + +export const SET_QUERY_META_LOADING = 'SET_QUERY_META_LOADING'; +export const setQueryMetaLoading = (isLoading) => ({ + type: SET_QUERY_META_LOADING, + isLoading +}); + +export const SET_QUERY_META = 'SET_QUERY_META'; +export const setQueryMeta = (data) => ({ + type: SET_QUERY_META, + data +}); + +export const queryToken = (key, query) => (dispatch, getState) => { + const state = getState(); + const contractInstance = state.status.contract.instance; + + const contractFunc = (key === 'tla') ? 'fromTLA' : 'fromAddress'; + + dispatch(setQueryLoading(true)); + + contractInstance[contractFunc] + .call({}, [ query ]) + .then((result) => { + const data = { + index: result[0].toNumber(), + base: result[2].toNumber(), + name: result[3], + owner: result[4] + }; + + if (key === 'tla') { + data.tla = query; + data.address = result[1]; + } + + if (key === 'address') { + data.address = query; + data.tla = result[1]; + } + + return data; + }) + .then(data => { + return getTokenTotalSupply(data.address) + .then(totalSupply => { + data.totalSupply = totalSupply; + return data; + }); + }) + .then(data => { + if (data.totalSupply === null) { + dispatch(setQueryNotFound()); + dispatch(setQueryLoading(false)); + + return false; + } + + data.totalSupply = data.totalSupply.toNumber(); + dispatch(setQueryResult(data)); + dispatch(setQueryLoading(false)); + }, () => { + dispatch(setQueryNotFound()); + dispatch(setQueryLoading(false)); + }); +}; + +export const queryTokenMeta = (id, query) => (dispatch, getState) => { + console.log('loading token meta', query); + + const state = getState(); + const contractInstance = state.status.contract.instance; + + const key = sha3(query); + + const startDate = Date.now(); + dispatch(setQueryMetaLoading(true)); + + contractInstance + .meta + .call({}, [ id, key ]) + .then((value) => { + const meta = { + key, query, + value: value.find(v => v !== 0) ? bytesToHex(value) : null + }; + + dispatch(setQueryMeta(meta)); + + setTimeout(() => { + dispatch(setQueryMetaLoading(false)); + }, 500 - (Date.now() - startDate)); + }) + .catch((e) => { + console.error('load meta query error', e); + }); +}; diff --git a/js/src/dapps/tokenreg/Actions/component.js b/js/src/dapps/tokenreg/Actions/component.js new file mode 100644 index 0000000000..3e7ef0d645 --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/component.js @@ -0,0 +1,119 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { RaisedButton } from 'material-ui'; +import ActionSearchIcon from 'material-ui/svg-icons/action/search'; +import ContentSendIcon from 'material-ui/svg-icons/content/send'; + +import Register from './Register'; +import Query from './Query'; + +import styles from './actions.css'; + +const REGISTER_ACTION = 'REGISTER_ACTION'; +const QUERY_ACTION = 'QUERY_ACTION'; + +export default class Actions extends Component { + + static propTypes = { + handleRegisterToken: PropTypes.func.isRequired, + handleRegisterClose: PropTypes.func.isRequired, + register: PropTypes.object.isRequired, + + handleQueryToken: PropTypes.func.isRequired, + handleQueryClose: PropTypes.func.isRequired, + handleQueryMetaLookup: PropTypes.func.isRequired, + query: PropTypes.object.isRequired + }; + + state = { + show: { + [ REGISTER_ACTION ]: false, + [ QUERY_ACTION ]: false + } + } + + constructor () { + super(); + + this.onShowRegister = this.onShow.bind(this, REGISTER_ACTION); + this.onShowQuery = this.onShow.bind(this, QUERY_ACTION); + } + + render () { + return ( +
    + } + label='Register Token' + primary + onTouchTap={ this.onShowRegister } /> + + } + label='Search Token' + primary + onTouchTap={ this.onShowQuery } /> + + + + +
    + ); + } + + onRegisterClose = () => { + this.onHide(REGISTER_ACTION); + this.props.handleRegisterClose(); + } + + onQueryClose = () => { + this.onHide(QUERY_ACTION); + this.props.handleQueryClose(); + } + + onShow (key) { + this.setState({ + show: { + ...this.state.show, + [ key ]: true + } + }); + } + + onHide (key) { + this.setState({ + show: { + ...this.state.show, + [ key ]: false + } + }); + } + +} diff --git a/js/src/dapps/tokenreg/Actions/container.js b/js/src/dapps/tokenreg/Actions/container.js new file mode 100644 index 0000000000..2c37731222 --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/container.js @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import Actions from './component'; + +import { registerToken, registerReset, queryToken, queryReset, queryTokenMeta } from './actions'; + +class TokensContainer extends Component { + + render () { + return (); + } +} + +const mapStateToProps = (state) => { + const { register, query } = state.actions; + + return { register, query }; +}; + +const mapDispatchToProps = (dispatch) => { + return { + handleRegisterToken: (tokenData) => { + dispatch(registerToken(tokenData)); + }, + handleRegisterClose: () => { + dispatch(registerReset()); + }, + handleQueryToken: (key, query) => { + dispatch(queryToken(key, query)); + }, + handleQueryClose: () => { + dispatch(queryReset()); + }, + handleQueryMetaLookup: (id, query) => { + dispatch(queryTokenMeta(id, query)); + } + }; +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(TokensContainer); diff --git a/js/src/dapps/tokenreg/Actions/index.js b/js/src/dapps/tokenreg/Actions/index.js new file mode 100644 index 0000000000..9007217b71 --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './container.js'; diff --git a/js/src/dapps/tokenreg/Actions/reducer.js b/js/src/dapps/tokenreg/Actions/reducer.js new file mode 100644 index 0000000000..7b7f8341a3 --- /dev/null +++ b/js/src/dapps/tokenreg/Actions/reducer.js @@ -0,0 +1,155 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { + SET_REGISTER_SENDING, + SET_REGISTER_ERROR, + REGISTER_RESET, + REGISTER_COMPLETED, + + SET_QUERY_LOADING, + SET_QUERY_RESULT, + SET_QUERY_NOT_FOUND, + SET_QUERY_META_LOADING, + SET_QUERY_META, + QUERY_RESET +} from './actions'; + +const initialState = { + register: { + sending: false, + error: null, + complete: false + }, + query: { + loading: false, + data: null, + notFound: false, + metaLoading: false, + metaData: null + } +}; + +export default (state = initialState, action) => { + switch (action.type) { + case SET_REGISTER_SENDING: { + const registerState = state.register; + + return { + ...state, + register: { + ...registerState, + sending: action.isSending + } + }; + } + + case REGISTER_COMPLETED: { + const registerState = state.register; + + return { + ...state, + register: { + ...registerState, + sending: false, + complete: true + } + }; + } + + case SET_REGISTER_ERROR: { + const registerState = state.register; + + return { + ...state, + register: { + ...registerState, + sending: false, + error: action.error + } + }; + } + + case REGISTER_RESET: { + return { + ...state, + register: initialState.register + }; + } + + case SET_QUERY_LOADING: { + return { + ...state, + query: { + ...state.query, + loading: action.isLoading + } + }; + } + + case SET_QUERY_RESULT: { + return { + ...state, + query: { + ...state.query, + data: action.data + } + }; + } + + case SET_QUERY_NOT_FOUND: { + return { + ...state, + query: { + ...state.query, + notFound: true + } + }; + } + + case SET_QUERY_META_LOADING: { + return { + ...state, + query: { + ...state.query, + metaLoading: action.isLoading + } + }; + } + + case SET_QUERY_META: { + return { + ...state, + query: { + ...state.query, + metaData: action.data + } + }; + } + + case QUERY_RESET: { + return { + ...state, + query: { + ...initialState.query + } + }; + } + + default: + return state; + } +}; diff --git a/js/src/dapps/tokenreg/Application/application.css b/js/src/dapps/tokenreg/Application/application.css new file mode 100644 index 0000000000..07bc74b40c --- /dev/null +++ b/js/src/dapps/tokenreg/Application/application.css @@ -0,0 +1,22 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.application { + display: flex; + flex-direction: column; + align-items: center; +} diff --git a/js/src/dapps/tokenreg/Application/application.js b/js/src/dapps/tokenreg/Application/application.js new file mode 100644 index 0000000000..e48922b053 --- /dev/null +++ b/js/src/dapps/tokenreg/Application/application.js @@ -0,0 +1,72 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import getMuiTheme from 'material-ui/styles/getMuiTheme'; + +import Loading from '../Loading'; +import Status from '../Status'; +import Tokens from '../Tokens'; +import Actions from '../Actions'; + +import styles from './application.css'; + +const muiTheme = getMuiTheme({ + palette: { + primary1Color: '#27ae60' + } +}); + +export default class Application extends Component { + static childContextTypes = { + muiTheme: PropTypes.object + } + + static propTypes = { + isLoading: PropTypes.bool.isRequired, + + contract: PropTypes.object + }; + + render () { + const { isLoading, contract } = this.props; + + if (isLoading) { + return ( + + ); + } + + return ( +
    + + + + + +
    + ); + } + + getChildContext () { + return { + muiTheme + }; + } + +} diff --git a/js/src/dapps/tokenreg/Application/index.js b/js/src/dapps/tokenreg/Application/index.js new file mode 100644 index 0000000000..236578226a --- /dev/null +++ b/js/src/dapps/tokenreg/Application/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './application'; diff --git a/js/src/dapps/tokenreg/Chip/chip.css b/js/src/dapps/tokenreg/Chip/chip.css new file mode 100644 index 0000000000..5c28d56ce6 --- /dev/null +++ b/js/src/dapps/tokenreg/Chip/chip.css @@ -0,0 +1,45 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.chip > span { + flex: 1; + display: flex; + flex-direction: row; +} + +.chip img { + margin-bottom: -11px; + margin-left: -11px; +} + +.value { + font-family: 'Roboto Mono', monospace; + color: rgba(255, 255, 255, 1); + -webkit-user-select: text; + cursor: text; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.label { + color: rgba(255, 255, 255, 0.7); + margin-left: 1em; + margin-right: 0.5em; + text-transform: uppercase; +} diff --git a/js/src/dapps/tokenreg/Chip/chip.js b/js/src/dapps/tokenreg/Chip/chip.js new file mode 100644 index 0000000000..ad98860259 --- /dev/null +++ b/js/src/dapps/tokenreg/Chip/chip.js @@ -0,0 +1,68 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { Chip } from 'material-ui'; + +import IdentityIcon from '../IdentityIcon' ; + +import styles from './chip.css'; + +export default class CustomChip extends Component { + static propTypes = { + value: PropTypes.string.isRequired, + label: PropTypes.string.isRequired, + + isAddress: PropTypes.bool, + displayValue: PropTypes.string + }; + + render () { + const { isAddress, value, label } = this.props; + + const displayValue = this.props.displayValue || value; + + return ( + + { this.renderIcon(isAddress, value) } + + { displayValue } + + + { label } + + + ); + } + + renderIcon (isAddress, address) { + if (!isAddress) return; + + return ( + + ); + } +} diff --git a/js/src/dapps/tokenreg/Chip/index.js b/js/src/dapps/tokenreg/Chip/index.js new file mode 100644 index 0000000000..6e1ea80fba --- /dev/null +++ b/js/src/dapps/tokenreg/Chip/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './chip'; diff --git a/js/src/dapps/tokenreg/Container.js b/js/src/dapps/tokenreg/Container.js new file mode 100644 index 0000000000..9a8d7c6365 --- /dev/null +++ b/js/src/dapps/tokenreg/Container.js @@ -0,0 +1,64 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { connect } from 'react-redux'; + +import Application from './Application'; + +import { loadContract } from './Status/actions'; +import { loadAccounts } from './Accounts/actions'; + +class Container extends Component { + static propTypes = { + isLoading: PropTypes.bool.isRequired, + contract: PropTypes.object.isRequired, + onLoad: PropTypes.func.isRequired + }; + + componentDidMount () { + this.props.onLoad(); + } + + render () { + const { isLoading, contract } = this.props; + + return (); + } +} + +const mapStateToProps = (state) => { + const { isLoading, contract } = state.status; + + return { + isLoading, + contract + }; +}; + +const mapDispatchToProps = (dispatch) => { + return { + onLoad: () => { + dispatch(loadContract()); + dispatch(loadAccounts()); + } + }; +}; + +export default connect(mapStateToProps, mapDispatchToProps)(Container); diff --git a/js/src/dapps/tokenreg/IdentityIcon/identityIcon.css b/js/src/dapps/tokenreg/IdentityIcon/identityIcon.css new file mode 100644 index 0000000000..2b645d8239 --- /dev/null +++ b/js/src/dapps/tokenreg/IdentityIcon/identityIcon.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.icon { + width: 32px; + height: 32px; + border-radius: 50%; + margin-right: 0.5em; +} diff --git a/js/src/dapps/tokenreg/IdentityIcon/identityIcon.js b/js/src/dapps/tokenreg/IdentityIcon/identityIcon.js new file mode 100644 index 0000000000..51f48d46ab --- /dev/null +++ b/js/src/dapps/tokenreg/IdentityIcon/identityIcon.js @@ -0,0 +1,36 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { api } from '../parity'; +import styles from './identityIcon.css'; + +export default class IdentityIcon extends Component { + static propTypes = { + address: PropTypes.string.isRequired + } + + render () { + const { address } = this.props; + + return ( + + ); + } +} diff --git a/js/src/dapps/tokenreg/IdentityIcon/index.js b/js/src/dapps/tokenreg/IdentityIcon/index.js new file mode 100644 index 0000000000..76c107bfb7 --- /dev/null +++ b/js/src/dapps/tokenreg/IdentityIcon/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './identityIcon'; diff --git a/js/src/dapps/tokenreg/Inputs/Text/container.js b/js/src/dapps/tokenreg/Inputs/Text/container.js new file mode 100644 index 0000000000..450a2b56e5 --- /dev/null +++ b/js/src/dapps/tokenreg/Inputs/Text/container.js @@ -0,0 +1,37 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import InputText from './input-text'; + +class InputTextContainer extends Component { + + render () { + return (); + } +} + +const mapStateToProps = (state) => { + const { contract } = state.status; + + return { contract }; +}; + +export default connect(mapStateToProps)(InputTextContainer); diff --git a/js/src/dapps/tokenreg/Inputs/Text/index.js b/js/src/dapps/tokenreg/Inputs/Text/index.js new file mode 100644 index 0000000000..87fbc567ef --- /dev/null +++ b/js/src/dapps/tokenreg/Inputs/Text/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './container'; diff --git a/js/src/dapps/tokenreg/Inputs/Text/input-text.js b/js/src/dapps/tokenreg/Inputs/Text/input-text.js new file mode 100644 index 0000000000..289c8c37f3 --- /dev/null +++ b/js/src/dapps/tokenreg/Inputs/Text/input-text.js @@ -0,0 +1,141 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import { TextField } from 'material-ui'; +import CheckIcon from 'material-ui/svg-icons/navigation/check'; +import { green500 } from 'material-ui/styles/colors'; + +import Loading from '../../Loading'; + +import { validate } from '../validation'; + +import styles from '../inputs.css'; + +const initState = { + error: null, + value: '', + valid: false, + disabled: false, + loading: false +}; + +export default class InputText extends Component { + + static propTypes = { + validationType: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + onEnter: PropTypes.func, + + floatingLabelText: PropTypes.string, + hintText: PropTypes.string, + + contract: PropTypes.object + } + + state = initState; + + render () { + const { disabled, error } = this.state; + + return ( +
    + + + { this.renderLoading() } + { this.renderIsValid() } +
    + ); + } + + renderLoading () { + if (!this.state.loading) return; + + return ( +
    + +
    + ); + } + + renderIsValid () { + if (this.state.loading || !this.state.valid) return; + + return ( +
    + +
    + ); + } + + onChange = (event) => { + const value = event.target.value; + // So we can focus on the input after async validation + event.persist(); + + const { validationType, contract } = this.props; + + const validation = validate(value, validationType, contract); + + if (validation instanceof Promise) { + this.setState({ disabled: true, loading: true }); + + return validation + .then(validation => { + this.setValidation({ + ...validation, + disabled: false, + loading: false + }); + + event.target.focus(); + }); + } + + this.setValidation(validation); + } + + onKeyDown = (event) => { + if (!this.props.onEnter) return; + if (event.keyCode !== 13) return; + + this.props.onEnter(); + } + + setValidation = (validation) => { + const { value } = validation; + + this.setState({ ...validation }); + + if (validation.valid) { + return this.props.onChange(true, value); + } + + return this.props.onChange(false, value); + } + +} diff --git a/js/src/dapps/tokenreg/Inputs/inputs.css b/js/src/dapps/tokenreg/Inputs/inputs.css new file mode 100644 index 0000000000..f8bea11483 --- /dev/null +++ b/js/src/dapps/tokenreg/Inputs/inputs.css @@ -0,0 +1,33 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.input-container { + width: 100%; + position: relative; +} + +.input-loading { + position: absolute; + right: -5px; + top: 20px; +} + +.input-icon { + position: absolute; + right: 5px; + bottom: 10px; +} diff --git a/js/src/dapps/tokenreg/Inputs/validation.js b/js/src/dapps/tokenreg/Inputs/validation.js new file mode 100644 index 0000000000..b2e0688a89 --- /dev/null +++ b/js/src/dapps/tokenreg/Inputs/validation.js @@ -0,0 +1,212 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import isURL from 'validator/lib/isURL'; + +import { api } from '../parity'; + +import { getTokenTotalSupply } from '../utils'; + +const { + isHex, + isAddressValid, + toChecksumAddress +} = api.util; + +export const ADDRESS_TYPE = 'ADDRESS_TYPE'; +export const TOKEN_ADDRESS_TYPE = 'TOKEN_ADDRESS_TYPE'; +export const SIMPLE_TOKEN_ADDRESS_TYPE = 'SIMPLE_TOKEN_ADDRESS_TYPE'; +export const TLA_TYPE = 'TLA_TYPE'; +export const SIMPLE_TLA_TYPE = 'SIMPLE_TLA_TYPE'; +export const UINT_TYPE = 'UINT_TYPE'; +export const STRING_TYPE = 'STRING_TYPE'; +export const HEX_TYPE = 'HEX_TYPE'; +export const URL_TYPE = 'URL_TYPE'; + +export const ERRORS = { + invalidTLA: 'The TLA should be 3 characters long', + invalidUint: 'Please enter a non-negative integer', + invalidString: 'Please enter at least a character', + invalidAccount: 'Please select an account to transact with', + invalidRecipient: 'Please select an account to send to', + invalidAddress: 'The address is not in the correct format', + invalidTokenAddress: 'The address is not a regular token contract address', + invalidHex: 'Please enter an hexadecimal string (digits and letters from a to z)', + invalidAmount: 'Please enter a positive amount > 0', + invalidTotal: 'The amount is greater than the availale balance', + tlaAlreadyTaken: 'This TLA address is already registered', + addressAlreadyTaken: 'This Token address is already registered', + invalidURL: 'Please enter a valid URL' +}; + +const validateAddress = (address) => { + if (!isAddressValid(address)) { + return { + error: ERRORS.invalidAddress, + valid: false + }; + } + + return { + value: toChecksumAddress(address), + error: null, + valid: true + }; +}; + +const validateTokenAddress = (address, contract, simple) => { + const addressValidation = validateAddress(address); + if (!addressValidation.valid) return addressValidation; + + if (simple) return addressValidation; + + return getTokenTotalSupply(address) + .then(balance => { + if (balance === null) { + return { + error: ERRORS.invalidTokenAddress, + valid: false + }; + } + + return contract.instance + .fromAddress.call({}, [ address ]) + .then(([id, tla, base, name, owner]) => { + if (owner !== '0x0000000000000000000000000000000000000000') { + return { + error: ERRORS.addressAlreadyTaken, + valid: false + }; + } + }); + }) + .then((result) => { + if (result) return result; + return addressValidation; + }); +}; + +const validateTLA = (tla, contract, simple) => { + if (tla.toString().length !== 3) { + return { + error: ERRORS.invalidTLA, + valid: false + }; + } + + const fTLA = tla.toString().toUpperCase(); + + if (simple) { + return { + value: fTLA, + error: null, + valid: true + }; + } + + return contract.instance + .fromTLA.call({}, [ fTLA ]) + .then(([id, address, base, name, owner]) => { + if (owner !== '0x0000000000000000000000000000000000000000') { + return { + error: ERRORS.tlaAlreadyTaken, + valid: false + }; + } + }) + .then((result) => { + if (result) return result; + return { + value: fTLA, + error: null, + valid: true + }; + }); +}; + +const validateUint = (uint) => { + if (!/^\d+$/.test(uint) || parseInt(uint) <= 0) { + return { + error: ERRORS.invalidUint, + valid: false + }; + } + + return { + value: parseInt(uint), + error: null, + valid: true + }; +}; + +const validateString = (string) => { + if (string.toString().length === 0) { + return { + error: ERRORS.invalidString, + valid: false + }; + } + + return { + value: string.toString(), + error: null, + valid: true + }; +}; + +const validateHex = (string) => { + if (!isHex(string.toString())) { + return { + error: ERRORS.invalidHex, + valid: false + }; + } + + return { + value: string.toString(), + error: null, + valid: true + }; +}; + +const validateURL = (string) => { + if (!isURL(string.toString())) { + return { + error: ERRORS.invalidURL, + valid: false + }; + } + + return { + value: string.toString(), + error: null, + valid: true + }; +}; + +export const validate = (value, type, contract) => { + if (type === ADDRESS_TYPE) return validateAddress(value); + if (type === TOKEN_ADDRESS_TYPE) return validateTokenAddress(value, contract); + if (type === SIMPLE_TOKEN_ADDRESS_TYPE) return validateTokenAddress(value, contract, true); + if (type === TLA_TYPE) return validateTLA(value, contract); + if (type === SIMPLE_TLA_TYPE) return validateTLA(value, contract, true); + if (type === UINT_TYPE) return validateUint(value); + if (type === STRING_TYPE) return validateString(value); + if (type === HEX_TYPE) return validateHex(value); + if (type === URL_TYPE) return validateURL(value); + + return { valid: true, error: null }; +}; diff --git a/js/src/dapps/tokenreg/Loading/index.js b/js/src/dapps/tokenreg/Loading/index.js new file mode 100644 index 0000000000..0468cab37d --- /dev/null +++ b/js/src/dapps/tokenreg/Loading/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './loading'; diff --git a/js/src/dapps/tokenreg/Loading/loading.css b/js/src/dapps/tokenreg/Loading/loading.css new file mode 100644 index 0000000000..dbdb98e422 --- /dev/null +++ b/js/src/dapps/tokenreg/Loading/loading.css @@ -0,0 +1,23 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.loading { + flex: 1; + display: flex; + align-items: center; + justify-content: center; +} diff --git a/js/src/dapps/tokenreg/Loading/loading.js b/js/src/dapps/tokenreg/Loading/loading.js new file mode 100644 index 0000000000..3b76193231 --- /dev/null +++ b/js/src/dapps/tokenreg/Loading/loading.js @@ -0,0 +1,34 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import CircularProgress from 'material-ui/CircularProgress'; + +import styles from './loading.css'; + +export default class Loading extends Component { + static propTypes = { + size: PropTypes.number + }; + + render () { + return ( +
    + +
    + ); + } +} diff --git a/js/src/dapps/tokenreg/Status/actions.js b/js/src/dapps/tokenreg/Status/actions.js new file mode 100644 index 0000000000..a479179b22 --- /dev/null +++ b/js/src/dapps/tokenreg/Status/actions.js @@ -0,0 +1,202 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { + registry as registryAbi, + tokenreg as tokenregAbi, + githubhint as githubhintAbi +} from '../../../contracts/abi'; + +import { loadToken, setTokenPending, deleteToken, setTokenData } from '../Tokens/actions'; + +const { api } = window.parity; + +export const SET_LOADING = 'SET_LOADING'; +export const setLoading = (isLoading) => ({ + type: SET_LOADING, + isLoading +}); + +export const FIND_CONTRACT = 'FIND_CONTRACT'; +export const loadContract = () => (dispatch) => { + dispatch(setLoading(true)); + + api.ethcore + .registryAddress() + .then((registryAddress) => { + console.log(`registry found at ${registryAddress}`); + const registry = api.newContract(registryAbi, registryAddress).instance; + + return Promise.all([ + registry.getAddress.call({}, [api.util.sha3('tokenreg'), 'A']), + registry.getAddress.call({}, [api.util.sha3('githubhint'), 'A']) + ]); + }) + .then(([ tokenregAddress, githubhintAddress ]) => { + console.log(`tokenreg was found at ${tokenregAddress}`); + + const tokenregContract = api + .newContract(tokenregAbi, tokenregAddress); + + const githubhintContract = api + .newContract(githubhintAbi, githubhintAddress); + + dispatch(setContractDetails({ + address: tokenregAddress, + instance: tokenregContract.instance, + raw: tokenregContract + })); + + dispatch(setGithubhintDetails({ + address: githubhintAddress, + instance: githubhintContract.instance, + raw: githubhintContract + })); + + dispatch(loadContractDetails()); + dispatch(subscribeEvents()); + }) + .catch((error) => { + console.error('loadContract error', error); + }); +}; + +export const LOAD_CONTRACT_DETAILS = 'LOAD_CONTRACT_DETAILS'; +export const loadContractDetails = () => (dispatch, getState) => { + const state = getState(); + + const instance = state.status.contract.instance; + + Promise + .all([ + api.personal.listAccounts(), + instance.owner.call(), + instance.fee.call() + ]) + .then(([accounts, owner, fee]) => { + console.log(`owner as ${owner}, fee set at ${fee.toFormat()}`); + + const isOwner = accounts.filter(a => a === owner).length > 0; + + dispatch(setContractDetails({ + fee, + owner, + isOwner + })); + + dispatch(setLoading(false)); + }) + .catch((error) => { + console.error('loadContractDetails error', error); + }); +}; + +export const SET_CONTRACT_DETAILS = 'SET_CONTRACT_DETAILS'; +export const setContractDetails = (details) => ({ + type: SET_CONTRACT_DETAILS, + details +}); + +export const SET_GITHUBHINT_CONTRACT = 'SET_GITHUBHINT_CONTRACT'; +export const setGithubhintDetails = (details) => ({ + type: SET_GITHUBHINT_CONTRACT, + details +}); + +export const subscribeEvents = () => (dispatch, getState) => { + const state = getState(); + + const contract = state.status.contract.raw; + const previousSubscriptionId = state.status.subscriptionId; + + if (previousSubscriptionId) { + contract.unsubscribe(previousSubscriptionId); + } + + contract + .subscribe(null, { + fromBlock: 'latest', + toBlock: 'pending', + limit: 50 + }, (error, logs) => { + if (error) { + console.error('setupFilters', error); + return; + } + + if (!logs || logs.length === 0) return; + + logs.forEach(log => { + const event = log.event; + const type = log.type; + const params = log.params; + + if (event === 'Registered' && type === 'pending') { + return dispatch(setTokenData(params.id.toNumber(), { + tla: '...', + base: -1, + address: params.addr, + name: params.name, + isPending: true + })); + } + + if (event === 'Registered' && type === 'mined') { + return dispatch(loadToken(params.id.toNumber())); + } + + if (event === 'Unregistered' && type === 'pending') { + return dispatch(setTokenPending(params.id.toNumber(), true)); + } + + if (event === 'Unregistered' && type === 'mined') { + return dispatch(deleteToken(params.id.toNumber())); + } + + if (event === 'MetaChanged' && type === 'pending') { + return dispatch(setTokenData( + params.id.toNumber(), + { metaPending: true, metaMined: false } + )); + } + + if (event === 'MetaChanged' && type === 'mined') { + setTimeout(() => { + dispatch(setTokenData( + params.id.toNumber(), + { metaPending: false, metaMined: false } + )); + }, 5000); + + return dispatch(setTokenData( + params.id.toNumber(), + { metaPending: false, metaMined: true } + )); + } + + console.log('new log event', log); + }); + }) + .then((subscriptionId) => { + dispatch(setSubscriptionId(subscriptionId)); + }); +}; + +export const SET_SUBSCRIPTION_ID = 'SET_SUBSCRIPTION_ID'; +export const setSubscriptionId = subscriptionId => ({ + type: SET_SUBSCRIPTION_ID, + subscriptionId +}); diff --git a/js/src/dapps/tokenreg/Status/index.js b/js/src/dapps/tokenreg/Status/index.js new file mode 100644 index 0000000000..44079b2248 --- /dev/null +++ b/js/src/dapps/tokenreg/Status/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './status'; diff --git a/js/src/dapps/tokenreg/Status/reducer.js b/js/src/dapps/tokenreg/Status/reducer.js new file mode 100644 index 0000000000..7b018bd85e --- /dev/null +++ b/js/src/dapps/tokenreg/Status/reducer.js @@ -0,0 +1,65 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { + SET_LOADING, + SET_CONTRACT_DETAILS, + SET_GITHUBHINT_CONTRACT, + SET_SUBSCRIPTION_ID +} from './actions'; + +const initialState = { + isLoading: true, + subscriptionId: null, + contract: { + addres: null, + instance: null, + raw: null, + owner: null, + isOwner: false, + fee: null + }, + githubhint: { + address: null, + instance: null, + raw: null + } +}; + +export default (state = initialState, action) => { + switch (action.type) { + case SET_LOADING: + return { ...state, isLoading: action.isLoading }; + + case SET_SUBSCRIPTION_ID: + return { ...state, subscriptionId: action.subscriptionId }; + + case SET_CONTRACT_DETAILS: + return { ...state, contract: { + ...state.contract, + ...action.details + } }; + + case SET_GITHUBHINT_CONTRACT: + return { ...state, githubhint: { + ...state.githubhint, + ...action.details + } }; + + default: + return state; + } +}; diff --git a/js/src/dapps/tokenreg/Status/status.css b/js/src/dapps/tokenreg/Status/status.css new file mode 100644 index 0000000000..27ef53607e --- /dev/null +++ b/js/src/dapps/tokenreg/Status/status.css @@ -0,0 +1,36 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.status { + background: rgba(46, 204, 113, 0.85); + color: rgba(255, 255, 255, 1); + padding: 4em 0 2em 0; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + width: 100%; +} + +.title { + font-size: 3rem; + font-weight: 300; + margin-top: 0; + text-transform: uppercase; +} diff --git a/js/src/dapps/tokenreg/Status/status.js b/js/src/dapps/tokenreg/Status/status.js new file mode 100644 index 0000000000..f8c7b347a4 --- /dev/null +++ b/js/src/dapps/tokenreg/Status/status.js @@ -0,0 +1,50 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Chip from '../Chip'; + +import styles from './status.css'; + +const { api } = window.parity; + +export default class Status extends Component { + static propTypes = { + address: PropTypes.string.isRequired, + fee: PropTypes.object.isRequired + }; + + render () { + const { address, fee } = this.props; + + return ( +
    +

    Token Registry

    + + + + +
    + ); + } +} diff --git a/js/src/dapps/tokenreg/Tokens/Token/add-meta.js b/js/src/dapps/tokenreg/Tokens/Token/add-meta.js new file mode 100644 index 0000000000..09e65954d2 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/Token/add-meta.js @@ -0,0 +1,193 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { Dialog, RaisedButton, FlatButton, SelectField, MenuItem } from 'material-ui'; +import AddIcon from 'material-ui/svg-icons/content/add'; + +import InputText from '../../Inputs/Text'; +import { ADDRESS_TYPE } from '../../Inputs/validation'; + +import styles from './token.css'; + +import { metaDataKeys } from '../../constants'; + +const initState = { + showDialog: false, + complete: false, + metaKeyIndex: 0, + + form: { + valid: false, + value: '' + } +}; + +export default class AddMeta extends Component { + static propTypes = { + isTokenOwner: PropTypes.bool, + handleAddMeta: PropTypes.func, + index: PropTypes.number + }; + + state = initState; + + render () { + if (!this.props.isTokenOwner) return null; + + return (
    + } + primary + fullWidth + onTouchTap={ this.onShowDialog } /> + + + { this.renderContent() } + +
    ); + } + + renderActions () { + const { complete } = this.state; + + if (complete) { + return ( + + ); + } + + const isValid = this.state.form.valid; + + return ([ + , + + ]); + } + + renderContent () { + const { complete } = this.state; + + if (complete) return this.renderComplete(); + return this.renderForm(); + } + + renderComplete () { + if (metaDataKeys[this.state.metaKeyIndex].value === 'IMG') { + return (
    +

    + Your transactions has been posted. + Two transactions are needed to add an Image. + Please visit the Parity Signer to authenticate the transfer.

    +
    ); + } + return (
    +

    Your transaction has been posted. Please visit the Parity Signer to authenticate the transfer.

    +
    ); + } + + renderForm () { + const selectedMeta = metaDataKeys[this.state.metaKeyIndex]; + + return ( +
    + + + { this.renderMetaKeyItems() } + + + + +
    + ); + } + + renderMetaKeyItems () { + return metaDataKeys.map((key, index) => ( + + )); + } + + onShowDialog = () => { + this.setState({ showDialog: true }); + } + + onClose = () => { + this.setState(initState); + } + + onAdd = () => { + const { index } = this.props; + + const keyIndex = this.state.metaKeyIndex; + const key = metaDataKeys[keyIndex].value; + + this.props.handleAddMeta( + index, + key, + this.state.form.value + ); + + this.setState({ complete: true }); + } + + onChange = (valid, value) => { + this.setState({ + form: { + valid, value + } + }); + } + + onMetaKeyChange = (event, metaKeyIndex) => { + this.setState({ metaKeyIndex, form: { + ...[this.state.form], + valid: false, + value: '' + } }); + } + +} diff --git a/js/src/dapps/tokenreg/Tokens/Token/index.js b/js/src/dapps/tokenreg/Tokens/Token/index.js new file mode 100644 index 0000000000..4b822b4bdf --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/Token/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './token'; diff --git a/js/src/dapps/tokenreg/Tokens/Token/token.css b/js/src/dapps/tokenreg/Tokens/Token/token.css new file mode 100644 index 0000000000..cfd01e3d63 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/Token/token.css @@ -0,0 +1,140 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.token{ + position: relative; + display: flex; + + width: 20rem; + margin: 1rem; + padding: 1rem; + padding-bottom: 1.5rem; +} + +.token-container, .token-content, .token-meta { + width: 100%; + + display: flex; + flex-direction: column; + align-items: center; +} + +.token-content, .token-meta { + z-index: 50; +} + +.token-bg { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + -webkit-filter: blur(5px); + filter: blur(5px); + background-color: rgba(255, 255, 255, 0.85); +} + +.token-container { + flex: 1; +} + +.full-width .token-container { + flex-direction: row; + align-items: flex-start; +} + +.full-width .token-content { + width: 20rem; + margin-right: 1rem; +} + +.token-content > div, .token-meta > div { + max-width: 100%; +} + +.loading { + margin: 1rem 0; +} + +.name { + padding-bottom: 0.75rem; +} + +.title { + font-size: 2rem; + padding: 0 0 0.5rem; +} + +.meta-query { + font-size: 0.9rem; + margin-top: 1.5rem; + margin-bottom: 0; +} + +.meta-key { + font-weight: bold; +} + +.meta-value { + margin-top: 0.5rem; + max-width: 100%; + overflow-wrap: break-word; +} + +.meta-info { + margin-top: 1.5rem; + margin-bottom: -0.5rem; + font-size: 0.9rem; + color: gray; +} + +.meta-image { + width: 100%; + margin-top: 1rem; +} + +.meta-image img { + width: 100%; +} + +.meta-form { + width: 100%; +} + +.unregister { + margin-top: 1rem; +} + +.add-meta { + margin-top: 1rem; + width: 100%; +} + +.pending { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + z-index: 100; + background-color: rgba(0, 0, 0, 0.35); +} + +.dialog h3 { + color: rgba(50, 100, 150, 1) !important; + text-transform: uppercase; +} diff --git a/js/src/dapps/tokenreg/Tokens/Token/token.js b/js/src/dapps/tokenreg/Tokens/Token/token.js new file mode 100644 index 0000000000..bee9256899 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/Token/token.js @@ -0,0 +1,338 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import Paper from 'material-ui/Paper'; +import { RaisedButton, SelectField, MenuItem } from 'material-ui'; + +import FindIcon from 'material-ui/svg-icons/action/find-in-page'; +import DeleteIcon from 'material-ui/svg-icons/action/delete'; + +import Loading from '../../Loading'; +import Chip from '../../Chip'; +import AddMeta from './add-meta'; + +import styles from './token.css'; + +import { metaDataKeys } from '../../constants'; + +import { api } from '../../parity'; + +export default class Token extends Component { + static propTypes = { + handleMetaLookup: PropTypes.func.isRequired, + address: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + index: PropTypes.number.isRequired, + owner: PropTypes.string.isRequired, + + handleAddMeta: PropTypes.func, + handleUnregister: PropTypes.func, + + tla: PropTypes.string, + base: PropTypes.number, + totalSupply: PropTypes.number, + meta: PropTypes.object, + isMetaLoading: PropTypes.bool, + ownerAccountInfo: PropTypes.shape({ + name: PropTypes.string, + meta: PropTypes.object + }), + metaPending: PropTypes.bool, + metaMined: PropTypes.bool, + isLoading: PropTypes.bool, + isPending: PropTypes.bool, + isTokenOwner: PropTypes.bool.isRequired, + + fullWidth: PropTypes.bool + }; + + state = { + metaKeyIndex: 0 + }; + + render () { + const { isLoading, fullWidth } = this.props; + + if (isLoading) { + return ( +
    + +
    + ); + } + + if (fullWidth) { + return (
    + { this.renderContent() } +
    ); + } + + return (
    + +
    + { this.renderContent() } + +
    ); + } + + renderContent () { + const { address, tla, base, name, meta, owner, totalSupply } = this.props; + + return (
    + { this.renderIsPending() } + +
    +
    { tla }
    +
    "{ name }"
    + + { this.renderBase(base) } + { this.renderTotalSupply(totalSupply, base, tla) } + { this.renderAddress(address) } + { this.renderOwner(owner) } +
    + +
    +
    + + + { this.renderMetaKeyItems() } + + + + } + primary + fullWidth + onTouchTap={ this.onMetaLookup } /> +
    + + { this.renderMeta(meta) } + { this.renderAddMeta() } + { this.renderUnregister() } +
    + + { this.renderMetaPending() } + { this.renderMetaMined() } +
    ); + } + + renderMetaKeyItems () { + return metaDataKeys.map((key, index) => ( + + )); + } + + renderBase (base) { + if (!base || base < 0) return null; + return ( + + ); + } + + renderAddress (address) { + if (!address) return null; + return ( + + ); + } + + renderTotalSupply (totalSupply, base, tla) { + const balance = Math.round((totalSupply / base) * 100) / 100; + + return ( + + ); + } + + renderOwner (owner) { + if (!owner) return null; + + const ownerInfo = this.props.ownerAccountInfo; + + const displayValue = (ownerInfo && ownerInfo.name) + ? ownerInfo.name + : owner; + + return ( + + ); + } + + renderIsPending () { + const { isPending } = this.props; + + if (!isPending) { + return null; + } + + return ( +
    + ); + } + + renderAddMeta () { + if (!this.props.isTokenOwner) { + return null; + } + + return ( + + ); + } + + renderUnregister () { + if (!this.props.isTokenOwner) { + return null; + } + + return ( + } + secondary + fullWidth + onTouchTap={ this.onUnregister } /> + ); + } + + renderMeta (meta) { + const isMetaLoading = this.props.isMetaLoading; + + if (isMetaLoading) { + return (
    + +
    ); + } + + if (!meta) return; + + const metaData = metaDataKeys.find(m => m.value === meta.query); + + if (!meta.value) { + return (
    +

    + No + { metaData.label.toLowerCase() } + meta-data... +

    +
    ); + } + + if (meta.query === 'IMG') { + const imageHash = meta.value.replace(/^0x/, ''); + + return (
    +

    + + { metaData.label } + meta-data: +

    +
    + +
    +
    ); + } + + if (meta.query === 'A') { + const address = meta.value.slice(0, 42); + + return (
    +

    + + { metaData.label } + meta-data: +

    +

    + { api.util.toChecksumAddress(address) } +

    +
    ); + } + + return (
    +

    + + { metaData.label } + meta-data: +

    +

    { meta.value }

    +
    ); + } + + renderMetaPending () { + const isMetaPending = this.props.metaPending; + if (!isMetaPending) return; + + return (
    +

    + Meta-Data pending... +

    +
    ); + } + + renderMetaMined () { + const isMetaMined = this.props.metaMined; + if (!isMetaMined) return; + + return (
    +

    + Meta-Data saved on the blockchain! +

    +
    ); + } + + onUnregister = () => { + const index = this.props.index; + this.props.handleUnregister(index); + } + + onMetaLookup = () => { + const keyIndex = this.state.metaKeyIndex; + const key = metaDataKeys[keyIndex].value; + const index = this.props.index; + + this.props.handleMetaLookup(index, key); + } + + onMetaKeyChange = (event, metaKeyIndex) => { + this.setState({ metaKeyIndex }); + } +} diff --git a/js/src/dapps/tokenreg/Tokens/actions.js b/js/src/dapps/tokenreg/Tokens/actions.js new file mode 100644 index 0000000000..7953bb241c --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/actions.js @@ -0,0 +1,262 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { getTokenTotalSupply } from '../utils'; + +const { bytesToHex } = window.parity.api.util; + +export const SET_TOKENS_LOADING = 'SET_TOKENS_LOADING'; +export const setTokensLoading = (isLoading) => ({ + type: SET_TOKENS_LOADING, + isLoading +}); + +export const SET_TOKEN_COUNT = 'SET_TOKEN_COUNT'; +export const setTokenCount = (tokenCount) => ({ + type: SET_TOKEN_COUNT, + tokenCount +}); + +export const SET_TOKEN_DATA = 'SET_TOKEN_DATA'; +export const setTokenData = (index, tokenData) => ({ + type: SET_TOKEN_DATA, + index, tokenData +}); + +export const SET_TOKEN_META = 'SET_TOKEN_META'; +export const setTokenMeta = (index, meta) => ({ + type: SET_TOKEN_META, + index, meta +}); + +export const SET_TOKEN_LOADING = 'SET_TOKEN_LOADING'; +export const setTokenLoading = (index, isLoading) => ({ + type: SET_TOKEN_LOADING, + index, isLoading +}); + +export const SET_TOKEN_META_LOADING = 'SET_TOKEN_META_LOADING'; +export const setTokenMetaLoading = (index, isMetaLoading) => ({ + type: SET_TOKEN_META_LOADING, + index, isMetaLoading +}); + +export const SET_TOKEN_PENDING = 'SET_TOKEN_PENDING'; +export const setTokenPending = (index, isPending) => ({ + type: SET_TOKEN_PENDING, + index, isPending +}); + +export const DELETE_TOKEN = 'DELETE_TOKEN'; +export const deleteToken = (index) => ({ + type: DELETE_TOKEN, + index +}); + +export const loadTokens = () => (dispatch, getState) => { + console.log('loading tokens...'); + + const state = getState(); + const contractInstance = state.status.contract.instance; + + dispatch(setTokensLoading(true)); + + contractInstance + .tokenCount + .call() + .then((count) => { + const tokenCount = parseInt(count); + console.log(`token count: ${tokenCount}`); + dispatch(setTokenCount(tokenCount)); + + for (let i = 0; i < tokenCount; i++) { + dispatch(loadToken(i)); + } + + dispatch(setTokensLoading(false)); + }) + .catch((e) => { + console.error('loadTokens error', e); + }); +}; + +export const loadToken = (index) => (dispatch, getState) => { + console.log('loading token', index); + + const state = getState(); + const contractInstance = state.status.contract.instance; + + const userAccounts = state.accounts.list; + const accountsInfo = state.accounts.accountsInfo; + + dispatch(setTokenLoading(index, true)); + + contractInstance + .token + .call({}, [ parseInt(index) ]) + .then((result) => { + const tokenOwner = result[4]; + + const isTokenOwner = userAccounts + .filter(a => a.address === tokenOwner) + .length > 0; + + const data = { + index: parseInt(index), + address: result[0], + tla: result[1], + base: result[2].toNumber(), + name: result[3], + owner: tokenOwner, + ownerAccountInfo: accountsInfo[tokenOwner], + isPending: false, + isTokenOwner + }; + + return data; + }) + .then(data => { + return getTokenTotalSupply(data.address) + .then(totalSupply => { + data.totalSupply = totalSupply; + return data; + }); + }) + .then(data => { + // If no total supply, must not be a proper token + if (data.totalSupply === null) { + dispatch(setTokenData(index, null)); + dispatch(setTokenLoading(index, false)); + return; + } + + data.totalSupply = data.totalSupply.toNumber(); + console.log(`token loaded: #${index}`, data); + dispatch(setTokenData(index, data)); + dispatch(setTokenLoading(index, false)); + }) + .catch((e) => { + dispatch(setTokenData(index, null)); + dispatch(setTokenLoading(index, false)); + + if (!e instanceof TypeError) { + console.error(`loadToken #${index} error`, e); + } + }); +}; + +export const queryTokenMeta = (index, query) => (dispatch, getState) => { + console.log('loading token meta', index, query); + + const state = getState(); + const contractInstance = state.status.contract.instance; + + const startDate = Date.now(); + dispatch(setTokenMetaLoading(index, true)); + + contractInstance + .meta + .call({}, [ index, query ]) + .then((value) => { + const meta = { + query, + value: value.find(v => v !== 0) ? bytesToHex(value) : null + }; + + console.log(`token meta loaded: #${index}`, value); + dispatch(setTokenMeta(index, meta)); + + setTimeout(() => { + dispatch(setTokenMetaLoading(index, false)); + }, 500 - (Date.now() - startDate)); + }) + .catch((e) => { + console.error(`loadToken #${index} error`, e); + }); +}; + +export const addTokenMeta = (index, key, value) => (dispatch, getState) => { + console.log('add token meta', index, key, value); + + const state = getState(); + const contractInstance = state.status.contract.instance; + const token = state.tokens.tokens.find(t => t.index === index); + + const options = { from: token.owner }; + const values = [ index, key, value ]; + + contractInstance + .setMeta + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`addTokenMeta: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return contractInstance.setMeta.postTransaction(options, values); + }) + .catch((e) => { + console.error(`addTokenMeta: #${index} error`, e); + }); +}; + +export const addGithubhintURL = (from, key, url) => (dispatch, getState) => { + console.log('add githubhint url', key, url); + + const state = getState(); + const contractInstance = state.status.githubhint.instance; + + const options = { from }; + + const values = [ key, url ]; + + contractInstance + .hintURL + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`transfer: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return contractInstance.hintURL.postTransaction(options, values); + }) + .catch((e) => { + console.error('addGithubhintURL error', e); + }); +}; + +export const unregisterToken = (index) => (dispatch, getState) => { + console.log('unregistering token', index); + + const state = getState(); + const contractInstance = state.status.contract.instance; + + const values = [ index ]; + const options = { + from: state.accounts.selected.address + }; + + contractInstance + .unregister + .estimateGas(options, values) + .then((gasEstimate) => { + options.gas = gasEstimate.mul(1.2).toFixed(0); + console.log(`transfer: gas estimated as ${gasEstimate.toFixed(0)} setting to ${options.gas}`); + + return contractInstance.unregister.postTransaction(options, values); + }) + .catch((e) => { + console.error(`unregisterToken #${index} error`, e); + }); +}; diff --git a/js/src/dapps/tokenreg/Tokens/container.js b/js/src/dapps/tokenreg/Tokens/container.js new file mode 100644 index 0000000000..b6171c2cc1 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/container.js @@ -0,0 +1,80 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import { connect } from 'react-redux'; + +import Tokens from './tokens'; + +import { loadTokens, queryTokenMeta, unregisterToken, addTokenMeta } from './actions'; + +class TokensContainer extends Component { + static propTypes = { + isOwner: PropTypes.bool, + isLoading: PropTypes.bool, + tokens: PropTypes.array, + tokenCount: PropTypes.number, + onLoadTokens: PropTypes.func, + accounts: PropTypes.array + }; + + componentDidMount () { + this.props.onLoadTokens(); + } + + render () { + console.log(this.props); + return ( + + ); + } +} + +const mapStateToProps = (state) => { + const { list } = state.accounts; + const { isLoading, tokens, tokenCount } = state.tokens; + + const { isOwner } = state.status.contract; + + return { isLoading, tokens, tokenCount, isOwner, accounts: list }; +}; + +const mapDispatchToProps = (dispatch) => { + return { + onLoadTokens: () => { + dispatch(loadTokens()); + }, + + handleMetaLookup: (index, query) => { + dispatch(queryTokenMeta(index, query)); + }, + + handleUnregister: (index) => { + dispatch(unregisterToken(index)); + }, + + handleAddMeta: (index, key, value) => { + dispatch(addTokenMeta(index, key, value)); + } + }; +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(TokensContainer); diff --git a/js/src/dapps/tokenreg/Tokens/index.js b/js/src/dapps/tokenreg/Tokens/index.js new file mode 100644 index 0000000000..87fbc567ef --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './container'; diff --git a/js/src/dapps/tokenreg/Tokens/reducer.js b/js/src/dapps/tokenreg/Tokens/reducer.js new file mode 100644 index 0000000000..21952105c4 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/reducer.js @@ -0,0 +1,114 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { + SET_TOKENS_LOADING, + SET_TOKEN_COUNT, + SET_TOKEN_DATA, + SET_TOKEN_META, + SET_TOKEN_LOADING, + SET_TOKEN_META_LOADING, + SET_TOKEN_PENDING, + DELETE_TOKEN +} from './actions'; + +const initialState = { + isLoading: true, + tokens: [], + tokenCount: 0 +}; + +export default (state = initialState, action) => { + switch (action.type) { + case SET_TOKENS_LOADING: + return { ...state, isLoading: action.isLoading }; + + case SET_TOKEN_COUNT: + return { ...state, tokenCount: action.tokenCount }; + + case SET_TOKEN_DATA: { + const index = action.index; + const tokens = [].concat(state.tokens); + + tokens[index] = { + ...tokens[index], + ...action.tokenData + }; + + return { ...state, tokens: tokens }; + } + + case SET_TOKEN_META: { + const index = action.index; + const tokens = [].concat(state.tokens); + + tokens[index] = { + ...tokens[index], + meta: action.meta + }; + + return { ...state, tokens: tokens }; + } + + case SET_TOKEN_LOADING: { + const index = action.index; + const tokens = [].concat(state.tokens); + + tokens[index] = { + ...tokens[index], + isLoading: action.isLoading + }; + + return { ...state, tokens: tokens }; + } + + case SET_TOKEN_META_LOADING: { + const index = action.index; + const tokens = [].concat(state.tokens); + + tokens[index] = { + ...tokens[index], + isMetaLoading: action.isMetaLoading + }; + + return { ...state, tokens: tokens }; + } + + case SET_TOKEN_PENDING: { + const index = action.index; + const tokens = [].concat(state.tokens); + + tokens[index] = { + ...tokens[index], + isPending: action.isPending + }; + + return { ...state, tokens: tokens }; + } + + case DELETE_TOKEN: { + const index = action.index; + const tokens = [].concat(state.tokens); + + delete tokens[index]; + + return { ...state, tokens: tokens }; + } + + default: + return state; + } +}; diff --git a/js/src/dapps/tokenreg/Tokens/tokens.css b/js/src/dapps/tokenreg/Tokens/tokens.css new file mode 100644 index 0000000000..20aaecef4e --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/tokens.css @@ -0,0 +1,24 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.tokens { + width: 90%; + padding-top: 2rem; + display: flex; + flex-wrap: wrap; + justify-content: space-around; +} diff --git a/js/src/dapps/tokenreg/Tokens/tokens.js b/js/src/dapps/tokenreg/Tokens/tokens.js new file mode 100644 index 0000000000..57c2a2a913 --- /dev/null +++ b/js/src/dapps/tokenreg/Tokens/tokens.js @@ -0,0 +1,68 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import Token from './Token'; +import Loading from '../Loading'; + +import styles from './tokens.css'; + +export default class Tokens extends Component { + static propTypes = { + handleAddMeta: PropTypes.func.isRequired, + handleUnregister: PropTypes.func.isRequired, + handleMetaLookup: PropTypes.func.isRequired, + isOwner: PropTypes.bool.isRequired, + isLoading: PropTypes.bool.isRequired, + tokens: PropTypes.array, + accounts: PropTypes.array + }; + + render () { + const { isLoading, tokens } = this.props; + const loading = isLoading ? () : null; + + return ( +
    + { this.renderTokens(tokens) } + { loading } +
    + ); + } + + renderTokens (tokens) { + const { accounts } = this.props; + + return tokens.map((token, index) => { + if (!token || !token.tla) { + return null; + } + + const isTokenOwner = !!accounts.find((account) => account.address === token.owner); + + return ( + + ); + }); + } +} diff --git a/js/src/dapps/tokenreg/constants.js b/js/src/dapps/tokenreg/constants.js new file mode 100644 index 0000000000..e9e7bebcab --- /dev/null +++ b/js/src/dapps/tokenreg/constants.js @@ -0,0 +1,30 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { HEX_TYPE, ADDRESS_TYPE } from './Inputs/validation'; + +export const metaDataKeys = [ + { + label: 'Image', + value: 'IMG', + validation: HEX_TYPE + }, + { + label: 'Address', + value: 'A', + validation: ADDRESS_TYPE + } +]; diff --git a/js/src/dapps/tokenreg/parity.js b/js/src/dapps/tokenreg/parity.js new file mode 100644 index 0000000000..f6d59f44d5 --- /dev/null +++ b/js/src/dapps/tokenreg/parity.js @@ -0,0 +1,21 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +const { api } = window.parity; + +export { + api +}; diff --git a/js/src/dapps/tokenreg/reducers.js b/js/src/dapps/tokenreg/reducers.js new file mode 100644 index 0000000000..cf533432fd --- /dev/null +++ b/js/src/dapps/tokenreg/reducers.js @@ -0,0 +1,28 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { combineReducers } from 'redux'; + +import status from './Status/reducer'; +import tokens from './Tokens/reducer'; +import actions from './Actions/reducer'; +import accounts from './Accounts/reducer'; + +const rootReducer = combineReducers({ + status, tokens, actions, accounts +}); + +export default rootReducer; diff --git a/js/src/dapps/tokenreg/store.js b/js/src/dapps/tokenreg/store.js new file mode 100644 index 0000000000..5fb7d4b6a4 --- /dev/null +++ b/js/src/dapps/tokenreg/store.js @@ -0,0 +1,22 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { createStore, applyMiddleware } from 'redux'; +import thunk from 'redux-thunk'; + +import reducer from './reducers'; + +export default createStore(reducer, applyMiddleware(thunk)); diff --git a/js/src/dapps/tokenreg/utils.js b/js/src/dapps/tokenreg/utils.js new file mode 100644 index 0000000000..0f4e192f08 --- /dev/null +++ b/js/src/dapps/tokenreg/utils.js @@ -0,0 +1,37 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { api } from './parity'; + +import { eip20 as eip20Abi } from '../../contracts/abi'; + +export const getTokenTotalSupply = (tokenAddress) => { + return api + .eth + .getCode(tokenAddress) + .then(code => { + if (!code || /^(0x)?0?$/.test(code)) { + return null; + } + + const contract = api.newContract(eip20Abi, tokenAddress); + + return contract + .instance + .totalSupply + .call({}, []); + }); +}; diff --git a/js/src/environment/empty.js b/js/src/environment/empty.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/js/src/environment/index.js b/js/src/environment/index.js new file mode 100644 index 0000000000..d8e81f343f --- /dev/null +++ b/js/src/environment/index.js @@ -0,0 +1,20 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +// import './integration-tests'; +// import './perf-debug'; + +import './tests'; diff --git a/js/src/environment/integration-tests/fake-backend.js b/js/src/environment/integration-tests/fake-backend.js new file mode 100644 index 0000000000..16fcae3adc --- /dev/null +++ b/js/src/environment/integration-tests/fake-backend.js @@ -0,0 +1,84 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import sinon from 'sinon/pkg/sinon'; +import mockedResponses from '../../../test/mocked-responses.json'; + +class FakeRpcServer { + constructor () { + this.xhr = null; + this.middlewares = []; + } + + start () { + this.xhr = sinon.useFakeXMLHttpRequest(); + this.xhr.onCreate = this.handleRequest; + return () => this.xhr.restore(); + } + + simpleRpc (rpcMethod, result) { + this.rpc(rpcMethod, req => result); + } + + rpc (rpcMethod, middleware) { + this.middlewares.unshift({ + rpcMethod, middleware + }); + } + + handleRequest = req => { + setTimeout(() => { + req.body = JSON.parse(req.requestBody); + const middlewaresForMethod = this.middlewares + .filter(m => m.rpcMethod === req.body.method); + + const response = middlewaresForMethod + .map(m => m.middleware) + .reduce((replied, middleware) => { + if (replied) { + return replied; + } + + return middleware(req); + }, false); + + if (!response) { + return req.respond(405, { + 'Content-Type': 'application/json' + }, JSON.stringify({ + jsonrpc: '2.0', + id: req.body.id, + result: null + })); + } + + return req.respond(200, { + 'Content-Type': 'application/json' + }, JSON.stringify({ + jsonrpc: '2.0', + id: req.body.id, + result: response + })); + }); + } +} + +const fakeRpc = new FakeRpcServer(); +fakeRpc.start(); +mockedResponses.rpc.forEach(method => fakeRpc.simpleRpc(method.name, method.response)); + +// export fakeRpc to mock stuff in tests +window.fakeRpc = fakeRpc; diff --git a/js/src/environment/integration-tests/index.js b/js/src/environment/integration-tests/index.js new file mode 100644 index 0000000000..d62acaa324 --- /dev/null +++ b/js/src/environment/integration-tests/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import './fake-backend'; diff --git a/js/src/environment/perf-debug/index.js b/js/src/environment/perf-debug/index.js new file mode 100644 index 0000000000..29f84f50fb --- /dev/null +++ b/js/src/environment/perf-debug/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import './why-update'; diff --git a/js/src/environment/perf-debug/why-update.js b/js/src/environment/perf-debug/why-update.js new file mode 100644 index 0000000000..35eef2edc3 --- /dev/null +++ b/js/src/environment/perf-debug/why-update.js @@ -0,0 +1,20 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React from 'react'; +import { whyDidYouUpdate } from 'why-did-you-update'; + +whyDidYouUpdate(React); diff --git a/js/src/environment/tests/index.js b/js/src/environment/tests/index.js new file mode 100644 index 0000000000..3e6241fb11 --- /dev/null +++ b/js/src/environment/tests/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import './test-utils'; diff --git a/js/src/environment/tests/test-utils.js b/js/src/environment/tests/test-utils.js new file mode 100644 index 0000000000..785a6f3ad8 --- /dev/null +++ b/js/src/environment/tests/test-utils.js @@ -0,0 +1,46 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Component } from 'react'; + +const isProd = process.env.NODE_ENV === 'production'; + +// Component utils for integration tests hooks. +const TEST_HOOK = 'data-test'; +Component.prototype._test = isProd ? noop : testHook; +Component.prototype._testInherit = isProd ? noop : testHookInherit; + +function noop (name) {} + +function testHookInherit (name) { + let hook = this.props[TEST_HOOK]; + if (name) { + hook += `-${name}`; + } + return { + [TEST_HOOK]: hook + }; +} + +function testHook (name) { + let hook = this.constructor.name; + if (name) { + hook += `-${name}`; + } + return { + [TEST_HOOK]: hook + }; +} diff --git a/js/src/error_pages.css b/js/src/error_pages.css new file mode 100644 index 0000000000..0b098d29ad --- /dev/null +++ b/js/src/error_pages.css @@ -0,0 +1,113 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +@font-face { + font-family: "Roboto"; + src: url('~roboto-font/fonts/Roboto/roboto-light-webfont.eot'); + src: url('~roboto-font/fonts/Roboto/roboto-light-webfont.eot?#iefix') format('embedded-opentype'), url('~roboto-font/fonts/Roboto/roboto-light-webfont.woff') format('woff'), url('~roboto-font/fonts/Roboto/roboto-light-webfont.ttf') format('truetype'); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: 'Roboto Mono'; + src: url('~roboto-mono-webfont/fonts/RobotoMono-Light.ttf') format('truetype'); + font-style: normal; + font-weight: 300; + text-rendering: optimizeLegibility; +} + +:root, :root body { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + background: rgb(95, 95, 95); + color: rgba(255, 255, 255, 0.75); + font-size: 16px; + font-family: 'Roboto', sans-serif; + font-weight: 300; +} + +:root a, :root a:visited { + text-decoration: none; + cursor: pointer; + color: rgb(0, 151, 167); /* #f80 */ +} + +:root a:hover { + color: rgb(0, 174, 193); +} + +h1,h2,h3,h4,h5,h6 { + font-weight: 300; + text-transform: uppercase; + text-decoration: none; +} + +h1 { + font-size: 24px; + line-height: 36px; + color: rgb(0, 151, 167); +} + +h2 { + font-size: 20px; + line-height: 34px; +} + +code,kbd,pre,samp { + font-family: 'Roboto Mono', monospace; +} + +.parity-navbar { + background: rgb(65, 65, 65); + height: 72px; + padding: 0 1rem; + display: flex; + justify-content: space-between; +} + +.parity-status { + clear: both; + padding: 1rem; + margin: 1rem 0; + text-align: right; + opacity: 0.75; +} + +.parity-box { + margin: 1rem; + padding: 1rem; + background-color: rgb(48, 48, 48); + box-sizing: border-box; + box-shadow: rgba(0, 0, 0, 0.117647) 0px 1px 6px, rgba(0, 0, 0, 0.117647) 0px 1px 4px; + border-radius: 2px; + z-index: 1; + color: #aaa; +} + +.parity-box h1, +.parity-box h2, +.parity-box h3, +.parity-box h4, +.parity-box h5, +.parity-box h6 { + margin: 0; +} diff --git a/js/src/images/dapps/blocks-350.png b/js/src/images/dapps/blocks-350.png new file mode 100644 index 0000000000000000000000000000000000000000..16e0c213d5b341e729454b9951f8a641938b4c3a GIT binary patch literal 1073157 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

    v`*zhInv|W&f#- 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ℑ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

    |D?-<&; zMzwSeBujCuF7+7#X4p4%0A@4Qb#T#W#j3NuNsx;z?TG-I2rqtcl4D6!HPs!MqQ~MM zlvd4gjEwIs5IG+^tbD)r+CJ!c*>dCZGse+VlN%R@a`U~BCAe=X?|#!uS-|I|&62GqhR0VK*XD!pSBB^&f{-DF?tYIIB+RWL^#hqFX|OJ)nO_I{2E7#EmPojsCBmb{5=_RH=5B zLg{EP^)S|{{A(gg=os=hcuybKW)2wsT)UokdE8P(l*O~Oja9ASz?7M+AF@R?xM1eBjo0J>uGR-avIM z+bKf}FKYGLv5iIs8TX7h=D9onOg>V}URylc_deWnHr~f?px}F)Wp4prN zfAr)pokU|T@~@{dxvuU{C0G+mr?C9yi;m1;997-Qp0x2fMlR6ik-7cVht}!tkZfL6 z?;)Ljh|N!^Y2|G|@b_m;`OyOOnOr2ZG>8S4@<1Dn6Hn?#0^*2Vh^Y4&dX+~`qAB%5 znRqow5=uZ?d;TIeT|wm)$@TedBDbMqSriJT9E;>5OnGL5H7Ax6&vdOKqkQQfd&Emt zqXhJ9Nk%z4ow!wg(((8RI<6TQA5Oy(@GFx0(UFSd>Q$A6Q}6f)R`ExO6j^l)z1+JB z<#?Q++)UKKumag6`@^f|GIKo-SY(t?(O?N2zez!A&&&w=$HCf)Z&dvq3gEaRm;Cu+9OW+_bl`p zNz-J+lBZvbwoKxz<)45q;dC-?CeZ#0qnITy@juXtzRw}XlE$)-<#>V6f7XvjGinQW zN1q$N2}=cN#^0%wB;aP4529>3$8ZEUu&HG0%>1t{z;DU|F$6-Tho*&7-`4pNpRy2d@vCQd!H z%8C^`?{g%xcEXmw>I@y+XJ~)U?<9I9N#GMfl3Oql;K?6CG^juWxE=t#>cJzgT_HWy z1yl>DaO|{vVNvI2iBJK&n=40siRmJq;Y7p`6IAm2IbCC0^PY7;f!J7_qwA;k1z300 zf0cSuW^|X6C;{U#Rn;5U@~J?6!KTMEbV8%%2FPgN-lN6VcY6i^!tm+K!0%-hrYD22 z1*2hd!ue!8{A9Yi2RB$br7E@c9qU7gUcVThz=D{b>-TNPt;7xWgi;B`E+Qc3Un%qykIHL=aHmjJIK?rPNMZ5O{8UYijvDhejm10&^S?23E|1j3CiY zb{*w(1`&C@`e|K?S*xTf9zc&)#AwBsZD^Js$SHlY-8%ER>1FS?%uSyx;+X&zeNFC5 zE%n{xR^r2Hd^YrKIzJ)FrN*ro-JdWoXfO$*olZI-2#r!f$Vf`1w5EBDOCuy{$73bI zfUx~3xuQ38g=^+cO694|X6bD3p&1WCz7+jKbdPB;BZ4B}&Sv7dTd{WgXssG=2O{_R6V*8UHXL(~Xa%1moi?%VXetJF72F4Nu139YGXHC3hWlN9@8_q$ z@Sv(k-{mF2sWq=?Pzp^48NWU)-f!(bQ<`{p z>QyW(8M8#Cr4U17e11USBZkO5Az8AoIrBtDg#b%5jthy*>gpezOb79Q)ow`&{cP5Q z@o)m!1FS=O;!y)UM~4!z$|RYy)iXcdbO2*@XzC3fRV8wx&)yk+gEz6y=Y-Wg1HYI} zV4UkeO%zML>HaN=V;XQBP%T`}$K%BNli$6f$K|TU@q_34SnMZUkNduc>QK->k?a%a zu;y+!V+Pt~IJ7-k*jt0`!4GTn0(3COnY)?Q$$waBh2?4JtQ?6BC;t8<@Ef7sY$0q@ zH-&LS+JU;M@JO!Mk5AIW-%ZDGcr0?vlA_DSBmTGsI+_H|_&z?J_k0k;eHZmsG2!Fu zy@N1Osc-C2Y@9RCpUZFAHmhG4#>6m7QBj?CEU815erFQeWw4NuE)`2cH4jbeRi=p* z!CGk;oTiBLza9Nchq7{;JT>DH_}tp`7-^-mq)m~SZ-OLcK?>jh`=%_9S4wI=fbe4| zmiy}%wp4@B@#qrq$<99c@8nGkp5Rq;yQKW zBAx_qjU}a&mw46BXS_F;%z$;(tRd&EcT5rfgCZG+s>Un*r3bt^5n=~h&M`V{S?I|q z|6q1^31pzq1X;{c)@kZ~MgbqnmV$Mo^W$9|57%XQENMf#f3_Tgwh$(XHloxcBm;w} zByF}v+*Y7<2Cv6G+Kcm-@omE0(ezvmd#krsX4!%;Jb=!~vd@^${TD?84jOdqR6rks z5Ee_vs?kE`BJwelxh=>WRZ)dmpmPbB+w%x+P|H5bI>G>JK9=l}V_aRV zUt6f;{N(liJR5>CkDb%+>$CK-%L$NhGYgsX_}UJE8^>7$#dHN)kESbU74~S zY{`_`lp(?vBPe0}L255|A}H4GG+Jvole#5#qIao$C)or!_qs#$09smFI$&^pMH#jX zm?fR~pQ>P5@D;jCKNcAI#~ThlhxH1m_BPs_f{dhE){9qdfrRIW@3xkx4-$RWS_h^? zkZdz|GO$XVTv zp0L8ZwhuZ?UJjQGm@bNxK2`=V;xUV>G0RIppQw)bVz>Us0;x}5gaVNyE?mo*RlE$F zF$I-OPsJkYl`mYWQd&Q6#6m#I-#7k>DH_hIY&6j34TQ`Qng$4-vv4 z@NeST^Fy2wi-@%BMi@w9cPx$!XQt$5icG5e7QRbgRP_Gz?D+I|i+*ZtA8~|qD^ z;e-+#nyNw<$hBKTzuumYiQMZ(gYKcL&R0F(D^B0UM4QMakyI8v_k`+fdHt^;M)!-r zCryE_>D7lufVW>n_*=;y-Yzf6@o2ZIEdEY786ism>Uq(RQmifay?h%1sQWC13tQ69Bxe*i3qA2iz zMKVjh1hiZHOjz&hO%Fx2 zw#b0Li>D|L5`2vi9mA>3|H|gr(iLI_8eJ=ZL%tAob4#=PM{4cenoX_4*QZaYGWQ<| zXmqU@8fAhTQl3Z~=ZXk4@lpHQ39mwwD}?Xo)Uh&e-d96d?yo0Kd{5^p@0o%xPOl%t z-M7#|iuwoc-L&V8GAb&c=eo_${nfO^PE9UHjnO&~H!K=0ESFznCKWG6LHDpx^tuTa2Z6s55KHm#@rf+*A?BYn;YEW2iY8Yt zD1jP1^RZ&9-y5cgr{*qc)nMiF>;hOZUjUJ#sK1QLDJ(UTKyt>@nZlK}Z| z5~G%87}dl)GYK<#a3ehpd7b+H3jtTTvL4u(7o>f7Wvl z$hj@-{rX!!*^vki(IrMXK?Pu6t9S~;GjKj@)p;&##!QX;sC-x6r=DRuy zx;a*g-Ofv@XeS)>V7zV^`dKyR{YY3oVrWqfICvK67EVL2(uqEMv0r4*?0gu8anLx# zd`K!OQZ^PRYmcM-0vhuj-ztSF;wW>yv+iPZO6GB7Z02qI%O5Zp1U}2~Mlr~9ZgCJp zfj~GtB4RtAyM3ySMtnc+XIa7qhUP_JfSeaLJrGd-odZ&bsTcf%~Nh}dK^dR^tO*;v`hhSPYK+QtHomENZF$rq)wxjA-pipT+wd*YAd4h|n)nQ7{tzH%g^a zUcjBv!XKIx-phD0e1t*y3BG-@&H({LC8K2+HF(EEweC8V=@?W7rO7t6sS;&n>mCL+Z!a%$9Gcn_!pRvca%AuA=y2 zVM^njY%slSX+UnIvp14Kdt*bHF0?Z;1iIFX4NfD{X7tFA0g?l_Y$R=#z@}0CrZ5%( z+y$nM4MGGTrSi{y?dX$yQx6CKRumGs>DN=1vnd+S)|HGizgsi`Ix8fE+Z0 zkZNt>2k=%NS?V3(ETSpcS0r`9k3E}?KDY!^cKLH-Kf7hy(9bFHP$H3XNfC9bwcbNZ z$yCKnae_P^D*=FSb6(cH4~mZiW0?$}pmQ6!w1_$U5n+#1gP)Y!iX_f;QPHU5=@b;L z4W(7H_ToU?#RtDD;;YyNxk7dB!TevH#@(t8Uhf~Fcadj@m0RH42BOEI{k(5X@1XJ^ znja3I8>H{Mf-gS4ci*@72iItVYb+xXfr8?@;LYj8%=NP0T?@eJ4`oo|vF80_gKk{$ zE|vV{g1@nU_7b^WxPL+5^iE)RKlP&R1gVAGI#z?+&p!()lYv=NN-kcvq=~-L=^v%M zJ}Y`j+Pd^2s`3fe(bFujg(%6w(^cS((+g~@7$@*M`lk`F@=Td&Gk9Uj&`s!4 zcYm2y7_~{e6jA%v-iLJfj((KIY;)C9vq68wvbUX!7**J7^g5d|?a;)udq($e2}(mmm-EEx|laZZb{HB3EO` zo;IN_0#r`p28UbjF)yE|GaV+PqleUgAP*sHFK5_bgtG-YY2R1%%Kqtqe4S$XwU%(V9Rt^ ztd|?LCSfI33h4ZNbsP7G!~;{>!pK8mGWCBN2mIa}zhd14-BY*Uy0#BHYJI=k&;xA! zB=d27p5hDz3*=+1I^}cHOm?X5gU4yitIe(vNxV#3cqAMwC_Olka2P$!e0bn58vu#< zI|A&U%q`A+zhqVfW?2fFud0b^S^gcr~(4ElpFQIxQ;Nmat6I)|H@E(DgG zzxT(IRYt;LIk*BN0|ADo2(-G!4?f-q5CNQMiLbTF7g&wGuPf7@upOx$GGy< z?1-Yte?+zU*#)}!Jz#dnW$6h98yFO7sf2YJ@{MX*htmBY08T-%zN>YVsFUwoN>4K# zR@l5G@_g!19m<$=P~qD;k%$>5L-I+1)!<7Xp?r+cc+z5xT4_^XDGt)9asb^hV2l-t)Y z6V+m#eD)dQsLq3p2V_~s>govwyM6pXQmaQqQAn1L2_qjth}N1U$;iVR50a8Q`-k*% zjrA2d3S|Y#R(MjOixN4*9SCFHgt@ASq6lNeLsggkGL~aB8FTUCMasM&8z+>t2BX76 z7FL!S_6LYYgd=ByZ2$lu07*naRNrZk4>j$jMZz#6+6t<5p%tcYm91P`Au@^@*e6LPcq>Lwr1c67hQwI!_$%HIT=yW=S%_h4K zws`Nuk9g~Y_ZTEjjTg07SPI&VM^l1G@#teu&}=r@>28t~6WWbsTAe1PSGiC?N)VbX zPe^SBm3`QVk`E8vs+xrX8bOk#c*e&IT%nhx6MQ^sK}05IJU$y>q))C4H+mEHe)2j$ zf8#R${Ga~;&p-3DQ-1-y(U8N*A(Dzb8POYzX>}Hed_$6DG_#Ue`BccAd3zr&&I;hTjUYqYPh22E8Hv`U1~<`vt6LsLFzA5iv+7BsIlz-+Gy5yT#Vs zyY#nqiT#it{lEX7G)s8usi#<7T|L?}EFQv?cv>Ct+}tF(as$O$4c{23X623mYmCFE z%!*+biWg#y;loQG@|XYlulVr8OH8Lz$N7q5#vwGVU|mG43Xeq*kWI!M9!|K|FZsCN zdE=1Jw*D*Md+{v4{TnZ_sQd1DJGo@Fw&|+LW_J^I)m@v(Ja?2A5DgcZbbc;`7V0Q@cAGzeHknMV4h8 z931fJ{SjqVIhC;2L`lyLhm3O=DCMIoFxr9=2vZ$>5A(ss+{#~725nNbDKWMJ3{_qb zdLiw0o2AYY2s>loE6{NAJMstAQ3&zP?zagU6qF4wU1>d451vl^k>r==Kg6Cld-|kwu9ZCqx3Iu~^@u zv9y2|lGR5q@aEg^G8iYb01JZ<3Txf>VdQ*&7c38#RpFe0krz-}ji?0LRG6^F zI8baIjJWb(m&-f5d^Q}gKTT+zJWGQ@FLDH9`qw zps?vf_2^v0F`Z7?+1WvQmLQxd(skhiY$Kmq_IK z|J00kS}`1s_|+SK%k5jY=c{X~1M9cq#3UN4;J{dG7BB z{D;i^x$|N^*b_n=F%svlzvH#}7ggt96gfyK8S4Tsuke*(skI2gkPIhO!cuRv(3K%6 zGv5B}4mWppc=?$p`Ti>}a^cJ=vT4ol$fT8IKA)Un1~GrzOTzD9_S}Ba$RJdQNL9kiubHju^i3>zn;E@yZuNmFBAM zJkKeLf}$uHjYiG^fO8}C`+b^`N26K8SMEMv9k-pn6lTMl1ztmyAL>ZYL#U#<)aTTv2phf^)TSVnX{}d zE>PuD_IGyiq)%B^2<2QG*)&7R5QSno%IJ2xw3?mSKrg4WxImJnZ0u~YbaI8o6HDyw z?@&%sYGF*H-lo&(P;a_D=HA`APEZs^H0urghI5gOrcpatY&hlGwt-Y#ObT@#;LK2%GkN^o%q$rBC7E2n5 zl182x%W^noyv&8~>_5QaJ4e_Nb1`AZI2_?|3};5-h^t5u1PPKLHUelgmfqLu+N*NU z-*y&XoUH8XMgubyQPEx9XjEn9$#cH*eee6cfAWX?gFpB^9)9o?LI_5~F;*%T<_}Yi zE57)fzs=LnJjdU^@FTwYt?zT~<`y~%L7FHzMMm9T2L~FT2WowBkG=35%IQX^cjM9w5BZ67#dl{IK`E{bNhg@cFJK= zN)anbo>d@kH*|y$Ask4_+o|dw)9|{}YT!Sl5UfmwHw7X}C*N9zd97B&QXy2tAn%Y3 zx2TGYq}gM4?*g6vn0_&2E&*$OC>mXT%2@Ey;(UduS-g>8d`NXyF|iH_yj59(&>xvF zKW$`rj}$Jbg+#c3NGCt?@Vw)5(%iFlQmpT9gn{xyRD#d~WN5Hi>4G)VhT?iA4^nq0 zAnWY1Ga67^SfsVM%*@<8u~1}1K5e#15A}MTaW>-C+8S@Y_-)p&-6ZSm(NLO5I%J}W z>viUq7TC_VX*4xSI*%zWCyy^vjJnLVQu1MpRw+_S+O2t(mgmsQVSUDM*hi{>Pl)1} zIBk$5!w@V`6(l-vMhojcGGQJ-#}N*Jok;ujMDekY8<0Xy8l#p*qk*v{*REaT8{hZ_ zFZ}rL`HQdrLry((lDdqh)`0z~r}vV$S?A)$Dz9I<$}2Z-a&45;(Fu7}qpCMKIw&cn zXW&Z4IAk-To}|P`oUzO_XYiF_oDIUoH&S>VE{%gKr{&{diJlY=`-jZFVqEIv4yE+L zfkCh`8N3hEa_7xNxpmtrtCYkW8xlBWM6cJQ)9J9du*C6W$CzohsMTr{)eyvS!quyn z$@84&o_mhLC_`&Gv5kQD`%UKn*`G~Y4EDMVb~@a+c$v3<`5HTG8+_);r%A_#u2h(D zi5>Qds{|<`x>xq-4@MkHB%2HnRYa8w`o##@PAF=Y-tHJvDtbFZ_PTrYvy7^!fXN`i z8I-OQ)5JN0z>~%rF;TF1FGyud71a?~(1wZ(TS=Tsakj>-P0bHiU*qjJKj7RQ$LE33E zq&P;QF;$`ho-r=;QU*yQR#?ICrsj6}K=+VH{+1|!f z1&I<=rog(2;c$o|B+8~~j1vxL4W%uKR7{d2WGX1HjdyqxylR1gYyt%qw0?)3a>_@P z5~_--s8CS|;1N+o636%nf2y*Ev#-C!JMX;1OE0~|+Qu5ST8*TZlIKB18XLz_T;r68 znIBokdwZ;HY;tKhq^~7cqL};UPw+=y`%RLgGc*q^^8ft1f6dK{YcyN)Jo?~a&YK&I zdKM`J&00MKqF6&xYm!ZBs>(ThQGy`^>ZzErDoKqYZq*ptioPjH)0k{r@!g+a=lzR0 z|KvAnoH%iU+1Xh@PWDDMJ%f@Y!MXA_>PH3zR-WfLk#Xe65q5WW825s8F^Lgef-X3%4$SDpTanxIf5V|(0@hU1) zl0-35scBQAR;x`@#I@F_NKeidJHfx00~bySt|Ce_@4s`F@BZ~SdHbcG6Zgj4SDR%n zO?b}LND@V?1E!?3hJKY(C_`2b>3fIu0uw6|9l{EPhjLV4%G>G|=N(>r7*Au%kSdI1 z+7!`RPn$z34VMfxaZ22{d6SzrZ*u0$8BU%&$?t#ZE1WoSf_A%o=kR;-eWEC$oTxwZ zJjWCTC86P_wPrjX6U)HS^C}8_=dxsH+@;tn=v2!nl_Hd%B*=#6QYnd!HB}z0a-OjF zRW>wtgSv=-&zRJGQ7i)PAc-ca-7&V3BuT_fbCEP{QWP1=JEV-LDvz}l#x7g+S&$BJn;l4PMnxv6LQAmF|}Il4*Ri={Dcb` z?Dzry;jm>+9P7Z7a}FsgUVHToE}cC`f2%_zV-7E_aQN79<`))NQ;Jw=GVd95_SjtC zU~hYevdpK=ZEZbsNsWdGoZ7jghiD!>f@;+n?-aBeHSjL%%T5qQYSK`y@JgZZVVE)D zn1=e?AqCWBg!Y2*D5o}2m=5z`Gq2TJRMIo3N^G}afW;U|DRxQPO+J76Q+OdU-qEht z$>S8SBN81k7-vY`;E+$ay1mD%>$iA$eT_?<5m^-x$p*8{8N}X@7*DBSsN7@^&?FXO zuNZlVCu(tPC*frZN>^d>jGDilGCv-V$%}j%ob=Em4jEzV&VX{7?RvPt+4;=h|HS;5{x}IEOKYXC8Zu znVFesD9i02j_^7ZVL5 zW@k8z!elw`oq3aU=Pq&U#yZk#l#EDKf|U;I9mWZ)4~Q2zv3r9fjv}lzRQ7gg)WPtm z+vqxnGyA;A2wORXirCxhAzg%(Re0V-5DzWP3y$B{rYgqtwmr%_x@L%RUrm9kAD|H_#)B^XZihJ0xClnW98(rZ!Z5wE;r!JirWU1i`y-T$nQhIoJM1yeGeo2* z%90N*UgD_}53sVmOi%8z&~9^Rc?E~%#`-Px`aO;<9O3AR``GICcHl*!0r{4{vnp~fuCPX8G-~3 zE)FFlKq7^v-ncEPmP#=i1x8q_)k69R?~92f7RsUu65q*Y-Dosu&b8^id70XJ$srR{ zIE~Q~95iG^SByw?#k^3o;+WBR4C4W^)_~a4m71cekj|j;f`&27)@xJ6kavdM87d7* zOH!qflMT`+f%cYJJj1#mR+4sZS*saD+#oU`h-qITC#1hUt@j`%e8f<&dq9R@Bfxos z^9C>L6GoIEjWmJ^FT;gLN=fQ0$OMs$IQ`%P|M~CzIZKQ4{P6of%qnbZf=(RzLQj@Le*;2nss(IR_Sf7@%Ar&##^tx!gy~7yrwEaM+wdL0v5q& zG-7RamE0EW*0&fA$L#Lxp^RkX#u~~h%3;p(;Tejoq}$tKXXhr3dX1S@f|8c1$ncab z&M%N8H5OV8(l{nB{3H$7PgtqkGjI#Qn-VVs5>P@+Ek251nXW|Ok}4q?4u^Q}X*JrI zTyWvN>--&eGmp{j0@A0a_&Mh!hl3U#^{`%TB?_a*cwVe(wts~lVxH2cM zO4{1cPwJB?OiYtWQ`3YHtMDUKL}^4sP=3ou2j%prq@g0bV4_A147Rc?Xx5_;4&}{+ zjBsy;YB*dEU?oriVpWB8m`sW>5y^0o@&!a5iC}lI&F%-=9GO4P($W%3OH0(#U~@fv z`r(jzH_EAmN5_)9ERbe0k*rEw1+uVQJ^v=VSFUp7%5_vaM>AStTp1!ai>bGW_6${J zNK}fH(ZsIhL3v~(X^WKIL61gMLqrLQNQqp897Ea57_)P*S3`2MpcDA-490T=_r$md9Rtli&IBXL;tSM=)8B%kRF$ z$p;_enNL5>nfKo3_1E9z#NktTpAg40xD1Fgq)zGYbclt;*^<6*^46t{SI=Byr%<35 z(cYu6_`-v%g#i{5c9ak}U!l@4{1{i+gc&S|ydrlVt0#?mVM&Anttq|WlaD^aX1~J& zN0ulX4YsllbFCJmoes;bSvpr%Svs^rWF-spOI*3Nj!a^jiwnU5wl<>M3D}W+bxWf) ziz*W~uk4W=8j~amXvxNQNFWtXV610mW(KdD#IYleRNzY50u@P64ZMK!msWZ0jW_t| zFJ7jfk2!YoR9L&tkwh`&V29KTW|}Gas7J56!J*?TC>`U3Bu(l#vlA{nG8C8+MeH?u z{V^(ysGOZxlmizsj$^F%jK)Jm6yHt(^`RkYCKeB&1=_2i+>FD%tP4*h!tkz?0+~F( zt7mq2^Sy8Jjqm+}!$;?l!ho>M&MZ;p8JTqC2%_9mB{fD_Ny|r!rKMH$kd0Y(ZNyq3 zxX{VD)-jA(AWLV7yhk__Ec8O)2n7N@A}c*bSrJ9yFi}91#M6RNX${h#R7@p6n}n8E z924_YR|m{I)TFn%0lQ<0jUBvk42L~Tp3xABa;Hl*EGZ&G)UFZN6KYB^$}G|-MunxQ zGNgi9lAz0qo98dHdGRvLHhAu9U#8|gUN}Uoao$sJ&JhUm0ynBClqL}pi3L-DbX0D{ zJ0G0krJw(lb3ePlm914&yT;7&9Ja_Qh8a!?)LfH4-mZw!8he@J+OXnRSJqf9`c&u+#2gKE(&U{i6aMZkpu-tVJ$+)&`g&N^2#E7L1p_0uP<0g@+lUM!VG>B?cga8j~EwLyt*)Au<0I|ADcl$im;!$P}KZvU@Q~ElndU&tY zQ&d%ujmM<5I&q_p&r5`ipv;K9XEd?;`8X!C6;3N0p7U?N%FEyRJ1+j{=gjpBet&kJ z6Q@s6*BWmtlvkLnz~lvGkuxlFhGoIfRa6SnXo1{0hE>JRsH9Vk=v0=mvlPx@5sw58n!ZM_FXV3v6Pg<9^RBxs>YU4 z2=buH^}(_&A+W)mhtd#F8%crp7ONOk7?vU-7L$Eb$KWL13f_F}EUVYoNYj{w*>-4% z&d(sVn6Rd6#2UtViI)zoB`&i#XUK~&MV?VlVv4Ln#2Q_Th#C!yv5d-`S6}-D>$lGH z!2QRWompbGRU^wrD4}S!XC|Tsi4YoDX&Utw-Tn@7Gp1A(wOT^9vBvfD7r1fu8tYrz z6sDryUgV)qeTwG%JVppMi<~MI^gBE3t**nUz>G4=?H#;;sMX}*C}pfHZl=M^$>S`Y zxDS=2^txU4Zme^v23925R;FolpvRymb26QS4FtA>_6W^2t?wkTuGEl zP#&S7owTR*TvZu{SxK&9##*z!H{y`cJp15jR(E!(gyX?e$Eeq0deQ(X+BC3EvgQrn zTI+N6!X++lY~pGyqWTeBZZJg|tko(^E+ZiVa>#|v!$`2gW2=hHOocrNAJ$MRBk*9H z2?13TrB6Lc5zaHyY*A%7ySqc;IA%B=GAzf`YJS>0G{%tSUF!8F!@Oi@J4AB}WZe;K zoes^#722XpGqS|7 zVc;X2@wAf&mkqh_*6Y0f@=L58Ez{+x6+~V3~$fcxwZ) zLkV&$m}&M5aU6s z>&PQS4IdRahG=yPLklT;6vczI`7sxp-}l$8Agv_)$CKkH2z+>%aIh-+QgW z@BhwcIJ$NT+g+tScMO-#F)|LPOI%q6tFw+t;uM_(XV-Y#M+m`EqYc)PrYXbWkY2Ax zk|fmY^=YVJ4?#@*@sK>v!w^#`bQ;l2>*V8-QLl$g6i!Q21$JEERqdWauiI#d z5M1e;LwGq^%YmI6$1%Bg2&EB9O~Z1vQ~a3;zy3?U`jy{8OF=mt zqtlqvhY$15|Jh&h)h~aE?|knEeD8Zd=GNK9;Gc^t!nqf4WrJ1ytpI^aM zdn~QgaiT={fOYOEYxWSnnPR!5j?rU73uyTanE#5I>OrDJ|x(`p=Mb0cBp zNKCyygEc2uSehq~Kf|>P-=vuq*aV_>!sf*roH}|GSsL=*h?#bqY?x8zC3uZ-mP%Rj zB8O5SRD*Nt*EsRWCpmZNGBYzRhJ%WFT=J{y*E#jbqpX}PQH9~wwd;)gJ%ohEPOGv_ z$^ZZ$07*naRDTL5;Jx?G((eyBegA`GL|nRflX2xKj3tsb;8)yj2K*fgQT8#SVJ(6T zxjd5qMIF@;-r-z<7LKCmvAodcOJ97Nzxa!P$U_f2$Z$BMUu2}MCf#nAL@R2w7&jVG z6un8GAwoID@%xVQ-~H3S38?!=k}lZ zsomc4VYUbp z@D55!A|2C8>nzRA&}_zlLnly6Qiy7#gWhBD{#5P3Q$_36qLp>E(=QM14tebic_T#5%?-+SQI4vA%k&7UQ}3bs5fi4D6r&; zqQFRlw}z1!1$@L^s_KIh{QZ6N!?upe*CwK-XK`l4nYXX9di55sKYp4oe*V*Z@)Mt< z*IQ?}x5x1l$5@3SI=GH@ZrOB zeTSu`C6o>v+}6wtwyIFg8s%t2RRyrSiZv=pxO(LZKX~B>eCOLQ(H{=z4hPIFEwXah zOhU0daTL+(^yqcEj0Rc2#H5<#!^`M2u$yafN>y5lagK}>gZ_wOYmCgN8mFP$da6tB6N1&N6m4yIh)mmzBju7FU)@7MtK5rKzyO zp(BBvjY)HXH$`AmI?tsK-sh#4e!?rSzrywF*YWj~bf!URHJd$ym4aEJ`E{jvbmTB` zgY#=^T+edO?QApFiU%HhoCi-oz*oQWTfBDWO*x5~Cr|K&Uweqt_pOk~is5KLVkB9o zgLN%pR}uS)cCCg^BKFELE=|aW6`j$Dy>V#fWyWI>D5*b|A9eR$fAD-bh+Ub6B6yDw zcVdaOR#SeZ*1@j7Z)FSrotZW`q9~%#XiRII!0iU-D@MgG!}W~4VV~OU5oQ-pFt>aJ zD^rU80HHK-(gN9F(V`LUXR`Nb#gN#FUAZ8L-N96oIt4>Gtn$Wifg?dJFaBaXROB~hk*u6m|HH?*G7c8<>LYZ?hX^UdoM4Y@nMn7+tZ;Mf-NQA;#!+1QJoM&cQ4_j-|6Z`$aAgF`kS^P&* zYNbj;)58fQin7YNdgVITuU|uHk297ujk$8|Dhu=NzzD9_X{HUXT)D?vq-mE%!=Pls>}(rvGNg(ra>uRFb{NLi>%>WI5^`w}DxA?O zQP^rkqy_axgYotjKl{;-x$^!847)vQQIqz<91op1Nz!WIm1dY{q-l*}G-mhQEyku~ zU%q|6>HAhf9BGWP6s1FZ!N%4uuf2ViVNtMn^a!Tc#T=T)VR5yH)uQ0l zn>YEz<@2oX7L-aObQ07{%4F=<>b$oq&9pRfe zqmZ;1_Q#9{+2pPk7|N~I05u?%{B&YXRdw_bgXTURd= zNl$BLo(M2rgK*RR&^bFrYgtzj>2$*N4sJ3(K^9Ha3_wu)jYcD+lr)>oshZgs!(elV zEX#29`jj7gu)h0P_2}J+&<9+RxA&Le5_Hal5T#HikQYJd@&Eqq_j&E?`#gO5B*%^) z;%axuH^28Ies%5=#EsDGi{jhv1rI6->T2uV$Ep)Q>d)@HTd05vmb8>Xd~-$AVG^uJru;{8X8K zFpFUtMw#W4z*(l)m;HNmaKb>AWu$3Jyvx##78`bg}m>}4EiL;hS2Ekiy z-G}e>cRbHN^h>53$Pj*Nt-)G@j$^DfNFi{-X@pc zC=8&HGMa`%@2}haAkTZH&WnTVV&b;g+bOB1W0EvtZ@U6BpejnPU)y7DCLzl@tgm-5 zu8xcx+uH?kA}DO1&GigPL1{W{ZyS;{)W+-U9faP++d7*&U6O_&9}70tcTs7^pr5n0 z+C#=;%s8jp?Gx8aT2Vq;Z;~W6E?&IM%6%)0Vneq#Bo>NDCsdUUJW_9`*6_XEU7UzsADC0*4PDMI|*h z*S3ReLpOZ`vBL1yW1Aa}>pxPe1cCfBvU`#BY81 ziwuW-x`Qr_MuW;$6vKij4UQGz0;;hpO6v7`II||W<)*WD+bhwczNO)nUe9a~)MGM&4nxBJ!TZ33{$%eXm2eDkxP@+h_ze z;SttiC;UvI)%2iqlSZBQp4nKl;uld~Ae|)=LAI@;@Hm=zgmNWT39bxB3|&xbNn_B? zVdTfBvd6K;n839NDp`o4c#>*e;(S6`=6F*QMG74$tSzy&q*b5gPyf*$^8E9k<;f>L z$;@n%&dxU5Tf3Y*d6MJ*=mbxE`gy+ft?%%6Kll;bJ6&X)(rz~~7OKh+>3ZPn?E6VX zc&?K~Q?J)4vTS-ubq9*0J1$=0zy;QOocGB6OU(Y=*ZWC$R!~JsL{M$*hYIaC#kjNC zwyz%L;NJ=EXo?1DXW6AG_)H{+U;5LY{a17C$XAC zD@VC;bAx|*BiBGUpZ*qRv=X#=E1+}D3BaP_nY!kJj4_$^1 zvW^Zm$v>28`!Q^o{jcL`hyx$`e;jN8AH3vFxo1M$vmtu$@1j^zR2dsv8QtzKJ3Dh6 zT3%*;exBKdHdUcj#65!7B;V@2c9to63|kI zK#gq7xExW*ic*x6K8Hv^1V&U;zM?F~#Br0X8Z#^^vU1GaoF-K%LV^LRRdIljg;X4?9Rp}M^D^GJxRHK;|8CrtFEPjN<)4aW?NF}W#7YAM1?q}LSV(1dBvwTWaBE`MIL zx4p-xJ7m}$llzLY%845hjkr#&UBd}Mm5ryDHzk8}!4Vt_A7$0JyODIaC2YS4Hh2(< zNF^8}$i^AtY(Rf_jSH98dHRzNk-Hr1n7!TrnU%EC7!ftu%0`@B-=jCq=@pJ#)fg#9 zB@|i-WFm37yQ6WjKV{z!jo1&A*nfNn`Dx)V6xLYE$`UC-RTgx!9+@cF%R88U1)Yr1 zP7f;tS?THb3rdmWMmef5NMAu&k@p4^Mi3VuD~rkv2FGA$#IWkaFsFNKCtMJz=r8ZE zcm66e(kvf2%%^_+DUw4=RNgQchl@cn;g#)f+~W1uU+2XaU*z1ya}##+5~FqsNJbmG z)P|0S<0dDgHcMVIxV6Pg!;FEgxUjv2Yd3iQx4y)0{KgmXMZv%Lm;ZvBYwOI-&-3V` zkB0ihA7ISk?>Qu!T6IEZ{lT;|<|6|Sgb?(y5lPZubL{!vFK==7!XD2)ag?VY zKhB}$l+-5RMu^HX>UJ1(xYTf{%4nQ3&TM zs_q)a&Ju?n{}QTJ2VKWyCH>)uSPQhWIPDplj7Uc$^_X_M&gk-0e*D+pX8nz`EQ*N# z@`1;Q+6{cW#=w>gMni^G4$_h}YwYaqV3kAE8q{LNxPqN5XRY61FV9$2V_c*tlZd2V zo+)Y z`ZIj?*=K2`0ePijMcQmoct>t>DhxV_kw#1#{Gpj0O)usj*JwG&8~?bEvM|K4 zrYtMcSRqhUl|@)XA|s5II21Zc5jvq54e-9A$VS{)-C*_B7HN7DAv{SO@ySO|bN{Im z?Cfl^w6MUD<0rXvf)AE#3=FtbZdq~hYpd{YaDs{QDkLV-|et={U%!zwW(JUS*t-+;Uk6Bo=RAhfJg}( z66?fArs&>1pxs|9)4FK?oWW2}Qmm3xl|@AfUTCgw?Q(Pbm)tkE!1^O6xVlth)*AGv z-ahGaO-m|sjee(Kjad1{4Pv&GKlDp%I_SUz@=Mzf8M z61I99JoePXv}PB%cy$X~4p6dUGwQP5==0$5qo`;GQx#nL;62`a^GziA1leM2iPg75llGfp2Qw9%vD1Ol{%g5^{_b;l55D*B7_>@>v*wQT z<<9%Q_|S8G_xpHU7BuR0ypMtupe%HH-GV7t~@E_6q^t?Y9vWA zWkd&zP~e5;c|Ntty8~;-dW)BVslK1a^-+U~{j(O~s47n}L00SsJ!M511Yq7Fghya0 zvYe-W?J@r9FaIl^`Sg=4&Mz<;jmWYr+|i67&x_D-HkRF;J-k#r^UTwH>hZ_;rJH8bh};Zb#=!b^PqMA;QMHQJ?u9|opTgL!R!Jw zW)00o#PZ>onYN-e-m4PD~2|=PHm;jS4%Mzg^S_l52o%|dj2-hGGBvK)f zNbjheN0|^l>dOjYOPn-pn2MaRDM;s${x);;qdx2eRvagKGMQu2APpDBNT(z^B8mmx zg}{utnI_LZ`z*ivJO3G<{`994u@cIqhewZq)n*XaYZzr&2w6y5Q$`|YU)AD4YW`C{?$ubH-Gvr z&2}5FG+7nw6SlC73d`L53L`WA$cE-V_i@_%QtCrZ%Agi-(`m3jP#h^G!zOhXfcW5A zx>pna?%&_NmmHix4@TW^=t@a{G-jCf7z{fc$&awKv_wK7 zS(Z=ShZH3aO734XSCGSx)guL1R%Pq+nzmRhi*z zhDtq2+f!fARFo{P%rP@3(4%2s`^g?k>#&xE0DWLGeGit6@Z2$Qy8Zf0UI*`}iVCO0 z#WSkUQ) zWqpTArZnb{LuT3A+oRpkAFB?y*Cpi6*IOaI3|I_8@QIQhYXe-oj2rmUv3_HXM8){Z z)6YieID$AP@u7HISXe+JsEU%Z42&UL8k&b^84ib}X$?0V(wd#6+wF4nzT@m}ZPUA|fM1JSK_5xA{re0ZA2%%^-XK1%)AqwF5 z{mYk9G4aGAZ@ovz+cvO|D)0}gbq;>+7jwE68bU#N77@kKBrL)+9#y>fvo|?$>JZ0P zX7JL{^M>7V#rCkzxwQ>;O`Xbvi0VX14H0=7i7f|y+2F;Lt8^`J^&fBJr~IlA9C zja7`05dO_u3SSV}_dZQ6l-ouXi?2$2+6}?H4 zCjEk~-EE4((1|QN<1sETiN+O$brhAQl2DWu*BMfcbGF{U!sdl*EI)jb(@#A{y zIYL;@o_&|U|M3gF^46~yjK(yYP2yULF^>M&)Al8gC7RQ*X1NfIM}~LD1+Q)NxZ(OJ z1dl%XB%go&d7gOc3BLcr5BU3+UZ6cc$B7fiX|#e0yDUo*9ZlGT7KaB@-7~HAphEOR zjnad#dU>y)jLE+fg4w9aD6240f^W`qb=2qDi|_L4`732|*I?StCv=`L8Br%ejQN%)prhpd6 zL5_4D?FEJ~Z1R(VVI1FXNZ(t%!-ocu9~x@v2;)3y93xyrZ=CV&g>&56+TfM9-rx&Q zKF71qK2EJUhnF>W_O|KtbBf9lH&d`9JQn9}*ZBLFcdg^8^XInPSAJsGuzAg>k zPMRbmk|;rlaDmZL1LFiW`hxRZHG|&JEM*xH+K?{13l17@HU5!Sg+0iOStC&%&nV9*tv7z1BiH*=` zH}qrVMFu?~Qj|o3q(o652}i=Cy{Yc1E|>1+b;sVsh6UyN({4L zn3`_l`Fhy1fajYEWV8c>w3J0gyOUFtRY+D`^DuTm7)`Q!?+(Hs=H=&qNGC0M;PLly z=k3S%fB&!F<^Fr_;@KZP$KJzzZoTV1blyeSj6Ba7BGJ$x%mPzg!BUMCF0F*A0QeK540&k}_*t(yL>ism!aJCv;1c67M4JfmmIF8t}e=i?->H|FS z@B?_V@)137%Z>c_x##(#Kl^i*7kh+ZNWEDn&r16J0iNd*g*BWMI8(fBn)%lJf@}7V zQJB=oV+1nQxY>AK-f-zB5>3 zF~c)SD$usF6D&$s1s<2Mbass$x-Bo$;lM~y;e{Tua2UNg zKv_yETY~ZavGpEgYz>$u2|`pM+fft^1Bx7FnbT@CDT*BDO3HG;-0TD&{m6&-)F(g6 zp+g6%Ve_C@fn?T^5B)nmKOoBsgzyRDW@Qm&ay;d@=k8-1I)he;%m4r&07*naRJe-| zy#G=D;&V^){PQnz<;oSNr{-zaB6{5c#%Ws3De|JbIWb(yVV@L{Y?G zFd$7O^|(ov7FD?GK+@~===DOf)RH6#y403ID7sw^RxR= zL7jfLht&opJ*4okE=SnPer2#4qkorRbF}J6?|Wf zy>ctthyi(?k`HoDoH)V0ef#M5`qST$DZP$2kvEhdJ^LXlv&DTvjw&)@<8CE zq$n~XT@^NW-+7Gv`)}aRJMZMnPk)1xr_UgS#MuBP1imkEPNMbDm|RK}731@Ig+%2E zCx*To!(vF-u`gsbF{%m*;S`1;FeU^HgLce@2ECfbRSA|?BkQj|Mgn%6c3Gv?3pez& z9EDj8Q|zUZgvvwelpqWtD^O*XkX)oGf%5R;8aAzH&Xs9=^}KTUp{=7FWF+k_os~7p zL5Al9fly4;8i;z6-r@>@=c9zIK;5Eh+?7{_CIo&!;Q7>=P5M-ah|CSXR0M$}H$OXl zZ#(dL5Che8$HefQ0L=9fOr`<{4=Rv03T=ArxE$<4PM;ZOef zYkd8${))5bFEBYVg|z}BeS8^G=GA-Tws-?o(0Rq)mF`-G=*BfNE|6{IV`rVKLcWXv zys>m~W5c^~kJvcj-wKwp4ZD0J`w1Yb*M{Dd!^y6-^pZX&PMze;xwGu7g`7WofmS$y z%lb@4iv4?cFgsTx&6nxg3}0!m0&mI@IYnbVrnW00*y&O0g2EtdNtkQGrlwXpI(do< z23S(8>S1Lc=M^9%QQa{yQ%$Sp_RJE+IjPO?BOmEig92+DN_bdXZUMmMwgu?OfO;cP zU4a_~zUL|_jwmZBiRU2{Sf%J?HJ*F%Ja4`Adp!2;yLjT=52C_pIz@+myUpvXZF*UW z_F|~dqmcCaDWWWxZ^aBYFub;7E84dKudjj{RiRm>0(;~4*;>o=%nZgYh+wk z_d^G+N=)4-FWxG1^nGtzn}zZH+bwC;B1%ut$$KCj@x)Hf^&O|5U8235^RByYq&6|h zQc`kyX%$_Rto3^owK{le!}AG*a~M~FwUw`%-FBF=6$l+&gH6r6QizcRQ&g|h4?H|? z*tjT#v2yH(HY$e4!|q`ip_H;31P&QA*4kkm1)hv4@~TEqUS2(x3JfsT&|7+qOUWXg zrL)ZLyM@NC!vreA_%*!1N3UF9<-}Qj`psup_~CO*Ynb;XWv@*lHKp$}87gW{;MxQ1 zdP0%p4AwfVEv@ltf0eG#tcZfPC_y@!!e_tmnZQTd`dBSvab&`hP>>i+?hJv~fFeVe zC3YCdsFWHjZ${Vmdcal%0$iW1TcxNED3wAwiwu3@phmwK@al=zSvKl`JvvFs2H&vsNRVKLoY?ZS6ibvYIwBbhZxb$NPv1HraG}p2v|R zhnU&Xq9_I|Ug?kz2AHCxD09j@qZ|gPjJ)lPH7Fq{jia0NNz-)fxwmuY&Z`6tTM-cg zf5bYCX}85@#eqcgUr~#y-(h3!wxeD~Sq6C<5x)fQbwmT3~!AEI4$Pu#5VcVJI5`>y5S7_-mq) z{(33^DN$iiWg&Q$!JyA_(P7_B2l&*_J;ld9_I)$;RvN>_0(m~oH)r$6cWdE5R#(N{sJ?)M(hdN zD&x@pBRBy@I|47lNr@jtm@=!vwA8RK(hmIUobrSd3Ci#1|6FwGE762y`q3@~{G{EV2LBaFrO{qdgfZy;=qa#O~^kyLW|(R~h# z*`cGgl9ky|`Fr)8wnIQvDTR~rx}jU6o+XOHF^GEA?AM}%AkPxO68eG%?t6gGeEQ=& z@Zi0)8ZkwYq08#E$3f+fS`-DsQ{W_Nni2#t;E3Z8Pbzw8f-#Dj=?U(??;YHB>v6vQ z?eFlVFMgR9fATuUDq78HEQ%!Qqtxa>^2R=NV?SEewp>-f4%xEZexG{33TN$hyEtv| zf{0G1L(+pHQ!Fp16xw4_G#Cs@*46~VFIZe`pb=H>Gsn<(tttq_@b29MI{VOUaSnj6LSs+jQl~RmNd9$pNZG};Ql$Bwx zAC_2?bL8+|e(sZ>;E{(PWPZmKwKyV8dMqq1FwvS~W@ZkYK$n%bsPB9DzQo5NWI<7A zCMO#F+$TQ7{rBC?*Z%TpzWC*@kc!Ip$2x@+9zs;i#fqVGwRzZjz>PLk>p%?COC8s4 zc(^K|(mIV29+l;&L%Sh}I+Vf7p?!k26`<vggZ6M&wGA z668frpcHdEr})$-pX8$-eTseica!zINL!^(r%BF%9Xt4+{@wq`J$E1H5C8BFdH#hL z5h_GUpCl^?{J4^#T*oJ9D=4?I_}MI{+B}6F6}HBRaY3||5xS8vem%M5cE#=1$JOgi zvMeJTCj14;LkBB!du8vanqhd^km4Dg(Zq?KtJ&)?SR6hC~NUi7^%Sr8(2zN zf=vk{4{LISg{U49#Xf$JV{C!71=?juStW)d18nK=14W}zr_8`eO>R=sG6CgqQXqxG zIfL&97+d^I`RG-d(zV~0!?aCP6c`+G$c#c(*TB$Vb-jl!9bf$Nw|MJ~3$*G@F134H zTv$do<|tHw^dqcPU~E-nYQrE|#|4eIWimVa_L4?xEkadH17j`PX_Qn%wSbwK8CtWm zEH7PQc6N?S=N6cnnI@D0#&@KH92r&&V-*IZ$p9~?8tP`V$$Ga#sxtyBsQV#ki_wmD zuM0|&mL-#O)1+y_%K8e;sTM&Haqx!2tgbC1wBWOU|9QUp*WX}ekaF|!JIS4+*URw2 zh>4k5C=2o;rARY`uW$mC?=#t)B8Ysh_&rph#sfX+2}-L;Z3Y&?phn!P(@Hh26bRvH zOg5-Z)X8*86vlWI_`Xk;mE+>pI7g`q{Gmtd^+5Bj{<2&5=SEzyLn`)MitqdQzK3uY zi6bu(;yC8r?|PVj{p81y(z(E)dRw z7mkOV+cm5srryRHV6>-}Wl63FC=phkoeo0jA&sCMXtGX9Cs{_7Ino)@UZ1k=;R#3J zOERaaPqy&;Ikl!oYkHEVA5oVf3I$FvHQ(TlJ8!4o?$B9SV%byZz%e&7!LfI}gQU}@ zclHv6aL`^w%`{oddwl=-XF2iHS9$h@=TKq5l?!WI&j_o|eful$G+TZ*oKY0EJ?Ay1G9aHlJrDM`-vTFMX5n!z$ z%QE~ZB#HxsbYyu(J&ZOL=9~89ZKTd`CpF%#A*=-vd6A=ai5FHw$bMen6Vj;7^R1U& zVKwVAH8a7R3w^HiOBzv3G%-bDz^4FPHI^ES8U{3qA!w(RlUcs zxgM=Gi3EA|XI0=Q<7N)*kO@_NEeL`!n|jj#!PSP6R6~&$2v;!|J?SHyV9F~Q^q1&l z9oowaH0Muq@Wyu#*Jo*8y29&U{}L~L`+L+@`W)Y}o0_woG0;A6(AO5 zKJOC8qMR#09^9LL1*Q2JV0JTJiaC0d)YoPImD`_^7! zJNBrx23zW3eJZIpLhiilc8=V*4}@XRE9mt)96oY@*_jCjX;Kj|q|eQV5Af3K=c=H+|S7?IkGBXJ&Sa zs8*va90v{^WNK~}83nAj+q`n>B&(~dRV_Ug<12~A;qnaM3TE(_2^!S#=tY9aNzf(I z3s9b@nB~JBif!yRHm-vaAiAAh(#S$9iXyZHYYo09FlK-gyuI;n+R=^|!vq7ry*8-Z*oLJWnxYK^#;by?LIK7db*Y1i^LpuIm9_TLE3? z7=uJwYo?~AIC$_N%5(I4gE1q&(TK<1wow!j$3D%PK-M;kHXOI;XWkNF! za7NHh`n>h}Yy8}Y-^*9N@OeJ<^Z$gLfOBUr;g==#FhB$mCh%!R5>tfK{TX6eo%wFW zkhX??(!&W!T#KDYN>52Y6YKQUG_kZqQ9uwXqS!}-0-fYg3akW|ZnlaU0sf=<%34cS4Ev(t zxj6D04T7NZ+qRm1zX}#>wOX4zoJZ@b>BmIAH^z62G3X&dN~mpe4L0P6k*-6h)+2)R#;THg} z;)ew~Pnh4?A_xM?!eht0AP%R=wa?sqM3MP;vd*5p6Qlz}9L})!zy#fPk2tO&lOC~O zqg9{c%H=gYKW1`f2g~g>W+$eQK}ebmSZ}u(r2Wcoy;fuQ4L2~eW12!3E}S~S^6C{@ z^K%#{dCz;_%QN5mE4!8bQG7(h8>+ml$+=;3R?PBcllEhZM#QndlZT zj3_kQDm%x1_o{OBanfLHPN@epYKjLRyo;wk@*y63@P5)X<-}XBvt!2&9(v$Go_Or> z;eOpGlUKEG&==G8Pt>_`s8oa_rWdc>3w5`N6ZVVoXMs4**FJsA0WsvG&@U#EYVc zG)=DpXhSL7RY1*bGX33Hw2!7*qsjhgqmH78JkKjicahS|+GuBxI6P$KTd56B6qrbo z3^LkzibG)p7*Qg9K@=%OUJxloFb+1-I4QyNDU^pVEp;Rj0_ngL3hMzwZy8exY~Ygu zZO_M7fKZe|Qz(hD*QSSWo~9XuaAP1i2)*&^j-r6s`8uEa#3y;;u}3(tcOQ8=Kst>t z;PsQI`O)()^4McfP{bCkOSFT*po^bL!q{Vw8>FWYO5%%(X?w?QN7yy@OFZ%L{ru-Y z_+w6;I>pLzo4}8WYcWPwz-o1KZI78$I)l|)D2K_F1S)jGWD2?$X*7wGeL+d0m^oGf( z!fvc2u3d)rC*N54m2XpE(Lj~(RN;Iz3~tT`V~ge0;BlpbBGCvPOU)@(P^v zs|KTlIGiN(a-1#cr(J?Dr8EUjy2?Ar7<5_UVG+S*6K}WW+ISnlugwML&>zbPlnPLh z+60t20iGxDq^0TCzzjHi<88d>gYV<9#~%6`pFptmQaNhx+KlBO4{!? zD6+vO!{}`rCn2xPavrfmOKZn+1Bo0Czk|*~A#j#MC5fYir!FbDpJ3OYGfu0~gPpV`65Sg-eSZJbZu)3k%$^cMnp9 z+;ZnJ+N*0-!I~L77co(r;lx|#3A`pVvs2)O1VO-L+(ZeFFsiZEY_qa@1<`|vi6#@X zllY-etyv=sebz3dv{%;vSxG^qA!>!xq8f&R$>uCpJJ!M)MN%~_)AN(;n4hJcv?&JV zSn9Ubk4q`FsbJsOfNW(AZrYzW?Bhn4XaUZYgnq?Z&(bc&luS-ea@TDK`L$pBH6DBT zkxIc4M*PzsT2GzAu|`>6Gd_Sq#m$pAA|qkDdpz#4kz zmMNDtChro62DY7GJ&ovP_=6H>4Ox2)FX<7NIi)Fy(Rf9Q=VAg|Af~4YGeeM-1dBd% z#}0GXqwnI(sS|wVi(f!aPEl{vF}fgK?=s~D9H~!JD;#>M$EBqKZ<&;T>~%Porc6yt z@y?^SaQyg<96fd;SKeCTKm8y78wojgzVjFY1%)LUXpG5;Tk*J=jpG<6D{v2>*=)jw zq2<Js!acR%_Nzxqob z;=%jx;-xnh_@h7hD&POx?=Y}1F}D}pGgu|A34znj3?*6KH9*TI#mKP1+9Z?T@cUb9 z$0Wva!>=kg{?Y#%)sRtC8x9t-Dh+fz-1V*od~7&>JkO)wOR?4V-o)OIvC#$&58Jg7p;bDWvZa`#wr2N>h;o zbYU=7R@MqaBK%4gZE+X@R*CVzYQ)~&dS;KV_13y|^td>#k){c0njjUlnk|gU>2=#o zO-=D@zy06wi$DKKcI}=e?RU8S?wk0)i?8vy&wq_)|M7XQbdn90Ab!Qj8V6`?elEEo z;M4sK<-xV#of2b9q;m*q=ycZ*(lAw1nHFVUg}enSK)M2=Cbe2bn)J!D zKGTyE+<4O=LQmoO5}l=-J%5RxymEp;W`>M@N9YUo@7qI?4)B$S)t2>@Rn}MAB)uN% zYkl5)<23KM$p!*U_C(m)^(q&#>xlFomiM#K(1C?810h6@}oPwxX zr#Usr4Y%Dw+Uap&;Sy=P%ktVPmpf~i*he*Dq}2o(YFg03W6BGttIF$M>y(K-I}oji zL|TNj;7hz=+3yJt>-2SlEU!0=-sA(VB)z0!nbo3zGS9Il=bTU;l{LUw(sACof>~K2g-bcpgqxXND=>epr7!hT_KW z+aY)}^0mIY?`XWh5Qbi*p0f#-svb`B3@0pyj?B~RC9JHq31iLdT+G2Edq66dmX`U# zpZ+O#-18v!KJadi9{Lx2^poj^_krSxx=&2&oX++fF1>0S*Pr0 zq_Krj{hjAHDX7&eHhZ4+k+x#TkN%Y92KF>p>xPXW=+=NbrPPL@XgSQb2(DVQSPN>4 zhv-l`{If_B8~5?;`W)XAWP^le9CG`yqrC6Q$9d1=kI-t>SX^90QxZinDvWT#C$~__ zO1+{G*mA&APra90Z#%*lzW7!C?)(2pFCE}}(J-(ld|QU-+hsUZ_4e>JTd_g@y`he# zK-!o?2 zwtemBxkeXElY8zu&M*J+FZ0fK+=V)>;b&d==1WG;uq8mR44glObuAv5+rf^2#QlEDgb&dT`}pQF-{o(g`8Jc2lQ`#SO-+({KB_EPURh!3(gJf6Q}|vC&J3-I1aTZO z*=&#|#in7}){w;UexWRZr|9*&C}+6q&Rco!dmiS#d*8{veS2BFbg{A#==b@DH{PJp zYH`y|w~*%rQf9pT%B$lw_VUXwqm<$u?|28k@3XYD#B(pcz~tof96frJxw$zO78W>h z<{Ux@{`k*7izzdLAYfu*f_}fx^71l|Jn{$+Jn#T_-uByk`J3P2yWjmDFTMCvqztIn zT4brFC=6i`qjh;z_38v(7>1h)@zKFEVvKH=7P|3<9i>n^=Sb6(JkN)dqNuuARZ28b zC#WU36eujd6i82i^q6*v5{1>n;f_>fTBB`=?;NXzuH=iQ#pIO{ZsjLh73!0v#gsY5 z=ql_(4*jWwS4}n25>E;|50tY*erT1P=Tw#G`F3&*&%0XOd;Zmiao4VS?!NnO{@Y*u zFozBt#FQn2v;*1@HKs`VUB35s-=S8Ur5?4wDFhNvd8k;>oD3PHU7|*_dQDh-U!lvC zvgk9}47u;_+xg!Q|3^OexzF>LPk)oul`dEVRw1c?6z%fs8X|A>kQ}GLOF0HftMA)! zQlA_q9ad*}b%Q83WOr-;)0}fiTP0ME8=+C!+Yp2ueLV;QoUw=@IazB>VRQum2LZi& zfX1PsfV3zmP1OwKMM=HUV)^nSNFPs0(p=L``V7)a9wU?-O9YBC8#h*2mW>OiYT8zX z;YbI85cs}FRPzaak9O9nZm8K=GSA|9OW4ffDM1j16mP@O*^WYft(*{)rzrD`te0`~ zEr6RqR zDecJ~s?2aoVu~s)RvAgRC|JDI;o^m5cFeYE>}XJA9@coofkYV(OhnSNtS=@S~aZF4&Qot3<< z96|_zCq44q0){Av@MVBbE7R;+t;VVIXE}1{Af2TZcFfFjWpNQF1ifA#p%m8lnVp>_ z*Cn+^9fZJ-LULVl;Lt%<&Yq_c#T0{#$!3cp&zYK~(3Z5f}6rCzQT)R*d%qQKYwhJm0OGgQXw z{%wLsw(cQY0Ws$sz84G!PY?zQAvK}zxa01-_~=KU;^#m41S+Tj1xi6S=nw=R55D^z z9=P*ne(w+dh|hlh3!J^MNHg+KHHFPA+Es~qYRC-L#=r)Kmyi zA55Bqka$8-i+y}N^q|0HmYNReU0El&)Wcba=L_=10a-erztE+3_6mtt5MxNrEmCMl zvDT-%+{PM#-K|)vH|TeJm?TB?283k}-430_1^T6rySz%6Z1(2BXB*QR6mxO{0L2&8lv@$-8``1=FbBtder$O7fRw zo382B#-`p1Nz;V9NHMmmg?uGZUgdjiWsF9kvjk-ZL^#$?zQh|Zp6AT-Z}8~UL5eg( z7YQIRQX-M8U0LVC*#%w-B;9PlfJzOuXL6QD8?zj)%`huM?DRT=EMv9T<6_yREFB>} zJMq|MnsgclryYg1bW_8+E9nZuih`bW^aqtqR1ieq`&jMBbcquXgdsM`u2}~g&*JSo zyf>xH7gfU$*L<8VDa#CFa~^v5A%5%M{3dtZcXK5xEjt7aL)IT~^w>WB?fzfmm6zY- z3t#^}FTVH_mKLuJSxG*+r1F`yRnqXtTXZy3*%%D-v;K@EkIosi(FCE7@}MXO#Bo46 z=n#fJ&K6|-E=kfGGQR@4omINsK7KGoo+o&oz>gF~Ilz+v(s?wRA@lPy>{{!P6%Id) zsW(DejhI`G9zlw#k1(Yr@24EtcaYU9>zqD$8fPr~Z@r1dw9i|YFEf2?C%rV| zC{t=qap~d$`lh2e1+}<|k78XEH$=zz+V%_B`W5YM3ARF znvIwz-}7ER{ppWz=ka5ty){%(f^*cv8YXn4c>;OH%yh*6@;krH-+lM{eDy2e;DzU2 zWiUwaYc+%yk>&ZAT<~^)=k?gF<6zI=YG6zlhV*(pPMtc1@*I*n^?Jpi>vXzfZ_TnS z@qM3A6lg72Uopf{K))k-^_5rf!#ql~dR#^-Py;)`^1-IWkL2tc-$pyZ2^vaT{ozqOu z&$60a!f147+;0KK2wH ztr4v?gR~?`Dj?Gje3Y)(^5#0d;dmfFv;@1F2~&ZpcieFYpZw&<`S?@sre3eJy1I%f zN?MI37)x%dJtGVwk|e85#-Mgm|HlZ|a;)c&!V8^v^Q4}cEKuR;Nc}BQH5CmY=xTa?V*&xd_gTa6#3DHHL zq@NNGv5{<$vuoEL&R)8VDkRghGn_ej0_C6{g*2j&8*bQ39ET)H!i5VLD2j}^-8*Q_ zPO{Km;pwk^g}MEQaos*MGc!z1Px0DoucEV@-P1E1JAMa&73e`i=m*31SRy?iJ*?lb zl`rAOo@A@~bEM?y_WRUpF^@m;EfALEu=4v}YlR+bm|tEaz-F@~9$9b8#iMwgaX zUwwlt%ZQ?gnfaaEv}2CTmoMW-m523@UwDy5qd^#k?A^DYBuSWFb zKR;h7h;S?~FB8Qfcipv%rNv9kPBua3^g2C0`my(O$MIYE&NF|{cb@q^7tSvd_zmjy z%G0i#!`puSLXSg3AkQoIk&Ua{*EWCDAE24ynNXV`^fO z*I#>+(`U|-WEq7qJo5OXT)cdqH%`35(#l2hqED$)&YV7j6dq?!ondNnk|+)t3{w0c zA_zkAyaW_+=y>>{d%5-2Lv*{VEG(R-FdFIm7zavj^pC6(N^ur9{0vbAuqc5>U`2JE zRGD#L=PZxE^Eg_&p$tc1k!V{<<`LeQfx2C3>#QYEeidd_!OSS3kU~{JtOXLQ;=oCYudvQ9z(1p{FR7LK}lausX;&ySR!b zz*7oWR?{^-oDM1_QOesO&k#6&=;JCS%2PuS(&8zF?|B4XNtU+Rw|57>@Tm{+?|$ny zc{2~=t**Hc!{ ztx&WfUDl+lB|93s!D)1NKvY<=KrQ_O=)W= zPm&j_m5s&FQeyO(5xd$slr&iMa1c<*n*6ASR1w+={907G%Q*w4AoeVtD3PYmL|yXe zyN>dkzy2$H{39P^$J`u3DvDl)X9SaBgM03|mwWELlPqs@@xlp&D=Hg|QsNV#ysIEh zRcKYgXHry*TsEYZZe@81A+W~a1yzuX6dn=}TuGy$c=E{ynVZ~!)+Oz3nx*5f18c z$bmx#Xf`9VGNspVvv_fpPNzd&k}XWt$QlVXHM_e&PeUL*Z}b!mlsP@=p5<#}j3lF6yc_+LtdRHImNoB)eK_!5*LszoRzDar!nDWWi- zEDKbm#*$!T1{^uKhu`@1f6j0H=D+0LyYE28(^yk6)m0E7j3rGH0#^+e?|tZD?!V_= z2E869-+BuQGi0iH1b%=sC7u#EELs=CRNNs2NjNa>8jyc91PH^BqL&heO`HWK03V{c z8hdWt$L!u2uA~Y5JV#5(sr4)LBgw>`IR&xp_Z6VN-c<3US7c(SG~q7eYzJe(_QMYzShAHYGhePuhZuzKlv$bY1pkC$C2DR z$Y@>ZaQWgYuXHs(9ynITGG0URzK?%^2OfKvojZ5(?PtEj*T4DK^opF@@3;-A6v7Lz z!UH_8uCnPc8aW&&i~v0)D^FHWD&(+{Sh#qFJgb9(7A^pSV5d#=u@GjEY4>jnhJf zF|tDXcN%LoYp$m7Go~eC4oKqtwWP zr((>OL(3g)EY?)@ixeTA2*FC675K_W`+`VC_(o9=BT8FPj~kqN`5fUOrbYwl0&FSi z<#4*w)BuJ4WXhpA) zG@8}U%x>(?#K!E#nwgl`nAq6ZU-M&UHIk^6b~G}iD2`|(8c-7GEd+ot1RH4IUH01J zGjo6By|=3yfI6aobj7XeTj!pWncw%l@B7q5QGg13DqVq6c!BSLmntL*1FXpzkJs71 zI>$f%txxl>{`-H*+VMlE(xS&DCI@9A!k|OwB}nP9w6w_mZ@7uOUU!;6)to`Insoe_%TGSbcyk*Ydz{_62)dwM zX^vMheo?b_>LjhTy&SshHs%iR=ls>nJpbGa{PgJ`l2rv^kYJIR+TdABA~bCUCx#J6 zNa)m(OqZC|IU2XGp_e*b9QO%-e4Zcv;3>97CBi8DLKCB?l_Co~MCBL&Gs*bG=_8dw zDn%`GyikI4q5uo{o{z$FXZ5hc^E5@i&8bs|_?Q3Uzvk1Q{3xr-%V5Dsg%JWHuYqf% z^szP~DhNz4zZkv+Z&5;)@LWJBSJ*8In=p1pz{aXsfV7qHT?)#0xFDme;*+ zGjZ7<1X3yNgp(ko#NaHu-T5{*-+Ge$2Un548;VHZ;D-Wj3xv{i7n&GRQsfnzn>~_d zi>xRSUch(1|3e1Dl$DjeJovy{Sl=4+*yG>k2jBZXH=jDmvp+w>BOm-I=XXZPQAMvv zNik4cV$Y-5^jSam4CTfp!XN;vF%##|H3gchBkQ6d@O>8pRoCvCYC~PsU%i31RpFp6Mj&KBRSAp+g+OY9XEiPeH* zPVNyg0hPLn(|URmedfd`wGn6$Bcm0JH&3JPay2-|-8Y@(eGk8hA3nCt@n?=ethWwb6JbjyUIb4b9zZKH@Aoi7ZJsPI?otq;0f1n(7GmyLgF}b!mdeu zRM!<&Yxg;0sj8B)bQy?2;1kCYK_f!>3Tre)k-Iaa5H6N(%{sBMJ}Je2QYs3?n+J@YMoE-(ed zevi-#&~?plIKWs3WURC%FG~i)A#oB>WI0ul(MlTR;}N4?k4|F=j3o+u(s7T`c!ydK z7>=)^&5$B9q~ny$^$j+!UZtHRB%a6GzE$4&mIsm2(%ZVi#`-0qzyXJ<+Ti&io)=Nu z0xKM0UK@+26m?zT$%gpmzUXW*&Mifw#BiEE`%@G99 zZa0`~&#}FAnRctg%1Reo`^?RUBuPN%H#mG`2_<8!sMvpS9;~ZvkF4!MVrj%p){ZX| zhh2XD>=Weub-bz~AEh+r<_MCIXP$H|z z96E9siRAp5^K4)35l3yhOH0hn&vE|jStxb-9PfiAJy z^)srnKzU6TmiBPq&>;>TKEh3>PI2?ir}2HC<>h7WzUwabE-$mRxWK;Ey}ai3+Y#0h z_#U_4b}OqZEA)1@*td6uLkISA^7tAjj;*n8?=q_^i%64k<>FahcgL-CI}HL~(eAWp zG(w6p=NHdCMI%t$|Asg4n%CTpuRPA3KSxoPSP44Fv9=zX{zC*AXce!tILtnjrV60Yd7LQ@K;MMY_966G=1Xb^@m zxwh1k4Z!zYHQ<7pbk(b^iZ_?^nZj~@KH91ifaPz6tyzf1a@ZbY)BnlN}ULt_Nk0{HM zes72|u(`R7QUSNzay$LrkiYxeZ}H5tPqVbN#Omr^k|ZHbQ&v}3`Pq|C@$kbBbL#X- z8V#41I;F)arSMh6c$jkMYwzUP(VKYeo8RKMfBO$Odw!ibXrL|V+D)vC5oqm-lORwa z3{`c_Z#T6?->5RM))D5NolQ;I^6r`#`3e?r^Qsfy-8nF>$?Sr?J>h<~kkTneEf`>& zXOvZi79c|(8H89*VwD76kyRO$HI!CUX@eG^0w1dswbf2lDn1ryxC4ssdkoVtaol*BB!AXCvTkx_w1W;b z5*H3#q+{}QgcoQ&`jHRwzW2S0wZjKUq7W&-)RrIptEqL?|Bcm-F6#VTb_LK zNm{KICr+GTV`Gab^oiq`EH7v9iFUiquYLMgx$CaG_`m-Bf8^WW{x(X5EG=|M(~`2T zsY*km(LfaL{T7o+nF_qg#8IR38fjhAOU$x_-Lo9WF;V1fia`*}EE_L_G2H-GxY1Vc zu9JC16|=>HFtcX9Yx-Q9@@cKX1~gg=EG+FKPd&;DV5|osK&pU#f15p#3+C?k#%ym5 zsf{8|T7*%9{`O^t!%fPphbb)G_CDI(glM}D!Vt$Dbg7XhL#TQ}m2?dOZ3EJLgddbt zrlK}(Dp>m^{!|S$QGng}e9Tnyc{!mdhxmY<9OOLTO@#ZyZ9?BC3OzgorY^8`!5z2V z%!fbxVeWk0aTXR9(AtuYMnq9`of2ofz0Hv$NBGzO`d{<5x4(n`=eK{4AN}}g8qGGk zw&Z0sQ}9f!-BUG>t;}^`xmP013&eHLyViQ9Hm|A*Q&vP##KHahdG^_7Iez>&o12^5 z`{w&Ocm6z$Zkz4i4oNdcdLAf2><45;PJe5AHr+mO-~i{(zDT#-;mXykEG{iD9*!`^ zaP`U+iXx}eZnLw!NfNox^Ajge@YQb^inJi7X8p=Kts)@^6-D20;iXI1$zk0S9uh@e z)(py=jov1ML67lZgc6FS`309d7R2OfPH((Ju5)DWk&QCSyaXYr>Kd<*=*nfA)w;%N zUZ!lAS)0U-*VoRJa^MJ)Q4~?;6~?&6hOm}28xTezN?P)=;ON?6KJe&!dG{mlWcAQK zs7tcp0ICsjlDHh;szNmyG#fFb8H6EVIDPXe{_Vg0H@xeSck{cy|NruX@Bakf52)*! z=ER|3jG2(TCwt(;VkKWiR{16iw z#6pXO)h@axp&XEENkxw|v<$tP!f1L~kGv=t*bGxz_9#PcD=zidDT|C3*Uz)Ce=o5w z@T-cEsu7W3XEY)hZlf=QHZ_gf@+KSL8^{M^{(h&=rR{AlmIYVpg1)u9_pR^X*s){m zKX8DreeG-f@P|L7wuU1|j?ic{FzD+nRyXEoPR~cXK|;H;6t&h)K|#;$uhyNJq?Guc zKWi>e0Vmhi(5dCGqO59+W&(0dCa^{Ky2vlcMq~2I@aB8(=3^iIAg{aQG>s&5w_0te zbWOKAk5WGAV1V)h=9iZE#K%6y{SQ9EAO7Kg;!9utDw|sa;-p0)BKpIWJRjgGiIg6J zx)#miDA(@3P*T1sG;FqxR~1a|tEmdKsw;w^g`u9sD+%fLognaLN>hYEPjYMBCEk@~ zI@y2R`sS>crgr=ARLLJk5uWfsYw(;!%?c0eD+*CC9FI6x^m*P4xa!xCNV>7ls*PC| z4fe$W2Uk|vzqm~72b4DB%%I1Rf~q4pU=|og5rcHh`Y30dW?&UkHjyIa8}%mGK^U}%qXa25%|??rYNM5pF2>|VMO9f$ z1)`RS%Hq|E>ZQxPI2>|ibBmGCoIZV;o7Rr8{^Mt9dofS7E1E|Z+4tI;XwP-Idhs%w z>sRS*@347w9Ti##z)bS%0$@RgtQbirH<(cI5<~22mjg#n(=vj=v**Y!th0b1O(F_u zsjNZx0m4WsU6WUuN*Tu>c$F9xD7{(VGEm& zYhqs$OJSQVaVwAXef!mjUt%$6alvQP%31xl>)%V#Ff3!La&}gnIwc~-eaX;0WNQe~ z%V{*EtxpsFj~luA`kh`GV-3*K)#(De9tYNRcwH) ztfZem`^MRm9iL*orp|0YDh#B%fZx^^jsrttRM~Gh9JpwUxn~)_EIZ5g!6sW zJ2FTc6SnWew%0Gq8^L8Xw^oy~wizY`d=*jqtxS%HA^L+s@W+z#i9S7Y4YMZZ=3(vC ztE;QTFkp$t!Izi=@C=>3&+rWPJH7mgrq~Ej%0)!chJZH)SY;$NpT;9o^mx1TebDMW zYI41%@O{(he%~a_mk}&j%`Im&X37>J41~!eKc*LLSS?@CeAffYsTeyNcB)tnkThNiq+kC9RNpL?)*Z&C!;E27JnR=4Vye@CU^ zfBsz%=nJ!);|2$07Fw@v;mi?Y0nCDyi{LNcFmfmSXIsVH4&i>>qdVlfqILOq&Q}}m*wEv}oxFO;T{Fn6%t!fI;GY`}kKgOR zap{~*i+MBZ-*zDN-p=cS5+E@SDg?~BF%m;JW5tA2e`$b266MEZS+=;XZV?!ip^&}( z4$S;}9@7MVipeA*Aoq_T8SaVwOh*JR5JAc~=FBhAkxD(&i1RMrtrfY~>l9nr)c3$W z=6E-(E!&t{EI1(ck{r|>FK~`7O=YV7IjG8GTh78nqMDJ7&fM2WZsm%r93ey?SfaO4 z)iD<`Efa^L`Hz;cr{~v?s{T^>HX8>W6`Q->Z^?mWYrV&Iyb;J1tsogFkAtBeOQxYZ zbJ9$8m#C>ORWRFc0D;~vCc)Nld9f9{(Irq}Fh;?MDydon zKxKfkF&+qcN3)Zs>3 z*ooIRzG69RPjur^F#ay-Z9j@c3FuJ(0<_|dwBbhB=}~Zhhyu=m3SMQLKdxfrKBmWN z5F34pMOXx(fLhQ*gdY=U5{fco)lw@oOBjunLgk*O|0^h#-XyO%eSC=sBAYM(?kCP0 z(QrCk9+-0K4m51hG)y8H99a5PAQ6sXVazdX;C1!H&W5*6agT7rDme%~JfAfDM?X<+ zrDgpjz8iPdpK|Kj;=*$HXacTDasIcjTOZ9K>YAD2D|m*fRc+1}x4b37h3)DUc;Y(RWzuj4bX5D{+>+drBk@ab&Z1?Oh9s-_6u zG`ux-hTq0MJ_PGlGd8T7k52^D*J;1Ca|w(K-w8a|CNlXvlLMfU=Crm8XU&lFt_LI? z8@Ej}O=;=qW;HTL;K7^eAI!*@RI+EoNt#>OVfI69XowNfanQx)BBi9nlOO9nw)t-7<@-2g&`cvb=3HU>!9HysjiLOeAM!TBW2Q zR7+fwUxHL6P1KMSJ**cCa$l72KTFT+pQbgK_aqNXM;8q~ropj~T!L&WlP@o>rimxo zL(BQ#1c(99z$+n4=|{&VA=+7spsEx-f&lHU>v2l9Ov&Fq{6Qj~TfNB&7;%aZ=#Vx? z25fzCeIMEcjs-qOwhy0=b11Hbe(6kwkN&8cNq9=^eVjG^cdNZH#;u^T`0Ik2oOHGy z&Iy2HF*h^l=3zsN)X8l|YiOiVaMe!c?L*fFpsf4pl_Vw5xzSc$?61g(-@r{3sYck_ ziZEmSSjJp&y(K+>?4lls9)Tby)6@~6ZIl4mG0jBx80*|*ONOYMB1hQxhYgK&17fNU zHn9%XluxTim`(<=+s^Qhd~OV${#@DKmt5WVhkzL0JzbYTVIp#uPYLtm)0nXhcOS7> zW1<7vfBqc^Izfi`3g7~Q{fX{p+B3U+Tx5d!H0vtNFZlyHt0mH5#aKwZUwuwCFf|M6 zt!?<*hIzJb7-PCWz0ZGdN>@3)^%jgfis;5;q*I!==Z$lYtl=@?)wQ;c-e}3)^}N-5 zq5<1SBwk04pP@AX$hO`<0*@{92D_xm(M#eK3aHt^2^j3!l*F{vc6v}1Hu|tOEb}QH zz}xeQZq^IUxnF(cba>=ii;IO)iX8QJ@Mwj`#(I~B?zAU#oj*-QxoEbcm>Pz^WeWwv zfz%_DBV~q)wlKFNNd0Wh(*G>S&dh};-=WwC!=t#|y64Va;dw#F=T>K9tn6 zvfxi8h(dE&UsH*W%`ThGRQ7?ADPr*3IBhr~(KpypGvXEGZHWGDPS} z)hkT?%4TpCH-&cKl>6x%-LVO89Ixd!5UM;VLM?1D>}=-TKcd0X9lt>h;9qijqg{F4 z^L5_g+ZL@ypIYlW%l{DgDVajZk0$#I3bg~oHL#m1TM|UiW}fA+yy@xy)D+i?HQou^ zKs@tqSPmaZ+miqkffcP7p6@Wj0wRIag0ZZ|t>5NU&s=jZnd&vK#_vs{Q9H3k$|TZf zp2^UpJ8L&#rS{9D9c6?8GU2}!VVPpz!AnPuP=P+q&9`o*`)ce#auY3&3+me~`0 zu8+8Fi~C}z2%cK9raP!79B~OHL)gn)7C{IaLLp}_buss65@=Z*jkOM$)#%m?z+QJ+N!iBAvhI{Gt4=O+NmDFQHMC38KG&{sJ zba3-)$3DDYpQe0o?YHjlEuY6zdWMmF@0I?JqlSE|#K1xi*a`*wDX3)V8nRV1U?Aa8 z*if5v;`WJW?tL=#KJ_Fg<>}LbkkcqJE8Wgs^SY3{88>*Hhl_QNj)!?l|5KlXSN`n# zT1}EFk@7!M3zYkgyU&h+O-1q;DWXGR1to2EE?GIh>3cog6qQbpt=YP70sT^6Bkp8v z(N!dHTw9G{;h&Lh)*y;ZkLm)3C|_7%8cb6sW9rOWkYfsrD6$9^xTs1&csOGu1xW7C zf{U6_lqgZH>b__k$&_K{?e_r2e^!JKRzq=UV)Fm60O@DBf&q3{@9Nt%#<44 z!_hbh(485prfeaTtO8n|M4TFHJm#Hagjp3p^+4{Dm=3Rw?gfk^uw2?`uea% zr0{p1rcAu^W?7p9rc`7qX}7~18)K&#vbR$`?wJCw8{ge7j~R9(k>iMJiB%5wDsk+= zesU9#6c)9yg7TUWL!zD3*H}W7F`QLuKjjk`%do6e@OU>&IMEBs42+8;7wit6f`Z6> z8imqm@Le$f+sEp0>UPIynG%KhREy-p`t5eo2d(bDiK-+FGMP^2kRgZXrtK`k@xpldq6+Gl zI)}l~5q!mrm}L_@@dKV#bL+q6gtxyX0)2cn9a%s{9~5EwywpNq%7}HN_WPMT#dckf z6YncF(^1?-QGriP-{iF3$(rFSb5+8KyEHtTJ3K z=UAIu9KS5tGn}~bkB*PW>LZtKGE#G{{zEIaXNe*btbvx6Ff~-|&rhi0TSenZJD>I< zo)jj#-=W>_-d*iadf^1##$o_`<-2qol`wIrwDTB) zh@QIhtJ&PSiNe8>Q@D9ws$Fj;uG|@ba2;|)p?cZ@RkqCsJm<2pitzeU{IWWKqR^EF zQ%EX47Z;aMufB_x4Q?eT)CSQlm;fQ)9c0a|I`mD4qm zC>Rstvk`Dk9BM;yTt2he-Ts^=yqyH;<}P7O5gBpf5c7$;`b6v6CUCZXwPI1&m!!(_ zHZZtIK%=4i(+EYU9X(j_HK;l$P^~6kw-pKr<-ucdxH3`GWT{69c>hWzH4jx)9ZM`RCZ2^zh4H-?8bzNuLrn9|lsYy1>LN;iPk1eyIiw%qWU=EsFS%=s96UXx^wfs- zcd~B<_DD)90ORYAE8i{SmB%vAYD29=$GidKO7R1R;7%U726dKfL`%<|4lt-fw}woq zv9WvT)S^YKwlxUKuVmZ2#B+3n=l$%5zlS0r(AE@#kxcte%P!1+-!1Mok9&Er{kh#U zkmI{MQCjPF>-Fm*v2~u@hK))@I|J8A2knVptYd0Pim^RgrgSq8;Ad-eFx6PNs;)#u zO<9i5ZYI9!xC>7Ian=z7P23h4MdcYKUNQcHA6AKxDh#dN1)ERGn|6qtgo#HKR8m|` z%$mjM2&3SnZx6FBJNPX`n}LGv6rCL8O- zG9j!9p`3{1GB_>lW>vHQ(C?2DjMFAW%A|hjTwC@$FkNtprA3dES!WSii2VqZOd>GnCKcFdwbwG*je8Bvns8!F3? zYiMhdsaW6LSaeQ)td7Ot0{Hj{t{!fvF4Z=*?VbHYS@^)N8ql&=R#w)soHW$e_b1V$ zgaJdtcmDkwyJl#%{m|KI#EWNkQT`ur28Brwx*{i{sqF^5(=$ax@+bov-_jaqjSBqr zZA1SdD3IiDZVo&N$?%V3KPrk9e0A2CO}ok$3c7-%yy#FzKKo*v?L<0BYQ86Tax1FR z9obA*A`gCdYf|b-K>pYnGrBcxVJ3uED4+_v?=Gjxs!4+ z%H>dwq6j0HbUJ#0N80U|r53D*mvbu{qCmZ?TR2^wJiO>@@UWi&rBA)$TOiA;)+CVE z5sTMz#I}#_6Z=o*JI@qzJkI{rwiNk(k}Vd{-!(zZqYfin+_(Gn?Y-9&hPeuhY@O}G5{QbD z=$lcJm|D|3c;o4m?pslMopuqd;7nfcc+O}*?-HvRvs3T>5xO_54{B7;xeV!e9G*2} zRkGsDw~*EO{>1+@UtHRlV1~j|H^DSv3O9f##A-Cm&0IfF@!DQJa;(G*L9FR_n=UFzc}=ZXO^ZHretHAM?LL z`rPm5#2Q0pFFSa)4)TEy55Q+ekV-qE3iznFO)qdARHhL$+r>hG?nax68_85ua+MDx zniXXYaA|dSGEr1i6yz2tgj&Cj{~~6=Kbfwdp(r#xOXSN|)XT&b*)gyVyscH#_a17c z=A6+TCN!Qr3|2X8XqhcW@xZb!gBG5~2u=e0a#NrLRg6>40m|!}umrBe*f*<^kw0#0@mcBF%jsT$cLoyJ_43V$!6&w*W>CF*ux&nn8V;#lj1`a7cc z@HVW23B5|}q6DKJLaHm(`ZxzL-gCNmMalUdcz51>b8TpL!O}@8EZ}dimjExBl730 znTtlMTRb`4E26ZI>UqCx6gJHc%HZ~;L}MA2u-am$g}WJy0Uu-{@1Sa$?~g2HZ2d%n z8E`ss>08vj@CNy{VXzh!bgL^kc8BALp;?mE4M%%H@7k?)VcJ;9+;jltJgH)x_cH<> zPm}AXvhj+-H`V#*AHeIYqRaI6!tQmdWVORKsVYjw$KjdQG}|{iCEFwTT^w;X>k3)K z&yj5r@-;vdGZMs)&-@$KLT6SE!oWK0VNJKO8oSdD#oZ<%81qSg6eF&#O6f05;cQ|y zc-d)~znYY5j^~{4nZ*)W&!rdr20uY5R1-ar62O`eE6bDD(;#W-p8d#oFU$Yt_vo;k zRU_;k41YYm^Gc8<=FgN&33n>PY*ivtvU%*5vV5kH%;v1K_Z&`(yYEh5>oI@E+1Z@J z;B&+DG4cH){_Z0>4^{pM^#J~GD@)0~B9&JBC*K&Qr(36s)`v$4D z%)#}!haG+S`)EYqaU^h&9oetL)6{@7f>sWwswf zthfU>rt-DZZK>bel;Y&3?bF6$6=&0sxZH1%D?A0p&#t`ae4mGU_JV$Ajy#gg%$Pe< zO~kW;Oq@j&j3f^K*3GS`1+BqBq)n+uz{?VDg5W_tq4<&4i$8GNjdn+IrdIy3po6i6 zJzRUU?K4xJ^0X8&VO`*52!&W>ca3YK)b1DECks8`sqcpT_DGJ(a|{T}&z<4F^K2)T z1k*H(M3VtR&B_(?oMn?u5NGgsinOzji8hbff^_6UN;v$Ri{Ei{+R|m7`1=Z7Dx74J zjcrQ#zp7sxaY$Gout^0OiAF2N50iFRl*1#-BH!cYyl}?wzfg)J;uC>}-R6Y#THSW> z0zRgVPRJOc0I(1N(u^j{vW^}j7P2TTF0R_@#s;a3lG-`}uS9zB+r_qb0vbiM zTUC{fCUfxh-6u#fUF-~JhZaE?sDd?gFHs?(8rXh>|Fn4E=~&3?+jq&fr~8H#(w!Ns!M>YoTd**?vZkNXS2F#=3VfmN5NHhoPmVB|(+7V>ri?Ssw~iCH#OD;pCr(Is)(k zz>UTQ93aQpp3$lmQHlI2#%||zJ%{(FO1!tDBrv-chr-Y?*HN}!0fcWS6`eOxwg=a7 z@AsZ+=Ims)?mPcB9PTWiW`Gr|#9_b+egR+2U=&$kD&? z`Q=!LT)N1}!zlUG>gUranqgzig~-ZF^6*h`Uc*#_U}6rD1PAv{GKcUMatdmYhh{(| zQZcn+WwqHbzp)Bny0Jat__(QYe6$ufeIV62jtutRYuy#nt;{%Z=Enayoez;2KTum= z?@zCD2UvI#k1<6o>AJSqRa5|+*Tlp`q51guICBcU&faMb-xx46!9ondV4!($g?{cqH8XP!m{8KTWocP@-xv$#QyIddy6%r1-r$XR zRh8g|RY_JnVuK;9SBU@IoUY^(hdYu`=MxnVOQRuKcav)iSl(aLnmFfzNt; zwA%2OL^$WCB<929yoK8W7O=y1Yan3_Q91-pz!~B0Up*g;!&xoZxYgLi_9$~Efr={zYpGF z^3k5U!LcQ?YNBK%Au`9FScNS4|4_d#b4al@VH?Z_^=~062s6_TH-1kKbWCnsN~IoQ z!I5)o#N@-Q2=u{eXta$cEnC4h#mXxyM-@7wOrLWk%26{zkjwF#akXnJAEgY>9g zjY1)kH9bQX@96W%^)r~k_prn3<1Xj;#@084cYaV399OzA4#Ka&;#2q<-f)sM;CKzj zr)AIdYO9N0Qy2!|PsL%fFLPW6z?A7cq!0!nc=Ct{o+#@We_fk7`xiThN*y!j_${_i zZ>N%3g)PrXZ4v}x`HK{b%Fe+NW&o{l=A;ReH`BEKcH8+UH(TAj3wuM(V=L0-3=URW zK^b`Y0SRDW%Wk+QUJ=!e0E5j~cSj~1h41UJh@ae?74itv__)Tda{>2DyQjO$=6PY; zE>5hC92HX=aWpURwxy+XUgQCMR$%smPp8oN1xNZjl3K^x!Ad-;BJKK-VoG!x;;7FUrfNTZ=X1N23UMQX-N-7+$&6G zc~x7Fc9o0jUN;vYuF5vz#^ zsvDh!&WnRIxi_zo_C$B8cgwV$~AW?4pBMn=K%HhCn8ziNO*rvL5rJ{C{;^_yG# zKT4QH!0Izq+>ZoCji8cb*zAZS+3&gisjK_h&hxZk`kC4D6w$MDUX)n>OM#gvOy_R9 z%T{#G?5DY|J(g2}zl#TZW_z3ksDPTfT98lYa^+k@vD)0EADLXVbqR;5&1bl^;^>wC zpGXoLUk5ct8=I6=rLufLnZ>Unrfl%Asi~=1i>6jl?4IC0Xb2Bngmk z=~$PTOv5aBG!7-LhH5OLxOR8@Py^^a6TXL2P7O=;LTlHgX22th88iK;%sWsVX@=W5 zwUp88!nUU`0+dNi7hITaT!9iNLJ;Ox=pQY^Syyxd#V>|c-AucwWAN5uvOjAp+ zCY$FOIGEEqu07e$oW(6&f*Qqx38u4Uc;7@7h`UCoZX4~1s@4`^91QZ*#@UR<``Ku` zcNLV-Mu=Y@>F%_8o?}|?np*C}Kc7KQTaUhh7+HARFo|LwDVu?5YF z4DoS*z{Dr5{zgfTAWW~zdF6ohIN5OBo5AV)7k%67+@9d|Xxr}jRwdBh9w(3RS8y#^ zlfc*X>E0xRW>?t|@#Wk+su4Bt2L{*YEkjfFB0mha6r=H7@Vfv9=W+S~tO;%qYK$+=CaR7x!eb zmo3zP@9vp7$#iV~kQOgo{Ue6%Pt|&{qy@Yl{6n7GA79>eV|H`JOIAgwk=>j+tiySS zuqK}Gz5}I@>`ygpK*LwjYG{~0-su}~>X1znAV4ZB59gbRU`=Nd!T|y+0GG&|v?&vg zW)-5SLSB>Tm>$?xyv@aIY_wzlwPsfmD<4q7D?S(Qr_1u}_Pm>Z1_A?faNlcaUtl}r z5ki!yR|!QDJ;3QtbA9zJTK&7;&b$>F8j+)5a!O**I`sZ9oUxAKAJvk8uK@1ZoV~1( zd_pN+HKWyh_42W`(^bP*}O+~6Yy zb#!c#;92;rUVx!E()BJhbqbXwcI#XYu*L)a zi;#5cuwj%(ANrJA&JbI5&N@y5t$OC%OtT@C3VkIq@ed#k&*xM^C7VU13u|VhNv0dC z+h4gHwCQNrOS-T1aCZGLs``j)oVP!BQ`Bl^BW*U)swY!GH;zLkL&f_7Mu`vvX3@Q$ z2HJYx-_W9ry+^9-Z?7o7Y;`qgi!Py(gt;wkLkEZWI@LCFS5JK4)a>TU zDWEG?r~m_qSjGBIFF>{Xt!HT&K?IYUnJKc$9(|0ejF;{6LUnXx0yNA<=BHm+SR84m zrhrYP7Z9iO8%)nD06l}Bpi%Dp5+JTmdk@px9iru$kS~WDOIA~!d7mihN#Yqf?4cuk z-vk%SQI8z`acHvQhOv|#EK=t=TJ6CvloCNa5{r&~N=e5bJ{mr!8ehy9%DTL~tgf@& zZ;z)9BGJ$>wy_DOl)ZWXGj@v2-BoL)E-^N~Xw033SZ!^nf$fgTxCB=!r<|5fAWRw3 z>-aMfQVeedYu`XRh*`Ca8e8h5aXM}sXZ*o2pK`E4y5a=<$_qLNh-+$nU$EaZ`swKz zVbLUoI^3EqQ=myQ!K_+cdAs2#P`rw_PeJ&JEW~x+9#CJWYiqyVg){@W(H>t9mA?ld z?|2Z1=D}{vP3xXS(n^-8@WoeJfwe^+eE0cK;Ozj9Wv0jT5g9*H{$W`qV7$$lGgA`p-JY zVqn-tQ<+(inR3QlL{}m(MbVn7+%Vo^f&|7&aTjetyO2cio6-||6FeXqd#21VQJWrv1(YRUG6Uwx^vR8l&lall&Yo|r*p^Ju*p zM{55a29{ryc6eo@29ILgG1CFIzXe$An!9N;pPos6?S(VN)ZEO0rNln&-zhPR zqpDhiOirvzMv10z$4ok^fM^~Ue+pKg$r)iEDYV8un#o8o6VYxQFmmt|t>r_n!B191 z8$c?Lxsp$dTC0%#tsl7vMFGXI-XNu~Ed{dKGRLHb+Ns8%-K(0@##}3^fPW;0@CXgq zUcBTfoCaRa&dym_UG3qh?l?jc(#4w7n5i*dEMiA zE;|#FDrk%}{Fqg-y%-y{i6PBvCWNni027JE!DY+V*zeCN4&X9oIWUiur+3FB4jH;X zxr@ZX?O^+Jk$VTW?l@zfM*mk8TzLoOh{|R+?jX385~cv6ghS8KIw4&?@I6q9SiUW2 zlr~&YY7YLivPBXacDbesWf{+3VjmM3h+w^XTy1s3(4zJ-H$3FpRsFsRItlW&Fq~2h z%PJ%tW^_GZgnu<@JI>}QQ`Yu*DmZ?+oCnRp!bfLyX7x%+K~n6v69iChG_^nW_g(s3 zMWNdMqhD9tHtN9bA~)uGCs-ZSUWS_JYld{Mrn)5_HUT*{dPU$uAJG2Q=K)I)Z$;#N znpt;$yK!|Gu^zeB7A?{g#TBkn73L-oVQSw0^IiV_Rbm~QSbjMF^u_pAC7GlMswlSj z=P_iLO@>X$z{(2N-K)v-ImkPHWa}N~^Tt&Ggp~bG{GDD0YJYE)pe@$;+CXy$#y!E} zJW4Tg3YQX`4@5EzA$0NVeow$E?f&G97h;g2Hg(3?Rp8;Yz)A%!GI*)agl2plN+!C> zIfDZqMFLo{GE_su^H4Pw3T0HN3gH;rL~Tpt=F|GB7h!2srV-oUo(>5eo?qC0<-uyl zB$W558%7t$LTE&rYQVsGIB87$=>N4#nNgNIp1Ak})8D#6uR&sE3^hI<9X&ErPV;Pc z7Z-vAV`j^=wvEb78chM#E5G*VF|n=h$%WSgOU_ZY=cUjZ>gE;G$-N!k(7`>ry)psB zrp31e>`1J#RR_I9%_tXSk*RyV{ef zPX4tUmnJAqPO`OjZjgmT-M{KUy%RLg#ZnlVOJo;@w*Oexz*bdE%|pcw#A%;mmdTs& zR%&PeSI4Am1JlBRA|!9G6HSmg(ql~caSm}@t-agh`(80QHC<0F6luLX@#jM?WGW&B zdpSPf6^W6|Yq;|Z?U;u!F;e9G8b{b-g!$(+!jfhV(_w-J!TOJ5ZYt||MY;^?$fD80 zAVRmpJMO8t{@kFSE9J`ThbE~;BWF-`1)hVC2-&7ACoSd+eEd&ka(8htALtSAj)V3R zJ>p%*S=(xnVl7Wrx&xdMHO9|V%-+i9dINhE&?H7*s zCP0qMTHC`dIWP1AuMs`LpugqLiaxwp{o!LPj75|L zVEjx{u-e7})Lbv`vMEE)kU-?6neY%iXKQOrTMU0+Sc3S|U$vg`#~eOk1ralA;v^*l zmis7OkyGSamq*YtA_QK=NS#)?8U7sq_Ab3AY6WE|4tv90(Th`~?>T$JPst!7_xJ(Gws8|z3K|iUW(-1}JL{-_* z?{FVu*};ebP$LZdUaRoVD!_>ROT&MY2D;rv`egm58B{g(t$dMMaL4dezg8)kIn>}q zVX~P=2&YR0V54lksvtSqmh6$lc65Nwl;XEiW2#a(tzOG_(SKAXL`Ps`30 zlaj1iCIb#A6Sb|Kg7|w;oZ;-FcmEc9_P!piMs^Zi1Z^0X`yR~a@#js?9YxNk(#Iw4 z_TKZn=|o?X8rhTq?F3-cthLjNJUxYb#T=={7p%FcxAl$im?tj{W*xzh2t&c?(M*Iv zS(h(M5yD+FHtbO>)02$2u@4E)VPQK|sF~iYv0~&qL!n@gZW-I~N+R_m3QfzttJ{RF z?&*{$I%b+Ludnw=N;)+57Yiy7w;}$u6EbmJn$0zG9|t~3pq-zt9++U5`M%_OYIB|# ziUum!q6Nn6450<6qO5FeL+Vondt3|tRP72mSr^~9dFT*n>8|^wYYe0XH(PG3k@VH< zHVD=Vu@dqE`{t;SI`8=T@9uIAcILoJmoo+Y49c43=>Yw$1 zX{zf3OFN+Bx;b?41fi9oQ&{A_2Y$8p(Qzdfm9A;7iJ3!EG*HTjFLRQp=vjIAa0y{^ zb-#vHM`2au)k|@J?jBwO|5pg@JC{a!a#%tdF|lcEh!vvC30J(fWT{jnjfALJXw*d; zdYN!?u~9P7G%b{Kw|&+;L+4;$0Cd}aG|$S`*3s3+gXMq9D-%<2V!g5gZ0YhDAdUOn7aWh>Wu~Q3 z0T&oBV#r^#U|LGoGyfF)_*>Hxe6}_Tl6CZX2CK;y7#Ut8e?4Nbf82buds{)db?TMt z{>0DZtQ)*~yCeiM8@$7RJlb{Pgw3L#WccGwGE(~Mf2F7U+TYJCI_8XLe;J%{Z;9mZ z$&uNW@VSg>qBzdH=*5|{rV{=W_5<3B7^OZjK7dFHt)G!J+#sKkbUv7KoN*X(SE+0% zO^H5Q3lq1W{%V^NA#6XES7s~$J>fegvHA+f(D@`5SVZ`-;*B-fNbn?b2zEeW03BWV zKl1Klg_=d=I2nQxbbEg?Wp^UBc7!zt412tI9VDc9NZ3lssR{PtxR zQsm~3l)Qs~%%`^+~HL-XTP?C!kDr5smgw##Ll?=iyIhT8wP*5r55ubR2= zg4x*h`HiCg_F_GBcM#|Vr+P;k_!5s3jC4HgC4`q@%h{mb*_)B76)6kC?g+95Y81XCK3Nkyen@2{!Z`=L$|`mWuBB^?XH;yTJbEajNk6nhc} zJV4IKiiY)pyfJAR`1^cUKHuedZv+wPCQ}{;ZIHy1eAi0}^_>*z2}2m~Q6{^$8Pa$J z<)Lc3-p22K$xbrzG;tyfQc)@f02^vP0hdQACKP|YUX%!rWL&p~2|rJBZkl>Npf0M; z7An}{&x1#7(950Y)fCDt#g@yBz9tWq?sHmQI02k#(lCQz?Hs`p=_w?MS7P8m>scTy zJHr<6SCzpoEpeF1%H>;2I=X~6Zqf+Huo?xCv$}lBOfsEAI69Y%j@jydB&kCGZ2gmnz0Q|OMmYAfwLnC04HpTk54 z4l}H5`A?kA@|YUla@~Lj7icA{LIQF#8sTCVxIFtrq0n>ZpeHly&Sqln7j8`!ecy<8 z=?LD36~niM5dP7;f)>5o%pX&+*&)Ug4n32%yMl{Bq=JuYFd&i`=u#=j9*bSv0q@7n zkgJaW^0(cdhrT~wiwo%LvQ*UtC5)QHX46kMSh{8hW@*96i!tbuBXUiCjo4DeX73VK5X^h$7PD~%+9j4F>>ttO)%XLG}%kkTw;gyMr z58^13zDV-nLi+xJxe#i}(?4!3NgOhmywQ0B&IQblCz28S;PK;3TABeoHn==q-jP0g zzDYYyW_H!0<;(a3>?@CB9!~dL(%&z0DNhqUZ`2H3_o$06eVdle%k-VNbLoD_P}1rL z?oyeF>PXUsX3V_C`s)N$nvhhiRUUsD@e%xWJwtAWy~?cU#$#g=MxtjemNb6%OcR~g zwQm}4FPaxt!R&jTEMdhSfw#ZY&CvU2+N|h%cL-BlD!GCs(xs*591UjJP}Fc*ou;0d zrnI?y;B`@way!RsZF%7`)Oew-p-gG-;li{teY4`-7W9PkHuL+doHRLT)nk{umV}Ra zgDnv=ary^eJYmg$1r@z4ikddj*ieIAOdXHEHD~N9M-T(5tPdf?hKfr}z2kfXSMUys zSPa|*`3HHp2k+aAx7QvT;r>Aw2@HI`4-&CdaF0B@J#(+TUI+bfe4u@F;xs{bo|vT) zKgUC*ts0fpdY?Mt=Jb~+QRD?CZj!$g3w#lRwjpAh`^P?)h8yqAE!WQsUO^?<9#Bb^ z4pq7VL`)qyWpBJ3+LBUK`6p1mE~cg-rFJvsks03>6BWkNXfRR_8_4lQXzB5L>!qSk zaz0j5TJL0R^A>UTb*_An&N8fBJZQ9kuN#?c^Ve?xxD*tZc0L?-H^IKh`QE0?dOrrm zJ(Zx}v!rX?l0>X~X_wZr;tGwHUpFm1n}ZE7hzHNK#W(^uR31mB!owOA(y5zmI1S!~Lq^cPyB5>q9wHln^_;w9Zv0Sa!LUyN- zWhtAnvqO3}|IH~bxinZG=J!}vq$^kU91bEOt<0*cvNm^%e}K%Q1C<2OuA*f>T_=z=`U z^zR%OVeMGlYKem_G$NbGRoH9CA@l;3n?&>=%s~Y|k?W5UUw@F#(LA2^+DPuU-~lmE zhj!#i6p$O6T82bL(e1IC+MBJaO3m81hD462hDE@XliG(n6AktJ&kJCf658t1!(r8# za(oPg-4h2%lOf}A+L^WNu39AZnehN3w(31EL#?%|**gPvriQBg4KLLD*Cfp(sUlec zJiXvP34N^Fh|l}uwtolq-M2|KH&eF0F!RK64?p$yFSWi5z>O%P<@(1yq5~Ge|YfCC#JwmheZinaCfa46zQx36KEg!$3MWu{x8T|n z!!b`9nSknOthFM0YB%RDxYP0E0;xsKZCUYaYKmF6=JxiP1&_}sP)*l6sOgLb$iZUj zuqEI#OUOVtl<@a}1UcqXQr@DEB)pv;`$UHjcBhzZ8eY5@XMf%}(&lI#y{+E4VT23~ zkpbc}w$=L4{ptKd`M1liN8RC(jLPb2hm)DSO}ips`n##Q^WUsO%W%N1ITZ*BAn>{t z1X{NX7hKTYiAx6_mqVcERaXix=+tE$z!Sgq8tUu&*&!#r*F9_ahYJ|dq&$lQqaz7v zVu=4@p7A(ab6k1v8O?E6_*f)Si`|+{JUWLeQs@<7aY_|%R`nQH=q4ZNJL6b=8A$XO zkm)i?x2o$KDeE_L=)zG+`Rv&0Bo)YuZMgzfrKs74sf86P8T(p#Igk&zZ~{U^r;26*6K5fw$SlQNtG@ zkkiDHd4!G-dNL3`jg4^nSiy#;PCwv8iABlw1cE)b^A(#MwSIm;E6BQkk-A05BHi$L zy>RLv<1uu1PYW7yMzv@)k7u)9QkKqHqSQ(R14*p|m};s|Vl`1evoHOw`mQ3Sq! z4e%jU`q{A6|Lbu=hU@=mI>+d^-o6XBjcwbuZQI6Vq6r&2X=B@Vnx?Vc*o_+7Nz>SB z-t&LgdcMz>S?50I{$cNHv*M&-XWOFBZ=7Sv2K-4uAqHtwFJ8U5BBs+K=z=ay66AAs zJ}vTnoyNn%^SRx)*c~AAr31n&tQtHBE!GfI@Th%MdA?!XOSP=60nXu1+0Ah(4hI_c zO?8e1St~1=S={*QRj4~hkoY6mK^Nsz>R1(JjeRMjLQQ?x;gOM*Ref+G4UN2M+IJl! z6+(|X#~eA*t_Uozp17^I?yaL3vsX@`HIY=4YhIT){`#A zIkmX@p5EWIigI&JoX6Sxsv(q~rMKh)4;C2qen$B539MzSP=li>pGrc`jOGa4j{Ex* zE3uSX;j5zVPU7c+lB7WPm+)w?e zZ+d6Px`_#0Bg*wTkooy}#8IiqYf)l(-RBSVNc@}q=0nfJ)ltwD&cE}VAhqnRuJ{L2 zxhi3eG%VL>qNPUmPH%J^efNQnKDnQ5ugE9zSeq5o&hAjGX)E-50`tbk#wZ%~DICJg zs?diy7VL0lW3n>y4|Wffpqqj2ij{*$Wa@sH7HeM1xUHc-sU(774tlz_uA?Qq4tq*B z@9uO7zaU?{o!5mBr10%GlYV-U0YODK*4(X|YhE8NzDD9HvfdNWlsL#W1O`U%$Jdwj zUpWj{3}+f;mWb;1(W~@k?CKgDZ^>W>E933cj=73|gcU4&6n#8IXu9{d(#l4ps+(wL~mWLU#FEOYO?9_u)nO`MBh-kT?1@r-UIxt3%s?z&&~@sb>rDTmNIQ z*wotQJ@3Ey_ZPFrxr`pk)J^#0wbKvy-R1M8(nq5W2BfHx{oF-!-{v!kD;k#j(XcmU zKcswoaTfYD`Ojya``~*CfrH`S-#A<&>B~WX*&&^B@ul6Hv`A8zG{;FPsJ^!?Eu+_= z_T41w-k3?D-jy==G?Ak-M$S}PQmb*1dx;@8O0QE(@3}UCkDTcag^XCa9d{o>&INVX zt!m0`N38yII<76J%ixEXK=4NVTvC&f*rOluSgQls3k*dptHQ?@VWD>o||W?ND9t{iS;y(WVf1Uw~HRF1|`a* z5<>>zDzUrG4El#P1KS@|o10KaiX_i4@fTuxYKg?XsL~&eNFl6 zcB3?;8zJd5CwH|sgKFIgK*4g<{~| z`PpMpcM(_%SFAXk?~09!4>i=YnM4rRIl`@7)iVnqOJU1HMpHO%rD+gch&lO$hH8O* z_|43~!_5ewee*x)6$>F=43JD0?(0Ta)l47vFN2m{qwlm#7I0EX9_=JtbNlQ-B!Q}l zO5{x-lUy8biw!c^mjA<35O9+co1n+;(+5In_6^B1mDi95Zfel7wWn*W@01iaPHHtl zDF$Ax^JSh*ptP4GT&u>;Cfo(sI?>hIEyqT8x?z2#a98j1m$ODZ{ad@qSha=)HH1%a zX}Fy;_nYv)o{>yqGP?L; z&cSipV*0*Pnt|mO6Z}QfRsH1}y@v1eZQ45aTK|YDnABZdRqcerNkKo$U#>Pg# z_mf&vBRC#-TXs=K$x&w;F4^;$MAITDc~sI|~PZ z=?!D=4mZy;=RxfLW4=H@xS%Mly8d|a4o_WZ+@1k-ksP5)<$F^dTVoB081LTH zy*~$usmyQm-EVTWP;8N4cWX=;SLrC??y6gf>}n)%in(h1Q<0{SEgOp40!h@k5l>ss zT(FDG?(dPkL5tnYlUe>)F}JY~81-T$iPKbc|L9{~mlm-n@b~YJ^ZO6t$Q(YH)i)bl z{q`iE{7f{%NUxn7Ww2$8yM5ERr&fBsBcq}e8mKF_Vm=!aE!`-Jb~_ij9*05Yd+*Y< z?cHO&zVQ_RT)rnb-CD=OTtug4$z02Wx89MKX?t`N@Ykt+$(Vx!uE($#BFP>6*DTzr z?@H@P5mKsgju}%=fnv;15vf1-vnMV0DajCJ5Nk|(6nVJdq0$z)!F#L~YPAgu3-nA( zN=y{=&q9MPE5wsHmXu6fC{4rPFu{jterzSCO8DXI?p3jNe`mAYYM;HiLs_Ez6V&_A zE38bTk9>aH@ytn7s>knnN2aR7E2TnlAvSRD4%QnzKFW#p?_C7Nes{*Y7t$6Eb5!bh zGmX+#b}Mawcy+k@1!Pxq;Nsffc7|vwm{rbRM9}DYep_vH^uw#dAEL0C&MyG$1u_P=<}b?t76{RZOLj(XS;V=q}N{{8KAOrsRk(*fqtj z=Y-V(H@9rH>4?5Mn^?!i`#W~<{%};BytQUvJKtDc7V`kdG$T~f?dyXWX^?pL0<@Ys z2LUgTK|BG7fYaFlvuUE)^Q~O_jY@@W3*)Vy5wLU@zCVAs{L^OzJmBzZ#jgv1$~R;& zdv7EG4QGZxlOUd0K(gEPUKdcfTm}T;)ucx`dl+~uHNd3fm+A>+;Ax&0 zfF@?U{@Xa+;OrC+2sAZO{A*0QRgp0NN%497Xm8;eZ4dJV>M;B{5{61|inyYI&k=W;FU9gM$nPjQAn3NNsZ5mjRi0jfC z7b`XQeZZQyA%$+anGuxD9_c%H^??Sa+Aal{e^U#D&EC!>It7XA2q@E|6=8iJx1Mxk z_mO0DjkVFjPfVv~g5~}z=(F2E3Nc;XET-e8Y|V5f>^c=0dAc)uC%*8xJ^OviJI86R zU|jJL8e4|pqI$s&-%*^%VWh7)fZ1_}k!b4%vPi^S(EIan7}mM-#p$`5^v*Etggw){n_I4BWhw9e+e*75U?miQ*&4DB-x%R!5 z*3Wyf$_jm<&ll^-)x#Yi^vec@jLRrL;~#o_EymKaulOm04PY~ht$Jxk+Z%|l6$h^!`PDG*e?9A$3;C{E}mo?vd1*XT(0Y(u}>YsLfZb$^19gj zO7ow|ZRWcU`l>l3u7tW~FReh&zO=z$%iuul^;gg!8sp^T88|R7s`4bDDH{tQXj5Ua zvh+rm{7fgL;eI;@Bx<{O0Q0A80XY(mq+bG#p>TeqX#VUo=;;$s6<@!+KRpz&GqW=9 zwzJCABqbtee%&RFCOLa5e@y3fu#=_OE$1aV5SQHre5Wb zMp2J$m7<#wP3~xMUA5Nc&3_Lqgy*a6k#;gBFiP>qYB{P99z|1|BWhsvS}^}ii;O5_ zxx%(0GB6%z4cRyPSBLeBW`+Sz7>RbBrpnwYcn&)YX_zrZA1bFgW-WH1ymE~dB6hgY zs3#Bvfs?>d6G)WBj!)QwF*mUEiN~Ztl*SX#43=L^k|~I|@MG$|pAP)07Ia<0JgHpN z7%Hsttqse#{c}EB(3P6OI-krof~o(GK)+K)-O|DHADsTc2yVh{`M#&dTJUz2%ZK2?4~98ct9V*4EKVPi)SJCoZYr#Lw=Q7)2Hf8$wwoDlnXOXFsX?9UvV;biNxK8Gx+qq61q;eh*Tw5#?xGm$!8^4(-1Z+vgDd zw)0>HXJ+Mt>>WeI?ftj^8~};MZG%H;6UuB;jkES#UdJD{0C7Jv#VXK|^!5j1%H8-SA3~dDKZeWYLosVIE#{ z>Ts1dQi`Cbr;D+?JWgO(t0`9!K!ynR`E1$&)pB4hua1cr|eBfSLaDf;9?5ew_s z+kakF!A}&ow)c5gjfXsJO_8*c(44odbOmNP`NbHr{PZMYwgRV?@Px>Om_?*JmO z|Ia<@R6PQ1xnXSFlPyWHN;n3utd9KLk9`TW`7dGgXZ|v#g-9wuZH3gtu`eTGip~E= z7STbyYUbRlQtvzRVoRhR?{Rg_%}gihK^_qLYE#hpQ)^myKy{hw(otH|yaFblia|M& zhBy`=vdND~2qennGzABDI+^U7{aXc!b|@fX3)CZ>bzE#Y=1b~rWt+=lRcYs99E$hl zAeDlv4LeOTLccq^FTP zew{^CNGZ zf*ipi)t)(hX)^X;h^t5NO zaS|D4lvIn^$~O3GsgXs+P2!3Z{pp{K?EKY=W8m{VvT_LamICkap746FtC-Jn=t$gM zL~`OL@VxIUo%a~~4i^PxFcg--2mLZXh#5U$NbLVzv-Jd{!|YYVZaBeh0ZFbA8mbD| zVb~1EUE&Hdt(_r9ip)t8I+z|y6Hv9M;z@e~_f9`o|NdnLq(*2lF@O^J7ICT8WcbQ~ zc|_KTw-N)pUus51U40*+M)O#C{z7{2Ep^jV8FNVfgk69~#t9ixR8Nw@9=)=xIok_s;ksLE_kwKAgm)*i|kFbT4-ax&I-jF8;>V;OIDJVWvWbY6%~tOrkq&wf-GnIJcW+Gja{yWinaGv z3J_X92zUj;oOn|kL|0+QV@FDYL1}%d_@&&B`IHLJzq3Uz0{&wB%h-BFIq$epHN1m; zQ;iT-&=4mcZX4*>G{?}k^LBy(t(Y_K(wC2NmflA0#&*r%Glw>D(3m5I4w~=ziW-pa zwwcS& z{rmQQb*s5h`1{M&yU^y-xtFUsgiI($&!G33(QO|5y1ilp*g0MxJoeglET5L-l6L%1 z6|9r)SB(X4n7^K)YcpXRV$spKbCA%KT^JEyRGvn@xb0^vx3ChcrBW}_>;Wx2nCyK>XCUgNvJ~m zdr#|i?Y|MTz3vMiI$9<87e``*Qi|z-cQSQc@0R{_Tpz*)|9@63e0u!ve|&0;yGDzk zlzuaj%3$xphp;o$u;UwSzj#KuaKd0SOc}%IjXjG_(<;WqJ z4I%Ze!aw&3vX&E?@HDI=yw?5VUM~EE)PnxO+?%9ncad)4Fs(m7hOBd1%QrFJpoNys zSZB)DpcfMp3MirrLgi8p4wU;fG;#G9{0>O;|FHiID&N&&iOZfb-d}KC~ z;${N5wxR2u`}95BmV>uQND!Fc#8J2mwgB=JKG-~?Lc}hRvCOt9yVPfx963pG$D1{q z(_MWP(dwX0G0_@9CKrrDIIXE&CKv0t z6x{Ll8UDsPi3b?zI+t@36~O3yYz&AvH=@Tm(v7D<431W6?Hssk))AiG`LmEVSMH1u z%H1SX_KiLs&e)_oSQFQPlmnhe-%|joZrnHmBYi3zQyT_^Tpa0r;|SOO;Mj^0K~nSM z2YKjJlvXRJ0LM^Imd~8~7tHLkFqmlW;!)qpNtNUS0+-x5LLwXXNT7%@o-SLum|Hog z(9!KMz=}~+nRjyD9;J;yRhw~qz@W!Htmu=5$Bucyo%MkY+uh!UE?*j$55KCXwaJ)n zSXcr5*xa4zr?6`<2fq>O=GV2<%T}z}I9cF=8H|OKg{Aewqm#ce)2ORg^Y2qqw_@7O zNhluMa3GDKHIkqu;*j-f_Q8L(veLHS`#o$V{Pq{D)PX% z^|JYZE_pp(ReSwrlYg*!$73qumBgf{D-iUL5|6EB<^&lSfKzTbNw*Ts66RRFtP*xzb$a*3pUM+{J zjAH8EtcsMwULvCkD|4)i{7s~2*_o(^v2Tk?a6d1qQ#RNNhLZ1h8a0}Odus$X>o~(q zc?7t#>uIX>2J1m&vKwt(v2mqzW0PW9iVcTxbdLiuoeLYECX84Ms+0&{%QPwCwSY{DSkKIS0;(ws!EO&z{}VX?@{2E}Y%1-46=SvspaG0KJ>ybZ^9yyW zlBf~1w6tFDo!@z#-_FG@%h+CN*m}J&@{FM46Mo7;P-NOcIh0Z>tTiR!5h(Uv4OElp z2Hku#n+=IlLxp$mjd%GHo_R-kM;Bdm1#aM@P}rH#4`Six^k*8okc`Ji z*!UzWNV9UxkSoa-lX5cdPWPOdQ_1^6%@rOu9BB0aFtVuEl+&hKr?)B6rl=#yr7v4q zE%yjW8-2L+M>3&TRNP(~DKf-{c{TC4E{sr?)Lm@BhYnC)qnLLcw<6mZRWGNEhb3O` zjbH=X$o={RQN?OQO2p@Zshe(&Om_J2y+K|{cvGJz?w1FW{UkY3nQ>y1OnRO{^-RGt z&kSe(J){2~0id%iuS2Gk*BXlf!01Wf2mnPV{Qi3LA8*+0=ob)bHF#*9L?5{Q6%H^2 z5y#i_mr&az<0a>@$D&8=50L$1mrKaoukF1u>3Qj{SYCE0%wZ)EY_Tfl4q=y<--Dk1 zJ;npS_rZkk{VT=IVLh?O{E|}(%Y`u1;mo@C4gc#D8H5nX-g(a)6ID|gWxg&o9~}Hz z>Rfu;fuKMN-j8NijOs_X*+z#E^f4nJr}eeODaoKfeinh%h&^CPq|vq`*Mh=<=ic~q zLcSMTh&RIySNc@}ToM6s7Uz}y9#*Pw;g{TRY|z;HV1%M>0iwx%c8dMAqpne zhpd)pU@dt7uz0e)!7(^Ml;1Pa+WQi)*qVJ?0zbk);TGitfBlMn#N^f{iL zyT-UP`t$`q`zIS-rI#c9m+bsJ2^ft0i^iU20ZtR4bd}x>&<|aya)Nje=kYy08Ck`? z53;Wb@e++97H+vU|I4}1UxQU({Cb_hCEirLs(jSzhLI8d|@ z#gd!&NWHQ004<_cC}?MuH=6=}FHnPg3X_p0f&CbiO>6cvuJ;HS4_G`e)|7&(28NW5 zd`?H4$!|g%F6x`xRU7Na?(ccw?k^-y?`)e5-HA|)TVs`Dpfeq_ewYYOXX%+12fPu| zY?bGQIz(`!8;#64-m{QcZ1q4r24)q!Uq%@72SovcKDVPhF9}QxYMK6AVJb3O(PH}k z7Dv^5;jtYky2mFsw#({^zzn^hCs>1;opd|f_I`GrIevyZ^mwQ&*>$uNIgYhFRy|$a zQJJjjG~N@>49}_rk@Q&;BJ*KP9`xfp{OpeoaK{VyEPA8Wq`qS1sfd>86xjOdac4f6 z;VLYZnpcYa>2VC2!%V1iJhohYNpCUAizD!GA4ky6%BrlWde-C1yy=P>Q(D?rdVIO2 ztG6L|2pRs5JR?oA79pCIp#+1OAG?ZbAh6R-ceh5se7?NkW#zUK5ERg(RSRbLuQ zCFgcfo~BeKm#5NH*{MR_;J$Q#lL%La{ky_5eH3^z?|ZMiOpxxl`!W>6IwR#}c7Dt3u(49OH0#;lptFa*UIrpyb(rLu0wYGF5(&<_Y z+_|neR(~A$g!Ie9Agh+v;FBA$-Se3G>uazB+F^YN`1n@Csz zIvL}Bbi$s~%Nsq_o9z&^n>^>hh^!LK~=sI@Ti! z7fj@w4e#oJ1sg)Dz+Gs_gaz}Fh{)c-!Qpb4$hq!)8&v$wynzJxssa<`)K4NzZ3hKU zw-o@c1Ul$$X=~qT>-pmw{qWs*DI^k|u$`NO87oVk6GkD|_27>OFl&x3q_ArJ&dC?7Qv6*-V4R<`P9Rrlog?nC=Iz!n z0C$2$H`~bgZH!4d*9g>N+Lx7Gm?ZrJhGdmieoc~3gm}YRnGv>|Rd)q!z4gfr2}xU+ zYyqXsR$sQxjDf-vJY zy>isNC09h3}VQSJ<7fsX%t`HEPtt)HY+R*v$N zhOEKFw~^#Yj0oY(CT}AUYiWERWtJ=Bb74XWNTm#ugsreAEQfSEa~q<hjf_c zI)=((-!pWw+D4PxHa6L(PY2#}`M=gD07bj%%xQ6w)|E&<`L>N%K)7LbIJk4j@8Vi# zadC09Ar=S)aD9J!n78Ey*402=mQR~2IecoBcahNaKaMEJUsMPu6z`MHM z<`NS1jF08!$F3X`lfl*ifEs(CGr()2jJgA3B<#{?Bgd|{GoPyC z9Hl#_GquW`4^xk532F_YL*S9UBGc(HAB5VX@?I2^OKr0y4?ltYnwDz753a^*MGRQ! zsLC_84-jrCSDldti4Fbd|;2piusk)?jspMR}=&Qv*lM@||B zrq>nXtPR2)SBHEHA^1)%4-?6$HONu@i3%fqj7$2C9!aJ8@d~+RfFSXU*lWnv-d8_W zb0gGhUHi6?4l2@bkZj|2_i%1h4i6M5yvbk6c#+~1v)nRts8{~~iTntSRO}Ww946?H zv541744Gz6@7nyIIM>$J0K)yp%U?nl+x$aYLVSE9hljL)NIffy05By3YAVID{wyvV z#MBXWZ2tJm8LkbTCboxy6o9eOfzbr z6Hj3vl!(u1W_i63>(*cf<(`ejypUXvcqF> zcfxiI8J0|4%RZ9DfoVEcKhaPjd)K(bTqz{c&KNd-X6I%CUpTpBFU0T_3<=V_J= zqV+s*AGl`0k@;la9eDie3P=K0YjbCV4o>c$^9bj)Vm>%HI-=0%iUNjVSaS!5*b!1c zQb&-rBSs|$6Tdfa-Dm1L9eUhwpNjy~PoG_E(i!;kYK3T%sDu8rz% zY!A3xw)SOS29U)zuS!h1!0Ky;Kw&Zu(tV4cEr)f9RlPXZEsm zy%$cP9*c}90sELb`2Gh<(>I}rresV*)Y=1X*D2u4fx+N)ml2W@n6l;H)C!opKD<)^ z=8Y9l^&#PH?kwn;9pw9|p~Q{p0DI7W0GI)Yhf*hojw@&>0dw?a3E5j@)EI~H(n0e) z8#puiKMU5WUhTZC(|;GAW{q})af5|K?E;hkama(K!xpC4%gKcQ5gc#?oj?S*KG{W} zZQr5Cq;iW?=rD0UWmlC7GU$ED7dVHy93Aa9ejq5We&Hq^78S? z0#<8K6F*yPusmMcYE&vsOAH&xJrJmEIq4j@PaGUD!#O0m(8Eo|x5B<^6ci;N%Bz4i zmsUoxeLIz!x+Gp!d6VWTE}8w8O0_+&M9{R@22rM(iDLDPThjTCLk04|Gf5m^aEiMS z%cO80r$^vkRKiV!*_+5c>9Ud+IK;C;p<9zyW#Q61vrvN@)3_BK;lCIQri=^$*IV@3 zZqMwumj}0}Yb(2E!t8Pm4vxOYY0-(@T}qo@xkZ2*FX%lGDE$5I|L&}}yRCctanfc5 zvE2vhv5M)S*x~oZ+1dQOZN|xt~}3A zwF&NTf{|}aPbDzmN%4V?Rz)ClJKS(<3p-xLHhoPHRtZBGtK+S*IW?_MVG*SSdKr9W zi7S@M;iD(Q0Dc9?QyvS&>_Mab$lXa|iRW3P z9ka*B8nLIjFtQ8Roa&q*dc953D`^rkt;;0pT-sI(|o#q?{sN znpLLkEOe594Bb|JR(9Ub+z^W$7>vAXQf?1!S~Fpcm#Z?v=4oAH0aTh0G+)5>*4W)H z<6|8TDhhp$5m#RVy`X_6A8nkyGNdfUSu=%&fJM?*|<{}mf zRO+iw7hoKVe1__n;_a3oQjynWp*p^W_XYK#Pif^Q#}y&$U)I^I@q(K+xY~6Gbl8Yy`0tW!whH0)y3sh2(VITx&eDRNmY0#--jahfN zSq+zn$Uq^Pg*v&aC!4axL&D{oS&!l(Py0&<8rKX8a!{;@ADZTs!+&Z8H?g3kg99RX z3VqXd)%M-SrlwF<_hf!TkPEXEU9=`80cB{RvD?!lo#^1k!`4tj&^2?=zpeLdw~O2n zSAWHPneR9eBixgh#yPG5$WtvVe;z8!2q5T`S|Q8}5FS{5Bd87|s2}`vPNAi7A7`x- zY#Ws{Pm)HG7Z*_aO~qSR${T{R2dj%UC0bT!=2;q?@C+)^_XR;VIl|{DvK$f>61bkT z4J(-Vmtw+Hccld^k zt;mSJ41$S!@1T2MhbFon|0W1LEc&1l=~zr0$l@n`k6m}i2!|DHQ|0(xost+4;GndZ z->G`pY4(hXCicv(kE@Re3)N7VxcAh9mM-J$mjev2)EUwUau5Ef1B z^+PA#k@ufUo5x=dfj>L(*fa@pq^0QMY0@FdRm3WM^2rvj?B_C6|2(t*#+p`1^2(^D z;~+~gaLsYEl`>~@5VCD>oSn1Z5|1#LQe~BBuq&br45mhBW@_VXMa*4mgy6CSk#+hO z7!0ep(XwYQIDSV&W|)*EfC94ywqTSY{pl!$hGU zn!9xaeNr!v1GWF$NM9Z!>K#)`=LfHae|6u{<~zFmeZVwzL?jNhR;nS*{faHfe6~8&`@Sc(J9w4yIu`WQ+wSj?W$1w% zCHrkf=GpM8W9G6c!N82VenYiZxD+M+(;Hm$v&%v2G2qV2cp_N4~iA7JLU>yQ|kY?A*LzaU2Fa7WPOd z_|!d87Pj&xatboJ;iylkT9B(T2;*x%r9a03AA?X zL!mvZO(EH=gql4LX>P$MW4kE>=poZV=Um!Mq7rV^^rqzkM{bIZE`xz1*p}xQxKKo0j$N(GC7l~!CyxABu zlc=Rg;oLB06fcrGhW#%r2bO!w3pOaB)j{3WpSxPA2Gb4)FAWYp&2_80^{O`LUE!Yf ztgqSOxf(b8!#w(rn)U5TBWJA|-L}(nt^ds7z^ffA`_jk^4sZ)0n#c)bW@7yXm2UO< zY?UVz{k8*2I4Blqtvwu~?b?mu&E}EA%&o0qRroYIBr0{my+<5;Vp3&>N8@Qq>j7I* zu?wd%U&qXbnur+#aa17GpsTL3j__0L-D&FB%>3N{=8CZc0621-srK>~EwJAZACr#3 z$9mUWv@(h6TIH}@>YU#vGi}L9-3gWc#Ol{r=yg7U^$3e4X3E5E_e;2@lt3Dzx}4$H z+B!}NO6Ag>dJjm7@3%c|<803atyX2%D`0Pf5=Jp@9%_Cv$dTC+4`#9?#nYk<|LLwQ z4V#^eU;Z`rW|pgQzHS47>g^d2R#*iqG6;s?FL}7E7jxhbeXM6zH?rytCtzq9_#$m} z94|Z8`jj{Qt_Gk-)av;8lzNv~KfAd|=QH&eCYI_j;v`e=JRejsvz%3!GGT==z+!Ik zC?ppdyFD@^Q2>T=84XV6Z~%HZ1riccs01&wF&+JW;+~Q61@L|_(!gcWNMC&z zm?0plo&6i?@MFDj-bo!tP{}VI2mpa5G7>OluzBARD5eMbIHpBGLNtdeG$X>E1P^3g zRM(sN`&JEO#~ltm)AY^G<{%N1XZQ78u}(r(zME2*N#(d)T&$|?!F&A5YH6c!tdfn( zy+L9jcRU?fSbuX!=~R80+1MJ}J0x(+M!DtSW1Ol+^1J{owPtUq0>uFJ}qt{cE?kRASapGGzM8%$MkIowN{zAg9|ZAYjGc=5R47&o%9L@cU_bbrq|J9dKc7xs7@ALSG9EnhkAL?0Bd69Fv?Y4p z{$ProOa*sO;hJzarNXVLU2BHvJavSI5m>o@}Vudntm{)zTnBy?f7IJ&*2uSIYk zQyODc47vS2^Q??Z(5PJkVl8vK4(Ndn_D6N~PJA2(9}kCN&`~)p{v+X3GmEC{dE1-Q zXv_&*?H`K;hX(d-TMxFJBi8z-`6c$^Z<(DBU6^T#R@z<5KBFnr0}pSrlq513ApH2Y zA`pHLn?#G-&hp7Vouxb#o9v2P*o;o!wiNkIF8^^-G;taoy$WuIqm?;4i4?uE+bH}T zPwM2@tok!Lt24Y}xWo!4d*U}?nG=C*aIt%w`WLIIhFmLVFQXqRZqsmN2U2AIslF?6 zr*N6NC~F*7CUBM13V=+AT6VGj6MF%rTbs+C;HgoV&)E>3ndL)2D*%}GzM0|!)~Y~T z1Is|u>3K%jfQ?yW+C2^|;Q;2UZM$!ftquihId0Jre+Kt`-k=gCi$U5<02Q>LG5RBD$l z(DZ=rwG|Lu8+7p^{P6cio^nRBv?c{3xfG#;ne~kmkA8z%kMOC^sB1oruwK$@7~a_e zsR8UIBNg?)AKJ0JGmQ|75mDWyF1rD3rLbzGqFZAOm8Eg#pp9ux6s=e-8k$^zUpa_p zoisd3k--4!Ra?C%*%hTk;joNlr9x(K;U?L-u0w{B<71yiZy)R1v0KuHV04yMTA0TVWR&Cx6w zGQZ1d_2l#gU^~Obdq}h*KthTET6PXmfJh+Kxj{l&K3E6*^Xy@Ih}|kGXnEkqy_o(d zH@E2Bn4Cc11ZL37K<{4f+tb4+XB_!2r2S8V@Nt3c_%43~H$;0HW!ES3-aIBQzujbw z1*O)v-_#ETbY_WpaVaUne}$aFi%6X?WM?H+p=U+Vv&j4@G$0J;97T~)l+2BgZkJG0 z_UH=Dm-lUgpN}<`=On-wGU*?+=w~tA;#L}MfG;|-m9)U;ZC5<;TBFzLZ$TzrV#RFi zkYJASP}9TcC^R31C1IoiQU-ST9$)ePA<)H>$dnUgmq+f^sq2@8aVw)(@jwW{*}PS! z_RO^om!ks-t}h!8vzvCfe-TRfsTUe3A^8)ORsy~DURNDfGG6VowwKSR6#&hH4A{1M zcA8L6w`MD=s$tzDsU~TCPloxJqSa`bCmIz^@z-tlks_Y-1$^Fp!TRrZ`d>0%;GH!` zd6^$QO}IY|$^@pZk18VeU|2Mh3Ok)!p zqayRiU*Zri*QY7?u{ClT{rmfwuEA#(SIgPdCI`YbmM+)0r*;|73xobE|Kh$vbJjIp z=bk58#kv1fm|1Z6t4wENUs5!W)N+Lk)gst5$2#i?mt`&8o%juJZqd+EAv%_m zGb?T}GmrKxK6BUFXMgG>C&$3K{0tL0y4_vmEkZX|@UAVEEKH&GX?(82e zNA~og)AItxM5>G+L>8)d-}QW5z_1!O0+pB={u2P|UTL)9n}d)B=;2jZV1^{#(%N9gGn37khsr+B$?&dy72N#gbxUwJFnV|L~q8SWfYiogI46B~(+U z_{Y-e4*xHDk`66x`Q%V`v zc^KVK4LRm)vT5a7V^T95_m{0>xyAn^Phwi8TbOB6PSRvtlk&`$+AW+&3)DKBY){=Y z>cNWq$@(Q}cP(xTQe4)L5C48_DXDRGKgKPSIU+4d)uLhnN)AVm5G%E^*)I>fc>JbM zheE{(GskEt*?~KM&P`C2_SC)gLelfPF9x=DN)D_wktYpEFz*DCy*8uI1&zJ;01d=H z0nZCl%jt6(+`|V<8H{E-5`gdJ0}L>q^~1>CA4dRJliS%ij=Rd*3|PV z?9p_Aji+xcFjqdb4zX?=+L3C#TnBcWGf-$Q`!gDp)bU4W_yLJ7%IMMqrA5-yn!cQH zpvxUO(*4n$kk^xfH=3=t%?AaoD3D%^&D7$Urb7M!Fr#4rb8^oq7ZIU$fY92DVapFv z#&{KqLG3u&v?XN_t85ATHdc}MtOkDXovt#oGkzv~J zKa5SGrutbs2aWi?jePvRVzYEEvwPFK&pH4Wh)4W&-UE47@_?1B_qZZl3A3VYm5fiA zzWKhse_^E8#+4JQ2xGKFkATIbJX$tLR>dhQG_v2%>^J;JdX1#!{SPy+PeK?#w<6-! znY8{r++gCqCWFeM3(^dg7G9%Fm=7k%90oA=Ca>oiJ);2+K=AiLDJY_$Dn&kzdn&T{ z1B+f8O$I=O1vaeXr0qGC363UXJY5@=#8QN8P+YdxuJCYEucUBv++w)i-5~3K*)HIk#(Wx;Rb$CE6)!iCU#fLy-TEap$)bHMiGC zj(^v+J-=?Id&O}_^cS(qOw{~3yNsxYgDEyl%O_8Pwf=|U%uxJI)_V;PHVg? z>~BI`TvB6q(PKa=?86&ncP(~^L_zW?2d}7szgl`kYI0cs+zgLI(?n zM%#H{g0LCHE2GDx)>;&b(UXpj2f{V8aiZ1+A~JxSym%p0(p@337mVrNM^;d(xuIaz zU(jiE$;)Z1j$JHJXgQ@rym&OZuxS<@^Ip zjPvG^=Pycyec(Vg6zkrb<82vcag)o z8Llg38{@V-RQ_U;w4~o+={Z+6qtzKDD;Yy-#4BUts#TJ?rIu7+HAdqO?3;vGMzQmE z$d%!iylg$Qf3Vc5S7&7X&~tH!Q(P$Da@H!yiMZn2u#UEdSFZjXoEeTVxC|(h+o&t4 zQC(SUH@5p1SOnj&-Sth+wtpLQE4y#>J-92%#{P9bRtQk|0ke1n;lb>?r=(}`NpWV8KJ+e?cPp!^dK z2i5s44Yai&WR^gC)KGrEndf#->9Pcv^jXLXLKp`fYQ)HGm+M6Cf%k$=bi;{RgmGhQ zEk=i$Y3*Tm1QV`cZuATo(@ha@r9G}hcwD~AE%^r(9J@=VM0@ntH+-Urh z0H@Oo*)8Ny12U%iH2n zO9NcRkpBWZ_1f#K9335ZI#}`8O!vprn1nBXLIK=^lG(zwGYbP;uEsqnQY{T>C*GX@ zRC{*K<6|jwJ}+mjQG2PtV8wimx3=pVvD53KeC>=fbbBBnF#2ib4O*h0yE6fEgd=dQ z%sAWJ!Xo(WjOf1{&#oKQD|LY6(a_cgoPB^nP0gFHB~gapmCHX^wD-;>7O?FZ__$GV ze9sH15YRjsr5;|Si9bN~vEvAbfU}IA=e*xvbuPHzhN^*0@7}9>J?m3KoD(V5 zo#e9@9JGfL88P8~x%_Yvtl`Ezc`uQ1n_K+eoC^nT?YP+3a06k!^DLVfKdZyCMf1Q|3hvDpj5gvjTmZYmh83ep>QF#9brn*0OyBzxnBrRAZ5aWH!^-V5lu^B= z8qBOx1YPHI=WsN6UYNLM5jj;ZkJmN;!+mIHhc9QJos+Zg`B`ZFd5@PJ8j3*S6Ne!3 z>U8Nwl7QGZFD^zJ%GagDir0#Yg_v_c{*m8r2lH(^RCMdp>((dhJ9S#D493CJA`Vp! zIz;M6lm6#k>P6PiCT@0tDEohR?`zE(nlh6Hzx3M#nj986NnpaF!hev@iDiR!n8-}C zp#mKBZJcdDPGRTeRH#|YSF6E-7guGb`WQux50FP*8t1ZvoU$T;z1aV1__qnRi0ec) zu30WAb)vnm9m*hZ215df8bVjXiQ5v4HDQ@~v%n2I;9V-BJK#cEloCG{X5=m=a1uh2 z@vDwZzB-gjv6pi1DB6~=HJl3C%a&)}4l<0V|L|PbcP{#X036Bf6G3QL(IN}-Sc)8v z!8$wItnoW1_Jr>JX)JpBk|l%B+r7akam9edp_EmIi!e=DutI_>=DfJ64KN>xESXOQ zrEtMQZ?jB4LfA3<@68mW7TE{ML>^~i6G|8wy~0OEkp6mkM|8iebZ@3x`At4rW(uBn zB=+PD1*4ohUu=leThg;97W8P5S0)4_(NgLDM-k|G`$zFcM)5R^@KE!1W82~MXqfOb zR1s~KwqR#jQBm<{!`nL{7coFg+F2sYy?vj_)s+@|YN z+5$EMC2R2p$GqjRu2JFy+8O3fCW`hUz9)Q?$qX3|@$`XQAzWCnALPhyLedCO*psMM zeGWm`sE1D(K7zJW6Xj)ONE_oCs(IS-RC7_lOmLQKw+W}&`8<@I_RrZrZU5W-j@RG% zc6QbE%_4&)ecNfm0quMWOJ8t|I;B4krlo`)FHr)+_PAYkAh89j>tb2id2vJ^l*}~X z;gdr{mqcHBVDG>t$T@X#jS2{D4f=4^rACz(w^yH>fT$qSArm*tkmhy2Os3Q+m#v*s zgI1q#rqsVghIztMr3(zSp6coVhUn|NKCbXW#5Erb&!P~HZ(Emm+m9mDED=c#BSW{V zFwN8UW@S-*GO72LTJGm*!OYnbJr#8H1Xx~gRxI(b8;93*Ro#X*uQF_5KaU1<~$i6D1j4DQ% z;#C;FQb~S?W=8| zt`%_QE&M52KaK@9q-^g7KML4xkjaZ#=g-&$e1&1_u~S|f7IBUXnUYQ z$TY7EvZ37Gxz&&GcHK;_2=M)T8z5KyQMnWSjTlW1SaQR+FLbKegAfy#WgFZ%Y` zzxSb%1XR4)CK5l6SO?oTJG^aDYrq@2#rj|rWVkpp%?_#DnBH?9wq^C`)>R7deaE%_ z>t+lD8?%q53Wn)p?aFz=gO|s4fX(td6*~R>u1{l}gr7nut52Z5_b&~?;Uc|CWu``I z#X<8a+?uo2P^X8H5U5^s3Jq?XdIyfRoTkH>63W(2onGnsA^vC>3yaKApE6j<#8ht zW&3TcH(uGv$#}rr9}CLRPFKR63N;S0{AMz@2p!c7Mg&k3XJJlmMpI--{Yomd# z#>68?jtMt%uIj4Ql$;og=YbC`L5y)W(g_4Osldt>E3f19muly?@cvr&B@r#YQP6#~a0yQ*7=g*f1LD59Mu4j{WY_o~_Z<4(}DtAu=D>$0oZ;www z>KfXmZQEr$3MY~@i)$n=dV-^z2)DSjpse9hr?@Uelo{KE0EBR z3I7&sg5{=F0NLJP@s+837q)Pi9~X02J5?SNLX+FNAdVj!QfoG zB-BpbmYd`7>Fle^Ntp!NG^5sgPc|`W_O@B%>QYc5eF9S_Yt73Rm*c0;+qF~v`0I5o zU(f6Z87&m^<57b6MzAv2alg@Bd##ydto(8}oXp~vtX9oZ;3XzZi4Murs*3#`z1(W^ zrI8URp^}cW|2o=@f`N6%tv1#ai)iABDlL>bE*Y3^vaH`q5}q<#nu_|CG`LGZVEIf| zwMGb9LP4#bEFPR3HlB?`wn>l9mH?}E&H9Gb)LRx1G#Q}83o0^c3XqrYc}njn zzebI02l$IQ3|uBZ8}ZfMe^F#^WEgo0(WE-nI^pw22i#QC%Ee# z;}jzgt<#W6%#$O4$c?5)W4Qsi>8@>)7CLIlpH;NSFW(xgSh~9Y0@_gnB$AIHsnX@3 zT*k~LyLp8m?T@fzl~J);d43Y@qVpCPjrIWi{t~_uX*jQI%0qm0o_@{6vs*e&s_BLG@B-YcMubBrXvdhml3Oyr<|vE?EI6` z3y6#{kuNI2yf)jjDkYSrqiGUm@1arlPs@Et&o#9$L53{;_wH^hscrdsKn8KA8&V`A zQ{%H9ou~^0G!mTEe8SE7|WN9ocSdI2gU?b0T)IG=u@mGBZeMx<-$=}xei#BOL0z`^SW+rX&zAi z3KcZO2P!w*pE~X~Lv?ktwmJP@OMxu-+`d>f19c1c(xB=zv1fFtUVVuY4uO;KH@mUJ z*C&(DU+)38E#lMdo!_3IPJ>>^w0cp-rU!p=N(c-e8d{%Qcqmmre;I#K3iZ(Lj^Nmn%k$$=j&=H;}6=PcvojwMCfe(>h73nwzKR4NJ2!YXBms zRND2w4#u@La`!b)f+m~V_Qjqih);Kr6w5y?%7~86A%_20KD|` zB|~-e{v${N>JzY|ODgJ?aJ*PE>$CX;%*V}miNAY$gCYX=`R~P>qtee(-(TNZ{}y`f znexdBrRd1@zw>{?s_A}2&Q?NLsMzwt3pA0=+2ae*md4q$tmO{+eN9^n$_#&6BVX`} zzKM1PUdhYL%bORQeg8eGg!#c%?tr7f=8|^EjjXPK&lvW$U6^#ta{5$FuwfYRHbstw zvMDAGBwJv|t2@R}X%<7{4+YvR67cw`mBblT@Z@;@Br48H@p20_2ky5VR7e~k(Eac` zpoxHS*}3>?kC7fkfq|3|N6oOZvdsrh{nN9{gb4HOAv@tR(o1TXsFM?&FaP{?*w8(9 zqx<#d^X|xL<)CT2mLm(S@^DTZ7S#!u1k(_JV<4*x{(LZ#4EbocIjxL}&0&ffH< zJjm*OvtHieJ?M^r>MLP8qX$S z$8C0w_O)$o|I>_)M()%r7w&Hfx_TdOYz>S$C4}QUrm{D_y27+;29K~iVAgHRdRYc+ z&i{mD=C6azCI4`m`8<~T=O6&5sa+}OS6!5|KeMBm#Voa48P8yu01wzPHoM9m3Z{#s zne225>B@~NsN@Hhy@BKDv^|K{^)Rk|c;lt9iv0nXj-ia$tcpGnXKtR@EG?Ol77k1` z6EzDi2R&Kw%dxsZAs>;{xFAE$q*4iS5ARd9H?%5GjJm%cxU#Pz$BN#PD`oNZ_&@iF zZo1^YFu`}eH`PF;ttW-36IL!t+YOOY-O^k-^1B6t=J?yHUpx06eJx+Q;<7D>bUXZc z$WF?#E^-8Yub{+43i_HEqjKvBD5dOZY zg-+}MrV>vHT6v+WrnsJg;!OP(XUV0K?|I7g2?W;sFKS-z)^~#`p5wB!?V0B`?`P=F zfJNZm;g5(Rb~S6}1%`c1`5?6jYH9`7t(I7j{4EU#H=Q!#3F^ixTM*~f2(4mB%Ds|^ z->IXV#8%Nzocra%EHNRmgXF13iTt6jLe-qTEn%)Hll1e%Ql*2c=N4*G3 z<|~k0`m>sMwrpJ?PS_8MkYA{xtRtPORKra$Cgczlj4dJZIdtsm-&nn7W5nMY{si+tXWGAgm9! z^%n*D#VWFDd=g}gdVu0uZZ^)cUK~3G)mHSvNhmer_*)6!O+VYaEqqH5eM;=!ORw>d ztjb2$rK%;(40p?Pv&|y0r7F?nNU)cY9Ii{^i9%MPEh$zh*FHeIz3BV)!`j3ey&`Ak z*m2W~xKwFPuDMyks#(E^7FeGa{Pc1G=Xaax2Mmj*w)FB^iz5w3Xf!4y>V>x0=;Sy^ z<=vUOzVXIT(A z3>2=f=WDqGoIR28QomOm=834pe)fm3<+k$_M(3X_spZS997sC2=1#p^`4+!KY(;1}ewaW2o)V4+)7dhGs2U#VFRX5($8{IRf&g&GLgrxbWU9vh5*Fz?Q z!7jWXM-P`mqoeZ$3(Oi6(05|+p*dmhm_Tt{1MnrRX<0Ye<4RKES}XBM^<~j2ls6uc zR!w3Ju~+@W59*rw`}e;<$&(hS6MejR;S4OSD()r`dfR(B;%SGN_!2Bn!UCk|AF|U8 zJae4(UN0gywaC$K*^_P&<(V2R2);=MtE-2#+Zg=*W~oZF%jDlQN&2|#0>3sZ((Ho6 zaY)wsfJSm*Oaq*-XRRlmPm9X)Y3AH+)_RJApF1*NfG|T&4|g1*Om=;!A%sB-b#wf; zdY20jKvPToPHa}?la;Izt-7yJQ)@o=*0b#G?Tu~@hvj+$mwp26#%MB%(8Eq*$Lr(q zDv%_?7t=@a+(Ti!gr9rg|Iy?1VSjn)kHicYt3g|TI`2BOx4X1J`f=O17U^m@{@;E= z@JT&%2XVzQXM2yt>MM70p*ON&e&S@?!4>BLAX@;VuUTuZuWNNWl-Qxit-GoAc~M|z(K`HsDTy? zE~q3e~hc@>OoRK%T2^VR9j3=ta z^(c{?BPq3ZYp$BKo5Z2HncVr0>36wY#=;Qw$R_{JfXk?D09Rs)o|M3k> z9K2Hex|MVGq3vrNlkC|3Ky;QU;?nXmSX1-p<`Gd`rI<@f7T}+zSp182^vQPfP5^X4 zlNBD|(*iulq65G)Mu_fh-PSuzk<335_@xooAlL6P=%5YA_W~F)ZcXky3amdWu&vmU z`Cp91;?R~4?pi!f=}CBR%jW4Hc;C)*FE{T*M*)=KxAZ+eJ?uag;4b<>h({E)rQ+zM zC2d%v)-^!7VzpX5!@u(Xy8vM`P}^%_M5?$^eK7y%%GTn$US`9m-AE&5HFXasjPMohfDpNxCcXpw9-)XQ5CVp@czmjABy%(IY=(VU;LbF&XR zzRdae8skFbtzP_Y;B!0fB-8r+YY{%=#sww zW)$1=WbP?*eI^7e9PtCMMcT$`#p=9M&ZH}S4TjZ59sLw9GZap5AKbS+HQ`?{r^>(K zdf-(?wJ;>;SzH>wI7#~?`*lybb<5N*@BC@B9UmW0vP+iU-q^Ul9Q#z?(V>_U(sBG( z9eCGZ%SdWzYmd}L{TE)gH%{agL|##$TCTz8bI%4aV9nSFzh3UhowYt0KG(dBIbQMR zz9|41Uh6yK#hFsCn3`e}<(%w1;`ty&CCJRFTe@hSV(DCu(LTwO;$zM4G)7*NDLN>DIUjJS-$R$(plo~ zxA?sXwAm-;IcrieA)_kvRkr9-r}cT9zNIciN;p-90f;a@p&b!RUYq<<@#VwFE8b>3q}iY zhN_9Np_U&ImoQ&w;Hk@+{@YAl+vchAn-^nwol zE-R0tV{o3bI6R={7z+=KGZ>QwBOUd4wfK)Lt;b#p3Eq#Ne3re1YknCEJAX3hf`)r_ zPL_(k*q~GB?G>jQZMCnzu)Y?fNf0>~t!-GZZRbDW^(y}S-Nf(sq!CQ}<4aftn#9K4 z?L}17(_a@}W#1hqzto&bMy^>0 z_h2ihRcl+*1kknjPfp?k22>yr4Q8b_4v|qawy}}BguXOAC)>o*4GU;nt77AK!MZ+q zWe9vlpop)e2(C$w?^TK=NQcbTj8QD+kIn)Mw$4ujK#0B+2yr&!{k^zvC(W-&p(%S0 z+5T7l9HcR$OXe{}#y^(xjA|&QVoa9ITYV5>=pb`JdEgM)ANvG~0*fxwHdWoC+JQB;<%oe~*t2@mCSMvG}JX5AQdIkHXXSd$bc`HWH zh9}b_XGp1ZY-?0C$Kyy+mcwI3B%7Y!Dd{Ra_KmdhOQH<9HwBPTGUt4MFyvPOJ-m?{w$-Ns%(ZpE0^K&Q)p48~;ZT#k`=5^r*dB|5Ze@c-A^5$M#TT4p2BD zY>-4C+vD~0{8d2&fU}Q&ejeEOIK9^WZtb*ni&w!NYGD3-4c*0sGb)xBsV@#B|Mi3s z7~t#<9uY@utKkv_i2h>ZO2J^kdXOY7jk+-E=$Ksc$mSZ8Lk>vTw{Any6VD3P$$&90 z(uF}Bj~Fv1oQZ`Aq@_j0C2q9X`}_9JQRIrb(=lf-9LH{oQiF~+l9dYC#wsZNLAPn~ zafje{StfC&CK*H>$hhPKWFvFA{;GvzJA?KB208)8J}z-5#gMwZRB&1oxP8XFiMz+6 zN}QD@LI_+)i5^O8`YV3dQ{;7qVxK_t;fgB*4Y<73#yf;B;+mUN+NICpLfo4{KMV6vqrRVG%Lm%tiE=BMY@d$qO`}Jo+-{-LAEo8|5B&g%A6QizpJ0#ZcWJuSr zbMT)x1!XL^kqn?DTN_ne zglv?fu;q?7fiEEe2~6iZYS8;& zSbpbIu#JH8R}ynLPyw#kS@+xPtSS>7U`zunv$3#rr^YSu1Po4uGv{|U+$6iYqZHG2 zQSlZ?L4L7(sP{9KpJoAYj|N%EUTS=>L`F*B#m`0H+F~PpWd6h&k37v4tY}^++`my1t!XVRP~Ya_47k7E>RQ`AYf|GHjI<8$1;4Fwi3pR)H`eJrBY z!{y7$?J5$?m|X3+skE7)n&1VGmFX&$<>@Wu6*ZrG@6%T z?m+TGP%lhL8UM57gAd;q~7-{YliqAOTT6zx1G%#Ld!kq&gkXL3P7aA z=*X7_)UbRp6K7}t4Y1hg1A)`n%ht~|G0RT`dw%bKT4;YMBzm9YYyJz6QUF2))KWF9 zU}K{zo#47d0|`2|b9lZ$Le z-*|=n&zsYi)aQN|AGnTKdh4(0C5xkG3?Oh{kYnL}Wp zJRhjV$t;wQ0mts;Ka5C!y!ne(*pbm7vXA1BxU%r9d6X^-iPHfjAc^}b@$LORnUY=zn)z6U1MZr;un9s=r~QByK%H|-0w6AK+B@kzUFDZ2hi;3HKf}&i<7folxkaBd-|nF zh8mG1a+CYU?9SbWFO%+s|MBrUk`Lbb{yDvUf9bML*4EhxVLx$t-eK39V6?URyRn+u zEx&)seU!}TR;biAUoumMNxgjHIwSh_Fm-jm9qR&sR?PJFdN5W9O8*`r&i{?*{SdQ_ z8L}z3iuV*>uV%r6w8pqNo3v1c#+Wjtf`2cOSGbLs-Ea|}nAF+%KEs6Oj%1QS*DfX9 z40j_9T|zrt>Y+Uv<_An*g*nHGnRFmukiOjbE}N;bo_QmWD-n(qRokh`oq-)#T!E7@ zM$`^cHg%7PF&%aV&rgBO~V{;alx%$LrkK!b*{ZSIT*V?3mKQgwtsLi z5}ayWsQhvFsM9D%JfYjAdMK%xcf43bo;l0 z2)+hX6C!j>H>2oh6eR6(R%i{@$P|m3Hf*4%Qlf}6$`7VFe4%L`?wZrVl(N9FQANas z6zkO(>#%ylONvq>n&FnKIaQX)_x$~f{%S1Sy)r}r+iwzBj;IJW1?4eXUa79yI6{@OJO6=U76==W#2#mmh!XChos4HbLsTsSbzkn^IJQGP?#;e__u1LTQ~Rn z*Sqei*7}+`hh~1Kt@{J+aSU{0&m6O(LijNWXTW3%{3N`T6nq_B-F&UeO)XMj&R>TK z$WrNxQ{)$c=$}4q>*0GE44P2*O|7lEpRYY{p8JP5`n)iqK8YC3`GsEHy@^8Ba=p$S z4;%@kA`8SMA3jCo7r%Q{dOcYASp2SUT#8XZ0_&hDXjfAO8osS{QGw5aG3_G$1Fs)$ z2OLP4?8Vm>{W+v7PK_oJ@Pt{HL_2uzsDWj}W}}2+Rm~;z5SfD$KGVZ?veAw@b16_u z$rIj{{igR^r%}FO>b?L5KduF^+#kjHAHbNQGl=yjs>8F8G8?buJz}eqs|EFkCNSFI^}pi%FYv^% z;~zZW{)~!^z4|XrVfT}NdY?>6yqfdPA3XRz?Dn`_21);4;j?z`BmdvKgTCii3jYABt|!K|PAY1gld}_c?|V#D-27#F zlLQreo&yJW`JtId`0X2Z0q=IMV>BQU!bVvsVUMWlmJe8eEz)AhJY>2dZq$oDb1SvW zKfl#A&;ep8{u_VSudMYskv26omp5nhdxn@2{U??j%9yte^v}~~(9|-cLDH6T{sV?o zJ2OKqSNEzSPXzwGW1qUDivMnPAyD)}g*XNZ1X0*RH=JhK)vH9xL>%d$8);Q_sw^8lomA?{2 z44JmPBkf4-+KX~eBAFz%^Hx@DiU=$?s62NUh4!}vtP5>Hs0NokamMWkaOP|8ok~NC z30pEE%hL$ud-7D+w_uWSqoR6c#r6ovHCE7b9O9+0q7NDSs;B_KGxwbW^X&lJ9G9H> z>95)=rG0N*ui6DB9I{xEN6>#?fWq_q_xy!iTc%^+pI#6`2izHyv|lIu!|$@b8w7DtY15T#2WX7JL{hVOX4(W==oz&8 z#79S?DP;=`m{*Q0C=dWWHDE@Q7< zbri||?dsR3PvFk2=&ZuxF{$C1dR#bah^i)z1qGt0SJzXqbw)`o`Srm*yKsCw5q+D( z7GiXpnu(H23$KEc#)qnJlt*OxIvxMzWy_V@@t`s3VX*sG~#;^|*l-eZisFO%=JBBjxu&=Xr?Jq_VK8mqAVD({%FIkI@D-KLX7afg`{Q|ACLrQz(Z(^Ddxo5*p!GIWh&o}$ z8wfN=5Qdbs^%&J?4-&4)FI%!wqREGJY)50k`a&glljlSWgcnNqMPdRWxL_$&=U>X_ zccHX$S~;I03U$OA_vTmU*4@&4s~XzbsS%Xmqta>_6X z_@MX5{4&}phpvLOog%HszH}d>;iWuBDaklCE4ZwN(!1ZVczAxdTo0VHkz0OWVGp!62ERrwlbi~~>WmE#lw>vJb4Sv5&nn%V@>pix)u?;UC$37+6xt9x~>*Zh*A;%Ag zf1!^T%^P+p(X&s%$9Gzrd8dz6)|$6|uC~K~SJT@$bhgXu_o6Q3^X5w{K5XoWU^q97 zB2GL+N1(4Qi;`?`H2k9@FGu8snB=&*Lp z>MkkCq;=wP_G@Z&wKdcDg`01KTre%|F-gqkL=dwm7-ff${36+Wm>{n3>^vlPzKh`?J^vm;yi4zm;i*RXe zxEL+i(?6$eBGmXrdsFz~y8oa|5U8jq+{4yvR)Ge|2I`Msez@6qZTI(E6GgGj2(j{{ z!>5Unx%;pycFq4QAu7v1qJWf-9b`Czm6@@R4KHGA%PYGb$9L^yAEZ~@o3}_eRW~cngbUT&ZKUX&48jlz135$c zgxGZDbn|TJ%cHRBK>vJGeh^NtF@@B zMvt^Ws5(>bL7!R;y^utyq9557sb-hXl2@$XXp-b+)C^TRppl#wB7meEB7&_E^GWk^ zZfk=aW1r5>{T)A@{vm*9YO>`(S$_i$l!fvmi!KC!?(n zF=r&K;aw)VZK-vO)Ys?bciuq+hHpA4;-m__)1oc=Bs7~&H@*CdWBDS#X)ny&Zkx(I zAa?p@?(PT>^}oHIa2B5eD^eVKfQ}SMeFE0}`alS;K(T7p<_Nu02y-<}>X%hPGyF;rkYAaB^E?u+6P2MD9ep{7kYlNrV}1 z@VB=imp)+?wDXnlaO5Ss#=7WWD!D6Eu%;^LBSQqHl(>NaBLrs*Y7?!z<)tZBC_N5@ z;{0%UDk_m-me&YSfg<S)Orb<;Ia}X zFu3q-Qi~iDpKJwfn`ZrtC%|nBK(_XjPEkM|qmK5`%juho6_y^TjN8GUsEGT>U#%V_ zQQ9s@dy8XG8E7RKhs2>O?f!in3oNa=Q*0)wiug=b(k4laQ45WhZj{bRjfU05cRqVQ z2DIbax;hD5aL4tm0;vErj14tCGZUy}T~BN0watrQ#F4|fQg+lJ44;h;CugqK%2D-x z$MByz?j>vz$Hx`W|})^^?6suO3CGRl+Ki4 z1UaC(tiN{Z&z`22AadK{#$(RZol*C%D!<|RaniX{rzoM1+M`W;J1gQ_y90f0P>lgf z3P|EG*EcpAJV&4KbkL3t>vIEk9uhgqrqKw_k_`uA*X-s(DD5FDg~} zAH1VvcEt%ARE{>`++P@BTZB_Hy1GWjK<^E#PE={Nw08C6@8UhvQeWcWuH_|FAQx4r zfHsEsUnsYCm3oqu#$7+Nbvb7tkb7oX+Gd@_TxDS0M<9-(GbjS?SE zpRmaW8gql?Yf{J|pd3RPUH99K?05_R`0%*cCGS|%xAlzr`QefvE!*bbNptt$p`(A| z!=Y2o!%^zesl&g$<;CUI7Vv=U!|dlbyop-5EzsWdEOz24z9%`gloUC}bR+5*IR#`2 z^)KMG_PYq$_q=<#!vy!KQQk`a^|?W#&!Pvs60f3J?asmf9&~e_UR^YVQkPfu{(1A` z)B9Ovx0(IqYwnLV5{%a7PRqy@kBi@s@_rxkPM;HVGfoI&6b4b4 zE|SY`4vuPuI~%~7T(ovSyG&*YPh5}lwF?4%(SpVEubW%Cc0+k<4s(asWm*|_CqJ%c znLZ_$V{M<}XRaKdoH$(O$NI!Q>Lk}YX2~Fj@24Ql3o#Lr*j^ma#IpY-E?qM+cKU~i za>b;mH0g4(#K8EM@XBS3nL=dplFXe=gnR7NJ}h1f1`MSgvZ% zx9WXoLf&GFgk@LT=@xC)Okvh0EbZ={$UY^B2a`@DD;; zwKRx|5*=oXt%#cw>^N=Kv9`50NZk03{YOOTTG>wmw3!!JbyfbiN8JCT?p z-#m%iI6`k*kp`dJgDsa^8j&SNfN3R!U3MF5R$?R^95s#dWm^+E_3MZ3{0g^Fd!Py} zA*Ll(bhtp(GJY>6AzpTHIr#fHF5iwEdkeR1OA~xjI52%Z&Td^ zWbVv;U*AOpBz&PnP0@DftJG@oxxr4YF`|a35l`^U&0QUUhiywg)1gYxmzK&oi&t3l zMYFT9L@7$j!et@5cRa0W=$Um~zjT{j&BB!^M!%cp4(HiI)`Wgg=EMp&xAaRdrWt$J zanXyh^!JaYjm`T-moRDyNFra%n1fa9e$JDin1z#PFyM$GZ61{oc}zSgfe4+%2TMxD z7cR4AF^ugo{z?8OF9`Ve66ziZ~d+GDE4?U_|2* zweqk})WBa|Y5{vYW2+za3rfzeeSiHO*H}qHxBzJ42i5j-on1=ggR6i36zEmqoIap7 z-Ca0B5d|clDNVeb(K+W-Oj|DgcsBKkRNMBI3IFCoV;&RvO4)Seip-z_`H&xIler@| zx_5+@@EX^C&NmP$a=#5c1bRRF?h@rZJk~?C7tWVll?#eN7Y&$w@9>2Ch7}SNmUSIc)~j> zlmc2x1%Vbbvje4UMfRC&#_)492BP{a9HHATnfsa89J4F0Q2v?`@3S;h;38bX6A;kh zA^iVcfIfX4@OLYH!U*yBW5Tu|3s1!01QbUi!jyoDazuvF;rtRxJbve|$B0xisXBP! zA!1-g;xYjSnDQN+5(p_?OSL4k1P7Oq$AfDQlOpz5zKurO2%04jMOa|mn-sM|8O@rG z9l!s++Ggg9l4=!XYYD+cy=BZrDE`dQ}zlpmVc~A zlXAjkOEC@?S+_bNnp@}8V7n_c=1TePL3C>__tB!HbblrSQ5CA{j3UW9t@$BXjZKRi zuWvrQ9#)f6;YUOXjjD|IkC=j_Rj(;qz?>U$NU4gY#_(pSIRho5LJI^HgDA&ftF>vu z)uC&!%!hSrryEy5H7VUrV-8G{2I(yTMUISNtKOlHT@ z{PR-rY2S$Vt>vUeX9(%Bu9!kSE(6@_z5WT+0l9j>+xmt$rvdR9 zu~Tg~=-fBq;fOE#5ML4tr|X`ccgmnY4q46!69lu_`U4H#ye)tjRW~hXYdD|IlAfMj z1CBd&nAz%hkoe`5XOXpQWH37Nd3?$@$^TaLnWtU>1vgzxnjyl3az;#5Tvc@;eu*9y znOH(1YcLO31V}QNqJ_kNv(P`tP^c07#X$z`^s$s}vQ1iqVmA)*ZJ!bi5)9fX za@kBN&06!?aOs0Glu{I+6NBtr30wdHZ!Z5#067LIoCBP zB1HS-7iSvEYJkCea3Mw+(xYb~b#w0r;1!2m#1axI=TR3_7&MZVKAGSA=JEG7NnQE4 z-)dDN_tO&(3tW~SXp=6holwLtfwfaX%cAz3c^Wx9$6P0!GMTtyK29zs1tmg=W=#FN zR>|G9;>I7In(SAsd;P?1`tem~uBWFfzY4`E~o32M&%Cg|iat(^d1=p$zLjkz|578mcnjTc|B4q; zf}otBNH2o9q|Agv*e?dd-!42)Uou$$ukRPgx!~8wWMql=lK4^_gO^!#EsBf>8Nu`# zvMvpzaq!5DZ6P{Lif&Q_0CpnX=1575tYT^f+HQGy9fmiN~kuvSsJ}f%0?S} z3LVk)<5Cm1b0UGcF1tJ;h*l07rv(6kEcEYXPgV&yv0x16zLHse*9v2}M1{bO&5v9W zs_s1d+jZ(jWgq(P-FdG&zD*jH-kLgn%rsB5yZw6vacC^!`B5vpT}vAkKuK;MXaJjN z3}eP7hP^}YjudF1xPdAphE0nz^dUAS#olvXPhZQueq^spD;|t*`+3r@%h%K8Uv`D1 zLKnTN(2pzM^QX@_`*(^EB^4(_iS>`SzL&IAkvK)U@eI=ntZKY1E?2B?=iN^zBKH@m z*Q!!zD&@V`J-_WPX-y^6g+9T`@VebMoKwlNK?Bqn5QF20)fQDH5~Pvt9M`Ruj-5^} zOwh-bX3MnF(zE*Ghy{o~#zNHGMh{^2EGu?w0*B#T>bX%Btfr$GS_O3XHt+IxbP#7g zqTn?;NB@&fmx(=Bb%vu;z`T1*a>danr0k?_Q6lJ<2>mHL#nbn!=UCG!`r_xQ$2e z6x+XCv#(}_`|+R&-=fC*YLA zwNRU7>m`9Vm)o>nRH2>uX1!$jWVIOnT64a++9_u=GlDUmpUbb@%|7^N6xdV2D06_a zyTLU42+7$Y(#3W;JmUVXMe*;?nAO9j{wEGW{_yjgVNDGk6UESkV*qXOGWksm%;yH+ zDGzSEt~+5DS@ZM);jE>7D9^nKgZh zO+Zr8U6QZUcWhj{=F(m)zcuHlhTfY)+GSytT9dT2!YP7Mtj=nglqz-}cCE5+@_6tc zVl{U8=tvZ-pBOBwZE^0|`^0lUxBv)JjY5cXxLP z4#C~s-QC?aK=9!1?gS^u;O-8&=l!bgPySF8XXfnQ-A}I-FZhD~hKc92z?+{-4WSU7E5m3`jN$--itFO4JmZA^hYv&o9)vwYR zY_VuSv#P`G(XhMO2e;#nH~rItSc3bddnGP0F1pZ5n?8G&14>8ojsGAuJQ5d^Mp03! zOp(6L5k@P};-IyH%3qF5MpIoL1w+hN8m@6fHe7*`?D6Iv$={d?uub+bAO$JqSpnoa z@O`Y`#IS^nmR0n4nB?|)hiJEp!z!WPnSR#N}OuZ@&yZkfp=ITp$)<$7WA70=FX$Qc7y-Nq5t$;ak$p%%Ah(= z?m36dp4ut4x_UmEI0W$gSX>>Vz_2q3FA$MIiURL3L*Y7NiQBK2{~``sc!AVPm`YpV z;p3cGlqvU7m~a|xNE)W3a-xF`HuR6Il7wI|7MX}*Pq6pNZWn|_l6g-d!F#`VHaBG< zr3}lPU(m8*1l!n>8Lpt!!tpN(7=E>+`HTwVA*$UahUeaLFjC}q2@FCZk=^oyArpxh z!GMP1#4wyLg?v9jp%d&p9lB=1IF;36hbB)OGZzpcS zhJwXs>P%CBQUWs?u0>nCk?!g5VbpIU#5`jylo|dPQ&Jt!bU*U=%11_jvN zu$Eo%kq~BG+Rhrfy7+f{`~>*y*s=idqa(oUAQ~zBYf;zr-9{Oen5Wl)i*m+!BZ=22 zX^mn~w0Ch43pJg%uDe^I2KQkuc|?(kpEqqS{x89JhA;RyO-oCsT)P%qn9npDz-4SUIsSq%Z3!toHj$Y{X0hg7;${O&(`OB(Zz^m=sJ7L z8`r56v681OZMu3@H*~f8=dC)QZaNIuuilZCn}u;{Qb|KXl`9+$Ru={fC7JHv1|s~t z!(Ur2n0Wbz|J#XA2>SCC=qx$KBpF`b#@9j7;%gBnQ!(RC3rzU54aWC8e*XC5|GsrK z^6#c+zlqT|a_|;mBD$uryDKyWV}cDpp8kiI0D^*D9e{?xCGx+B>D4w_66Gpt($hmr zPpnGRut##ALGM0&{`LE%KS|<21lx9##*c&T%tjAK1Q}(kIMEdfVy}$0qOSU(rq`A> z*Jssc&gIn$pV8`(4xih{twKKD=o=p~;`tf!o6YZXjASyfA^QEK@T(`y(rn^b-gjZ& zLQo!H;gw0o|36K)9`Yx6@Ita5V{YKp`8gD%CWi7;28c6uC?~;tx zIpV+xhi71ZFKH>yUkXGaznk4xtRCx-lbsLq5ATi_CKZSez_Pe)F82tiB%oO~xj1~3 z8TRZPOSyWsGC0?xiWs}Jq$7ebGG@vnItnQ&z{qyE@x1Uh;eS2jxkGQCFv#pz9?i=k zj3aI#5>(cRds(9vr9>*}I<;{IQaO@>5@TLSRy|TN{`Gg;-tXSIBn3cm1YBQVlPB~( zw)H#(Fd=b2Ou`?OnR(PXK99P= zmjjru3OPbQ6H14uWK6>qtaCvVG^s>xoeNVx&4#qa-9{9DQ#T? z(vCM=SBPOo$|kuFCH=DIlo7H0WdkOXrjAaZqm0@aLSrn#cWw#HpNI~PF)MNKy9v#> zXa}@1tV|npHCp1FL?2$(;fMO~EL#BF8=kTIovMUQx}D!ezGxjB@k^-@6-@2`SqRbB zEi&vVGqj0;I}T_ggAP3hg(a$W>C&DpgP5YoVhiyprak2t)DmIzX*FlN6cE2VIoLKz z9a9}P&iILAh3b0j5Je+Cwt63;Y(2sDXuMq%W04`|qzQe7NYi6`@XY&!uaC7`Fsn8f z0WTlKAZ;4~&S}?yRq=AiU2XLXH>2_J0TWyE`gY%~rE@#FpvbRT%u`_^$eV?xYH~^~ zlx#!L&!&hi%gfjy3*uowL3ozo-F5XB7V=tnDYu9#hg?F#8OekVJZa`0U(<%rpi}Y) zyN_P%>ZzxvjlwWX5+(mN7zM|ErEE0iiO=5-fsveqIi(w_w?&yDHuzX!Hk%d{tvTL! znf|fR(>NFxHKv5OkC5!ldRP1@HKa9e3V87~Vq#{LMOG6^72^HwIBRx8P}9OoTp@r= z_J7F#IP`gq|A%>ImHSYjN@F6XUx#vAp34pNig6{OH53=1o3xRc5jZyy>1mZ<1i;|? zAasU(IQ~?$5%C|XiN>)`SV@$HYL%p>%r-MD$jjg2KR^uAj0gvMNiiz@#U@z09MTLeaEb0F)BEMbD2>UAZ)K70l(6zJOn{-yq*s`RJTfA3$kgTGn166!27{lbHk zx`is0GZ`cQ&K;~jIl@UikJ_%=9+0q)!48{y>Le%xh>D|5bZ4_`tcHNG{>n)1pZ4GNn_dr z{0YXg^{vGDrx!00m$9ME9o0*t4?>F;qX3=GEmUIAHLwA1E+;SVcz0yTpxerXuxLl& z61(#$jkt#Cj=w?I*x6UepQ*Qjh(kTxVxBaLUp>uRtgzpWwV6|-^N5*s3M0)_spbSO z6XQ3pkU~<(kwhdD0y@h`b!)5X=fZsx8Ra>4f`vvG*w1#~YG!ZAF-#lVR|gQWRT}4P z9})TQ|6V>>>UXOp`GmYpD2q2Ir9k7HF6ZQWyHEU`i3Dd@70b|Jozll2BZ*q6!qTK> zTZrr)QUTv=E{(mcP`kEJQi>QnH!qN&=VYe2BEW`n?5F8PMOZWt)>6wzE7{9Rp=W5X zK_4M|-wEK7t+z?9o;9xFk=Pag-AU}$7?gN`B-k-?QL1yb$E=)JEYBaz&n?TZN(%qh!VfF-%LE1 zG=y}@TZ$X9F&;w^vEp}qZH$N4_KSDLK3rLlv)XFExgXkUE zdS06W2PV+V)ds5)^@bA|x8?3kQ_!VMtMx(1W{%K(rCz|NBU#l}wCVICM*#JPL<;?pCQ z`EgV%UqnM!@TV9p1Tb$V1;L`?Je{3j1Bhcp-UbHAoSC3P9C6yRYwmbz9Q=A3jJXoi zZCHWjWsa4X^?V1_ZiWvf3%VK3h(W3g+ zrv&%EUdj6YLQVSnuq1Ce1K}u6E`G!icI8gfC^}Wr2rqp=wT91O%r2?-@U!7*Q(X6&5SKa)l#X7U0UVy2yKS^xx#<@Gs`_6*u;DuLXE4GamHolQtoCIclfI1G6SqPjVD_h&5qSpIge_|=iR zUM!h`YGjaweza3G>)`1QH>Re z%dBP+ONjMnC6DmS_7mu&cMl_eg`kCghoc&skCAEXi)QSUY12h|WB36G`|w`jcY9ur zFp&lTjYt^{&wNmBv07rM2e9llOaKN6>hAz3hdoa~BG@@luw`m!2vHi9P~FuRuo(S# z_VGUDD?1Sk`}jbZ_fa>}=6qAwG#$LpU)i4YYUe#pG=OPLQ>tr;+|{#>!2!{--Nubt}WKe~3pQ*oIb z0#6^Gp2^D=&1th>$302HE6NumoMAx8=Xn<~Rn6|z(ZQus1WOjIjws3cH1yaraFHz8 zdEZpaH*Gfw9x$PD_Oqy7Dm(n&Yt^o+PZ9hAbX z$R&nKnRy3~aYP5Wf*;K80C;D`TDiJ)vE1zEG_izb66h>hj8+@Nalcrx?QZTXh;c*o zt9hsX;mHjQ>I;0~+3ngYVveA1l1Jy@TSYN&{usP4ca2n03QwyomODCRsf>|XFV23$ zw8v}c=p5B{&n}cxGL&PpNT!5Wgy~>wS!QC-^{dsmx@^edij0=f!xc4KaTUSE%wRGFs|D5z*7ex%v6?Y z1l=Z|wNjW!z(m3W@e>1OCwQ+?Rr6h1Xrl8Fr#hHU(I9~-GO zd=Z4ozNSKAPF6UXij+(oqErzR<&`heW|4k1Iy6~r*Mr#{D8}XhNaA#N#~E@>PJQWj zwIya0B##pXKHk7wn|umOQjzFzO_Ec|FZwf(c9f5!5Sy;HUOsy8ep^}xfWH}or*1!& zqh_g7hZgCusj0t47V`)`^`YW);;~08`87kGZBE9n0=)cE& zhD9;Z!pZk>%KVQyRj=K|^;JHZa^?v6CG`7R^%<*6I?koBRZx9Bv)xwre>VjG$BBQV z8a*!z?sob+e|I6jD)J4~@$Rjew|Ja4aVnD=auMM~?(QQ1mBEgI&{(wrFZCW3CAT)p zJev?5h6;u#sV?D*0HTHY=hn*Ion8Y$6*7`YvMk|qK;)2UI>Dv-2DY?cMqIPHbO7?fIZw61h+nMsyl zRNkj*jzT9UG|l#5yIR>6Z9|HQ>zB{XB-PB%I*f_6c8UBert?m;%QBO>++$CH_--04 ztq*(4q9iyFRGwo`Obv{B%-Y598 zh9^vvD5&ssit0Zs=zD<0*z-o-h{-PSvWnVvwZZN8aEtmR>3^p<_8uZ7t5jlvF0~+W zOr2S`+SJFKvn3?K|0Uq=_x&@X@8OY;lYArGh8zVHcNrU+N&>Y&VLA)H7S$MKwcTLx z6bkCH`|1UBNmi(ORsj}@<1DZ&$NvZJ9SVkjURdfv3Z}lFA-%53RBk~CpQljCLXtlx6nOHB4v>6>#(5YXQ@CEn3!133Ra^?7>NIBttVhxmftDI zt4n|J(va=t-^r0zeF~?XyP&;TCDsVjtPNtx3MvQA3moqO8$xsYWW^ea7T5NHWcu@- zhM>9aJ#(p5|6So{B3^;`3d>)$ZgV)zt6qy#O6ZY`LY&N%@ZHBxx|Bn!Lp2pdevTmsvDVkRjj!FTttdp5)O3!Ir!>=&xo`7@{y)I1=n@kbm+ z6q#0D#ffc7#LB>mc!u8{YMG|~;fm+riLJS8Rt|CV_ZSsi1$LS_5+oxjG6mZL=~qd( zWEzcPA)zlOVWX5PnluB2gd@7%ZxL0fIIVxJG0PIhjVu_PLPrt9N>T{4v_lwH)uERc zN0TBbV-O6J&sm6YF1-^q$Tju!#Nqk|2cdv%Ot~1vU1$NV9IQ%nRmq=3sim(24P9Cj z@NQPV|DOfOTd_g)26Igd6j|AiHKYp~;|n*n`buMcwSk7uw#_fShd9@dU~&#p`#ceX9<^h+H@mRg+cgx9$IYdh zTKsQq>+te;D&Ng{tvMEpR4r(dJn1ja=E_Jl$In06n&3l^+X;JBrwJMacc<;gxtoyd zq-l+Mov`rJJWjBhsS#g+->Sq5URdDpnpOauOI=`Ng0u|B7iwbM+WKjJn-&HAGq_ zZ!be3msI|FXr!gp=N-a%0g!~Mm8sA&tJeZpnQ5`cxc!q7N3pG~p@s>~IDVCT%OOZ! zTD5XzE=m@E))dpr^sL0h!=WJqZIm$MDbx7A9tAqeH9LP88##zJcjOM+x5?rdvYxkg3fUlLtf z48&KI1(%P}2?4`g=j!QfsI35sQN&`Bgb(h&)tOe;Lk7z%C!i1S_p*?G5zesM{2zg} z>Afy|>$PjEc-6+~WRZ3{Ur@1H9r%HT=pi#J)6B~aVdfUVtDSP%U#(f!US9xFJ%27S zRyJY*zrj>%4bL}^3cL_JXxL_xv`0pOj-f=uMN%wmf@QRdVu|vXi7o}xxbY4$zo(;q zw25%}d9&6(bPG7mh;p-pW>j}aMXhjZEYEvrh8(mC7GI0J%_SW5-2lt^ zNB#{JY(XR%`7cIjA!ol|ZCu0ejKt~WouTRK|>_Eilkx*Uz z1yu|pO1j-e*wq{!#5^Tz$1$;ZANYy+k~9o^Y$pXb1)^|{qkp-+r=Y| z@?Po|Pw+|-0wE|zWD}}^s}3odiGc6^?VZ}%?K0@?b#YyWwtsYF+89aCnCq;ezAB;4%s?o zJhDLPjdInGIpHuS$~aObX+Sbw8SvDr(E*qGB7Eo(&+xNp6YBf3_7O~mCB(dRIF4Tct4UvyDRGd>yahL%KxEFv9FK}e)$aSAGo7epFW zlSwPz!#P&`h()&&kF_*|kcUIf0ba53j(d4Qrfg8YQgr?#)x+ z?Ml^dqf?^1Bi2q9*hX;xW!KkpH@9%Kxq*$<)z#sW(dMCQmnEUmo1!L`|Lt7vrpSV- zYn(2pZBfkN;nyNy0Y4ig(KllsA0I*2>($0`An{BA2RXifBhb>ywuD#65JkDj7nPBp ze~8=jgg=wZKhy>|A<}glxP&cW90hyV&u=&X-EQ4n?O=q!%c~k$QGZ(?g=Lx8E|%43 z^F2qIArhFZ#|-DbpNBRpH}!fF3h zjnWMLSY=3(&^eXM;SNbtT{%?=T_#Lu3M&aK+2a~)Gg>~yvh)# zp)%N6iw>@cn8AGxy(cFq+1c4h{VbSn3eLX<-@P?j-CoJf^Somh${7q4CkswF5-$_u z@!~~J62uayr6z*7R%`VhF!&bOHc@~7Qa@R#k>%m}!DhL=LIqkNi&H652u~h~zdh+?!~Xiw_d4nErOr)Zgk}56O~EwE@M7|v-L+;8Zj6a?NZ~otb78VuAxA$< zf3|bsJo@dCA8Qrpnn-1k-}IytQ{cm9y5QmkD~$`;FX zH|rXy>@*u3klXZyq5GdPU^!hR7uL)0kOIk_l=Ao$v^w1rSDmi&Y3dsN(kf$Cmn_oM z^Z;NxpF@5Y5EevuK3$=8{Vj0#Jp_-5iRsc|OU$od$}KQ7c!yM~0zI+hm`j&NJBEa8 zxQ-VWZMM2sNG^pD1S-OPzDqS($If9Mp{Yhb=KovrF{w;YDy<+tg{hFL`5i(Qm3Y3r zU1~SR@g@{;5p~+Z*g1J^g^hmQ8f0(lbhD3`BjB2nWT`SwnWmCKZf@-w>edl!nffzc ze$LJv(BM&X+HGu0j~F-Xv79~oJj|6Znw>0`XD-})ja_Z=X*ej5g#t=U$iydbPqA5})Dc(H284K^( z-g+1G@B34=oSDnpd-eupecExi_GQ+EXuYh1@VXC`(dl%}cskcRt#||_9)_8_{bGLY z;mECHP3zV5fcA}M@&*73Go2f62EJaeQlnM&@80RTG-CnA~yJzXI zuSbfNlVXAQVi=Vap(w?!dEDJCAQ+@;Y%ipe_r7m>9G^rrLqM}Ue= zNd`?49cW)!wTYyeibw24pnr)CD=f1#g5c)X$|83`wmgDU4yhY*l&Za4_?a^IeR3G= z?ZTw&Sp&oNhRk6XmT2>oQtdWs&bky0W#;oUI|#9Ex9szRNbx?1_jtVrz8SJ4I+ z0>dcff7XS^+*8{9nX0TdAp630;^~w?vm>|xF;3(pHhLH(&#-a!60MCw?KGC9U&bp# zyj20e7900%81$=d5=gGRmH z;k&fl;!$*tF;oYp#n2jBoPetkqW?>uS;aWHk%t4v(!aECB$nc3C6Qc7be%GLb?kg@ zSyOGgw&z)&LCmN_Lx$(Y`}CK=Y*u7Psgj*}7Eg>DJ*gLUPA#eeal8~`z%agdeWFe3 z3a0PqnVE*AE83umCNj|iF0n8vMGV_KUUjLWH0h!A)yB{1O9wWK-BJYV5^cV3W;exZ zyKDH-1tjYN`(U7_x=5^KHpDV7zBD&@RyP^BzfT~Gqrg@wO)6iW56nu;elP$)`<{Zw}TJ~&+lPTc0qZN}iy zX1)ju@!=)xBT&(pJhm%j?Y&mU5d{iKB81LDiLgEtzUB)~<}3CBPnrZ;l)tOm`=#&G z?4A@i2JQpKz$`P7vk5JHL~zFWJq`eis4z3uZjd_1B&dE!u(Cy(x#jZTAu6*>E=8E4 zvElH)g7xn;U=o7s^S#-_XVKF5lB9#`FL#7^-M3O7Avgk=#F=U-?Pw@DE6f3s6yfgfJvbMkF{oxlpW|aww zK(mx8h{~t`b0~Dpgfx~^WQm#f5el)a-`A``dDNhU`|#?kea@kG-HP_PBE>d&L%*-3AVY85%!DIwEn;Ir_$zKH}&`6J! z2AYipDU&Tx;d`BQa~;J9|ApRp#w`XzYyEhYtdYgf`d)EP78^% zzhmUGKL3o4eb3~cTC%QoNTOs`s3wqSq)wqxL(p<$`qysaf60`plJw3Wb-@_ooCz-j zta8f{9GVyjHLaSQ2tjYUU3KBb<`{OwFJd>Si!V7D(HB%{)1Vjcp;?NrK%S{6v}_J2 zc8HCOv8S;W}Q<5wxT&X_E*9E-TkUxw&&z7gz}mp#{p2e z_qizk*Cc-rU+%Lz-}rsPk<|AaXZ@*GXwIkW$A|byB-Y}Q+oq*ZZiEGJ> z0s|w{pDnT^ir2(wQ3pUPt?kMZ(y{k$@%rUMYgY05O@Bo2ff|mbTBrvK-BA;X^4}bZ zZ?=vGgY*6gmD;bL-=iVb5r+0t@Br*D zdt1Pn)$=O3Rb*zpc!E4RH{8?GJytIG8i3mU?{X{{$1-O}N_xzdCfzoxi6w2Jn2>5Q zmp}{6!GDJgl~_Pby3fAnR)+}BdiD~UvMb_S&(PwI=Lu{XEj~`J+T51i&ZW!jH1Rs) z_CvvI@)~7hV`FPr=nrCJNzQBU&x^Xj8r^Ty$$wyi{qonV;x*Sazp!VDXPIJ&|EjiS zB0`Z)3em{-&P)I6mCK~4<>-T`TWcSU%$pi6*_`ga>dCbD@~o03|jeLu-vOFGGKGri(0JHWp6r@hUYz z)bX*F($MqntALDE=iLn=AY%R(#T94C?+N(V03-=;`fF-x8W{OR%?Rj}{jp-^=buO% zki@sEaelnetNg<=!}kh0kA;Q)5tRUnk`CRLyE#G`iI2S=X9dTwk1txAg7||$)QX}miG|XEqhyM#DG5LWM|RLq4GWxhKSb_l zlIpKL1q^VMOMLBaRYGq`WmN%*nC3mHXO?i@9BjMFcJizSvtQb_wWw8v1S@(@5=wY3 zO!6PP8j48QcuCnRHFN5p3LNzzVP_*yxn$=xiq_j;ZP*p6Ltz3()(6jR@87I}bux>f zbm6~4vR-0-+1)J)MCHIktE=xAd+RGE%H@hvtq7<|mJ}{Lnxix=SNmDGU^ELr?Q|yM z|7#XFIUy{t{l_Kgdi*<3@kg`WJs#*P5yZj(yZDn+Q_6Iycqk%EOG|a2Xw0t)XC2ij zBm$FwUgv2(U4Q5|(x^K5>x+w2z3q2&Ab79Gk<1@EZ) zdA$bXE4ng)0XIzhqEw#E&GtMtPVHtcf1rknuv%hQ|%T$!ehXMb$A`z#XS1g$Dv8=Eyl6(gT) z)2>SP7jri!$kam@J`%>%K|?XdSoH6>dYoEm5O&1O`1>9@{CThE?wKbv8@z;XZy&x( zIvr2v#K?yAICpq%>J?LpbGjCF9drAu3+5Soe6fYHAu4!6vxKuJZpXH@xDbhD171~A z=kc`;rym&B>$dZ{Mj0IKT1DL4qNPT_#B;i-gOkhqKnqy48T?|8AwKrOL>{#}gB?X6 zrX0e7AoeFjtis6CAd4CRvl}@(=Z1!cz6%4)W@^9}T3_FnO0VJZKE(+)fVSQYyriXQ zfk$J;gh$3oZI(cAc46myzJ|TaWd;Cb7C?hvV-K)^0+KCz%2z|D>W`6+PYzI=4z57e zs8Y)r$xW20Rb3zN%lbTeUjpu_-X*i_wH2;3RkI_>qq0yUWC&$=6|AV6*n3-b4WJQd zk+-bx9crHE3DaUyj6QdXOq;4(L^I3;3L7AE)D5Zo0&KAF|M><)V6?QgcdIp~ogb&a zeLVF%9r}12!>BA>JE6*_x6X^5MA1CX!TM?!_NAm=ELVHey_e&@j{Tci^5)la+IRQM zcfKj<@brDQx83jFdZn2dXGGO3S>Dyx*7tsf+eEeT|z%82C%4 zwaaIVPv;#Iua(xffA0>D$n3ERSbeJET9uW3S#S4de0uUPRo}~fqSF7dlgK1sQ~e;> zH{yj5M=5q3_aJg~HV&WeORy6xV?vmCsK>?<4~xVkuf{)sHzc4a9ab+e9h+dFfr}9v zVZIg?W+5Q6#y-;ySopcyN}QSZ^NM-zCb*dHPjz8tZnJ)nmS)^@qAc4 zP5$TpoC#=0qJHrudv_5lO+$sCNg_$-Qj2*;)l=$EjijNJ&8|T5jSRW7Hq4>u=ve>a zd&1ZylL`L~DO^Q<{P1PiP}rSu5Qn3Xvg{7JFz>iQz`VSAbzE#avV+nUm4ge{lk_nHRm!Mk~gx z#?lr#ZLF=z?c7Lw`OhZP%uqS`?;dyaSHw>E_I|f9P-r>d@9#nc!3;|MUvYy#Q^1Oy za&6-V^7GK)kDDige0#EU1@{PR^ zQ%n*?pk|&msH(U5oMlem94TD%;_q`3uwG(jZVnGgBAKetVWGxTr_1RveykOiOh(>GU8o0XhRfBOB|Z(L;$2=c=s)Qa+(Odc3TegS5E1D zL6*jM9H*z*dqW9k>*oGFvRL6Io}qp{@oL1{)*zk2*uL7=$$VWCoiir95SmmutBy|< zx)0vW^z>CWwx|*0Q(?*EA>@Bh(r(5=W9!FH4Q3@l;BwoG@IGDbQw(SKj7bJIl~jnO z9>Rb(7ezn3tI`xY+~3Xoj+A?F%1W*ijYV*e$NWzLHeL|5Z9+S2byc=8v@&+xrx@bK zDK9S@lMQ#H;%H%Hx>~cxUd2IM1VA>&c60U?tvO|wzT7>wUz2mOO7yu~lZNwH4$%`MKa`+=j%N}?( zZm)|r(V&#pk5izF>Q3IK5WPEkLRNQl_d-SFqw*8GSxghBxmu}m!!4cGcVGTn2$XUV z_}fIkT-2VZ^yAJ9K$ato9WfXyhHovUY(7u<;ghD~Xr?4Pkzc&{ugIxNA&~O}I9?mwzS)3yh-6i4e5zu=fT`e*)t8Dd z4ZrvjKqLLv{LPPUp08c*T3miH%Ud47Q|GpB?(SM!8{1>!7+rk@zkka$#|wEHa0|>s zPN)R%t?f}tKNqZ8h@mv6ag9rIb9m+@DP#z>t(VMK)-9gi^t_k*?{w+>xJvhbf~oaA zCAdAOHOVOu=l;Z6G2ED2Z2MCsN{(>WtY|y~#EUd49q5+9b*RuRr<|lzz03v9Ev3QO z4JKRD+*>1`0QJ*Qk;FvIhs-%dSV6&=29~0YQw^ENST-5S`&PZQ zupQlWkH!X*3BqkEtw&p!?*azB@1Y1HV_hMUh1 zq#^X|CQ)%KXU$zc%vy@LJI8mGVh3ppvA}u$?hw}xLE_*+dL%4QC5nxLv-0D|R~Mcx3fZ$hzsHFC#+IHTAg~9F{P(9d9{#)$u ze!RH8+A%&jzyX{&JAX8O0PA{JPuCb*FH0@JZyaj=vitFA!tLu!rpN{@`u}GE`X1#wj#s8sQNP76U~c8hm=qs`gI)^6Ue<@ipd@}ABzYd$ZxaO*O;93S@e_3ZM@;o{8` z#qAM*rknZu=Swt3Dn(f}_FY_DC_`vm`_k2fgEeWmg~JJh8JzjX$y{#A=h zv@!z6!w{#h6lU7;3^@W*mbHQ3SXETD@dvuTP3!Z`Om6T2jUr0vh@z0MvZ#0=-fWfF z2{`vwy}%+LxAO%NbP%L47Xi9BZF=`ThM#vDpdH`sU?`8zH@LsX$O~{x1iA*;L?b&3 ziuUsszgr!4AoWWj(+pxD8 zJ~tElNY8BzJVL9E9FopleY^Th*rkdVJFF>;i8-n-50R(Joc zB3TYTe}5A>=Cba_B&xEG2^_*Vc4U9)cx8~Q-55xRbZnM6EKN|@PJ6GOn#e3x%v?Md z!4)}|EWFJ{1UT*z&03q~l`S6J+yG~VFv3vda*gB1o2T~S%=HrQ<<(PF?MmnCCwH`K zpROr*OW@`TtxaxP0Zqb9F^rA+wXtFlAz1XF4GM49P_BI4(7$Ekqc1@DSG{h&SC>NG z!J-f9I^6=8FqO{Hu(6|QI=kluJsP*hai<^pKp_{#l7gxL3oe>(3Qb(OtOT)OR9K6u zQcO$AX034{q>I>*k70{Bm>6h*VSbGdw*8!>Y@Y6X$awo)P3ZH~r`YSE;Y_f5C-mvvr4#G59 zdF4^1Vv6ZtbD=eT8fYwP7K93OCT_e`lo3}qs~@n>GfH&h7^63qS+m^camEIoHE(h5 z)wdrVPv$L|gU~meQ&?9E=5Z?(>C&Q*mB9^DK^b@aDg_~}ZBfJT4qOt9SDL4`J~sV9 z$$ur`{bslCIX`~tO2{wr4&zPhSu`}a%T)al(F6{rI*(nfb{dcSdrk`uLngeyI?sm} z#8$u9|IWDwm+1Ftl*h}z*;i(aj{D=-bizVCf|PKO4Qy1CUTTD{L_JZ*F0GH(<-h#i z@YOl@err&~lbcM5wsTk#V`hbD9!kN-M$K?VJLae`-|vmVblHtYVva=YqGve4>tWGa zCX&!nbVbGIr%ZMKCW@(_)ikjbX8fW;$qdZ9G>b^}wT6>}xQHANFEG|>NU2ta5<=T2 zEIY>AF@Ci{1L1MVNcYj0b&?G+$uCUI!A5emHLG|J6@p7|WAs})cfgpcNB?UK z#S0i>?t($NSRu-A_Wo`w1l~ybXec6md^}d56l?>hP7O|LPk% zLYc!hyAS{dcl9|k3JQutZh&k$gX6^;bTjJ1)13bckaU0511j6NLuFew{MZpn@iEyZ z+w2VsP^pZ57qLnS?HI(V4^k6T+w7@o{=ATal2E5A8Ys`Sgm_jW z=)6NF97tnYC625hG4l+f5-3|)NG)cC*n{$mBXGg!p&8CE??-UFe?W+(ope4_S?iq)p&kSwH!62r!vQZVYGO8w_`OP?P zevTtUF*_|d%f#fuWTap7!j^v^QBnpEwmJ?s|0J?vZ>JFM77QgP(H94ZhBx1UMsUimWuK=$@W=#gr?} z;ii%B3jz{w&UXx`BNQk1Jleh0GXneRJuleS*49!wJ22QNAn_8`GxC9XbXMu<$o|8U z{e}6Ycy(e2PK0L{EEP6wU4G|SlFm2VX;8E0-PLp=*Qq7do@zDCFkaXI+K8hAQ8piA z-1LNYlW>j|k2kN)uZtZX_TlUA`rhZ>IRZ_+{ko}3y2zHRYNt5o$Dc+jc3^{!SLw#x zDxl@#rr1}sa?MusgdE>R?>8Z&@?~5ROjCtjX(H7S z$YgZd6JV~r#j){+s@(f-{uQ+lZJ?;BIC5(yq@Yf%FdlTM|-1S@o ztI5&7vs^hi1dR>d!n}&dZ92rew1-?jr+hN?6!KFmkhzxUT_}u_h6_A}^@t;vQH6O= za4<@&g_&{!my8RWW$j6se<$wBN`(z#{IB2|+XMK2vpXTWU8kgN##!aV~i-WS`>o z!uvLn_4CDvhH~l!DJ$sWBVvxJbk(k)vT|<_8TQGq4O(U)#jNo=9e0ijM>k;E6ntM0 z+~ESuAI_3i{h~{H#d82DmX)2|_3lfkVFcTcfnmlU-EvLZ`@nG;BSB%e**^44pC0EC zASFyR5)rvOE(aQWpahAHvye)Uv!L_OIAa()dm-}nWIORwMTP%z0)BYK`{d@KT#Vmx{kh4CVAwn!9zKiC9EXApKa$Xe z-h*`gkQ^}zf9K#x%A-Yb)L$lGB@xDws`D;yKuYlPif}!dYSE5v`ETJ20Hu`I`Bt}5 zk+E?kQitUJ1X&e|&2B zzF}%Me=vw=ba1z1G~E2H(24I~&C)3V+($~L^b-NurKM>-uG9v|V8qSlvh>F?2lZG{ z$2>V(;q>3|vKJd5kKfl7_l|@(600KH@+t=Nf`S9PHZqLfcg4O3+(+OU`i9{dwMusw zNXX*p>0;~fd3vM*{kxemzMt0~*n&!Wr%*|SUl}6RuIj+yqF?o?T>C&9y&#byQNh@QhYRxQtq4fLmzDKWSrlyOwH z=I~KY^{k!cu)jgp_=Ue_sx;ZXd*}!uTDtODj3{B0?H%Z?OIxMg4=BUa!g4eER7*T6 z{9i{Hpd%At(>`lUDq{D;N*>b5{h*(b7#c)AY;`$AiwA9%t=M0mRMuYJuQ@~L9-ii$p2D%fGj@9#ftT^`*r$*u}OF3_rx^w_0cS4 zjbWQ)%i4b5lid0<;2X~aXcfRM%GPWxDp)Ze-QhKB>-C-)wBZ+ofg4Rbm0V14N~E`6 zC-~W1MqV=o=|h+K2Oarrl2O+Uh7s7e@9ahH_2FYOAMn5dpxGksz~A&q&b(PflfR^8 zhQ;*P0C)7P!FdCl!0_`b18}pRT;K)+%{_c&`K)%smj1sJT#DORFil0McgAeu@oFJ6 zycMEpdl{mXG)M#{RDJ)Yu=-Nt^eO9dro>*f{te>SCE|ZW6YyCJ(PQs_L(o`05=~A@ zo3NKlXX;duOw@a9j&7!YtBZ!T@AZ*^qeT}YiziPEM;6cVz&YQY&;K&raJoTvi}Gwz z#!w!_Dy5MsI|;6y;UbqQlBf31UGsPKCRqApH6BjSZjiF0a0U%w z$LWdi@hlm2_Vo1;*HE`zEqv3|OnU@sQ3xk zBYx9I?>XwzbC<(K)boutrJt}aoC>A6$gL|NoZ-C7Z)PEOKlPEPJ?c;%lXsjl3;AVc zCF+GEydLIjJs%FzeGgwHf>vnSoJT{AQ>a1&eCU3DMZWeAac3}hl5}|a&kRLwgM@eu zGO!M?0QP)&i8#5d2R0$o9pZ&TskIo8%Uut z%5l&(B56U?B04D`XDHQOFSNqWdY}i}+e6G;2!RP&Bv!GC4-N(aKV@@&|G*uQ^wqyy zc1oc7wPWYIOe;R8XJR0B{l1ICPj3V&&wNXR>^ltVasW@V|Df7U0n& zFxC-OeHVY-o6LSa*qGMdI4StoxV+#6_l7XuaEvNe$YgRqV1dRj2$wl|t+m$aU8 zyj?pkbYI4vviuNj9(F=*FvaoL3lcq!N+L!kv7Fv=Xu)@sZ>a4g%B|d@h;s02;MRwT zl1V?!`4kf8=Hggo%(cp$Jl0f^J6DtoNw|1H$fA0}Sbim#(hfe!RV*P2Mxv;3k(6e5Wqp z7IeWLqB?UX#~`0HeUYhM3N2bwaI>+lJ~u-ARHRG`V22huUzTYA4y*f)@{Ip3Tt!Hdx60;8eR_Q?JJI6JABbzS!1adIZ;i+CknLOZv&;fA)7Yl7!%uiu} ztAKLfI1dlMC^Ii>f35bnax<7PX1O^OH_QD+VvdU%0UD5!0Z@XNVaT;ZfA78i=F6kl z`;*j1Uw?^3NVQ{yMXOo>HZYu>ON;5_5TCdq9)h&0M=FW4i^{RVA3qUVsQrqd*6)H9 zagKbI6QB>w#V5qY8@bHDv#)(8kaee9eA)=?-7((rm@X;%$So#_yGSJJ-R%8QQf;v4 z{!DyZ=v;rG&Q3!)trh|s$9PE`UdUGLq;jt-kDV*Q_j{_L_+PDoMAG20tO*gaTyQE; z1DHxtt>HVVhb8XXgK{cT+BXcP^Hd5(JKAwg?9e>@Lsf0clHRyqp8kO=&3ib8P zQ$Q$a!8R9I5M|xLIe{r;D27xcDV8;Jx zAMcvpq(KSS9+OucagisVl}NTvVJ8+}{zHbU%26FDsWY1I#^gLs=9}GzO(k=jQg4sg z`b*SgO{4D$ss@u+mE1nvkl}G}6Y8Pm{^?3U=`nbzw(e;#!NF@dvI?Vgwl}ZR`EZdW z%n6wp7M4B@hW;CP%fx$3?2!Fwc~DNZ!7$>N=N`lG9;|ncN^U9Jm2u zD%k$nA7|$Y0q>7Axw8?8Ve3vZl35f=Y-6JQL12(sF}bX1Ay;4JqZHFd9qFzBu5~Q- zeqYCgNg|d?a4a^f;`zEw4&0al{!l6l^|Sz?d1hH( zBRc#+_)Tp8&7tF>%kqUzngq9F{PJ(FJX86=43yiD&pBZCq_q}@n?|GepciyfW2Q)h ztB9l|Eqw*GI%nTxP6KP)CMizz@mx4LQ|8m(E9uZQwI9tQley@_T_QF;H0Tb8W`Kf2* z{o-V=HjdZ^T#_Bh1o6E|1VbsdCcy*NBK#t_@89blXMgBg;nN)A9@y;gOFCi?JapV- z_iq&uhud>(CB_BIz^Y`CGDn2OUD+c`4Hx$-xL@2MAcwDD;bmkBN@mznL2un%<~Xb9 z?Uj(tG-G2!7c+>phzBn61)HSb(R!?C`-`jL@qYi&)*8{eT_?ojdcH-eziFbYr<`rt zk>FdO>?Hhe_Sf?3(-T3Bq5Yh8ilamM1Y8tXCq0<~hk zKd0Ng+`Bso;piUAo5b54AQw(PFU=Vc_sBdnyHsXFG(Ehit#c19taFmJzV)dc;vc4k z&^IUXDDp|phQhsIO$MAHCw3E@R(xhQDlD>EIo-V@rZ>1RCo|0fttB@p;zVz#ar?8A zmMC!8VN1N{X;-M3)fYNJ;&C;3tEa^f6 zUuKyEK#h%~2R#075;*M9{jxzxonWB@D13v+j9pwBe}5D99tcIoql+q(_sx-B637KY zE|=#W7is@;BM0{{+30C@xYE7};*hDVE{-#MuWak)#bTdG2WE}^C%>XEV?ka_zC<9A zmpF>Tiie#hk;6EoO7VuPlXbb69^ZCnoO)qoe*+-1^6`v30}E7&q&ehO5{{uW5BDTV zaZr>T)X-}KFJ2HzF2V8MU2(U}C)G5}8p8<~=dLoG!41A)kf6l$ean zEXg)dx7VQ<+B2d^wL&3|ld5tPwN6^HC4Czm0k#e z8dd^vfWlva5oHS*(g9v+okqE}bdq&p1f9qQFu#^9k7nGm$2|nXm|qB`>?Sy2Wq*FA2|K5 zZdx8+?`eGxo2?Kbw@d`!M{fX9K_zaL`B9NzE1_jvqyzupxKZUxP@2Q+b3fy zck?RwSf;sxd(8RL=+3NjLWL`es09fD+v;#40YsG? ztiPr8l_i5!g-rU?i4t+_>}eL1%z+oJN8tVj*giUrPZCs)KaMNN8SZub9zjHFdQ5pA zXtavL@p_R^vA>y!r4*J&_Q!=4TzseN+W(BTahA0@o&(xzWE5|b{{Z4lPx(CU6Xhv7 zl;`=%X^bRmTIWpTA^mkuaIm2Lnx(gQnq-kgUauoQh?{A$T;iIyRI|1qItb6mH#7hJ zwhUO&gh%7CCedJoF3OV#DB@E4zFsN3KMf1-BiVbqG#cb7g^P zK@$3g(~4zMpJ8tM@w+z*iH2V9H{x~PcWJi#k1gIITkj;*mdWm2Q>)1qmP#a6IW#$) zj&UVY@#TxBAw?Kv(|P2CA^UQ3?$VHu<9loYpN_v-sQkHT3zE5$8zkUqpa`g1%Uy5R z)R3v%_=n0)ta2??pYnEOgY^(K4zpuzg)J zp95AIb|Ok(3_1G=j^4RPvdN<~7dfX_G-w-HNw)IzydXF7b3!+Rp^eKA5uLGR+Fj;} z_0A4>unOq)w~DS6>K+_AK@u4((yS!mE@bVz#02gRW-cz-B`*(rE_Vzxiq=Z$?n7dw z4ta+#)wnC36a5bk&Nuxni4p_5S7x_G2>XarAc5FQZ*Zqux>MFRET{%m1@~vl0A`Y7 z%J#~>OVR*h=x5K=A5Od!GA`hjz89nQAsf#s36l3Cfm$cGD}16NoFtQh_jjnxbuOAq z3`k0_A*mS({2Nr)RfZRN#A3@8M+Q1!RRLW)xs0hSu5Q3Ue>ggj%LEqNH_xZFW-&Ye z+wt8@3j>0)Xt0~k3~0#;w@rvsjyi$3m3=MHWIA$1&M!;5b*`woA_0wlF6YcCeOL~i zz+n}CEc7QtZ;#&!A5~d&cLgmDl6+{AX%F%o$dpL5tI&w&0GK&$vX%^s~T9~gmFSIORzYH5Uw?;+AO^zoq3Ay>dNaUkq%Y$Q+PhWWnXKkOB zn?He6(b)tA| zZJA6?o%XEjj#K1_TRO}%;8j>AZK!XOF+u)X5Gt+>9U?hGOz#3NuMZ3JO_3Pxh;OY7y!bhhK zR>W7=HZX+jBoD7^vnIm#RV3(P=I#Te-y>`tY2U4~FGuyio5xQ6{8YWu(ba?ao>D1v zL#fUkyJ{O6O4>~x&s(7Gw6j3lIoBwO`d#l5HEASKVWn0}WSJ*t)dw}$`zm3Ek@#bByxfY>Gea_{ zf~mwZ3SGBtda$v}dolM5*4PQPR+rPL%7{xXuOc>pqexfW(s#08ByZt5a*+7Gg~Y0X#Q{H)(2*X$~PWN1)o^nQ+jcMZP={M{a3XyHrLLL35l*~Rc1 zlr^(Wx@Q4_`|4d4Z0K^?J&}d`@Tf9`hEl>T@&V zNOjCLWY4<#@s1W!$AE9q`{gz%hmb<$ww?t-3mLW`prFr@t6&(N??$q1^_2msSz+X}Am#LMa^ut>6%>cZh%-91KKLhwS8U0P zPZe|R<#>ybdAnO&x?x)ogp`sI)0}2j)NBRP5P%nD+Y~plrW}IO&#t5SnU=t4!@tk} z%YiZ7NELsd8$osumjau+NG<~|ZZlJfpmd2U^5$C_rI^Jm)SCw5jrr~@TM&y_&`UY$p4&eVZkP3uBTGc?{o+K#%iFVRib374LW`L_pRFL;T|5vL(4`Jd+w8<8hNk9#S|_?X{r3) z*>`^?oxo@rgbqi(qI@%Vtk&sNGt@SVd%VaZ07Ms>AlRkx@;(_>Bc#D|*a}oiXnVVRTfCbxe~Q z=tP1s4I>exxi=P|yy<>5K{KGDo1nbyfOPR(o6#PJ174->@9#bDPhd6k)(7UaybrfPJ0#RxC&|`{0&~kLPTW zX@~8=wP{Smsut|}d&jtpxB_J%1AIi=PzqIU6`zLMVn2g4L59YYWvsr^r(W%DZI}UNE|&iz4a6^|Q~i?LE3i zcLlRZ_7u@7J!W^mG4j8G0OIcUS zn0~&ARIgii_}f_g7ui4@Qa9oj1fc^7`wqBhk)4v##VwGI9In4Ru&fg1B=Ok_QIJGZ?~}y|(Vkzxum3=L@o74O%O#t?IE-ptuAaTT zH~c#HNpv}dI_`;^48pOHZ(Q#wn->9E5L6m>a0F$_=OZo=aFe{F0bYzaKG7EHvi|AK zN6qH;Jsy1L`_N5JwVV&eBq+Ck-*fV*i?`=8QyHQni$;Ty{dtN$!SI5XS0(t1U zlQEA|+|QM7F^P@p9BuL}71&Y2kFJCy_2_i^7r2QtvC4ziS>ZPW$LM3EOqwEy(;qHa zZj!frN75hCKaUOnj60-{Vqyt~#ol|qBvvn}P=4fXC`iC)vrELqiPBeYR6`<+M!Sm>H2hVux8x$m`W(|{p#ZV zpRh4vxTP{JqO4?ZJf*8 z@MnASq;@Jc0txNv$V7=9CD-0n^zu;_NDOW=O*U9%^!$v!7S?jWr^X$MD}QAW`q^Jz zNS@z>;!r-vedYUn$_^LoI{veq3sZ`>*z||EDR#^?v78rGQA*E!-CR%){v2Il9d;{A zu=KWcy3`tdN3g*ZiTK1MZjPWo%CI7PKZs`a(7aLP=6QU%ngFO+%Y;!bYNbac3;7RP z@NVuNRI>y;c6AR7krUEB4q2JJHk6fyv?2nOU52xeWeHZHbJs$jysR$GN&Z4P1qh#97Ps>HmA+KD&r?lyr zinUauroP(gbqadeYVYlZgd;FoRv7GbSL#GqrgoCl?O5HW3<9SH_fIA(ToMuNLDDuu z-UF?4%f5BPiw7VlrYo9pX08O>5@Zo#T`$zOBM5H^W(8Y=dRQw9gs!iTHX8Zswv5c; z#pV7>x5>kmL7vw=Kc`l0l9W-0p*=krBU!vt6twDB!Wo@%wl92RELV(w&J^Gt{fLJL z8^EhKw0!?EPW#F27~^?;-l!QwkeQhqC}_VR?f=J5IZj!n8ww_(Ot9cph89IWLCyF4 z_)q1owOe4@==}+|`_VWwct&!RfJrSO++eq}CkZvAOs0W6w7gI}$WD&K3^K5v$qHjl z)hbkf|7gnysjL=wy%&r>T~aml7dp(m!BPB;%|Y19M()TEbC$sbTT;RM{VVohOh1A} z@EHQMoQim%Iw{?!G_omX21Qt5<%!eJ!;KiYj|k9Id36AQi(~2cfR-Il@ZZti(ZWza6%lx{r44a1|0=QcXzW-) z_Gr*%TKr?qtdp8*XKwG&eMsEhijk-z(VX)&s8^nX!0Dpx5Ip_y#Oln^nWHPIqn9N4 zCNn8m_!lu8ZCWj9=9tMWWxvV6FPbTmZPgfNqMB(|H-}b6GGvUJNTO<^eeyDYbC3q{ ztihCVNK`2cko!{61t$Wq|lViATWd~nR4G1_Bz%U zA1ru24W{}PS54wN^Lz8YfmB$uYG-^ zV{%l$_BK5DoQ@EtyC1ZYSArMpZO>sS;mqgKI% zytomHgugq6oIWF@n$eWsYK+rYGWT zKjpQddO`SC3c*~o()`FFba6La3C3^im>Y9_Sy2_&3X)T9~s&T zWB88Gx7d(f@#?4JOsOeTS)Lf>FO0jEw#$`p{ntG|xNHv_KF7WK9}SDeOxFyzQrg5S z^)E|HU!IBE% zM9|1CG7Or6Q*q1o`1?x+X>MNWQp}5>rfFS@g?0B22E9(2jg{I)s^BzL@xuD6g_MMS zqB#CKV9zsnM%u+&2z| zDZjMiE~dA-_ti<8{oZ0V_I1f^rJ6oSMG-&!?>eEx#{T^#+Qpv-deZI>D2QQUHrVrlPb@<|`uZK?zeZ*?9dD0R{4Z-iI&6<-0Q&UD>G1!? zxMg|#fY;rei*Uy~h>FFDIG*Cmqrb(5m3?4J0kH(%)#$oa13%WjifA>i>TVDNdkP(a zavE%$(aP$-jkx2Dx0KCiR73wWB4Q!$h_-z*Vnd;*2J%Q1CK3Znj~l|-xSo3M-`}0D zu2DBXj)+UNKAmcjNA;1jI?LN25Ql%|nc*)FqH&SYL5MOnB`+pMGGPq8f|4UQtN3X= zXzW2(E?Qm1z{nkIA-Twi#Hr?}OV5@zX6USXV@oD?O%PF4%v&(GX#H*E23o1D0Gk?a zETpZcQ0fbt54GLZC;kmFS3HoE*A4bire~ZKLaq3!p#BA2aQ)6yTl`AryMXUKFGqJw z6*Grp_U*$xTQDmB6R2;?Y+HtBL1pSp*S+zj)6+ckOTONolNJP>C&DePRPr#%^7IM1 zjo*AUOx!G*Qvo5n@X!2AHhtj*?+K%yvLzko|1$p0ADag5E$K3nv^%4a$M6no(QDWE zC(YP&tvKhZ+xl|JaHvlv%f#qyx5nXr)yu7P6()YsqQ~%)`Q^(Nl-kc^!prH@_m`Gd z$%3T+X8kBKh2Ew1qNcs4`R}v{dsiwMs%!~Tx%cPgU~b`Vd_HHRI;BhS7x$;vETu9| zDgKzpgYm6xz}vljvQWvy%z7P6`uc+mrOoGorKt{S5HXn0a2pa1B~slxnf;~B_YNsP zM{sy`m9Xa2`Fal#7q|WK&-mshON&D-$Csu5tt1L3ERmnckX;yJortY?23>NZRNRkd z$QKuvx(CJtctsMNKmI5kU!nslH|G1O7}Ae}mYj}9*nsEf%Gals_aF08=hx zo;BhK;i~FMaoSq*^4WOUiwV?}_K6g7>Av9Nk?@f$rG}>PxC$GupH!5eItZJSb4*g4 zty+T*VeuL1nnd^))W?p-DCJ37wdP-5jvj!5zCZ_2YL%x&=>OId;Fo_l;wl5XyA;Cj zSMgqV3tBSsDF9vR`I#T^B$ch5B|Ssou^O2G3et7mDLkGp3EEtAP5(t zJfI@0qd94pXwmweTf_f;#mXwV5s+E23kxgZhe=Ce{PkVUMSB`hLN=LQ)Espz>5Y1G zWYgjsP??A&s?_grkIijT&}Y6{{~^XGWzEMDD;ds9m{_*pk~V}0=}oAPRRAIofMaNO zYa{nj^b9_Wxbxx#N=BpIqFPgoXfT$jMW@3fyDXn?@Cy(FwE_j8(AD!)nk&j~^MPau zqbQ(M3S&j0WKA^`POfz-tngh4Ea{!-*~*pX^-5U|3BK8Ys?Z~%prX$#t_Nn+(JZSz zo52fQ&v-67M$$31xjLn8`8vkgwSYdSqBR*qeZwhbLl?Y=|Km;^4sDq{#ihW`U;V>R z%M_-yrq2z>!p2FTZ!JBEYPZiv*ve@ie?x2-;V|v;)F8%HMs{WhGwj>Rw{+ghiH}t0 zWA~2MKJrM@^(?6*s$1`lVw=>?HXz@*KaNL$7Vg>sq#f@xG|@ z4p<~OeIGYFfY3$-y^B^S)jXqqc z!_`+xQV>1MsH26@!BSfd_Fk+Jl^F%%6(p{=`bU4!Mlf&%^9;$Ob@fMf(WYA!T?Uso8xYpuvzzivxPkBEVlDz!48U2Mauqvf-mxS_M%u zGU70D$$A6*uXW$>-w~tZDRm&_%7qNQf2wv|<=k2JC(KE77QoYS)he4<%cT01|C&)4 z(pzg|TGN!O)ZqL!)`%>YmHNnwPt9IvE13wZIb!>j68n&~c2;K%())}yz5#br{X@|s zk5YIxGdy=BJo`mve5P_5Xz4N$Jow(JL!tC8mE*Z|?PkchUh6!NaCcyu(MYobTCFnRbUq zw3g8m;hi_N1-2$em_pv$>bURq@!>xdwJ|yh1((9sfh*Avh^9=F(G~Yin<7$QLBp?B z?=${~i<+yeVbYsdmubg;M;MCv-bwvuuMlp(6UiEd?m!MFKem!8bN}ex2CU9 z`X=b*Vd*G7Y{KAA&zFxQpVY0^3k@7=9eOq{XbX{)eKE@i`R-~7-RMJ&Z46zt6j)6n zuu^?zgJ|`6aymdyR<03Kb_fdMh;>Tov1^Ku66`C0;w_*?Nbe&o=84b@o}T`8eTvR{ zz2@S9Ujp@Wt6&C8G6mCfuIM+8F?%Bi17mW>oUXpc6X=|_LpP&d5LWLv!N}h^O^FrX z(DRxu;QGJ??BX1$IZtLVQpnz?&BiB*oxveNAB-DRIOCdaFk{OhJza-It>CukJuvb?&FBb@KN|yRAci@WJ{4&4=T@ zU(Id!t&808GaVyehJs_lAV2D2f+*mAxq74J_5X+6s_@(;*!-o%`qzINE^J;nb#wf4 zrofuu-MFVV;D%>7j`T2l>lJt7JD%Owc$WsM{9nqp2$>i#J0We!%Gi8=E_T|WbPr>s zJ_Yq;d*x?G_Sua6N>X*cS!D>kaQSznLU@NOt7o4hqO;40Cu?x#Ryu&h<~4P>>35#r zF|it2NsN5TNx$Dq9B6~-WP>BBel0^2NTjN1v&2bbP)c81bE3U8c=NjArBB7DN>H=e zI=c1#^3g+ga;5cgXLLDsx&>4qQeI%&RE%-X+Pn(spiOxFU+La@L0ux~&iy?qf3vx9 z2cTs&j$52kuD6S(S5`L6%_*8?blhR2zM&=_KK5q_Kivd`{&6HSlfyk_<3Q|qxR_sC z{#spgv(CvXvb^*DCa}H*V&mE7SzFNkd?FWy4T^C?)`pr zVX9wEmYJCI@4LoEX~%vN1?p2&3xaF#U{b^pzu!u^&owWqm{Rl?oi}Kt{+nq6|+Ex$rh^E`KD-gh9~knX3`?gQcX^pAnr`C+f!N2In9mAP%{z}q!mxAdy? zhJB)EJwbip9w!_paG&nw>*r%Ha}~uS`i8>)ES!Qq??1&rAsW1iK z#7Piu`d(YFYkFhh6d0{HcIrcJ>#Z(H0t>0MaMqUHaN??@6?ODYrLBL%XfkcXLu)l9 zFpxFEiR^PLl&Ywnaefqg(kY3{M$R6{b$#@nCR^be>5Oso>-NUlo!WnkZS$Bm))CpO zZ0-ADn{4$d<%@AW@)s8U5Kx8RrD>4_L`o*gEp%F0uy3q1E+zc(l;}E?qdTuk(!97Yo1Y=XXlN9Ap>8 z;{>V^aio2Ea77roKjmncy*SMaC^%CszycS>WG8;6a%Xar6xUGN^qt^#29YiuRqH*iT}$cBY{V*LVX zvUa?6-LRDwt0QF5PqroU8XQx8%{oRQMxXAjEw+|KN4WE{^Usg8vw8led7|=JPqB)U z)-W(NcF#NjCHM3GOR*-Ug6}qGMW*>XIqvI#qKs_h0(y9f($Yb1m#3~$He#@W;ypSe z%=h-;BN5TxUkZ3ULhg6jgLH%EWS@&-s+>aJ&(?0g8_=9ot3Dv|{vsm1E0jP%fgG^aBm?dM`i zC&6C}7Tc2u1y%P*!JVm&SEo>+Q*GV#!$8?i%VB*_AmEX|w)>i5^-OIm)@d%qok3-2 zM_^COCN@BWrLZUpg^+nTu2+`+?%-~^ra%qul&%dHml=#21iFa}`6csLt zII|#c>TcDzKBruQ(_58*(BnR#$2N56AW;Npf`SqeQ${b5l*B;-6H4)vr2guL->k9{)FPxoP18#R9Ds^koFK0X-({PZG-(?t9-}16SqRH%-IR_vB=Xq{=CD< zue+Vn^ijsnpW8Ue{_4tA<6JYWmq8qee?rOs8f(+{#?76l zB8;2s}3bv+!8ojs*mkt(Eg0?`{_h#>! zs!T4otOh0;h0^d-gu<(Y=_y0Yy8}O9pRNNGjBTdC{@B7Jqm3BG%6+D@yg!4vq3N0b zWYO&MNvn*q40W(u94I5D|H?Npjd$Ko_%~E6kfu-n8=``OQqFB(i$)g)s>v0z4u6>1 z*lC=ecDb5EEmSwl;UD5ZYPe2rqdmHcINPD|vD30)C9${~Q2UD;AG9XkN?ubzmg>!1pi|yJ12DhaH((Wsjf}b0`&3f(e{Ebx4tD^)&NQ+gT7PtK{u8N|Y}_b+ z)eIT19>3Up$q0BHHfw5P{(oEmBj5|xnBxMPNyEA#c{o_pIkN*UHr@E+*Tk$Sjs~Q| zS9Lbetk8v{tzV_(nC;0^wu6>7Q5I&GE0&R z_r&w(FaScovkaz_0YvCXU52%?c?!|2Uizf#7u_c=X%Z?c{QPK|?fB#~?sH5OqjG$l zu<4q{iK*168miyB++xl)d5G3pGVI#GPR^mUAiYxHvK$8=ng{+M7ttx*67xI4iBRy{F6ZC&Z|)cChxXmWO7HjGj%If> zqvs%{Pz6Ii=$4dA@kGc{t?qj$N)3 z#$l1MrDhGJ7$HVXi4xMzjUI0Xmd^!@H&pdls|14PG$%kt{Cheg;PXUkO8?i7clbY7 zvFV<>$5y@QY@wxpn~^Y5Fb#y(XAnP`wg zBK|4++L{3_%ApEav}H^w0`U?kQugp-5;V8@)J_X@3yn{2ZR~6Ylc*Y$&F0WH!dY;C z-!@GxISAQXRoyCfN_ z=FcX6D!AS2s8Ps9Vm+eFGdPN-hV|aFJh1AUy}fF@nhce@r(?!enfj1!exm8=VuRL8 zL)a?s>!bM*l~Z-5<3fLn!h}_m!|kiXBg!CAG;i4=ybB!OyCF;6Uh%?j$qqNb+=-9E zUd3*j6F=rFLz)(DX1?9kdZUtRn$13PC2Y}VhSi^YrXeSM6u5sIMpjlWO8wR~XZD;` za$}0wD)a<)z0NJ;H&W>H-p?}4yU>1SI8J7{0@;<)RE$lym3BlqdT%%_7n@~Yq$93+ zuIOS!83NUlDCGQEcS2h3+zk@W&W#r^WdYxg#@;^|umz8(iiG9)jUek{|}wq0o@a&p0yMBRC@;y$^7kcO@d ziQ~GHUp4SE+G1Kt>3SvXn{m`tlMbP*qM!C6aN=-^bX5YQLyV`cgk9*C2>$gVO>jeBv zmQJ_fKBfG!ao<$uf6N-K)xWPzdZtsXp=31!v-Ww*`(BY^vu#5v6IP8=sap7)GAV!e z^;5(SvU$;z2qw_6Sj~BVb9PnH{HFosX0!vRajBSuzS4S2UeudF0pifYYpn>ISpWs6 zNax5xRdC~qq+wGzSwLDEH;R@%Eu{~r1dbwm3m~5M%fx=ik%fi7CuVPiU9G*iKf6b} zf1JN4OrXnF+oQhImCn+B?ngkl41)QxHCQCELnnK$t&dsd`bp@ITXJMtdv?Y z!JQ;gWWirFNjPJ|*ZvZLb-%j7jcUPrXR&f9N+3$By$`IIHt ztG4!;yZpx0rA#*rGcriFvHWjbG^|{AGrh^sjM!dzSP~ey=lVFs7M0{BskWwq7VOQ> zhC;3pR5E}~tZ<14;Ot}?X&26ZpG6SW$H5$Cmq^?3+MJkkggc6Jo@?KoXT*D45V&wW z-NgY@9=Wf@$j3PlJFA54e7SoV5y()aqp?ef`z*W0_Smr`Dw{(@ zaB|!(1r<&wj=Pmo>s8AMrnvpk7%ZH*|9wslP!zTUl$-jWTQ}3$3WKdu>-VwEs>9f^ z^tWdV>Ircv5p(1WXpj;6_1@1(ehdOAuPRH>#!($2d0Ah#M-Ue!r|VL|*DcI|Ho zHD49K`=?n9IElBc3|R|atmdwgaF)e+;C*fQR_cR{& zUp#c={Nztu9{PrqPA+_Mdiu6^?C58$BwO7QWP9nd4k`lknLIF76#g@Q!wK`OK*4%-y1J*s-&h`JixE6$4$-)ijB(VE1ABDUOVQtmbemRoHT-gHfbmzAdZWe>qi4DCLf_TZ+ zzTOA0v#jhEP)yXxf~;1ID31-I>;29aA}N!s=$L3)J)$ttmy;P*ann9}Q@Ea$F>k_` zEmqe?wkW^q{Nc_?Hfh@YCH(bYI_cG5iC*XH+>+;8>Y)y>Dpz{OmXNK+H74dvEMctr zE8WrUgy*F(L%#$xYOfr{vvBuR!ir!RUB*Xrzy4K9Y%AE|K@7$nzeDTdI_wLbei}v> zHUZN6;Q7CV3dPP0)A=$K4A+&>$8UQQ!5Eg!ffso43-1Xy$Kr;{3JDKOTGXEm&YPv@ zQ%nMK;ky)?FSdTx`v&#L3s3K;DFq=imY)>w5XHiwJo_wD&^ii&0$%@4e44`-Gc5k! z_}ptB=YJT~G1Fimp1Ix!eiQ;`S~r7((O~}*t}V|y?h#p`_iaksCb*jo3rFx&ZubDd z0zjV16CAEH`jIfB=Li~RKR6(o0l%;5}#$aXTF_~o<#+K+ZM>!SS zCAXG-e~9PRXmwg-*^qNr?{a5-i&Kvs;fcpjve=XuptE$C&Y>gZdwo9n=woi*TxD%- zjpqCuS1w)P$e}}=dg@t}bx`pTAu3O*W;f(J-}x3tjveKn|LHAyy*`hfIE5)Kjk$Tq zbMD-@#>ETgd9ZeuyEm@zwWpuJHyN%g(N3K!moMCMk!>FJv3|d*7uUI1o*Gb@3eubkv#&sPWFT@DLxYUe>5&y^k{UhV{?Rb3`bf zTRhCO3oF!INzWJDn3HUTV2uP}DXc*|K7QE1#bK{MX4u=~?!5s;Q3VS+sscl;0Xy+I znzCXZ1w?0!y|6fP66Q4xe-r{GB}!Duo?4s9{!taH%BcbX9Y>HRLq2}*9d2B`$TQEs z$cZPO#PfZ!v_NAX0$!&z%e3K8N}(ph4w zlzRR|69rDE3t~vFWA1K``1QN1{PuUZS$|NF`3q!D7srznrKZSJgeO5djMIdmS^Ls3 z`{Be>vk!za0R!y*>pTZ1@bQ8WQ(88nA)6Q1xv{m)@6O-i-~7e%99n46_Cu1v4pBd* z)m+4PLdw+AFLu$nz!ef>a-`CgSFck&w+|FxN}@a=Ei)36p|!^I91MnT-QkcE@R;ea zECrpw$ND}SY0CNSYy3asoUP%Ip)OI4CUde*k!y6C5?fF;e=?AturnsG=fsgiEYw?UZ{5d}mLs*|&`8L-#erdI2+ zbm%z8PqlGXSRo<01ghq*UT=VaIEp50Q6D9%h9^toNkB#=Zw!LUr#_EUo_p~{)Z82@ zO)*(PnwBUf&_#-Bgyg*uo9D0b;M`@(-iQ@9!0pt@gvFQ63|yOnZqr6S&vTTjLLr2f zvjO$Y8`enj=~_nYGgM?%Lo21|E_5082N(;|3CPNv3zu%OdV7<1e)k!#y!kS|>(Op^ znd{Djt^P)ujI^5E zbBu4_#(nBInVWOx!soEP$I6j8?hQtKeDfAxM0=!Z4cGAz{v2N2rPP`mhy4j62}U1*EzsIs{puzib2LRpq}lH0#6!}RxW4lxa4M+z)SER%kzgxI8TB5pu@`Y?W0&n= zik1N?XyKV`0$zeHE!vjVSs^XLRw?hWzjr*UVw&!!g_#Tt6f^rXQIY#9=C+uc;W0ad z1W?#Y{UfEM<~g{wN~ACQL&n2|#$p>U@bK$3v=ZPXjJi%2h zlx*QCke(pZBf6eDu?Q0QwTzYJqnNmf9eao*X4eSBVhvY$m0f}I$c)d8yF0x5*?G>5 zQsPXL8;SM;kP1^4GX}0#+dn@KK9^G%9H%TU zE^_$D5ynxvKkP6D1NdQ31r-_1`MWpx=$*5C^7&_s_XdPYVO+(~revWa-YQvaxSR+) zj+TOjOtaA+advl?)ihy!=N7HSdAf&|_?!Rne_|NNTw7h`?VtUE@nFcQ$BxYuP*F4j zAPjvVoB`vH?jQTv79i!rVQG&7)4sp2R+y64rWr03(Xe1JjPQM*n%AfXidKLDU6kDT z>|Oq$cZYT>0Hd*{QXAtske5i$t!(jRwND$Z(WU@1$^8-HAri+y(w;E}993bvQX(9u zdTrGHGob}#QBv5P41=R9kLXGzuJM%f(EmeLlHvXJSn5XrV*Ay5u@tC@m6Q+`IRRg# zkVvJmdPtcK$&wwC(Kbfb7$zm@#sxa<1-gfxqVVRpH;CBott0bo8g4>tj&Nga`Q&cN z*7`cHF3s^*ub<&qxl7qw#T`00jzT#Ce4o--tet?w#!_yL(6t)EchI8@XX;P!DD!e3 z6g6Kd1)F}=e6Iq-uocKs3&=Cc+WI!V{=1AH+~k>+qbN$Y`deJu+~Hc9vE_smwFb@6 z7%Ai=e20pO&z=L4$@0-q=M<)A^vS8wVR84S2WnPW-a9o!tF^BRF+~l}UHFfo!8c`Hi>AI8j z_Rl{1gqt^RaP#_2(kRArJXRJC;i@WmGAW_y*Jvy)RvWn1%+1XajRzW3~tGt1- zG^Nb*MkX>?db={goH^!#BQ8 zx7#5e574@j!-$EMfS%p6juu7T5Y6+(qzP&H&`3@7~Z?e@u$BGnAcu=h3B7phRxkw zvb8nZtrjW_5SAGLJ8d`|*JWX0fkA)7#`-3u@UXtAynIRxX~tkMpxJEDneX8F3eOAJ z-q_*#&09Qput~4CMF|PM=~It! z_Ut*9Ivrkr{Y`qeR{8kj_Zf{wNMSj4Xc@;=K}f;#PjUVFbsRt7%GK+9{Ttt;)t%?! zvb3ZqEVy-^dFeHFdqZwr_#DS*94EvNTx_9#@33J8D3=yTc}U@4r6DV-Yc7akNGBB6`>FA>y2t^za5Te{u8# zZ6vK`NYas94h*}E0O8bea)l;FDi2rslvnWv`2P;&*YAJE_3;8#EUCmy?Xlb2q8 zjpm`Fm0ik2Hd!G;66I7t?POdJvMM^UaxxuP73*8LmGNnwg6Gj_)+qC=0_>H8m@t@K zXNXB9x$t@avpf9XKYE)>HwFl2k-`MD=jvp#Acwi zWyLpBYM&U2oe)C>7Bc}z1x>F*8mB}>pU`uu*F3atu(O-8v%AUt8~1qS8&C4>SDxhb z@(QjTu{RhX8Q@BvK@owL1dfl8B@U(vw*Z8&{LXF@7#E=nLL+Dz!Mqc4IP4He$!l?j z^ab^~27z`M^;6Do?(lOvu>V6NSF|E!D z3(HIFZ4bC}>k?}>u5+~3pd&+u(Jo6z4{>yEnan9U@zg0Ilk(ALAJH518TR*RG#d2# zF-M zNLj7ZS;IVGD^7jSJlCDDOF(FYF`5!RV?-6Y8d}xE_N*z*RY4RdT)w=<_1m{Oar`*X zJ@YKJT7zz@&fI*5TD{FU>f`!8QaBh23S%jY5^V)(k#pnvO^&^OnsB+x=}woYUU(kU z@ae}R4iyQD{gl;z{spq>5zMvN9t`>5$~7);?BS?6c5HxBE?PS1(jq4B)e40p1p-TX zpay-k{{YAZ5PA@Lh?I`85{FNoB*BEChd(zPG1#YuOcxaIz^ymy@?q0q{ z@7@+J4l)Sv+Ex0q=lUdNIsvH#MUg*Li+Y|n8{|nTaa@V-y9eH56-w*63WOj@62|cW z;Rn;A*|K)$?!*ieT=O<6_ z^<&GVvcMEMo~Z~w#jG6P;+$#vf5N!o!oaM?Xc4ulH{7g z2t2P=vHPh&2O-RiwIzf^%Bt@w%Iu;3tO95xf_-v|W?v$2<%D%FE2RJea3(VMgCw2< zeVrS)Xge{%)&|E;YzWHA_c-oZ{AQgn4DrGyN>#OC8fWBbPQ4M%EEhb_nWcqS_sk{q zYZO_ICk$Fg+&q7o3!i;Te`|}t^|0B1EXzo;s?MB(zd}ryZo;qn+-O|=ePfVDf%Orl z8Z=91LSC9+6^@cPE=UDMR(_=&#k8Ksh=&-Vk4mU(VFO)8_--AYX^N~wI4*)5D+^T7 z!WRkJk4Tc3%a?rq?eG)qsDWt)Bw30wP#20!`dqlZ#;2E7xw9R!Gs=j359>@+c)DW$ z=_1Ehibmj59FWT}{o=f1U}GXt$2l`ngqH>=sTH7EpyHWYD6X*Bg_1EE}`;~>it zYX!}EW2UZ9%EfW*M8zm5%Dk$Or9(dP-K^EzSzk3A$6UK|m5ucWbh{l6A3cJymeOc~ zS`E+hxV?6l_uhMtAHDZ$7^lcI!w+0aUs4E*Ei(L}_c?`sUo%Zh2-%rmX$F(3FjD|RkDm6%>F;nZ-WK7v#=b7hU=P&>A zFWKJh@uPoyiw{5ff;cJ2y?{oegK`u)FUXR-+K+|7mU^OcJUC#sU#dqRCHef`!3z6- zr}{hx2m1%spx{e@=t08ZL;KA1Zz5)cF3G=-^y8-} zYHc=4!}^0;lxaf4@hH_2y`<#)=Zjpre+8#o@K@hE!uOwEWN~-E@Uuu-27ca)+iiOnhYqP`kt0ry_`Eotd>>T`ADJHTKTfN_kxms-u zb-+mkyIVb?@nue)ImMC3j*w(yZr!`h>aClst=*}l6=i{u7BBEgva~Y94g+*rJy=l` zvAw;`#>NJo=gk04si4$3!{Kn^`DkW~h0|V**N7|b`TY8=6eZMt)!=BE3PLF7y8$dVakstTN|cicPK*lFI?|E6B7+O-2rKu^1=%*aQX6O zjvae|H{X1d#~yi{SqSYBD9-y8DiV-FK+#pz$Y%j86pCmuURb7BH5B@NHRP0zamA2+zekhV(74M>vMi(5 z>mb@~q_GUGV0U|m-K`0F1CKK{D23vfEO%q|!2UJ3rz{W6bs<3PvmXSdQbBE^87w%& zbi0-x{_QV$=k3$H^2&33=G7NTRh?QIBZOy|b#cbxrALb})$8ROG^P_$tFci=T+>8T z9xXvjOX?=b3&EDlIs5Sk{Or;hZftGP6P9?QNn#U$m_{@^jYJvCb49-^9+1c4)c6OGX%`GOTCRy9wWNvPbfhmZTW^;2B-DuI8pFl?vTRO6SAK@ih zCJZ|nYrP%Tmp3XN>n>Sgh@xa%1bgH6+z9MhzQ#c)pODt*(0Csp;!-$@ew(Gs=V))Q zQ4V|bcecO>o~(5xlT&j{O*HYbqI3%KPSuD=0^7$cjMqWIZw)_v>nz8P?C|7c4>Ld2 zU}AEH#@sB^GgD;6kk^0y8VmC?DCxOy?qk+gmU-osS2%geaZ!kAMi@tT8?Y=?jCU5`hL!Nm0 zDSrNoH%MFaEF3rzl#L#o)>y3r)*wx&Ck@o<4jS``%Fxk&L&BxQyTGRNLJ+A?csuLJ zi;_mG2_ojBD_6O6^Ew9(&QV*KW%B4z$OJk{>9=?2>~uNm1a?@m+wV|zhMbyNV6)-4 zJ|$?U&@UZW4L)M1BBn&>CH8v-8yjubHafK18Aa|9s!6QE9$U5`ZpmtRCdXwY3pzc;{JL8=;*USaDwHy3-n z_IH=~(N8Y2wp+u;lVqZxHtE>iT@FL6SdPlxkbdrhy2})Msik)gRL4a`h2Ih5b9&E$ zSquzGq^KteQk9gZhb=*n66rc?9nH6Xbcyep`*7)UQap<%vPTV`2CyWOVW?=v$q!)%HsFeCn`36(b`hC1s)Z>)0-J!j{!mX=U$$t4UN(zq5&Y=)& zxdCyasLP0~H>7A%HP@o?MbTN0P!g>b(uTUhOBpzW)qY%-B~pZ@Tv?Xbed-$_0(PV* z3K9v%Im*&h_Wy)5jlgS+wfNj|>Ebn(7uUFQ@d_s%yq}j}dXBhO2jOVO8tWsnp(TkM zBymKZ=d5R;ruKc$OD}(hqT9twPZ=3X?O0!0rT6|K+s%a5QxEd?>MC!ZKTEsbpq(^P zea}oXOGov>9i(~|thIPsl9vYOODg@&J@Xkttr3!UH&!?3kx|-$wY3dI>d1Npt(h8G zX~>2{);BiMrDs@Lm~K&@s1r?3F?H||N!p^_A2L~##KKj9A(B?DHRc9}#(1%3H_!8` z#tFRLz#|q|Ti#|5Ey{v?PzHRNj*vpKzOlo#YuEVB5B>{VTU+FLiSdw^hB%Iiql7^= zq+UzMwXYXJ9f}OxQ7UIemSxoI8t43N3GJ#csradp>+p`T7riAETMHwL^#;V4E;2J0#;)84b7D@*I$cHTV!kK1=QmtKb9 z*ZyWm)hMmHo_qINPf%S~_qx!KD>2q%tw)N`;OTWblvz$$6x60BNm?yxkw!Oa6pAxOB*32 zD(({}X@%7gpjMn;019cs}QYlj^z2C`ftA_esq3G1hEb(>PYEe zfA$q;)`gI1fhW%kjByAw$QT{f$h^iYO})_=2RB(;p#akqU#-`A6o)~p)D&e#ZVYJ@ z6U7O}RBj;aLQmgIly?YgC@#Yy!$pk`Pol7efl)@`8gsl zh#EC)1RXm>3^IFjt+;c4?29fJK)?-m&INWo5tLC;vn}QKFl}%`+vsi)2I3A z-~EJN{NfiRNy4e)CqigkmQiBHc)`J-Hy-rpNZ!`#x|bksKkNHW=g%0KRVmy@4e2|b z#Ce_*$07`rxA!#eypstVhUN~7Q0{h-n-D>uLTC&N=WkmF zff-w&CHD8-q_~5#YR0|8{S8&66!tcuWreKp)z{=48Je1u2yalPMEH_=s%bTv_%fqN zPI0Tf#&Y*Mk}eZbLcd$%%%bMfhN4_w=F3kU<;CafOw9}_%{Hre)a(Sp4)8-+)f`oi z0*w?U3XgOpWI*O=9iBzCY-ot?S76@RVZL*d*xwWtLLj4r!WOtZSc=m`fh)k|Ow!1D+fAD+1%luTG@Bior{N;DP$9tzQ;`25K8i&}aCP6|fd=-vlyu*5riZr6Qo#Alj z6mYaDj4u;+bf^)2Y`q8QcDr=@9qLIsX0PlIY8w4pciLC>%js{!3CJ*24|ZtJNU$Mv zm~bZ1EQc4S=?r!_^U*~vT)E6vcLU=yZmry+(Wv1HhpaYf>n&Lkcq?I=943B9G5-H3 ziP5GcP7{>Yp@G%7%s^IZnk!5{`!qccX$!)>gm#=ev@jr0tM@RSvpZhFd{ru;VS&t}* z5mAgvYWSqd@@~n;*VeeSxJH?4jEfws(BV50JojlK(o10^~3O89=UgVWmUSZH_gDLsw z{nLE;i(eogX3Wpd@zb9M9?{L!Ri-9ebcQ93NzG2T&*siKChK(`IDQP}gPK)oMOiiT zrP3%Z@Ca;?Q;QRHQlq`I%e8AaFoosx>CrYPe_Iu~}&98lq0|#e0Fh4;Qr&ym=O-P4|BceE^ z7S$PU7xc;j^9u)k%8hTWk&2$Oi{G{NQ6D)p;gDpn{JgR>aph@)^=7DYjah`JMC-6AndC*jqxwO+_G;r!jSm#q~B@yT4{`D&eV9_jCW@ zS#%n6;?zUT&A0gLzy20elXHCj3!mlVv*-Etx4+HT|IycY>V@ZNcX~7?r)b78{jE); zDcHJojSsJ0Wt8Fr7|^BM&`D=j>2UJ#ms$;fW>A89WZ91G_ov4?dBx zv>(8K+mP8Iw^_XOG0(sHRVF4T zsv${9Q556A6CngHu2tuL3?f2QArp=;bSj-k=LK#sz!W)gQX^_k;dILGR-2!^ah=y* z`xV!&_3(0mc%ng0j(3j28xm?L6_Z;>mX}B!5hXE{IYmC8u4;P)auqzFZ1qgs)hxe9 zM1wwf0le27PJ^tcHAM@_V*ZIoJ5AwMePVn%<4^g&v@K&I` zqBI`sOcg#7YPcs{LW4Syk|+Vfm0)uQxn<})!b#59A?J!N@AorqmL5@S(yYZ4qNL>| zgCeJt9+`%^$`%FAd6Fom^!qL-71>8fK@}z*>W_-&rd7(3`3G1?YZQwsBt1ji2$u2# zQ*(6tUAAtlQ9m@teTN=k=HOB8KYW}xj#*nhj`%rhk5ML z=a`;59Gc}`gdv{*D2NkXy%O*iyvG&=yR93#4&MhC^om)y>OMa^OxATag+Pv z2^@mbI9zqMO6w_2j;Ne2BR=}Q5KJaF#F4^P%^f8qksQ^|dt6B=B}$0uGA2T(B+zRI zyoxg=!_rc#d8VeOsMTuh?(P!lggh_V+3E5@_dMq>Ugq3|iyS$+z|o_Ji50Zs1}it0 zxV5^5jU;iTkXgZ@gY(R*NlrX;iagup=9!P^UfE=QXNQ%|9t)A?!p&W7T)NDn$Z@R$ zND-rAiAW(GLdO(XUxYO%sG1T2r6p3P6qVg||9i9Fl@(_K)i>-eZL+n!Mu}zT<~p^y zqr(nE=Sb=`2E!gpA78^vw%M$wY;WySTbQQQ2{*3XBAz{nl@2%2LbkUV^g3i)ZC-ro zIhxHTaU9cV1QEsPQe2ir6^Jz&a+jDYbkJj~Aj2}a?vPAQ&5#?$3JF>`!UxvZ1^mpUX%5v1i2q9lmN-QCe z)(NOZG0s|woi1*WQ%(*^CMStnP2yIItjKS>6NiA&h@#ABcXsfbE4=pFYn=J;H1$~1 zs6`kxMB-`Ar<5YC)`CRqAi_wZcVhQJlx0p5Yho2+OULd`mo%+2$Rc#&IDB*p zUlz=?8`OI-$@LW&n7aa!!_Qvt38?P4_uhFwEQVc7;gG%nZ%JzkR}^?J@jgK|4K{-! z7fek|GbIyjE9JV+F`L`e)E3unX|~U2+}zw{C~LTA3KdPDbwEtyrKKo~FsF`KL8E(^*(aDiIL)`e z_gy~v^{?69Sm%*brp!qj||FMjE>y!7G= z{PY)Z@T>Pei9L1a`7UH13+LVu~c*Wa-( z1ofvU(a~M&W6T`g_uSoyRNNn4HhM0tcL+Dad4#`Pk0gmwI1>{ShoQQPDZF5NIACq* z3PxrmI>EaJ*H&}RUEE@)C#g@)@tfZ`%JJ!#mh92)a<{vcJKfBnd^4(QG!Eot@>{wQD^8{PXsr%0i&2E2%o zQq#>0?LnJ=_s4(AQ_nogXFu~i51+b^dLzbLQ*G)I#!5;b;P_r?W)2;owJ^=f#ud(f z`~h#gv%;ktE39=21|}h{H7N&%R??&#W=L{uZYit@;ahQnL*OjLaT9-!6zu)aexxIu zP}njQ&BNi4NE@^Y>&xT?lao}W;77FT#r=_-zq&}1e@4F@D1yiDkC zuk!0okJkJ#4jzAu$>}2)6xtQlnpPk+ctM$!RWTG(GQ>KARSHXn#FAUbnKNhj{`bGn zTkl>BLmHu}HJS_t8H4_i>B-5!Yt~Sj43P&Ic3B1vtT6_>L@PgTG>(eMqA19+>@N23 zy_lk^y3~4HW#g?lu?~cB7$wP#N2oZ2Y{hWqJZEc}lOi|_}Iw96ES-+sJV}y(-@)BYY zPK<4Wo_#@jPK<~VcPV(r0~H+yE_0saZDq-I1vO!quGcX(G{m)*WWGSzj7ZDi=Zb5H zVSyID`aO$Oo;VI{Qtt}}MFX#zIBB@GvPGG-xp6(=fupmWc<4B_*z>Rc^}pu)*^B)A z=WnpSw#mfA1bLpby|RLAP2r5;{Q2|z^2dM6$M3#N9m_M1J_I&rXJdu?k3T?OI*MXI zZb}}1>Pf!!-S6_qBaiUTJ2zQgT_#EtADz9x7yrRmc>NbYXJ}z!VuE_T9vY$#9OF!H zgNq-&!}Rz+uahGzt4+zr9Pl)8*QR zpxf>+==KnmD+4L2n!=(~NZJiNT|*pew2pAjP!xmP7*zKhDDUHbNhwh%M0GZ6EpS#; zat?u%sTE~^}=DWY*d;jGp{PNrZlul5M8pEHa2 zC<=;1r4;k?GaNm1m^d%kv5r(lbc&3LD1>;KUWO2k-d2~(D>uj@fhlSnJ9?P@AZKxL zk-3=(W@lP7YS8JlSz69nU0r2keTV0tdzB-HA3(|oTNIRKSq0=IpcH5cSrw>YO;FZZ zLvBjQ3$A^9iN#-Eq<`%e@pg}gCZ^blAk`Yt9Ux0fqZ#3}#3T{AnNoIoW98wU2&%B| zEpfCbuozjUr4P02U@!nB$04ECyUOb7s`{vb77@l98flC*maVNVrl+Twot~i>^hld& zP@D-tX-k&ZHd$UvUVEDa$z`pRd>x*5Hqz!XC^K01e8 z-=R6v zMU)#|hTSfk8*7|@??bNNxWqHhJj1ikKFh?!#5ikV^s}nfYSo#aVT>FHX^i%>LB5Mr zLABiNcKPYg-{9|l@;cpKM!h*rDGMeiCjp5ye&78v+&}U>AKyhrSe()MTdUP*s~tL> z4$gHj)={rdpjA3Xqv=nuiS8-?*ys-?2IdQBR4u=S#sHHV_+XJ?S zOZ@r&^}q4JBgc8+x##%I^Di?$HBTqcnUWcY8-li!NCZ2(JuX~d=KPISw)zDkX`$;a zBG*S)@J@pSsWn1H7)pw=B$45nMhdiugJRoMK_z}))Z9JykiDTw7+On&6^yE~QTa07 z{{U5SS4YpBR)PI&j6o`a&=Fcy4L2!>y?`obA|GUQ^MZDNKs4PVooG_8H}{3* z_VzZ{uU}{JC*NZ*?D5!rb4<@okR%!_%HT$lAk!Lg72qels{%{Q>Un4|913EsC{2tK z5Xp!lD*;a$X?nvvoF8(CaXpMPSeKIJJ**W(74LR`NZ6Q#SoIt3M5*n6o}yR~>pC`v zBJZOjiSq?XI*TA7*SBb-vuLZq8g}{{n5mR*DL8W9{e0%jpXcPmk8|eCRhEAEI^B&P z%1aXI5QV{bgBKF1l3<-z3hO0Si6CCG`_9aLciZvL+`79|qho&fJ||n26=)r!q+nA> zC5?J5xVzeI78e&eckUd<7^bGDt9`{_wIorR8Dft6n3;iOcXNZwYfJnno~P&*EVL&1 z(sPgU^vlmNeefV>KRCy~|M!1NUKcdd8c%=fIeMKoyS+A(zZA8zVWyKF;l(4bi<`h#R|o?=^7wB-hxT3R7bo)_CG5BGL*wbeuYQoPYYy zevi+8_C-n;vo$Qj&?#w9NRKyRh+o%=Z~T+r;xjM4z%So=pP#(`E*Gxe#5zxuBnTCe zYCTr+?{A2X5o=K#20SB#QuPwm1UiZ%M7bvdilT@()?*xit@;S;!%K>NP1Vt}cIW#! zYJ$ciRKuuWHhRCbLJLWMxJy!>M5lEmnqgtdt)dW$AqhiwjzmtdyVd058xdDlXNi+} zUVK*a>eEex>@aj08`%J@bCRe}L-eUNC)u4kfL>X{Bak9Oi3IN~-kR|JXw7tOhAW*7 ze*NADY>5mtF){nUA|#&C1bg4~SO(vJUKB{B&}jh8i%6l9u&MijVzxCwF=$hdN;E@$ z|G)h${>{JnUwHn7rzxDrcn`Wp?qjAV=6LzJ=Qwff0PXfImT%nxUy{Zt#)ed09mSNk z#F(JSh|&lzDp|SoRSKyijl<@xDjtu(hlgDSOA^8pyBdWD5ow$$dHTVJIWjX7Y+V8( zEpQc}c4QIPIwsO-PWm2#_6LlL^sMtM9XQg~7o zv9Y?!;_?lq56wUl6p!FBuE48cLH3oB%9x-y%kqLWNtv9SVq;^IxtTeNyug%(iHR1w z+wIVFQW09|V4F~(LFI)ZifRavB9z2YFwFa`Z|rdE);j(E?L3~lo4<_h^0%dzjiBc~ zA&z3g9nJ;*tM(XgaLN+<1YcT`C?b|o;CHErZfV#l3x4_YpRqFNu$d3JytcxPtzG)W zbjt*tPT?3LV;LF*#!!n>A~e>3kTGrq81@b&#rQC{)*__DxII|AkP@XeI*P`sT6|DO z3E?v&Er9hq-d)Di1txA|$WtgmV`z z@yxTIVr#oit2M=Y?|s0RzWfzd*VcLTVGq!lRHXArg&X&kKe~yesj}B9TNY zLZ=5jV%lfol^9Ms9K$5_7JBpukdGo^D|z1{W8~< z9D^)Iiw3nQMU*Ad;U<;9k`M{QLkkfvK6#Wp z8=zH6KCsBx;j9hQRIS252#XM&B#p5$#u3zHX&m89fpazlvN%C*9BCBMlF%&r*xglj z7q4LZ8_cyNsy>HET9hK8S2(PYq)CMK1ElTIx0Pi>ML4JU^@kVu=AVCyzxnGQaOL7M zxCC2xOzCme{*?=gSh3@!@Ksm&d0SC<&>>>{Ih3`QT>|GaQGN{}{K zeEkSgFUR|Yrz+UT7x+7iqVSZbMTwY_JowV5Nb6Jh-Ue%ze~I%Y{bH8ssd?7dEd61D z)m=;^nLYdzy0JhJWlZQ8CoRSrgpd{APzE(M3T;7ni?g1j)?#R5R(1+jIn zUgF5YG&Oo?;kmrD&H6A7tUPhM`fqgJ2qAB?*^I(xycD2hg%MX{v`b)lI&=kSk3_`o zjV|XdUgPrW3N8`6`tl1LnQD=`jNx#Hi;LUDI>Jham7c;{)|Yp=D z36YM+DHOtw)WQJ=V{JL+Ooa)#st_66Lq#CQuUJGJIiz{<`IF$mc!7uv-ju|mfhP-m z%`${YgyCmMmv-bX4yS~zN@qnWfYwMi}vEpKjh_*q`CtrBcnty5p%gaP3ZNR*7g zOQZ~;RYGgr$fl|#qH21{s=Tg1h@+%SN|AB@;W-{Z{wRm0A3(9=EPuVV~j;LB2p_sMi}K#%5rh#Cg(S| z$z_AI7C4+z1*Ot{1*MV_XH94-oM#pWmDtr0)ui8?8V07ouQ0D zSWCl5yi}MHluE{di+k3}swpUC$Vm{g%0dYHN7!Q|{o#=3o;k@gFFZoB(4aLt$F(ar zsMk{Bmc%7FRu{;`va!6#R6V9yPncVnrZ7Xab95JPF)1a=S?)V_l$nVMRKK8Jc#ip$ z;o1&mX(**2nru-jNn>)7L6MWF@Sv7ufr>TGJBrd)>}-c@%`r5R(`V1|pT7Ma-gx_6 zhNeU%n$i^rG|u`eW5JKFnBG~eDZzs^79}N8h`_BCk~B$?LNM%?tgNoEaA1L%*;!i6 z2HCK{8A#$9rZi|3A%&`H7(cE(ybocr0eQ4v;Z$Lljm4EIN<_qX@C8yDN?V|iL>6R} zu(`6uwaeGp*j!ckPAIrRW(QKGG&bRe}P z5}r6}hMbGa{#!bO#p7dv*8(MinQgngcCK*a!kgUs=p8oBe}tM)EF73&Fxch(hwp<{L^9JtMltoc0g(@P2O)4? zV64LW2x~Q^kw_ac%q&F?g^k#4XYB3_*jnGE-yO2KRI;||SlJM4EEO!C+hFnLHY@Fd zo`{j?y}O^%VdzLe3nX!ZjuJ-w4=EK&M@SX$3`J>BEr}UogV2Dmr=9|;3ZEfOHiEnDoFI{E37@+Dk3P76&rLE+Fd4-I+@C`-eR3V%YY)0N`Nmwlz0iom8eLfqlnU$I8SgH#}PuLC<=sB=(vtF z+nhRFcpjuijZP`px>Y7x#mB@{SN(u32K zMj&E^NT47`#WmJeI&3!%bLB?LuTGb2ZCIW;Il=FIWtJx%EEx7K;Y&*-40SDtyhOPa zM2$j#uM1SJiFOO7U5x@k$6A_64W$)r<#^-fRm$aUW^&2X&pw8}y%FHY|J~1#saHv7 z`LIB0fmRAcV1G=^)yT3oQW{P@a*F@qU;H8e@T*^9(CbrVC62wRe52I>W9gTMmtJ~_ z7hZUQzx=EJ%(uVu0HQ%%zCA8oxk;Q(63LXTG$b-5t=BN+kY1-d4l)VKg7EbXvLR6v z-!mj<+|aOsIMN_W27?|uJ3C0BiKBGPY7F1A4$Tbbs>@F>u0>ITwPoPM5Nr)2C1#{! z%F=*vl`_sFWO(_?j*o~czDu|xg^5krOx)1njK#W&zhL*K!%FO_9JL+=EqIh9NWQC= zlmd?p)^{fXwb$JB0RkP#6eV?N8CU8Pg$O)Kph%6Qn2#4jecDz|ztZU;gq}SzcaddU~4o-+!M^ zfBMs7`;OL{g@py$?KayxyG%_@k!2YR3k$sQ#v8o)>Z>d+E^_SHG2VLXEgpXOVb<2x zn3$O0+_`hS_~MIWUf4Ttz00#tKhB3Ap5e%WX(k&@^4##|>%XAa>vQGiB^DRAI6OB) zZJ!Fb*=&+1#lSP3d|KnA)DS{_bG1{nmP0mKA_o-p1q=l?~m{CyE56Gh8@-mBkx3c;~GH zyzs(PJpJ?&wCXi>*LJvdV~xe7EiV4}Ev|31F-V-#)%PxO&W6KGhJ7M8CB0rw8m0XI z`54*vgPJlZimi#ON$u@{0HcA*$W}huv&yo(O=Y`(un@&TVOSJF?GQ=HFz<2w(m8G} zUgyylzD#3kmUQ+IlZ_OUm*iQFLZWrTWZEFh3f}+V3_tqY*Ld%}59tpJB3+|iZ_?`* zcLBFY)5QG@o&A%(F*n9J`u+a+WlZ4Rj`*md05P9v=em;__({Qhw}ZI%|D8~@ym$K7 z+`4{)Cmue*?|l91yzr^#@XmAf>Q(MPc95a%G0~i)mkn88-(hueh5kl|X40higrDmt z+0eu%q@sUv%zQ@dnlwe7mWsLWp+h`-^dA9m`Pz^lzWxTs9z4to&ppM=w5K-Lz77Qy@_lTN60G4dU<)7%}X2Hf9w#CoIJ`yr=CXRLNjB~ z=iPVS;zxh^XY_WrI65~=Gm&^RL?S6nP`35^eXd=(!o$x$&mb$XnP;cnrgR!FQ|>=@ zm@8LTIe+0Y-f7N%e3sw;#_#cqH(tXG2Q02%#H9@$dH4ZN%r|J+ZQgtD!w}9AtMT*x zNgwyJDcwtnyZ`xMpJgYiLuN8AU%kM^>mOsvjIVv}vz$0|kbb5}BS9KR6hhP6-r>fL zTddsL#221cV}b(tiT~dI^J7$O-|3`~_dw0u_W7z`2fn!pXJe&q3yh_^ZH%|^poF~V zo-|$~l+OIsOE)zKAWH`Fl#r9w?o<{8EZW?bfjqC9O(U{Dz2!H>AQf?lsj zuh%2XGNQT)fGd$B*!(=TGw7{6Um6 z_`GB;jcE=&X-z|#vQt_v4+h-IwpcYe-2_~DH$QAYT4}^Oyi;Ma=V2M%%K#6!r|G?Pgkq{C!GkP)>w z0hut}XfZESuAe@GZ)eQJb>fL>Iy-F`7EIRbA@s4b#P0>M?mfq&Gi9VA+y7@q3O-?c zm5?n0XDtn9cA4dr!rXRVj-JPniZDsTGiq!YAdJvbS&@?!IXaGUe!n_pf4%EiT3X`P z(h4%t;1vD-kh<1H3NBncLkUEaO?J*)<5w3hu(YyC=_1NPP)|M1xVsct``7R7c?{h3 z{;F^gCMTeIeY#h@4fdP?|=9K!(mQZuUBd_ix6tO-uHiB_uA)1sE?6l zcl7f$#*De?wORv#WM{iy+B8=#vSlM7mnx<$Sg*k`| z_%>TLTkh3pxffn$Bu=?gAzIinuyU2eCmQb*-bqR&kiuhJ3Buu(z*f(u#o?_-IESu2 zr&cNq^kuNvhd>>RuwjTJZ5ZOHaejnHNlCuCO}z!>u;kpCWwy4jlJ&PKIvGU{-e_{G zkfug=$I|x(D@uw%L2O}Q%7ACc1Gl~?3T#n@u30dJ0U6Fu9jBCej3x$g7B$2%B+}y9;3!<4l>+k-g@Hh@3#bsXLy`v~fq|`L(lc7Gt zlIH_z%F;+QrpV|HdOY>m!~EeN{1aaM^z)b^3pkm<5KqoapMHUp51!<2{_6XD=i5JG zb7O^MW(uhlNxhDDiryfE6eo>3{eBmRysZuysQ~u^ctaaqDm`}Acqy@!5C~~;wy4%m z2&fX(oiS1Z>q72|F$S#y?m!BOE5mz{sv2ckR+x<2QDP%kRj}I!*Vt(NHX6ZkxYh3= zv_^T4&I~g?rq?S;dTnAAb26PnC5q0l%k{j^N7t^fU|0V5BpX|Ku`_9if=UMOCJG#*TNDu%Cf&{pTltfBgB$=W~ zO14DFvMtB9Jhl@rN!b%;W|Da|uksg6O=U8klpQOHENitaDV8Wow04R+#RVj>gXn#` z>$9D6=EZsL?c0q8?V5B|7f_AvM)!Tr^80;%-(`5VjGmv{*%tPyb6_;|XmC~x(%?<0 zFvU8RuTv^0k|f=;J{+9SL8uTS!cvf>E|ALiJV&?@24lKpd7l%v9OKiUew+{7e;=My zwA)=mF92Mqnx#x!ACO843);g}`DmwOiDqXpaUP=}q(pxSZZ>`tLqN{&dWm6Lf0e<(T4 z$q0N&VNwEL<4a4@TjThRM|kX!PxIJ^AEI8bGTy9l`(5wi*4yvoFaGMU`PP#^BF{8Y zWvWbav(A@QYozq?%0o=BxBtiJdf1)dIr^Su8Ghh^uCcK(E?&IIsZ*y|UtcGRA}(CG zz^PNG9Q`{8IDPswH{X0SYinyvPEPXr={Gof^e9RxI-QOKD#Nf0E^+|;{QNxDS}t6; zK&4WlR&xn{D=RCEjZYC*n<#0yd})zaUwQ@I?{em?x0oCoXMKIWY$knb)dr2grPP^D zg#gLcR%_ebK1+^Mz zOkhQTDU;+>*~siAkKSuywilQ*SZ`96AQ#(dp|hSC;w7kDuej zp;;P!jTe6QGM5+D5w&sh+^0|hQU!SQ@O{6$v{QuG-iKirg88T6T7$2->d!(WLMIao zy|P){mvJeoxh&L zx7LDZE0aPCZ_idjc+j~|>Nw1d@R~oc4$rC?* zkvA_a@&5O`$by0PBhcy`gy_eLpMVz7!Q}|$M2&mB*zXmIlSM;uTiAS+G`7(ef@Rbc=a`=>I#(# z#%ew`?bGciM3vYv?8-I##_Ojsl{#Kr$I2MxS848>;8-sB{`a0>YI2shS-_@`8-mm}eW^dEXu#VKt`JYVnP)f1Bri{496ebb^_QactV-%IXTsYb};mw`g@UJTE4y$5^BbFW3W! z*zF0mTMD&1obOsm^R7k+O18O^2?<#Yn~;Hr(`aEontFSc;(QQBRK6=EN&7toh0Pk!SkeCNBb^7fU2)Xo!C zAQycy(*>=`@*GiyYzXC8k%K)N1PbXxr8dS!yIo4_gbRW*f^KIEAp~RNlZ=Hqoy%2n zq*EVBNnwk31j9#@fA>B+#2$e3_UGo_6iZ2uCth6T=jS%K|IQ6Q`0ksz>A*N%VW~96 zS?{Iv(uCzCw%cSh}&40{ja_d4@-pEK54q|w}R(~Z3QuGcX^Adl{7O; z*e<|JX;j7tqZ%8n6_%D3T)J(wNv~&FT)N1{#tPkDi~9T_4$RC_3u6Km5CnDT_E~-7 zEI)txS>|OG*~;*=qHYvU&M z7DZ9)Xv}sGymg-MWCx0okXQwsZl5rW@dfxYK-ruu?cw{DTnpOqe%^TP9Qxb>JuHb0 zk-kF8oQ>`xVK}v?-PUMo`fea}6sWVhxJt6Sqh7_Z)o#&CdsLcZq*+F;3kqRD7cBKU zq*(GWB$ybZdGG+uMw9x1S?ZOT-pbnq(_?t`CIyzf77$L(76eg^>A5k^oxQ-{eCcm^{^gh1+}tE7ea!P* zV@&Qmial@7Va|>e>|J5GgO3lwlWMgZGcz-#^wp;ns*S7zc7X4@?-MDnJ?H|+ZCdtC zKEg_bP#6?wfi5&r6ry#8FCYqi-adbp&4u&W?)$m38XaGWcy6j zBZ??n0)d|JhQ9hzO42ODYE7XvX>O?wWY-i!LeJn?60^BAS3kkzRFn1fHGE%DY;H0>(LgFUe4dzW@`r!)dz?IZ zk}v$t-}3YeFH`qp(#+)s)T%LQR4@;$E%XKgyXrr#dkkwM^cM0&dC*omR<2pnlfKXWqdN~21aWn@`~ z^1U6;f3WAgQno!Heki5NP-lOB1DBOE<^1ZxXE``OQO{``3+Cnvf4?z_?2*`ib`6?ExkJX)iT-o=CcGw5$d zy<|tR0e4o}QjKKFdqrP`kL<4TiXw5JV=aLS@qG_Ofyw(wYX~Fwkl44 zN``^hgFU$2E6S^^9Ifb)W^K~c_4mpX+w_s;4=a&5xPaG&j} z?FWI9LP)GMNa<7rMV3QQjsSFlDRM-vxcl}SIC;w$jmA1@eg;#d2veog2VbUcfDnem zfyQ8srfEubeuh@(GVA>|6~95J-R0FY=g~T6VrGK5+BB6~4O0{pt8K>+-7Y#91`!QD zRulzlz^pSGAuW|S!lLQ5H@NS8r})D^{O8<$+evihJjs6e!yj|^9q%EIE1Y@DO%Ug1 z_R(#%sZ=WL+c!shZJk=pg`XTgc!>Y`PyUz(AACQ5{{Q|J-~Yig2vMb89Vf}%FWT$7 z5RZDjPM&9UIxYMt1TC)Fj5|Qo0iJ#!snu#!tJN~}$N42Vl%8_Bkpc!Ojg!O)Lz;DW z00()#?WHILgkfdJA+dYI7-R74c7T9VUMU|DPI6}{S*aSMH5iAYhn`QM1bthS3M&Wx zNhwM{BA3$Xd{AteQ0V+@1`G^8P}{(#u#UzoeZtTT6U3}7_5=mC4*|P_UADVY z^eFGX>zn*v|KUG!d3D19HeP@%423oLp_6%ZS}p2v_zpk|R~?q4USh+dD9@=@Yb-7< zGBY#7!Gj06aN!cYUXO)^1s;0nAShK~IGuL2s42K9R2z)-7b7K%!x#ztXjZMBC+@kPGVkbeNY)*5w4@?qLr7zX&h$K{Jx z=)Ug3GUT&4<=R;F*GoDgA|1|?o4oO@@=5kUA)`PU%%fUo<(XffgJ%$wbr;u zX6Gx|?{xu9EsTg1)V!R|!fU*+e39wHH*@^mAArUzue@@GZ+!c^JpZGgu(7d0l4z>+ z38eJtb~20=gkgj!(qR)i>O(a6Il?g9lRZ6{z7G8DeBZssF0s!HJ&MIH2HVx=h};tx z7(Gw+!YXa4!LL^8^wWaellb*1mfHzm{^qxN@rCDk|9juX%E|>^f8#ut7B&%HgNfP% zNhc*OTo{?Q#XExadjWCR0xlcy)C&P-X8p4E3TUOrgu)MI!@#DAf_Uq?ZzS3j1 zT4QF`hk8c1sG$=QNJ&-{WLY_M^Au8g!)dH=%3wgDbxxKQ4m`C2B?D3wBd{!Q^=NNh z;LTTG!cSM2AFK2DFa83rzWgIzd9h8Wy+K&6&s+B=&lqyXzNHa5xeV>hz3wvI3|LWfQ#LaK4nLXqbw*7K01#NJvbN4COwk6CMxzUKhel3h?3 zfxt(WY8gd=MBxRBSOnA?P3nOr@I(4i0h+?{0Y*xYM<~o<&K93Qa`RnFM#&RyaeUZ~k7l=f}UDIRq zY{B|gi;d1EQVOaQK6#oj+nk`52dG|ws##EiURDf;){Bda%*{$>_Dzr^8S86noI9Uz zI0$%Sb(yLkanp522|7Jq{ps^8ym7&?X#E)FLl6aYH(RW)uT!bjoO-KNHVqo6(WKc? zP;k(U4jR%?RYFk|gu)Hv3Y(K8$uKCjTCLJg+B@#9-71Sg12lSfjWRY(q1`^lf?(UP z)>^FIX25jY9TZTF6`m|WW+ZvRi)&p(6w%8IGU*Z3#_4q1^!q7|T8*rqUByBgfI7af z9P4O=8M~XIWUjgkckXYcE$d4wTsm`(s8yreEja!1E3_}Xjn)~(Y=cH~45buHmls$J zoAjF1GM5>+5*4 zRXool3}foe3Wc_O`72-JbD#eLZ@&2^*B!o|D5_Aaj*;mS*pg0~tP4A24-d}7!TGlP zF1XeZA zV!~_=~|3$w1)o=3EZ+@3^msYSgAPQ^FGc`*AOWN-_IjQFn zMLt!eFm+Vl)J0XT4hf=_zFByOeI5k)ue33ySg-gtcfJWYOCBm0F1?W!SB5 z4^MdDl{I1DIVrW0#6^MXXTyE!JV(of_Pp#HO@^{QY!qC4^E5&wj8Bh|X-U76lO;Jp zVTn9R)=kl#L0gT~Af=Br+5w@`Su-dSgptGh7%36bCyE6qL$wkRdOn?vHes{E^lSwi z`!r|kG$V;_O|#jLS$Vz1;>v&|A@&5dthMA>Mn0mD8nV2NA1 z;fW`{!`8+cjfojDQ(#O%wNj@r8s8H;hztWV*I+#;FF+UrBcWvIZSX4$0z{!`HX8^b z=yuykg~JzufHdusrx^l<>_JmFCSec+^!t667oaU(;O|hF4epk~xjq%QA|z*i#`q>YqBQavkmcNBbh9O6$PVFLU=`f?f6DU?z=C5jI2$ zA5SWTwG?SWT$Rkt&hk6I{c-NT`)>B_+sFF)I$2r}1@W*?RlXR4p~E3!u|14eC@Mh( zDFb{jaG{WS#>7~SJ8nC{sS|hb4yRDy5K~Tl0f~ zld;Mf4GZg}@unaQ-5Ns-UMn>;36sJFF$p7(!b8cu`=r6WI#56jGf0fHwe&m>Pb&0) z;h7tZ&5+KN6D0%2$C`Zf<5P?`3^jj+yt9eTG`?R4Rl(xndlG9PO$K1RH@tI-qM)58 zOdL7LQgV);zjT^ntIte*j6;WRByLowW}4M3BTq9TrMDTPqwI@8vaS$nWFXTy3BWO_51_Rl|sk_uqRj$8J2zSO50weDMokH21OcJ%5}2K9hHyR*Qh~9<(4lKJB)dbU_5zMV zFLs5Xa0^>li{}aavZ>E(n|ehNd6N6@eGmWqcYljhCr?l$U6RfgGOV!H+NA3Hj5V7S zX~Ou#7{BrBk8@ytn*a09KhJBgzRp&AgT~ktv6XDLx(MkrJv~X*>%Bul+)jz(XtO%_ zouVkB*Kg79_gP$AeDXBXpZ>Ry6i0?TSXX!6apm*y6r8nUG91BDL(%AN4WovTkzu=@45dy+;!i3 z`Hz48SG@Gfo5;9^=L>ull}s#0o7Z{}(4btRxR85-VebTnj;V%_Yj^7t1C=_v;|w;4X!L*=C^+HQ#}2% z7x~&Zp5ns!HHsW6K?Uo(6nmk>o`G=JI`8&oC%yw9>a9aKM{Yef+JZAzERk{^Sw~Ne z@zRAZlVc$_-!RA6RD<;-=KQ8+r7zgBk};i^$=3w}1p|8tE3v|$#OSm0&^jMZ=7Ye; z1`+*sMjTGyiGU*MvVV3TlNFz(E0;KO^eD>GA^98nn_a+WnNVu?Zf0|NHp)OD}WtjfeTcQx}*VZ$Ocv(>}+K-N-Y~Jj2O5 z-bEBuFeaee&lul#kZN-rU%fpvRJhjAZLbv1s~cmpJ#-MGj6qAD3TllSaU5bzPL{No z**C_=Kl&K|;`e`#iKz;I@#mlAv;XDGT)w;k!bt;lnZCQ5xwTs&WVG1<;EV#JgF)&J ziR-SRhe@5JxF`yAl3;{H_yvLV@T5ml^si>Ej07=R?4C^a-N7L)prD8JJ;v%a3Zv<4 zuJQa2zs169KjHYzH*)+vA7nEZeEZ2C^6bxEVe#T+&Sf>gCBs`$fR__{K2W98u>@hs z)G-=LX>+CxqA-9i&s~cMG*PvNl?n={U;&6L5uL=+?)IUdljhC?Ra0Q{6h&}NyN%t7 zl)V5HDYlsld!6m3yG2lGLKKtvA>E?S^JmxS_I}EtsT#}u7MtCaBB)TQ)=6`SR7@1d zWLq6ntT4NP@a?fy;%_2;hoX*ZiR%`^ImV}7izudvlxr#|HZ;-(JlW3{#JhJ7la zGBv>w?%ZgsjaVibV}{`oa?rq)!`QvU zK@C#*B>gVUT9r!Z(b`yKe7eRbKlw|1_~8fn>bIWa`#*S^H_t5M2jlcQ9Rd|HF*{DX z-Ny6uRfFPd-66XJUY*UX?`D;*Fq!5C22EK|+31G_{JIKR{KTuV$sOo;5Z$bEw} zDOu7X$))pk^fRRLP`<(oaNo~bl#x`WAoAQmC5&R?z{d|HzOM*;H(W5DhZPR2D~uuX zBcz2(XD={4F-g+5WWJ%Xuf{~hN4NUCy=qWrR_XROs08tzwdZcjhEe9W@B2gY!}wT} zelNoomRhAs7zncd7EuI8u0PDDf9V%_@WBrfSF2oETp+5}h~tQ@cFS3+SjEJ|IL2lq z{SJQMktHd{81~Oi^9R5G+uV7_NxtyKuky3!Uj!9WuQn-+pz75q3U^*-WeDED2Y=L7 z!j?nH;o2_2Yxg;hun`6UdD^Gn=@La1g3tqFv3UW7M&XE9gEQRoJc1yg+v}9Q<@V4k z&x#?SCd78S{b)FMQ53Y>ZDd%Z$Z`^L=NsOvv3B_)=a*MF{n{IBj5nA(Fw4oCj`8>> zeuagFMV@=+Szh?r^MroD%+%oE@z_M(e>a^vmz73Bm|zHO=uFAAaaQe(l#k!GQx~6op}Rc?oM3 zV~uePj%echAxdoTZ=<(=eqkj_NJo&99(iW4T9wut0^jqQn;jz%9`pa~)0{eWJ74+Q zf9Kg3UZb$0TrF>bF($u>|syxU4;k5ve1OR|u?N*OU~k0+cd zJ}}s48aw!Xr2^kNg|m^vR-njJ{4i#+*`PApBI_;DYg>F9Qt`&ncv!0l0)@t{Zx#3i z%Jux6es5^g;~V(-nb){<`YjH{O-@{QBY`c+Jgq+6JV68zjcOhGt!n_HBZXcVDY~6? zs4h=j+BR`^EucLHM6h(xgj}Vq#nz6pN$;L*DUf+4; zv|24UE$?JxX$gSH0(?mjM1)@866BPR6kv?!r2JM6ePIPxHx}-oD0Vb~*J4fW_PQB- zjxLh{dqqL$Im*AZhCJ(GttL2F{-+bZAtZuAQYm775tdZrGBG0b!4B876AKk3G!H_)9 zOMffN{{8z=N-;S($s2FH!TkI@)6>&*Ivx7`KGkZKX0u72=e+*<>+bmpORZ6(+ulM6 z%j9^IZnw*&3+Fg`!}WB#U7F1%&ph)C4?p}cTU%R%VaU02=eX~_`&e6F=D_}We)^Li z^WNKT=f!7!;{Ly02VuvynL^f*ra7%v4{xhYr_&)#b5gCDn3x$)DK5)gv)*d8 z=(N@;tYIvUn4O(P7JbH34_Wu{x*jO!3z=pao!%Cko10E1VYj8vqZ9aH^RtIcVeof% zQ4gNS_J!?Ct6hQRX-O0*dfiQuti{d85A(<`KFIy|-NOxs57FOT!V4@~72I{tNedZSvZ6r{1O$PH$y|}?dG2>9ay>j`cS~OXG3o!XNfCnqhb0O^*XUdA z1`?i!Cv;gr1>3Iy%K5^Sm(OT3Fv^s$)*^;yg@?8lR6q~~M6r(w6nX9#Hl!MpYSxz* zc=4yNa%QE#65<8XkP$0{z~J_yQVKuxDDrfNN2nT|B$rdP(FSBU7%{L0(Z)#|eBZ~9 zq8$>*ckeL)TbDj0g7X40}b}ysSn4ms3hVm?(trlC$ zTXeFYa@zygk?fvf6f1PvBP+U0PSp9}qmS_$ z|LjxTan~vEJxFst^RNDh_ucyd|M!3R3%>cS?~-dlT&=Oy>q801?e?tP3)C6~ECxmR zz+e4Z_s(8EcE%Vqn!*%U?YZ6iZ^TJqd#_nL%x$tll4Qu);Dd*6FI|Lwnh znU`NaN2_oFcb!eg#4)8LaodunARBlf8bc7odwSXr&zU{!I!4!t);as8ra5@iCT^6M#I&AamR<9=ewDA&{=_0Fi}_h=C6I4U;d?!a?`OR4VV(Q59(gMV52;;5>i& z$G^`5?|UDg|H7B~!4H2*Yik7|WBd|i%X3YZrAW`m4+2LD$g_6@Y_1m(O`-x*^Fq(Ug?MxGSe4m&tw2Fy_R z%<{m)vl3g8%v?W1Gn!_6tVZ6KtZ$@9ug_Q{(gKTbYvbnX+cyo*-OWE37 z$M-`jVT3Yhd<&AU;G;9FD+B6Patecj>hvP z7DbZwoW)z=m!OrzngU&9m^|B7ofX-z?kG}$XL5>S+vBrZb>yft>w~d~QpKY4f~;f_ z2SHF0O!N**z%)%svhBf_=gXnT=qO+~B$gRXFYVFGE%jP><4xlI6U5CrO%FPq4&7cG&zA(DN0Rh$oG!hCExVVO`)+mP zC<}O$vF|cUMieI_{mIVHle^TVDHG#O@+2kgZ*kkH6a302e~EkVxr?zzh2_Od#Bq&4 zMHI#jN3<=lRy%@?5#@T^zB91fJyEw)I1l1@+d82r6h#4ofL5o4^d+ZG-O7<0kMW}) zKh0PF?(cc)%q2V(f(;0KpTPI&_xtpF36e4kLu)cC5yIhIN(mUr#@Md1%RWhhqzv@J zqO3q#bJhMDJX-i&+-I9566(H&>2!oI!>vQVXoB6%p{R|J>cMmR5S(6q4*aFXwSbTet zrG-V3UY{_Cc<=-F^OZ0CHF;hzyZ-=Nn{D2F^G)u*??KkrH>gx9gi(Z+f=;_%f(#AP ztjFQ&kMXbn^}pfB(QonhfB$V>{`u?f((LAZCQ{A#L!378HVd&P{4qiJzDhnzV9}!wivBZQk7=5 z1-dXO>67=mY_&FNwKmChhP8siI8bXMtRPj0HCLFLoMe1_nrd~GW^J52(d4;he*YoX zR$3T?OXf9Bwvr}}NmQ+Q1isy#c$ODirBY#HVuFR0rGF9=>ROF!7*w#jpzu;6&$0YE zoeexC*uQ^{-}=?xh(B_YXYs$RjLXS)f*{@$$ULOOUM6pE zIWI*qkWM;Jwmi>E<7P`3#sqamHI`JX6{OrYjV^KrV!5ECoKShhl`3(yLPL7g>s2;A zpHL|ZA?PN3OxX;N7N)-Mqj!PHSNWyMy;*-(Gn(WG7&^jkQhoA%k7I|Y`S6Dym`GkTxB0II#IpW z$48rtJkL=jBQyvCY*{4adHxRa=JKo*ds~_e8FfPKVDRjaTnOlQJJc#6p2?VKMm+q` z1N`=H{RZ;~_oGctYkh-iwaSM-bT9Y3=T5%zx8LNi{_EfH%IULIYfXfyTR~jjtgg}=pX0UH&rxWPO07m$yTr)a#5kEQKzi?Zr|h*RcD~zTV>=3(557#;P3p}m z?|;vOeBzTI zh^)xz_Id~ZDkS9{<9i-fb4>>SUO`pY zdhK_tpAkz1jUo&LCfy>Emb>0{D<6IAVeWt6UgmDN0s0wtzW*-%^I!f~{_E$zh_;6D z@hMuFre_TmArPJ%2Al1`%dLQGc*tIhv9|m7^DA{y4S8XRqKLWcu486yf)_78hwnw` zenPWW<@)0%XjYmOX#u%qeR-8DD@)wVwK!8uw?gebhoY4a47F7Q~}ml*Kn1<6y+eU*cE`W`@R~L%^L(xKhJcukmRI#bupGww^4)>oOk;X39kW5o3u`%WBzdQ5v`liJxyLZO&wHi@fs ztbxe$**7`GWPJ>s=G3Da62NCJ2B=QutFeq!d=gwO>e)KTk zdg4jG`nA8~?D-Y?{gguI4%iZc!W3u?_8sn$QH9=a5P8s}j}F`ic5cr1u%PHA6big3 zEP2Ro=&pn$Pyy1IavS3vv_%17AziIw3MOZo zOilRAPL0!R8T`0|u@Uvir?tLHbFxMrNMzt+Gec+ug>u0_+FDFe0%?VZDM}(pC!^4o zqDU|Tl5RrYPuX1Uu(sG|;c|~I1wlQgsw~O+CLQgwvSATk<0_zibT2w4o+&LZ{Hwq< z0FMA&q$K?oaRd)N_#Qs>$&YdCEyvM$&e~RoFsfpbKHYAYN~J;+gsx@=gy&eiQB*}r zkAA=J2w$v5%JGlGqJNf1}zQNhkZNHsS&FnxPxtWxh38k$MOi;8jkdvX zeGZ1FX_|8J;ziD$JJkPjz;T%Vg9%X)Rjz=DO zlp;-;m>A=R8xG_79yc65!t~S(wR(eEy-t=EXw?NF@capEQ)%yjzDqO-M4b% z@nZ-nxNzYTTkS4kT*nVW1RfH-XM;QR@RE|kiJq97n&$CGKSHQ{1QIU{v6|8&OAifT z9jj8}`yN6X(lkSBmk^uhMOmB$+p@hpFE65jFJOVS#!WEO45JIAkc5FxtJC7gPydLx zS)s56Hc!#UnRic3PBAe#Nwrc%Djz8nt&&w+i7GT2O%@gwnVFhqYpX@C+apQ(y!z_v zbUHn3DFLrmYBZV+#>dAA14*McMif+#60$U*-%n|8C9JP*vAWUU!FstmB*$FSSlCSf z+?2@q+T|2QpEwTq@P{AZ-~DfY#v>oPpJua8mh_0Cm?*5!Pg1fh$6AF_8i^o~KEk*O zW?JM}D+r^AbZZsm2@cF3;^JcIXW{MHY>Y~B_F^pzHg6aN7+X-S z#=Q5v@8;magS`Cm%k10dsQS%DlZAx^y4@}(PMlz4V}mni&M+}C!NkM_Q5bOM%o&=^ zCiC<2^!t6**Vh>v8>3#YQ?1uIefl(q4jm#Z84u^rpXZJ{?qFqQg_-?R{NVfF=L7dW zz}Yw7!saRM%~i6j!&swAJ5O2O$T(1m36nOfxn=6;4Ui?oBE))*9`E};aa?f;^J^O} zAux)lR;yIw80{-O-zUJ*m>gqcX^C*FhmPRPR))4I2d3(@TPcWu^^FZ)JAVbgycn+z z+bYw@rFcilqud>oBSxj!1t)LZ$K#Jb%Se1BVlVa=#NjZ32(NL)sJc800+xhs(TAVv#?MIk(iK#&&&g{opLRH6#i zs6wY(@WN|nX=jqm_>7G^%Z*;YSB9)8a-Cx_#HAI;UN#4#AopnTF!a>fC7E|cqgxAE z=^wSezK*^|it=_alDH--R|w(kJ9hm02)kYhq_jwzbML!u<=_6CFw33?(PhYYL!Pm zdIzW8HHFrFs{SMuCDHjBvt#RQb$u=`Omk%==I~7u+OHP~uzlIA(pYMq6} zWlr9956?XN0)7~v!k9FN)GF4ux;*>La|kcokp?~*khGUK)77$3I~=@>e$C+Tx85?% zzx`kTlz;WF|0UO7cMuUe&_ww$(htFNceqKr_>tn~J8$FOJMY9;%NwWPK#OR{`q(}A z888p`3RrUc-CWbM#{ssM>kl?Ke#0CzopW$p@BhWCpmAdx8#T5X+i1|Fv2EMQZfrER z-Nv?U+jjE1pYP1?pPkucXR?{O_qp%qJm?8+)vR@G+EyJ7iUXHh$LSG ze>ruA%su}2O0AelL+=9sJ^C>*NlMBb4d!kTiUovY&9;7Ii$Kuf;DTbEJXJ}C;cIw1 zkvp!1w>ZDQ7D}aomE<^F`TK+lmw~?DysC#x;)^em?b6sG4~mEe=tBE>X%RcEPGx7= zyeNIk30M>rhs8}vkyb9zQ$>~a@v&WT=%Pbb97KEaZySvdaRM&{Yqw|1#epB$$4!Sn zwc}p2d906WH)iM?+4;enFc908;90;izZ>Rj%*Jk`7w z$0v-nrVD7D4=m3G$!2FJ&c=yeEYIm*#{VIF&_-Rd_P z&o&x)7hmvzSxm_=@oqen`(P3rhZaIUKqAVdOiCRdU-Uy#y4*$7Za3C> z{y1UYd2yHKz1Aqn>aS%|7fpz2&8Kn<3TR3EFufw2G2Lik4sMtAn;^88{>QUks}DP4 zDnE1mK0O_Kw4bNnxBOQ(n1dhOcOa5;vC~mupU5dWfQzGuKg+A3p!u!$+o>F$YH54C zl1MdWI9dE0h~BPZBOB&?`?n|H%*{mh!pcbOQ^OzxqkK!LYRVDWcHP-z;e9&jcHP(t ziV&ngGcpK1+Noc)*B@xkL3P&EJM*{4^;&?15UdTin#eJ#Bzl`QJv>1HK5%d`LSu87 zEID(8#xD(|5=*Ub=c)d3Qry$V7G4>~xq{r&`ezR$sUCZwse*29j`t)}#Yl^eA$Kcu zrlVI^G#SNa1;)k;K3j~<`z~?DvTv8WKM(JNB`{zvCDLOX(9*9B;&E2sd}q0lWHuGc zU6cGKGxUgf<~7O;&CII%w2VN-wrUgSh?3I?1|>`d2Y0wcKWOacJ8CEArTog?`!!JM zo9<^6y)V$#hua?xL#GicS-Xd#4e3cOPzXs0NRB%;$5hgu&zqx6 z{&*ykn@th{C5|nD)%-IGYX;g14ASozFjtMpwN&@L7rZLz|Mow~3*14s(0>%oLj@r! zg4=2m@=FlLo_ys>V=R;ct8zMokicUTfk=y(Mye#GsNf%5Lc%lfd7p!bW5Z`)acOe! z9shd2;!ExK6z2>`|6A4BKy+8v(9Byjo2Csx81^q8rFYljOPqJ7W2kg6umks6(9+Rc z+dJ6B_2S{JG*yq)mmbrtuj~!&rditHVOEw`*E5MM#Dix)uF^~Ek;Ymk23zYvGlE!$ zg+bfw?xc*4ft|xOWpdi%p;Z3&v!T0+$=Tp zhCUHdsE7tZ$Z$0RYUql>KLv&SE1og06XN@gy#*2_W=x<6L#5gL@z<9J1YM^Ea3>DH z>D+d)bYZT$Tep`QB;h$c$t{{v>GiP0YRsV1JmM+l9Z_=XDLgp>zJZv}9#sXzkhlwk zyGghWxw{kGeG3SPA9>L=@(& zomLaqn?n=qM9BO8ymySl{y0mmN8;ZgZ4u2$Ib}nQ?CWqT&OEplEoFEh9Yw|vUVZIU z*A^N4Id1OtTPa#mM%Kis^WxGHTv794tEG*La8(q1nXEy{C62@pPsm-IiI{;jq1!ef z0RY#H$J({C^Jx9yeM6OzXd+uxADO5OzKLmut|crJ>eQx45G(F)_&t%)gZP}gYi_|Q z1@ztz#}0vIRTX8=D!AvYI${zO9e9z{p{ysFX?s1FWV~+&WRCEofWvcnSxfI#1j8aIKxRX_vP-l~1a*JA% zbv?(GolJwm#n!4Mk25a0LKfBa4}_5&I}{BdQw}m)VPkF_Mbf|Sho2y!e^WFv-M17W z>khuVy~A|BTV+o8ihaKm0?b=KvwXvi3eivT$myT5Db%|=A6HvW5BEb`zZ6e^5q9BP zXsh|jQ^;WPexq{cj=_?Xz)}}+Q^X`n94exgfi28xivD7J%7-HS+?5Tx`PnX3uhpcs zS#Z;V(DeX)6e2c^fQ$ew3@E!m=C6Q;K0H~1BEA4l($1~(Z57_KvXacN_>el1h4*%+ zmNiWlSnV`QzNruCcihcUrXAyj;!4h1;ZVG0>E*t0nJ>k?1!-{F2yi+ zC?-ISim6FIA47jY$}op^i^{=|HD(fxVF4ky=|xLTnv&xSIQ!Pxc>90$;Q7V<&Nla~ zeF32x{b5>y>WB|;f~zrT=mojA$SK3oicY;XrOJvYBxN)(L^Q8|uBppQ>!D_gpN5tM(giH@HB@?kq_`uJ92D-<9pTrL$=tg-PUN2$}?EI>@7_WW===xkOO7ge{0o;+(qC!_iptSG#+d zBW=GJr1bN6)`|Ui7s4D(PTpXCDL}n($Y2duwAYUzq&H`4q`dsP7KF~7kHM^z1*PNB zaz$K-!Ym{qFA~PgS1=u0NW?vK-}+wu($Oz4K!%*5S29a^{xd#EoF)h@Sg#%|zA+RV ztdOinn5-OA@CR9PD&FJ|f1elCz3w$)g$}Q{2D%7$FHV>e^?6tsFGAQzKIX2 z$MAA1KmsT!Rj}hou=|oP`S{gB|7E4)u_5Jx^xaDW*f3~^IRuY*aM5#xM5v*ZbTj%> zaeKf*@Du!1KfpEW2vRV6=J*yl>T$?0oEBUTD%aERCn1kvMDOI!$OL)znK||nDOpC5 ziMnMJlDOyzxdZUdqvKZx-S?Lx+d#)8*Z9$p>d+=Jx}OfIN@S9PTSQlGec80R6}F+I zI12xw-PLxvp$Jp9Ya#-gZQD3crn@f|;p*_@p#^^Os_ys;iOyrmmL}?Dd1)f6*~Q7L ztX#cyRWwpcX69C(ZUAj5f&1!5yZFE#F(u@ZIl4TU-vg<>vUx-2e=tETfD2&%-FpD) z41+tD#>7fe*IvtFhR&c_nhwE<|3quh=5)q;jCU+yvbZY6#W-8Am?`wvzv(CjJ?+Fw zj2GZQi=T1z*|)P^7hcojm05x`eunr;U`k&}%WTv)$1a$Ep%n z5DTQ}uC{*u7CtzD=$30C8VT(EUV}TcclscTo_R}NiUSFz^9%jx+|);QPqb6`Hh6#S z@P6yl9~O6?t@5i>k)kM+SQ{oLARed7ED)9?lI8jSa>l@B=V0^om***4@bWQwH(@oZ z9y3@RB)a?c*@a+gyX@-;E8P&D3Zn128C1gdCvEC5+e9)C&2;V>yvSbnh+E2{V;NUN z@$sbl#u=FG7}98N##I;Z85l2(Wgn3u(F-IC8X47D3uePLW$rLXFME>5esH8W#cz=u$8`)ib~;Ejy;Wq{1EyqGam7B_inDw?UnmXnIp^ND}$ zrhp^HIGh%%eNcCso6=0TwHLmKCZH(dzNYG994c2jBj>kI;z8&nUzaWFWNedplq$P7 zRsyO(xtw-+vOLEQXSbErP3}RXZ!{ivr$C`k?g^iLs&@1JHmz;J&PuO?=k0E#;v=dF z{C6Gx{#gsGCf7s!eTEh(4aCLTsu19VD8=X{fqWi!Q)Vs-nhu*?6iekeNGAeabA2c? zzWSUUh%~rjQv-Y+TD7LM$>#MjT_MphCYN&x33>|*Dhj;Pvf2W{zBP*64hIC!86VMa zKaj-wt6S8N7pPFgLss1El}RGE`>Mtxetu_RMA9Ow6#LaaxEXX0peg5JfOX{-8>u-D z94MCCYpbrmrB^jNPtze{D#9hw{L#T`RQ~P2|L`^hT{YBsGDb`ys#gIU znWhU~vKintiW6?UDL?;pyCwQt{STrW-+)IFDwHb?r-CpfgleWwf1yr;7fh;Df)c8< ztV{({5Jyv3!_4Zp=p3-7+p#pooz(WkO)F%XPtrC<0F5RNSU2<(`t?3KGMi>D#x z0X5z4e9QFNVzN~Aiv-a~t0ur6{uu5!k3^sI2(QUw#i*#5Rw4ZnGy$JaAtarS3<>~2 z?D+dop_hfECrI$&Fg7PtrW6n2z1Odj+VB6U|EuciD=>O=ADgnk`_=9YW^TN>3b*)a zQ&YdTztk%__tX7Xdv)KQ?BJZas7*KX0av(RAzcTT-#xC$);~8GAsU$sv2$&xwHl@Y z#kE*gsC+_Q?LPw+k>)k#Y6IqukJNOMs4ymF;bC#mQ?x)+IxV;e%U~N{ z$Sf6%*#}=zvT;)!2MjCdwmq5#!?62FqRhN62V9;Q zEfib`1*JN@=C;q@Gb=vOj`1U`yP$Ym9XQl7uPMcT_YNBdwF$Htm+A(z_=r<8<@#y2-vKzd8$ zCCY&lR_=+Pi&l%B!WF^vyDR#8xafl?P7N!W*vqMZG-@l1$Xl^ zPlAZpX@W?nzK*$;xsZcd^KyoC!3#Vb<63{*z9Sf-pqRxY+f+IEnGpve*yz3*ySog# z`&e8Z92=H}b4q>)aq@#_S}Kc2_$6pzx$t2-u!c^3S$+3ti(>D7#P`aw%({AY71;G8 zB+MGksm&kUKK)S09vd08f0!VF;Pdu`ZTAg$bv^0=p)u&nzr6zvTr4ad9j;A&lqt{>gBN=&qC`fciKD7!`8jV*3O zg9}Emp*LDHvHllu#}{5Q92N)jc=+dy_0L-v(Uu>K9BH7z#5!rX(o-v;;%L>y+Vr90 z!Ts~C3e{INe?h@^4)Uq5F>)aI0EZc=_*4gFob>CFkrDf&8M92cJq>}e0fEpms!fZ-L;@>$PwPlyp&C|nOVBPGYUMAt z1@6AK?FXE1j-)6%>0xD7Dk?0R3Sq@3kT^=rOm>pZML1yQlfSNE!oz#GZG};B**}1W zhk=rVzkzdE80wWkb;aV0WVuvP^i&)h>)bzrxO*O99$p;@X2r__4*b1~GfW-ViGOM^ zW+>jIk7_5biDGeeOe~H$2ko;TP*ZF?ccRS9VskhS*W@jqDrxx4E0j;()0Va%6-*X^)Q_c< zfeI%GT1zO-O|Xd2v>65LPsWpSJKJ@-^;-zXb*1;+pKG8iE1LZ4s}7NX^$xU(By;v# zH5;B3t!TPYofiGtYv#R!?fS<=>+g2ER}`f5VfvE%2LL@I20}dyr(8KLWfu8WEea%c zrYp5pft_HNBq0SM;vZ|{^9V%?iVtRWkdeh}XngJ&v)8TY^yBiIA^SLi;IpTgbY9IgAEJ*ql z(d-Y)Y-DnVHKPDW5CpyF>*=CK;GCgdg=U zr5t07SeC#^Wy;14dw%hST?=1Sf`UnP!!pcn)5QfNwy2v5a&m6Fb@AO&V>7=)uUl7@ zJo~Skmg#g}grM1@6`H*`)ZwY~Cc%iM1$CtG=D}j5^eax}39*%&qSlnyQS;;*li56- ztf*=Nx~QB6CbmKUZ7fsbW)@aFq*|~+Z(&yUTa&PS8aCp-$%#)69HH_ z1O#*}65wDg^3e&USIp7OWNj?s=!RX77EPM&Z>Rx|@;-w$nHq|PtSY+e@kDh6jxBVQ zcsPpWX1eebZUVVs`6q`J@H7!4N_N{yGtcHFM`p?8XWjJN=EeP|U10k0&H#_9HZh2S#R@V#ifr#9Jy3yHLKU^v6E?B-tBk`7#SU9 z5on}k-1Urle1s}k2JRqA_YKoy$}YGZPRc34a-BpYzNQI-e&G(^Q-tH?&h^Baw%_Jd zLZho{n)7-Q5O1y@iG;KmnBqHnb_@IGl{&pcfnv2>ZAs1`+WyD^*udTeV*CMI#GxEg zB3xXJ2v5_{(9g#sJMoX)b}Dvv^zs)e<1c7{b@!`rfyqD!mlRDbXZ8SmdOf)vDsJa( z6(jLyDa~@s{-{42*&&1gGak=Enr{7<$Z?ez&<0@?Nln45q%xD`NrLxMldBYoqRMg1^78St{$aXX+X_hmKrtn z^}T(4m{@IhvQtCT%V$bl(v|ZDhg%pruS4_L-^=YC91w|M$mMJdB4%khfSxzJVKp}0 ziPP!jg{`X~+A_LIg~VXJOl6hex^GbyV9B?AQ~IV=JLclxR=y%bW(m_7?C;n9xAj22 znL?7e%*oQq2?rtgmaoty&~SAtH27Ru!?Yn)P)`lh&`hQbqX2ixk{taJ*P(X0<+yo$ z3}|8;f82mslP*n}TwW5B2)lM^Z;NT=#%=w5i_7_}F}Zwx7+x+cSt(Cvvcj3lkuPc5*BuMhKVt~A@P2f*Mz7`zsR;;QW z0L{Nu6hjk;px506&XD!{MA|Rp+p&ar>uhQrGM^j=*!PfSi*I}BVf$rC-&1Q-FLl$ZHR5WtL<@nD8RZbuG zkdADpA72vP{;ggq_D#eVe=N}?>B5kn@N*8tUfkD z|98T-eZPf-uqcAqYV*$jAH-+Rcpo?@A`*J>7(LV_(VqWIGf0Fs7*A6wf7ytZ``ogKNpE zq$Y1<*ca9zmn5?=pI2Dp@@ka!SDRZL3l-5u_xTgCyudYn`}4lf*#7&0yt!%8yNbV@`KLwHK$3gXh%G5#`Q;`UM<0$|IFS@_^`K)7ThVsL|s zu=fjkKND4qL~|!QG_>YbRl#hAC+v4?BzZ(W8T-P#w<-K{2cVf+JN#L`I$+rS9*$29 z74XI`4q53AuyIZH^0<#fc9>IBD=r}|W1yj=EV_B_{$vK-@;dnJ);;*y(Ic%0R2(GI zcIG#D>8l)y!p&Q(^G9VLQjK08yCDBhrr+9k&~H&9OL@B>{8P0O2@j$OtzZu~tYum6 zqXLW+YTG5)1}N`4K3Q&z0!#=K=4`;I!xlBG@DDEDxMVRqAGb+XxLPCj-0G+s7(n}S*DX|b0Z1e*F8jFm}NsE;vZQD zfM`{%t)sv=B_)P0;GI64#BhC7S~+Rm_+NIvx}OjaX4teG0MYLO3|v6HwR?H6`;Y#) zw1f+TOqjK3c{Tt0f!9dG{^`bRWc*A>+@DSw8^Plw_0KMgz-=7w!nQIT{Jgkh3^8lhZgbZjZ=KqmuAG4jPuvy{3q*#g2oMb4H;-;svIC<_+s z+I-50t`2qBmGI4~4iEX0A!4#7=(OZq5$!4pi)rtzz^=hhHnF;{Y&*H|FB+yta_8@^{uIUo*K zHQ)OWpWrJhdPB`N>l$$SASW4>^C5UFqUr*w6bzKYj5>V1`!G%~E%ShLRek$%b2$An z{=PkaZPEV3^RiX>0v#cZcRQUpb!NEoOQT@=U?Zrb`2$AMlAcwN19Yi>y}QapzS+=h zX_8xa$}>>uh08MS@SlJ6SoarO5`U@g{LU;%)^vWkkUr$!wk505lH<>$Va;_`CD za3L0K1kgY2rUNy=EVhNW*p=GLujZ3zAcv|#HE^Ei-{bMG6pPF5h1kaJ*yZ}JcHH4%!h0wu%85&o zj6~K12LYOA$_)H<`c=VGJ-rkp%@Z^6y)V39!UFI{O+`Ua~or>c6 z85id50*{$0BZl9)riiXr5<7|N{Jj2C3S3U@0?&+#!9WHzl#IvH`6boTSFR$U(eii_ zV%Vi<08qapg@n)g)DV21P|KCd8WBRE^Vz`8FeH2dn;&GmPG%4^xq?@n^i{8Vx~U$3 z2hk|Z+Pif+ldHucBJ}n=c_92_b-s^dC4^Jq!&q_$HVwkLXTJua&xzjK%{YJm`O6y7 zW%*AA=mb=XKEXr^>}~8sDF1(o$57ol#7gTaB$|l&f#{Yu&Cfw74wCQVZ zK4>jlu;Otwk@Ts=v+H?Gbl6#Jv-d^91Dv+L3D1xR$eb6c;HH!ze%#OCzmI&s;=lcV zoBGMwWP*vsW?G-hTA)>jeBSBAvGC73MFLleIyqBPvQ8+~pLGyh4JzU%L$&Pz<24MV zYLQ;DCi%9W-q;uj51zLVy;QXRYO4`Jr7EMdu|KN^%u)`a4h-!>eks~z+|l^}@?eWgOas03O@t`Zyh#u;AzwD(}OKir$*#1+tA z>G@F=aeaua{6j*az$|J8E*EBMBgkEl=d~H*3Y_~$X+vL)pdL9Ge>R!5qsByijykjL zGF4`cwsbKq32OZ2*EN{>z3V$thrHq=og`U%tTv(yy%hv#W> z!4I!GQ8W-c4a_;p^Qr<76~e-9e&a~LBElt=yX6{=*82mxoH9CghDpu10*#FeoB$?_ zQF2jQ!92RxHE5;1mWw;8$4R2cFXOF`8Uq1S{6v@t&;ggk(_9l^=!Nu_W*kO|>YOrY zk?M`XLc-kxJ{Y&F@%9dz*SqtJq0)V`!mpxcpa}lzG1~**DilALvZngrA>H^6&FasW zRo5C9Jz)hPINU|n(>dN+Rl&-Ytj52B?agA1K1?TzPQp3Nn?D3NIJ!?xPMX3Ba=uWL z1-pf@Wfm8kIiIh|?%=W3Kub#xmz9_Q$1{&5pV4t}XjVVh{>Y%Ar6q2OU6UD9fPGHi zWUgO+Zvf+`1V=s7M8bW@pKMtYb<{8z&1gaIrm9yO4z`CU(L8WAMVBJNH8s*uatpG% zI|GH=`AP_Ukx)zAWGtLCMHvhnavy5R!Eph>XzTtcvzPm`G%n76MX2L?d@WKfQrhuM zYYx8$>M*-;vv-Bf{*H?P?W=o#w(9v5!ar0SmATpIbC3Ku-2TQB{OC&#D8tmug9obG z1;%?Zu}`oVmYoa)wgXV3A6rNQd}5!n$-~E}t8he3+tLWE^LGwm8Pknj5&{4xP6Ai_a$p zZ=b>LFl}9b{Dil>Oi+LCn_N}>-_gdCP7>Uq4L2B_y?cI~*%&pHv z4gk9IXHZqzHY`waNnlfBsVv_afgh#<^GPE3yfhjK#!&mGG4Zf z+jk>i)Mm;2iS>654`uXp%Rm6g&T4Rq_&5dlJlc3?)}K1ffHCeyPW6UO0e0DevAPB7 zYL+9R#dDrU;5`@KFW2ipWq<-i9f? zCOJYQj0~Gr%k`^ zJsv`-*6q&DqGR2e+|v0u<``dvS8F#8kF(b8t{Gz2B zvYwcPV`(I!=Tmt^F>%QB1TYRe$lj5Kf7}BX4=G#E{6-H$6wsb@baP9LOo(u$%NG^!dJB$P8TWZ!f2Vyrd4I)ke~@k; zJ2DQF1d=sRC5BmHH97F)G*30^iqz>8WZnCWUqr&&vWth zvBT;6ppaa;4v(C&!L3~j0IqO%$|uphilm&+S%8ZWy3IY=0t(%xoI?uRCLTsYGm?+( zxpDujdFtB28Kq+0y&1j9NFH9F$|P{}nP~42ILBFkuWax5{j!@>?AhtuIR5fN*V`Zn z7gSGpOfNMn%1wzcv4u_21?~L$bjzfx1=~3^1UIL~nuhc0{Ra$oDkxa$bVjlG{=02t zFpla!WVWpG|29QiJzoK6n4;9>Rs@6nQIBMWPV3Og3qC{J18JfBA7dcE=kr$STIGkgD?Q*iz;3&Ry zmFgOl1;lQ#3X1t*<>hsp!%kEy&|c{0pAT8#y{?_i5H_&0>n@nMmxNtG*7o4ajr+pL zLR{beQn|i8?sGZpeN5*-?~S%Jha=&2Q;aUIA_@F_R&F?HcQEzECvF+=`FUt+;OW6& z+bk}r8(TMY%D>M7Ea(Gf>T} z=QLBy6q=gPC5*W_?>I?BO*;jwzUTXe8Oa1CYU2}T;sC&(6J zX{57XpD_y_ANtpZfnxWe^Y?y%UF7!*hn1!_1gRN(dP$(P9xc9a?p^1L%6beHcY-Vv zJ`%N;$a=ww`f-eTXQs3N-Gp^7kja-84l2+MKgLV^S!reKpsa7ittQ;xc%4lh^(|(2s_?bY(tHz!JE(qyCM7K&4ya^h)R;$k7ar#61`T-U-n#& zhahFKq4eg}1w1+ECllwbOyalZH?Zl-D74Onhm@3DEc3;3?xt|Ghq0It?nS*nIJ_KH zzEb}7IZWtKia-@%TMSj~{AYsDdP;Ii_t&62`GrfC&k-9dLCL>dqje2Zxh$VYFE2NL z-nX`zg6m4f;}M&?OG^|De>9hBP<`MI#$DVH^KqFO!9~OodzZ^Y?|bHEl_Ry#@=!QF zw^WLZ*HcxEx%Y52i4G$(XP1m64-`&jREQM6yCfiLETeg4E=*yQP{oZmGtv>j3a68d zZiqtZ#C*IlFnQ>d|8Md2CX+15I@#9dIf*diZsQkojnBy{3*Me*J9)lki6^JS=Nh5n zck|u<;~n_>5xKpS=xuQSU>`Ch+2EmFBNmavP!!J1#Vr-xrEeMLfRRudYUnPG=D7cC zmXeWSq<8;u=@iG_gwy4b!c&!bU9Q?2$v}FFbw&>l4-X;4E1jjRY^BUcK&Tj%fmNx8 zRg1v+R8v<^4|z&FK3}hthj>ua($Zdr%XdGm{i zWF#clj*quZUUb8It#dWQ@|QW(8kq%uwq0Tgs2>}vm^=mv#*I;7QL9s=E5sMYjkZU> zMsK6Fur9a;m7F_g`ea6!GXN7VEc>Y9Gnevocw_6XTid(A`F>Beu!@^sRc84bU^xgd zuI1v7grqWM7c0(<*O5x*Jn5SEhfEgJZD)JP+npQ;jSp#b^yJYlTk=aeC%xa5nv6u7TD6e#R}oVxE;y$i*T$ zXQ}X2erBXg9DOo9rHfsE?kAmHA}YmYGU7o-cLIh=;^QICl}e0LLA0by8S8X8`!m*E zGzE3WYIe5Dt-XG+gcCZtO^lv`8js3+?JUQdTu9mj7G3aSx~c^aKrasVL9k8Tx~z?XRoG~2bcu!sQx*04!|1YA1>a8;dsY@8zf2w83a=_QgF+mjCn6-wRX$_ie34M3zA6F8AviTq2D!#P4wZF zdxLQXo5a)MmxmP7o92KPuUavN)R)pqrEjqt2*BZFIes6PXF_iL&PI0YiM9ehXEkz| zan*uR={%V%TEo9%e9k7UZNyP$cmgO6h)XZ0sgsI{95ku8Vt^o_Yqe0X={K^Bp5_h# zCHDXK0$^)FLAI(uRd`-69ST-=3%_ug541>E@#ocI)Kn4*N2E(?$Ys%{SdFd!g;6`u z{I);n_@3$WM%{KyV8Z2TD$p0-GzEs@j0-I$mpr(2cj{hWpS(dfnTu9$@1A5K0X1n2 zoadFu!79QWxk9(npK;aw`SW-pux-=!Lh5rN?lVBk;1jXJk#gj?P;ZgBX)B?VSo9AQ z|Fn}#tGym`n?NIdg91IFcV5sf*TmfMPt;hvrZ`U*;+|M!>mi zFl$u)Wu#D&gMVjMkL!6ucD^6N|7dsj{iFc&BtfKi)N0z}l3|&6|LmpKFb~XUJho=J z4*yX6Nr@sY=#(|dv&e#2j2?=#`F9z`-9aH->f&4@!q8G=23GW*Q8Buf=yWRRP#XAA z!snJL4yNzc{8ybW4(o@xo^RKG_N9M&5zrFgMo~+Ve>0o(vu1hU$GI3~(r`Di2np}+5yy#3Z|DC?t z$sh%h1z;GgOB7BES`6;(QLZ)Hb$ce?4+i$RisuuEK>B2)8W@E4FalS*^FIkfRvn^qPU4WC|Kpn`wO^uEwz)%o%C~hb*4mf=LZ0U? zta$z`*)Ri>jB_Y`9i+Y z%pfmUp`Uz}Hqor3|Bbs03@icyQIM`|%D^i}MO+AhK##oVQ5^5fhVaXj&x7{c*0oOn zBu&PJxdFQMQgC?7nf$jB2buy+R{Bx#GKh~*q_qgVwva`Bb6dfoiJlk#pkJr{#W{;n z(1_a5*QwvmzqT#YeIHwEipX(sMWxR0Gl?$a2_Q@2BSi~sr1vad@VT6?_Gb&jaJt=q zs31i9S3waws)Npr!}D!-$jMT+XDeJ~^LYi$^9n{_EG^RmIvZaK1ngG^ zYbeXbA`*^iU!E%82sv!lcJ|-X-r-`54r+EBe6FZk?v^ZC&b`iarw>s?zX9nzpwTpv zBb{#eKfr^mazSC?H}$;ek4L|_9MNO)?OQHxnuqhim?8HJ7Xq)y?~wL~QiiMZ_oVlL zpX1s&CpILaVtG)SVbSTlTX`k_Y;mkURP5v@>1=7AyHf##G7-g|(sl0suC7nOS1|~jtNz2?hq$1kB3G3ENoh8}|A`VN#w)o62DIGY_A41FErTaR=J}H^}V0h4BTFu(W zc#ve!Tb&f_?Gkr*Xa?-2Gyua6`TIP>JNxgatq9NUdN63^{Gf%I>h6*zrV1rW%BesEb4UdyW(Y^6_E;&`Gr0jH<5B5i7_cRw&nuox zqt-9ZdC>wUV3$?-+WnKOrYdA!=M8SW?bfag!I@ql=E|Mp*fX&Q0fsNV($w&q6z5Yb z+Y&g^pdabFo9Gq&{Gq~yx%HgbdqSA}Ye5;d^{wgnsG!-!_l4$Yk}r~9vJ6{ILMRVR z;RN(?Kawj6IpEHp>Nf;C7I1ss08y8;^%wH?`{(zV^{4Xnt*hD5s!Ce0+BZ>*RDVs2 zrBm4794O~iS8Kg(-i^@vhEf*?ZbTTvLZMkdo{++>;{-(-VS0di0wvVJPzeta!dSx) zW7xJ1@$j57XY__R^KZlmtmZ+M-J?r$u@*1h^ z3HBwE^TkX_ob4(`xthfaaa3G0^*;RR6W9JWwH_ma zWbtfh22Tw;YW2Bqae_CLEbnt9e(Aya-TK}fcWo_lt8fsPBe=d(c1A8$-R4Lk z@YKC1Gj9J~K+gu((9CJg?QP8MzIiWGgSK8#0bLpcN+0dhS9)Le;n;c&bB)up7>}~* zLJxOR_Z%{J?i_&;5yu|S6i9ONMbqkO^|HBE4gGQrT@^Vl$qxyCp&uW6m1YtXRR6Bt zu8wnEZ?@d;jppn~l9IvYG`ZQdoqLSAW$wSfzp@YuOARh1IQ~*rstfv~ z7Wh_a`|sL%>*{r=vrEpMxSPrZrnv5cq3vUf8(R(^0!etk`9qxNTz)(lM zMLW%@(;Z(w=F99wJ)t>-h-b)z|5fp<{avoBgCqit@jK+kl!M-483aCePlPhBIw0!r zyaZ}+6gAW~Sv7MLtipf&trKij1$=FN!bGkN9E7bg{Y3BId|p@29qvX%)0a@QO{)2X zEVcxt5-A!4_bqJ#BhfXt19kGF6@6j7MCgA!EipqA_?3m!X|k<6vQr``P?8n@%|k?P zUn5?s^%a=S!{Qv#Zj5;BU3JYAcNjIyWTqii5|ba=#pv;$+8BU&mSO@BEm@7A|0M=X;ik4-%A0;+>!6nva~+ z$=PZcIx1s@>WtX&k#rLnN;n%crA^4TF<@#tTDxiJ~P-d}&y z^1iyp0uFm7Y;q#==)Q=hy8Nx73`iVOiZjA7D!wF0(~m-t*d!IvK!ng@SOc_yv zYf? z*DWIkFVcVuq!)^UlRwq4c7Ai3m~+=g$8ocs*Rwjg{TU>kPN^GgN;1h6uhE(BkVe=1 zIq|2#5N{#B2}X`+p?Hg4Q>=)D2{eg4o^KhHX%OBctlorCU)8*LC<#j~KwW&{{I9pv zVSJTpg3`q66i~;K2uBMDj(~3H+`j3&EL|0>1>2FM$V#Xs^}X%6N8!knO~|&&isEI( zF*j1{WUs3Yo2K9QN1z4Nekb^q_i-ogWpsPo*2pSB&nLs!19RPG;_wzEEs8#CH;h2> z=~tzFIgVs;C-DFrSn04S(OJ6^?i!y@YfL?b&)tVi+BLPnfTQe~8%TCt@d{fk_bdJ* zE`c(X)M5KOyO5!n$hCS#smZ+zEtJc4exzwiJ2Q*d3?pWe?`Ya9EUHKh&Kq#}{!5(_ zL74w;Aa~`m?S4vIXPavLC9=@_Vcj;bAO_*DgK^CA{rUEALXT z!$5Go=#e&0HA{}WgL1z3l3zi)T{0<;iT&kTQ&8sTpImABukbJ|6F1|PSABbMhr5V( zBj0WB!Hu!1-Pj~m=V)w%RWqyHq#Ul+VF-v)=G@(cqM)MDX6)0f`i&q+f7JKHbdA-H z)>laG%XXz_3bN0}N41}0)7s4tT_QOLLMCh-HYmG?FePTK?G=C=*x$GzX)Fu52k z<)NKfQNm5-e;I2!{#8WS;pY)nH&LDxputTJj<$rWRefa6Rbi=AUFj`Hg#AOX$X z6*HqHyN9)J%j@SzLhB%PYG4>vKptw&n#Lkizsw2AT0WgRz0=TWm8eX+S~@P|dhNrB zG?Q6i6hquD4~`sb4$Ks0Ke5w&w{E)$dWXn+-{=|d7le9fzhueAqSqbO5`TF=4UxaV z^0~AEOt=48b1#>z!gZqdGd&>vgdUM#Fe0JngLcpvxKiV-K&b9Yar{aIlP zAlan&=zv3%#9 zH3KMeKQ>_EHFGCm`*F5EiosL^e*~b903L39De5gwV>7csdoBO}P;h`)Jb1k#HH3!< zd^vzH+;Y(c{~sj|00{%oW|Q&E-G@t{UO@vWFQ2iftZ_Nl0q`I2@bJ9XBP=T(=dHkg z%j@4LJVQ%I7#WA%TS8LtGk>?#5wE)^YK2#!2GxD zR5_SIi{oC+$iW6}tK1kRb<~R1WI$VK$l#l~rT3}NrP5cl&_Ay=WphZqJA_UL7OmCr zlIKTP7;@ro8RM`h)4x5=`viy!yzsX@ubyA8p7V7+UZ10g)Yj!|8{=EA(&{+b+N1mv+5JD7&MGXbwvEDybR!`#bR*r}jevB6 zbeD9Cba!`mgLHQe-AFTpboal%ga4R=xtRUVyPsI=UOvuc2>byMTs!{y7$%=1IsThz zG56^4<5g^3(*IBwrZjRDTYW3((kispSNy}+nEzNO+PT4(4#HmLGU-FfrWE|Z)BN$gkdh`|y2-i=}&jHa^iOM^V->LTh+?LSGnVFdlJ(sX9scS@Ib4ij% z%G*T3ebSB!9UnJOL;J$*w-3t8X>dEYgAR86+UIC!2|=C8^o?p63Hu!@E>q~ZypEeY zDsvSN7{WvY*EMxW&Rl5c0wYqA)3Vb|r#F8X3rHzn+@)!xrB_{E=kQOS#dxO*v==K$ z#0=elM9|}ptiRSuoeM=6=TB23iiUej^B&e)8-@ce4`c7AxtyI~0<_hwJl`A&CWq@x zlJYs5KhrWs=S)Y-(6$4C)6>6{{*>vJ(rqaJnk}U#sG*K#bSQw=vd@LptM?w6J%jN* z$$2#vd^>!81mbMa9v_jYJ+7nNzS9l6i8=VN$LD|V#%g9sbLYpSVSTc%KG{Zy5w%D0 zp!%dH*BxLxHx!s2O~dd|Xb0SUC2*sK>G2T0euqJ522dixFWm zqA7H>@ncRC2?YnUDt@9QK7pWWxHtdSjc!=H;Hu+ya#L?pV)nLy>D|UwVhY9QoRBrIQdiaAKx^Pe8qzBez0!|I4EL#ZE;;`_7$Lw4@VP< zVW&5kgMWJ5BFe=3*G*+m;LV=80II6VC?c-E4qufRNFs57{UFq>q;zwN3Xa1yL$kxb zWyjflM#s!q)PO2U>Y_m*!_KCHj~{*nBth?bdDn*t{E5XkW$P#sZ{Iqsns)?W)0o&{ z8(_-c%)FUWA@0cRzwGgHM~2LwxPUfADxfT7g9ASLe&BPPxEhV=N>TKCQUUST#we7C zX<2yJNT%aRZ&ETPT1uD~yd8XL zdA-YcSZsd#J)G^CO}}tB+kcr3pGmhkXyi}v);^`a+hjm%vKNoTbDqg3hld;ar>xiZ zh!y0jwagPhj@3z@mqU3ooBH`v7D{F~W+ZuB9$Ht3Mc|e&UMrTrSk;2~6sP4kMgMbF z0j>yqibiwu(3f9juUK9oXFQE)bqlMN zJxz#=;NzuUYc9hlZUGkezS1DxpK7;*)O26pzf8JygEQ>)NthZvVBbSP^+B$DdO7IBPyHPc2 zhe0&pVKw|BXbp9~!e~*Nm`Vc7VcLE{puO%b#XhcTdws>1k2jIVjJ_|gpZH4uyUHn& z1y@ZhZLA7s5q(J5^3Y8g#CkQ6Hvz2=JCtBjMgnHXMccIA;Srl7afh>ojaV3@u zsp^=wzpy<9>Lyh%`p9l1L9=nwTULTs6n_+XQE$y6C}c+JC$!5V0*}&gavqx$9S?^J zfO;1Q`AR&4u2?3*5y-%u z%6M~;(PA~x2pRJHpj*${i%%xBRb$K#j8S!Z;3UV>{J$IxDCl-tJ8U|bFa&iUP$7d z&$<(YCHkNC)?P%(!`iU#1YeCF$vB*QwwQS=CJf0}&U*15y9qG)PuESshHJ+M6;l-n z=7wI1X>Mh5)COXK^1K^@<3fH(``R+6(@-IH?P;!^!Rjy~TN-xfzm>7o^sG;WBKnlv zB}oE{zr%!nFt-d7PuA7t8&+h*(e;Kf^!4qMJE5%my`R4mwx{46+Erdiy+7WE!hKR$ zcl>hxKHU#m_DgMpTm}&H_X@aeDyrH$94{;_zsL1YOfouN_93b;R3HLDUHrf zLt@6g9OGfpj(=w%s*+ZRc33?ul>%7I$CQ=P0t;kqYoJ7u)oDi`Dq6!^MUXIw$d%k6 zjba<)H{0yhdzm_aqgpyO*i!7e)Bwn88Qt!?Z$mK( zOBdS(WYmfHlUM2G%@@gYX~2?>v)q#+lUmzOa0C}XhuEz9f)!a#qmfG%M19V>2F<-S*m08Vb-z=!Y z+Pbnj>R%nXYb4PZ^gD#p8N0^Eo&w@sVxPwd(0X^s)DT@tve$gU2SP9QbeCyL`_5Zf zrpy;w$NJvR`;Fc(zGzlWy`q`MpEsD)3J%BfwDt4_8+Ixc3l_~8FQYjxEK<>+?Sl;a zp=%H)*OJU!BCrBHfDTToH&GVZYGL#!PD|IxU(zz>ULT-YZfG3neoJ}J^is^+dVdMn zgfwYvnixAJkk}a3T3SZmOylYdsNIXVZxCJc0A*2XPR{T(A-Z6RzE2wS)sZvT1%HfO z3S*t$yDtE2)6~``8)vm^-N#Ya(D;ap3=86Sk2S$1F9K{^_4b>B!TqEGy+3rtu_S<6 z5Hg&Qmrnz~hEiBE{6az7;21EMxEA0*711#x+91E7X{D+}rq^wBhlgl;`AH^whCaY? zOHB#p8rS$Al^cr0(w@JXwS1cH-gMrlj`Oz=_nU3BpKDcId1_O&-C-x5g;Y{UAoF=F zTG?K#Hx@vd)--uk;ZK0Ph?P!76yk3d2KVa?RL&} zvp!fy)|Cd&G_Ee6kQ9m>&9cHod21B75J)XFl~wp#TLcnm#s6@gh=N0P00X7QdWmn) z-2^+$czF16auVA})m0^r>=s9E6cKUXmDT4O6bn5VSs33UGgoF=r9H$NoY_+pX4t-5 z8Ra~Uz7g~ND~~gN-_(1MP+yJrRsTz`-xH?qLxK79s%iNO*(A2MfzD&Q3r&WUlJYSl zk2OU(1>>h+Q$kw)!rjkzlyXjj`jgZId#N3bDDB+T3iGKY9YC7$Wv@$w;@3BkpdXwg zj{Gq+<#PrGy$g6p4guHZi!HZ9K7mxG5E~>R2ik_n+a|So5#kzs#zp#C+zP zwoetgZWJbpcpnX5A&)rJ z>w!(*6no#3wU>VornCCg=;M6kNyrlP7dfTqC1JGW_?54k2W#c z=1cD(q<@z1RpnXJ3S-ykJqvsW7<40<*RZlQ6i=i=)Solg3SEqmi|2P?v(8sP6vdUh zm}G4zUw(0~HgIGVcqu2LZ;+k5krNzWE>2GgGz`T;Orpe1sI@=m&v|(OwunwS2R(TN z%pMA9X1Me^-0-#!Iv{HC>`p=7&S=03$xT)MQ0$6sYMYWvi_|{k4!l4g6D4Hgl3bS& z_by{Saj&cm9-+?L-x>cCFz``1(2kF_v3sU3LKS;m5^pbrP{ayzYUYp3&w`-MFu( zbSkSWSvmLy=bZ!IYGW`E3q?o55f1To8o{dvi0!U=!zf(qBSW4c4K-b6{fsA0?$N`{ zVV9!z-gb=R@$?K-zn?%AZRLqk3D47exr)ZI85zCjx^;?x21U6STJGX zm;5E3*?3>oq(1Tv30IiHU_(VgcuMJu^uKs-y}DhN8N70%3Al4rR9N3dVskp`g>=wN zCk|-&*%*L$JX3{bBJWfPaLt6eA+YYfII!mAdL=VAA1uKKW^VOnCOad%yH!!YO^%blph;x7`L5)pREK> zF_y4r0qYU|dFvR;7||$ix+?(lNxG;kgw(ex8p3m4|ETch(U_v=BiW*T>t3Zm#kTr? zEx`GV25#{DiTrUBj&fU}jEvT?th|o?Exwvl6aI%I!<^@{_LLaEm)(wc|L3%9I~|wJ z&{lIO(DvE~N*GfmRuaVPgqOI~)6uibAv z-a?=yAM&PJgN^1dDNKG?sM9{E6u=i_ShGZ4?ci9Y9%0sC zNl>}4>d9ebes~Kz-}h_L*~C$4Z0ng(EBPXOSE}``hsdsTAKvde>-=(OyoMY_ zT50 zpu4vB^PqCyt!SN8#(;4O4o(&(MwMQTCe(B14)0mZ@-<}RP%F91HqV{bY@08)0*G^G zEH36%gboJ37?_;iNZ^Qt(1I^|>I%LQz!hzaTD0WL@oG23nQ@CGNPY*z0Tc+$gza%~ z#E&EfkMrhqb$$3MRh$yZwceNfY;(3akS`!I~7FGq42q#QB1M9o~0VPo(bN8*1?Lt-13^4#@ry~8V*{dNeAwA9B6(m zr)bee-<1@iFvK8e%fB3;HP643e}2u*-1@!U;E@gI5ze<5+u_(l6rOBD229u+^Voyk zEwUEKZN!qbYzohx6Z1syqY@B6e&Mq@+qz5pNh;PIFF^XWeYTi<4j)-+oWOd}pd~ub zWo-afy2&!c{_Uv-Z-6rA^-6<|Q7Z+KBQ(0*&sA$ZY*$=te&qT*@eTYt3=miX+3#mO zc3qEV*2YArz|!2r(m(Ngjn0}(_hyYrmrp)TIaR|?Z;X`WWSbV?i9~T34Bz{pg4Tl) z7oXr!O$|qih)P<5lma@KZ{RW>@^<9j50_d_s=Xe%-)n?+&b!}@d!CDEQ^~1Pv414# zq}m&wLb-l!*(ldB>=~{}P?c3!%XJ(bh@~HwX^5x)BCeE>U#o(#)F5Q-Og?YLQBNi{ z_TdN@0Cps!!Xz&wnj+X~Hhft z?fqIbaLfPFBN6zqNRK=Z}6I3JBpZyxf2Qib$|kG zlA@zp@(Y*!E<2(MLH%clYwyq>=i}~AhG(VDsAt5C``LraqzZGarlsUXwZ}hyv^pfa73hlq86P9UmXx4Yc392av<2fZf9w<^Ukp zApoeq?b{`T5+Jf;eH8LIKrPtISE64;F9#r(Ey0@Z_4`@nmjluDh#424!k5v#r@kVw^GH%_mh)cu?9mT`G5iv}-N!SjkEOZ_@$90A9fB;2nU0Z%l8 zmz^)Ikh6BchX%xst^~Dn+Gf1F5DdhoP&P65xIkwRSXUZo716UE;GhE1kS1+z#^Rt6 zpuA3AD~H<^1)@uaR+0JifRbj#rv9%%fmXAtzcTIdq$NMtn0tfHH=+efOR_2R%xRb?Et(%C)#TkXZ`QOW+jrBF3a z-d~YaH3d*k{5(l!Yd7<6Z%81GZ_E+%oVPcHv!<2E75ZK`=LyKEqrvwU{RAAmlC{Se z<8JF6NpI~BjtSj4-)Qk~smi5~T)22z?BRf=-$$ayi%-C0DZ`g(cxEx5P9O}Ed#_F0 z6KWgro8eGS1jZ+gvN29X)8v>>C!kGo`O^d3KvF=;IIk(!bTZFeWN7PyEoF80PcL_& zy5LF>KBoPwBPqkaEo`{!9n0?~%Kj?Cpd;8pm&ASP=BEx#>@tZ$?8A={ zXRq)UwjaL5GIJ3;Eq>IO2UO8xsaB1e;LrKm!rcv{6MbYrOO$0)5HQn6244tf4pX8M z^Nb%)si}RMk7)t215bN;S)jX`q~x1zRgS8k&vzcb_>QR-$kcZY}jno6zJHM6pA;^Y$` zSzx#lf11WH?KQ}qDXxRe$-8)}95aob`}f|~0%rA>4uEQ_V*Qr3>;AFYpgC$$w4lL- z$ooNz|Dh*<|Lps|x=rjmrP?o~jX5P|& zqYszqs;kwQZE}_`80BU;qf6COXTLG`>XLEw-OC~x3cGi+_x?o{2Q`)p>J-6ZVcKQH zjX4gqXPcC1VP|c?C2+%SQjgW!<{TYEj*f#vA+XT;!u-n=;adf0LSulbt^(A43vag< ze}7u5Xvrsi1!a9HhcrG*7oKlrfiRWDCzW0dG?WhiiXFs1NqO#GK#>Z|w43up2RMGp zBq32`11-T>9x~;WEQCI6ydU}Pojspz3B7OUT)hH8Kl#!QudsdaSM^rj7w?#3>YC$k zFE5~)?l*j8z|TJd3}2dc{US5$TQ^`i5o0{7Bybne-GM}9+3u7$WaH!8Q1$lF`3d%G zq=w2WJ+p@9Q8NhQhJNHsJl7^~)Z*t&x46%oT%0luxN27a83iJQ_`(kNKsHlqV$@&t zY061oO|&0qaM{2}_)VceL;hEVs^4X-z7TgKW5GjIb}bWcgSh&HY^+M)n{H9OLWMQg zXj}&Uh~x;?reof>Ww%3KV0{{MT^A$RquM@nd`y@9WrvqT)i6U-e=9#Ke*{z1Z>+i- zo38K5R&K{%AV3zJjV(}vs4;6636I`Kn*Q_fj_Xof8h3uWl}t`Kk)B1{@m-+#=gVTj z%bx$-%cFsBPEIy|5G(p3R6VO0u3v_PcO!93f6`8-Ww+$qfB(2*IRjD3~<<<-f>pf*3n16)cMW!UZkTVM(2i> zQr8#4KVGtVaP^P>R1$O3MmYxGrqb5oattwmos>x~@@iU>e_2|<;}*}%88#b45%V^+ z=j+*2abVSSd2`d)l=)Re$%bR=l#O@Pz+6|gy;?8F_Zi5GkMX@J`1iLngT1K*YB^BR6YFmO>S>G9D(Q`G``QFok#yyN$Z4PI_b&T!tHX^H@HdW2;Z0PabI}^Qz zK>6gVlN#-JI85R>u%?-K(y4e2RN%a?gkcce9$<@ z&6;vc!~cda*!oZKH<8BmU#@)$lfl8xU<5$EE&%a5hXM=Fi~n+{UV8(i>yr2k%coo7 zS_V}`G$g7uyIMq>*NXIOoVI#C-kq+6_@QX5Y9>`+u~u%w{RyjVESpb*DXuS0(aK3@ zde{m$-vy>k2Yj2aAN^jl&K*r%0@SU;`4uiIHZ56GXd`_W_JJC34ljmYW{5n$a zgDR7)qjpRq;)8X-HmZVB@ay)rH}LeYpj1{g3Z_%gKus(3gLC^vI3dHITeUqkyI%}V z9c+K)sB(Jw!GOn{qB9ZT8D5+iypS!OZh-%LuRDPShF4d4wURHh4?u7k^3kU&{&9F; z{kKu190#4GUwNOrQSODooubO6W~g z)QWGvv%K!=TU&uTu4KcGjgRj?+z61spgl=OAr*DU9X%X*oKFMjUP%$Z3`PH%S>1U) z(-g3@&WHuU7b^yFu_=Aac%5|ubl_!e z|BzxxE;m=*szrn03TlpmvL@u^XC|C7*{Rn+%2VQr)sjZj+N#Ie0z(2(swFbL zwF7J)Q>jWek1smS{~Fl}{5XGmc6Wb(6*&;$|FJQ{{k~)Ha{vB^UhX&#TxZ;TIaa~c z&}jX|ZNrOe(k#HNbF%ds^6-cxM6K}jZ@uZ0(1l}>oL1sP_OOn9)ry&mON8XS-3;q?xCd)bn!5fOT(j?4HB zbuY21PeZSwM|_UzyJZk#11qbh?aKZ$((BD?*5R#0?xc|&%O7wO;4@T#m3j&k`J@qi zs2q=j5ba>Wr6Wyxh}PC|adkaGufWo7oD4-!Xc8zaXY+uR>xf<*!UP)2&s7aiYt?G3 zx z#I<-5g-c(t3|Kb^4aXI5<&VWvgdN?s0e7zTx`n=0>%eyZlCkP&nF8Fh)=^=v7y-)t`DF?I+*ryjq|z~~~* zXR#o?K>h}Yq8_Z59Gq^b;^gZRlsi+%v6S!k1{D|W?)wND3sSajjDMJ=b_T_tQ6`(| z`R*n9HPvc0FZa4JbbltjD|TvmW!Q{+}>KsQ%0b97gMfaR`l zQPT7pnZy6gc6Y`j%)QpPluj~9>qY2$wLXVD8@MtEqdPo!jpcuC=VOPPu6v%`W_s>YWSnSB2azIIM(HC+Xkr#xVQP5pt>&F! zcbqRH^R1>cXNr`4C~yjA9lQqVYG_M{WGn6QKwSu+71+#e+D9CMTNsOJ zB-U4!kDYxD`f(Fu{L?{ijEwRM+L6}dYyn9ZZ@I~`F)f<2bd>5}@~dO-KgfV5(jSs_R+s`PmsEAR-PxEu6(Z{Tt zoIs%F+3tzKyNlp$nUsihJ&08eox_R*Mxsm@sW9$gb&!FO2D{6ETxAt%0;SL~oDnNO zuksH6R8_cQ3TDSuj`M0T% zeaEU+OhyS~>XJ}NPAuw=JBe{P$dc1_+ky=)Gi%UsFcmPgB`=uAsQ5Y#ziF(QxF?xl zZCYj1CxRbB&uGD^^KZ2|rIxVH7)++(#BtVkt*-jl*wrqZj0tamW!q+?s0BRJPPDVH z!Fc^tasJ&?eIv5=Ii46=TI+Mk3DEGj@eJDgosPdu+505{cj72#aU)q}Gp*y1Zrg+t zSg=2uP!9N!1$@;|f2inwp&Ey5Zg2hFu({Eoog>Y#{)(H$a_B}=pGr?SeQvj09K$F* zn`&pDpx*9}?WM!PYbTzb!maTS+#0hc;IOn2Nu!D)qIC*G|!geX_l;5URW1U}p<^;xM#5NMsw8 zuq)*96MOH;uGVv9{Rg&W!B-JYy_W3XWz1gd#%jIpUHD(N(He~H!kz59hn|ipb!ia- zV6~qU^CR-b@eFI)kNW2=Y@I7zHhVF z9Ue!>SuOo9HW}0Y2Ea})Wr>NEtGQ<<+5^bE8(3)o#!F8v^+OC&=RJv}mi4mPln>P; z3QzP*In?sOjjIfdncX9QA2;YvH^!}+#~rHrBQGuSzDUU;!WCYYf0vd2tkX2Mc%iua zC|C`N`vN1Ao*z{gc|l*GiYPU9dEau$K-lQ7ti@>q1>?XH*lO0yI zaZ*s93r2Mac~ye7Vclrw{ofJ)&bdsFUDI!w+Z4gGj-?VVjj+RY-eOB^d!}$;rdY?J z(`MrR0l2e1gUsFt{L0K$;RXzhiTP5Fj33A=Kcvk~lUgM+w9#1`j4?`xw#_Ij?^l-6 zO^atthF|y@mZYlhEzz*0+(1KE(}?MTL5118Em^;dR{7(u(lRWWrKG*jSgj!%nj7ol zJe;_W*JH3%tvH6*-t40+-N`$*+Mnj)_zsS@FH0>H>Q*qa6Zc*P{n1SvCu*05Z@roG zP}Y?w^GYsd&>!)M-Om|b+WlVny!U28!pQj8v6NSxYB{0xe=zJA6IZ75RP?bv|@8YtMw&9V={pEj!mB_|;5Y(vFr5aZb z#Oiol%z(}wh|3-O-P3$-$vvT|z1lBu&)?&9zC2v(6y0E-)8~XDiQ7>tnQ0kl@QD?t zq~sBB@sNH~koo-uH=Mt}-T{K}Xk>^%s5c0MFY}fNF%F6x;UFoW$ z@All^&XLnLl*}P6bN^PkhO2!V{w?!0+;%qf?nJ}#-77TI&i^np&sbTZ^587ou)%0V za?Z7!Vz(4$JWTAG$uuCYZzCcvl1f9B-jN5SC2ZZ#d_NDlaeT47Z&Z^HWdp}nK9BT%beX|RHxTBnAs`BFPrW`%l12us9wp*+`e=2 zg|C8f#G26!=LM0S)xPM=-(V9x6bh7v9mTONAdv*I)4Ngevcm`M&ruPBb zRdybk@T|~%E{>5>{3A3@{RH-%^6FU7x3!49mtRjBdQ?%I0KWut-&Qidl0{-5*@gRS z78^1btS(pQK#1Uz5|Qs=f5+?UiT7^z8%sC$BU}BrMoT9P_|qvRVAd4(>FQmx8yn9) zsDwi+y0`U>>(4O)=t-cNv5W5((ahIAvXqd-V+ZA2n0*o`JC;7g$M zvski*x=34Nu^Bom$t2e7VX0!_j|^pX%qfa`qM!;h>ODQOx}T<;bXOx+d@SIo+J)0l9h<1GM0LHxXTM83 zSaC2T^nJmiqWo$c$j;p-K^LYXz5YF4mf(zE+5UGA8q|p|o2vD{MUu^Hh646+wqh<6 z-@MC9(v<1RG^Z2xRTM@Z78f@0-S5-6SRb|Vb#3A0awPFSw@~_XNlBe=*W_&MG3D^b zKw#IsDE7Kes$*@Czjt!vzp~M9xZ!dkLOCl5TWU$SyXp_W?0gPE+Z-WLII6bW@gM?> zk(oSB!5i)OtbEO(3#}}xr{>-7?|p8592#oqjxX( zRe8y-1ev!&;mr_uJK=hZ{7-_dV=pi?5xK8>6T$+t1ZrlGl$QHWv}qg8vIVP-+eIDz z*PFS2y6dA=&7j@?Jf-GBKG~j~3N?INMz0X+v|R_b48TIi+QlLB7;kkF@ZENuH+VY+0ker*Y~TlS!CB*fF)f_A z|BzQWq5KpkMQi)nda>EzyqeaQ#Vd(*=DNcQ|6lwUyy$aMkVBAM^}oVN1l>Z&EYPm$ z3%7HKWn1>uMxRJj-aV`1)volrc;nyxni@i^lks>EyT1h1Fp;~%(aMSCo;VWNvVS=A z5|y_QDn8gZX%Aff8c(rhJp;7rlwc?IB|h%xeqeq|izrbtx81a4Kyb};G8wAJ=X$-9 zMtuD*#&4qPeq9FGp^<{(Df;h`!({2zd(nC=yabx4z(&*QM`ch?JCIz)KGyVq4{ktyu&PZ^O9=G>lGecUOrBltuz z98H`zg2|}gA>Fwsxy3w}z6}r~0j~(o0i^1<&v6*1$rC-+jK$&*?Wt6Gt~8q~4}}A4 zhzoSe+D1-Jn7{10!N5R~0#MzrI}Hl}hjI;TjI}nJxaA|Q9=_ek!75d~x?^jk2sUMz z3;^?~L%$6nKCpkgd-i^=c}q?)@CfiU#s^;>p#*IliH&uX zq7DmNp3BhCHrD%l%u<=&C)iYm$9A<>rP4K4Pt$h4tXYV~m$c{?IhW0QM+5fd^+GOb z+#v)Z-zVw`CPq?FPU&Bg8?xYlRL?4T-MTLV-~ytB(q~4~?Ck|GyGH5%wE!TqK71@O zU_PkpcLVDnd<4?ln>b${ttbII+#D)pzg#v9$S729W%ymX{abSb9d$=Sp40~^vHk6t z%hB3?+|Tk$*|+)oJ=b(i0oZeRZH92e-&l;*ka!5CavLDe#AMHKNydR_wf_vt;=?)3 z8?8fF>e4ZvmisW8^mc$-Vi;28TAnqCC&LOXq#d3Xnt|^sZ^cG?L5!hDy@KV?#WB#( z)9m5LuIpylk zp(-{-(1MklvvA{Ij~?FIB4KEjXy2bca<@<(3zSC^_CF6HaSEZyH8* zt{pxC7u;@3w&aYhHxq~b$w1km?M0ndmLSgJ^NMI3bLa&h>Plviorxo_OFqqBwphsH z#5mK{-W(bWzu?Fu!IGxFw()&+fJM1tU3|%$Rlz9P{#zRBQjMOd>>z8KSmy=U!7GrUZ#m*;=ObQml&@=?s?5+L^seC`DiWx2s3*bbgt1 zXn5o~iVGj#s{&%jANTsKgZvdybaLZJSaOeo2h`z4W@gG$I<2~ei!?KKkCl~`%&f)C z0s^Cp>QRyfB6XSyJi&t?HnzEmYOdV=KS|=>u{+;64k>LJ#%1xqYgRwN*Js=ro)DcH zrNsnHJE`Z9`frELag-w8eh!~hyWs@+ruq`K1y{?4a-)!z$^_b#vNv-Ayn+wi*Ms28 zt;+(eYdo9re0|$#t3P@sbM`F1oRELmHin;%YAC3$W={(>BGK zJ;}SVqst^n6k5G#WUOiQBqf%tYx%%bn44P~P&=c|6`~p9KRD>2$>3l`P|}a@JVJ8J z&%2B}?%rQ8OBAvVU0nhw;@iy2Vu0Mq2oF_(kX`m#l&lxwpu9Rq5RVC4c^qv@Eg}qs znBhgw)XmCw=^)+KG3IpJJk*q0R$e?>NdtX}y>ApMQhVR9&q@aMd-) z_J5loQ1FQ;QGOPaXp+CFj55m*56j(eY4MdlgmbH0u`^$_hp7JTBy?)lwe#|6^!f2s z<}(?V4KHdK{%`46BY(5h)K+MwaF%&o37OD~u)fd&sk@6-@Cy!D@ESUOjBvDo8F|!X z7WNicIIY+`btO-YFRKPjQz1&!`;FLNf0KzY_S7-)(^{69Sc2>2Q4ZoYa?Db zV~n@Kct-$c;a4r(DF28781E2v89Dn8 z?Y=ZGx_Z9*a^s zbfaxXRaKR*4=+1=ApQ8n)D-aZt%_E}f&;|iIR>4NumuI=KE-vrjo;Neg+9pZQ7XNA zm7MS@q30dZg`3Q|5`5r)*bc!X$lj)Y_M0$xPa)prv~E$rl#w05R!(yqKiwJ@49?GA z<7GW^+Bl)wlAn_f(NUT=csy$bdES3gllNHgDbv5-WRUqRqw$kE7CuPWnG3~p(PL2K zNq0Is@lpY#>4{nv_U%)S*&*36(MiKKzw-@r$a#0nc9sggZpTm#fZT!r*gF&BW%HD@ zv`iy2lgw{|{Y{IozF0~rM%sw*YR)_@pUXjp)GU)pF4^vY$?ERez|6|(w|YVF#oUu# zeEiy|m{z{3Y|gGLCpJ&m;T@-P!5@i=1+pCQy#^$xv?N1!BkE99Fzc@O_?EZa?%v?N zRo9h(jAW306cM+0QStA6c2ZraBQGf?CZmfrsqx{!De9?NK;8@~>nF+= z8p&|%a5Eex=Q5M)#tmNk&R44LhtZRcw>ucKajGRd-F+ltzi^|KfyK`|x$@`>)9grk zO`$=^CKyVQ$ut(8o{LfikM>{=^Exd6V%-LO|dZKmGM0#BK zhdjj{{w?~mU?WE6vOU*{tq>IGo-xQQ{CR^zN1hxR6O8ZEhJTYw}Z_ zIcjQ@k$t{m$WelPWxMW2Fk0dRWXD}~Z9j{dNfBY{TPBT;+J zc4AS!Hsqzm(y)HE6lI9+Wk*4`Eu`qPT%z4`DW+oMzh7_gzS~b(W)YMq!N%bIOK4gD zx4-tj^RwuWBUmm7&g0+vHzc6x-2Uqoef?mpi1EN;N8Q8B3gUAGjo0H65lJawSvBDc zy+5AlwmA5kzfU#*>M7PVeS0{k*M(5F2&*S^-1MS@ok)GwW;xfVed-3 z>zBBpoohBgO92c;LqEcRuJ1n*ZpmDpDjh&P=kb1E29&jcQ}%@h2Kyd02=J3y-FjN> zH`D{4Lo&|#=$&0uLdL%9QOog7k0dy@d zBt>|#{sDOM;|w)KV0&*uA)rs z(0w}$tHYmu4Bj4&VL;?jG>GT7ZJKVUXOj5Hf6y374xdefPH*g*xn52es^Q@kn`Vc= z@umu=i4E<&eZUy4sTM}&zjV9>1Sm7c?k8Fo6KK0_j7rU6s$Ss+M}4_7(cOZxTl!^L zzX>vYC-zD6LOX}lyq}*t7#k9f)8vhDiqOOsLCbTnsK$5~2humql8Gc;>cxm3x?$a} zZ9Xeu<=tf@ce+5e@-4Scev|bRIQvKc~?3l@iT;3^G(OkcQxwT=|*Ls*7l~+N-DlSTy0*)JiO2d^8cgSL} zkvpiPj=8>~*8j2jrblBXK5Uy;K}*btYSc%vm*utz&>vNnyNUHQ!n~Q}S7`% z4p0~mdvJ*CoYs5S9#Fg+w}q$ibpGX~SXWxU=l6o+35r4^6`P(>=P$29b$_%6+2umT zsc+^IQ!Gt{XT!*n6ox4kOu~~sN6(4mW%MPf212)y`6p|u0jB4xm3Btjd~mrs$Kz6E zf!p;0yS$kA5sAVGZ&)!4FN?_Oq6FE}?qq^_>MC$`6Ex%EW)v>iCD7oPTe3Eo3pq9o z{)-~e+iefdL!cLf%Zr^{#j3}zH;kRb9OH?oQval-h7g#`&Ku0zE!(s*Fp}8va~mOLER=XIdobGax+}jL7l!2fV2g|009)PtZ&HMcevBNsCaj8_v7I z)Pj#P!EkWW6x@Dypz=(_Lc7V0y~EcSB{?f-5n;<((Rd0Q8ymx8sz;k}*HT*!g#Oft zA4F^4LM+K-nLflpl$};f(<9R+S-pV##J>Wg2V=PRf4!L6thU^Ae{<(+;z4owxMsRP zV4xCnkAx8U{uX*}5ZawhI$2gHDmnc@fHxLIrlX^V+)oxR&P$@sA-eeq(ZgCV+Pv)yJNt0q{(LzOaQ*XDTkv3=#G!}9HCg>L5asv5rN1pFWJn4~+t zs|33dL4)kuxWGzGr1Z# z9pV3hU-xbJGu+o?`y74lgd6Ph>`;TzmKCs~bDcop2r057AW$mg%V>^T+IZ5LVH??4 zVj=6DIux&y+G?6+&tURBZT5INqULejR9aU+Dp}dt2}084_Dd6JzxzC(AO4l>qr6B` z5nqU1_{2#~ci8zeh|d$vFf;d=GTzUfNLJNzTvHqwQ8PiVYUEs*K`EC4iE?*ke3onj^XY|Pvu zRkXVjP;*m82lT3&q@wwMEp})T78rNLmDx@7iWc{8DO*7Yhwzd-dPRv>9*G@62O)by z!!(H@GpsnRWf*~FGgqScE^rklWO#H*qlodvWM#i?*c2T}Vl3D8+|F|?Ov>Cqd#yY# z-1!TR@Bz45(rfBLem=JKAxn=Wl9zWMr#86LPoo^e(35VAgM7bDx?xCfB)JLCU#_R- z^&;jx-q>G0YUmr)Di_Y#kxEaiV#lxDe^FEWFRA1F?d;tBAPrKgO6PMUn)m$&pq}`z z+&@`l$o74*1Z*T6s%oad8x>#(V@hD$uREauo=4yD(%Fd{-lO+Dih^(eY;k+c{KNHPH2gwx}W1YHv1{?9bGzaAmi5HK+Gny zrM(KGjWrc~%OKv33nAWJt9cdhyXM*~)V3$1WEDjqah~D8+Zfpm|7BJoU&b9;ZPntx z>6c?$L+)w*ZF*lTf|15(&D@uX6m22Cm~B zE@h81uN{=oE?^zNXXK==$)?^6`qs&5-Tl*m07kvK&TvNN>p8UwH zX`$m{NP1aOb`%KW3VmSb*e^F4LvrzX@#gy2Q2?2AoasJlp3=GC%!z-Y{Hkg&CFPdK zh7cxFA2Uh3%0P5zdpBdzWN)EX|2=H93fpgwv^c=_5y%CgalHtd`ZN8%V~zvt;PCQKeYL9Cc8H?6Dhr~XIN zH%3*~zkmOxnkL(}C)>7d+cu_&C)>tJQ%#;c**rCAvNhRy_WfV$dDB|G>2&rv`@65} z!@tJFbm3$Pugx<>c7{EH*?oOtmVD{+2;@IwJ}c)7O{g}=R%w>}IWA%#;F}Oll$iY9 z*B*Q5ciPRv=XKzefm7Wqjyy1>(Ydh~@+1<{kD0hWAu-}(T1D=*XRbh=^Fsp7;)t(= zcNkecy9w-I+aZtk;#tBS>AdN-dA9h4G+ePm;0I;+?>mjZg^Kf11~j}={QtlT6okHw zQRIZ9Zr`F;E49C6lNS9;Y*5JYaPUhwCdPjsa#2(>g`Uf%)@B?%K#3$_FfUji z^s~t*&xvLD{!PAIaly@vU)W+7!o=+4dcKNGLsP-)dr6i6=|`OJr_G!|M}*f??trID zH*XjnQb1HxR0NQmDFA2A&R&V2qSu6lrB9cCi?l6Qms5&e|8nztiw>ME9{=Ub7rVAK z`Ujad{1fh3XO7zx=3e=8<*egI%RmgJ;l@U~9PuV&>KH*ytv*!!|EleN_2E83KCVPA z3*S#zo+e{injFj{Wxt(zs&Zm$KtOWQl8O{^>pN2Ilr4*le_L_g*Usli)3(@<5S8ZP z;gYb?K|ojH5!7+$pVu?XW8vXDD7Gvxp@6D>PV|C^T4M;t#-Z4;Y_Gj7LUhr##QaA^(zo z-a-`Cy$sg?iqLuXilQL!nG)DcJeIXHv}>dq1jDK51z#pzZeu?|e&P|2UH^U~Jphdq zZjTB*%-eFZo*@Z%pB>S%+>`KTx%2$}iMo)SUuhg(%WY zl{wRn$Dmoic45K6I@&_4bfav=ozBXgj@>s{5>3XE6IAOT8{ZXAArTN1X31++(!54r z%DiH|hO%QzNF-ncjRjgz;jqmS4=@iGl^;dIn~aNBO%=B^+Wq~${v#VFUv(RohZ!T> ziIaNoxI+2zY4e?TB!NU!4kllku^SCfzYuewN&9|-67|3PLvOgEX|mqb2# zABRqDlG2Fu7(ZX84pzFa3SRP)z-zZ{p@MeyTCpFXd5gOdP3x1Eh4XuJmHZy8*yJz_ zE98DiRU%|%Q5~({>MZn*KFo8I-m(RJvAKBbFw!03#@X_A)4Le)ZkJ>!CXIxWx=NN* z#E3YO4*l)H#);2&h1S2DO{;u4cUZ9X7&M~FW!uuqs)${&3ZAo_b>^jO9D06+)&67Y z?@!RX+vs|u?PH6n!31uML%hg4pcQ$+4?sDy_}HdA27h;hUTeM*U=BxNWMur|qLsbT zkP0Fe7_&lLUZH?!aE$83Uhl!>FmSZk;2L8zscrU;+Z;#Zp~Ea|-`_6@Ah)z z78EgA`@|I)6{V(?I*U4*&5auPsAj1LUSA&MwoDlv;^tzTTLY zUieUm_z~2ga$u`r&EPUX6hxL%V$7ECnHg$Y>2t~GR7w&t7C^n&Hz)lcwLe@Bx*I_RO`_d`(35Jl?xl6;lsU=|5w=0rnJ&-CRj=il2o&h)^I{#bJ&S~8dY zWkZwQg*BIXyB0NCOZI(sH#~C5wrSTjUMF0E+`j)QPV7YB3ikuO$`hLa>F_kn(<4O` zS(y{QW~V-CW81doYn)S*gcmR+4NLVWx8k@`R=-P5AW<$Y=C{jPc{hY#1DKwZ$qgF!|n&kkYTcj~Dv@Jh7 zkL5-tril}tPyWYSorHI0%Y+^4??UUU$z=R=HJ3^5Kv91dVXM zXT_LZ*DESFkC2f$&iIza&;NawE`PJS^jvXw`dk$2GGEPzJlg=mN|n1Ab_l1&dtRZl zH52oXpDlV;o}O5G+70JS1&3;*naj(|Tl4#bmh3nk#Xq}RCliPT<}HhY8Fe@kCSF_F9)J)?c+-WoN{UjGOREVNoPE+y142LdqSyRUOPVyYFcpEO0ML@6(2#j#b)NlhUyHq4 zEU}pE1;6@^z>MfY4evOMQcN9NQ$vQ01Guh~xf0x*d$lzBG-2s1YCqD*ElP5^8>=Xf z8KnP!{}RKYZDiC_`9$0Aqjnu_d<{C~+WJRwU5+u4MpZ#pOwVAJRHTPvtv%otL{MvO z@0H2lb$ONeeYgJGJ@$6+2c@k>bIds=b>n{nWk z6tj135zr&~-$dr#9`|^a$mex}1uP2yl=q)Mhq1n^|M8Kx&3Rqkfo0waUn`|Ocpm|P z-SUKQm|N}U?K%Iu%;`GD#kx%Ff`W?O#)mQ@&*%~o5&d30s`320=aL#Dj`Yj7IDvMimPK2s){TRWI3U zXKTuInPt+sg4V5Soy82b!gu_`t%^;omkPgIc{;6Xr`7G0@pQD*FH=zejS5ccgb-AM zXEc8)@Lg226WhWbivF5RE*l~?3r?E2oJ>`@eyZ<@t~zdBHCR8u2#@)mHrl-Q$@%Z9 zHfaT+3F3_cAddj@@%+Mp+Q-Iry?sj3l_7zPu7SZp7!3^p-~yRnY`neh==7HC^8%Lz zNcC1}H#D=g1m=lw3OnCm215R~cYMRm-QmAX&=O&10zXLwa*H<{OOFu%On$wIp4j#5 zZ#yPrp=v4Dr|cMryXh#t*NEyzZ9qaEdAM9hW3)(}$ns5)8F9Lr43nWhG1(&AeB^H8 zIppYOD(Mr}t*nP3qu zMR1}@o#w=gB&GFiH>P}4Iwk}%j@w;$PU+-Lu;u)7r7vtHFmfUE!QPojw3n}NaRZoI z+)rPv#$(1z#dgQmWq5^~pPHQ<1AXj?2sLP8Sbk)pqugRU{|6o^3*O}FZ&tNrZX`e^(}2+z z>0i1kgd5-UKl;oGH71p7K zxVkQ!bcuUxjZ*e^)cOhXSj)b|g+muTeFBH|mkR?g?KU5HF(i}}q!M37jAWJ^*}+I4 zWr~WhNl6S@`)h~S-OdKO?y02n;5g$^+L(FdWl8xcI(sY&+HbU~`cPc;P0mcIvN#PC z0L_Gb)5#2_J3{ay|4Q$RcRBz0L=ktaZ=5z2FJ(QR~%6WevTf-J_gT* zWEJ=yVgac)J3t9Bg@P0XMk+e!L=_N`GEbum6*zy$6%bX!CM1-Pvz>Cp zzA*2#)SR6~&^eD)^e5hva9yhp%hA!=ks|qLYx|@~;71f)b>FysI_c{rZJt0tvM$xx zGM@xnA#GfT#tfafIu^#U_q=#=x&S!4JIdx_=^qY^qlu0}3XI6Dx}OA8bv1fS(!+Fj zl+n*o9FIY@ta0a^EZ&6Zfh^t_xt#*m?N+Z=LuQTor5BbT`nA&Snn3DKX(vjG7^LOj zMa40-p0X4{hgAjSOtM(5mM!2;5S)A|z#=pPm_8^{JMS?yg(ysQ%Yz)*myS=xqkq`FfLhIAlCTx)5*Du#)Yk-Zw6GG&ENKw>>IsW`5# zSY%kOI*Qv+i}YkjZq#xs;V2MWM_6h9?53$Tz&iP!69y(6jft_!27cs^mDnSA)5MzP zEN3&VI3~~`(4!!wG%0fPXwO-K`a&^KMV`pr{bEm->b5#ifP_83NsXUG2?oowyS_76 zSnSfpjL*)pHZ^%nPM%4sX~qm;98MQnToedNs!8_fn*JMRdO@ zC&XiZ7Cujq!IQGvS$=SR^HdLGA|JzutODMBWSz!%=BQOu+Lst2-k+J~?Z3;gH3*1` zsNpH7&D=flM2=J+1PpuJ;a_P?-c}DEuQN@|?Hl8w1O+R#fwS)&&SepzD1x z35xu9Rw%SMoaAjKZ))rbhuF`%@pl1PBaT0uUGGkil?#QH+I7t@3f6xx*I(WnxVZf{ zNE>wy$JhKPUNN^bOO7~QTH)guSRRC#@=k4q&>&G(8yEl(pV^7~hhL+^gEI{c4L%8p zwRs@X1goy0(ca1agknOR`&~buB%V4ws<}S58Bxj{a`V4iZFx~`YK&w8+frT%lvK~J z*;&K_VBhDlk*qu-GbgLi^z!!irUuO_*UM3%aHuX;{-Ne0uJ0Ue zW?j`Lc!K<8fPu}&16u@(Q{Ss(l=7aRPJU7Xb$z1usk9#G!3)d)HWG>%>KG{1j!_bf zGD-1yb!!6$r}&`=KX2uWy{+WZqRQ9D5t078z`x2-*0o}I;gi!QHqQSD%=S2%JW>ij zc1DaU{U;xK9tgztT%RZD1$(E?{%UFC9zHIfitJve-z*U3Hm@>cmhM(o_w)2#6}AW8 zF^Hl41R}e}vzhdT6U`0iBB%c@IyC3uP*PghrKxKqBSqxdT>=fN`-4|6x`w)2fBrH> z7GnbG&J1CnQ+H*&i^tKEitup;+1QJY$BB_c&j*$|36a-wVc%LTj_+dvMYLL+Tx%HE z#kJY6K;U{0J4hM!QS@wIB4x^>a^8q{6{hHNOZYv8c6XWNMGB4-e56^)DFH~fJgAz% zA_q3Zs$>))5}_KLI!e&*quPaR-j+cFh0V(4s&8}xC5v)$V zk(Hlc)ra3iieiK2;LYFW;^x+203_MmT2(L~ZA@WLd0}cnOSv_#pkpu|q0F5sv150` zB2$1jJ1VwgA4%MtphOiBMQhFK^$Sz3$VXtd0~$V#KUKK9C%>Y~rJ#1;axXrl(V%#DCQsB1587 zgjkxo!of$>)-oiV0xa93aw_;#l|g3~DzxdR*ve>$0}cp`9@VB{&>h)UclvfXcmGKr zODbsCw*FK5I?Y9g&|i!;!jtMW`P!Z4m6B`%#wi-w`t{#pL*vWQbX*1_X1Sp$Q%gP9 zQtywO?~L~sEAS~Z^Zigjr=iuwzo5SzEuuv5Btf@oKnljne@JM(W?QrU0|e<-WpXkV_aI{LL=Q zSL}CtlMOumCsF2IaO<+0c zIF4JlY{{8=m(Jz9p>JBVDEY^;pS9nPFD**Jhpfv#m%1Ccz=tdAgeYq){cHFKYYt=; zf5>pE(gky;N~;kTPx$4|-1lakgFhzfFJDYv5MI1z0O9jbq&cgXcD|)4bkL%1{$)&p<(X-CY zH)kHV>f&kyK<97(^m`lr@=Xvg{{3&g^C>Fik%abN$Tv!vgv((J*)?$eIezY z{yPo@uDC~X~{=#ub+(>eRj zg;QetMVbQ2%Wk;MSWti3S{_{c#J1+;cd~uc*n&z%F&$6IG+0#(Y8pBFtPGjDw4rLG z*#yeT?~@#)e9Fb@Vkr=CJ@`~od>HXF$T4Y@Kn_EdDT5v>1}j#|eMNjTNtm5|xG(Gr z{P!Z3j!8>)fc5~&$?32V6qOR2Y#xjm(gANS0A^>Kc{;+(+(8b&*^NYBU}66Q!6U>& zcSjN_C)i6%OOfIe8ZAaR0ab>2yJAlkZR%9g#9@PDs=QxOAqg`MVwJ8;^78{S`e)yQ zSUWwu4&@p>nFIMFaY{fN6EiA=>vUA?>_4+38 zDP5!D$a&F;e&!Y3X6UC*%uh5v*@aa%WW@q7r_TA&%px6`?`hcCQ_}I}En4E}VMUuC z$F=@0&dz{pEYi$%rhCK>D1@|Yck1~V2-&+^3XuyiOUGAKPNVhp_h*raKu~BHc(IRF zXiw7OS{J9MhD`yRjj`KP0rYhPfA8>hKWu!53K|^|L$09jrqFUnOgV!r1$fb(Y==(h zOGh^r1{z3qNJC6^)y7DY?_j)KvuQOy*#7F^u0$@` zk=qoOgI(mcPw7vF{aN0m>&5$5=^Jto zDOm|c`g|}=B+cl=*VlNDW|ya~mklf9-0r>^0pv81*L9UwklB%LJ5$1L$q}Fr0N6sx z0q8yV&zf4~xf9p#FE+n?uP_*E9J0VlrpC zLS2wRLI7^aoQ;>i**9mrtc-{s41g+p_8;%rT5q8)9FvAbG?u?h4r~lX>G3h5gf>-~ zWIyM;wH^Rsb$nt6^ozkyHA{R!_fR&|M%ID$JS~v}{W}CoBioZJ9(h7O1%VCUoU^gU zsV$YdDH~Zze)Xo@iwV}Be|cKZ%zj^xldRIER?h8rY8xV~FqUDX#^B56{qJ1QUd{j& z6B>>+8abCCOK{wmv(ikim@}dMps$IqQ?B$~&dN49qsLbLYV1IL}>CYG<4p z_O_1hBkE*z`zL3EJ{1TEkFEAI$xRgJ5sIcG?@)>HXi-tecetqh^z`yvi*r@~Fr%5k z$WK@^T35;apM2(L{5$P{6kyuke`nBI<|;e9@dHjWC#Um-mUS}aSYa&)nq2~hvU5BDqebe-8u8yb5#ZiY)@qtT|&Rth<_wc)o7I)khnhZ9`ps6ODpsp zF3&t>cAiMGyivbAFsGKX2fCOap`(%nC0ZVnw5mf={F!K5f@Ds^UWbeSfn zI*Da}4mp4Lj2eqe!tqeorFGN+wkDUbE99IZXZCR(HzZai=)^>ofuLF6t8oR%Eo;{P zX^;JL_#UN#5lt)wr2@QBDjFzSR+8V&FvnzTzC6~qAPQpN)X8QCIEFewX}|_guFsu4-qvf@PJaYPF86sqHTGV2&M>PDCTVc`0mE@ zTnQ%j^^sq<3-*wL9TF)haOi)pEhtgx4YfKh3=UoyQc+uB8e~j^c4dIUe++<aQ zQH^C)sV{e7$SFMW&4&(N1M}0R$DPizzXUiC7aZR4^_tvhnhY)^-fNzrAD;kdAl=STZ55u{S8D zu46*tRN^!kulT&`iEj4Lu0LSsMMb?;!Dx!GgK|%m9%ZS za-(^7HeM3`)3@*4Ffhi(YC7cZx$}_(?a=rC!VOd;zml}0a6X8okxcHT$uCCC_ zc+(j?`?;UG#Euq|BV_1Zis|ik3;`enrV(th?3ba_mNZ2q-m>D@dWDHS1IX9)rn^E= z1Tsst9nhbd_swB9Yuz4yll0t{vs^}fT-W^d*n!E(DX_`0Dp}@kG$)e`PZ>+`B`%|~ zb_hx*{W$vK==g(;y%l<(kqtRE7cmwHANe9R2U&;L8kx*)UUlkuEZ;0wWm0qDe0)SK z-1-}FL&WQewin)}(xZeI5f`86=3rJ(o^Hk6#;xWRUmFh#9VX%Ey!g0{8vLy;7eF3! z0m*D(%N;VO(QbF!=E3v+1k=~ADJ@M|8KFnYS3wmZdn?(%%!Xq-;pa0*7I?VDArnp_ z%9@eP1%af?MWllvS}NQc&o(9n#ii2`U;?(gY4+9?d(Nlko5>l1OeLCo*-0O%Vj|1w z7x)nlwY743BE`Rzl~?Uk9mgQa&ihY4ME8^Jb0GwOZCG`P9&*dOF1x+`aTkP2)j`yK zyStiA6q!bFqNY@~EahCk%cY~niLZpf%H?~7NxG}@{ziK9sF7H72jivuMRv$Tj);Rz zc@YIOY$ok{G+h|W6Q)y=FGh2>xN|GuN6U}MQ#57r2&2V#r$a#W{ zCAB?Yt^i10l?w#rm@_Rt-rv@#q*U%pFh;(M7cY~Vm&aSj0}n252uUMVxj2!LL`u4* zC^r1KRBlBDPxPtx za&;YtpgQ@{FJ2%<;LEREugVUr79_VkGuj`n+GN9jU;HxcbWeX1 zcwiM`1Hnm*4+$zaiIr;(p7MI?E5$qsrn|#Sjt;LPL`ScjF3oAh7l(dQE(|Kn&L&oj zE1#bP#%#3jfKZ#Ai%+acO-YSa?OXI`4*=5+`N#Bfe{s0g2Mtpo(`{@M=$M8o@`@%Q z5%xE)TiMA1*+2)LI7;SUZ{pY$IhK~WgI8)}HnqjcC|I1lP)b_W#Dun@GA@%b4h2~i zpXB$nF6XJ%8E-LJjc!L|dK(D3u*IOw^$+)Du5beB)(G2_bgF@l%}SOD&As@lQdG6h zKuue__cr@d-A2)deX*W4!#XBLyZe2DQu{f4(T3}O*kjU1h{Mg=DY}uis%99SvKmRj zX;K@u@KvtLRmH~u>CIqjBIb*5=!FIY4w+o)XbyPCa}~Im>{i3Ye*edV%!Irn0@&n# zhuMCniCLieckj-rYz`Yhg-s)e0Z4}XB>)rYP4=iMe z*>lNmoWS0QB}qg%M6Yi3!WtYP(QKewG%C;VQ|^DsWU|Th6bW-k*h(5|i*MoPHBGh@aC~N(Mk_5BecX;wlT-qL64@R%1oC( z!)fDcpcxr9@;Z%?k3m8zGBP$U4uwsaTawvA(<~|5;0_l0on0qx^Kr{7e?Y(S4XG1XMfsaHNja>RO&_ z)oN$@FRt$5Bc`w*eIhZ4wAl+~TK?wrD9?S?+1|KKNXQL~7cg9aZ{VP?UhC|ovo!xB zf~ii9oyVH}LGT49VDKWAH+!l&8J-G*476uvofmx(()$oZ`i8qiLC*w0*zU*kz@4jI zsa*s3bDIDwt^!N<;NBip4wwz#g@g-jyu2cgkLl%y*jx0yJclD#6=yod@QN!};XHGh zVY$|Sy9r%K?C>?WLyl+dTe1oYO6F|i)Uz={uf=&hR@De-=lq6Ziyev>s6bTL-B?5w zgG3iUZdSgCSfB4c%yOn$FYO;US==Y&{195VTqaem$(WO|TXSTV!KhG{T4#lOZ624= zfOtG+LKrz3L3a9pT?kJy3+%;g`=v)_ z>&tN-B_`4U3_Xy@G)S3hL^N{i-_4os1m;3L_a>ZB3_$^sGXZ^{DJ$<1;H4%Jn0a_= zF?oUAP1O?rbf+Bqu<`NfuJlE+55*EAr&c()WQ&%(4p&VCUp%iLnljM5ifoZ7*!E|W z$>IB|Mndk_GV5f<{f5TRiW0O4LY73O_&7Oc=+sc>5jF#{h(A3pE3Oesw=>&u3l6u> z`K!ocL?y&h8Q2Jt?UO6=! zQOB`TZo#uS}1HCUW88E3E zhnQOJz-e3)L_>HBb7p#Es?uxC%<k3t#Z<63j;gqryx4xT&pe;&_a0L}uhn zC`7qMePH%$0*XpQ6aTq4qL#+|{D~q8q!~?|5=4$gE_POWLO}Q3xlLm0nQ2n_re^b% zf8^YvL~_eB;pv$%77H0vVk3)%ES0FPzL}Y)#qwQcy4A!+>e$BoI6Lg%tk2ck_O+2t znrM53EXkG%ChPB-v-|9Iav4R@#mixSkj)*sP2CK~;Ze53n`QUL(KTltys+k?S*;3IBKee3#vlJ$v$V)L(ULYLTxk)2RN+n&c7-f zD0vrNZ1Wz^s@H1K<3NNpSuW=j=0~My(0d3)ndY$4e|wFt!n*WcA+VU3P{#-*oPIS9 z*=4kJ|J+4Jkz6IAPgV7z2ASWFx3`Tu7}lgiHMAruCSz-E{zq;FC+n#d`00<2_s83J zQLt^6{r8fS!I;ougztaI@js(6tZT1Y{XKoq%PIuYBU!oF5*XCkq{k3&4ru6bzf#o8 z5cyKElfzk*z+g=bqf(z2jLg|Z^$>FKwS_M@b;-^jf0ot482d(*kX`x5^;sy|h?!aW zQsg7?Bh9DxiOYSTfjwGuPK`rvmP>F`io*$u%Lys^l{_Xcy7Ye%8o#{n*wy!DYmuyn ztZXSOe z(}`)%5vMHKEzgL^T#cg0E@h@+<FpP`+P@JV#B|O=6-3JQjqR=|2X`=E2}~fY1nJ)3<-q zCQ!4Z3kEgz9sFai2eN>6EikD-;vriawMrQBtd6l%ia$AMYPAWCR9-Ylh5WOiklNbp zI8T6u)dCOpqUVJ3kQou!i=uvpsP6r0n9Rn)v&h_#o!lVgY zwi_#~A<=m1Fz3XvW4WH2a~D@PFVHT85(Tx;A}ht-FGWFz#_z2~i{Or*3Wyn23m+fc z6U4-{kW`?kKTX;TDEhM*Hd4*k`)+O*1>!h)fQnwUuYg5}92OAfAA7NsI`? zctvpk;3H>yo>I4$Xq!(=4jqz2Vex562fRLuBr26y(pEV6AGpf95{_G>$#iXmN)zAU zd}2$W3a9Qg_*1hdO?YrasVZ1xjn@mcxL^4#ZHBw;$}@JEZ+rZNBIGuzcjn?_q*tcg z5;KBCJoLO48H#1^Ab!a;@7v6UAQc=%>UUbMkZTeBN8N2-7ZZ>89Wq((u2( zg7XXC&lBl0<*Q`(aQ&Y5*b4vp7dltS73*5MxD?*SD*?i(A#wN_ud6OP?9M!r zb>~#T(Rud2!IG@8VjE8OUB6p#6wV0mHVN|F za@A1_+?(h;DHT}GM3qs5^zY7qM2Al4Pg1q%tfN`+Pt_WAd`2|_MhiOzv$m-0!3Fux z*BPPNZDaH_`Ma?3{;53|=%386N=u4XPuhL`xOvL*`;W!%Clvm$AeJydk<0vVg;!am z`(!dbt!!TsF(EH;j4}{|bk{YEdLuq1sg!!iW@0!?W;-ORd#P0{) zh3)|!i38mh!f%(D_XQVfBsFYY0!kRa00{!8JPCM0m+eGSdHMo!1(!j!We7)|Y$xMJ zRBCJUvwZGFS4~w5SxQag!4axKan>vJwv+cfNLvS-U6B8qc_j{;adI-j!iMtzmsYon zb>z`99W=%U29IPL|6t=Yu(EF*9#o7N%VxlYVAEJL93Ng`v|K?gUO@peymI{_&CxA> zp~hBaZj-)dYz(8rrje1?tx~0bb>}5j!WUhw^5h7aw!g1RKjL`d%OKbp8>%v zYj~NXW4Op~oc7`a8CBRX(RX<`PEc7nht4})TErX=eg~$Nd&#e>HBwf68;}uM=)d1?2#9-wK-pcwy8i_SJD2VtgkKR`d(eAXlC?CgRZJCp+A zq1voe`7nkq6NQ{}P7+Lq-jPjU{=ZFPcfa5`pPp+JiUhgWq*1Tq z))U@0;r6(Q(M&WrEG{MHF{)blF>4Qc5orZJ#8#(Weu?{s2My8OL%<(NXmGl4T4Cpv zl!o-oEJs0~&LF8a31sB2IL_NH*tM)u+8TVj_yTalu+vF>roRDfJSr;cu_pwDiwO%M zE-`)V5D*wCYSd^|X*2HK@PR8T;0C^>GwNiU??TW~W$HN?X9cJjL`ebGUGPIEj zt}aHtZgnLK(`&D4x_c`e;Z!~gIA!`kb>?Ok1rne`LEV5w6&W#^?&>b(A33CNdcE<| z8F)R%p(u5EGR2O|f}mI$D{wULgV6OlPN?|D9Z7lVnAD}QH=zGZA<4}fYJx5h$F)W-J{(5x%(u_B(^Ru^A~NvB^68cF%(OpOvG{o z-q_w9=p3;#-#T+dNio$-e~ z4h|Hp8J+aaOh1}xcotc3QzlMwG4zxIi@5j%ZJ_jp@RjA`w0A44a2>pa2pq8Que;UD02`6u{kC@2R9y?;dWnpnU6Rj2O zYpfMbLEA&r)f>C1)qt(@2o}ZXM@iV7y?C%|Hds(eIO1H(BPnqG`I7gaQT0HhKxngg z(aHVQHR@m0NGH{ky^wPEU?rA#L8fS0h5%?p<_ z3+I61M1l?Se^W*P9d(Y$nM=jP~JxW(cCyk=9=$u)afc!j2bf1s*Lj)u14SMZzvYAH4~5s{#ULjd$z zYt`cL<=g+V%VsOyXNMFzj==uL1aGU*Jy)3GI0 z!^*?49VTQq4g8L!zPI^)l)Za2Wc#*q(S5`$g2^%?yCRQ)DgT+?!t!W$m;lv#jgyG& zL`7-(<6k!P0_POVAewR9uUDg;iP)qJ+)y{L9lNXGtw)=_yn+sPgnQL*pu+d#4ak$e z8h2nRWn?qkEBmfOfrkPO1|RbB3j(z)S7Ws^fL?m48W@iTC60a*06U5jr|+sxoC)~-hCLNyn&QM+QhVL!K1HKs}t|rvpX+GwVIO!E-imB{kCW*&S+HVnnn>dT7s+nN5Q25BQj= z8hK}=@g2YBnS0`#=A8fN*l#Y zkxK8jU`vUdize2+{^_d>1*P@j@XETMG@H)W#`)T#a@6MA`Q}awPkpIPBO2JelJy)t zh*PY|Yo|C3E_^hO6mc7t*JXW_?DY3^TKg zw)iYDLv9{nZbzilf+lX|eN53Z&g;gMm1We=&TiR6t;nH3vFmxv#iLTIY3&%8x3~zb zKJMuXnf0z_fP63=+t~k@pT{H!o7^otH+|O_wZ3_3TL!RmUdTG`c9P9Ut990)!3&3sDVEgXj7hewT^tkAw9&cQ z5&Do_zB)!&+hX?knVDyLTJd#Q{^7f#e%E9H`p1$ktbEuxM%6 z1KM-F2yzT@_8B`wy!8(fe!InF?)HptU*XfA;+Bc3n4Fy4eg0&I0Xb_PUGpoU+u1Tr zY-j*9fv!Mm5rFcJTC0ohF4pL@2fy*}yFYc=Twh)$$(MgeBZzc%cl|j7Oc8*&m^M?P zuPDQ6Tl)A~Vu@3BZ?uYJj@NG9(aSIJ0?>!8QLzIZaxt+y_19A_uk4HZpeP5QN>bG9 ztj5RZ`Yz?87dp7W%^{BOtyD(GSoHhb2HosK1BBR zZhL&HMa654Y&LM>E~smIvLv4Pc_~!5R=6%rlfrwu67Wu>q~+`SLE_+mijVSzh?Mwe z!#h^CY@S#l>HB3pevS6%Av@hMPFRafVpd+x!SU`0=c!i-*;W|pW`%z3&-V7d{I$Y{ zo~xwA#aN=kyvr4v!tDUziaUN>W~OqEy=U$j?^Zn0dN$*lEfip;mG62wVO)@x5;or4 zBka9aSQw6xl%Jfwfz~Wes!W;GC2^-ALBI1RUZ0;sLN2wX9OstcD(PvHf&DB2mGeJ^ za-lPKf8TH9q7V5u<*vO;d%ixny=#4%Wbi_;YA|Ax$M5JeBNas4gn66>c0atfO!wkE zKHVz91fh5M|KWPvSKjl`d42Lz4ld?D>I%?C@Pxp?bSvjNpJpu%!CQ~q5SKyY3Xt=3j6?PQ+E3ilY>`=}r|v+EOl=o4L%)wUU&D_`CZ*dccT7_mvO=dRXe zyMq}BZv@JICjd)IV`F3gd_M+|F>ur|eSHmZTSgYZG_k*Lb#QQ?j)%|6#x@O*60J^v zaSX_*Ft@V$_g|edH5*%DiNb?7Q9qbjl4o>b%mRfe3;3ptIj^Wn z_0g<6r3J#!2ic|Nqb)^=qz2vGNg{+pHmKmm!&u?bA7PwR54QQszsFdEt)Zcj*Rzs_^0-AG<%Bp@srqxfJl$;=E3-kJ#AVsya0O>d8=8Jsjio^zqvGL;D&x>R z6|FZ5B$h{r{J+-L*2l{MRD4oW6`Ox~$=a21e*we=+AanPrZD)L9+>a=_~eKx4vS`l zU*hOuet8_C+e$!PXVd)F)oC@0!Tr&Sev}=%w^UDXvad39+~=DKO-b zvZ^Ur>cyfo4m(Kxwg6b<_FWO8w-ho5L%+1#{o{GkY>X88N(fIxDx6&UWKNUH7v)1Mmx9m|!Ctue5}qg=T&N<_E3xS_dic5AFwwoQ z{8X2dFiDjvgWrsdcl8vFmn~8iG^?)j0|}HKjpb$yC55KNUFh8Ow1*#Gih12S?A!8P zbn68^$C?cD1M%U3r2={nalMj-`59tAMSddoznJd}T;XQPc=)Syg0|dGt`4aen=NX{ zzWb3=xjah4*TTscMGiQNAU&|Qu{d#oIk!(V0rEy?%UJL8G0p>uMNYC@85}}EME!9y zBEt!3kkYH$-wm-2r4rLU)2znKMT5Zv=ybh2^?b|3fnfZK%X%J2F1)A>F8-LtTajKCSGWAS)&_xe{F zdushV%7VJ}sO1Vj|IwR#CE@OXDB9CR_`u9l79%k#wrW|~eyp?Y8X6x`VRI*o*ur4f zScN5%{pM5mx5YL-=ljYu;AFaB6A>8b7HH!W{u?D(WJjZJ>#I(Nl&f4nGcc049NZf3 zd=#g&FnaJcjp{sIgDZj+#qIS|14iizfw}@IK@6B|;dU5}_Ueed(A#zpUY5#i&teUB zJvjA?%0+TLb}|F+0J#`mLJ2gETMF>kbF8=hg{O8u1qghxtYyN*$#8>3X>pJEjd_jP*1@0ypOqJhVr>sfk{y_``f_|IVhib)30`LO5sMb_}idl zDs020OsTtoR%UGkfu)c2ujrae>9zSP*nfhh85|KrIB1xnkA)sNm)X=Q@W(P zySqCSNoho+yQRCOyWu_Gcjos$Gwf`f^EuCR-`6$W-4ZPtii?4u$HV{)3{CX4cO_+X znXp0jc~~KDtu)FaXi>=ho)ZG!dQ84$Vse)oXH|?OKMXk+iepEvVaWo!)F{S)QQ6f3 zc#pU=s<7QzTcTsWNcTj;i2IAjT|VNM+JLSzIg;B`o<&L&4HiT<#h6kOfd%6mw`|05}zN?iY8A-_lr3Eb2h=_=_vT-_oi#u_RoC zy8Hfe?e3+)$|Q*rRb6aAYQ5s4{bVO6G^99=Yi1TcQQccSx3O57kLz5qxu@sehr~;V zSx3hw&JBKlCSP#qkz74}@}{M;0``pY>&qJ>zf|hBH;({~3D;1~r}d3JLGNGk#@fLp zaM~5omB`udqINou*s5%195~l`!Ce=^A!);< zrAL`mRcIl%?-?s+7U^9po{fw?+|$5vQ6ktP9@}S?Q_@STAYrk8h0{~M$S_47JRcd6 zSk3@b%n{a>v!6wOFEwXrPk#P%8J11Pb3fVfK5!X=rn;r(n%84r7|E1b7~k_2*1Erl z9ExXc85t5UY_wj)SV1Zfod}`(zTZ=xp2_E?v(V^sl0JLgAS-esL=8gMlYmlF_wF8S z#D8MTNtzrdz_&n}a-Vs0yKx;8)(L3z%6-~o4`SwRq6P=JG|U} zPr{Xi_MKUOWA|G%;OaRK3O^sTB1lcm$j&wMcFL6g*4^)RdVUL>7n+^6=*nUU;_~bg zSdwcl5hfr^vz%oyi2B%@{Tw2lm;9AEJG&oG<11o~77$y+aq8ody7RdmRIXj{>?#mj zzW3&@Nzhq=dfBJT+hkjM@)?NCF{ha*)!r3Y5)q@#&LAhH-<m_fJD&G6XaIOk zV^1*$EttQg2r3mPP==dnC%mb+R8{u})8Q0{X{t)_azii*`6$ocC-(G5sm_TJNuj?- zn!80VWOpTyq*B^1q*DM7( z^&OK>*^?(ovR0O!KQ%+gRTmad&n&mF4cM^5nSadiSvFL-wPur%!+_fkSZuDWn$$l@S)J@VSjMXMKh8NHYI8;7w1$Z-TL!K(3~-@2yKLq?m~~OEY2zm zSsgn}IJ2b4n#sV&I<@ZrIK>Ro!v_p1m_-J|? zi6{{Tq{1QWsbFM~q6`4kpF3GkBTg77FAYlM0b3_RzVg?_XJgsj2wkTPqJc8 z^HP_(xZ12Jm>{!ZV1e$J+mPgsE|J%~7yl2{E0X27RQSP(QtI^#+H!6(l0@1B2>4BN z7SAv5JVy!OQZ$(aMfeI**GK!~)troCsQi~M+(krRDjXNaLPA65bTrUbMy zGxBu6v9xg%BD+I7S-?Z654;iNQ*a+pJm41;G&eSm9L>S-48rt#Orof-Y48UdpBly$ zd{pRlN%&ePa`!|Yuy?ut;v-l#K7GwizSDRM* zVG)hzGeO#qHOVH7&>WspY-F4%8;Y9N3)CR}G)khW^N;hYv`mC)X9__b(uDmO4F6~= zYo+{5;*7x=OsV0807(k~8xbK&++gw6)+c&ehmDJLN=eU!hY5=h7cK~l)yU72uouh` z4bM#21oaSQQaEUAK^(I+S6yC&bIsuEsMVaipsh*#uK2XW~Yl^30x z8vFAp6j_y)K)A6YaSj7SRr7(?*Yk0&=j(63dxPgNz(3x#R+Pmqm z(J?E5h?3{`!cX`)4f&aB<%Us9b!)6FkNqP*fXwV+$5)W(t>Xq$0WYj<+R(clE_3MO zA8PEWkr|h6+Y6^NTGR+DGpzD2?69!3#`7L^nk&lm!mQMs@KX%>*MjgZ%un1YEg}45 zYf>usl|NB^K@LVcaF>_dbY*nqF^UO;_z|=UV+sXYhyloh`J7zbN+ro%5QJ7#M_ejd zP2Egj?@vBmo(Fuw?2@6^KlLs`&LIV9!+0Pk^grp-d;K81AnzZtnj=$GRFQbvZR3n_ zpP{I9B~e@hh0yPEN{2GZ@(3exp+~)1=?n$t%$~<|&S+eqv@bKjqTXYRbGC)?Yg}9f z)_Zb0+i5Zvl%ja;3RznL{7{8yK|;AP%I}QHhu@cUX=11L@{BAQA}M2Oa6zBoYmYpJ*F7yT(p{brQum4&O5s8X7IZUjL_(zOfC}Wie7cSs>-uSB?q&X-Muo{L0xPypO zoa*J~t|Fw{iaau!t@PWq*Wi^EA*XvX)O?0SaHMQugB{afIAgA=Mvtd;=XU9!b2$WM z>F*R2hT14dk7X_&ap&eDjGG@VW8zLl=-APiXY1y*(E3TIh+VK-#fy8I6T%WFRibgl z=b&oPbogMo=ov5!zXxn-yp8x?EL!znkz^ueNO2iouu6E&!8>EwaeKS-~iR+>WpueG@K!s1HfpB1e823Ten3F$i+|KXM;sc3KnM^@)|CA!) zv+(t_s+v^%xCKtpzurd3-T$%xEaRj=g~b*ywin%0Dz&Yc`8+eKPU9`NUgON!t!{5` zC!foO41S5Zma*1N&nrqEP2ga;;``mmB97}#iJhoPmyf#1K*=W5NG`k{=6A8@{j_x( z{^;|i1zk&CYEE>}JOL_O&$WFZ7AKotUJ%Cw5u`<;mj4FKHado%!<4ONNRvNEeff!+ zT9w4BrfU&yMuZ;9c*gm;eBuCe(j^L3FJ(Z=8QpaVUx(zDZA(K&la|^SdUkF&$?}s*zvMzR1@m&8K(}tJf!z7 zG%;Sci7JBh8)`?;;c|@P*~{GqG=@!4`4!myT$vQ3)}lt18h^o642iieLq}vy)2QZX zs~I_3W}00@pXRCup{iempx%3jh}R0rb<&wSdmKee^Q6%xBq}wG+3Uf9cy`z-26AaeVHhloiI%D7g=3 z98yS|&QN((7_YI`r|t}|O_BKaxo4nUc>GAC4^Ih!dg6#;GZC zerLKBT(yN6YR0b0%}9#*152(jKNyZ1rhCHjYJ9G%AbV6wAo(xNv-*fR;x6gYV*2{nMbOxQmed6kykMy#$MV$I(cIFv@LZPk~ z9LMHSapZYt)gtp7LH#VPzXA%fOkFWPsu5-4XpjZS z%I_n}&Wq>qnWL9Ui0}LRF=!rEFcX%<-e1eS99f7I>9YRE4?)tKwy!n$~aOqILu8P;Y1ol|$V?-q6 z2d4ZiSGP#dMNcRvJL2|uFwH93637|z=S$qLmByBdFGf;nAX3Bw0jteYI#`VibA(wo z9JU&Ak-z>{x>!?$`b|cTsno;McWE1F!l26h~4v8Zgvdv{FW=g!ls))cSseyp0t$r zsY2~;$KH>01F8nelwrv|CFc|plCRCDF$+wFn-Lb<$8i^1WGv0}zIzdRX?lImJAZkk z*xa+n{eVZ5;rK~#vpHNk7+WB>`Yh=5H9gLL#oX03#qUD-rK+6$0_-mVtfkg;z6jZWBsieX>i8&hllx;@ zfUk!F-Et-?nE)j0*AOMZeD=@u?Zy?dyqWROU=R({w+ht}^H0FHFp1_fLkWkBB2d}J zm4{NpwA<9cv4>83FRCxIc`uA@VP)rNsac{$y4cYHP#q_*RSG0EbLiUFPY*P3>5~TE#t)kz(-1->f5nR>3VhUa3*W<sb9V*pOT z&>ZN;gvW03W4o|`twc5rF=WVx5^6MjZxKl<9~SzsvgKbsS+9F}&ui!;??}4+-&qVy z8YNXNpc?p?Wqe~Zkaom+gU>xP*+V1_fCHoOFwgMvzVkmkkPx-T?jbcSjn2F`Nl%Y_ zv7gj3a8b3)48{H6pig=pHSm}gam^;cKGu3tw{S$rB#7S4N2oZy496zU62Vfz)aoes`v2x($aj$hk1LtwwIE{>wd7PPA;Tta@-}+ zS4Kx%{da1PM+4wzJH4I={YQ`Zv&;+(LXJmS6uJSC%f!M*%2;ssSiE_gl!r}r!~tXG zF;AwIVJ4ypo~mrZ#No9AS)2`(yq!x&MW!TO1=sY9nwkU^y57ICM_`*Bk4N=Y+TzO> zT(|kXu9b0*hL`B5v}#8H3#RY;T;*cTN(luA9C9gaUe2o!1sCn%^+ZUjV$|K^aO zgVR;6h4Z3dy4>lq6GqO+NdW7oASp8sVs}P8(GAGC| z{1gKSEv9884D&=t$??&>O^8SK&{0i<)})|&H-}_Qi^}(Hl^nG_Wcb!jTyV5Q%8`5pu>rT z{6mi5a)GI=3~|`px;vbbH@!Yp-(77WD)aoap;+B~c|fc-&@*-Pj2`?4?%riwEH{~O z6~~>HoSP0hHr!7f40rBVb4Of<`8f)KhX@CY*lxn%EX#X}eViNx3w`K?sZk z!!wG)rn!qteU0oqYuTPhw6^&$e;gVgAO_%VVvz-xQa7MSD4c4= z(;gLygtI{Bv5;Hbn@(3UM2%-4P=0l_Iz+##1x2ePH^qd?s_I=0OllOopM^0A*P$}sa_&Q0pE&OS$ zhLL>W;@}#*TLwo`r)TK*I3hAqLQ*YZQnE3>-y6H5+Uxp-ZIn@*O^yp&d}$o&nHQ{` zD_Gz!5VAb)di3iZ8baMNncKge;@?`oe>Rt@U+)% zvEINaeYLZ}=H@A*FqRCKYDT3lM4R;uu0KL0BtL!Bu$5^wUzske{}K;(X%lLam-n(= zy?L5KTaL@Hhjp1wYD~w5fCv5vx8&bp1Y(t#FzMb%DwIfS8T%T z-3DhD#D62OE!6qpc8l~*aDY~wiU~9bQw@qeGxMs?NGd((dvH!gxgVFbVYT-z?hJstg=g9M;+x@}X^ZRSh9H8OlaI(x#E;6Q*3`7_S z4E&zCo9tJOzIX&^Hs1LvG1mDtu*xW{ z_t?Tk8Yk2|u_WIbK*(`jg$nw%_ZhsLz9Qw3F{@E=n)sVO3J+ogLx#ZN z8=DJE`4h=*!Uu;YdkXVK&Yr62UHXYqG8_W^^}>?C0r`24RnsMkPn`0QMx8r3m0A{E z)uNA)P{oJ_*FOPq8CJ!d)#>zB(uw8W+BaPp^iec07zl-kBy)E?gmLt*zw|fd5BOjz zh7?NMcZy9;%kf4=mJhrn%1C1VL2im`w-KZwMZz4tN6TfMds)1 zQB6lj40a&U^>OQb)MIUTB4Biq_DPonn<96EVZ^j6JxnC<&|ovIUVp7Piu8fPeexjdr{+dXT3Q(z}+yN@!RhV?HIHZ_{%@$)*9^Ck-n)@7(Q?n z304BI-930c=Ywm+hD=*eJuG_=o(vo(#u5*-E`069^WIn8Wq8IqNi&4AE?GW#lTWH- zn?X>7E&@(axgVQ2)TBs347(p)kU}-kmQa(AGfb6XD|N_SOo6o|{>rn8!{YjlVnN3h zeF8dSk#~4@DFcES_QvCeQ9AADg_>RMexey;=?~S4WaL0HonTZHpFF-;=eS6{{OP5= zVKxA6b*VfM9X}D5&_WZ#rE79OTla=?Hg_lM9eo(5qm@@BMCZO>$h8Pg7R5*{8Xs`rUX z_(wvim0alsRuMMb5+}5O-Ms?nvEMujtv)_E+X?yhRAsq&T+e=PaoL~_F^&KOj6EWj zQFdx%g!RUx+c-3om9}Ewc(K&% z6Jr~gxaC;Uk}nlnKsi{~P6sSbd=Cj8p?IBhMV~|>)pMomBYTEu&u{!;A@C7Gu0M$$DFSAW@f@DYk?Yt~rmlr**BZo_A;QoPN#kKYmSqe%4#eL4=8S zu9@+XO`YEIJ8lwjadAa!V`z`Q_44vsZgEB`0o6}ChXrw$fc_krwDM?F^v&^7TsHaL zDz{&*?%ABWu#e!)AAscM%X?@pJj*{B>3GnxYM?MB9-X?*FFi-E1= zIJr3f=Q8@y{z6hE{Vpfkg7gr+3bS!WOH<$YCS9!Mmn;Nwzxt1C7Glb)$Znvw9+1RE zI0*jQ)my_-TxycZlW9a5NYp(s06<*8;uiLugGdxU1GCl!l*yv?WXS~ybn$)I=wa?1 zI6Hw-hM^;D%%Addw{D*4naMItt&CE3eWSdTdH7peM=t)UBu64|>BgIVNenchDv8yq z!iDd0H;P|73;QKgp>1sJ896Zi?L}OiY!ClJjn?MWrnaR8+R1C^$z=Y#fS8$k$$=C^ z{-)6uw;~=^kxV+p0tF#l$?$huIhtiqh7%!pI2CESGgdXM0V?T6>L0CBO~y^vH}AHf-8EUwy$OeH8w7=<~8*jhQry!X!nwLk|?aGbQI6 zV^o>2V;;x^-<6CU2N0uF;0}OVS0*=xi+&ugv5(S2#b;~7jW0~C%?+cGej|0BG<`b@ zW24@BjV;_iTXi$MiP<7ryTwxUCBDyxSmf-oz3G+1?|0mXd~A@R3GEQ3R){a{fv}7O z{WGyC=*3iV>k+-XYLocKg{Pn}TC=jakrXGqqx^Ce$2gBUdL82k!$<9*l zA|8F84ZOQ{0JlX-R5i>&7mh__qC}2^X!qxocL4jZuL^h>JNS3lAq97c@)wi`UT0I} zX1E`soKOOP7+EG3eM2K_;R{Q4I6V0*X(V1yIlXMpfexdS#299s`1hEtscULtot9&s z2d+oH;xzX_#b@~X^_DR?GTrKr%b;1SKFwbUPpHs|y$#3m>c+xPucM>e0hbu|*cvp< zjDZ0chv9n*?dbyE`JJS1OM+f6{+HFd=0@l6nPy4SI1FN?1J>%WVN%VEkOGw8)ItjM zf1K}AcE`_5ZPu=Q@|Z`77p=&sxT21)>2;s?g@#g#Tiwy88~R;GqE)cjNn#iXqWrh> zUe4(SJ+Hzq%hD38#(twq)1WUEs#W0zlUHeE&EoY#4^<(JUx{pNHZ_JognM0c$gS_5 zy5i*uqSweB4iA@fpRZJZ_VP8gAtR1(&A`x6VsfBQLMWm>&@_ke!D>W_N zCkalFsV1Ze0pLu%m!52uXVD1q+ssE@hW^6j6YYWx-Yu&(Rssb;CmI6|zplrX-93|*j5~gb=`j#$lt27LX)h;a5qo%#&6EPS;#jdr>|5QP zKMB4FwW(e)tl%v6y+<|ZxU~+wVcAUs6zfld(`YhXEPF(`d=%;H>6C^|KZB~_7J~>@ zSLx(Gd>9#3=X3oBZ*3h1EY@{1eN%q^>~BBsBlW)DaRqqo06+i?4Lp6E`En0;bKJBh zU6Jg(H+F7%EDYqufI0!-*BWo)2~YCZuSTLa-yI+WMBXFgstxD#|Hy>GwZB0^b!f_FU$UWoN3%SS`w4uL0=6R1p+&K zVCAwX)VjjDx=uUhnHX~}iV01`#*}7QD~7oYPKC2o`}|&MGjO>7*~I7j5ANl6H_P0` zWr;fnw#2U0T>-DL$t4G1C;+TQMW0<({a*j8zuXszJf!i(N@V&E;d*xH=O%++k6w3I zZh?@^?Wzx8(If`AfW#Px?bkV{XOEq)kAlr^ah>;Bof`wopf;~1HEXk>6zbQ5>KA1K z0)pnN<6##s+tyJQ0>U_l*BeDt1kxtWzBs&M6P&V0w>955tRMPClgGeb+(1ZwZ+VAm z7>#Qr#pWxiQ24ZNWf7=WZC(RsWoo}c#(Q~wV|7}{_wt4Nm)kw}k8GiC-4b-M0f(lD zY^Fj&G*fNqBM;<)4T51)@pTWX#)7!&%OEOVp!XT?&zxdu6`F)9?!s)f`5}f6pTQ`h zk7LS_Vcr9kHG;;ao023frRGAfJlQaF`}?3;Lh=3Y;be{0vY5`p0U@^RDPUe{PMd=EbhA$ymE+<_R6`rl$kLn$k66f@^E@< zwTDr>(F_IHusXM=^&K6%P1+43gk!}gV;VXY#;T020X1`M>#l2tH2@AVa_KpLYiUO?sy#o-K~H9 zc@rxuMJp$p>6kmlC?Z4?rx*vRES21Zs@qS)X(iENV@b><6fqZWjH>-i&BY0WH~MJ? zPY*Od^gFw=stwlXYm3MX^m-@2Mz~bsH8vShg{~1+D2r8Hnx*N(L8wX*zV@QH(tNQ= z241mJ$&#j}hQ;E-ZH_T9+Gjj-^g0Ei)79lAITe5x6o;w4RlrS{j;}W7<{&HyTJQwF8NF?B3@~WS`!2|2*qP zRt~UDd6N}m7q)th$eY)b-R=`N_al2JMU{)MH<|fja4Md8NHz)CAV9Td(ly3#Kgk@f zB13l6bid^32}cn3(WaL?DPc3Lu^T}qetHI4?s}w6ERM6-BF$xNlw%NcEcs92$xI=M6qjgbodf3f2NC ztWxRI_wmAyba<*s(TEbcrzei4p19rYe4bYfDj=Zg*X(`I*=u}0F~Uo7pFFId9O!q> z_F@e*Y%@!1o0|cjbQ#Rm+0vy7QAN_kK2E8u8;QbO^xNzo7EN%4G2ey9wa(|W!tmQQ zpFD=aGvhAcs=P#6(=-Q2*4~X@T0xdP67v@*ubi77-(C(j+HNwCmMOq9Dd}rwZY@Xt zSV9b9F!uAwxuz%8?es{Z@O?#kTFtWOX{6+0hPljur@% zqoQXNMiF(kbd|64A2(Et<@HpJZ|hR{2=Xc57D7IL9|Aif7ZbsN4IufD34~=W*rl~g z^CeM7?|r|Kr{}}jL`Oq|WQ(r!G|&ev4c|&PuOD1oG#Sh0?>;($JU)8y#dbe`!~)RP z_brUePAFxTQ-@9L3Q2+1cxXW@&zP@g)15ma&ubzUO~ggS>YQGP2g&R-dAkm26KE<> z3i)7DEn##;P6r5SN(mS`5QG$Wm-kxcH-0e$2k6LN-yzJEu2E2zj6FS3Kl|Qdd+UBv z2VO+m?WxKS4R+=v@yQYqB6fbE5FMt%EJQ2{kwV=nE|LdOq!fwHxT9X$YzBX1sbZ=8 zZmjG-E;?&#+vvi8Eh+b70&Q)HFWQ)w(-%Rcm2NYI*W-w#a zk6)*kkggS9P?ydaJznu&>X2D(%R1k+ws7D2Lp@yrDk3TC{8PtVt(qn#chL}#K^ z=g1tf4$p|}$NhN}Pjk(QH`8bf0WCIvHAcmg*9^P;7F06!*6VO5dA{r2?fT+J*;Mj@ z6ij`)sNT)=(GLlkp$X;;31wz&E5dC$ZIUFGa>mpusELs71c6jNQ7I0yGRf~(?fPV) zkSErl=kTt9t?}1uKbfEUV*At-BWO~f9!W>h3f=9lZZAR4C;$Hx=4NR!apVQ0i61_* z;)POSoh)zfb>86vO0Q`^5xaqO%Eiw;+TvUd{9bIyh1_L3)CyXf#z%DwoK3&R_N@vp zEsgVgJ)rwtmH9>MFijucRwydh)i{A%Vpj9VgJj~ggna{l-v+Sn!NrK(Yo!*-zq0~g zwFzm*2xYdl#rHHf2Cy)<8_5>UZttJ-*L_D2=Qz5?*2ekd-pzX3=JkE0v!9-#eY|)0 zGoQ~1+|C17d^`FtJ9_^+#DG#_f3O@Um}$q<&bRMGBSxd6+YKCu%@Uc z`<7Ihu6g$#Y01tpLs?|BdSRt>eCVGFx$sJ{E`KDqW3+QWoz<=P-?_gP%I-%(IwqCc zhNT)^6SS!XT*y8*ZNj&1OGhFLW^G)>Oe}wTBRxmJfGtx{EA&#LTvmLwL~ zO3?Zw4E3BWd4!12EwrR7LI0WvXe(xrQ$iC_DmbyKy(GTumqItg)?`zds0R8N{n0Ur z$B{Ia2pNAkIxRGOlB0%P2&BM(?;NPoMf7n{6>$aed5o0_BjHOpD)kjJ)dh{XUz)`; z!6WJ62$`0-<25|jWfV~fQ)3ZcapWpPTEl`;gfXMECBgLrxIgxNZzGzw>y|uFM3g0Z zAQSP;*7%lEZ@!g$yr(nYINBo_!+^Zt`zxftdcJXZc3hYy(uwA3Y>c2xInSK$U%jVG z!bVNspFeQK0y1fY#OR(q1>;kj)GrPWe4345Sw+~7=6Sn-hY@g!HlTruJ&hy!xiq4n zWP+S?Y;m~!d_gdNBGh$=Uh5hZSfa`{dltq>#h9n((^KUY$M5HuqDmO&{AGu1)I6wa zg++Rma?id^y|P50RKt*MzVPSD`Z+^i#>a>hIbEX-ON4CTN+fT2(m*8jcFpIRMb0iE z=i1i1Y;PgUdfKijAvX1LJ}29xJcc;W!}G&qpZIPs+Uh)@&Xi@4@+(H}K5XHV$P%@a{Hh6zGm{P780xaU&NpZR6jb zzkriRa|R8oZyHMOBM?zb)H}!d9}__`y(Epsntn1PNi>xoxQ2F9^%hF(?z)CB)MRLH1`QZ0*`h`@^IL`S zIdE8^0GYaXR>9aRUnWpI-VlkS?$ij=TRK7p5`KmxK`k<%>ZZ-36x7LQQJ$um&z8rA znP?S_6anBHrjANNY{Sj?(_@2Ri7F!b)8rG!yS5mr+t>F&Yjf;QEopN73azq}%WJ(; zT&Sr^olWD9_OF3o>xb_@v(m`cR0%o~Nu!9Z8!aM8zr-6n{Y!g#D)Sp2Oe)LB%H5y< z1hXCh_=1p4e|t5@TWf+M6j-juR*~)8KL|tty)VGv?DCOCDVtC1TRj?hUw};H*PnBM z?4va@nq>fEUi?pKl=rkvpDo}Td2nC_&;kAvLp9ki8#+5D@peA50NL^8m)ZA=Ipi88 z(uquVtG{|bcHU#?#PCE+I9As0JC58K4$M~nGIp%|9T8%6B4Qoii_&OCl^j5LHR%$< z=(?#^*fM>!m5lXcW%uEyjxOKVWD)nRkL{kjAiNY#qcZt5{yY*`B$gbc8tHz%qX$zy?D^ znW4wPMINlEq9vgJXhsQwy_2Wozc2yS)e9F+&KC)C^k4l^DK$6eIBFrgExACP-F!+A ztQFypFw<(kIUWYUb48Q+p9Um^A0HpXrm_H=4sJi2I3_SYNlzVf;OlW@c1ggcMIlFl zW~x-AIGe_ijH99FFkj$66*!OTf3}RpjQ?=Dd~ihvXHJzbuu=|g!prcYJiU$i>o4aM z$allxdh8aeCC8Wu!IFLpW}?9~cA=U)LahxvetrwItNnV9u0YkDC(e6fAe zVQIvNYYO3rzQG{vU*R}Zt#Y*(cmbg`WYOSWiux*5s)*@eSu@!Jl?lbd9*cSFBF+Fa zE#zr9y|V4aa`eg&XdweN`c~T15F32cAYT9rHc_ji`(FX~KBkmtJ&1`?RdP8*;tL{d z+A)eQ=S0}c3j-L}z*K=_8mL<^v#11Db}O0>MYfoFn)yfpW}Xz-D4j@fKlUvR<=CUa zINDZQ@X2!^C+pF2>t@?t{#^gXqmqv>o?a`qwJwIb&XfaHf}Gdnrj5!#q*RzdB7f8J%qp;@#XfVPWVlEiFl^{KuJ0 zN=nKWawebVLGDgJUh%P8?ND}GukBb`->z`BIXR*!emg}OjTcLnG2V0`%d~T`5wzf# z-K~~<`dF@JOhnLXx1C+{L;&0tw%3=9Q!1^_-F<@SU(ea@H>23@y4POc{d%sF zSBs=gWEjG@T|leX&i!@A!Wj6;w4G0qT(%$)BF>AENJ*!{7$G+(`OB4%q?}n|nmf=p z+-PxMT6le7!OC%OOz32}1<5LdJ;Kq3u-_GBOK|1wRuz-g$s1+P;DUlfbJoH{I6czt z;S!=Oqj%yWO)@%td~XXE(!pRW(rQxni^f_ed4=-Imz7mQ_=-o9O715y?+|*IQz zqGBFT9B4$gdD}!pNB(DW@+Z8SLZWPP{C;Sc<+_Qs$0lr!HmJ*gsp<6M^kwCBAkOc} zgzn!oGuwY%WoWJD_G*V0GaFl7TiYlQUl}z|`tbS3+0}t+YFb*0*Db4k`#B;I0<5TD z{L0hF@9dkh^8B74ZP(*hM|Uq;+PwP}@(L$0FhP%j)yfvSA*+cWgbvH92MssC{@cRQDz~JUA8403C?HMO5XYD) zAhA1q0t)F0T>Y{@Y=~K+ziyd~mwmvt(U(16gU#`3Uxlf}3YM}?a4eD4VMW3hn=+hT zhYD=<6L^2KGwU`5n=Rgd`iN=e(u&@ZEs<5q2n8icGltSS>05(|ZjhcX?0v_oUoWez z?6@5uNGu8AAP7q_C5ALCAyil;wSI;ZLY?7cp?q;gczbvC4e4qBr_`^@f1G#-7%Z_9 zQbX)x20UC--IAqp7pFz+B9iSkIDYp5xt*4D47B|cY7so-`E*e68`$&aj%lAgX(blZ zITB+}(DweuZ?$QM72M3yNzz!No5!oxcZ(~Sp{Zy}#di6OV#zT(#9QyOY|SO1(L*4u z?;Dz~f+G2oWX7790At>+u_lrrlm%teAJ!#>C*XFnyzy{74tVYEUc#H!Udkkj&aV&i z@cKEV_v;-@5z92UH@Y7M^_F^EqoSo-CLKLIGJsJ+h1w?IE0@4a1XLucsRYg52RfE! zS(M>?mqUz!l$6|;c?&`Pak7Pi2j={A&}0z`1&MA>7fHZ(LlvYH#eTNmv=oh~XQS7h zQ(h=9mRbst*2`QGwkFjfGJi{jxSts-Ze$5JR|8cWn(oJP2U2hbKG)o9p2ths0$!v&W^w%9XXTG6( z=Rgt^6ezY{p8Mfd0##K&Lo!xCaRFth|blar#Hy-B`iI50;`;zUNTOooSj ze6(ruS(FGc*QhN*jmV+C^0vxgf+p^^n=4xKlS>iys3b?t2aB5#SN$b0@HwcheF?s_ z(6_L%3Ypr*`9z$sM-|+|?t)EiP>CEtXB={F`#I@YXT|8oO$f zOgdmjd<1C2nWIkqULT1{$EGf*eb*f?cVl!%b``cf$mx~emuWKjf09%Yt=OKjIl+_u zudjhkEE7B8wDAW4nC*pTj*|;ZBEY-o@ zKB}5RWV?IRJQviUXIg1w9%u@x?^r9;uLh>3*)w!A6rGXHM48f*Qf;xzK}%Uf8`BCi(O7|GxYgY^d04|Z{zWzqq6ioNls z^1p}7tgKTfH$<3WJ&q#@2aG_NKWd8))W5gL9!p7MFV3&+n;Q8Jms=X8xrLom7WS*X zwiiH(e^`AyV=77z=aNTW0Yl#^Qa_^7BzPJ9O4!dsWad%m+axp)w#+0IT}#5IzdU;yzJBpml1B-Dw>$}=vh@~mD_G5pc>?*M z;SoZrC&)$tn{SjSpf%MBl;cD%peYe}I$HSpRz%hz2hMSZK0=l5n;B%Zq@!~~@2h*Cs6ZoKyY$6*?_9{7X)ir5)4a5G@LE3&EXU!3Q2>o6`9(nuoOxYb3QRte zF&8v<){j4TzF3dt3ijQuJzc6+4E`9jH2trXl9Hm_6>iwZgp% zSHLZMi=4OhO{QFVucFbsUVa-TvQ%l}6qZv#8ATTXu0Eg#{_mGJ{D@3alu|FN6;^a{ zU*GY3oolIW?0(S5`=mwml~|8gwk{bgzu~}`9+rSfz=g0RAoxfQDaMpEK2umIZWaUf!kAJt>+X`>|!af>T8xF+G+*(%O=cwBT{9l zW`JCA_RHAAEf6`Zh#B36E4gs^Q?pmFL?AAQ&KQxn+@ex*lrmO<Fz!{pV7!o&C3?b3*YcZ8RdvPUOS;3cXY_6RgDFm+jv1)|x#kl0+ZS zX(Z%w)ck+v&yt>>c;%h#5b`#=Z$RvITY3iZ`WZobFnmsu7|b;h<`4Fy=!h+bO&V?} zPyQ8yD2eRiCB$~1B3=RA@8eFs#<3YNVx2U>zi_!(#MWBDp9nlPM3p5XGXvNaH~EUz zh$dH0C+)tTg$YkFPzMM6h{UVgtLpy#Bh_(TY7nOZ4Z9sa1Ga0t?*0rdRC= zjXh}Q%X|x!OJ(9r!L~qMYRt&UrpCuz8t8!2Vj9@QmM{%Y5b*^rKNFvr(mr*zv)3^n zIt1L+IWX9_?hZHbDW0{H$*VE6?oSy*NG9!V@enyA?EN9|v*P$E3!06R)9{m&)DfTx zrvdZ;J3F6jlW?WgN-PeO!Nea_1`YEfOQy_bwq(%6}IO%j#wRDL7qh z9wv|AmSXy5PaWTu&s3^?Q5PJi!OPD=WE$S+4ALJPl*3+1{g4i4_&;1=vT{lZC~#6=WT}J82Gv-eeQHcs9G?A40$+n%N!gX!8cc)|9cG6)- zJGO1xwry+2?${mMwrwXJ+dBJs>wLdcm8$F{wbq*Ry2dDCl|?JJ4$0;J`@N1WW>=9a zlt}((9-dzYB{O&tjz@RrxS^8c^qD7!7)+6Pio9fx*!A;R9GlY8CZA+>3Yjk;KUL!VXgF;7pfW++HuzuJ4h)XZY`KPiCl7Dbw}a zN2y0|d_sv3B2*)^-IxiY>#G7UQN4JL{E?)wu=~kn>8xC%-8y1z(=6GaLE#T_Xx{be zAKw!_-#efM@yCY$J61Np5p3pubz|e;Vr@YJp}osZFH#oOstFf~h|dHR-vtF`4gi~- zo=N{B$3!GI)adLU#P6K^n=6c9!c{MmH7lVk$Nb4vXV9@`N()Eh0b_Q&i+NTww3+m8}h^Mv7j3K0fZ3VNTIasoWeIEfsmeKs-)+J04>21$1~ z`OJ0usp+O^ICA zNx+3`Sgedm0D2ZaR;f6d^8vbwK^R{Q&$qairW<@ev8lBQA zl+Fl~5DPtQNf@C?3@TC}47E^3z$vPws-0b9+xLq#Ur*fx(bqN(Lw4q$iy{lMBo&w- zrv5q`DLWipTI5*WygNeKysb}vifw}Np81xw#HT<4p2LZ&z* z+8V|cLe*5m*rctTuYfMl$o%U+(J)g?CKt(&@ii8y0K|5?f?uJF2t}#;&*9i5v7qzR z=C|$$Rq-Dz&!>MhX`rgk#&tj~HOAH^A+=LyUm}?}Xu}c-c9(nzwk%>h^L)k4o}BylAl=-;?yW3i|JVt{@zwO%1=9QGr;OmLL`kXoW!> zQ@%n)y@CK%*&Dkd-}*FUo0-FBNhvsVpb|hD#{y)Xu-(p_UjO9g>GV%Crjm06)#Rr2 zeNsR}_{&xJFv4wz0K0Ah{G!Nj1eE3IL4t;IMc=Hfmt zeX3ST6E2WQwQv}OH7y?J)h#doqVYcdXcX?Qg9fisB?cf0@(%aRfVMuGH;wF!xi@<4 z_9M*iBo*w{@m}O8@>pcxz)&Hj%RUpOGE7Oy0)b1NZ4yw~m=zZ#6hxLb7>zmpq9khB z;PK>{i99&b)Z~jiP*ZRWBZ|2@cmKeTEr701h9{tL4M}B$7GfOy?LrL*QDV9ij#`4z z^L+&CvcnQCx>)`tBPR!%We*63+nMKC9r28)Vb#e7gUVnn8=!Igs;_OmTtil&Ov9vR{2b-T!_>=Alvqz5J{q4V3EBkq~OItii z5vLjEW9dK1i2x)gSyDnp-G|qyjF@HJXO4f_l_4Ki+XuaNvBSReED(h` zYFz?Hh5EPIgP#x${qqcKB02sUPzk#b=!}pM6MaxYw+AEl=n=$X1X-a#08S(*-!Mav zPsI`LRg)eXOiY+x-^e;>Q2u`0JRLZWy#)9AlJvZ~wqCqoLuSl0mzbG?^gRGx3Y{S{ z`T)=PBpLcgDT@Lc?8%+fulb%rdIDscs%U7{FtuxztK)&_FIu~}zgUAzvP&5ac|2xF z8p4evGFpQKajIA4*H*U#+eP1k8J1*9NfDl!pEPxIPhKzRW}Y~3V#U%GrLqT$yn^OQ zpnn2II+>J+*s~`GPNoFUcmK-=k%R}B;kdqeIEw^@=pY8D4?yV-?RRdUrlx7F(jN`t z(1kHVX2`KV3NT4Wv=AGH=$`PIKZ_vyYQs4$6zH(4=qBp`{LL4b&pm}9DmW@aLr^%vYXL^pwVs=d#3 zZI$LhqRFoWbTse;aKV88=Kf_nt5288z04zaua?4YkzYD5R9dU5yDqKmY+w8BoV@Y| zGmDax$p*3jg`FD$uDbMo*G^t`Y1jGXX2^H^Eo?kGT?J2uD;`e0#50tZ+;_OQ(os$@w{ zxLNljjw6Lz)q?AuSk+G~rzefjEb@3lqLhHG^5$L{Z+oN%q~?cby*}=QY>wF%NXEH@ zf5BU#(-%p;dVgn27eDxp{cA%+_fCV3do9o!Y2>JbM-b)f~9 zrI5FkFo}~XrM0ntt!}OTsluEWkaOj) z-VvVuH<$nIiU08NF(qS{M=t1)Po6XJ51^A=)6hSb*7phR`8w}0vnv@{JDJ8Oclbq9 zTT-$%3h=wIKrZqCxLrUmFUN?n!NJ{wE&wqs=5n{o+WO`ube7Aej>f(5-%sy8C-3~d zBSDQh^H=P%mcth5KRF#sR)0NdXtCH_5ejoC>2bM-<(U!Hp2A)5*)Cw8)t78dVym-R z&0}9=fmLJ3S@N|z$Ak2KK5r8TJ_pwJcSDSwLaD_uPfrSMBuXffMK@-@@sYm-01qy{ zIF>Nf!zGaB5k{h9($wd$G$d2#v8?@=vsR@dTgjWttSV7BSlD}!$tA-FFth?xEQE}9 z&ewgY{2%`qKDU^?y&)x&#Fj&Y^Y$F-=<&u_%MmcUsV@-7u+#1R|b_K~INyxO z!?E%tI#aL4)i@}V9a_Fh$m@JY$@B5bSkd5sH+1i@$fNvpGm) z?1KO|+XvM{ZMfQD*GWy8{{TkWX&}a>)AyWkDv>^%oVYQi1#5UIsT^1)eIj!Sw3S|- zgv(|T37OX%WLK-nzc4z!?m@TD0KqQ79IVYQf28~+d(*#spYWd7mXuRBKC+qJdQj$N zj}Y5Z`+tj>DEf;Q+xDr5?454MVfB5E0Q&EDaCG>86XzA*Vb#&04QmNIV&gne=ba1O=fB7`lhj(mqXx*Oyu?W<%0tMdsBNbl?9=w1C^_zbuux6kPStcy z-m;t|IJ(a>NhKu3%>|_dG}E(qEnKeRAkjwc zuUVv9n9=aKNhIa1i<}qHq-AiapuYL+*jI6`^1J?QobOg0e8S~9yzlwyy&Z~v-Nk<) zI6FIoB+@A722*HX4a1O1_%=-MG_$U{VKd5Z{Z|bn#QkfLRa%K9FshnpYavwU=OB+@ z-qzL+?JRF-)EnGuaG~I+pyHxt%y77&G;|NkTLzsfYfj6?MOOnJ(I~oDhvwl-t{YAj zA#`((AHSmntd0!F!Z&yfd&kl(NOfDz#ikOIdN}W*GQteyl#?DWW8xci; zQ74gw5VUnc$lelc{T-PV=Xy?v2j3vr5BH>mfIPtbB|iYIAGr=#&(;?zd2mmoNSg z-i27m^Yilu_0&~c)d$`FocH+jar1wOyxgD6pYP}B@gtz-wk#k!a~`{b>&DUT335|I zFN1Xooy&GVXGB|^3~{+I3U?2|RrfdkMScpItnohUe({R_E=X2%FqTAtih}lQYUgR4&GVY-`u^pNAajb6BiI@IPI*W#AdZFl|M@QX0l@Sw+&D0At3R zB}_7+!UcwI&H<=FtD)6@&zcoC*>r6D4YH%ddog85 zes@PHtQHGpWKb)=!l6}ldR76f+9+8@v4S)*ix@&waqnhO%V07+G}O~5$KmD0ahW3x z=Wh+vPzqKyr*l+B22DL3$d(TJ!vjT!cmmGURYP$u|Bwl?SngH*VOP)&o<*UW$rc+F zjJ*H%M4EMO?E@nDGX1-*YsR6I(RL@CwQ2Npx@V9iGj?;!J<0RW&EVKE@$w4$x)OWo z(vH4~b5#Akx?wuIQ^??Cwr;DVsFX&A8;gFP=N&T7=Z?9i=Zj0<<3M_HiqW9c957B3g<4Lw z598pwQ_%74iWr4{p$uynx=5pB{;w=B&X|y%UKvOFl1I-H5yZzIUx$oWPm9#TX<*U4 z>$08B^F*-`<=Zs%w8lzmZtY+*uq`#~;5XBNbt<%M?D(e=)CkZ-k(RWD_XH)|1hXw% zfV(n6nCAa96mce8D#crPXU@)OKXd4HY(Se4qt2sIGj-h zu%cy^Wwr=T+@gdVeDzS9N5@^F=FAye$Om%2z4loU)D&PZV(J`nEJHwHP#ZY3ex42!SlDbDXMn- z8Yf3-a(5uL%&tdED6-&KVtkm2YG`U6L?y*L#Je*4lKEOc18WtP`E@t0E?FH|6zzrS z-i}9dR00=dIkTKX>Ot_jjsH!@4*31{f`jq+rEORi(wb)XgoinTy%dnzs3Jpg1<@R# zDOQ22q(WK+6$K{JfozYk>2 zvCMQb*`xN%U9d5ooFOb&IcLI#2Tj)z%5YG?cAwT9l%jsRMye@b3#+RA15hY2Ki2MU zcXe!by5uukak{%FaZswDZa0Z{oVT_~zlXVlm}Zs;bgJ$8%(w zzE2!zpp;koH;eA?U+~f(<(TNq?kOB>i<#;A<(>TLU+ZpZk5d?7LJr3dj*GL3NMSCe z$Jlt1O?3lnC%MM1?w=fC7D7@+1SGjeQCA#$&zg%;p~$lp6--Ia#dOkP1ABo{9v%FY zR_v!8QSo-0hX>s5YgJOT#gSg&)WZ~!QDf04yXl!{Ocld)H9W@`Z6|=|;pmH}7MfvW z(j%OBcTGKgGxKEUw+BnaCJOO5{H)by_`%zPjucMz@&do{I9j8a)8oer$;5L zJk9@%U+6Q5wDZMxGM#gw^DO9h$g?cjM^W8RA0DWx)8DR+(HdzzU6m9@r{M0AsT$z^WA?hPRYS zdO5XkBya4NYu6H+%sf@jkkW##8j2AIh#CbZYqgs*jLUO~1Xs-N5%nii{fP12UemBp*&;4@XaL^GIQRG@yb7z_+bq$Fl zV~zV7hCS#aXl7UE^f?4y0D0*7oPzjY5BNp4~yunoCNBgx^3~@3_Esa&(IX# zRb0irh|ZvKgP39KvQ9%ATB*u4d~CaIy`$wzad?v;AWp2^PkPjtx|sW}F#=*}kH&Zb zC^-IYl47bza81&&`iF9Fci%sL%2K4@{mfSq|(${F=lk4bn3oV_=e<-+JN>@mRLDUxf5F&={AQ#+2i8wIPKS6W zE6kJ$bkzinFKb!dYqBi9dF>xFOBfo$cdPSd5Mb$Ml3e9{;%kaCpMPitgDY zE7CJALndKQnNtSZaIpd@3aZhj@oDG8rJBRFb=rCcax;QFWKys$5Fn{BjH`Sp!OmK` zs+2VL61Ky(gPv8ENs>j%(XGV*y)@F75R&M|F(+LU(mLHOQ!U+&*-7GNoa`F~7!)Fj zgLuN4@zm$M4`VEiCF_%{nJ(d&gm$$bU#5h17qvRaJ{B#Wthma9w#haNqYydd#Tm&q znBLTh5cvhaW~Csme&w!%lPLB#P{Z(UozD|tRM}r8Gt_5Tzo^7JyYdqR0E=Y?dC1(v2X2r10? zP)Ai!tU}_u6nX-d^lD4gC?qN&E~whEis-DQ!pSN&JZ&K75ZXH2`D6}{d;>=~b65d> zVJMl@h9TL#A<#^=RtoA|XspfI9EnZ?baOl$!s5qD#wtYN=H>=@vp{GjThQuaXzqY2 zJu~BI6}0szwk*LJ=KQPMGvxmLYWsDxr9VpqDQ0PlT0cyu-Qim#kzg9=-uI?=WNfAE zWZ@Q<;~1zSTa+sp!Aq;Ilqrk4^=B(Hf9a~ep+OXX1OzA@KES6Si|Pb%pAw6r`V8XT zcYM>H{k~ZKw|Rf|*^91m0O%Un+Q#mHBsz<(Q`2$^wJKPvlbVZY*`VTTEs1F|7ik0@8j}X&~-7PzDy`@v(y9lhb>Ua)z^294NbJX z>>>FD7=Wd5#IagBUksw)PBCCH=$W?TIe%?hhSan!(h{zCqK)qNP8`z1@E*?VozsAr8*lPkMF=_}?O@(CRaoUk&3=n#v zF;g}bEA3@0-hVut|2yRC30m3H439;{6xwxONC{~KKr#kIr-$gL^f>vcEO`V#A&L2U zGRI6#Ey3D0iUWw8RO;j%gj%8fyZMIU{}q~D<9lhH&Eu9#Crf>YGB1oumEK--cWj{0 zuye8AlO8)_Y(z6B70l6-`a*}I$LHM3Z=1EnIQ&G_{oY6YE|vEQceOu{`rkn3p9*-# z)$(pq)TirTb|FvX zWQ=7cvnh4j+>+qZ>>VD*D77ic3M5lqBw|HVGL_2+4v=A}a1 zN5|GUR`HB!MJwlqmxAbQ^BawM@R2RkbFP&zFo-_yc(1nGX3lGR`qrEo=P#SEZI1wW z{hWt<=SqPIh}Q_qDoMn|;b=jpYr>1mwas-HVF=R>$E%i*!F;mX4cc09guF8Bys>yl zvwDe5LG#6Q_r1){VW1Y@|8{7Zd7|PdaQ6%FZebty8~g`-jQnOVr>b!_s$zhHRBG1#BJsKNFKgO^Cw;v}owBm&sAXtnf>LRCn zE?r^~3g`|@7N;zi%QFRHa(G^~oiI_hV(tS<=%Rl;GC>9Ckdv!?5#n3ia|9h$5v$m&}yQgu*(!8ptSI98pp}xSi%?WUS#)Beb5u(6N zj11m8`ttHxpKhtyY+nA2iwIh#LcK3^3y=RA^G;*9jTV3QNI)uU!0cY@Jx*Pu)^Z(d zy;#V+QcTZG>5`r9e!~ZS8b`MS-ka@B=-sI`k)%_TF5!ixGjkF~D!44Tc6(chnq(wu zuq45<-pN)P!2Npr=;Geognp5n|dPXnM)&3RaEPQ6Z zoW)GiTfb&Y3ggbM-v)yTJsVemKR1uk9Hdt|_4EV@Vh?4P&&WRk{#UIF#{?5I1XYo( z5vK9n+*=0x&J3N6PI9lFs3(}6ofmlgpIB8@iA~8uR%BZnrp%oCs}O9S)PN`>jt)aI zPt$T#@H)%O%P%$GukW4rSMP(8a4u4+DH{26v?XiP*eR)o{%K*5%7~}&?ljRT8N5SN}k3h3_t%FJP>cVJ!9 zHQw`frq1bn2-t>HH(Y%e{v^#6Vir^gc&ig0OJ3K&OmizIOomo!W)CNpI_|JF+SA;i zr4|X5AQL%?>@1)~7t@f^Z^%lcv%9Qowx&6Q$H^(k2;nWKMQEZ13nDQpa6ku?Qo4pA zT<0W7TqDotHv(!$uCEQ>g@Qldfb#)BY8vD@a%i~_*K~D^E$~jdI-%O`hk)v@fY789 zP8XGYAf#%Ke8U=i+{_rU0TXrt`Pg6_VWEnM?kfx}Q*LW>5VfIwLZOjp;hK=;#9i>a z&ihihj@R|ib*}x7djckmgDw1O3N6VfC-C-x#eSa8uB8C-0Wu#8yY}(0ld1EB0bo-e z=Rhb@pDHGtYA?(mFuPt9Fv3KIR(yJ;aYyKHmES^T;4FP+r*sFU{GNG$Ih`)Alr(+6 zMElN1*8=KY;JB3t)g`cmCfa(!WD2_m9B(2Ep2^0(rY^ThSidk46nC!@r2=-{Qf}Z? zR@q2oGeaXOu8WK_MYt{!gL?%b!?DHlV~^su>K@uRKY-pETtvCuw7BR^x2VhVZIIT4)<-J^D13y&th=H1*QDUK@M3OzLmPssl zC(pmY3#9BOHK^zM*(%u^2KcU)X7{#-Iq}Zt`@H+zTQsgM!kltKZ9LBV4B2v}>Yik9xPSP1xgdrAxq7GCx zn78C45wCLcWf(Dx(RR_zh=g&4cSQ#-+A`}Ai<>N*v$R~Tfp9MMrc8O<@55rPBC6}Z|OUKK+c zR-`$BmA7ucTLpq(V{Kx5#W<_J-g~_6{i!Q~0ARY&sDU?HHpM)OV|HM~trBV}0+5wt znJ~{@*_OZGX1lnGcN%jPFfb&$><(E~Q+*f9(bIdP$0x4!t3cu)RD1*_v^)YBLRu41 z2!DPi2@sijC-ND5C-U#-_x;vS=k)@1#H%ZEnOQn!9E`}i{Ev_jD{?G`u@S$uczRek%%YRzF#au*3j45UUzJ zaeh=%7z=A%O`=vTY4_GFLN#+Uj?lq_FiJ4qCl0)II5 zkh0VTGPu_>7M(^3V8q>f$ycJ)Bd>BfYuOZ`wGbm3#*wR5DO)70%r1?(oT`rf0EN%z zk}hQdY{ghDZtB$@+qnLK`@Y%oC$=j|E;znxk{;wLT*(w7J(ZDHJO&+2o}u3l{yIng z-yQC+bBy-&x^A^&Fe(R3V&d@UKep~*4iqH~S!pp>y^@SNBj*X~pJ=3*ks^htLmQ1N z<_Iz!;k$!T!YW|@Gd`hEwH1b~M=z5&xLL$30FXuDp{MNKEmeZr^A`tQ$xD=J?Sn69ej+=CUSyu0n>DZvKX7_yVdTx8ZLD`0rv9&a_ zO{RN!_J2H~qnl*HMbg~ZEU99X#-rGI?R($s@QyZQHoKaIkHDqJS7j!TMzujn)&vV= z$puJC0I|`bO&u4hlYoO$fBq|@r;UnOfNZYl^E5$+V$XMrxk#_>LWt^=FM+5g-&c5M z%97Up_z>^e_5MEU@Oev;FK35arzELHpGGG~B_(#s)erz16cCoo97m;@ilg_`IgUwz zWSk`x$c$aVhSHctOm2YwgUK{}H)i{Cb4)ui@PoA4(j=_SPKX0oRxms$JKu=&XO~Ox z9Q>MM$}HThQuLHOvO+SlJho5?qlE}@^b-GPMv~X8qCy@mO@vWwj?AMgx*-I)=Ff7n zs%HSXsOjn^2&>s3uh@aSPlhffP9kGE-x%CG5m`J)OO)$+KoeSONpZ4*aa7t-rSBo~ zeMUQ=opqtBZTfzP+mXhx+TA)lonv}-lpU*mZlj}V_?%=qS_~lIs`}KlVPO9y!@M& zjk$8X?4#8G7`}Esc|w@Z1q=^pbF{j@BkGkT%NfarHnR0s_SW6x8z5-$V&sy*Nfyka zf^J%^ewVOFgxkWBGaowfavhR}1r7o420i!7dmrZ6MXRtjRkfyaKw7EGRiD-%>C~0xF)bDlWr%m%^BHXC{p7jL+x(|_mI$p7 zAl?=?0&hmNvy0SGTAJZ=^2oD9CN`Jkm=+2B!AO@OYqxbNl`Ulv=gu+Z%Q2LNmt3Gc zNMU36+O_3-$?7pbAGQst`zIId2`(Yj8jJ*6ra~q1n-s{b3Q3USh2RO~c@T8$Xqtp54zBgaoi*e%a$Or#!9RN*?z#^0Bjn(B2A=f z<<5jMYSLJ;0@i{I7aZ@I>M3FPD#1nA#=&xEdwN`X?nsM4*lPr`B;_|S{l!5`{A^BG zRtUe=@v8x8I{oher$^k1izFJsD%6{~qR9MNsoi1`qr~Z5ozNCzT*Wc<9e{k16D^t$ z7562fmPIE*XcN6Pkh*^nN6V^WkDdG1^Qe1jhNbxfmoha-i}=SVY9BIZ89ugAvIuf_LhoNU}Es>9WRkt>1nCDww%U8F!9wdQ_Ly z=u~)oS=ZnStYnA+ShTR0U=`akh6cRFR8op9gP!j3^k+62Rh-gt>Xsr=qp5l8*!mmo zf#USXBnd9dhyu9@sbTxZ(e$|RlZq(o3i)Z#;dFgnLmUf+ZA$)ITnu(8UE8mJV+>MO zPs7Gl&y8FJ?Xi?w

    g%S!NdK87r-dk-zBc6YG`W+uA=OzF$A#bk;V_TAn0Q3St5( zC^3;G~hXKU$JvO z-8SCtaY#v-;?ol=qZX85Qhjw8RcV>n+=S233pXB#cRqWdDLFP9(~|XKS!i9q1K~WK zuO=;l63S{2BXLAS)Z&}d>3mJSbtiJlyMV_J&FP*SFwvCz!WRGD>(6ZtPOk^hWJ4U_ zN{Yb9_R?XJ{>*ZvsbPnT>}sC#Dt4!a&`c zg7o?WEIT<6P8S23wh@*@Ug~_d5jljM#hkgMBo(aE7&Mq}@0?n~d$tq>3g$K1_st<&(U>yJ?WjN z&6_|GK^R(1vvy^tKbf;XScr+6Z9v66YOT!^afZOm?+N+d8Sa1Uz=eOac5W7C1oLH~ zv#?th0%Sv{>C~qNvO>7>%rWFsA20}Oq;cjrL&AQJx4*w9zTbX*Jz)v|t?H2}fEW5J zNY>W|&OB}TfV;@TJAaF*+BV_P`a?r2mQtBToH>?eF&|WOo zYvgfB)(sO;e^uXTkT7X zorP7fQr5_ku&wk;tSCzsqg~o7eW~cCDDBR!BI^>^sJ zkQR}3)YC{`P3xGZLC3I!%+AI|%p$3|LsnGkX7-ndE%(5=A{Hp4Jg3p50bA;1NyfSren?X#2V4 zb(cKO=aRgu^H_tPSHhlU01t{~ydfggv95#^7)o9uy0cQGe&0(o&JQn=`*Kjq+~bOo zaYiOpDE&d>*wixu8U>Alg&Td;p-s7R$pqlKw8gWD!|k*3iVP;>CYHEYjs1!UVN8Sz zN~k%|Vs`kMX^JA*X4rU4v5rL%$xzyb8#q{eUm^Z)ySjdUucX>Y>co-drCN*2idUCm zVx8y`6ik0h*i!OQ`@PT6vKh-|n9kTxVf18@+ewK>p`oM58#GvklR4)l(NVTVJQ9fuAh~2U*QZ_| zu2AFMU|~@aWoPOWhE*owk>i_3#W}Ax+h(3Qnmyc^_MP7dpW6{QARbrOwqy?4vrSD+{lt0uDk774myRkhaCgTl2C)Nw z{OPGf@yPFsyTU;nIP~=gyV9k8%R?l2c|_mYVOM;yWuzz9ES=EvAKm%b+PR$z?>Thu zesb;pI;wHF_@`LWKPOR$EQKomkJ^xRy!_XU$RDXpc5Fl`5FKEsi+h5O(RPjq9n>Jq zcK8NKeOHzYM8;APDCPf+pxRWQca)wgFBNK9^C zr5cXh4`jz09ZB^8wa=BipkzQfY6Fjc8k@o6tt?mZ*1cpNYGUsFWDlT^@CW^il)R0gf@Y!@+=+Gj1e z+<>xfS~;(4sGELzVxQ&&*}GRAQMSt2Pi2zG@bDUOakfO9CT9}xb4pkEhI%^h5#v*_ za4;bVVUPP#lx@x{P=jKs}v8x?fs3ludOy9e!E2 zWrq{?onzy7xOmpqRW%HERQ_-8lT-5f=tXOE-oYWUu>@Z=J+D2Q+FSdhHsLurd`MSY zCwMzAsHJlF#fj`|o9iTTq(E}mJ|U%o|7xfGcFh-UIKiK==?bgK*MC4`nN zx}x6>2qdQB_a0fE*Eg2OOU<_-j~}}RSsAR`eg7oN*X9t**yRvo?{{<$0vbXm!jdWy zcM871?vaM1--NqL9g%Au_hB35B$&WxX%!)>s0JqF8s;Xog7dFYPMV<77Y%AiuiFq% zcS8pM(AMrNIKKG)?ta?PgW7#7r3~r$;<;dfdtOOn?Hji!M(W(JNBp5&U*Hs%_jwu5 z>3c<2I>SHm@PV$zb@#jUCJYceW&(9UA6`;QeHYcVG$KKxsi%#&aBVhRXDqIv<>k|x z^0gVAS4ihv1YE=fRz+q9oIri%mH+%M=m-cS3+<(92!=^M7K^{bH8i-n-37LLR@9PDAzS}GnIYe|Z!M(@1v@_v@m z2M^K6q9R98JrmVGyuhR}>g^ZL^h|2+d>JQ8m7iz!S%`Gmk14&IlX!?2NG^pHWhiM) zOr5t##!D=_^GI3XI!<2uT_Rjycr*_4`#hKOXzCQY z(O!I-#!|jkCq3@GXy&Rh!i6Th2_TRc7cE)M*|6ilLqa_@F^zr42vVym9K?=bfEr=& zF{de+_b2)VEWGk{>c0u&Ba8`@$R>a?=G2$Lw5~vQYpZxHNRimtD2>ptOTOU65z?YS zSV4M(Wo#v?gcK82?E20Q86dgL%#@QA@6iEK&y0M}H+%fw9nnLK5py$15d{X~;QfK+ z<6Rx}Hx`{x2gpTbTDikMk#(3^dEVfjI1z{G{DTm0q%;j}{r#s)t{KKf;_WljG>jjC+9Q=g)N_Me!Xh*&Sm>&vx?Z#g zbF?AZlKL#0dgk7zd;^!JqwXkwc|216x~^9B$(ENTt`oMy1*&{2+rH>5*}!2JS0jrR z$8R{_o1&iy**w3O)l#t!*~Ho1IelJO7fR!Vicp%0d6$altl8Pwk+o(mTByfyX)s13 z*ZZ`y5qQjwz`Nw))$kWfq(Z(6fnds*hpwSH*}O7f|IX@2#>sr}t%{GttvB2JlHOac z72~8(arR)9ML4YnF4yL?SAzkbOoAKtJ;*UjT@Hgx_ib%c1QZ2(axw!N=;|N6Y~ z&E#?SwKcd1g9FWi|Om?*k5gOqDvJR104y(Egh1u2SDM!GzQ({!gzl2IOBTI@XbP|>MgTsZYVvo z4p>!Pr4S#!$e3$fvN61tnNd!7DJM36Cezx!m$4`}XTvs%I<@`8?(N-iVPp3{GUqW8 zV=V{vTt9m4ZZ4!5Q#wR2&c$E?xM(D+t(b;d2o55rjp!S;A|g5Ns_GY$fJ+Uh{q*dHT&@9Alk84Qj!5zn%vQ=5mn3_8kW_&1mE`ymnV7Y@}8HD`~` z5}Cfssdg$49YeX>)ps>btRG|c+;aEy4Po_!5I!rc*ypRs38(y>y=uj+QHy!*yX(UQB=^h2{uIJE(FDNQ%S&-qIum|z_z2`HLHv$_8Nd!C zC5YG5-}#edJ)Ofn0{T5pwY_Gv(?uAm0AIYhB+H_}l#}^n+qeHKrU@5T;v}|v6HH@^ z5(ptC2n#|E$NZ^s4r9acx>l*rW?PpaON2wSfK_ZFWFw^nu1TALipgeMot(YS>@+?Oikd}@ zNYgN5K+)Icx$)bDhYpedrYE~<6+a-2uvXMuN0x?2NkAIZnJ+i)=S7dwQN<7!7q>Yg za=Kg8RFlgd0@Rj}#-Ro=6;w!(V!Z7YI2MV*l8T2%QNxZ#WrI(6+kXL(c6`Hg9$jrx z=b*a^4YG?H>g`a2LCVu&Nm2ydC->z1|aHZIxQ;3Eqn zz6K@nBqCGwm>&OK>^89VaHod&4xv>o&CGwwQcMJG8-5!HPPPrCjMPJNp zf-sU4HuMrwr62t%4wIjiV3#N``PYoj)``%#jzOnLYn{Gn9^FIb(pXFkkmWRYz={WG zQ5&IU-#F)#FOi zMCk+sjP*FU)W0pv`-+mUx!xZn4R(}7mI$I26o)P9SA$r#=>H?9I!V$Gp<;`J5vGB^ z4j%DG)T|h3rM^4kQA)A~mPO7;n%hv0$B+1|28a7#jT#4eh;96L>B80R=?yFggZ@D% zmfo&AsL4SJjjHE)bl&;29`A8Bp9Fvh$y1LWId=9l%ySLh-P4q*Qr9*&550HZ39A9* z_LFrLwELluIbQt@6I8G5u$ns>h5ldYL^^AR=e4qo1Y||SGR*_UO)8>a5=PnYGKso1 zD`S<3EtclnPW!a>&Y5}ln}s0v^Y+Ku#x7Vt@$qE2GI{DQfjG=(_e6OkqjP<|oW<$wWe&zUf>7#ujQI z9ms}QBrrnKFGwL^Y5y#(B7n{@3PqFmaYnZNb*kO@xjZu_rf}?MjD_+tmE$6!gz_(P zsQ(oTv|XZSgAGLYQ?3G+IN>Q2hmMDJP?mf>z@$O?_A2$4AhSXhnb^FJX?tGx-Ttsh zs_F3wOw;Qe<(OV}WDh1KTg(&?w;&(`H%SqO#MPFZ!O1Rg3Q=b!mlR6Gao~%c1w=P> z2O<`lESD95K=rHz8<+39+$RZWR|raeR}DvVCxgLjX)lvEViA_YPrEb!9{{RBRlWkD zQEn1o=e$@_;t$3uEoo6>>z8*qyt2iU&p*Y57oK8nAz>iKWaKOci;M?{XbihMTU@<- z8Cw-3amY8m`c;mGW7gO2bJRXyZ*LEPGv`jRv^+(P$Lx@9$FuEv{a>!I?AXIqDR=`206HXdm&)S6*Ok?Jmzh z{{_DOl^6NSvtMHC|N1w4a&reIElNhO=~Gw$BJ!Oq4e zw{G0#Yv1@L&%f{j3#}T%QHq&46fD+Q#^a1cYOE1NDn=N=y&JcPPFUtnJl=OUthZU;*ygC+rO{lN@R@R=Mvba^c%XCqGoNy@t+W2R z7tXiqLf|G1#FVR5mgR)YHL(v*hN4=liQP=k*tWG=f-#oiu+N8|{EWl)2G4%!D?D-j zi^Q#Yvi^vwl+=<%Z-a5pzXmB$LVNU#jL=C;VMc^_k)!9!s+vm)+T8Z1DmLTupZj&eTy)fSuE9iIKd6TI-{OPoJ{l2+KH%rnX|MTL$? zd6bEmsO@AFp`;@)0b2XwGzk(Ct0{F!B}#9nbb{`5h#a~$wL^9N6$#DHQIT0xwRH1p^{R#N&2sE@T#Ji@XriN1cZ?fBdnZ7 zA&A0&SVd%cL3ekHQMb?T+Fj0czQ~0O7ZHRg=^N>}X3YG;Q>6LWpJ@neS>g<62~n)5 z#}Q$usW%(5W;sp0rAr8KYJ#eWpeQS3ZisbAt2T!#1#8#VxO({tN1I!W#~HRVG{P9+ zB!w%e%ydEefWbMtUykwIruNO*=P%^s8S5q~vt|-r70sHDIIf|T7X$SAb>8~4sf z3Qt~K;nnYamEU~zTP!cOIN0AM5SCWGiIM>-NH~4&0`v2WXsJ0kXmjQ2b#e+$uAHD= zHIN-cmSt3~Ld6kf&9Xl}LXHJX3yaih4PvPoq(h3bL=O6ltz(2@dsOhNtsSoI9nj88 zvUq`7Rn0j1)>^FacGv0mRaJRA=7fKjW|?P7PR_1N7cR`$r9ud*EMu5uGsb+qo{;E} zs5Z}0yUP!L_&N?tv)Sa#$yL7i#q+GLuF|U4sLC9wfNa4bmm%jd0@^Q-M{Vm>j z^JiG8Xw2<${^A!n?6kRkZG%&%R?&pqyK{r@eCL}y_0*G;WkG2QWKb|nJJi()RJ6dg z+Z|qi{qOkMPd}tTEHTnzst74#1e&rkRJKGKhmgiQ2tM!Zo$~RJUO~!nOpch~8h-uP zP;0h|G28F|lJ|Gk_-^}m`0C3q(75;{uCc&8mgdR|rmktt&C%OCq?R-pmSY+VO-!t* zHR`k$7YOzb>GVGSu||Am$@ZD$ zn{_BHa8}MRWBz)GiIiXZPA#U>dueKywbl}aYBod(;)o>j19yPYa7btEChem=PMtc% znR913ed;V>5;Gchu>B4)Y{GPzHL*L7(#$JRr6h=2*b2xkffC3vr7TmNvJ^PNpvfDb z9P!#)Z}E%wKVXnOfo^>PHLuCq9Yp^gI&322Cvffi$Z$X}8`4?pQkNB+S|n)Hh@u8M z2^-HV=Pr!O%|8|Qcqd* z5mtq?(~8d8E}Q@M-}B6+r}!to^;^91?6ZV%MVY5)D-qTZMGc55Dpw#IiZ8wLG|jrE z*B){5^fHS{$lk#&$$X2&lP9r3%>A7{SKhnKox5A4xhA)Qk`Swvci>I%P{O%mVNN`R zWO#JAalGH1ic^mN`Gb(-2iNEHc{=_6_;PQ$h?<_q$A5o1cps0)6xAjh!$Zd1Lr$H( zM5DQYb&fpsqJ%+ae7d!eL{W&42FOYKhwSWZ^2@*YJJ#;r!xSY^7@})U0y(Mdf55%~ z03ZNKL_t(91avx{Wu4R#@*?&56k$kN7_@SnJhe=(*I{RLFbTGcCM@vD|F^On9v)Fe zO}~V+0#j9l$}=w=pM5`%*B{3hF3#Cw11JBp4mG9mwNR)fLD(R-C3o)aaDVfF>$mRn z((}*q?XSJeQx`8{OvV1uAwogD7QrZ>+fEq_dklv;>A0XQGXkB^sLxSk>1<&>%~+TQ zL{0DWUpEf{kiz;}c_Mle&i8RlYSZ@NHjB-eR;|X~-Y(s4mxYBnkPa1Sa%~8j5h_qf zBM>S=CLsu)We`|_D=Liim=5QBk1Dl9SpU4z2&%%M4J_1}gqfkcd%(SJmorbjh>AnX zGKENk7Hl82`QZJJxN_wh8*4YIMj3K-5fw(1ZtM|UPLSt@IP!I~aSo+@jT?sA56zuN z{VL^iPptGw+e%A>G?SoB=X){{f-KOHpYDBAJ|KZ0p<`>8d!_&`x z8HC{U+4CG7bvSwI3}snz?#vlFoem2N3v@aiYPH&o(c;s(V>+D<0DF6TD5dCjJ=bnJ z*gZV-Ti(M%A6ygYXtEKr6N`uV%)o2*y%dwB?9>PH@UN%;Mi52>QG`>1v@Fm2O&sVYU0<5gnX19%1YbBCbE zfBk5&?H}p_A(dxNI}19%xRNK9G_O8?4yl|EXPO)uN(ILlVcw2AeJ`~3Y7u|KsL3WO zAkdOP;D^G2q@F~CqNEyk*|~p@DjoO~@zy+Xy+MUwXZL^~{_WrKJHPvnXf@}E!;r=K zc^1x|=F*c-Qf4{#*4KIJ=?mQ5Z1ep;d4vDwkAK1sU%$rIp+VQ@C~?e%8e3(QRZb8l z=&*)GQVENSHCiUPco7%QA#{w^F)B{T1>A7VkKX(_fBKWR_~_~_cJ>cZL5PYXN((|N9|j>M zuJTq9tu$c}5C)-#3k%_`-9<@WWE55DhiM}4Jl(+Y*|ZShC{;~(%~AsCFhzw)3wG~q^5eh$ zJO1+ff6nE1KcyNPYO+aSC6Nq?P{e3zS`$ctD|13T`$bxVvJT~hPpX`RPX!2!lk{-x zo1j_hpR(dP0wT2wS^|c}GQGg9C^9`ROY21UrsVJ^_Uav9iA05)^c4)V| zq*;bk%BQ?4>7m_!-#~PtMyaqU2g*XJpymW$X`W(Uwy@UBM#0V<50Z0)p`f`mkCFZm zS9q(7bq=95y3o{uI%J0J^$qrSwh&lq^#mPA(ouXEd@N5S@@a!BQac8WYl2|=UYAXJ(nO=%zOa{IQfj+Qg5NckfN+8?PRn5YYL*{ssUqtqB+8NPPK!o9Pp(tpJjQ;hh>#zIa63n zhd)u|i+3s2?A!_hO&A6<6>?tm7^ef;?E{|x9>p}5PY_0RiZnw{mUq^A&ZyQ3DLwN{ zC{VG$I)f?8$+lZTppjt>6@>(qe^#fmLe&$3W{s^6KjClw^}prnYi|+kbTEZMhXGD0 z(kw&a2rV?ikkufXrMl0;&D;Y;zH)vzesw(LhRtyVs0xg97!Ml#44d(ILskN)kRWJc zUC7bVi1p1Kwhj*2JL*x7BWm>~aS~BgDUOObiO@|x{=zbHkNBv@%F z^O7itXaqHO?r!tWkKf|jdzTp>_Q|?^5*1PpV(mr+m%GKMft?y7&8Xe7X`ot2a z&zwgEepwpULUgRTyK$F~uDnm0jafRm#Omq_c35H$a>7cX0!3}EhMkKjs*-W9Pd*q! zUZE<1D-2ay(G4^=_V)SZox8ldw#K!+1C9!V4Qm8p4XXTsBZUXowS$>@);G7F!>a?y z`SWLa>e2;_sYpkInH{^TO0q1Sgp&9M{b=uqbetlUqLwshwB~8fpCGBvQCNuz6+v9b z;FVEH5;H$HhYkXqH5lasi=1®&>_CCe)(IdSq7?M{c=S8wv0-~A1S{UgqtTjj}% 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

    ~>@^1MeU_%~kFtt$whPq2#l9hMQ8uM$ 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 z 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 )* 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

    (WeizCYpHpfVkJi_C0(PAcHzP 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

      A1V@dvp=pev>cb@IoO%w5-W(!%?lB z_*ND!xU1jq<9QxMnQ{L7IeOj2Szu6}mrcW2kmoLhx-9Bhz?r)?Jlcf-aI(@r9^Oi|IYWF1c!%*^2(D0jyljfbQwYwX^=%BwHCWce@&$@3`-y)MJi zn7T6T+qajE3l}MdV^(^74qvqoJY1Vi_2*MCb$yPQ(S8(6oI>rA3RKirXyA_se00000NkvXXu0mjf D9Oeu2 literal 0 HcmV?d00001 diff --git a/js/src/index.html b/js/src/index.html new file mode 100644 index 0000000000..4ca2e7c1a0 --- /dev/null +++ b/js/src/index.html @@ -0,0 +1,20 @@ + + + + + + + Parity + + + +
      + + + + + diff --git a/js/src/index.js b/js/src/index.js new file mode 100644 index 0000000000..f432251d07 --- /dev/null +++ b/js/src/index.js @@ -0,0 +1,91 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import 'babel-polyfill'; +import 'whatwg-fetch'; + +// redirect when not on 127.0.0.1:8180 +const host = `${window.location.hostname}:${window.location.port}`; +if (host === '127.0.0.1:8080' || host === 'localhost:8080') { + window.location = 'http://127.0.0.1:8180'; +} + +import es6Promise from 'es6-promise'; +es6Promise.polyfill(); + +import React from 'react'; +import ReactDOM from 'react-dom'; +import injectTapEventPlugin from 'react-tap-event-plugin'; +import { createHashHistory } from 'history'; +import { Redirect, Router, Route, useRouterHistory } from 'react-router'; + +import SecureApi from './secureApi'; +import ContractInstances from './contracts'; + +import { initStore } from './redux'; +import { ContextProvider, muiTheme } from './ui'; +import { Accounts, Account, Addresses, Address, Application, Contract, Contracts, Dapp, Dapps, Settings, SettingsBackground, SettingsViews, Signer, Status } from './views'; + +import './environment'; + +import '../assets/fonts/Roboto/font.css'; +import '../assets/fonts/RobotoMono/font.css'; +import styles from './reset.css'; +import './index.html'; + +injectTapEventPlugin(); + +const parityUrl = process.env.PARITY_URL || + ( + process.env.NODE_ENV === 'production' + ? window.location.host + : '127.0.0.1:8180' + ); + +const api = new SecureApi(`ws://${parityUrl}`); +ContractInstances.create(api); + +const store = initStore(api); +store.dispatch({ type: 'initAll', api }); + +const routerHistory = useRouterHistory(createHashHistory)({}); + +ReactDOM.render( + + + + + + + + + + + + + + + + + + + + + + + , + document.querySelector('#container') +); diff --git a/js/src/jsonrpc/README.md b/js/src/jsonrpc/README.md new file mode 100644 index 0000000000..8f16ec3ca7 --- /dev/null +++ b/js/src/jsonrpc/README.md @@ -0,0 +1,20 @@ +# jsonrpc + +JSON file of all ethereum's rpc methods supported by parity + +## interfaces + +[interfaces.md](release/interfaces.md) contains the auto-generated list of interfaces exposed, along with their relevant documentation + +## contributing + +0. Clone the repo +0. Branch +0. Add the missing interfaces only into `src/interfaces/*.js` +0. Parameters (array) & Returns take objects of type + - `{ type: [Array|Boolean|Object|String|...], desc: 'some description' }` + - Types are built-in JS types or those defined in `src/types.js` (e.g. `BlockNumber`, `Quantity`, etc.) + - If a formatter is required, add it as `format: 'string-type'` +0. Run the lint & tests, `npm run lint && npm run testOnce` +0. Generate via `npm run build` which outputs `index.js`, `index.json` & `interfaces.md` (Only required until Travis is fully in-place) +0. Check-in and make a PR diff --git a/js/src/jsonrpc/generator/build-json.js b/js/src/jsonrpc/generator/build-json.js new file mode 100644 index 0000000000..362df7bf5f --- /dev/null +++ b/js/src/jsonrpc/generator/build-json.js @@ -0,0 +1,67 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import fs from 'fs'; +import path from 'path'; + +import interfaces from '../'; + +const INDEX_JSON = path.join(__dirname, '../../release/index.json'); +const methods = []; + +function formatDescription (obj) { + const optional = obj.optional ? '(optional) ' : ''; + const defaults = obj.default ? `(default: ${obj.default}) ` : ''; + + return `${obj.type.name} - ${optional}${defaults}${obj.desc}`; +} + +function formatType (obj) { + if (obj.type === Object && obj.details) { + const formatted = {}; + + Object.keys(obj.details).sort().forEach((key) => { + formatted[key] = formatType(obj.details[key]); + }); + + return { + desc: formatDescription(obj), + details: formatted + }; + } else if (obj.type && obj.type.name) { + return formatDescription(obj); + } + + return obj; +} + +Object.keys(interfaces).sort().forEach((group) => { + Object.keys(interfaces[group]).sort().forEach((name) => { + const method = interfaces[group][name]; + const deprecated = method.deprecated ? ' (Deprecated and not supported, to be removed in a future version)' : ''; + + methods.push({ + name: `${group}_${name}`, + desc: `${method.desc}${deprecated}`, + params: method.params.map(formatType), + returns: formatType(method.returns), + inputFormatters: method.params.map((param) => param.format || null), + outputFormatter: method.returns.format || null + }); + }); +}); + +fs.writeFileSync(INDEX_JSON, JSON.stringify({ methods: methods }, null, 2), 'utf8'); diff --git a/js/src/jsonrpc/generator/build-markdown.js b/js/src/jsonrpc/generator/build-markdown.js new file mode 100644 index 0000000000..278138d545 --- /dev/null +++ b/js/src/jsonrpc/generator/build-markdown.js @@ -0,0 +1,69 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import fs from 'fs'; +import path from 'path'; + +import interfaces from '../'; + +const MARKDOWN = path.join(__dirname, '../../release/interfaces.md'); + +let preamble = '# interfaces\n'; +let markdown = ''; + +function formatDescription (obj, prefix = '', indent = '') { + const optional = obj.optional ? '(optional) ' : ''; + const defaults = obj.default ? `(default: ${obj.default}) ` : ''; + + return `${indent}- ${prefix}\`${obj.type.name}\` - ${optional}${defaults}${obj.desc}`; +} + +function formatType (obj) { + if (obj.type === Object && obj.details) { + const sub = Object.keys(obj.details).sort().map((key) => { + return formatDescription(obj.details[key], `\`${key}\`/`, ' '); + }).join('\n'); + + return `${formatDescription(obj)}\n${sub}`; + } else if (obj.type && obj.type.name) { + return formatDescription(obj); + } + + return obj; +} + +Object.keys(interfaces).sort().forEach((group) => { + let content = ''; + + preamble = `${preamble}\n- [${group}](#${group})`; + markdown = `${markdown}\n## ${group}\n`; + + Object.keys(interfaces[group]).sort().forEach((iname) => { + const method = interfaces[group][iname]; + const name = `${group}_${iname}`; + const deprecated = method.deprecated ? ' (Deprecated and not supported, to be removed in a future version)' : ''; + const desc = `${method.desc}${deprecated}`; + const params = method.params.map(formatType).join('\n'); + const returns = formatType(method.returns); + + markdown = `${markdown}\n- [${name}](#${name})`; + content = `${content}### ${name}\n\n${desc}\n\n#### parameters\n\n${params || 'none'}\n\n#### returns\n\n${returns || 'none'}\n\n`; + }); + + markdown = `${markdown}\n\n${content}`; +}); + +fs.writeFileSync(MARKDOWN, `${preamble}\n\n${markdown}`, 'utf8'); diff --git a/js/src/jsonrpc/index.js b/js/src/jsonrpc/index.js new file mode 100644 index 0000000000..18bd4302df --- /dev/null +++ b/js/src/jsonrpc/index.js @@ -0,0 +1,35 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import db from './interfaces/db'; +import eth from './interfaces/eth'; +import ethcore from './interfaces/ethcore'; +import net from './interfaces/net'; +import personal from './interfaces/personal'; +import shh from './interfaces/shh'; +import trace from './interfaces/trace'; +import web3 from './interfaces/web3'; + +export default { + db: db, + eth: eth, + ethcore: ethcore, + net: net, + personal: personal, + shh: shh, + trace: trace, + web3: web3 +}; diff --git a/js/src/jsonrpc/index.spec.js b/js/src/jsonrpc/index.spec.js new file mode 100644 index 0000000000..0f12474774 --- /dev/null +++ b/js/src/jsonrpc/index.spec.js @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import interfaces from './'; +import { Address, BlockNumber, Data, Hash, Integer, Quantity } from './types'; + +const flatlist = {}; + +function verifyType (obj) { + if (typeof obj !== 'string') { + expect(obj).to.satisfy(() => { + return obj.type === Array || + obj.type === Boolean || + obj.type === Object || + obj.type === String || + obj.type === Address || + obj.type === BlockNumber || + obj.type === Data || + obj.type === Hash || + obj.type === Integer || + obj.type === Quantity; + }); + } +} + +describe('jsonrpc/interfaces', () => { + Object.keys(interfaces).forEach((group) => { + describe(group, () => { + Object.keys(interfaces[group]).forEach((name) => { + const method = interfaces[group][name]; + + flatlist[`${group}_${name}`] = true; + + describe(name, () => { + it('has the correct interface', () => { + expect(method.desc).to.be.a('string'); + expect(method.params).to.be.an('array'); + expect(method.returns).to.satisfy((returns) => { + return typeof returns === 'string' || typeof returns === 'object'; + }); + + method.params.forEach(verifyType); + verifyType(method.returns); + }); + }); + }); + }); + }); +}); diff --git a/js/src/jsonrpc/interfaces/db.js b/js/src/jsonrpc/interfaces/db.js new file mode 100644 index 0000000000..ab4d35b34a --- /dev/null +++ b/js/src/jsonrpc/interfaces/db.js @@ -0,0 +1,103 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Data } from '../types'; + +export default { + getHex: { + desc: 'Returns binary data from the local database.', + params: [ + { + type: String, + desc: 'Database name' + }, + { + type: String, + desc: 'Key name' + } + ], + returns: { + type: Data, + desc: 'The previously stored data' + }, + deprecated: true + }, + + getString: { + desc: 'Returns string from the local database.', + params: [ + { + type: String, + desc: 'Database name' + }, + { + type: String, + desc: 'Key name' + } + ], + returns: { + type: String, + desc: 'The previously stored string' + }, + deprecated: true + }, + + putHex: { + desc: 'Stores binary data in the local database.', + params: [ + { + type: String, + desc: 'Database name' + }, + { + type: String, + desc: 'Key name' + }, + { + type: Data, + desc: 'The data to store' + } + ], + returns: { + type: Boolean, + desc: '`true` if the value was stored, otherwise `false`' + }, + deprecated: true + }, + + putString: { + desc: 'Stores a string in the local database.', + params: [ + { + type: String, + desc: 'Database name' + }, + { + type: String, + desc: 'Key name' + }, + { + type: String, + desc: 'The string to store' + } + ], + returns: { + type: Boolean, + desc: '`true` if the value was stored, otherwise `false`' + }, + deprecated: true + } +}; diff --git a/js/src/jsonrpc/interfaces/eth.js b/js/src/jsonrpc/interfaces/eth.js new file mode 100644 index 0000000000..b8bbcbd614 --- /dev/null +++ b/js/src/jsonrpc/interfaces/eth.js @@ -0,0 +1,1044 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Address, BlockNumber, Data, Hash, Quantity } from '../types'; + +export default { + accounts: { + desc: 'Returns a list of addresses owned by client.', + params: [], + returns: { + type: Array, + desc: '20 Bytes - addresses owned by the client' + } + }, + + blockNumber: { + desc: 'Returns the number of most recent block.', + params: [], + returns: { + type: Quantity, + desc: 'integer of the current block number the client is on' + } + }, + + call: { + desc: 'Executes a new message call immediately without creating a transaction on the block chain.', + params: [ + { + type: Object, + desc: 'The transaction call object', + format: 'inputCallFormatter', + details: { + from: { + type: Address, + desc: '20 Bytes - The address the transaction is send from', + optional: true + }, + to: { + type: Address, + desc: '20 Bytes - The address the transaction is directed to' + }, + gas: { + type: Quantity, + desc: 'Integer of the gas provided for the transaction execution. eth_call consumes zero gas, but this parameter may be needed by some executions', + optional: true + }, + gasPrice: { + type: Quantity, + desc: 'Integer of the gasPrice used for each paid gas', + optional: true + }, + value: { + type: Quantity, + desc: 'Integer of the value send with this transaction', + optional: true + }, + data: { + type: Data, + desc: 'Hash of the method signature and encoded parameters. For details see [Ethereum Contract ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)', + optional: true + } + } + }, + { + type: BlockNumber, + desc: 'integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`, see the [default block parameter](#the-default-block-parameter)', + format: 'inputDefaultBlockNumberFormatter' + } + ], + returns: { + type: Data, + desc: 'the return value of executed contract' + } + }, + + checkRequest: { + desc: 'Returns the transactionhash of the requestId (received from eth_postTransaction) if the request was confirmed', + params: [ + { + type: Quantity, + desc: 'The requestId to check for' + } + ], + returns: { + type: Hash, + desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available' + } + }, + + coinbase: { + desc: 'Returns the client coinbase address.', + params: [], + returns: { + type: Address, + desc: 'The current coinbase address' + } + }, + + compileSerpent: { + desc: 'Returns compiled serpent code.', + params: [ + { + type: String, + desc: 'The source code' + } + ], + returns: { + type: Data, + desc: 'The compiled source code' + } + }, + + compileSolidity: { + desc: 'Returns compiled solidity code.', + params: [ + { + type: String, + desc: 'The source code' + } + ], + returns: { + type: Data, + desc: 'The compiled source code' + } + }, + + compileLLL: { + desc: 'Returns compiled LLL code.', + params: [ + { + type: String, + desc: 'The source code' + } + ], + returns: { + type: Data, + desc: 'The compiled source code' + } + }, + + estimateGas: { + desc: 'Makes a call or transaction, which won\'t be added to the blockchain and returns the used gas, which can be used for estimating the used gas.', + params: [ + { + type: Object, + desc: 'see [eth_sendTransaction](#eth_sendTransaction)', + format: 'inputCallFormatter' + } + ], + returns: { + type: Quantity, + desc: 'The amount of gas used', + format: 'utils.toDecimal' + } + }, + + fetchQueuedTransactions: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + flush: { + desc: '?', + params: [], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + gasPrice: { + desc: 'Returns the current price per gas in wei.', + params: [], + returns: { + type: Quantity, + desc: 'integer of the current gas price in wei' + } + }, + + getBalance: { + desc: 'Returns the balance of the account of given address.', + params: [ + { + type: Address, + desc: '20 Bytes - address to check for balance', + format: 'inputAddressFormatter' + }, + { + type: BlockNumber, + desc: 'integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`, see the [default block parameter](#the-default-block-parameter)', + format: 'inputDefaultBlockNumberFormatter' + } + ], + returns: { + type: Quantity, + desc: 'integer of the current balance in wei', + format: 'outputBigNumberFormatter' + } + }, + + getBlockByHash: { + desc: 'Returns information about a block by hash.', + params: [ + { + type: Hash, + desc: 'Hash of a block' + }, + { + type: Boolean, + desc: 'If `true` it returns the full transaction objects, if `false` only the hashes of the transactions' + } + ], + returns: { + type: Object, + desc: 'A block object, or `null` when no block was found', + details: { + number: { + type: Quantity, + desc: 'The block number. `null` when its pending block' + }, + hash: { + type: Hash, + desc: '32 Bytes - hash of the block. `null` when its pending block' + }, + parentHash: { + type: Hash, + desc: '32 Bytes - hash of the parent block' + }, + nonce: { + type: Data, + desc: '8 Bytes - hash of the generated proof-of-work. `null` when its pending block' + }, + sha3Uncles: { + type: Data, + desc: '32 Bytes - SHA3 of the uncles data in the block' + }, + logsBloom: { + type: Data, + desc: '256 Bytes - the bloom filter for the logs of the block. `null` when its pending block' + }, + transactionsRoot: { + type: Data, + desc: '32 Bytes - the root of the transaction trie of the block' + }, + stateRoot: { + type: Data, + desc: '32 Bytes - the root of the final state trie of the block' + }, + receiptsRoot: { + type: Data, desc: '32 Bytes - the root of the receipts trie of the block' + }, + miner: { + type: Address, + desc: '20 Bytes - the address of the beneficiary to whom the mining rewards were given' + }, + difficulty: { + type: Quantity, + desc: 'integer of the difficulty for this block' + }, + totalDifficulty: { + type: Quantity, + desc: 'integer of the total difficulty of the chain until this block' + }, + extraData: { + type: Data, + desc: 'the \'extra data\' field of this block' + }, + size: { + type: Quantity, + desc: 'integer the size of this block in bytes' + }, + gasLimit: { + type: Quantity, + desc: 'the maximum gas allowed in this block' + }, + gasUsed: { + type: Quantity, + desc: 'the total used gas by all transactions in this block' + }, + timestamp: { + type: Quantity, + desc: 'the unix timestamp for when the block was collated' + }, + transactions: { + type: Array, + desc: 'Array of transaction objects, or 32 Bytes transaction hashes depending on the last given parameter' + }, + uncles: { + type: Array, + desc: 'Array of uncle hashes' + } + } + } + }, + + getBlockByNumber: { + desc: 'Returns information about a block by block number.', + params: [ + { + type: BlockNumber, + desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter)' + }, + { + type: Boolean, + desc: 'If `true` it returns the full transaction objects, if `false` only the hashes of the transactions' + } + ], + returns: 'See [eth_getBlockByHash](#eth_getblockbyhash)' + }, + + getBlockTransactionCountByHash: { + desc: 'Returns the number of transactions in a block from a block matching the given block hash.', + params: [ + { + type: Hash, + desc: '32 Bytes - hash of a block' + } + ], + returns: { + type: Quantity, + desc: 'integer of the number of transactions in this block' + } + }, + + getBlockTransactionCountByNumber: { + desc: 'Returns the number of transactions in a block from a block matching the given block number.', + params: [ + { + type: BlockNumber, + desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter)' + } + ], + returns: { + type: Quantity, + desc: 'integer of the number of transactions in this block' + } + }, + + getCode: { + desc: 'Returns code at a given address.', + params: [ + { + type: Address, + desc: '20 Bytes - address', + format: 'inputAddressFormatter' + }, + { + type: BlockNumber, + desc: 'integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`, see the [default block parameter](#the-default-block-parameter)', + format: 'inputDefaultBlockNumberFormatter' + } + ], + returns: { + type: Data, + desc: 'the code from the given address' + } + }, + + getCompilers: { + desc: 'Returns a list of available compilers in the client.', + params: [], + returns: { + type: Array, + desc: 'Array of available compilers' + } + }, + + getFilterChanges: { + desc: 'Polling method for a filter, which returns an array of logs which occurred since last poll.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: { + type: Array, + desc: 'Array of log objects, or an empty array if nothing has changed since last poll' + } + }, + + getFilterChangesEx: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + getFilterLogs: { + desc: 'Returns an array of all logs matching filter with given id.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: 'See [eth_getFilterChanges](#eth_getfilterchanges)' + }, + + getFilterLogsEx: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + getLogs: { + desc: 'Returns an array of all logs matching a given filter object.', + params: [ + { + type: Object, + desc: 'The filter object, see [eth_newFilter parameters](#eth_newfilter)' + } + ], + returns: 'See [eth_getFilterChanges](#eth_getfilterchanges)' + }, + + getLogsEx: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + getStorageAt: { + desc: 'Returns the value from a storage position at a given address.', + params: [ + { + type: Address, + desc: '20 Bytes - address of the storage' + }, + { + type: Quantity, + desc: 'integer of the position in the storage', + format: 'utils.toHex' + }, + { + type: BlockNumber, + desc: 'integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`, see the [default block parameter](#the-default-block-parameter)', + format: 'inputDefaultBlockNumberFormatter' + } + ], + returns: { + type: Data, + desc: 'the value at this storage position' + } + }, + + getTransactionByHash: { + desc: 'Returns the information about a transaction requested by transaction hash.', + params: [ + { + type: Hash, + desc: '32 Bytes - hash of a transaction' + } + ], + returns: { + type: Object, + desc: 'A transaction object, or `null` when no transaction was found:', + format: 'outputTransactionFormatter', + details: { + hash: { + type: Hash, + desc: '32 Bytes - hash of the transaction.' + }, + nonce: { + type: Quantity, + desc: 'the number of transactions made by the sender prior to this one.' + }, + blockHash: { + type: Hash, + desc: '32 Bytes - hash of the block where this transaction was in. `null` when its pending.' + }, + blockNumber: { + type: BlockNumber, + desc: 'block number where this transaction was in. `null` when its pending.' + }, + transactionIndex: { + type: Quantity, + desc: 'integer of the transactions index position in the block. `null` when its pending.' + }, + from: { + type: Address, + desc: '20 Bytes - address of the sender.' + }, + to: { + type: Address, + desc: '20 Bytes - address of the receiver. `null` when its a contract creation transaction.' + }, + value: { + type: Quantity, + desc: 'value transferred in Wei.' + }, + gasPrice: { + type: Quantity, + desc: 'gas price provided by the sender in Wei.' + }, + gas: { + type: Quantity, + desc: 'gas provided by the sender.' + }, + input: { + type: Data, + desc: 'the data send along with the transaction.' + } + } + } + }, + + getTransactionByBlockHashAndIndex: { + desc: 'Returns information about a transaction by block hash and transaction index position.', + params: [ + { + type: Hash, + desc: 'hash of a block' + }, + { + type: Quantity, + desc: 'integer of the transaction index position' + } + ], + returns: 'See [eth_getBlockByHash](#eth_gettransactionbyhash)' + }, + + getTransactionByBlockNumberAndIndex: { + desc: 'Returns information about a transaction by block number and transaction index position.', + params: [ + { + type: BlockNumber, + desc: 'a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter)' + }, + { + type: Quantity, + desc: 'The transaction index position' + } + ], + returns: 'See [eth_getBlockByHash](#eth_gettransactionbyhash)' + }, + + getTransactionCount: { + desc: 'Returns the number of transactions *sent* from an address.', + params: [ + { + type: Address, + desc: '20 Bytes - address' + }, + { + type: BlockNumber, + desc: 'integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`, see the [default block parameter](#the-default-block-parameter)', + format: 'inputDefaultBlockNumberFormatter' + } + ], + returns: { + type: Quantity, + desc: 'integer of the number of transactions send from this address', + format: 'utils.toDecimal' + } + }, + + getTransactionReceipt: { + desc: 'Returns the receipt of a transaction by transaction hash.\n**Note** That the receipt is not available for pending transactions.', + params: [ + { + type: Hash, + desc: 'hash of a transaction' + } + ], + returns: { + type: Object, + desc: 'A transaction receipt object, or `null` when no receipt was found:', + format: 'outputTransactionReceiptFormatter', + details: { + transactionHash: { + type: Hash, + desc: '32 Bytes - hash of the transaction.' + }, + transactionIndex: { + type: Quantity, + desc: 'integer of the transactions index position in the block.' + }, + blockHash: { + type: Hash, + desc: '32 Bytes - hash of the block where this transaction was in.' + }, + blockNumber: { + type: BlockNumber, + desc: 'block number where this transaction was in.' + }, + cumulativeGasUsed: { + type: Quantity, + desc: 'The total amount of gas used when this transaction was executed in the block.' + }, + gasUsed: { + type: Quantity, + desc: 'The amount of gas used by this specific transaction alone.' + }, + contractAddress: { + type: Address, + desc: '20 Bytes - The contract address created, if the transaction was a contract creation, otherwise `null`.' + }, + logs: { + type: Array, + desc: 'Array of log objects, which this transaction generated.' + } + } + } + }, + + getUncleByBlockHashAndIndex: { + desc: 'Returns information about a uncle of a block by hash and uncle index position.', + params: [ + { + type: Hash, + desc: 'Hash a block' + }, + { + type: Quantity, + desc: 'The uncle\'s index position' + } + ], + returns: 'See [eth_getBlockByHash](#eth_getblockbyhash)' + }, + + getUncleByBlockNumberAndIndex: { + desc: 'Returns information about a uncle of a block by number and uncle index position.', + params: [ + { + type: BlockNumber, + desc: 'a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter)' + }, + { + type: Quantity, + desc: 'The uncle\'s index position' + } + ], + returns: 'See [eth_getBlockByHash](#eth_getblockbyhash)' + }, + + getUncleCountByBlockHash: { + desc: 'Returns the number of uncles in a block from a block matching the given block hash.', + params: [ + { + type: Hash, + desc: '32 Bytes - hash of a block' + } + ], + returns: { + type: Quantity, + desc: 'integer of the number of uncles in this block' + } + }, + + getUncleCountByBlockNumber: { + desc: 'Returns the number of uncles in a block from a block matching the given block number.', + params: [ + { + type: BlockNumber, + desc: 'integer of a block number, or the string \'latest\', \'earliest\' or \'pending\', see the [default block parameter](#the-default-block-parameter)' + } + ], + returns: { + type: Quantity, + desc: 'integer of the number of uncles in this block' + } + }, + + getWork: { + desc: 'Returns the hash of the current block, the seedHash, and the boundary condition to be met (\'target\').', + params: [], + returns: { + type: Array, + desc: 'Array with the following properties:' + } + }, + + hashrate: { + desc: 'Returns the number of hashes per second that the node is mining with.', + params: [], + returns: { + type: Quantity, + desc: 'number of hashes per second' + } + }, + + inspectTransaction: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + mining: { + desc: 'Returns `true` if client is actively mining new blocks.', + params: [], + returns: { + type: Boolean, + desc: '`true` of the client is mining, otherwise `false`' + } + }, + + newBlockFilter: { + desc: 'Creates a filter in the node, to notify when a new block arrives.\nTo check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges).', + params: [], + returns: { + type: Quantity, + desc: 'A filter id' + } + }, + + newFilter: { + desc: 'Creates a filter object, based on filter options, to notify when the state changes (logs).\nTo check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges).', + params: [{ + type: Object, + desc: 'The filter options:', + details: { + fromBlock: { + type: BlockNumber, + desc: 'Integer block number, or `\'latest\'` for the last mined block or `\'pending\'`, `\'earliest\'` for not yet mined transactions.', + optional: true, + default: 'latest' + }, + toBlock: { + type: BlockNumber, + desc: 'Integer block number, or `\'latest\'` for the last mined block or `\'pending\'`, `\'earliest\'` for not yet mined transactions.', + optional: true, + default: 'latest' + }, + address: { + type: Address, + desc: '20 Bytes - Contract address or a list of addresses from which logs should originate.', + optional: true + }, + topics: { + type: Array, + desc: 'Array of 32 Bytes `DATA` topics. Topics are order-dependent. Each topic can also be an array of DATA with \'or\' options.', + optional: true + }, + limit: { + type: Number, + desc: 'The maximum number of entries to retrieve (latest first)', + optional: true + } + } + }], + returns: { + type: Quantity, + desc: 'The filter id' + } + }, + + newFilterEx: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + newPendingTransactionFilter: { + desc: 'Creates a filter in the node, to notify when new pending transactions arrive.\nTo check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges).', + params: [], + returns: { + type: Quantity, + desc: 'A filter id' + } + }, + + notePassword: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + pendingTransactions: { + desc: '?', + params: [], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + postTransaction: { + desc: 'Posts a transaction to the Signer.', + params: [ + { + type: Object, + desc: 'see [eth_sendTransaction](#eth_sendTransaction)', + format: 'inputCallFormatter' + } + ], + returns: { + type: Quantity, + desc: 'The id of the actual transaction', + format: 'utils.toDecimal' + } + }, + + protocolVersion: { + desc: 'Returns the current ethereum protocol version.', + params: [], + returns: { + type: String, + desc: 'The current ethereum protocol version' + } + }, + + register: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + sendRawTransaction: { + desc: 'Creates new message call transaction or a contract creation for signed transactions.', + params: [ + { + type: Data, + desc: 'The signed transaction data' + } + ], + returns: { + type: Hash, + desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available' + } + }, + + sendTransaction: { + desc: 'Creates new message call transaction or a contract creation, if the data field contains code.', + params: [ + { + type: Object, desc: 'The transaction object', + format: 'inputTransactionFormatter', + details: { + from: { + type: Address, + desc: '20 Bytes - The address the transaction is send from' + }, + to: { + type: Address, + desc: '20 Bytes - (optional when creating new contract) The address the transaction is directed to' + }, + gas: { + type: Quantity, + desc: 'Integer of the gas provided for the transaction execution. It will return unused gas.', + optional: true, + default: 90000 + }, + gasPrice: { + type: Quantity, + desc: 'Integer of the gasPrice used for each paid gas', + optional: true, + default: 'To-Be-Determined' + }, + value: { + type: Quantity, + desc: 'Integer of the value send with this transaction', + optional: true + }, + data: { + type: Data, + desc: 'The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. For details see [Ethereum Contract ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)' + }, + nonce: { + type: Quantity, + desc: 'Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce.', + optional: true + } + } + } + ], + returns: { + type: Hash, + desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available' + } + }, + + sign: { + desc: 'Signs data with a given address.\n**Note** the address to sign must be unlocked.', + params: [ + { + type: Address, + desc: '20 Bytes - address', + format: 'inputAddressFormatter' + }, + { + type: Data, + desc: 'Data to sign' + } + ], + returns: { + type: Data, + desc: 'Signed data' + } + }, + + signTransaction: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + submitWork: { + desc: 'Used for submitting a proof-of-work solution.', + params: [ + { + type: Data, + desc: '8 Bytes - The nonce found (64 bits)' + }, + { + type: Data, + desc: '32 Bytes - The header\'s pow-hash (256 bits)' + }, + { + type: Data, + desc: '32 Bytes - The mix digest (256 bits)' + } + ], + returns: { + type: Boolean, + desc: '`true` if the provided solution is valid, otherwise `false`' + } + }, + + submitHashrate: { + desc: 'Used for submitting mining hashrate.', + params: [ + { + type: Data, + desc: 'a hexadecimal string representation (32 bytes) of the hash rate' + }, + { + type: String, + desc: 'A random hexadecimal(32 bytes) ID identifying the client' + } + ], + returns: { + type: Boolean, + desc: '`true` if submitting went through succesfully and `false` otherwise' + } + }, + + syncing: { + desc: 'Returns an object with data about the sync status or `false`.', + params: [], + returns: { + type: Object, + desc: 'An object with sync status data or `FALSE`, when not syncing', + format: 'outputSyncingFormatter', + details: { + startingBlock: { + type: Quantity, + desc: 'The block at which the import started (will only be reset, after the sync reached his head)' + }, + currentBlock: { + type: Quantity, + desc: 'The current block, same as eth_blockNumber' + }, + highestBlock: { + type: Quantity, + desc: 'The estimated highest block' + } + } + } + }, + + uninstallFilter: { + desc: 'Uninstalls a filter with given id. Should always be called when watch is no longer needed.\nAdditonally Filters timeout when they aren\'t requested with [eth_getFilterChanges](#eth_getfilterchanges) for a period of time.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: { + type: Boolean, + desc: '`true` if the filter was successfully uninstalled, otherwise `false`' + } + }, + + unregister: { + desc: '?', + params: [ + '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + } +}; diff --git a/js/src/jsonrpc/interfaces/ethcore.js b/js/src/jsonrpc/interfaces/ethcore.js new file mode 100644 index 0000000000..5b29106185 --- /dev/null +++ b/js/src/jsonrpc/interfaces/ethcore.js @@ -0,0 +1,315 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Address, Data, Hash, Quantity } from '../types'; + +export default { + acceptNonReservedPeers: { + desc: '?', + params: [], + returns: { + type: Boolean, + desc: '?' + } + }, + + addReservedPeer: { + desc: '?', + params: [ + { + type: String, + desc: 'Enode' + } + ], + returns: { + type: Boolean, + desc: '?' + } + }, + + defaultExtraData: { + desc: 'Returns the default extra data', + params: [], + returns: { + type: Data, + desc: 'Extra data' + } + }, + + devLogs: { + desc: 'Returns latest logs of your node', + params: [], + returns: { + type: Array, + desc: 'Development logs' + } + }, + + devLogsLevels: { + desc: 'Returns current log level settings', + params: [], + returns: { + type: String, + decs: 'Current log level' + } + }, + + dropNonReservedPeers: { + desc: '?', + params: [], + returns: { + type: Boolean, + desc: '?' + } + }, + + extraData: { + desc: 'Returns currently set extra data', + params: [], + returns: { + type: Data, + desc: 'Extra data' + } + }, + + gasFloorTarget: { + desc: 'Returns current target for gas floor', + params: [], + returns: { + type: Quantity, + desc: 'Gas Floor Target', + format: 'outputBigNumberFormatter' + } + }, + + generateSecretPhrase: { + desc: 'Creates a secret phrase that can be associated with an account', + params: [], + returns: { + type: String, + desc: 'The secret phrase' + } + }, + + hashContent: { + desc: 'Creates a hash of the file as retrieved', + params: [ + { + type: String, + desc: 'The url of the content' + } + ], + returns: { + type: Hash, + desc: 'The hash of the content' + } + }, + + minGasPrice: { + desc: 'Returns currently set minimal gas price', + params: [], + returns: { + type: Quantity, + desc: 'Minimal Gas Price', + format: 'outputBigNumberFormatter' + } + }, + + netChain: { + desc: 'Returns the name of the connected chain.', + params: [], + returns: { + type: String, + desc: 'chain name' + } + }, + + netPeers: { + desc: 'Returns number of peers.', + params: [], + returns: { + type: Quantity, + desc: 'Number of peers' + } + }, + + netMaxPeers: { + desc: 'Returns maximal number of peers.', + params: [], + returns: { + type: Quantity, + desc: 'Maximal number of peers' + } + }, + + netPort: { + desc: 'Returns network port the node is listening on.', + params: [], + returns: { + type: Quantity, + desc: 'Port Number' + } + }, + + nodeName: { + desc: 'Returns node name (identity)', + params: [], + returns: { + type: String, + desc: 'Node name' + } + }, + + phraseToAddress: { + desc: 'Converts a secret phrase into the corresponting address', + params: [ + { + type: String, + desc: 'The secret' + } + ], + returns: { + type: Address, + desc: 'Corresponding address' + } + }, + + removeReservedPeer: { + desc: '?', + params: [ + { + type: String, + desc: 'Encode' + } + ], + returns: { + type: Boolean, + desc: '?' + } + }, + + registryAddress: { + desc: 'The address for the global registry', + params: [], + returns: { + type: Address, + desc: 'The registry address' + } + }, + + rpcSettings: { + desc: 'Returns basic settings of rpc (enabled, port, interface).', + params: [], + returns: { + type: Object, + desc: 'JSON object containing rpc settings' + } + }, + + setAuthor: { + desc: 'Changes author (coinbase) for mined blocks.', + params: [ + { + type: Address, + desc: '20 Bytes - Address', + format: 'inputAddressFormatter' + } + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + setExtraData: { + desc: 'Changes extra data for newly mined blocks', + params: [ + { + type: Data, + desc: 'Extra Data', + format: 'utils.toHex' + } + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + setGasFloorTarget: { + desc: 'Changes current gas floor target.', + params: [ + { + type: Quantity, + desc: 'Gas Floor Target', + format: 'utils.toHex' + } + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + setMinGasPrice: { + desc: 'Changes minimal gas price for transaction to be accepted to the queue.', + params: [ + { + type: Quantity, + desc: 'Minimal gas price', + format: 'utils.toHex' + } + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + setTransactionsLimit: { + desc: 'Changes limit for transactions in queue.', + params: [ + { + type: Quantity, + desc: 'New Limit', + format: 'utils.toHex' + } + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + }, + + transactionsLimit: { + desc: 'Changes limit for transactions in queue.', + params: [], + returns: { + type: Quantity, + desc: 'Current max number of transactions in queue', + format: 'outputBigNumberFormatter' + } + }, + + unsignedTransactionsCount: { + desc: 'Returns number of unsigned transactions when running with Trusted Signer. Error otherwise', + params: [], + returns: { + type: Quantity, + desc: 'Number of unsigned transactions' + } + } +}; diff --git a/js/src/jsonrpc/interfaces/net.js b/js/src/jsonrpc/interfaces/net.js new file mode 100644 index 0000000000..9cc3bc0766 --- /dev/null +++ b/js/src/jsonrpc/interfaces/net.js @@ -0,0 +1,47 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Quantity } from '../types'; + +export default { + listening: { + desc: 'Returns `true` if client is actively listening for network connections.', + params: [], + returns: { + type: Boolean, + desc: '`true` when listening, otherwise `false`.' + } + }, + + peerCount: { + desc: 'Returns number of peers currenly connected to the client.', + params: [], + returns: { + type: Quantity, + desc: 'Integer of the number of connected peers', + format: 'utils.toDecimal' + } + }, + + version: { + desc: 'Returns the current network protocol version.', + params: [], + returns: { + type: String, + desc: 'The current network protocol version' + } + } +}; diff --git a/js/src/jsonrpc/interfaces/personal.js b/js/src/jsonrpc/interfaces/personal.js new file mode 100644 index 0000000000..748c8799f0 --- /dev/null +++ b/js/src/jsonrpc/interfaces/personal.js @@ -0,0 +1,288 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Address, Data, Quantity } from '../types'; + +export default { + accountsInfo: { + desc: 'returns a map of accounts as an object', + params: [], + returns: { + type: Array, + desc: 'Account metadata', + details: { + name: { + type: String, + desc: 'Account name' + }, + meta: { + type: String, + desc: 'Encoded JSON string the defines additional account metadata' + }, + uuid: { + type: String, + desc: 'The account UUID, or null if not available/unknown/not applicable.' + } + } + } + }, + + generateAuthorizationToken: { + desc: 'Generates a new authorization token', + params: [], + returns: { + type: String, + desc: 'The new authorization token' + } + }, + + requestsToConfirm: { + desc: 'Returns a list of the transactions requiring authorization', + params: [], + returns: { + type: Array, + desc: 'A list of the outstanding transactions' + } + }, + + confirmRequest: { + desc: 'Confirm a request in the signer queue', + params: [ + { + type: Quantity, + desc: 'The request id' + }, + { + type: Object, + desc: 'The request options' + }, + { + type: String, + desc: 'The account password' + } + ], + returns: { + type: Boolean, + desc: 'The status of the confirmation' + } + }, + + rejectRequest: { + desc: 'Rejects a request in the signer queue', + params: [ + { + type: Quantity, + desc: 'The request id' + } + ], + returns: { + type: Boolean, + desc: 'The status of the rejection' + } + }, + + listAccounts: { + desc: 'Returns a list of addresses owned by client.', + params: [], + returns: { + type: Array, + desc: '20 Bytes addresses owned by the client.' + } + }, + + listGethAccounts: { + desc: 'Returns a list of the accounts available from Geth', + params: [], + returns: { + type: Array, + desc: '20 Bytes addresses owned by the client.' + } + }, + + importGethAccounts: { + desc: 'Imports a list of accounts from geth', + params: [ + { + type: Array, + desc: 'List of the geth addresses to import' + } + ], + returns: { + type: Array, + desc: 'Array of the imported addresses' + } + }, + + newAccount: { + desc: 'Creates new account', + params: [ + { + type: String, + desc: 'Password' + } + ], + returns: { + type: Address, + desc: 'The created address' + } + }, + + newAccountFromPhrase: { + desc: 'Creates a new account from a brainwallet passphrase', + params: [ + { + type: String, + desc: 'Phrase' + }, + { + type: String, + desc: 'Password' + } + ], + returns: { + type: Address, + desc: 'The created address' + } + }, + + newAccountFromWallet: { + desc: 'Creates a new account from a JSON import', + params: [ + { + type: String, + desc: 'JSON' + }, + { + type: String, + desc: 'Password' + } + ], + returns: { + type: Address, + desc: 'The created address' + } + }, + + setAccountName: { + desc: 'Sets a name for the account', + params: [ + { + type: Address, + desc: 'Address' + }, + { + type: String, + desc: 'Name' + } + ], + returns: { + type: Object, + desc: 'Returns null in all cases' + } + }, + + setAccountMeta: { + desc: 'Sets metadata for the account', + params: [ + { + type: Address, + desc: 'Address' + }, + { + type: String, + desc: 'Metadata (JSON encoded)' + } + ], + returns: { + type: Object, + desc: 'Returns null in all cases' + } + }, + + signAndSendTransaction: { + desc: 'Sends and signs a transaction given account passphrase. Does not require the account to be unlocked nor unlocks the account for future transactions. ', + params: [ + { + type: Object, + desc: 'The transaction object', + details: { + from: { + type: Address, + desc: '20 Bytes - The address the transaction is send from' + }, + to: { + type: Address, + desc: '20 Bytes - (optional when creating new contract) The address the transaction is directed to' + }, + gas: { + type: Quantity, + desc: 'Integer of the gas provided for the transaction execution. It will return unused gas', + optional: true, + default: 90000 + }, + gasPrice: { + type: Quantity, + desc: 'Integer of the gasPrice used for each paid gas', + optional: true, + default: 'To-Be-Determined' + }, + value: { + type: Quantity, + desc: 'Integer of the value send with this transaction', + optional: true + }, + data: { + type: Data, + desc: 'The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. For details see [Ethereum Contract ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)' + }, + nonce: { + type: Quantity, + desc: 'Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce.', + optional: true + } + } + }, + { + type: String, + desc: 'Passphrase to unlock `from` account.' + } + ], + returns: { + type: Data, + desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available' + } + }, + + signerEnabled: { + desc: 'Returns whether signer is enabled/disabled.', + params: [], + returns: { + type: Boolean, + desc: 'true when enabled, false when disabled' + } + }, + + unlockAccount: { + desc: '?', + params: [ + '?', '?', '?' + ], + returns: { + type: Boolean, + desc: 'whether the call was successful' + } + } +}; diff --git a/js/src/jsonrpc/interfaces/shh.js b/js/src/jsonrpc/interfaces/shh.js new file mode 100644 index 0000000000..e9f727dacc --- /dev/null +++ b/js/src/jsonrpc/interfaces/shh.js @@ -0,0 +1,169 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Data, Quantity } from '../types'; + +export default { + version: { + desc: 'Returns the current whisper protocol version.', + params: [], + returns: { + type: String, + desc: 'The current whisper protocol version' + } + }, + + post: { + desc: 'Sends a whisper message.', + params: [ + { + type: Object, desc: 'The whisper post object:', format: 'inputPostFormatter', + details: { + from: { + type: Data, desc: '60 Bytes - The identity of the sender', + optional: true + }, + to: { + type: Data, desc: '60 Bytes - The identity of the receiver. When present whisper will encrypt the message so that only the receiver can decrypt it', + optional: true + }, + topics: { + type: Array, desc: 'Array of `DATA` topics, for the receiver to identify messages' + }, + payload: { + type: Data, desc: 'The payload of the message' + }, + priority: { + type: Quantity, desc: 'The integer of the priority in a rang from ... (?)' + }, + ttl: { + type: Quantity, desc: 'Integer of the time to live in seconds.' + } + } + } + ], + returns: { + type: Boolean, + desc: '`true` if the message was send, otherwise `false`' + } + }, + + newIdentity: { + desc: 'Creates new whisper identity in the client.', + params: [], + returns: { + type: Data, + desc: '60 Bytes - the address of the new identiy' + } + }, + + hasIdentity: { + desc: 'Checks if the client hold the private keys for a given identity.', + params: [ + { + type: Data, + desc: '60 Bytes - The identity address to check' + } + ], + returns: { + type: Boolean, + desc: '`true` if the client holds the privatekey for that identity, otherwise `false`' + } + }, + + newGroup: { + desc: '(?)', + params: [], + returns: { + type: Data, desc: '60 Bytes - the address of the new group. (?)' + } + }, + + addToGroup: { + desc: '(?)', + params: [ + { + type: Data, + desc: '60 Bytes - The identity address to add to a group (?)' + } + ], + returns: { + type: Boolean, + desc: '`true` if the identity was successfully added to the group, otherwise `false` (?)' + } + }, + + newFilter: { + desc: 'Creates filter to notify, when client receives whisper message matching the filter options.', + params: [ + { + type: Object, desc: 'The filter options:', + details: { + to: { + type: Data, desc: '60 Bytes - Identity of the receiver. *When present it will try to decrypt any incoming message if the client holds the private key to this identity.*', + optional: true + }, + topics: { + type: Array, desc: 'Array of `DATA` topics which the incoming message\'s topics should match. You can use the following combinations' + } + } + } + ], + returns: { + type: Quantity, + desc: 'The newly created filter' + } + }, + + uninstallFilter: { + desc: 'Uninstalls a filter with given id. Should always be called when watch is no longer needed.\nAdditonally Filters timeout when they aren\'t requested with [shh_getFilterChanges](#shh_getfilterchanges) for a period of time.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: { + type: Boolean, + desc: '`true` if the filter was successfully uninstalled, otherwise `false`' + } + }, + + getFilterChanges: { + desc: 'Polling method for whisper filters. Returns new messages since the last call of this method.\n**Note** calling the [shh_getMessages](#shh_getmessages) method, will reset the buffer for this method, so that you won\'t receive duplicate messages.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: { + type: Array, + desc: 'Array of messages received since last poll' + } + }, + + getMessages: { + desc: 'Get all messages matching a filter. Unlike `shh_getFilterChanges` this returns all messages.', + params: [ + { + type: Quantity, + desc: 'The filter id' + } + ], + returns: 'See [shh_getFilterChanges](#shh_getfilterchanges)' + } +}; diff --git a/js/src/jsonrpc/interfaces/trace.js b/js/src/jsonrpc/interfaces/trace.js new file mode 100644 index 0000000000..3dc4451f00 --- /dev/null +++ b/js/src/jsonrpc/interfaces/trace.js @@ -0,0 +1,79 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { BlockNumber, Hash, Integer } from '../types'; + +export default { + filter: { + desc: 'Returns traces matching given filter', + params: [ + { + type: Object, + desc: 'The filter object' + } + ], + returns: { + type: Array, + desc: 'Traces matching given filter' + } + }, + + get: { + desc: 'Returns trace at given position.', + params: [ + { + type: Hash, + desc: 'Transaction hash' + }, + { + type: Integer, + desc: 'Trace position witing transaction' + } + ], + returns: { + type: Object, + desc: 'Trace object' + } + }, + + transaction: { + desc: 'Returns all traces of given transaction', + params: [ + { + type: Hash, + desc: 'Transaction hash' + } + ], + returns: { + type: Array, + desc: 'Traces of given transaction' + } + }, + + block: { + desc: 'Returns traces created at given block', + params: [ + { + type: BlockNumber, + desc: 'Integer block number, or \'latest\' for the last mined block or \'pending\', \'earliest\' for not yet mined transactions' + } + ], + returns: { + type: Array, + desc: 'Block traces' + } + } +}; diff --git a/js/src/jsonrpc/interfaces/web3.js b/js/src/jsonrpc/interfaces/web3.js new file mode 100644 index 0000000000..783663716a --- /dev/null +++ b/js/src/jsonrpc/interfaces/web3.js @@ -0,0 +1,42 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { Data } from '../types'; + +export default { + clientVersion: { + desc: 'Returns the current client version.', + params: [], + returns: { + type: String, + desc: 'The current client version' + } + }, + + sha3: { + desc: 'Returns Keccak-256 (*not* the standardized SHA3-256) of the given data.', + params: [ + { + type: String, + desc: 'The data to convert into a SHA3 hash' + } + ], + returns: { + type: Data, + desc: 'The SHA3 result of the given string' + } + } +}; diff --git a/js/src/jsonrpc/rollup.config.js b/js/src/jsonrpc/rollup.config.js new file mode 100644 index 0000000000..cc4f8c9314 --- /dev/null +++ b/js/src/jsonrpc/rollup.config.js @@ -0,0 +1,12 @@ +import babel from 'rollup-plugin-babel'; + +export default { + entry: 'src/index.js', + dest: 'release/index.js', + format: 'cjs', + plugins: [babel({ + babelrc: false, + presets: ['es2015-rollup', 'stage-0'], + runtimeHelpers: true + })] +}; diff --git a/js/src/jsonrpc/types.js b/js/src/jsonrpc/types.js new file mode 100644 index 0000000000..026e010ed9 --- /dev/null +++ b/js/src/jsonrpc/types.js @@ -0,0 +1,27 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export class Address {} + +export class BlockNumber {} + +export class Data {} + +export class Hash {} + +export class Integer {} + +export class Quantity {} diff --git a/js/src/modals/AddAddress/addAddress.js b/js/src/modals/AddAddress/addAddress.js new file mode 100644 index 0000000000..5ab8bbe80f --- /dev/null +++ b/js/src/modals/AddAddress/addAddress.js @@ -0,0 +1,151 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import ContentAdd from 'material-ui/svg-icons/content/add'; +import ContentClear from 'material-ui/svg-icons/content/clear'; + +import { Button, Modal, Form, Input, InputAddress } from '../../ui'; +import { ERRORS, validateAddress, validateName } from '../../util/validation'; + +export default class AddAddress extends Component { + static contextTypes = { + api: PropTypes.object.isRequired + } + + static propTypes = { + contacts: PropTypes.object.isRequired, + onClose: PropTypes.func + }; + + state = { + address: '', + addressError: ERRORS.invalidAddress, + name: '', + nameError: ERRORS.invalidName, + description: '' + }; + + render () { + return ( + + { this.renderFields() } + + ); + } + + renderDialogActions () { + const { addressError, nameError } = this.state; + const hasError = !!(addressError || nameError); + + return ([ +

    uEk$7h;(7^{$52`9R> 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�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⩾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

    + ); + } + + handleTokenAdd = (value) => { + const { tokens } = this.props; + + const newSearchValues = uniq([].concat(tokens, value)); + + this.setState({ + inputValue: '' + }); + + this.handleSearchChange(newSearchValues); + } + + handleTokenDelete = (value) => { + const { tokens } = this.props; + + const newSearchValues = [] + .concat(tokens) + .filter(v => v !== value); + + this.setState({ + inputValue: '' + }); + + this.handleSearchChange(newSearchValues); + this.refs.searchInput.focus(); + } + + handleInputChange = (value) => { + this.setState({ inputValue: value }); + } + + handleSearchChange = (searchValues) => { + const { onChange } = this.props; + const newSearchValues = searchValues.filter(v => v.length > 0); + + onChange(newSearchValues); + } + + handleSearchClick = () => { + const { showSearch } = this.state; + + this.handleOpenSearch(!showSearch); + } + + handleSearchBlur = () => { + const timeoutId = window.setTimeout(() => { + const { inputValue } = this.state; + const { tokens } = this.props; + + if (tokens.length === 0 && inputValue.length === 0) { + this.handleOpenSearch(false); + } + }, 250); + + this.setState({ + timeoutIds: [].concat(this.state.timeoutIds, timeoutId) + }); + } + + handleOpenSearch = (showSearch, force) => { + if (this.state.stateChanging && !force) return false; + + this.setState({ + showSearch: showSearch, + stateChanging: true + }); + + if (showSearch) { + this.refs.searchInput.focus(); + } else { + this.refs.searchInput.getInputNode().blur(); + } + + const timeoutId = window.setTimeout(() => { + this.setState({ stateChanging: false }); + }, 450); + + this.setState({ + timeoutIds: [].concat(this.state.timeoutIds, timeoutId) + }); + } +} diff --git a/js/src/ui/Actionbar/Sort/index.js b/js/src/ui/Actionbar/Sort/index.js new file mode 100644 index 0000000000..82855931c7 --- /dev/null +++ b/js/src/ui/Actionbar/Sort/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './sort'; diff --git a/js/src/ui/Actionbar/Sort/sort.css b/js/src/ui/Actionbar/Sort/sort.css new file mode 100644 index 0000000000..ff592ca2f3 --- /dev/null +++ b/js/src/ui/Actionbar/Sort/sort.css @@ -0,0 +1,20 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.sortButton { + min-width: 50px !important; +} diff --git a/js/src/ui/Actionbar/Sort/sort.js b/js/src/ui/Actionbar/Sort/sort.js new file mode 100644 index 0000000000..35c51e5a1d --- /dev/null +++ b/js/src/ui/Actionbar/Sort/sort.js @@ -0,0 +1,73 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; +import IconMenu from 'material-ui/IconMenu'; +import MenuItem from 'material-ui/MenuItem'; + +import SortIcon from 'material-ui/svg-icons/content/sort'; + +import { Button } from '../../'; + +import styles from './sort.css'; + +export default class ActionbarSort extends Component { + static propTypes = { + onChange: PropTypes.func.isRequired, + order: PropTypes.string + }; + + state = { + menuOpen: false + } + + render () { + return ( + } + onClick={ this.handleMenuOpen } + /> + } + open={ this.state.menuOpen } + onRequestChange={ this.handleMenuChange } + onItemTouchTap={ this.handleSortChange } + targetOrigin={ { horizontal: 'right', vertical: 'top' } } + anchorOrigin={ { horizontal: 'right', vertical: 'top' } } + > + + + + + ); + } + + handleSortChange = (event, child) => { + const order = child.props.value; + this.props.onChange(order); + } + + handleMenuOpen = () => { + this.setState({ menuOpen: true }); + } + + handleMenuChange = (open) => { + this.setState({ menuOpen: open }); + } +} diff --git a/js/src/ui/Container/container.css b/js/src/ui/Container/container.css index 890f9d9342..14a0179ec8 100644 --- a/js/src/ui/Container/container.css +++ b/js/src/ui/Container/container.css @@ -15,13 +15,15 @@ /* along with Parity. If not, see . */ .container { - padding: 0em + padding: 0em; } .padded { padding: 1.5em; background: rgba(0, 0, 0, 0.8) !important; border-radius: 0 !important; + position: relative; + overflow: auto; } .light .padded { diff --git a/js/src/ui/Tags/index.js b/js/src/ui/Tags/index.js new file mode 100644 index 0000000000..71cd496242 --- /dev/null +++ b/js/src/ui/Tags/index.js @@ -0,0 +1,17 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +export default from './tags'; diff --git a/js/src/ui/Tags/tags.css b/js/src/ui/Tags/tags.css new file mode 100644 index 0000000000..f17fd1064f --- /dev/null +++ b/js/src/ui/Tags/tags.css @@ -0,0 +1,36 @@ +/* Copyright 2015, 2016 Ethcore (UK) Ltd. +/* This file is part of Parity. +/* +/* Parity is free software: you can redistribute it and/or modify +/* it under the terms of the GNU General Public License as published by +/* the Free Software Foundation, either version 3 of the License, or +/* (at your option) any later version. +/* +/* Parity is distributed in the hope that it will be useful, +/* but WITHOUT ANY WARRANTY; without even the implied warranty of +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/* GNU General Public License for more details. +/* +/* You should have received a copy of the GNU General Public License +/* along with Parity. If not, see . +*/ + +.tags { + display: flex; + flex-wrap: wrap; + position: absolute; + right: 0.25rem; + top: 0; +} + +.tag { + font-size: 0.75rem; + background: rgba(255, 255, 255, 0.07); + border-radius: 16px; + margin: 0.75em 0.5em 0 0; + padding: 0.25em 1em; +} + +.tagClickable:hover { + cursor: pointer; +} diff --git a/js/src/ui/Tags/tags.js b/js/src/ui/Tags/tags.js new file mode 100644 index 0000000000..23501b24f1 --- /dev/null +++ b/js/src/ui/Tags/tags.js @@ -0,0 +1,56 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import React, { Component, PropTypes } from 'react'; + +import styles from './tags.css'; + +export default class Tags extends Component { + static propTypes = { + tags: PropTypes.array, + handleAddSearchToken: PropTypes.func + } + + render () { + return (
    + { this.renderTags() } +
    ); + } + + renderTags () { + const { handleAddSearchToken } = this.props; + const tags = this.props.tags || []; + + const tagClasses = handleAddSearchToken + ? [ styles.tag, styles.tagClickable ] + : [ styles.tag ]; + + return tags.map((tag, idx) => { + const onClick = handleAddSearchToken + ? () => handleAddSearchToken(tag) + : null; + + return ( +
    + { tag } +
    + ); + }); + } +} diff --git a/js/src/ui/index.js b/js/src/ui/index.js index 3a324bcebc..8c7117a5fc 100644 --- a/js/src/ui/index.js +++ b/js/src/ui/index.js @@ -15,6 +15,8 @@ // along with Parity. If not, see . import Actionbar from './Actionbar'; +import ActionbarSearch from './Actionbar/Search'; +import ActionbarSort from './Actionbar/Sort'; import Badge from './Badge'; import Balance from './Balance'; import Button from './Button'; @@ -31,11 +33,14 @@ import muiTheme from './Theme'; import Page from './Page'; import ParityBackground from './ParityBackground'; import SignerIcon from './SignerIcon'; +import Tags from './Tags'; import Tooltips, { Tooltip } from './Tooltips'; import TxHash from './TxHash'; export { Actionbar, + ActionbarSearch, + ActionbarSort, AddressSelect, Badge, Balance, @@ -62,6 +67,7 @@ export { Page, ParityBackground, SignerIcon, + Tags, Tooltip, Tooltips, TxHash diff --git a/js/src/views/Account/Header/header.css b/js/src/views/Account/Header/header.css index 35ce0a700d..7fb254a6a3 100644 --- a/js/src/views/Account/Header/header.css +++ b/js/src/views/Account/Header/header.css @@ -14,7 +14,7 @@ /* You should have received a copy of the GNU General Public License /* along with Parity. If not, see . */ -.balances { +.balances, .tags { clear: both; } diff --git a/js/src/views/Account/Header/header.js b/js/src/views/Account/Header/header.js index d23fd50812..0abf3c7972 100644 --- a/js/src/views/Account/Header/header.js +++ b/js/src/views/Account/Header/header.js @@ -16,7 +16,7 @@ import React, { Component, PropTypes } from 'react'; -import { Balance, Container, ContainerTitle, IdentityIcon, IdentityName } from '../../../ui'; +import { Balance, Container, ContainerTitle, IdentityIcon, IdentityName, Tags } from '../../../ui'; import styles from './header.css'; @@ -70,6 +70,9 @@ export default class Header extends Component {
    { this.renderTxCount() } +
    + +
    { + const addresses = this.getAddresses(); + + return addresses.map((address, idx) => { const account = accounts[address] || {}; const balance = balances[address] || {}; @@ -61,9 +66,79 @@ export default class List extends Component { + balance={ balance } + handleAddSearchToken={ handleAddSearchToken } />
    ); }); } + + getAddresses () { + const filteredAddresses = this.getFilteredAddresses(); + return this.sortAddresses(filteredAddresses); + } + + sortAddresses (addresses) { + const { order } = this.props; + + if (!order || ['tags', 'name'].indexOf(order) === -1) { + return addresses; + } + + const { accounts } = this.props; + + return addresses.sort((addressA, addressB) => { + const accountA = accounts[addressA]; + const accountB = accounts[addressB]; + + if (order === 'name') { + return accountA.name.localeCompare(accountB.name); + } + + if (order === 'tags') { + const tagsA = [].concat(accountA.meta.tags) + .filter(t => t) + .sort(); + const tagsB = [].concat(accountB.meta.tags) + .filter(t => t) + .sort(); + + if (tagsA.length === 0) return 1; + if (tagsB.length === 0) return -1; + + return tagsA.join('').localeCompare(tagsB.join('')); + } + }); + } + + getFilteredAddresses () { + const { accounts, search } = this.props; + const searchValues = (search || []).map(v => v.toLowerCase()); + + if (searchValues.length === 0) { + return Object.keys(accounts); + } + + return Object.keys(accounts) + .filter((address) => { + const account = accounts[address]; + + const tags = account.meta.tags || []; + const name = account.name || ''; + + const values = [] + .concat(tags, name) + .map(v => v.toLowerCase()); + + return values + .filter((value) => { + return searchValues + .map(searchValue => value.indexOf(searchValue) >= 0) + // `current && truth, true` => use tokens as AND + // `current || truth, false` => use tokens as OR + .reduce((current, truth) => current || truth, false); + }) + .length > 0; + }); + } } diff --git a/js/src/views/Accounts/Summary/summary.js b/js/src/views/Accounts/Summary/summary.js index 0bfb41a20d..241806722a 100644 --- a/js/src/views/Accounts/Summary/summary.js +++ b/js/src/views/Accounts/Summary/summary.js @@ -17,7 +17,7 @@ import React, { Component, PropTypes } from 'react'; import { Link } from 'react-router'; -import { Balance, Container, ContainerTitle, IdentityIcon, IdentityName } from '../../../ui'; +import { Balance, Container, ContainerTitle, IdentityIcon, IdentityName, Tags } from '../../../ui'; export default class Summary extends Component { static contextTypes = { @@ -28,7 +28,8 @@ export default class Summary extends Component { account: PropTypes.object.isRequired, balance: PropTypes.object.isRequired, link: PropTypes.string, - children: PropTypes.node + children: PropTypes.node, + handleAddSearchToken: PropTypes.func } state = { @@ -36,21 +37,24 @@ export default class Summary extends Component { } render () { - const { account, balance, children, link } = this.props; + const { account, balance, children, link, handleAddSearchToken } = this.props; + const { tags } = account.meta; if (!account) { return null; } - const viewLink = `/${link || 'account'}/${account.address}`; + const { address } = account; + const viewLink = `/${link || 'account'}/${address}`; return ( + + address={ address } /> { } } - byline={ account.address } /> + title={ { } } + byline={ address } /> { children } diff --git a/js/src/views/Accounts/accounts.js b/js/src/views/Accounts/accounts.js index b8f5cba164..cc398c3137 100644 --- a/js/src/views/Accounts/accounts.js +++ b/js/src/views/Accounts/accounts.js @@ -18,10 +18,11 @@ import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import ContentAdd from 'material-ui/svg-icons/content/add'; +import { uniq } from 'lodash'; import List from './List'; import { CreateAccount } from '../../modals'; -import { Actionbar, Button, Page, Tooltip } from '../../ui'; +import { Actionbar, ActionbarSearch, ActionbarSort, Button, Page, Tooltip } from '../../ui'; import styles from './accounts.css'; @@ -38,11 +39,14 @@ class Accounts extends Component { state = { addressBook: false, - newDialog: false + newDialog: false, + sortOrder: '', + searchValues: [] } render () { const { accounts, hasAccounts, balances } = this.props; + const { searchValues, sortOrder } = this.state; return (
    @@ -50,9 +54,12 @@ class Accounts extends Component { { this.renderActionbar() } + empty={ !hasAccounts } + order={ sortOrder } + handleAddSearchToken={ this.onAddSearchToken } /> @@ -61,13 +68,42 @@ class Accounts extends Component { ); } + renderSearchButton () { + const onChange = (searchValues) => { + this.setState({ searchValues }); + }; + + return ( + + ); + } + + renderSortButton () { + const onChange = (sortOrder) => { + this.setState({ sortOrder }); + }; + + return ( + + ); + } + renderActionbar () { const buttons = [

    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%0Drq7Wa>^NahS0gIYJ-XegNw8;$7>Dy?*IL>SO! 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/coins-64x64.jpg b/js/assets/images/dapps/coins-64x64.jpg new file mode 100644 index 0000000000000000000000000000000000000000..987d7400efbc19054a194526625f07bfa1e6f458 GIT binary patch literal 3151 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 H;$rGQt(p%c literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/hex.jpg b/js/assets/images/dapps/hex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e09f49aa27a47f13a2dfa0b14eba4af1d9e0109 GIT binary patch literal 25630 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/link-64x64.jpg b/js/assets/images/dapps/link-64x64.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14f9c11906e50ce3439bbd40bef30e79f1146ccf GIT binary patch literal 2000 zcmb7^dpuNmAIHy`bH)tgat?#il(`5)TI2rcDT7vsGNF+dyGywxtw9!x%+}++#I}X9 z80FHIC^OGuDN*E-j9W~t%QHkTo6Ei;Wal~4<=OrB`JUhT=bYE?`+a{uzwhTKdnTIz z5LYJ`CjbONz!`f0nFMeIARJD9Z^w5RY@d7 z3qdu=nwpx*YT8@0$XnFOnq+wr5W@Drctt#3k*q>eA^+bYdjOzBfDN!A5Cw232%(^? z9iRXpfT4lFU!g#N@gPLRVSl$`Z9v%jw*VnL4wj7p%Ge$p0wDkZzQOv$0vzPly*T!A zc#OMHZ}Oz*%OBpb(z$i!o?R^w632VHSFZ^6C53-G!q;xHbuP}Qa)t%phx+RjMECxl z?Df;T8(SppeHuRnwy$(Kzid375+zSbz!-E9K+g9!Mi`HS6hJ_epw4DsBt#4l#N*ys zNp!v%aZEhTkm`5Ws7cM%h7z7`T{e@hP3lF4I_DSX3;mT|i7N~Zp5=JhKJr18mcRJp zvq6)_36sbFx={u?{#N^g;GbuI?k)=G5G7AOI&?}jA0wRB^t~1EOYbS?fq5ud%I9LIaW6MKM45Ku4Iv$}eYLFQ$wmpYm_8u2g z)DC>>9NoREj;H4X8Gs}uyG~h}R9z0Koo#F!K6>Z& z*>iFMF*X>J@2_LTVX&w=i%Mf_(BBi`A2EY|lB1w9Zsa|MB{joN1%z-A9wvS07XWb(0Hf;m8Z;K3&I#a~vGe*7GQ%N| z7nNToUi^4a3U;_v^(T?WuU0%Pdq<^I&+PbyYLl13j9@46i%o|gD?}#fbJMR=ftn+5 zQtQp?&ON!M8a;L58`c)bg*M*Okv#^pYs2Z>!j-FUPBvtehP_?Sreq8iKeE=e3tqYS z)Gt67c6vF-(XN*lLAk#H^(OEAJm_&gW#fc2d12l-eJL`?Gu2O;9C)+IVT@%cx@^XX z5j&Z4wh#yIm6Y5%gRi?9QdwAjz5af@#U?2ioDg=@H(8D7W=j(v;tMiLzx*|~`tU{% zr&gGyXxIk(HIy3IoqE@~Sn1HnuRQ3p8+MEGrtd0IX*Ohvcv{hEI)s{;)SF5R%In-@ z&97aDw%;+1lu!33R^tr^q69-W?Nil?~g@}FYI(fc_2TQsZ z-2$eTD;B~}`xb-)8P}%O2klQq6R-I`Ztt;>;JbCnHL+K{x;hKHS^Q#4<3rNd@Td$3 zBZYX7*R`v!x(O`zRX1#t+gO<^&kU;SAYWcuUpIz5;S-xm`m zP#>o5tE^2cvdH*_(V`a4u8-W)*esg$JwN+zvI5gT>{y~M#!SVSadHoSB$nR}C=Fq8 z7TNXzybqUx+=9qrQ3NR^E2}Rl!qmoe|6TtTJ}1=6jCuJCrDgT?-Z>Ye>7y3WNO{4Y zH0hc_`t!=qn~gY35cjLR2m`?!j>BPfK9vDc8Vj)J@B$E1Hb1ZKlLfIl@3sqzgShM< z3h3S1S{$t)wIIfY3lwQ}MPbk9jIm&2##AuHPk$+wesC>e80m~oWdo(4Wsl=QdN{)dnk(O ze`wPa7Lc9K4mB>#v<8qYX`b(ptCIvCHt5V!nE}P zN1|{3Y0Zg^V=-jZS}*)!tUaYROUJ`fKi#v9SPz30p|RP*K+&q5TZdtV#Q4J2m!vA~ zOZz+MAm>1k+tFZd)1B_l5{AZzma2GasJ5va1QZS)XBLrnTqq66EKGIJm258ANVD#i cEOh{JnI)Z*7gW#9irVHUs|e)_XJw=R1+QQ1B>(^b literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/link.jpg b/js/assets/images/dapps/link.jpg new file mode 100644 index 0000000000000000000000000000000000000000..546c67e205a721e2588be2054899d499cd75ca09 GIT binary patch literal 7973 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 R9)7#;Q^V*+bE%oG{{f(5K%W2r literal 0 HcmV?d00001 diff --git a/js/assets/images/dapps/register.jpg b/js/assets/images/dapps/register.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd47bd81ef6308794d8c9e3c23acd39fd1c25440 GIT binary patch literal 65545 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

    - { this.props.byline } + { this.props.byline }
    ); -- GitLab From 58b963b93d20d7528f7aaa8d31a6ec15937add2e Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Wed, 26 Oct 2016 19:44:08 +0000 Subject: [PATCH 214/393] [ci skip] js-precompiled 20161026-194241 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 82edd36234..768096cd21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#51b61fdce036bc8c01923fc73206cfa9fc5ec473" +source = "git+https://github.com/ethcore/js-precompiled.git#95fdde8fabd4eb15450b49263124b8659d114167" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From d72ea19e54b8e12619657a811105fee0cc6af697 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 26 Oct 2016 22:25:51 +0200 Subject: [PATCH 215/393] iconomi token images (#2906) --- js/assets/images/contracts/iconomi-64x64.png | Bin 0 -> 2305 bytes js/assets/images/contracts/iconomi.png | Bin 0 -> 6501 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 js/assets/images/contracts/iconomi-64x64.png create mode 100644 js/assets/images/contracts/iconomi.png diff --git a/js/assets/images/contracts/iconomi-64x64.png b/js/assets/images/contracts/iconomi-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ef6b95b9d1554f94d4526b4071e46132e3aa1b GIT binary patch literal 2305 zcmV+c3I6tpP)%uqT_5JV8c$w|)doZtCf-gkfG(&S(geaON2JkR;(_xru? z_x*m}@AZ8T5Jnhbgb_v_9y#{z=#UJ8sqkR;r4ss(Ny9I_NVy^DeemwXcyn=T=CUQSppF#2bTbF0tgX`eeZpf1wJ~wSGnZ%Bm_)D zApjQ$rH`eipUr61-XBiJVcZ8U&^K%Ds487s08Zio&O|E6v3BR2e~f;8?yb!Cr~l+d zZ#i*zc%l1J9|CmOOe4{&Yl6u+A|)9Siv6-?8VBMPN5K>AQg*!c)QF?aM!?T=)^^-| z=J?7BUeA-1REy*QWJ+=IwPlT7!_WS@Mu?DY4}E&BXijOBdw|c-Y3+PB0tbgIh={W} zi@LUKyJSFzE*oCz_UP3+ngtBYlnIDEn0ddcH)=fhYh>>JPafECZ0}5u9vH9c8Ym&S znex?g2n@@@Mb(pX;Z)`FgBQOYB8Ga9>X12g@Mk538v=~kYIeMV z@{CuTI3dIm2nkRSt}_!N6`VdpM=e+6>!J*da}>MFCzeoQT1XSnbJd$ei>t1zHW;&! z>-e@!lr)*3HIP0Vu0SKhJ@?_v}%F0f= zC|My(z|c*ZJr0(gU2HKP9jrVh1ks8!FG5!SFt9_$o_YO-e|cSZ;N1TBx&_@;U3Z+2o`BLSx6QDuxZr{(MsZ;LBTwJ^1e|o2p-R_S zgVe`?SepaiT{Zi*tTm+4AR*NaOE64k;m}X#v3uSEGF)v*jN+i2^9E&axzCILmX*YX zv<0l*v#a$v&lMZvi~|JyJ9qK)NltS&Wsa71r?(I&3vOitmWlcK+q(kT9g-H1wJ&$P zs{40FDz@BcncX3yP!_SEhjM-O&v$~-FvjjNCa@iYr6f+zt_c`gqLSr^bv^ZVdP zBS3osBoQEqF_v2FzSOsgF+gYFUq#6_G^_*(N-Eu>IOjA(W59KrD$Y1-vWvBHM4gbS zc(T6!1VE*(xt`ygIpr=3f=xdKdw;;_!-62}2~GzDKz`||*S8)mNcbizI$e62d|CVz z3E5tty(_UQTCwLiB)KA(KHV}~&is7qmd{E~+)_qJfA!t}YnoI9pNP_dr?6wr{^XYfS%j3sX7g^7ZD)K3Wjp zXU*J)Gv1py@toI_Q|hglU@->9Efjk$zxLr51w+JuY5c(AyiN>f9I`0(y6UZL58!xn zk+9>1sd_eoP0gi4-Q(4JcaHS<)Y#fDY?55n zwQbVQzR3@sznvuHz4XTN^ySl8g|21#O z!?NtE5dZ}Nf-X@w=MbrYc)N4Ic!S_w7k{z}cJ=XS{)M%FZUR6|X6Z#`=idP^`*vHx zv0uzz@%Y-`Rh+53vdpdd;)7e|TE$c&00I(a)vVlLR^2gpaBCeQ$%wN#7j|utn0fsy zP|xwadZ4q#mVol3TYf2I%-{2lH_r>WO9HQL2Q;h4+lu&Sf?OAbftOypy zYR0s%JM+_BZ3aKvvCEuyo*7dr3Y5ZR?CSv>V2l|ivrGW6ONy+UWh7cJZH`@5r0U(^roovJOpZW>##V?NK;d)im%I`wD~rl~-WgXl-(b}Y5L$EPRog$+ zU5nK`WB_DAM4~gYAVzV_j}YZgw~v@oK?IRkFH(}hjzO! literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/iconomi.png b/js/assets/images/contracts/iconomi.png new file mode 100644 index 0000000000000000000000000000000000000000..cc7b69afec2f35a264da954b875db3d5381c2201 GIT binary patch literal 6501 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 VH0|qJ0)L2rl;l Date: Wed, 26 Oct 2016 20:39:01 +0000 Subject: [PATCH 216/393] [ci skip] js-precompiled 20161026-203802 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 768096cd21..cfd9954465 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#95fdde8fabd4eb15450b49263124b8659d114167" +source = "git+https://github.com/ethcore/js-precompiled.git#f1b734cb0df5796f2d73db6268fa0613c1526e84" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From e668fc4c55f13c04b189a3fd6b8b17408d6209a9 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 27 Oct 2016 09:53:51 +0700 Subject: [PATCH 217/393] Update gitlab-ci fix arm* build ENV --- .gitlab-ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fcee8333bc..17907b49ab 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,8 @@ variables: SIMPLECOV: "true" RUST_BACKTRACE: "1" RUSTFLAGS: "-D warnings" + HOST_CC: "gcc" + HOST_CXX: "g++" cache: key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" untracked: true @@ -141,6 +143,8 @@ linux-armv7: - tags - stable script: + - export CC=arm-linux-gnueabihf-gcc + - export CXX=arm-linux-gnueabihf-g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.armv7-unknown-linux-gnueabihf]" >> .cargo/config @@ -177,6 +181,8 @@ linux-arm: - tags - stable script: + - export CC=arm-linux-gnueabihf-gcc + - export CXX=arm-linux-gnueabihf-g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.arm-unknown-linux-gnueabihf]" >> .cargo/config @@ -213,6 +219,8 @@ linux-armv6: - tags - stable script: + - export CC=arm-linux-gnueabi-gcc + - export CXX=arm-linux-gnueabi-g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.arm-unknown-linux-gnueabi]" >> .cargo/config @@ -242,6 +250,8 @@ linux-aarch64: - tags - stable script: + - export CC=aarch64-linux-gnu-gcc + - export CXX=aarch64-linux-gnu-g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.aarch64-unknown-linux-gnu]" >> .cargo/config -- GitLab From 9bfb8094cc8ed58dc28b8c950c1802c5ff7c5c46 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 02:56:17 +0000 Subject: [PATCH 218/393] [ci skip] js-precompiled 20161027-025520 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index cfd9954465..ced9524eef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#f1b734cb0df5796f2d73db6268fa0613c1526e84" +source = "git+https://github.com/ethcore/js-precompiled.git#9d77b0117c2fa0b17dd381853b0020b1fdc96855" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 88997801d0f5fdafbf583271be077116f99ce8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 08:28:12 +0200 Subject: [PATCH 219/393] Clippy bump (#2877) * Bumping clippy * Fixing warnings * Fix the "fix" --- Cargo.lock | 24 +++++++------- Cargo.toml | 2 +- dapps/Cargo.toml | 2 +- db/Cargo.toml | 2 +- ethcore/Cargo.toml | 2 +- ethcore/src/account_provider.rs | 8 ++--- ethcore/src/block.rs | 2 +- ethcore/src/blockchain/blockchain.rs | 3 +- ethcore/src/cache_manager.rs | 2 +- ethcore/src/client/client.rs | 2 +- ethcore/src/db.rs | 6 ++-- ethcore/src/evm/interpreter/mod.rs | 4 +-- ethcore/src/migrations/v10.rs | 2 +- ethcore/src/miner/miner.rs | 8 +++-- ethcore/src/miner/transaction_queue.rs | 1 + ethcore/src/service.rs | 2 +- ethcore/src/snapshot/mod.rs | 2 +- ethcore/src/state/account.rs | 2 +- ethcore/src/state/mod.rs | 46 +++++++++++--------------- ethcore/src/state_db.rs | 15 ++++----- ethcore/src/trace/db.rs | 2 +- ethcore/src/trace/executive_tracer.rs | 6 ++-- json/Cargo.toml | 2 +- rpc/Cargo.toml | 2 +- signer/Cargo.toml | 2 +- signer/src/authcode_store.rs | 1 + sync/Cargo.toml | 2 +- sync/src/blocks.rs | 6 ++-- sync/src/chain.rs | 27 +++++++-------- util/Cargo.toml | 2 +- util/network/Cargo.toml | 2 +- util/src/journaldb/archivedb.rs | 10 +++--- util/src/journaldb/earlymergedb.rs | 10 ++++-- util/src/journaldb/overlayrecentdb.rs | 2 +- util/src/journaldb/refcounteddb.rs | 4 ++- util/src/migration/mod.rs | 2 +- util/src/overlaydb.rs | 4 +-- util/src/trie/journal.rs | 2 +- util/src/trie/triedb.rs | 4 +-- 39 files changed, 117 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ced9524eef..a58a426a4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,7 +3,7 @@ name = "parity" version = "1.4.0" dependencies = [ "ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "ctrlc 1.1.1 (git+https://github.com/ethcore/rust-ctrlc.git)", "daemonize 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.6.80 (registry+https://github.com/rust-lang/crates.io-index)", @@ -145,15 +145,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "clippy" -version = "0.0.90" +version = "0.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "clippy_lints 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy_lints 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "clippy_lints" -version = "0.0.90" +version = "0.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -279,7 +279,7 @@ dependencies = [ "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "bloomchain 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "ethash 1.4.0", @@ -330,7 +330,7 @@ dependencies = [ name = "ethcore-dapps" version = "1.4.0" dependencies = [ - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "ethabi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "ethcore-devtools 1.4.0", @@ -473,7 +473,7 @@ dependencies = [ name = "ethcore-rpc" version = "1.4.0" dependencies = [ - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "ethash 1.4.0", "ethcore 1.4.0", "ethcore-devtools 1.4.0", @@ -503,7 +503,7 @@ dependencies = [ name = "ethcore-signer" version = "1.4.0" dependencies = [ - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "ethcore-devtools 1.4.0", "ethcore-io 1.4.0", @@ -542,7 +542,7 @@ version = "1.4.0" dependencies = [ "ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.6.0 (git+https://github.com/ethcore/elastic-array)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.4 (git+https://github.com/ethcore/rust-secp256k1)", @@ -631,7 +631,7 @@ dependencies = [ name = "ethsync" version = "1.4.0" dependencies = [ - "clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)", + "clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "ethcore 1.4.0", "ethcore-io 1.4.0", @@ -1948,8 +1948,8 @@ dependencies = [ "checksum bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c129aff112dcc562970abb69e2508b40850dd24c274761bb50fb8a0067ba6c27" "checksum bytes 0.4.0-dev (git+https://github.com/carllerche/bytes)" = "" "checksum cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de1e760d7b6535af4241fca8bd8adf68e2e7edacc6b29f5d399050c5e48cf88c" -"checksum clippy 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "d19bda68c3db98e3a780342f6101b44312fef20a5f13ce756d1202a35922b01b" -"checksum clippy_lints 0.0.90 (registry+https://github.com/rust-lang/crates.io-index)" = "3d4ed67c69b9bb35169be2538691d290a3aa0cbfd4b9f0bfb7c221fc1d399a96" +"checksum clippy 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)" = "6eacf01b0aad84a0817703498f72d252df7c0faf6a5b86d0be4265f1829e459f" +"checksum clippy_lints 0.0.96 (registry+https://github.com/rust-lang/crates.io-index)" = "a49960c9aab544ce86b004dcb61620e8b898fea5fc0f697a028f460f48221ed6" "checksum cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90266f45846f14a1e986c77d1e9c2626b8c342ed806fe60241ec38cc8697b245" "checksum crossbeam 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "fb974f835e90390c5f9dfac00f05b06dc117299f5ea4e85fbc7bb443af4911cc" "checksum ctrlc 1.1.1 (git+https://github.com/ethcore/rust-ctrlc.git)" = "" diff --git a/Cargo.toml b/Cargo.toml index 62039696ca..dc802a0fdd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ ethcore-logger = { path = "logger" } rlp = { path = "util/rlp" } ethcore-stratum = { path = "stratum" } ethcore-dapps = { path = "dapps", optional = true } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} [target.'cfg(windows)'.dependencies] winapi = "0.2" diff --git a/dapps/Cargo.toml b/dapps/Cargo.toml index 9c49c7e284..ddc23c87cd 100644 --- a/dapps/Cargo.toml +++ b/dapps/Cargo.toml @@ -33,7 +33,7 @@ fetch = { path = "../util/fetch" } parity-ui = { path = "./ui" } mime_guess = { version = "1.6.1" } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} [build-dependencies] serde_codegen = { version = "0.8", optional = true } diff --git a/db/Cargo.toml b/db/Cargo.toml index 15ceb9b3b6..27eadef4a5 100644 --- a/db/Cargo.toml +++ b/db/Cargo.toml @@ -11,7 +11,7 @@ build = "build.rs" ethcore-ipc-codegen = { path = "../ipc/codegen" } [dependencies] -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} ethcore-devtools = { path = "../devtools" } ethcore-ipc = { path = "../ipc/rpc" } rocksdb = { git = "https://github.com/ethcore/rust-rocksdb" } diff --git a/ethcore/Cargo.toml b/ethcore/Cargo.toml index ad9e545ced..a60eccddd4 100644 --- a/ethcore/Cargo.toml +++ b/ethcore/Cargo.toml @@ -25,7 +25,7 @@ semver = "0.2" bit-set = "0.4" time = "0.1" evmjit = { path = "../evmjit", optional = true } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} ethash = { path = "../ethash" } ethcore-util = { path = "../util" } ethcore-io = { path = "../util/io" } diff --git a/ethcore/src/account_provider.rs b/ethcore/src/account_provider.rs index 7a4958ddcc..fed1a05fce 100644 --- a/ethcore/src/account_provider.rs +++ b/ethcore/src/account_provider.rs @@ -267,17 +267,17 @@ impl AccountProvider { /// Returns `true` if the password for `account` is `password`. `false` if not. pub fn test_password(&self, account: &Address, password: String) -> Result { - match self.sstore.sign(&account, &password, &Default::default()) { + match self.sstore.sign(account, &password, &Default::default()) { Ok(_) => Ok(true), Err(SSError::InvalidPassword) => Ok(false), Err(e) => Err(Error::SStore(e)), } - } + } /// Changes the password of `account` from `password` to `new_password`. Fails if incorrect `password` given. pub fn change_password(&self, account: &Address, password: String, new_password: String) -> Result<(), Error> { - self.sstore.change_password(&account, &password, &new_password).map_err(Error::SStore) - } + self.sstore.change_password(account, &password, &new_password).map_err(Error::SStore) + } /// Helper method used for unlocking accounts. fn unlock_account(&self, account: Address, password: String, unlock: Unlock) -> Result<(), Error> { diff --git a/ethcore/src/block.rs b/ethcore/src/block.rs index 5d7305b91f..54c2a7a020 100644 --- a/ethcore/src/block.rs +++ b/ethcore/src/block.rs @@ -542,7 +542,7 @@ pub fn enact( Ok(b.close_and_lock()) } -#[inline(always)] +#[inline] #[cfg(not(feature = "slow-blocks"))] fn push_transactions(block: &mut OpenBlock, transactions: &[SignedTransaction]) -> Result<(), Error> { for t in transactions { diff --git a/ethcore/src/blockchain/blockchain.rs b/ethcore/src/blockchain/blockchain.rs index de0c72a382..32d42fe317 100644 --- a/ethcore/src/blockchain/blockchain.rs +++ b/ethcore/src/blockchain/blockchain.rs @@ -414,6 +414,7 @@ impl<'a> Iterator for AncestryIter<'a> { } impl BlockChain { + #[cfg_attr(feature="dev", allow(useless_let_if_seq))] /// Create new instance of blockchain from given Genesis pub fn new(config: Config, genesis: &[u8], db: Arc) -> BlockChain { // 400 is the avarage size of the key @@ -565,7 +566,7 @@ impl BlockChain { let range = extras.number as bc::Number .. extras.number as bc::Number; let chain = bc::group::BloomGroupChain::new(self.blooms_config, self); let changes = chain.replace(&range, vec![]); - for (k, v) in changes.into_iter() { + for (k, v) in changes { batch.write(db::COL_EXTRA, &LogGroupPosition::from(k), &BloomGroup::from(v)); } batch.put(db::COL_EXTRA, b"best", &hash); diff --git a/ethcore/src/cache_manager.rs b/ethcore/src/cache_manager.rs index 02c8f08a1b..6ad01b4533 100644 --- a/ethcore/src/cache_manager.rs +++ b/ethcore/src/cache_manager.rs @@ -66,7 +66,7 @@ impl CacheManager where T: Eq + Hash { } fn rotate_cache_if_needed(&mut self) { - if self.cache_usage.len() == 0 { return } + if self.cache_usage.is_empty() { return } if self.cache_usage[0].len() * self.bytes_per_cache_entry > self.pref_cache_size / COLLECTION_QUEUE_SIZE { if let Some(cache) = self.cache_usage.pop_back() { diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 49195d952a..cb963dadc0 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -314,7 +314,7 @@ impl Client { if let Some(parent) = chain_has_parent { // Enact Verified Block let last_hashes = self.build_last_hashes(header.parent_hash().clone()); - let db = self.state_db.lock().boxed_clone_canon(&header.parent_hash()); + let db = self.state_db.lock().boxed_clone_canon(header.parent_hash()); let enact_result = enact_verified(block, engine, self.tracedb.read().tracing_enabled(), db, &parent, last_hashes, self.factories.clone()); let locked_block = try!(enact_result.map_err(|e| { diff --git a/ethcore/src/db.rs b/ethcore/src/db.rs index 10672d7304..92c0f1b399 100644 --- a/ethcore/src/db.rs +++ b/ethcore/src/db.rs @@ -114,7 +114,7 @@ pub trait Writable { R: Deref { match policy { CacheUpdatePolicy::Overwrite => { - for (key, value) in values.into_iter() { + for (key, value) in values { self.write(col, &key, &value); cache.insert(key, value); } @@ -135,7 +135,7 @@ pub trait Writable { R: Deref { match policy { CacheUpdatePolicy::Overwrite => { - for (key, value) in values.into_iter() { + for (key, value) in values { match value { Some(ref v) => self.write(col, &key, v), None => self.delete(col, &key), @@ -144,7 +144,7 @@ pub trait Writable { } }, CacheUpdatePolicy::Remove => { - for (key, value) in values.into_iter() { + for (key, value) in values { match value { Some(v) => self.write(col, &key, &v), None => self.delete(col, &key), diff --git a/ethcore/src/evm/interpreter/mod.rs b/ethcore/src/evm/interpreter/mod.rs index a39e09e798..8ded2e1f14 100644 --- a/ethcore/src/evm/interpreter/mod.rs +++ b/ethcore/src/evm/interpreter/mod.rs @@ -54,14 +54,14 @@ const TWO_POW_248: U256 = U256([0, 0, 0, 0x100000000000000]); //0x1 00000000 000 /// Abstraction over raw vector of Bytes. Easier state management of PC. struct CodeReader<'a> { position: ProgramCounter, - code: &'a Bytes + code: &'a [u8] } #[cfg_attr(feature="dev", allow(len_without_is_empty))] impl<'a> CodeReader<'a> { /// Create new code reader - starting at position 0. - fn new(code: &'a Bytes) -> Self { + fn new(code: &'a [u8]) -> Self { CodeReader { position: 0, code: code, diff --git a/ethcore/src/migrations/v10.rs b/ethcore/src/migrations/v10.rs index 88884fb26e..77531eb083 100644 --- a/ethcore/src/migrations/v10.rs +++ b/ethcore/src/migrations/v10.rs @@ -61,7 +61,7 @@ pub fn generate_bloom(source: Arc, dest: &mut Database) -> Result<(), let account_trie = try!(TrieDB::new(state_db.as_hashdb(), &state_root).map_err(|e| Error::Custom(format!("Cannot open trie: {:?}", e)))); for item in try!(account_trie.iter().map_err(|_| Error::MigrationImpossible)) { let (ref account_key, _) = try!(item.map_err(|_| Error::MigrationImpossible)); - let account_key_hash = H256::from_slice(&account_key); + let account_key_hash = H256::from_slice(account_key); bloom.set(&*account_key_hash); } diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 43b6ca7216..270a39e48e 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -362,7 +362,7 @@ impl Miner { { let mut queue = self.transaction_queue.lock(); - for hash in invalid_transactions.into_iter() { + for hash in invalid_transactions { queue.remove_invalid(&hash, &fetch_account); } for hash in transactions_to_penalize { @@ -522,6 +522,8 @@ impl Miner { /// Are we allowed to do a non-mandatory reseal? fn tx_reseal_allowed(&self) -> bool { Instant::now() > *self.next_allowed_reseal.lock() } + #[cfg_attr(feature="dev", allow(wrong_self_convention))] + #[cfg_attr(feature="dev", allow(redundant_closure))] fn from_pending_block(&self, latest_block_number: BlockNumber, from_chain: F, map_block: G) -> H where F: Fn() -> H, G: Fn(&ClosedBlock) -> H { let sealing_work = self.sealing_work.lock(); @@ -885,7 +887,7 @@ impl MinerService for Miner { fn pending_receipts(&self, best_block: BlockNumber) -> BTreeMap { self.from_pending_block( best_block, - || BTreeMap::new(), + BTreeMap::new, |pending| { let hashes = pending.transactions() .iter() @@ -1019,7 +1021,7 @@ impl MinerService for Miner { tx.sender().expect("Transaction is in block, so sender has to be defined.") }) .collect::>(); - for sender in to_remove.into_iter() { + for sender in to_remove { transaction_queue.remove_all(sender, chain.latest_nonce(&sender)); } }); diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index fa0cce1e61..40150b78db 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -446,6 +446,7 @@ pub struct AccountDetails { const GAS_LIMIT_HYSTERESIS: usize = 10; // (100/GAS_LIMIT_HYSTERESIS) % /// Describes the strategy used to prioritize transactions in the queue. +#[cfg_attr(feature="dev", allow(enum_variant_names))] #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum PrioritizationStrategy { /// Use only gas price. Disregards the actual computation cost of the transaction. diff --git a/ethcore/src/service.rs b/ethcore/src/service.rs index 95cbe745ea..1180c1b3c6 100644 --- a/ethcore/src/service.rs +++ b/ethcore/src/service.rs @@ -87,7 +87,7 @@ impl ClientService { db_config.set_cache(::db::COL_STATE, size); } - db_config.compaction = config.db_compaction.compaction_profile(&client_path); + db_config.compaction = config.db_compaction.compaction_profile(client_path); db_config.wal = config.db_wal; let pruning = config.pruning; diff --git a/ethcore/src/snapshot/mod.rs b/ethcore/src/snapshot/mod.rs index 4fa00f7717..86f921cf09 100644 --- a/ethcore/src/snapshot/mod.rs +++ b/ethcore/src/snapshot/mod.rs @@ -202,7 +202,7 @@ impl<'a> BlockChunker<'a> { // cut off the chunk if too large. - if new_loaded_size > PREFERRED_CHUNK_SIZE && self.rlps.len() > 0 { + if new_loaded_size > PREFERRED_CHUNK_SIZE && !self.rlps.is_empty() { try!(self.write_chunk(last)); loaded_size = pair.len(); } else { diff --git a/ethcore/src/state/account.rs b/ethcore/src/state/account.rs index b26c79cba9..2bd8a2d15f 100644 --- a/ethcore/src/state/account.rs +++ b/ethcore/src/state/account.rs @@ -413,7 +413,7 @@ impl Account { self.code_size = other.code_size; self.address_hash = other.address_hash; let mut cache = self.storage_cache.borrow_mut(); - for (k, v) in other.storage_cache.into_inner().into_iter() { + for (k, v) in other.storage_cache.into_inner() { cache.insert(k.clone() , v.clone()); //TODO: cloning should not be required here } self.storage_changes = other.storage_changes; diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index 6befcad123..bef20d257d 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -127,11 +127,10 @@ impl AccountEntry { fn overwrite_with(&mut self, other: AccountEntry) { self.state = other.state; match other.account { - Some(acc) => match self.account { - Some(ref mut ours) => { + Some(acc) => { + if let Some(ref mut ours) = self.account { ours.overwrite_with(acc); - }, - None => {}, + } }, None => self.account = None, } @@ -281,13 +280,10 @@ impl State { } }, None => { - match self.cache.get_mut().entry(k) { - Entry::Occupied(e) => { - if e.get().is_dirty() { - e.remove(); - } - }, - _ => {} + if let Entry::Occupied(e) = self.cache.get_mut().entry(k) { + if e.get().is_dirty() { + e.remove(); + } } } } @@ -501,6 +497,7 @@ impl State { /// Commit accounts to SecTrieDBMut. This is similar to cpp-ethereum's dev::eth::commit. /// `accounts` is mutable because we may need to commit the code or storage and record that. #[cfg_attr(feature="dev", allow(match_ref_pats))] + #[cfg_attr(feature="dev", allow(needless_borrow))] fn commit_into( factories: &Factories, db: &mut StateDB, @@ -509,17 +506,14 @@ impl State { ) -> Result<(), Error> { // first, commit the sub trees. for (address, ref mut a) in accounts.iter_mut().filter(|&(_, ref a)| a.is_dirty()) { - match a.account { - Some(ref mut account) => { - if !account.is_empty() { - db.note_account_bloom(&address); - } - let addr_hash = account.address_hash(address); - let mut account_db = factories.accountdb.create(db.as_hashdb_mut(), addr_hash); - account.commit_storage(&factories.trie, account_db.as_hashdb_mut()); - account.commit_code(account_db.as_hashdb_mut()); + if let Some(ref mut account) = a.account { + if !account.is_empty() { + db.note_account_bloom(address); } - _ => {} + let addr_hash = account.address_hash(address); + let mut account_db = factories.accountdb.create(db.as_hashdb_mut(), addr_hash); + account.commit_storage(&factories.trie, account_db.as_hashdb_mut()); + account.commit_code(account_db.as_hashdb_mut()); } } @@ -586,7 +580,7 @@ impl State { fn query_pod(&mut self, query: &PodState) { for (address, pod_account) in query.get().into_iter() - .filter(|&(ref a, _)| self.ensure_cached(a, RequireCache::Code, true, |a| a.is_some())) + .filter(|&(a, _)| self.ensure_cached(a, RequireCache::Code, true, |a| a.is_some())) { // needs to be split into two parts for the refcell code here // to work. @@ -679,14 +673,12 @@ impl State { None => { let maybe_acc = if self.db.check_account_bloom(a) { let db = self.factories.trie.readonly(self.db.as_hashdb(), &self.root).expect(SEC_TRIE_DB_UNWRAP_STR); - let maybe_acc = match db.get(a) { + match db.get(a) { Ok(Some(acc)) => AccountEntry::new_clean(Some(Account::from_rlp(&acc))), Ok(None) => AccountEntry::new_clean(None), Err(e) => panic!("Potential DB corruption encountered: {}", e), - }; - maybe_acc - } - else { + } + } else { AccountEntry::new_clean(None) }; self.insert_cache(a, maybe_acc); diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index 2823b9b1bc..dfa65ab1d9 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -170,7 +170,7 @@ impl StateDB { pub fn commit_bloom(batch: &mut DBTransaction, journal: BloomJournal) -> Result<(), UtilError> { assert!(journal.hash_functions <= 255); - batch.put(COL_ACCOUNT_BLOOM, ACCOUNT_BLOOM_HASHCOUNT_KEY, &vec![journal.hash_functions as u8]); + batch.put(COL_ACCOUNT_BLOOM, ACCOUNT_BLOOM_HASHCOUNT_KEY, &[journal.hash_functions as u8]); let mut key = [0u8; 8]; let mut val = [0u8; 8]; @@ -216,7 +216,7 @@ impl StateDB { let mut clear = false; for block in enacted.iter().filter(|h| self.commit_hash.as_ref().map_or(true, |p| *h != p)) { clear = clear || { - if let Some(ref mut m) = cache.modifications.iter_mut().find(|ref m| &m.hash == block) { + if let Some(ref mut m) = cache.modifications.iter_mut().find(|m| &m.hash == block) { trace!("Reverting enacted block {:?}", block); m.is_canon = true; for a in &m.accounts { @@ -232,7 +232,7 @@ impl StateDB { for block in retracted { clear = clear || { - if let Some(ref mut m) = cache.modifications.iter_mut().find(|ref m| &m.hash == block) { + if let Some(ref mut m) = cache.modifications.iter_mut().find(|m| &m.hash == block) { trace!("Retracting block {:?}", block); m.is_canon = false; for a in &m.accounts { @@ -286,7 +286,7 @@ impl StateDB { is_canon: is_best, parent: parent.clone(), }; - let insert_at = cache.modifications.iter().enumerate().find(|&(_, ref m)| m.number < *number).map(|(i, _)| i); + let insert_at = cache.modifications.iter().enumerate().find(|&(_, m)| m.number < *number).map(|(i, _)| i); trace!("inserting modifications at {:?}", insert_at); if let Some(insert_at) = insert_at { cache.modifications.insert(insert_at, block_changes); @@ -369,7 +369,7 @@ impl StateDB { if !Self::is_allowed(addr, &self.parent_hash, &cache.modifications) { return None; } - cache.accounts.get_mut(&addr).map(|a| a.as_ref().map(|a| a.clone_basic())) + cache.accounts.get_mut(addr).map(|a| a.as_ref().map(|a| a.clone_basic())) } /// Get value from a cached account. @@ -406,8 +406,7 @@ impl StateDB { // We search for our parent in that list first and then for // all its parent until we hit the canonical block, // checking against all the intermediate modifications. - let mut iter = modifications.iter(); - while let Some(ref m) = iter.next() { + for m in modifications { if &m.hash == parent { if m.is_canon { return true; @@ -420,7 +419,7 @@ impl StateDB { } } trace!("Cache lookup skipped for {:?}: parent hash is unknown", addr); - return false; + false } } diff --git a/ethcore/src/trace/db.rs b/ethcore/src/trace/db.rs index bc867983d3..6a1b55a1b6 100644 --- a/ethcore/src/trace/db.rs +++ b/ethcore/src/trace/db.rs @@ -285,7 +285,7 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { let mut blooms = self.blooms.write(); batch.extend_with_cache(db::COL_TRACE, &mut *blooms, blooms_to_insert, CacheUpdatePolicy::Remove); // note_used must be called after locking blooms to avoid cache/traces deadlock on garbage collection - for key in blooms_keys.into_iter() { + for key in blooms_keys { self.note_used(CacheID::Bloom(key)); } } diff --git a/ethcore/src/trace/executive_tracer.rs b/ethcore/src/trace/executive_tracer.rs index ca9bc30b51..bb18c61a84 100644 --- a/ethcore/src/trace/executive_tracer.rs +++ b/ethcore/src/trace/executive_tracer.rs @@ -50,12 +50,12 @@ fn prefix_subtrace_addresses(mut traces: Vec) -> Vec { // [1, 0] let mut current_subtrace_index = 0; let mut first = true; - for trace in traces.iter_mut() { + for trace in &mut traces { match (first, trace.trace_address.is_empty()) { (true, _) => first = false, (_, true) => current_subtrace_index += 1, _ => {} - } + } trace.trace_address.push_front(current_subtrace_index); } traces @@ -78,7 +78,7 @@ fn should_prefix_address_properly() { let t = vec![vec![], vec![0], vec![0, 0], vec![0], vec![], vec![], vec![0], vec![]].into_iter().map(&f).collect(); let t = prefix_subtrace_addresses(t); assert_eq!(t, vec![vec![0], vec![0, 0], vec![0, 0, 0], vec![0, 0], vec![1], vec![2], vec![2, 0], vec![3]].into_iter().map(&f).collect::>()); -} +} impl Tracer for ExecutiveTracer { fn prepare_trace_call(&self, params: &ActionParams) -> Option { diff --git a/json/Cargo.toml b/json/Cargo.toml index 90c36cedc9..8f7b0c227a 100644 --- a/json/Cargo.toml +++ b/json/Cargo.toml @@ -10,7 +10,7 @@ rustc-serialize = "0.3" serde = "0.8" serde_json = "0.8" serde_macros = { version = "0.8", optional = true } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} [build-dependencies] serde_codegen = { version = "0.8", optional = true } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 34b68fb810..9ce638ea6e 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -29,7 +29,7 @@ fetch = { path = "../util/fetch" } rustc-serialize = "0.3" transient-hashmap = "0.1" serde_macros = { version = "0.8.0", optional = true } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} json-ipc-server = { git = "https://github.com/ethcore/json-ipc-server.git" } ethcore-ipc = { path = "../ipc/rpc" } time = "0.1" diff --git a/signer/Cargo.toml b/signer/Cargo.toml index b8a7c5ce45..651d96cb36 100644 --- a/signer/Cargo.toml +++ b/signer/Cargo.toml @@ -23,7 +23,7 @@ ethcore-rpc = { path = "../rpc" } ethcore-devtools = { path = "../devtools" } parity-ui = { path = "../dapps/ui", version = "1.4", optional = true } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} [features] dev = ["clippy"] diff --git a/signer/src/authcode_store.rs b/signer/src/authcode_store.rs index d8068fc888..d8474441c4 100644 --- a/signer/src/authcode_store.rs +++ b/signer/src/authcode_store.rs @@ -99,6 +99,7 @@ impl AuthCodes { } /// Checks if given hash is correct identifier of `SignerUI` + #[cfg_attr(feature="dev", allow(wrong_self_convention))] pub fn is_valid(&mut self, hash: &H256, time: u64) -> bool { let now = self.now.now(); // check time diff --git a/sync/Cargo.toml b/sync/Cargo.toml index d279291867..95d738eb48 100644 --- a/sync/Cargo.toml +++ b/sync/Cargo.toml @@ -17,7 +17,7 @@ ethcore-network = { path = "../util/network" } ethcore-io = { path = "../util/io" } ethcore = { path = "../ethcore" } rlp = { path = "../util/rlp" } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} log = "0.3" env_logger = "0.3" time = "0.1.34" diff --git a/sync/src/blocks.rs b/sync/src/blocks.rs index db385b9d52..ed608d9c1f 100644 --- a/sync/src/blocks.rs +++ b/sync/src/blocks.rs @@ -114,7 +114,7 @@ impl BlockCollection { /// Insert a set of headers into collection and advance subchain head pointers. pub fn insert_headers(&mut self, headers: Vec) { - for h in headers.into_iter() { + for h in headers { if let Err(e) = self.insert_header(h) { trace!(target: "sync", "Ignored invalid header: {:?}", e); } @@ -125,7 +125,7 @@ impl BlockCollection { /// Insert a collection of block bodies for previously downloaded headers. pub fn insert_bodies(&mut self, bodies: Vec) -> usize { let mut inserted = 0; - for b in bodies.into_iter() { + for b in bodies { if let Err(e) = self.insert_body(b) { trace!(target: "sync", "Ignored invalid body: {:?}", e); } else { @@ -141,7 +141,7 @@ impl BlockCollection { return 0; } let mut inserted = 0; - for r in receipts.into_iter() { + for r in receipts { if let Err(e) = self.insert_receipt(r) { trace!(target: "sync", "Ignored invalid receipt: {:?}", e); } else { diff --git a/sync/src/chain.rs b/sync/src/chain.rs index 916e7424e7..764eccdace 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -209,8 +209,8 @@ pub struct SyncStatus { impl SyncStatus { /// Indicates if snapshot download is in progress pub fn is_snapshot_syncing(&self) -> bool { - self.state == SyncState::SnapshotManifest - || self.state == SyncState::SnapshotData + self.state == SyncState::SnapshotManifest + || self.state == SyncState::SnapshotData || self.state == SyncState::SnapshotWaiting } @@ -381,7 +381,7 @@ impl ChainSync { /// Returns information on peers connections pub fn peers(&self, io: &SyncIo) -> Vec { self.peers.iter() - .filter_map(|(&peer_id, ref peer_data)| + .filter_map(|(&peer_id, peer_data)| io.peer_session_info(peer_id).map(|session_info| PeerInfoDigest { id: session_info.id.map(|id| id.hex()), @@ -453,7 +453,7 @@ impl ChainSync { self.init_downloaders(io.chain()); self.reset_and_continue(io); } - + /// Restart sync after bad block has been detected. May end up re-downloading up to QUEUE_SIZE blocks fn init_downloaders(&mut self, chain: &BlockChainClient) { // Do not assume that the block queue/chain still has our last_imported_block @@ -1017,7 +1017,7 @@ impl ChainSync { return; } let (peer_latest, peer_difficulty, peer_snapshot_number, peer_snapshot_hash) = { - if let Some(ref peer) = self.peers.get_mut(&peer_id) { + if let Some(peer) = self.peers.get_mut(&peer_id) { if peer.asking != PeerAsking::Nothing || !peer.can_sync() { return; } @@ -1142,6 +1142,7 @@ impl ChainSync { } /// Checks if there are blocks fully downloaded that can be imported into the blockchain and does the import. + #[cfg_attr(feature="dev", allow(block_in_if_condition_stmt))] fn collect_blocks(&mut self, io: &mut SyncIo, block_set: BlockSet) { match block_set { BlockSet::NewBlocks => { @@ -1150,9 +1151,9 @@ impl ChainSync { } }, BlockSet::OldBlocks => { - if self.old_blocks.as_mut().map_or(false, |downloader| { downloader.collect_blocks(io, false) == Err(DownloaderImportError::Invalid) }) { - self.restart(io); - } else if self.old_blocks.as_ref().map_or(false, |downloader| { downloader.is_complete() }) { + if self.old_blocks.as_mut().map_or(false, |downloader| { downloader.collect_blocks(io, false) == Err(DownloaderImportError::Invalid) }) { + self.restart(io); + } else if self.old_blocks.as_ref().map_or(false, |downloader| { downloader.is_complete() }) { trace!(target: "sync", "Background block download is complete"); self.old_blocks = None; } @@ -1242,7 +1243,7 @@ impl ChainSync { return true; } } - return false; + false } /// Generic request sender @@ -1370,7 +1371,7 @@ impl ChainSync { while number <= last && count < max_count { if let Some(hdr) = overlay.get(&number) { trace!(target: "sync", "{}: Returning cached fork header", peer_id); - data.extend(hdr); + data.extend_from_slice(hdr); count += 1; } else if let Some(mut hdr) = io.chain().block_header(BlockID::Number(number)) { data.append(&mut hdr); @@ -1707,7 +1708,7 @@ impl ChainSync { self.send_packet(io, *peer_id, NEW_BLOCK_PACKET, rlp); } } - if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + if let Some(ref mut peer) = self.peers.get_mut(peer_id) { peer.latest_hash = chain_info.best_block_hash.clone(); } sent += 1; @@ -1725,7 +1726,7 @@ impl ChainSync { sent += match ChainSync::create_new_hashes_rlp(io.chain(), &last_parent, &chain_info.best_block_hash) { Some(rlp) => { { - if let Some(ref mut peer) = self.peers.get_mut(&peer_id) { + if let Some(ref mut peer) = self.peers.get_mut(peer_id) { peer.latest_hash = chain_info.best_block_hash.clone(); } } @@ -1793,7 +1794,7 @@ impl ChainSync { // Send RLPs let sent = lucky_peers.len(); if sent > 0 { - for (peer_id, rlp) in lucky_peers.into_iter() { + for (peer_id, rlp) in lucky_peers { self.send_packet(io, peer_id, TRANSACTIONS_PACKET, rlp); } diff --git a/util/Cargo.toml b/util/Cargo.toml index c560a6bb57..1b69395954 100644 --- a/util/Cargo.toml +++ b/util/Cargo.toml @@ -23,7 +23,7 @@ rlp = { path = "rlp" } heapsize = { version = "0.3", features = ["unstable"] } itertools = "0.4" sha3 = { path = "sha3" } -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} ethcore-devtools = { path = "../devtools" } libc = "0.2.7" vergen = "0.1" diff --git a/util/network/Cargo.toml b/util/network/Cargo.toml index b5292db60c..8b566fcf20 100644 --- a/util/network/Cargo.toml +++ b/util/network/Cargo.toml @@ -14,7 +14,7 @@ time = "0.1.34" tiny-keccak = "1.0" rust-crypto = "0.2.34" slab = "0.2" -clippy = { version = "0.0.90", optional = true} +clippy = { version = "0.0.96", optional = true} igd = "0.5.0" libc = "0.2.7" parking_lot = "0.3" diff --git a/util/src/journaldb/archivedb.rs b/util/src/journaldb/archivedb.rs index 940f923753..a8800045b1 100644 --- a/util/src/journaldb/archivedb.rs +++ b/util/src/journaldb/archivedb.rs @@ -78,7 +78,7 @@ impl HashDB for ArchiveDB { ret.insert(h, 1); } - for (key, refs) in self.overlay.keys().into_iter() { + for (key, refs) in self.overlay.keys() { let refs = *ret.get(&key).unwrap_or(&0) + refs; ret.insert(key, refs); } @@ -152,7 +152,7 @@ impl JournalDB for ArchiveDB { let mut inserts = 0usize; let mut deletes = 0usize; - for i in self.overlay.drain().into_iter() { + for i in self.overlay.drain() { let (key, (value, rc)) = i; if rc > 0 { batch.put(self.column, &key, &value); @@ -164,7 +164,7 @@ impl JournalDB for ArchiveDB { } } - for (mut key, value) in self.overlay.drain_aux().into_iter() { + for (mut key, value) in self.overlay.drain_aux() { key.push(AUX_FLAG); batch.put(self.column, &key, &value); } @@ -185,7 +185,7 @@ impl JournalDB for ArchiveDB { let mut inserts = 0usize; let mut deletes = 0usize; - for i in self.overlay.drain().into_iter() { + for i in self.overlay.drain() { let (key, (value, rc)) = i; if rc > 0 { if try!(self.backing.get(self.column, &key)).is_some() { @@ -204,7 +204,7 @@ impl JournalDB for ArchiveDB { } } - for (mut key, value) in self.overlay.drain_aux().into_iter() { + for (mut key, value) in self.overlay.drain_aux() { key.push(AUX_FLAG); batch.put(self.column, &key, &value); } diff --git a/util/src/journaldb/earlymergedb.rs b/util/src/journaldb/earlymergedb.rs index 1e782c580b..d17c0ef1e6 100644 --- a/util/src/journaldb/earlymergedb.rs +++ b/util/src/journaldb/earlymergedb.rs @@ -63,9 +63,11 @@ enum RemoveFrom { /// the removals actually take effect. /// /// journal format: +/// ``` /// [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] /// [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] /// [era, n] => [ ... ] +/// ``` /// /// When we make a new commit, we make a journal of all blocks in the recent history and record /// all keys that were inserted and deleted. The journal is ordered by era; multiple commits can @@ -80,6 +82,7 @@ enum RemoveFrom { /// which includes an original key, if any. /// /// The semantics of the `counter` are: +/// ``` /// insert key k: /// counter already contains k: count += 1 /// counter doesn't contain k: @@ -91,9 +94,11 @@ enum RemoveFrom { /// count == 1: remove counter /// count == 0: remove key from backing db /// counter doesn't contain k: remove key from backing db +/// ``` /// /// Practically, this means that for each commit block turning from recent to ancient we do the /// following: +/// ``` /// is_canonical: /// inserts: Ignored (left alone in the backing database). /// deletes: Enacted; however, recent history queue is checked for ongoing references. This is @@ -102,8 +107,9 @@ enum RemoveFrom { /// inserts: Reverted; however, recent history queue is checked for ongoing references. This is /// reduced as a preference to deletion from the backing database. /// deletes: Ignored (they were never inserted). +/// ``` /// -/// TODO: store_reclaim_period +/// TODO: `store_reclaim_period` pub struct EarlyMergeDB { overlay: MemoryDB, backing: Arc, @@ -310,7 +316,7 @@ impl HashDB for EarlyMergeDB { ret.insert(h, 1); } - for (key, refs) in self.overlay.keys().into_iter() { + for (key, refs) in self.overlay.keys() { let refs = *ret.get(&key).unwrap_or(&0) + refs; ret.insert(key, refs); } diff --git a/util/src/journaldb/overlayrecentdb.rs b/util/src/journaldb/overlayrecentdb.rs index 83868d06b6..42fe84557a 100644 --- a/util/src/journaldb/overlayrecentdb.rs +++ b/util/src/journaldb/overlayrecentdb.rs @@ -379,7 +379,7 @@ impl HashDB for OverlayRecentDB { ret.insert(h, 1); } - for (key, refs) in self.transaction_overlay.keys().into_iter() { + for (key, refs) in self.transaction_overlay.keys() { let refs = *ret.get(&key).unwrap_or(&0) + refs; ret.insert(key, refs); } diff --git a/util/src/journaldb/refcounteddb.rs b/util/src/journaldb/refcounteddb.rs index 57621f321f..d63f8837df 100644 --- a/util/src/journaldb/refcounteddb.rs +++ b/util/src/journaldb/refcounteddb.rs @@ -36,12 +36,14 @@ use std::env; /// the removals actually take effect. /// /// journal format: +/// ``` /// [era, 0] => [ id, [insert_0, ...], [remove_0, ...] ] /// [era, 1] => [ id, [insert_0, ...], [remove_0, ...] ] /// [era, n] => [ ... ] +/// ``` /// /// when we make a new commit, we journal the inserts and removes. -/// for each end_era that we journaled that we are no passing by, +/// for each `end_era` that we journaled that we are no passing by, /// we remove all of its removes assuming it is canonical and all /// of its inserts otherwise. // TODO: store last_era, reclaim_period. diff --git a/util/src/migration/mod.rs b/util/src/migration/mod.rs index 80cfa29b60..9c1776699d 100644 --- a/util/src/migration/mod.rs +++ b/util/src/migration/mod.rs @@ -231,7 +231,7 @@ impl Manager { trace!(target: "migration", "Total migrations to execute for version {}: {}", version, migrations.len()); if migrations.is_empty() { return Err(Error::MigrationImpossible) }; - let columns = migrations.iter().nth(0).and_then(|m| m.pre_columns()); + let columns = migrations.get(0).and_then(|m| m.pre_columns()); trace!(target: "migration", "Expecting database to contain {:?} columns", columns); let mut db_config = DatabaseConfig { diff --git a/util/src/overlaydb.rs b/util/src/overlaydb.rs index 9ebc7d1d4b..009ef151ed 100644 --- a/util/src/overlaydb.rs +++ b/util/src/overlaydb.rs @@ -66,7 +66,7 @@ impl OverlayDB { pub fn commit_to_batch(&mut self, batch: &mut DBTransaction) -> Result { let mut ret = 0u32; let mut deletes = 0usize; - for i in self.overlay.drain().into_iter() { + for i in self.overlay.drain() { let (key, (value, rc)) = i; if rc != 0 { match self.payload(&key) { @@ -133,7 +133,7 @@ impl HashDB for OverlayDB { ret.insert(h, r as i32); } - for (key, refs) in self.overlay.keys().into_iter() { + for (key, refs) in self.overlay.keys() { let refs = *ret.get(&key).unwrap_or(&0) + refs; ret.insert(key, refs); } diff --git a/util/src/trie/journal.rs b/util/src/trie/journal.rs index 49bd1bf0f8..55aed70acf 100644 --- a/util/src/trie/journal.rs +++ b/util/src/trie/journal.rs @@ -84,7 +84,7 @@ impl Journal { pub fn apply(self, db: &mut HashDB) -> Score { trace!("applying {:?} changes", self.0.len()); let mut ret = Score{inserts: 0, removes: 0}; - for d in self.0.into_iter() { + for d in self.0 { match d { Operation::Delete(h) => { trace!("TrieDBMut::apply --- {:?}", &h); diff --git a/util/src/trie/triedb.rs b/util/src/trie/triedb.rs index ad1e509a05..cd8c9939a9 100644 --- a/util/src/trie/triedb.rs +++ b/util/src/trie/triedb.rs @@ -87,7 +87,7 @@ impl<'db> TrieDB<'db> { /// Convert a vector of hashes to a hashmap of hash to occurrences. pub fn to_map(hashes: Vec) -> HashMap { let mut r: HashMap = HashMap::new(); - for h in hashes.into_iter() { + for h in hashes { *r.entry(h).or_insert(0) += 1; } r @@ -97,7 +97,7 @@ impl<'db> TrieDB<'db> { /// trie. pub fn db_items_remaining(&self) -> super::Result> { let mut ret = self.db.keys(); - for (k, v) in Self::to_map(try!(self.keys())).into_iter() { + for (k, v) in Self::to_map(try!(self.keys())) { let keycount = *ret.get(&k).unwrap_or(&0); match keycount <= v as i32 { true => ret.remove(&k), -- GitLab From 6c79decddaca40ee577421415c58dc1a3c02f264 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 06:30:05 +0000 Subject: [PATCH 220/393] [ci skip] js-precompiled 20161027-062905 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a58a426a4f..aea5505032 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#9d77b0117c2fa0b17dd381853b0020b1fdc96855" +source = "git+https://github.com/ethcore/js-precompiled.git#a27ea0e6a88c8f0e6a1556819447f9e946549552" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From ae46361b3302f35d3e11579a9707841435f07440 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 27 Oct 2016 13:42:09 +0700 Subject: [PATCH 221/393] Update gitlab-ci fix windows HOST_CC HOST_CXX -> x86_64-pc-windows-msvc --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 17907b49ab..46fddb5798 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -311,6 +311,8 @@ windows: - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off -D warnings + - set HOST_CC=x86_64-pc-windows-msvc + - set HOST_CXX=x86_64-pc-windows-msvc - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - curl -sL --url "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll -- GitLab From 8e6ca7fc613c019817a8bf79bc7e547f3e421f7d Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 27 Oct 2016 13:45:16 +0700 Subject: [PATCH 222/393] Update gitlab-ci remove armv6 from master [ci skip] --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 46fddb5798..17d6fe9858 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -214,7 +214,6 @@ linux-armv6: stage: build image: ethcore/rust-armv6:latest only: - - master - beta - tags - stable -- GitLab From 005bdd5d0737a5550771926558a339c439668d4c Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 06:55:53 +0000 Subject: [PATCH 223/393] [ci skip] js-precompiled 20161027-065456 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index aea5505032..7cbf8df184 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#a27ea0e6a88c8f0e6a1556819447f9e946549552" +source = "git+https://github.com/ethcore/js-precompiled.git#62f407081dfa20ad534b9ee555494978b76211b5" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 3347d590427346728a5d3593935c58fb937d04d6 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 27 Oct 2016 14:00:05 +0700 Subject: [PATCH 224/393] Update gitlab-ci add to arm* export HOST_CC=gcc export HOST_CXX=g++ --- .gitlab-ci.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 17d6fe9858..2a456e9eb8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,8 +6,6 @@ variables: SIMPLECOV: "true" RUST_BACKTRACE: "1" RUSTFLAGS: "-D warnings" - HOST_CC: "gcc" - HOST_CXX: "g++" cache: key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" untracked: true @@ -145,6 +143,8 @@ linux-armv7: script: - export CC=arm-linux-gnueabihf-gcc - export CXX=arm-linux-gnueabihf-g++ + - export HOST_CC=gcc + - export HOST_CXX=g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.armv7-unknown-linux-gnueabihf]" >> .cargo/config @@ -183,6 +183,8 @@ linux-arm: script: - export CC=arm-linux-gnueabihf-gcc - export CXX=arm-linux-gnueabihf-g++ + - export HOST_CC=gcc + - export HOST_CXX=g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.arm-unknown-linux-gnueabihf]" >> .cargo/config @@ -220,6 +222,8 @@ linux-armv6: script: - export CC=arm-linux-gnueabi-gcc - export CXX=arm-linux-gnueabi-g++ + - export HOST_CC=gcc + - export HOST_CXX=g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.arm-unknown-linux-gnueabi]" >> .cargo/config @@ -251,6 +255,8 @@ linux-aarch64: script: - export CC=aarch64-linux-gnu-gcc - export CXX=aarch64-linux-gnu-g++ + - export HOST_CC=gcc + - export HOST_CXX=g++ - rm -rf .cargo - mkdir -p .cargo - echo "[target.aarch64-unknown-linux-gnu]" >> .cargo/config @@ -310,8 +316,6 @@ windows: - set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64 - set RUST_BACKTRACE=1 - set RUSTFLAGS=%RUSTFLAGS% -Zorbit=off -D warnings - - set HOST_CC=x86_64-pc-windows-msvc - - set HOST_CXX=x86_64-pc-windows-msvc - rustup default stable-x86_64-pc-windows-msvc - cargo build --release --verbose - curl -sL --url "https://github.com/ethcore/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll -- GitLab From 02b6d3943dc3f20e2646d30640ac2b84dfd2888d Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 07:09:06 +0000 Subject: [PATCH 225/393] [ci skip] js-precompiled 20161027-070811 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 7cbf8df184..4fbed7ddbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#62f407081dfa20ad534b9ee555494978b76211b5" +source = "git+https://github.com/ethcore/js-precompiled.git#4fdd06b96f86061ee57bc4ca81ddf314ba2931c4" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From bdc372462afc63f88711e77f5bc40d51f8fc4cbb Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 27 Oct 2016 13:49:44 +0200 Subject: [PATCH 226/393] Change sync protocol ID (#2912) --- sync/src/api.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sync/src/api.rs b/sync/src/api.rs index b227dcd605..67a81237a3 100644 --- a/sync/src/api.rs +++ b/sync/src/api.rs @@ -34,7 +34,7 @@ use std::str::FromStr; use parking_lot::RwLock; use chain::{ETH_PACKET_COUNT, SNAPSHOT_SYNC_PACKET_COUNT}; -pub const WARP_SYNC_PROTOCOL_ID: ProtocolId = *b"bam"; +pub const WARP_SYNC_PROTOCOL_ID: ProtocolId = *b"par"; /// Sync configuration #[derive(Debug, Clone, Copy)] -- GitLab From 176dc0e945696eeeeeb33ee997de33f64c4fd312 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 11:51:52 +0000 Subject: [PATCH 227/393] [ci skip] js-precompiled 20161027-115054 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 4fbed7ddbb..cad3302664 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#4fdd06b96f86061ee57bc4ca81ddf314ba2931c4" +source = "git+https://github.com/ethcore/js-precompiled.git#c1dc23ab7a8a01aee8587915895fd0125695f775" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 3edd9e4bee49af6ab72c995f3d900266862ea2c9 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 27 Oct 2016 15:25:54 +0200 Subject: [PATCH 228/393] Fixed GetNodeData output (#2892) --- sync/src/chain.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sync/src/chain.rs b/sync/src/chain.rs index 764eccdace..d18adb6eaf 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -1428,16 +1428,18 @@ impl ChainSync { } count = min(count, MAX_NODE_DATA_TO_SEND); let mut added = 0usize; - let mut data = Bytes::new(); + let mut data = Vec::new(); for i in 0..count { - if let Some(mut hdr) = io.chain().state_data(&try!(r.val_at::(i))) { - data.append(&mut hdr); + if let Some(hdr) = io.chain().state_data(&try!(r.val_at::(i))) { + data.push(hdr); added += 1; } } trace!(target: "sync", "{} -> GetNodeData: return {} entries", peer_id, added); let mut rlp = RlpStream::new_list(added); - rlp.append_raw(&data, added); + for d in data.into_iter() { + rlp.append(&d); + } Ok(Some((NODE_DATA_PACKET, rlp))) } @@ -2026,7 +2028,9 @@ mod tests { assert!(rlp_result.is_some()); // the length of one rlp-encoded hashe - assert_eq!(34, rlp_result.unwrap().1.out().len()); + let rlp = rlp_result.unwrap().1.out(); + let rlp = Rlp::new(&rlp); + assert_eq!(1, rlp.item_count()); io.sender = Some(2usize); -- GitLab From d315ec29e190dc14d628aaa0882d39533f0bb13f Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 27 Oct 2016 16:26:29 +0300 Subject: [PATCH 229/393] Apply pending block details on commit (#2254) * failing test * Cache pending details * [ci skip] updated comment --- ethcore/src/blockchain/blockchain.rs | 30 +++++++++++++++++----------- ethcore/src/client/client.rs | 30 ++++++++++++++++++++++++++++ ethcore/src/tests/helpers.rs | 9 +++++++-- 3 files changed, 55 insertions(+), 14 deletions(-) diff --git a/ethcore/src/blockchain/blockchain.rs b/ethcore/src/blockchain/blockchain.rs index 32d42fe317..282039c16b 100644 --- a/ethcore/src/blockchain/blockchain.rs +++ b/ethcore/src/blockchain/blockchain.rs @@ -196,6 +196,7 @@ pub struct BlockChain { pending_best_block: RwLock>, pending_block_hashes: RwLock>, + pending_block_details: RwLock>, pending_transaction_addresses: RwLock>>, } @@ -439,6 +440,7 @@ impl BlockChain { cache_man: Mutex::new(cache_man), pending_best_block: RwLock::new(None), pending_block_hashes: RwLock::new(HashMap::new()), + pending_block_details: RwLock::new(HashMap::new()), pending_transaction_addresses: RwLock::new(HashMap::new()), }; @@ -895,17 +897,6 @@ impl BlockChain { /// Prepares extras update. fn prepare_update(&self, batch: &mut DBTransaction, update: ExtrasUpdate, is_best: bool) { - { - let block_hashes: Vec<_> = update.block_details.keys().cloned().collect(); - - let mut write_details = self.block_details.write(); - batch.extend_with_cache(db::COL_EXTRA, &mut *write_details, update.block_details, CacheUpdatePolicy::Overwrite); - - let mut cache_man = self.cache_man.lock(); - for hash in block_hashes { - cache_man.note_used(CacheID::BlockDetails(hash)); - } - } { let mut write_receipts = self.block_receipts.write(); @@ -917,7 +908,7 @@ impl BlockChain { batch.extend_with_cache(db::COL_EXTRA, &mut *write_blocks_blooms, update.blocks_blooms, CacheUpdatePolicy::Remove); } - // These cached values must be updated last with all three locks taken to avoid + // These cached values must be updated last with all four locks taken to avoid // cache decoherence { let mut best_block = self.pending_best_block.write(); @@ -935,8 +926,10 @@ impl BlockChain { }, } let mut write_hashes = self.pending_block_hashes.write(); + let mut write_details = self.pending_block_details.write(); let mut write_txs = self.pending_transaction_addresses.write(); + batch.extend_with_cache(db::COL_EXTRA, &mut *write_details, update.block_details, CacheUpdatePolicy::Overwrite); batch.extend_with_cache(db::COL_EXTRA, &mut *write_hashes, update.block_hashes, CacheUpdatePolicy::Overwrite); batch.extend_with_option_cache(db::COL_EXTRA, &mut *write_txs, update.transactions_addresses, CacheUpdatePolicy::Overwrite); } @@ -946,9 +939,11 @@ impl BlockChain { pub fn commit(&self) { let mut pending_best_block = self.pending_best_block.write(); let mut pending_write_hashes = self.pending_block_hashes.write(); + let mut pending_block_details = self.pending_block_details.write(); let mut pending_write_txs = self.pending_transaction_addresses.write(); let mut best_block = self.best_block.write(); + let mut write_block_details = self.block_details.write(); let mut write_hashes = self.block_hashes.write(); let mut write_txs = self.transaction_addresses.write(); // update best block @@ -961,9 +956,11 @@ impl BlockChain { let pending_hashes_keys: Vec<_> = pending_write_hashes.keys().cloned().collect(); let enacted_txs_keys: Vec<_> = enacted_txs.keys().cloned().collect(); + let pending_block_hashes: Vec<_> = pending_block_details.keys().cloned().collect(); write_hashes.extend(mem::replace(&mut *pending_write_hashes, HashMap::new())); write_txs.extend(enacted_txs.into_iter().map(|(k, v)| (k, v.expect("Transactions were partitioned; qed")))); + write_block_details.extend(mem::replace(&mut *pending_block_details, HashMap::new())); for hash in retracted_txs.keys() { write_txs.remove(hash); @@ -977,6 +974,10 @@ impl BlockChain { for hash in enacted_txs_keys { cache_man.note_used(CacheID::TransactionAddresses(hash)); } + + for hash in pending_block_hashes { + cache_man.note_used(CacheID::BlockDetails(hash)); + } } /// Iterator that lists `first` and then all of `first`'s ancestors, by hash. @@ -1297,6 +1298,11 @@ impl BlockChain { ancient_block_number: best_ancient_block.as_ref().map(|b| b.number), } } + + #[cfg(test)] + pub fn db(&self) -> &Arc { + &self.db + } } #[cfg(test)] diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index cb963dadc0..b59d892c53 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -1216,3 +1216,33 @@ impl MayPanic for Client { self.panic_handler.on_panic(closure); } } + + +#[test] +fn should_not_cache_details_before_commit() { + use tests::helpers::*; + use std::thread; + use std::time::Duration; + use std::sync::atomic::{AtomicBool, Ordering}; + + let client = generate_dummy_client(0); + let genesis = client.chain_info().best_block_hash; + let (new_hash, new_block) = get_good_dummy_block_hash(); + + let go = { + // Separate thread uncommited transaction + let go = Arc::new(AtomicBool::new(false)); + let go_thread = go.clone(); + let another_client = client.reference().clone(); + thread::spawn(move || { + let mut batch = DBTransaction::new(&*another_client.chain.read().db().clone()); + another_client.chain.read().insert_block(&mut batch, &new_block, Vec::new()); + go_thread.store(true, Ordering::SeqCst); + }); + go + }; + + while !go.load(Ordering::SeqCst) { thread::park_timeout(Duration::from_millis(5)); } + + assert!(client.tree_route(&genesis, &new_hash).is_none()); +} diff --git a/ethcore/src/tests/helpers.rs b/ethcore/src/tests/helpers.rs index 7b82647203..7b952b30ce 100644 --- a/ethcore/src/tests/helpers.rs +++ b/ethcore/src/tests/helpers.rs @@ -388,7 +388,7 @@ pub fn get_good_dummy_block_fork_seq(start_number: usize, count: usize, parent_h r } -pub fn get_good_dummy_block() -> Bytes { +pub fn get_good_dummy_block_hash() -> (H256, Bytes) { let mut block_header = Header::new(); let test_spec = get_test_spec(); let test_engine = &test_spec.engine; @@ -399,7 +399,12 @@ pub fn get_good_dummy_block() -> Bytes { block_header.set_parent_hash(test_spec.genesis_header().hash()); block_header.set_state_root(test_spec.genesis_header().state_root().clone()); - create_test_block(&block_header) + (block_header.hash(), create_test_block(&block_header)) +} + +pub fn get_good_dummy_block() -> Bytes { + let (_, bytes) = get_good_dummy_block_hash(); + bytes } pub fn get_bad_state_dummy_block() -> Bytes { -- GitLab From 123b75179c2b047a08093ce9947ddd45547fd880 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 13:40:42 +0000 Subject: [PATCH 230/393] [ci skip] js-precompiled 20161027-133941 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index cad3302664..9bf28cca90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#c1dc23ab7a8a01aee8587915895fd0125695f775" +source = "git+https://github.com/ethcore/js-precompiled.git#3fd329340b2753da0f9762d45e65960878c5d008" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 6978042c16e26112214f89aa97b6db7ae59fa479 Mon Sep 17 00:00:00 2001 From: arkpar Date: Thu, 27 Oct 2016 16:20:11 +0200 Subject: [PATCH 231/393] Packet id tracing --- util/network/src/session.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/network/src/session.rs b/util/network/src/session.rs index 8d5578e83f..6d60095352 100644 --- a/util/network/src/session.rs +++ b/util/network/src/session.rs @@ -395,7 +395,7 @@ impl Session { PACKET_PEERS => Ok(SessionData::None), PACKET_USER ... PACKET_LAST => { let mut i = 0usize; - while packet_id > self.info.capabilities[i].id_offset + self.info.capabilities[i].packet_count { + while packet_id >= self.info.capabilities[i].id_offset + self.info.capabilities[i].packet_count { i += 1; if i == self.info.capabilities.len() { debug!(target: "network", "Unknown packet: {:?}", packet_id); @@ -406,6 +406,7 @@ impl Session { // map to protocol let protocol = self.info.capabilities[i].protocol; let pid = packet_id - self.info.capabilities[i].id_offset; + trace!(target: "network", "Packet {} mapped to {:?}:{}, i={}, capabilities={:?}", packet_id, protocol, pid, i, self.info.capabilities); Ok(SessionData::Packet { data: packet.data, protocol: protocol, packet_id: pid } ) }, _ => { -- GitLab From 7c6112e9f091fb525f5960249b2b66f587fe9c02 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 14:33:50 +0000 Subject: [PATCH 232/393] [ci skip] js-precompiled 20161027-143256 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 9bf28cca90..14a8e1f015 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#3fd329340b2753da0f9762d45e65960878c5d008" +source = "git+https://github.com/ethcore/js-precompiled.git#10c0948cd0986df03ba9b2e5fae928f1a5618c9a" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 8cef5177885a94d044734a09352708b91ed3cca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 16:56:18 +0200 Subject: [PATCH 233/393] Fixing config values for pruning_history (#2918) --- parity/cli/mod.rs | 14 ++++++++++++++ parity/cli/usage.txt | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 27e0cb4dce..9290ab0f96 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -445,6 +445,20 @@ mod tests { assert_eq!(args.flag_chain, "xyz".to_owned()); } + #[test] + fn should_use_config_if_cli_is_missing() { + let mut config = Config::default(); + let mut footprint = Footprint::default(); + footprint.pruning_history = Some(128); + config.footprint = Some(footprint); + + // when + let args = Args::parse_with_config(&["parity"], config).unwrap(); + + // then + assert_eq!(args.flag_pruning_history, 128); + } + #[test] fn should_parse_full_config() { // given diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index af8e83f0e3..bebdafd975 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -225,7 +225,7 @@ Footprint Options: auto - use the method most recently synced or default to fast if none synced (default: {flag_pruning}). --pruning-history NUM Set a number of recent states to keep when pruning - is active. [default: {flag_pruning_history}]. + is active. (default: {flag_pruning_history}). --cache-size-db MB Override database cache size (default: {flag_cache_size_db}). --cache-size-blocks MB Specify the prefered size of the blockchain cache in megabytes (default: {flag_cache_size_blocks}). -- GitLab From bb14eea66cda190b49eaab2f4bc58217089e9a3a Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 15:09:11 +0000 Subject: [PATCH 234/393] [ci skip] js-precompiled 20161027-150816 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 14a8e1f015..df75941da3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#10c0948cd0986df03ba9b2e5fae928f1a5618c9a" +source = "git+https://github.com/ethcore/js-precompiled.git#0668ff1d25ddd1db11f44a1b1e6d050e41b3841b" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 90aa2fefc2382d8a34fb643072f524dca7a47825 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Thu, 27 Oct 2016 23:13:51 +0700 Subject: [PATCH 235/393] Update gitlab-ci fix darwin md5 --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a456e9eb8..3d822a9d50 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -293,6 +293,7 @@ darwin: - stable script: - cargo build --release --verbose + - rm -rf parity.md5 - md5sum target/release/parity >> parity.md5 - aws configure set aws_access_key_id $s3_key - aws configure set aws_secret_access_key $s3_secret -- GitLab From abb1da5f4b8b02ce164a6dd5459bb7c5883ce8f6 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 16:49:18 +0000 Subject: [PATCH 236/393] [ci skip] js-precompiled 20161027-164817 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index df75941da3..71684d5c4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#0668ff1d25ddd1db11f44a1b1e6d050e41b3841b" +source = "git+https://github.com/ethcore/js-precompiled.git#0053be493c742cbd7332ba647b3c84d35327abd7" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 8dff4012a68c35fe50450364b617d7c1a7045c17 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 27 Oct 2016 19:26:34 +0200 Subject: [PATCH 237/393] Personal split (#2879) * Split personal namespace into Safe and Unsafe part * Re-add api.personal.accountsInfo() calls to dapps * Removing listGethAccounts from safe personal --- .../basiccoin/Application/application.js | 4 +- .../dapps/gavcoin/Application/application.js | 2 +- js/src/dapps/githubhint/services.js | 2 +- js/src/dapps/registry/addresses/actions.js | 12 +- js/src/dapps/signaturereg/services.js | 2 +- js/src/dapps/tokenreg/Accounts/actions.js | 2 +- parity/cli/config.full.toml | 4 +- parity/cli/mod.rs | 8 +- parity/cli/usage.txt | 2 +- parity/rpc_apis.rs | 27 ++- rpc/src/v1/impls/mod.rs | 2 + rpc/src/v1/impls/personal.rs | 154 +------------- rpc/src/v1/impls/personal_accounts.rs | 194 ++++++++++++++++++ rpc/src/v1/mod.rs | 2 +- rpc/src/v1/tests/mocked/personal.rs | 6 +- rpc/src/v1/traits/mod.rs | 2 +- rpc/src/v1/traits/personal.rs | 50 +++-- 17 files changed, 276 insertions(+), 199 deletions(-) create mode 100644 rpc/src/v1/impls/personal_accounts.rs diff --git a/js/src/dapps/basiccoin/Application/application.js b/js/src/dapps/basiccoin/Application/application.js index d84085c983..4ab97ab6c7 100644 --- a/js/src/dapps/basiccoin/Application/application.js +++ b/js/src/dapps/basiccoin/Application/application.js @@ -16,7 +16,7 @@ import React, { Component, PropTypes } from 'react'; -// import { api } from '../parity'; +import { api } from '../parity'; import { attachInstances } from '../services'; import Header from './Header'; @@ -83,7 +83,7 @@ export default class Application extends Component { Promise .all([ attachInstances(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]) .then(([{ managerInstance, registryInstance, tokenregInstance }, accountsInfo]) => { accountsInfo = accountsInfo || {}; diff --git a/js/src/dapps/gavcoin/Application/application.js b/js/src/dapps/gavcoin/Application/application.js index 29c86c78d1..d5d26bc3e3 100644 --- a/js/src/dapps/gavcoin/Application/application.js +++ b/js/src/dapps/gavcoin/Application/application.js @@ -206,7 +206,7 @@ export default class Application extends Component { .all([ registry.getAddress.call({}, [api.util.sha3('gavcoin'), 'A']), api.eth.accounts(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]); }) .then(([address, addresses, infos]) => { diff --git a/js/src/dapps/githubhint/services.js b/js/src/dapps/githubhint/services.js index 1904be2d79..b7676d5f51 100644 --- a/js/src/dapps/githubhint/services.js +++ b/js/src/dapps/githubhint/services.js @@ -29,7 +29,7 @@ export function attachInterface () { .all([ registry.getAddress.call({}, [api.util.sha3('githubhint'), 'A']), api.eth.accounts(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]); }) .then(([address, addresses, accountsInfo]) => { diff --git a/js/src/dapps/registry/addresses/actions.js b/js/src/dapps/registry/addresses/actions.js index dfd7d16a35..17975f9e65 100644 --- a/js/src/dapps/registry/addresses/actions.js +++ b/js/src/dapps/registry/addresses/actions.js @@ -22,12 +22,16 @@ export const fetch = () => (dispatch) => { return Promise .all([ api.eth.accounts(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]) .then(([ accounts, data ]) => { - const addresses = accounts.map((address) => { - return { address, isAccount: true }; - }); + data = data || {}; + const addresses = Object.keys(data) + .filter((address) => data[address] && !data[address].meta.deleted) + .map((address) => ({ + ...data[address], address, + isAccount: accounts.includes(address) + })); dispatch(set(addresses)); }) .catch((error) => { diff --git a/js/src/dapps/signaturereg/services.js b/js/src/dapps/signaturereg/services.js index 7219ddff19..cab324f7eb 100644 --- a/js/src/dapps/signaturereg/services.js +++ b/js/src/dapps/signaturereg/services.js @@ -50,7 +50,7 @@ export function attachInterface (callback) { .all([ registry.getAddress.call({}, [api.util.sha3('signaturereg'), 'A']), api.eth.accounts(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]); }) .then(([address, addresses, accountsInfo]) => { diff --git a/js/src/dapps/tokenreg/Accounts/actions.js b/js/src/dapps/tokenreg/Accounts/actions.js index f093b53007..f501399c2d 100644 --- a/js/src/dapps/tokenreg/Accounts/actions.js +++ b/js/src/dapps/tokenreg/Accounts/actions.js @@ -38,7 +38,7 @@ export const loadAccounts = () => (dispatch) => { Promise .all([ api.eth.accounts(), - null // api.personal.accountsInfo() + api.personal.accountsInfo() ]) .then(([ accounts, accountsInfo ]) => { accountsInfo = accountsInfo || {}; diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index fd2e11f984..4d1d480256 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -41,13 +41,13 @@ disable = false port = 8545 interface = "local" cors = "null" -apis = ["web3", "eth", "net", "ethcore", "traces", "rpc"] +apis = ["web3", "eth", "net", "ethcore", "traces", "rpc", "personal_safe"] hosts = ["none"] [ipc] disable = false path = "$HOME/.parity/jsonrpc.ipc" -apis = ["web3", "eth", "net", "ethcore", "traces", "rpc"] +apis = ["web3", "eth", "net", "ethcore", "traces", "rpc", "personal_safe"] [dapps] disable = false diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 9290ab0f96..68411414fd 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -145,7 +145,7 @@ usage! { or |c: &Config| otry!(c.rpc).interface.clone(), flag_jsonrpc_cors: Option = None, or |c: &Config| otry!(c.rpc).cors.clone().map(Some), - flag_jsonrpc_apis: String = "web3,eth,net,ethcore,traces,rpc", + flag_jsonrpc_apis: String = "web3,eth,net,ethcore,traces,rpc,personal_safe", or |c: &Config| otry!(c.rpc).apis.clone().map(|vec| vec.join(",")), flag_jsonrpc_hosts: String = "none", or |c: &Config| otry!(c.rpc).hosts.clone().map(|vec| vec.join(",")), @@ -155,7 +155,7 @@ usage! { or |c: &Config| otry!(c.ipc).disable.clone(), flag_ipc_path: String = "$HOME/.parity/jsonrpc.ipc", or |c: &Config| otry!(c.ipc).path.clone(), - flag_ipc_apis: String = "web3,eth,net,ethcore,traces,rpc", + flag_ipc_apis: String = "web3,eth,net,ethcore,traces,rpc,personal_safe", or |c: &Config| otry!(c.ipc).apis.clone().map(|vec| vec.join(",")), // DAPPS @@ -534,13 +534,13 @@ mod tests { flag_jsonrpc_port: 8545u16, flag_jsonrpc_interface: "local".into(), flag_jsonrpc_cors: Some("null".into()), - flag_jsonrpc_apis: "web3,eth,net,ethcore,traces,rpc".into(), + flag_jsonrpc_apis: "web3,eth,net,ethcore,traces,rpc,personal_safe".into(), flag_jsonrpc_hosts: "none".into(), // IPC flag_no_ipc: false, flag_ipc_path: "$HOME/.parity/jsonrpc.ipc".into(), - flag_ipc_apis: "web3,eth,net,ethcore,traces,rpc".into(), + flag_ipc_apis: "web3,eth,net,ethcore,traces,rpc,personal_safe".into(), // DAPPS flag_no_dapps: false, diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index bebdafd975..d96d875cfa 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -107,7 +107,7 @@ API and Console Options: --jsonrpc-apis APIS Specify the APIs available through the JSONRPC interface. APIS is a comma-delimited list of API name. Possible name are web3, eth, net, personal, - ethcore, ethcore_set, traces, rpc. + ethcore, ethcore_set, traces, rpc, personal_safe. (default: {flag_jsonrpc_apis}). --jsonrpc-hosts HOSTS List of allowed Host header values. This option will validate the Host header sent by the browser, it diff --git a/parity/rpc_apis.rs b/parity/rpc_apis.rs index f6ccf16a38..491f58a1b0 100644 --- a/parity/rpc_apis.rs +++ b/parity/rpc_apis.rs @@ -33,7 +33,8 @@ pub enum Api { Web3, Net, Eth, - Personal, + PersonalSafe, + PersonalAccounts, Signer, Ethcore, EthcoreSet, @@ -51,7 +52,8 @@ impl FromStr for Api { "web3" => Ok(Web3), "net" => Ok(Net), "eth" => Ok(Eth), - "personal" => Ok(Personal), + "personal" => Ok(PersonalAccounts), + "personal_safe" => Ok(PersonalSafe), "signer" => Ok(Signer), "ethcore" => Ok(Ethcore), "ethcore_set" => Ok(EthcoreSet), @@ -114,7 +116,8 @@ fn to_modules(apis: &[Api]) -> BTreeMap { Api::Web3 => ("web3", "1.0"), Api::Net => ("net", "1.0"), Api::Eth => ("eth", "1.0"), - Api::Personal => ("personal", "1.0"), + Api::PersonalSafe => ("personal_safe", "1.0"), + Api::PersonalAccounts => ("personal", "1.0"), Api::Signer => ("signer", "1.0"), Api::Ethcore => ("ethcore", "1.0"), Api::EthcoreSet => ("ethcore_set", "1.0"), @@ -131,11 +134,11 @@ impl ApiSet { match *self { ApiSet::List(ref apis) => apis.clone(), ApiSet::UnsafeContext => { - vec![Api::Web3, Api::Net, Api::Eth, Api::Ethcore, Api::Traces, Api::Rpc] + vec![Api::Web3, Api::Net, Api::Eth, Api::Ethcore, Api::Traces, Api::Rpc, Api::PersonalSafe] .into_iter().collect() }, ApiSet::SafeContext => { - vec![Api::Web3, Api::Net, Api::Eth, Api::Personal, Api::Signer, Api::Ethcore, Api::EthcoreSet, Api::Traces, Api::Rpc] + vec![Api::Web3, Api::Net, Api::Eth, Api::PersonalAccounts, Api::PersonalSafe, Api::Signer, Api::Ethcore, Api::EthcoreSet, Api::Traces, Api::Rpc] .into_iter().collect() }, } @@ -178,8 +181,11 @@ pub fn setup_rpc(server: T, deps: Arc, apis: ApiSet server.add_delegate(EthSigningUnsafeClient::new(&deps.client, &deps.secret_store, &deps.miner).to_delegate()); } }, - Api::Personal => { - server.add_delegate(PersonalClient::new(&deps.secret_store, &deps.client, &deps.miner, deps.geth_compatibility).to_delegate()); + Api::PersonalAccounts => { + server.add_delegate(PersonalAccountsClient::new(&deps.secret_store, &deps.client, &deps.miner, deps.geth_compatibility).to_delegate()); + }, + Api::PersonalSafe => { + server.add_delegate(PersonalClient::new(&deps.secret_store, &deps.client).to_delegate()); }, Api::Signer => { server.add_delegate(SignerClient::new(&deps.secret_store, &deps.client, &deps.miner, &deps.signer_service).to_delegate()); @@ -224,7 +230,8 @@ mod test { assert_eq!(Api::Web3, "web3".parse().unwrap()); assert_eq!(Api::Net, "net".parse().unwrap()); assert_eq!(Api::Eth, "eth".parse().unwrap()); - assert_eq!(Api::Personal, "personal".parse().unwrap()); + assert_eq!(Api::PersonalAccounts, "personal".parse().unwrap()); + assert_eq!(Api::PersonalSafe, "personal_safe".parse().unwrap()); assert_eq!(Api::Signer, "signer".parse().unwrap()); assert_eq!(Api::Ethcore, "ethcore".parse().unwrap()); assert_eq!(Api::EthcoreSet, "ethcore_set".parse().unwrap()); @@ -245,14 +252,14 @@ mod test { #[test] fn test_api_set_unsafe_context() { - let expected = vec![Api::Web3, Api::Net, Api::Eth, Api::Ethcore, Api::Traces, Api::Rpc] + let expected = vec![Api::Web3, Api::Net, Api::Eth, Api::Ethcore, Api::Traces, Api::Rpc, Api::PersonalSafe] .into_iter().collect(); assert_eq!(ApiSet::UnsafeContext.list_apis(), expected); } #[test] fn test_api_set_safe_context() { - let expected = vec![Api::Web3, Api::Net, Api::Eth, Api::Personal, Api::Signer, Api::Ethcore, Api::EthcoreSet, Api::Traces, Api::Rpc] + let expected = vec![Api::Web3, Api::Net, Api::Eth, Api::PersonalAccounts, Api::PersonalSafe, Api::Signer, Api::Ethcore, Api::EthcoreSet, Api::Traces, Api::Rpc] .into_iter().collect(); assert_eq!(ApiSet::SafeContext.list_apis(), expected); } diff --git a/rpc/src/v1/impls/mod.rs b/rpc/src/v1/impls/mod.rs index bf2013d99a..c108f0b6b3 100644 --- a/rpc/src/v1/impls/mod.rs +++ b/rpc/src/v1/impls/mod.rs @@ -32,6 +32,7 @@ mod ethcore; mod ethcore_set; mod net; mod personal; +mod personal_accounts; mod personal_signer; mod rpc; mod traces; @@ -43,6 +44,7 @@ pub use self::eth_filter::EthFilterClient; pub use self::eth_signing::{EthSigningUnsafeClient, EthSigningQueueClient}; pub use self::net::NetClient; pub use self::personal::PersonalClient; +pub use self::personal_accounts::PersonalAccountsClient; pub use self::personal_signer::SignerClient; pub use self::ethcore::EthcoreClient; pub use self::ethcore_set::EthcoreSetClient; diff --git a/rpc/src/v1/impls/personal.rs b/rpc/src/v1/impls/personal.rs index 0d6b632401..aacf90c912 100644 --- a/rpc/src/v1/impls/personal.rs +++ b/rpc/src/v1/impls/personal.rs @@ -17,34 +17,26 @@ //! Account management (personal) rpc implementation use std::sync::{Arc, Weak}; use std::collections::{BTreeMap}; -use util::{Address}; use jsonrpc_core::*; -use ethkey::{Brain, Generator}; use v1::traits::Personal; -use v1::types::{H160 as RpcH160, TransactionRequest}; +use v1::types::{H160 as RpcH160}; use v1::helpers::errors; use v1::helpers::params::expect_no_params; -use v1::helpers::dispatch::sign_and_dispatch; use ethcore::account_provider::AccountProvider; use ethcore::client::MiningBlockChainClient; -use ethcore::miner::MinerService; /// Account management (personal) rpc implementation. -pub struct PersonalClient where C: MiningBlockChainClient, M: MinerService { +pub struct PersonalClient where C: MiningBlockChainClient { accounts: Weak, client: Weak, - miner: Weak, - allow_perm_unlock: bool, } -impl PersonalClient where C: MiningBlockChainClient, M: MinerService { +impl PersonalClient where C: MiningBlockChainClient { /// Creates new PersonalClient - pub fn new(store: &Arc, client: &Arc, miner: &Arc, allow_perm_unlock: bool) -> Self { + pub fn new(store: &Arc, client: &Arc) -> Self { PersonalClient { accounts: Arc::downgrade(store), client: Arc::downgrade(client), - miner: Arc::downgrade(miner), - allow_perm_unlock: allow_perm_unlock, } } @@ -55,7 +47,7 @@ impl PersonalClient where C: MiningBlockChainClient, M: MinerService } } -impl Personal for PersonalClient where C: MiningBlockChainClient, M: MinerService { +impl Personal for PersonalClient where C: MiningBlockChainClient { fn accounts(&self, params: Params) -> Result { try!(self.active()); @@ -66,125 +58,6 @@ impl Personal for PersonalClient where C: MiningBl Ok(to_value(&accounts.into_iter().map(Into::into).collect::>())) } - fn new_account(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(String, )>(params).and_then( - |(pass, )| { - let store = take_weak!(self.accounts); - match store.new_account(&pass) { - Ok(address) => Ok(to_value(&RpcH160::from(address))), - Err(e) => Err(errors::account("Could not create account.", e)), - } - } - ) - } - - fn new_account_from_phrase(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(String, String, )>(params).and_then( - |(phrase, pass, )| { - let store = take_weak!(self.accounts); - match store.insert_account(*Brain::new(phrase).generate().unwrap().secret(), &pass) { - Ok(address) => Ok(to_value(&RpcH160::from(address))), - Err(e) => Err(errors::account("Could not create account.", e)), - } - } - ) - } - - fn new_account_from_wallet(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(String, String, )>(params).and_then( - |(json, pass, )| { - let store = take_weak!(self.accounts); - match store.import_presale(json.as_bytes(), &pass).or_else(|_| store.import_wallet(json.as_bytes(), &pass)) { - Ok(address) => Ok(to_value(&RpcH160::from(address))), - Err(e) => Err(errors::account("Could not create account.", e)), - } - } - ) - } - - fn unlock_account(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(RpcH160, String, Option)>(params).and_then( - |(account, account_pass, duration)| { - let account: Address = account.into(); - let store = take_weak!(self.accounts); - let r = match (self.allow_perm_unlock, duration) { - (false, _) => store.unlock_account_temporarily(account, account_pass), - (true, Some(0)) => store.unlock_account_permanently(account, account_pass), - (true, Some(d)) => store.unlock_account_timed(account, account_pass, d as u32 * 1000), - (true, None) => store.unlock_account_timed(account, account_pass, 300_000), - }; - match r { - Ok(_) => Ok(Value::Bool(true)), - Err(_) => Ok(Value::Bool(false)), - } - } - ) - } - - fn test_password(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(RpcH160, String)>(params).and_then( - |(account, password)| { - let account: Address = account.into(); - take_weak!(self.accounts) - .test_password(&account, password) - .map(|b| Value::Bool(b)) - .map_err(|e| errors::account("Could not fetch account info.", e)) - } - ) - } - - fn change_password(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(RpcH160, String, String)>(params).and_then( - |(account, password, new_password)| { - let account: Address = account.into(); - take_weak!(self.accounts) - .change_password(&account, password, new_password) - .map(|_| Value::Null) - .map_err(|e| errors::account("Could not fetch account info.", e)) - } - ) - } - - fn sign_and_send_transaction(&self, params: Params) -> Result { - try!(self.active()); - from_params::<(TransactionRequest, String)>(params) - .and_then(|(request, password)| { - sign_and_dispatch( - &*take_weak!(self.client), - &*take_weak!(self.miner), - &*take_weak!(self.accounts), - request.into(), - Some(password) - ) - }) - } - - fn set_account_name(&self, params: Params) -> Result { - try!(self.active()); - let store = take_weak!(self.accounts); - from_params::<(RpcH160, String)>(params).and_then(|(addr, name)| { - let addr: Address = addr.into(); - store.set_account_name(addr.clone(), name.clone()).or_else(|_| store.set_address_name(addr, name)).expect("set_address_name always returns Ok; qed"); - Ok(Value::Null) - }) - } - - fn set_account_meta(&self, params: Params) -> Result { - try!(self.active()); - let store = take_weak!(self.accounts); - from_params::<(RpcH160, String)>(params).and_then(|(addr, meta)| { - let addr: Address = addr.into(); - store.set_account_meta(addr.clone(), meta.clone()).or_else(|_| store.set_address_meta(addr, meta)).expect("set_address_meta always returns Ok; qed"); - Ok(Value::Null) - }) - } - fn accounts_info(&self, params: Params) -> Result { try!(self.active()); try!(expect_no_params(params)); @@ -204,21 +77,4 @@ impl Personal for PersonalClient where C: MiningBl (format!("0x{}", a.hex()), Value::Object(m)) }).collect::>())) } - - fn geth_accounts(&self, params: Params) -> Result { - try!(self.active()); - try!(expect_no_params(params)); - let store = take_weak!(self.accounts); - Ok(to_value(&store.list_geth_accounts(false).into_iter().map(Into::into).collect::>())) - } - - fn import_geth_accounts(&self, params: Params) -> Result { - from_params::<(Vec,)>(params).and_then(|(addresses,)| { - let store = take_weak!(self.accounts); - Ok(to_value(&try!(store - .import_geth_accounts(addresses.into_iter().map(Into::into).collect(), false) - .map_err(|e| errors::account("Couldn't import Geth accounts", e)) - ).into_iter().map(Into::into).collect::>())) - }) - } } diff --git a/rpc/src/v1/impls/personal_accounts.rs b/rpc/src/v1/impls/personal_accounts.rs new file mode 100644 index 0000000000..0fa2368454 --- /dev/null +++ b/rpc/src/v1/impls/personal_accounts.rs @@ -0,0 +1,194 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Account management (personal) rpc implementation +use std::sync::{Arc, Weak}; +use util::{Address}; +use jsonrpc_core::*; +use ethkey::{Brain, Generator}; +use v1::traits::PersonalAccounts; +use v1::types::{H160 as RpcH160, TransactionRequest}; +use v1::helpers::errors; +use v1::helpers::params::expect_no_params; +use v1::helpers::dispatch::sign_and_dispatch; +use ethcore::account_provider::AccountProvider; +use ethcore::client::MiningBlockChainClient; +use ethcore::miner::MinerService; + +/// Account management (personal) rpc implementation. +pub struct PersonalAccountsClient where C: MiningBlockChainClient, M: MinerService { + accounts: Weak, + client: Weak, + miner: Weak, + allow_perm_unlock: bool, +} + +impl PersonalAccountsClient where C: MiningBlockChainClient, M: MinerService { + /// Creates new PersonalClient + pub fn new(store: &Arc, client: &Arc, miner: &Arc, allow_perm_unlock: bool) -> Self { + PersonalAccountsClient { + accounts: Arc::downgrade(store), + client: Arc::downgrade(client), + miner: Arc::downgrade(miner), + allow_perm_unlock: allow_perm_unlock, + } + } + + fn active(&self) -> Result<(), Error> { + // TODO: only call every 30s at most. + take_weak!(self.client).keep_alive(); + Ok(()) + } +} + +impl PersonalAccounts for PersonalAccountsClient where C: MiningBlockChainClient, M: MinerService { + + fn new_account(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(String, )>(params).and_then( + |(pass, )| { + let store = take_weak!(self.accounts); + match store.new_account(&pass) { + Ok(address) => Ok(to_value(&RpcH160::from(address))), + Err(e) => Err(errors::account("Could not create account.", e)), + } + } + ) + } + + fn new_account_from_phrase(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(String, String, )>(params).and_then( + |(phrase, pass, )| { + let store = take_weak!(self.accounts); + match store.insert_account(*Brain::new(phrase).generate().unwrap().secret(), &pass) { + Ok(address) => Ok(to_value(&RpcH160::from(address))), + Err(e) => Err(errors::account("Could not create account.", e)), + } + } + ) + } + + fn new_account_from_wallet(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(String, String, )>(params).and_then( + |(json, pass, )| { + let store = take_weak!(self.accounts); + match store.import_presale(json.as_bytes(), &pass).or_else(|_| store.import_wallet(json.as_bytes(), &pass)) { + Ok(address) => Ok(to_value(&RpcH160::from(address))), + Err(e) => Err(errors::account("Could not create account.", e)), + } + } + ) + } + + fn unlock_account(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(RpcH160, String, Option)>(params).and_then( + |(account, account_pass, duration)| { + let account: Address = account.into(); + let store = take_weak!(self.accounts); + let r = match (self.allow_perm_unlock, duration) { + (false, _) => store.unlock_account_temporarily(account, account_pass), + (true, Some(0)) => store.unlock_account_permanently(account, account_pass), + (true, Some(d)) => store.unlock_account_timed(account, account_pass, d as u32 * 1000), + (true, None) => store.unlock_account_timed(account, account_pass, 300_000), + }; + match r { + Ok(_) => Ok(Value::Bool(true)), + Err(_) => Ok(Value::Bool(false)), + } + } + ) + } + + fn test_password(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(RpcH160, String)>(params).and_then( + |(account, password)| { + let account: Address = account.into(); + take_weak!(self.accounts) + .test_password(&account, password) + .map(|b| Value::Bool(b)) + .map_err(|e| errors::account("Could not fetch account info.", e)) + } + ) + } + + fn change_password(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(RpcH160, String, String)>(params).and_then( + |(account, password, new_password)| { + let account: Address = account.into(); + take_weak!(self.accounts) + .change_password(&account, password, new_password) + .map(|_| Value::Null) + .map_err(|e| errors::account("Could not fetch account info.", e)) + } + ) + } + + fn sign_and_send_transaction(&self, params: Params) -> Result { + try!(self.active()); + from_params::<(TransactionRequest, String)>(params) + .and_then(|(request, password)| { + sign_and_dispatch( + &*take_weak!(self.client), + &*take_weak!(self.miner), + &*take_weak!(self.accounts), + request.into(), + Some(password) + ) + }) + } + + fn set_account_name(&self, params: Params) -> Result { + try!(self.active()); + let store = take_weak!(self.accounts); + from_params::<(RpcH160, String)>(params).and_then(|(addr, name)| { + let addr: Address = addr.into(); + store.set_account_name(addr.clone(), name.clone()).or_else(|_| store.set_address_name(addr, name)).expect("set_address_name always returns Ok; qed"); + Ok(Value::Null) + }) + } + + fn set_account_meta(&self, params: Params) -> Result { + try!(self.active()); + let store = take_weak!(self.accounts); + from_params::<(RpcH160, String)>(params).and_then(|(addr, meta)| { + let addr: Address = addr.into(); + store.set_account_meta(addr.clone(), meta.clone()).or_else(|_| store.set_address_meta(addr, meta)).expect("set_address_meta always returns Ok; qed"); + Ok(Value::Null) + }) + } + + fn import_geth_accounts(&self, params: Params) -> Result { + from_params::<(Vec,)>(params).and_then(|(addresses,)| { + let store = take_weak!(self.accounts); + Ok(to_value(&try!(store + .import_geth_accounts(addresses.into_iter().map(Into::into).collect(), false) + .map_err(|e| errors::account("Couldn't import Geth accounts", e)) + ).into_iter().map(Into::into).collect::>())) + }) + } + + fn geth_accounts(&self, params: Params) -> Result { + try!(self.active()); + try!(expect_no_params(params)); + let store = take_weak!(self.accounts); + Ok(to_value(&store.list_geth_accounts(false).into_iter().map(Into::into).collect::>())) + } +} diff --git a/rpc/src/v1/mod.rs b/rpc/src/v1/mod.rs index 5ba302cea5..24560160cb 100644 --- a/rpc/src/v1/mod.rs +++ b/rpc/src/v1/mod.rs @@ -26,6 +26,6 @@ pub mod traits; pub mod tests; pub mod types; -pub use self::traits::{Web3, Eth, EthFilter, EthSigning, Personal, PersonalSigner, Net, Ethcore, EthcoreSet, Traces, Rpc}; +pub use self::traits::{Web3, Eth, EthFilter, EthSigning, Personal, PersonalAccounts, PersonalSigner, Net, Ethcore, EthcoreSet, Traces, Rpc}; pub use self::impls::*; pub use self::helpers::{SigningQueue, SignerService, ConfirmationsQueue, NetworkSettings, block_import}; diff --git a/rpc/src/v1/tests/mocked/personal.rs b/rpc/src/v1/tests/mocked/personal.rs index 91e1ef0f59..2dd186cca4 100644 --- a/rpc/src/v1/tests/mocked/personal.rs +++ b/rpc/src/v1/tests/mocked/personal.rs @@ -19,7 +19,7 @@ use std::str::FromStr; use jsonrpc_core::IoHandler; use util::{U256, Uint, Address}; use ethcore::account_provider::AccountProvider; -use v1::{PersonalClient, Personal}; +use v1::{PersonalClient, PersonalAccountsClient, PersonalAccounts, Personal}; use v1::tests::helpers::TestMinerService; use ethcore::client::TestBlockChainClient; use ethcore::transaction::{Action, Transaction}; @@ -50,10 +50,12 @@ fn setup() -> PersonalTester { let accounts = accounts_provider(); let client = blockchain_client(); let miner = miner_service(); - let personal = PersonalClient::new(&accounts, &client, &miner, false); + let personal = PersonalClient::new(&accounts, &client); + let personal_accounts = PersonalAccountsClient::new(&accounts, &client, &miner, false); let io = IoHandler::new(); io.add_delegate(personal.to_delegate()); + io.add_delegate(personal_accounts.to_delegate()); let tester = PersonalTester { accounts: accounts, diff --git a/rpc/src/v1/traits/mod.rs b/rpc/src/v1/traits/mod.rs index e804c55536..ea08344636 100644 --- a/rpc/src/v1/traits/mod.rs +++ b/rpc/src/v1/traits/mod.rs @@ -30,7 +30,7 @@ pub use self::web3::Web3; pub use self::eth::{Eth, EthFilter}; pub use self::eth_signing::EthSigning; pub use self::net::Net; -pub use self::personal::{Personal, PersonalSigner}; +pub use self::personal::{Personal, PersonalAccounts, PersonalSigner}; pub use self::ethcore::Ethcore; pub use self::ethcore_set::EthcoreSet; pub use self::traces::Traces; diff --git a/rpc/src/v1/traits/personal.rs b/rpc/src/v1/traits/personal.rs index 2114131d43..92a9df6eb2 100644 --- a/rpc/src/v1/traits/personal.rs +++ b/rpc/src/v1/traits/personal.rs @@ -18,12 +18,28 @@ use std::sync::Arc; use jsonrpc_core::*; -/// Personal rpc interface. +/// Personal rpc interface. Safe (read-only) functions. pub trait Personal: Sized + Send + Sync + 'static { /// Lists all stored accounts fn accounts(&self, _: Params) -> Result; + /// Returns accounts information. + fn accounts_info(&self, _: Params) -> Result; + + /// Should be used to convert object to io delegate. + fn to_delegate(self) -> IoDelegate { + let mut delegate = IoDelegate::new(Arc::new(self)); + delegate.add_method("personal_listAccounts", Personal::accounts); + delegate.add_method("personal_accountsInfo", Personal::accounts_info); + + delegate + } +} + +/// Personal rpc methods altering stored accounts or their settings. +pub trait PersonalAccounts: Sized + Send + Sync + 'static { + /// Creates new account (it becomes new current unlocked account) /// Param is the password for the account. fn new_account(&self, _: Params) -> Result; @@ -56,31 +72,26 @@ pub trait Personal: Sized + Send + Sync + 'static { /// Set an account's metadata string. fn set_account_meta(&self, _: Params) -> Result; - /// Returns accounts information. - fn accounts_info(&self, _: Params) -> Result; + /// Imports a number of Geth accounts, with the list provided as the argument. + fn import_geth_accounts(&self, _: Params) -> Result; /// Returns the accounts available for importing from Geth. fn geth_accounts(&self, _: Params) -> Result; - /// Imports a number of Geth accounts, with the list provided as the argument. - fn import_geth_accounts(&self, _: Params) -> Result; - /// Should be used to convert object to io delegate. fn to_delegate(self) -> IoDelegate { let mut delegate = IoDelegate::new(Arc::new(self)); - delegate.add_method("personal_listAccounts", Personal::accounts); - delegate.add_method("personal_newAccount", Personal::new_account); - delegate.add_method("personal_newAccountFromPhrase", Personal::new_account_from_phrase); - delegate.add_method("personal_newAccountFromWallet", Personal::new_account_from_wallet); - delegate.add_method("personal_unlockAccount", Personal::unlock_account); - delegate.add_method("personal_testPassword", Personal::test_password); - delegate.add_method("personal_changePassword", Personal::change_password); - delegate.add_method("personal_signAndSendTransaction", Personal::sign_and_send_transaction); - delegate.add_method("personal_setAccountName", Personal::set_account_name); - delegate.add_method("personal_setAccountMeta", Personal::set_account_meta); - delegate.add_method("personal_accountsInfo", Personal::accounts_info); - delegate.add_method("personal_listGethAccounts", Personal::geth_accounts); - delegate.add_method("personal_importGethAccounts", Personal::import_geth_accounts); + delegate.add_method("personal_newAccount", PersonalAccounts::new_account); + delegate.add_method("personal_newAccountFromPhrase", PersonalAccounts::new_account_from_phrase); + delegate.add_method("personal_newAccountFromWallet", PersonalAccounts::new_account_from_wallet); + delegate.add_method("personal_unlockAccount", PersonalAccounts::unlock_account); + delegate.add_method("personal_testPassword", PersonalAccounts::test_password); + delegate.add_method("personal_changePassword", PersonalAccounts::change_password); + delegate.add_method("personal_signAndSendTransaction", PersonalAccounts::sign_and_send_transaction); + delegate.add_method("personal_setAccountName", PersonalAccounts::set_account_name); + delegate.add_method("personal_setAccountMeta", PersonalAccounts::set_account_meta); + delegate.add_method("personal_importGethAccounts", PersonalAccounts::import_geth_accounts); + delegate.add_method("personal_listGethAccounts", PersonalAccounts::geth_accounts); delegate } @@ -108,6 +119,7 @@ pub trait PersonalSigner: Sized + Send + Sync + 'static { delegate.add_method("personal_confirmRequest", PersonalSigner::confirm_request); delegate.add_method("personal_rejectRequest", PersonalSigner::reject_request); delegate.add_method("personal_generateAuthorizationToken", PersonalSigner::generate_token); + delegate } } -- GitLab From ce37b6dcb90c23b17b296f34e5e73b17d31a46e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 19:27:08 +0200 Subject: [PATCH 238/393] Revert to gas price ordering (#2919) --- ethcore/src/miner/miner.rs | 2 +- parity/cli/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 270a39e48e..0a00b79eb3 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -98,7 +98,7 @@ impl Default for MinerOptions { tx_gas_limit: !U256::zero(), tx_queue_size: 1024, tx_queue_gas_limit: GasLimit::Auto, - tx_queue_strategy: PrioritizationStrategy::GasFactorAndGasPrice, + tx_queue_strategy: PrioritizationStrategy::GasPriceOnly, pending_set: PendingSet::AlwaysQueue, reseal_min_period: Duration::from_secs(2), work_queue_size: 20, diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 68411414fd..98e815bd0f 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -205,7 +205,7 @@ usage! { or |c: &Config| otry!(c.mining).tx_queue_size.clone(), flag_tx_queue_gas: String = "auto", or |c: &Config| otry!(c.mining).tx_queue_gas.clone(), - flag_tx_queue_strategy: String = "gas_factor", + flag_tx_queue_strategy: String = "gas_price", or |c: &Config| otry!(c.mining).tx_queue_strategy.clone(), flag_remove_solved: bool = false, or |c: &Config| otry!(c.mining).remove_solved.clone(), -- GitLab From 152a551e8b5526a2fb728a1dc98bee23ee9d30e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 19:28:34 +0200 Subject: [PATCH 239/393] Transaction Queue banning (#2524) * Blacklisting transaction queue * Using blacklisting queue in miner * Restoring todo [ci:skip] * Blacklisting recipients and code * Renaming blacklisting->banning * CLI option for banning. * Fixing submodule commit [ci:skip] * Fixing RPC tests * Additional logging when dropping transactions * whitespace [ci:skip] * Configurable ban duration * Reverting fix for pruning history from config file --- Cargo.lock | 1 + ethcore/Cargo.toml | 7 +- ethcore/src/error.rs | 9 + ethcore/src/lib.rs | 1 + ethcore/src/miner/banning_queue.rs | 331 +++++++++++++++++++++++++++++ ethcore/src/miner/miner.rs | 74 ++++++- ethcore/src/miner/mod.rs | 3 +- parity/cli/config.full.toml | 3 + parity/cli/mod.rs | 15 ++ parity/cli/usage.txt | 12 ++ parity/configuration.rs | 10 +- rpc/src/v1/helpers/errors.rs | 3 + rpc/src/v1/tests/eth.rs | 3 +- 13 files changed, 457 insertions(+), 15 deletions(-) create mode 100644 ethcore/src/miner/banning_queue.rs diff --git a/Cargo.lock b/Cargo.lock index 71684d5c4f..6fac719d41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,6 +307,7 @@ dependencies = [ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "transient-hashmap 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/ethcore/Cargo.toml b/ethcore/Cargo.toml index a60eccddd4..d48e76e941 100644 --- a/ethcore/Cargo.toml +++ b/ethcore/Cargo.toml @@ -24,6 +24,10 @@ rayon = "0.4.2" semver = "0.2" bit-set = "0.4" time = "0.1" +rand = "0.3" +byteorder = "0.5" +transient-hashmap = "0.1" +lru-cache = { git = "https://github.com/contain-rs/lru-cache" } evmjit = { path = "../evmjit", optional = true } clippy = { version = "0.0.96", optional = true} ethash = { path = "../ethash" } @@ -36,10 +40,7 @@ ethstore = { path = "../ethstore" } ethkey = { path = "../ethkey" } ethcore-ipc-nano = { path = "../ipc/nano" } rlp = { path = "../util/rlp" } -rand = "0.3" -lru-cache = { git = "https://github.com/contain-rs/lru-cache" } ethcore-bloom-journal = { path = "../util/bloom" } -byteorder = "0.5" [dependencies.hyper] git = "https://github.com/ethcore/hyper" diff --git a/ethcore/src/error.rs b/ethcore/src/error.rs index e87aa231fe..40f4c6d28a 100644 --- a/ethcore/src/error.rs +++ b/ethcore/src/error.rs @@ -63,6 +63,12 @@ pub enum TransactionError { }, /// Transaction's gas limit (aka gas) is invalid. InvalidGasLimit(OutOfBounds), + /// Transaction sender is banned. + SenderBanned, + /// Transaction receipient is banned. + RecipientBanned, + /// Contract creation code is banned. + CodeBanned, } impl fmt::Display for TransactionError { @@ -81,6 +87,9 @@ impl fmt::Display for TransactionError { GasLimitExceeded { limit, got } => format!("Gas limit exceeded. Limit={}, Given={}", limit, got), InvalidGasLimit(ref err) => format!("Invalid gas limit. {}", err), + SenderBanned => "Sender is temporarily banned.".into(), + RecipientBanned => "Recipient is temporarily banned.".into(), + CodeBanned => "Contract code is temporarily banned.".into(), }; f.write_fmt(format_args!("Transaction error ({})", msg)) diff --git a/ethcore/src/lib.rs b/ethcore/src/lib.rs index 9985dc58e6..c7f40418cf 100644 --- a/ethcore/src/lib.rs +++ b/ethcore/src/lib.rs @@ -101,6 +101,7 @@ extern crate bit_set; extern crate rlp; extern crate ethcore_bloom_journal as bloom_journal; extern crate byteorder; +extern crate transient_hashmap; #[macro_use] extern crate log; diff --git a/ethcore/src/miner/banning_queue.rs b/ethcore/src/miner/banning_queue.rs new file mode 100644 index 0000000000..0ad99b008a --- /dev/null +++ b/ethcore/src/miner/banning_queue.rs @@ -0,0 +1,331 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Banning Queue +//! Transacton Queue wrapper maintaining additional list of banned senders and contract hashes. + +use std::time::Duration; +use std::ops::{Deref, DerefMut}; +use std::cell::Cell; +use transaction::{SignedTransaction, Action}; +use transient_hashmap::TransientHashMap; +use miner::{TransactionQueue, TransactionImportResult, TransactionOrigin, AccountDetails}; +use error::{Error, TransactionError}; +use util::{Uint, U256, H256, Address, Hashable}; + +type Count = u16; + +/// Auto-Banning threshold +pub enum Threshold { + /// Should ban after given number of misbehaves reported. + BanAfter(Count), + /// Should never ban anything + NeverBan +} + +impl Default for Threshold { + fn default() -> Self { + Threshold::NeverBan + } +} + +/// Transaction queue with banlist. +pub struct BanningTransactionQueue { + queue: TransactionQueue, + ban_threshold: Threshold, + senders_bans: TransientHashMap>, + recipients_bans: TransientHashMap>, + codes_bans: TransientHashMap>, +} + +impl BanningTransactionQueue { + /// Creates new banlisting transaction queue + pub fn new(queue: TransactionQueue, ban_threshold: Threshold, ban_lifetime: Duration) -> Self { + let ban_lifetime_sec = ban_lifetime.as_secs(); + assert!(ban_lifetime_sec > 0, "Lifetime has to be specified in seconds."); + BanningTransactionQueue { + queue: queue, + ban_threshold: ban_threshold, + senders_bans: TransientHashMap::new(ban_lifetime_sec), + recipients_bans: TransientHashMap::new(ban_lifetime_sec), + codes_bans: TransientHashMap::new(ban_lifetime_sec), + } + } + + /// Borrows internal queue. + /// NOTE: you can insert transactions to the queue even + /// if they would be rejected because of ban otherwise. + /// But probably you shouldn't. + pub fn queue(&mut self) -> &mut TransactionQueue { + &mut self.queue + } + + /// Add to the queue taking bans into consideration. + /// May reject transaction because of the banlist. + pub fn add_with_banlist( + &mut self, + transaction: SignedTransaction, + account_details: &F, + ) -> Result where F: Fn(&Address) -> AccountDetails { + if let Threshold::BanAfter(threshold) = self.ban_threshold { + // NOTE In all checks use direct query to avoid increasing ban timeout. + + // Check sender + if let Ok(sender) = transaction.sender() { + let count = self.senders_bans.direct().get(&sender).map(|v| v.get()).unwrap_or(0); + if count > threshold { + debug!(target: "txqueue", "Ignoring transaction {:?} because sender is banned.", transaction.hash()); + return Err(Error::Transaction(TransactionError::SenderBanned)); + } + } + + // Check recipient + if let Action::Call(recipient) = transaction.action { + let count = self.recipients_bans.direct().get(&recipient).map(|v| v.get()).unwrap_or(0); + if count > threshold { + debug!(target: "txqueue", "Ignoring transaction {:?} because recipient is banned.", transaction.hash()); + return Err(Error::Transaction(TransactionError::RecipientBanned)); + } + } + + // Check code + if let Action::Create = transaction.action { + let code_hash = transaction.data.sha3(); + let count = self.codes_bans.direct().get(&code_hash).map(|v| v.get()).unwrap_or(0); + if count > threshold { + debug!(target: "txqueue", "Ignoring transaction {:?} because code is banned.", transaction.hash()); + return Err(Error::Transaction(TransactionError::CodeBanned)); + } + } + } + self.queue.add(transaction, account_details, TransactionOrigin::External) + } + + /// Ban transaction with given hash. + /// Transaction has to be in the queue. + /// + /// Bans sender and recipient/code and returns `true` when any ban has reached threshold. + pub fn ban_transaction(&mut self, hash: &H256) -> bool { + let transaction = self.queue.find(hash); + match transaction { + Some(transaction) => { + let sender = transaction.sender().expect("Transaction is in queue, so the sender is already validated; qed"); + // Ban sender + let sender_banned = self.ban_sender(sender); + // Ban recipient and codehash + let is_banned = sender_banned || match transaction.action { + Action::Call(recipient) => { + self.ban_recipient(recipient) + }, + Action::Create => { + self.ban_codehash(transaction.data.sha3()) + }, + }; + is_banned + }, + None => false, + } + } + + /// Ban given sender. + /// If bans threshold is reached all subsequent transactions from this sender will be rejected. + /// Reaching bans threshold also removes all existsing transaction from this sender that are already in the + /// queue. + fn ban_sender(&mut self, address: Address) -> bool { + let count = { + let mut count = self.senders_bans.entry(address).or_insert_with(|| Cell::new(0)); + *count.get_mut() = count.get().saturating_add(1); + count.get() + }; + match self.ban_threshold { + Threshold::BanAfter(threshold) if count > threshold => { + // Banlist the sender. + // Remove all transactions from the queue. + self.remove_all(address, !U256::zero()); + true + }, + _ => false + } + } + + /// Ban given recipient. + /// If bans threshold is reached all subsequent transactions to this address will be rejected. + /// Returns true if bans threshold has been reached. + fn ban_recipient(&mut self, address: Address) -> bool { + let count = { + let mut count = self.recipients_bans.entry(address).or_insert_with(|| Cell::new(0)); + *count.get_mut() = count.get().saturating_add(1); + count.get() + }; + match self.ban_threshold { + // TODO [ToDr] Consider removing other transactions to the same recipient from the queue? + Threshold::BanAfter(threshold) if count > threshold => true, + _ => false + } + } + + + /// Ban given codehash. + /// If bans threshold is reached all subsequent transactions to contracts with this codehash will be rejected. + /// Returns true if bans threshold has been reached. + fn ban_codehash(&mut self, code_hash: H256) -> bool { + let mut count = self.codes_bans.entry(code_hash).or_insert_with(|| Cell::new(0)); + *count.get_mut() = count.get().saturating_add(1); + + match self.ban_threshold { + // TODO [ToDr] Consider removing other transactions with the same code from the queue? + Threshold::BanAfter(threshold) if count.get() > threshold => true, + _ => false, + } + } +} + +impl Deref for BanningTransactionQueue { + type Target = TransactionQueue; + + fn deref(&self) -> &Self::Target { + &self.queue + } +} +impl DerefMut for BanningTransactionQueue { + fn deref_mut(&mut self) -> &mut Self::Target { + self.queue() + } +} + +#[cfg(test)] +mod tests { + use std::time::Duration; + use super::{BanningTransactionQueue, Threshold}; + use ethkey::{Random, Generator}; + use transaction::{Transaction, SignedTransaction, Action}; + use error::{Error, TransactionError}; + use client::TransactionImportResult; + use miner::{TransactionQueue, TransactionOrigin, AccountDetails}; + use util::{Uint, U256, Address, FromHex, Hashable}; + + fn queue() -> BanningTransactionQueue { + BanningTransactionQueue::new(TransactionQueue::default(), Threshold::BanAfter(1), Duration::from_secs(180)) + } + + fn default_account_details(_address: &Address) -> AccountDetails { + AccountDetails { + nonce: U256::zero(), + balance: !U256::zero(), + } + } + + fn transaction(action: Action) -> SignedTransaction { + let keypair = Random.generate().unwrap(); + Transaction { + action: action, + value: U256::from(100), + data: "3331600055".from_hex().unwrap(), + gas: U256::from(100_000), + gas_price: U256::from(10), + nonce: U256::from(0), + }.sign(keypair.secret()) + } + + fn unwrap_err(res: Result) -> TransactionError { + match res { + Err(Error::Transaction(e)) => e, + Ok(x) => panic!("Expected error, got: Ok({:?})", x), + Err(e) => panic!("Unexpected error type returned by queue: {:?}", e), + } + } + + #[test] + fn should_allow_to_borrow_the_queue() { + // given + let tx = transaction(Action::Create); + let mut txq = queue(); + + // when + txq.queue().add(tx, &default_account_details, TransactionOrigin::External).unwrap(); + + // then + // should also deref to queue + assert_eq!(txq.status().pending, 1); + } + + #[test] + fn should_not_accept_transactions_from_banned_sender() { + // given + let tx = transaction(Action::Create); + let mut txq = queue(); + // Banlist once (threshold not reached) + let banlist1 = txq.ban_sender(tx.sender().unwrap()); + assert!(!banlist1, "Threshold not reached yet."); + // Insert once + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + assert_eq!(import1, TransactionImportResult::Current); + + // when + let banlist2 = txq.ban_sender(tx.sender().unwrap()); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + + // then + assert!(banlist2, "Threshold should be reached - banned."); + assert_eq!(unwrap_err(import2), TransactionError::SenderBanned); + // Should also remove transacion from the queue + assert_eq!(txq.find(&tx.hash()), None); + } + + #[test] + fn should_not_accept_transactions_to_banned_recipient() { + // given + let recipient = Address::default(); + let tx = transaction(Action::Call(recipient)); + let mut txq = queue(); + // Banlist once (threshold not reached) + let banlist1 = txq.ban_recipient(recipient); + assert!(!banlist1, "Threshold not reached yet."); + // Insert once + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + assert_eq!(import1, TransactionImportResult::Current); + + // when + let banlist2 = txq.ban_recipient(recipient); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + + // then + assert!(banlist2, "Threshold should be reached - banned."); + assert_eq!(unwrap_err(import2), TransactionError::RecipientBanned); + } + + #[test] + fn should_not_accept_transactions_with_banned_code() { + // given + let tx = transaction(Action::Create); + let codehash = tx.data.sha3(); + let mut txq = queue(); + // Banlist once (threshold not reached) + let banlist1 = txq.ban_codehash(codehash); + assert!(!banlist1, "Threshold not reached yet."); + // Insert once + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + assert_eq!(import1, TransactionImportResult::Current); + + // when + let banlist2 = txq.ban_codehash(codehash); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + + // then + assert!(banlist2, "Threshold should be reached - banned."); + assert_eq!(unwrap_err(import2), TransactionError::CodeBanned); + } +} diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 0a00b79eb3..47464b36f9 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -31,6 +31,7 @@ use receipt::{Receipt, RichReceipt}; use spec::Spec; use engines::Engine; use miner::{MinerService, MinerStatus, TransactionQueue, PrioritizationStrategy, AccountDetails, TransactionOrigin}; +use miner::banning_queue::{BanningTransactionQueue, Threshold}; use miner::work_notify::WorkPoster; use client::TransactionImportResult; use miner::price_info::PriceInfo; @@ -59,6 +60,22 @@ pub enum GasLimit { Fixed(U256), } +/// Transaction queue banning settings. +#[derive(Debug, PartialEq, Clone)] +pub enum Banning { + /// Banning in transaction queue is disabled + Disabled, + /// Banning in transaction queue is enabled + Enabled { + /// Upper limit of transaction processing time before banning. + offend_threshold: Duration, + /// Number of similar offending transactions before banning. + min_offends: u16, + /// Number of seconds the offender is banned for. + ban_duration: Duration, + }, +} + /// Configures the behaviour of the miner. #[derive(Debug, PartialEq)] pub struct MinerOptions { @@ -86,6 +103,8 @@ pub struct MinerOptions { pub enable_resubmission: bool, /// Global gas limit for all transaction in the queue except for local and retracted. pub tx_queue_gas_limit: GasLimit, + /// Banning settings + pub tx_queue_banning: Banning, } impl Default for MinerOptions { @@ -103,6 +122,7 @@ impl Default for MinerOptions { reseal_min_period: Duration::from_secs(2), work_queue_size: 20, enable_resubmission: true, + tx_queue_banning: Banning::Disabled, } } } @@ -186,7 +206,7 @@ struct SealingWork { /// Handles preparing work for "work sealing" or seals "internally" if Engine does not require work. pub struct Miner { // NOTE [ToDr] When locking always lock in this order! - transaction_queue: Arc>, + transaction_queue: Arc>, sealing_work: Mutex, next_allowed_reseal: Mutex, sealing_block_last_request: Mutex, @@ -215,11 +235,18 @@ impl Miner { GasLimit::Fixed(ref limit) => *limit, _ => !U256::zero(), }; - let txq = Arc::new(Mutex::new(TransactionQueue::with_limits( - options.tx_queue_strategy, options.tx_queue_size, gas_limit, options.tx_gas_limit - ))); + + let txq = TransactionQueue::with_limits(options.tx_queue_strategy, options.tx_queue_size, gas_limit, options.tx_gas_limit); + let txq = match options.tx_queue_banning { + Banning::Disabled => BanningTransactionQueue::new(txq, Threshold::NeverBan, Duration::from_secs(180)), + Banning::Enabled { ban_duration, min_offends, .. } => BanningTransactionQueue::new( + txq, + Threshold::BanAfter(min_offends), + ban_duration, + ), + }; Miner { - transaction_queue: txq, + transaction_queue: Arc::new(Mutex::new(txq)), next_allowed_reseal: Mutex::new(Instant::now()), sealing_block_last_request: Mutex::new(0), sealing_work: Mutex::new(SealingWork{ @@ -318,10 +345,31 @@ impl Miner { let mut invalid_transactions = HashSet::new(); let mut transactions_to_penalize = HashSet::new(); let block_number = open_block.block().fields().header.number(); - // TODO: push new uncles, too. + + // TODO Push new uncles too. for tx in transactions { let hash = tx.hash(); - match open_block.push_transaction(tx, None) { + let start = Instant::now(); + let result = open_block.push_transaction(tx, None); + let took = start.elapsed(); + + // Check for heavy transactions + match self.options.tx_queue_banning { + Banning::Enabled { ref offend_threshold, .. } if &took > offend_threshold => { + match self.transaction_queue.lock().ban_transaction(&hash) { + true => { + warn!(target: "miner", "Detected heavy transaction. Banning the sender and recipient/code."); + }, + false => { + transactions_to_penalize.insert(hash); + debug!(target: "miner", "Detected heavy transaction. Penalizing sender.") + } + } + }, + _ => {}, + } + + match result { Err(Error::Execution(ExecutionError::BlockGasLimitReached { gas_limit, gas_used, gas })) => { debug!(target: "miner", "Skipping adding transaction to block because of gas limit: {:?} (limit: {:?}, used: {:?}, gas: {:?})", hash, gas_limit, gas_used, gas); @@ -506,7 +554,7 @@ impl Miner { prepare_new } - fn add_transactions_to_queue(&self, chain: &MiningBlockChainClient, transactions: Vec, origin: TransactionOrigin, transaction_queue: &mut TransactionQueue) -> + fn add_transactions_to_queue(&self, chain: &MiningBlockChainClient, transactions: Vec, origin: TransactionOrigin, transaction_queue: &mut BanningTransactionQueue) -> Vec> { let fetch_account = |a: &Address| AccountDetails { @@ -515,7 +563,14 @@ impl Miner { }; transactions.into_iter() - .map(|tx| transaction_queue.add(tx, &fetch_account, origin)) + .map(|tx| match origin { + TransactionOrigin::Local | TransactionOrigin::RetractedBlock => { + transaction_queue.add(tx, &fetch_account, origin) + }, + TransactionOrigin::External => { + transaction_queue.add_with_banlist(tx, &fetch_account) + } + }) .collect() } @@ -1099,6 +1154,7 @@ mod tests { pending_set: PendingSet::AlwaysSealing, work_queue_size: 5, enable_resubmission: true, + tx_queue_banning: Banning::Disabled, }, GasPricer::new_fixed(0u64.into()), &Spec::new_test(), diff --git a/ethcore/src/miner/mod.rs b/ethcore/src/miner/mod.rs index 5fe8dbf44e..145d790dd1 100644 --- a/ethcore/src/miner/mod.rs +++ b/ethcore/src/miner/mod.rs @@ -44,11 +44,12 @@ mod miner; mod external; mod transaction_queue; +mod banning_queue; mod work_notify; mod price_info; pub use self::transaction_queue::{TransactionQueue, PrioritizationStrategy, AccountDetails, TransactionOrigin}; -pub use self::miner::{Miner, MinerOptions, PendingSet, GasPricer, GasPriceCalibratorOptions, GasLimit}; +pub use self::miner::{Miner, MinerOptions, Banning, PendingSet, GasPricer, GasPriceCalibratorOptions, GasLimit}; pub use self::external::{ExternalMiner, ExternalMinerService}; pub use client::TransactionImportResult; diff --git a/parity/cli/config.full.toml b/parity/cli/config.full.toml index 4d1d480256..84e44ee778 100644 --- a/parity/cli/config.full.toml +++ b/parity/cli/config.full.toml @@ -74,7 +74,10 @@ gas_cap = "6283184" tx_queue_size = 1024 tx_queue_gas = "auto" tx_queue_strategy = "gas_factor" +tx_queue_ban_count = 1 +tx_queue_ban_time = 180 #s tx_gas_limit = "6283184" +tx_time_limit = 100 #ms extra_data = "Parity" remove_solved = false notify_work = ["http://localhost:3001"] diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 98e815bd0f..d13d791add 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -187,6 +187,8 @@ usage! { or |c: &Config| otry!(c.mining).work_queue_size.clone(), flag_tx_gas_limit: Option = None, or |c: &Config| otry!(c.mining).tx_gas_limit.clone().map(Some), + flag_tx_time_limit: Option = None, + or |c: &Config| otry!(c.mining).tx_time_limit.clone().map(Some), flag_relay_set: String = "cheap", or |c: &Config| otry!(c.mining).relay_set.clone(), flag_usd_per_tx: String = "0", @@ -207,6 +209,10 @@ usage! { or |c: &Config| otry!(c.mining).tx_queue_gas.clone(), flag_tx_queue_strategy: String = "gas_price", or |c: &Config| otry!(c.mining).tx_queue_strategy.clone(), + flag_tx_queue_ban_count: u16 = 1u16, + or |c: &Config| otry!(c.mining).tx_queue_ban_count.clone(), + flag_tx_queue_ban_time: u16 = 180u16, + or |c: &Config| otry!(c.mining).tx_queue_ban_time.clone(), flag_remove_solved: bool = false, or |c: &Config| otry!(c.mining).remove_solved.clone(), flag_notify_work: Option = None, @@ -361,6 +367,7 @@ struct Mining { reseal_min_period: Option, work_queue_size: Option, tx_gas_limit: Option, + tx_time_limit: Option, relay_set: Option, usd_per_tx: Option, usd_per_eth: Option, @@ -371,6 +378,8 @@ struct Mining { tx_queue_size: Option, tx_queue_gas: Option, tx_queue_strategy: Option, + tx_queue_ban_count: Option, + tx_queue_ban_time: Option, remove_solved: Option, notify_work: Option>, } @@ -558,6 +567,7 @@ mod tests { flag_reseal_min_period: 4000u64, flag_work_queue_size: 20usize, flag_tx_gas_limit: Some("6283184".into()), + flag_tx_time_limit: Some(100u64), flag_relay_set: "cheap".into(), flag_usd_per_tx: "0".into(), flag_usd_per_eth: "auto".into(), @@ -568,6 +578,8 @@ mod tests { flag_tx_queue_size: 1024usize, flag_tx_queue_gas: "auto".into(), flag_tx_queue_strategy: "gas_factor".into(), + flag_tx_queue_ban_count: 1u16, + flag_tx_queue_ban_time: 180u16, flag_remove_solved: false, flag_notify_work: Some("http://localhost:3001".into()), @@ -727,7 +739,10 @@ mod tests { tx_queue_size: Some(1024), tx_queue_gas: Some("auto".into()), tx_queue_strategy: None, + tx_queue_ban_count: None, + tx_queue_ban_time: None, tx_gas_limit: None, + tx_time_limit: None, extra_data: None, remove_solved: None, notify_work: None, diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index d96d875cfa..bf7e825613 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -166,6 +166,11 @@ Sealing/Mining Options: --tx-gas-limit GAS Apply a limit of GAS as the maximum amount of gas a single transaction may have for it to be mined. (default: {flag_tx_gas_limit:?}) + --tx-time-limit MS Maximal time for processing single transaction. + If enabled senders/recipients/code of transactions + offending the limit will be banned from being included + in transaction queue for 180 seconds. + (default: {flag_tx_time_limit:?}) --relay-set SET Set of transactions to relay. SET may be: cheap - Relay any transaction in the queue (this may include invalid transactions); @@ -203,6 +208,13 @@ Sealing/Mining Options: gas_price - Prioritize txs with high gas price; gas_factor - Prioritize txs using gas price and gas limit ratio (default: {flag_tx_queue_strategy}). + --tx-queue-ban-count C Number of times maximal time for execution (--tx-time-limit) + can be exceeded before banning sender/recipient/code. + (default: {flag_tx_queue_ban_count}) + --tx-queue-ban-time SEC Banning time (in seconds) for offenders of specified + execution time limit. Also number of offending actions + have to reach the threshold within that time. + (default: {flag_tx_queue_ban_time} seconds) --remove-solved Move solved blocks from the work package queue instead of cloning them. This gives a slightly faster import speed, but means that extra solutions diff --git a/parity/configuration.rs b/parity/configuration.rs index 5680e6110e..1972b9f1eb 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -24,7 +24,7 @@ use util::{Hashable, U256, Uint, Bytes, version_data, Secret, Address}; use util::log::Colour; use ethsync::{NetworkConfiguration, is_valid_node_url, AllowIP}; use ethcore::client::{VMType, Mode}; -use ethcore::miner::MinerOptions; +use ethcore::miner::{MinerOptions, Banning}; use rpc::{IpcConfiguration, HttpConfiguration}; use ethcore_rpc::NetworkSettings; @@ -387,6 +387,14 @@ impl Configuration { reseal_min_period: Duration::from_millis(self.args.flag_reseal_min_period), work_queue_size: self.args.flag_work_queue_size, enable_resubmission: !self.args.flag_remove_solved, + tx_queue_banning: match self.args.flag_tx_time_limit { + Some(limit) => Banning::Enabled { + min_offends: self.args.flag_tx_queue_ban_count, + offend_threshold: Duration::from_millis(limit), + ban_duration: Duration::from_secs(self.args.flag_tx_queue_ban_time as u64), + }, + None => Banning::Disabled, + } }; Ok(options) diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 572adca3af..3f5dda2d3e 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -231,6 +231,9 @@ pub fn from_transaction_error(error: EthcoreError) -> Error { format!("Transaction cost exceeds current gas limit. Limit: {}, got: {}. Try decreasing supplied gas.", limit, got) }, InvalidGasLimit(_) => "Supplied gas is beyond limit.".into(), + SenderBanned => "Sender is banned in local queue.".into(), + RecipientBanned => "Recipient is banned in local queue.".into(), + CodeBanned => "Code is banned in local queue.".into(), }; Error { code: ErrorCode::ServerError(codes::TRANSACTION_ERROR), diff --git a/rpc/src/v1/tests/eth.rs b/rpc/src/v1/tests/eth.rs index 5d74815513..d556d11ef0 100644 --- a/rpc/src/v1/tests/eth.rs +++ b/rpc/src/v1/tests/eth.rs @@ -24,7 +24,7 @@ use ethcore::spec::{Genesis, Spec}; use ethcore::block::Block; use ethcore::views::BlockView; use ethcore::ethereum; -use ethcore::miner::{MinerOptions, GasPricer, MinerService, ExternalMiner, Miner, PendingSet, PrioritizationStrategy, GasLimit}; +use ethcore::miner::{MinerOptions, Banning, GasPricer, MinerService, ExternalMiner, Miner, PendingSet, PrioritizationStrategy, GasLimit}; use ethcore::account_provider::AccountProvider; use devtools::RandomTempPath; use util::Hashable; @@ -61,6 +61,7 @@ fn miner_service(spec: &Spec, accounts: Arc) -> Arc { tx_gas_limit: !U256::zero(), tx_queue_strategy: PrioritizationStrategy::GasPriceOnly, tx_queue_gas_limit: GasLimit::None, + tx_queue_banning: Banning::Disabled, pending_set: PendingSet::SealingOrElseQueue, reseal_min_period: Duration::from_secs(0), work_queue_size: 50, -- GitLab From dedc4d5cfc03c84de78686e8cd5d3ef2d1042ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 19:29:23 +0200 Subject: [PATCH 240/393] Get rid of duplicated code (#2915) --- ethcore/src/evm/instructions.rs | 8 +- ethcore/src/evm/interpreter/gasometer.rs | 141 ++++++++++++++--------- ethcore/src/evm/interpreter/mod.rs | 14 +-- evmbin/Cargo.lock | 38 +++++- evmbin/src/ext.rs | 2 +- 5 files changed, 130 insertions(+), 73 deletions(-) diff --git a/ethcore/src/evm/instructions.rs b/ethcore/src/evm/instructions.rs index 62cfe77d61..e609bf542e 100644 --- a/ethcore/src/evm/instructions.rs +++ b/ethcore/src/evm/instructions.rs @@ -173,7 +173,7 @@ lazy_static! { arr[SIGNEXTEND as usize] = InstructionInfo::new("SIGNEXTEND", 0, 2, 1, false, GasPriceTier::Low); arr[SHA3 as usize] = InstructionInfo::new("SHA3", 0, 2, 1, false, GasPriceTier::Special); arr[ADDRESS as usize] = InstructionInfo::new("ADDRESS", 0, 0, 1, false, GasPriceTier::Base); - arr[BALANCE as usize] = InstructionInfo::new("BALANCE", 0, 1, 1, false, GasPriceTier::Ext); + arr[BALANCE as usize] = InstructionInfo::new("BALANCE", 0, 1, 1, false, GasPriceTier::Special); arr[ORIGIN as usize] = InstructionInfo::new("ORIGIN", 0, 0, 1, false, GasPriceTier::Base); arr[CALLER as usize] = InstructionInfo::new("CALLER", 0, 0, 1, false, GasPriceTier::Base); arr[CALLVALUE as usize] = InstructionInfo::new("CALLVALUE", 0, 0, 1, false, GasPriceTier::Base); @@ -183,8 +183,8 @@ lazy_static! { arr[CODESIZE as usize] = InstructionInfo::new("CODESIZE", 0, 0, 1, false, GasPriceTier::Base); arr[CODECOPY as usize] = InstructionInfo::new("CODECOPY", 0, 3, 0, true, GasPriceTier::VeryLow); arr[GASPRICE as usize] = InstructionInfo::new("GASPRICE", 0, 0, 1, false, GasPriceTier::Base); - arr[EXTCODESIZE as usize] = InstructionInfo::new("EXTCODESIZE", 0, 1, 1, false, GasPriceTier::Ext); - arr[EXTCODECOPY as usize] = InstructionInfo::new("EXTCODECOPY", 0, 4, 0, true, GasPriceTier::Ext); + arr[EXTCODESIZE as usize] = InstructionInfo::new("EXTCODESIZE", 0, 1, 1, false, GasPriceTier::Special); + arr[EXTCODECOPY as usize] = InstructionInfo::new("EXTCODECOPY", 0, 4, 0, true, GasPriceTier::Special); arr[BLOCKHASH as usize] = InstructionInfo::new("BLOCKHASH", 0, 1, 1, false, GasPriceTier::Ext); arr[COINBASE as usize] = InstructionInfo::new("COINBASE", 0, 0, 1, false, GasPriceTier::Base); arr[TIMESTAMP as usize] = InstructionInfo::new("TIMESTAMP", 0, 0, 1, false, GasPriceTier::Base); @@ -277,7 +277,7 @@ lazy_static! { arr[CALLCODE as usize] = InstructionInfo::new("CALLCODE", 0, 7, 1, true, GasPriceTier::Special); arr[RETURN as usize] = InstructionInfo::new("RETURN", 0, 2, 0, true, GasPriceTier::Zero); arr[DELEGATECALL as usize] = InstructionInfo::new("DELEGATECALL", 0, 6, 1, true, GasPriceTier::Special); - arr[SUICIDE as usize] = InstructionInfo::new("SUICIDE", 0, 1, 0, true, GasPriceTier::Zero); + arr[SUICIDE as usize] = InstructionInfo::new("SUICIDE", 0, 1, 0, true, GasPriceTier::Special); arr }; } diff --git a/ethcore/src/evm/interpreter/gasometer.rs b/ethcore/src/evm/interpreter/gasometer.rs index 3fde3f664f..a2b9406556 100644 --- a/ethcore/src/evm/interpreter/gasometer.rs +++ b/ethcore/src/evm/interpreter/gasometer.rs @@ -30,12 +30,20 @@ macro_rules! overflowing { } #[cfg_attr(feature="dev", allow(enum_variant_names))] -enum InstructionCost { +enum Request { Gas(Cost), - GasMem(Cost, Cost, Option), + GasMem(Cost, Cost), + GasMemProvide(Cost, Cost, Option), GasMemCopy(Cost, Cost, Cost) } +pub struct InstructionRequirements { + pub gas_cost: Cost, + pub provide_gas: Option, + pub memory_total_gas: Cost, + pub memory_required_size: usize, +} + pub struct Gasometer { pub current_gas: Gas, pub current_mem_gas: Gas, @@ -59,11 +67,19 @@ impl Gasometer { /// How much gas is provided to a CALL/CREATE, given that we need to deduct `needed` for this operation /// and that we `requested` some. - pub fn gas_provided(&self, schedule: &Schedule, needed: Gas, requested: Option>) -> evm::Result { + pub fn gas_provided(&self, schedule: &Schedule, needed: Gas, requested: Option) -> evm::Result { + // Try converting requested gas to `Gas` (`U256/u64`) + // but in EIP150 even if we request more we should never fail from OOG + let requested = requested.map(Gas::from_u256); + match schedule.sub_gas_cap_divisor { Some(cap_divisor) if self.current_gas >= needed => { let gas_remaining = self.current_gas - needed; - let max_gas_provided = gas_remaining - gas_remaining / Gas::from(cap_divisor); + let max_gas_provided = match cap_divisor { + 64 => gas_remaining - (gas_remaining >> 6), + cap_divisor => gas_remaining - gas_remaining / Gas::from(cap_divisor), + }; + if let Some(Ok(r)) = requested { Ok(min(r, max_gas_provided)) } else { @@ -78,7 +94,7 @@ impl Gasometer { } else { Ok(0.into()) } - } + }, } } @@ -88,21 +104,21 @@ impl Gasometer { /// We guarantee that the final element of the returned tuple (`provided`) will be `Some` /// iff the `instruction` is one of `CREATE`, or any of the `CALL` variants. In this case, /// it will be the amount of gas that the current context provides to the child context. - pub fn get_gas_cost_mem( + pub fn requirements( &mut self, ext: &evm::Ext, instruction: Instruction, info: &InstructionInfo, stack: &Stack, current_mem_size: usize, - ) -> evm::Result<(Gas, Gas, usize, Option)> { + ) -> evm::Result> { let schedule = ext.schedule(); let tier = instructions::get_tier_idx(info.tier); let default_gas = Gas::from(schedule.tier_step_gas[tier]); let cost = match instruction { instructions::JUMPDEST => { - InstructionCost::Gas(Gas::from(1)) + Request::Gas(Gas::from(1)) }, instructions::SSTORE => { let address = H256::from(stack.peek(0)); @@ -116,16 +132,16 @@ impl Gasometer { // !is_zero(&val) && is_zero(newval) schedule.sstore_reset_gas }; - InstructionCost::Gas(Gas::from(gas)) + Request::Gas(Gas::from(gas)) }, instructions::SLOAD => { - InstructionCost::Gas(Gas::from(schedule.sload_gas)) + Request::Gas(Gas::from(schedule.sload_gas)) }, instructions::BALANCE => { - InstructionCost::Gas(Gas::from(schedule.balance_gas)) + Request::Gas(Gas::from(schedule.balance_gas)) }, instructions::EXTCODESIZE => { - InstructionCost::Gas(Gas::from(schedule.extcodesize_gas)) + Request::Gas(Gas::from(schedule.extcodesize_gas)) }, instructions::SUICIDE => { let mut gas = Gas::from(schedule.suicide_gas); @@ -135,28 +151,28 @@ impl Gasometer { gas = overflowing!(gas.overflow_add(schedule.suicide_to_new_account_cost.into())); } - InstructionCost::Gas(gas) + Request::Gas(gas) }, instructions::MSTORE | instructions::MLOAD => { - InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 32)), None) + Request::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 32))) }, instructions::MSTORE8 => { - InstructionCost::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 1)), None) + Request::GasMem(default_gas, try!(mem_needed_const(stack.peek(0), 1))) }, instructions::RETURN => { - InstructionCost::GasMem(default_gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) + Request::GasMem(default_gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) }, instructions::SHA3 => { let w = overflowing!(add_gas_usize(try!(Gas::from_u256(*stack.peek(1))), 31)); let words = w >> 5; let gas = Gas::from(schedule.sha3_gas) + (Gas::from(schedule.sha3_word_gas) * words); - InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) + Request::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) }, instructions::CALLDATACOPY | instructions::CODECOPY => { - InstructionCost::GasMemCopy(default_gas, try!(mem_needed(stack.peek(0), stack.peek(2))), try!(Gas::from_u256(*stack.peek(2)))) + Request::GasMemCopy(default_gas, try!(mem_needed(stack.peek(0), stack.peek(2))), try!(Gas::from_u256(*stack.peek(2)))) }, instructions::EXTCODECOPY => { - InstructionCost::GasMemCopy(schedule.extcodecopy_base_gas.into(), try!(mem_needed(stack.peek(1), stack.peek(3))), try!(Gas::from_u256(*stack.peek(3)))) + Request::GasMemCopy(schedule.extcodecopy_base_gas.into(), try!(mem_needed(stack.peek(1), stack.peek(3))), try!(Gas::from_u256(*stack.peek(3)))) }, instructions::LOG0...instructions::LOG4 => { let no_of_topics = instructions::get_log_topics(instruction); @@ -164,7 +180,7 @@ impl Gasometer { let data_gas = overflowing!(try!(Gas::from_u256(*stack.peek(1))).overflow_mul(Gas::from(schedule.log_data_gas))); let gas = overflowing!(data_gas.overflow_add(Gas::from(log_gas))); - InstructionCost::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1))), None) + Request::GasMem(gas, try!(mem_needed(stack.peek(0), stack.peek(1)))) }, instructions::CALL | instructions::CALLCODE => { let mut gas = Gas::from(schedule.call_gas); @@ -183,70 +199,82 @@ impl Gasometer { gas = overflowing!(gas.overflow_add(schedule.call_value_transfer_gas.into())); }; - // TODO: refactor to avoid duplicate calculation here and later on. - let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); - let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); - let requested = Gas::from_u256(*stack.peek(0)); - let provided = try!(self.gas_provided(schedule, cost_so_far, Some(requested))); - gas = overflowing!(gas.overflow_add(provided)); + let requested = *stack.peek(0); - InstructionCost::GasMem(gas, mem, Some(provided)) + Request::GasMemProvide(gas, mem, Some(requested)) }, instructions::DELEGATECALL => { - let mut gas = Gas::from(schedule.call_gas); + let gas = Gas::from(schedule.call_gas); let mem = cmp::max( try!(mem_needed(stack.peek(4), stack.peek(5))), try!(mem_needed(stack.peek(2), stack.peek(3))) ); + let requested = *stack.peek(0); - // TODO: refactor to avoid duplicate calculation here and later on. - let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); - let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); - let requested = Gas::from_u256(*stack.peek(0)); - let provided = try!(self.gas_provided(schedule, cost_so_far, Some(requested))); - gas = overflowing!(gas.overflow_add(provided)); - - InstructionCost::GasMem(gas, mem, Some(provided)) + Request::GasMemProvide(gas, mem, Some(requested)) }, instructions::CREATE => { - let mut gas = Gas::from(schedule.create_gas); + let gas = Gas::from(schedule.create_gas); let mem = try!(mem_needed(stack.peek(1), stack.peek(2))); - // TODO: refactor to avoid duplicate calculation here and later on. - let (mem_gas_cost, _, _) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem)); - let cost_so_far = overflowing!(gas.overflow_add(mem_gas_cost.into())); - let provided = try!(self.gas_provided(schedule, cost_so_far, None)); - gas = overflowing!(gas.overflow_add(provided)); - - InstructionCost::GasMem(gas, mem, Some(provided)) + Request::GasMemProvide(gas, mem, None) }, instructions::EXP => { let expon = stack.peek(1); let bytes = ((expon.bits() + 7) / 8) as usize; let gas = Gas::from(schedule.exp_gas + schedule.exp_byte_gas * bytes); - InstructionCost::Gas(gas) + Request::Gas(gas) }, - _ => InstructionCost::Gas(default_gas), + _ => Request::Gas(default_gas), }; - match cost { - InstructionCost::Gas(gas) => { - Ok((gas, self.current_mem_gas, 0, None)) + Ok(match cost { + Request::Gas(gas) => { + InstructionRequirements { + gas_cost: gas, + provide_gas: None, + memory_required_size: 0, + memory_total_gas: self.current_mem_gas, + } }, - InstructionCost::GasMem(gas, mem_size, provided) => { + Request::GasMem(gas, mem_size) => { let (mem_gas_cost, new_mem_gas, new_mem_size) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem_size)); let gas = overflowing!(gas.overflow_add(mem_gas_cost)); - Ok((gas, new_mem_gas, new_mem_size, provided)) + InstructionRequirements { + gas_cost: gas, + provide_gas: None, + memory_required_size: new_mem_size, + memory_total_gas: new_mem_gas, + } + }, + Request::GasMemProvide(gas, mem_size, requested) => { + let (mem_gas_cost, new_mem_gas, new_mem_size) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem_size)); + let gas = overflowing!(gas.overflow_add(mem_gas_cost)); + let provided = try!(self.gas_provided(schedule, gas, requested)); + let total_gas = overflowing!(gas.overflow_add(provided)); + + InstructionRequirements { + gas_cost: total_gas, + provide_gas: Some(provided), + memory_required_size: new_mem_size, + memory_total_gas: new_mem_gas, + } }, - InstructionCost::GasMemCopy(gas, mem_size, copy) => { + Request::GasMemCopy(gas, mem_size, copy) => { let (mem_gas_cost, new_mem_gas, new_mem_size) = try!(self.mem_gas_cost(schedule, current_mem_size, &mem_size)); let copy = overflowing!(add_gas_usize(copy, 31)) >> 5; let copy_gas = Gas::from(schedule.copy_gas) * copy; let gas = overflowing!(gas.overflow_add(copy_gas)); let gas = overflowing!(gas.overflow_add(mem_gas_cost)); - Ok((gas, new_mem_gas, new_mem_size, None)) - } - } + + InstructionRequirements { + gas_cost: gas, + provide_gas: None, + memory_required_size: new_mem_size, + memory_total_gas: new_mem_gas, + } + }, + }) } fn mem_gas_cost(&self, schedule: &evm::Schedule, current_mem_size: usize, mem_size: &Gas) -> evm::Result<(Gas, Gas, usize)> { @@ -256,7 +284,7 @@ impl Gasometer { let a = overflowing!(s.overflow_mul(Gas::from(schedule.memory_gas))); // Calculate s*s/quad_coeff_div - debug_assert_eq!(schedule.quad_coeff_div, 512); + assert_eq!(schedule.quad_coeff_div, 512); let b = overflowing!(s.overflow_mul_shr(s, 9)); Ok(overflowing!(a.overflow_add(b))) }; @@ -328,3 +356,4 @@ fn test_calculate_mem_cost() { assert_eq!(new_mem_gas, 3); assert_eq!(mem_size, 32); } + diff --git a/ethcore/src/evm/interpreter/mod.rs b/ethcore/src/evm/interpreter/mod.rs index 8ded2e1f14..bb9791abe1 100644 --- a/ethcore/src/evm/interpreter/mod.rs +++ b/ethcore/src/evm/interpreter/mod.rs @@ -120,14 +120,14 @@ impl evm::Evm for Interpreter { try!(self.verify_instruction(ext, instruction, info, &stack)); // Calculate gas cost - let (gas_cost, mem_gas, mem_size, provided) = try!(gasometer.get_gas_cost_mem(ext, instruction, info, &stack, self.mem.size())); + let requirements = try!(gasometer.requirements(ext, instruction, info, &stack, self.mem.size())); // TODO: make compile-time removable if too much of a performance hit. - let trace_executed = ext.trace_prepare_execute(reader.position - 1, instruction, &gas_cost.as_u256()); + let trace_executed = ext.trace_prepare_execute(reader.position - 1, instruction, &requirements.gas_cost.as_u256()); - try!(gasometer.verify_gas(&gas_cost)); - self.mem.expand(mem_size); - gasometer.current_mem_gas = mem_gas; - gasometer.current_gas = gasometer.current_gas - gas_cost; + try!(gasometer.verify_gas(&requirements.gas_cost)); + self.mem.expand(requirements.memory_required_size); + gasometer.current_mem_gas = requirements.memory_total_gas; + gasometer.current_gas = gasometer.current_gas - requirements.gas_cost; evm_debug!({ informant.before_instruction(reader.position, instruction, info, &gasometer.current_gas, &stack) }); @@ -138,7 +138,7 @@ impl evm::Evm for Interpreter { // Execute instruction let result = try!(self.exec_instruction( - gasometer.current_gas, ¶ms, ext, instruction, &mut reader, &mut stack, provided + gasometer.current_gas, ¶ms, ext, instruction, &mut reader, &mut stack, requirements.provide_gas )); evm_debug!({ informant.after_instruction(instruction) }); diff --git a/evmbin/Cargo.lock b/evmbin/Cargo.lock index 600af473b1..fde83d1bff 100644 --- a/evmbin/Cargo.lock +++ b/evmbin/Cargo.lock @@ -155,7 +155,7 @@ name = "ethash" version = "1.4.0" dependencies = [ "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "sha3 0.1.0", ] @@ -208,6 +208,9 @@ dependencies = [ [[package]] name = "ethcore-bloom-journal" version = "0.1.0" +dependencies = [ + "siphasher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "ethcore-devtools" @@ -223,7 +226,7 @@ dependencies = [ "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.5.1 (git+https://github.com/ethcore/mio?branch=v0.5.x)", - "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -275,8 +278,9 @@ dependencies = [ "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.77 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.1.0", "rocksdb 0.4.5 (git+https://github.com/ethcore/rust-rocksdb)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", @@ -334,6 +338,7 @@ dependencies = [ "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -632,13 +637,28 @@ name = "odds" version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "owning_ref" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "parking_lot" -version = "0.2.8" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -867,6 +887,11 @@ dependencies = [ "gcc 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "siphasher" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "slab" version = "0.1.3" @@ -1179,7 +1204,9 @@ dependencies = [ "checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" "checksum num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "cee7e88156f3f9e19bdd598f8d6c9db7bf4078f99f8381f43a55b09648d1a6e3" "checksum odds 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "e04630a62b3f1cc8c58b4d8f2555a40136f02b420e158242936ef286a72d33a0" -"checksum parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "968f685642555d2f7e202c48b8b11de80569e9bfea817f7f12d7c61aac62d4e6" +"checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7" +"checksum parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e1435e7a2a00dfebededd6c6bdbd54008001e94b4a2aadd6aef0dc4c56317621" +"checksum parking_lot_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb1b97670a2ffadce7c397fb80a3d687c4f3060140b885621ef1653d0e5d5068" "checksum primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0e31b86efadeaeb1235452171a66689682783149a6249ff334a2c5d8218d00a4" "checksum primal-bit 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "464a91febc06166783d4f5ba3577b5ed8dda8e421012df80bfe48a971ed7be8f" "checksum primal-check 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "647c81b67bb9551a7b88d0bcd785ac35b7d0bf4b2f358683d7c2375d04daec51" @@ -1205,6 +1232,7 @@ dependencies = [ "checksum serde_codegen 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e575e583f7d162e163af117fb9791fbd2bd203c31023b3219617e12c5997a738" "checksum serde_codegen_internals 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "318f7e77aa5187391d74aaf4553d2189f56b0ce25e963414c951b97877ffdcec" "checksum serde_json 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb6b19e74d9f65b9d03343730b643d729a446b29376785cd65efdff4675e2fc" +"checksum siphasher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c44e42fa187b5a8782489cf7740cc27c3125806be2bf33563cf5e02e9533fcd" "checksum slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d807fd58c4181bbabed77cb3b891ba9748241a552bcc5be698faaebefc54f46e" "checksum slab 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6dbdd334bd28d328dad1c41b0ea662517883d8880d8533895ef96c8003dec9c4" "checksum smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc8d19212aacecf95e4a7a2179b26f7aeb9732a915cf01f05b0d3e044865410" diff --git a/evmbin/src/ext.rs b/evmbin/src/ext.rs index 79e6eb3bdc..11fb3a8763 100644 --- a/evmbin/src/ext.rs +++ b/evmbin/src/ext.rs @@ -31,7 +31,7 @@ pub struct FakeExt { impl Default for FakeExt { fn default() -> Self { FakeExt { - schedule: Schedule::new_homestead(), + schedule: Schedule::new_homestead_gas_fix(), store: HashMap::new(), depth: 1, } -- GitLab From 07fca24b446cc0d36bf8fe45856c61af26820929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 27 Oct 2016 19:29:55 +0200 Subject: [PATCH 241/393] Next nonce RPC (#2917) --- rpc/src/v1/impls/ethcore.rs | 13 +++++++++++++ rpc/src/v1/tests/mocked/ethcore.rs | 24 +++++++++++++++++++++++- rpc/src/v1/traits/ethcore.rs | 4 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/rpc/src/v1/impls/ethcore.rs b/rpc/src/v1/impls/ethcore.rs index 1a1410ebdc..2619b84dae 100644 --- a/rpc/src/v1/impls/ethcore.rs +++ b/rpc/src/v1/impls/ethcore.rs @@ -334,4 +334,17 @@ impl Ethcore for EthcoreClient where self.dapps_port .ok_or_else(|| errors::dapps_disabled()) } + + fn next_nonce(&self, address: H160) -> Result { + try!(self.active()); + let address: Address = address.into(); + let miner = take_weak!(self.miner); + let client = take_weak!(self.client); + + Ok(miner.last_nonce(&address) + .map(|n| n + 1.into()) + .unwrap_or_else(|| client.latest_nonce(&address)) + .into() + ) + } } diff --git a/rpc/src/v1/tests/mocked/ethcore.rs b/rpc/src/v1/tests/mocked/ethcore.rs index ea4112c19f..e33f1a8f73 100644 --- a/rpc/src/v1/tests/mocked/ethcore.rs +++ b/rpc/src/v1/tests/mocked/ethcore.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use util::log::RotatingLogger; -use util::U256; +use util::{U256, Address}; use ethsync::ManageNetwork; use ethcore::client::{TestBlockChainClient}; use ethstore::ethkey::{Generator, Random}; @@ -320,3 +320,25 @@ fn rpc_ethcore_dapps_port() { assert_eq!(io1.handle_request_sync(request), Some(response1.to_owned())); assert_eq!(io2.handle_request_sync(request), Some(response2.to_owned())); } + +#[test] +fn rpc_ethcore_next_nonce() { + let deps = Dependencies::new(); + let address = Address::default(); + let io1 = deps.default_client(); + let deps = Dependencies::new(); + deps.miner.last_nonces.write().insert(address.clone(), 2.into()); + let io2 = deps.default_client(); + + let request = r#"{ + "jsonrpc": "2.0", + "method": "ethcore_nextNonce", + "params": [""#.to_owned() + &format!("0x{:?}", address) + r#""], + "id": 1 + }"#; + let response1 = r#"{"jsonrpc":"2.0","result":"0x0","id":1}"#; + let response2 = r#"{"jsonrpc":"2.0","result":"0x3","id":1}"#; + + assert_eq!(io1.handle_request_sync(&request), Some(response1.to_owned())); + assert_eq!(io2.handle_request_sync(&request), Some(response2.to_owned())); +} diff --git a/rpc/src/v1/traits/ethcore.rs b/rpc/src/v1/traits/ethcore.rs index ea5f0b13dd..e787ce5ac1 100644 --- a/rpc/src/v1/traits/ethcore.rs +++ b/rpc/src/v1/traits/ethcore.rs @@ -125,5 +125,9 @@ build_rpc_trait! { /// Returns current Dapps Server port or an error if dapps server is disabled. #[rpc(name = "ethcore_dappsPort")] fn dapps_port(&self) -> Result; + + /// Returns next nonce for particular sender. Should include all transactions in the queue. + #[rpc(name = "ethcore_nextNonce")] + fn next_nonce(&self, H160) -> Result; } } -- GitLab From a4e84c375e05f5dbef26b730094fd653a61803ca Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 27 Oct 2016 19:30:13 +0200 Subject: [PATCH 242/393] Pass the js-precompiled commit hash to cargo update (#2920) --- js/scripts/release.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/scripts/release.sh b/js/scripts/release.sh index 392bdd3b85..8e90713cbe 100755 --- a/js/scripts/release.sh +++ b/js/scripts/release.sh @@ -28,9 +28,10 @@ git remote add origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/js-pr git fetch origin 2>$GITLOG git checkout -b $CI_BUILD_REF_NAME git add . -git commit -m "$UTCDATE [compiled]" +git commit -m "$UTCDATE" git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG +PRECOMPILED_HASH=$(git rev-parse HEAD) # back to root popd @@ -43,7 +44,7 @@ git remote set-url origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/p git reset --hard origin/$CI_BUILD_REF_NAME 2>$GITLOG # bump js-precompiled, add, commit & push -cargo update -p parity-ui-precompiled +cargo update -p parity-ui-precompiled --precise $PRECOMPILED_HASH git add . || true git commit -m "[ci skip] js-precompiled $UTCDATE" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG -- GitLab From 22af04e81d6be8bec6b4b1f164aeb84420c7f9c4 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 17:53:23 +0000 Subject: [PATCH 243/393] [ci skip] js-precompiled 20161027-175225 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 6fac719d41..dff3416e54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1212,7 +1212,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#0053be493c742cbd7332ba647b3c84d35327abd7" +source = "git+https://github.com/ethcore/js-precompiled.git#0b2b13109f3cc4daa33511bddcb1c7edefc25dd1" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 9fd8ac6a155825f150b0c0c78116e42ed4db4e67 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 27 Oct 2016 21:05:47 +0200 Subject: [PATCH 244/393] additional release.sh debugging info (#2922) --- js/scripts/release.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/js/scripts/release.sh b/js/scripts/release.sh index 8e90713cbe..c08d92ca00 100755 --- a/js/scripts/release.sh +++ b/js/scripts/release.sh @@ -23,28 +23,37 @@ rm -rf ./.git git init # add local files and send it up +echo "Setting up GitHub config for js-precompiled" setup_git_user + +echo "Checking out $CI_BUILD_REF_NAME branch" git remote add origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/js-precompiled.git git fetch origin 2>$GITLOG git checkout -b $CI_BUILD_REF_NAME + +echo "Committing compiled files for $UTCDATE" git add . git commit -m "$UTCDATE" + +echo "Merging remote" git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG PRECOMPILED_HASH=$(git rev-parse HEAD) +echo "Remote updated with [$PRECOMPILED_HASH]" + # back to root popd -# inti git with right origin +echo "Setting up GitHub config for parity" setup_git_user git remote set-url origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/parity.git - -# at this point we have a detached head on GitLab, reset git reset --hard origin/$CI_BUILD_REF_NAME 2>$GITLOG -# bump js-precompiled, add, commit & push +echo "Updating cargo package parity-ui-precompiled" cargo update -p parity-ui-precompiled --precise $PRECOMPILED_HASH + +echo "Committing updated files" git add . || true git commit -m "[ci skip] js-precompiled $UTCDATE" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG -- GitLab From a9e7f592034038c6ca71837faa37f89d3e36098c Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 27 Oct 2016 21:15:41 +0200 Subject: [PATCH 245/393] Merge branch 'master' into jg-js-release-fix (#2924) # Conflicts: # js/scripts/release.sh --- js/scripts/release.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/js/scripts/release.sh b/js/scripts/release.sh index c08d92ca00..4f5bf421d9 100755 --- a/js/scripts/release.sh +++ b/js/scripts/release.sh @@ -40,8 +40,6 @@ git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG PRECOMPILED_HASH=$(git rev-parse HEAD) -echo "Remote updated with [$PRECOMPILED_HASH]" - # back to root popd @@ -50,11 +48,11 @@ setup_git_user git remote set-url origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/parity.git git reset --hard origin/$CI_BUILD_REF_NAME 2>$GITLOG -echo "Updating cargo package parity-ui-precompiled" -cargo update -p parity-ui-precompiled --precise $PRECOMPILED_HASH +echo "Updating cargo package parity-ui-precompiled#$PRECOMPILED_HASH" +cargo update -p parity-ui-precompiled --precise "$PRECOMPILED_HASH" echo "Committing updated files" -git add . || true +git add . git commit -m "[ci skip] js-precompiled $UTCDATE" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG -- GitLab From 908e563f1884c45b2fbac534fb5dc801bf0a37e4 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 27 Oct 2016 22:26:47 +0200 Subject: [PATCH 246/393] Revert hash updates until testable (#2925) * Revert hash updates until testable * Re-add hash to echo (debug info) --- js/scripts/release.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/scripts/release.sh b/js/scripts/release.sh index 4f5bf421d9..95e561b77a 100755 --- a/js/scripts/release.sh +++ b/js/scripts/release.sh @@ -38,7 +38,7 @@ git commit -m "$UTCDATE" echo "Merging remote" git merge origin/$CI_BUILD_REF_NAME -X ours --commit -m "$UTCDATE [release]" git push origin HEAD:refs/heads/$CI_BUILD_REF_NAME 2>$GITLOG -PRECOMPILED_HASH=$(git rev-parse HEAD) +PRECOMPILED_HASH=`git rev-parse HEAD` # back to root popd @@ -49,7 +49,8 @@ git remote set-url origin https://${GITHUB_JS_PRECOMPILED}:@github.com/ethcore/p git reset --hard origin/$CI_BUILD_REF_NAME 2>$GITLOG echo "Updating cargo package parity-ui-precompiled#$PRECOMPILED_HASH" -cargo update -p parity-ui-precompiled --precise "$PRECOMPILED_HASH" +cargo update -p parity-ui-precompiled +# --precise "$PRECOMPILED_HASH" echo "Committing updated files" git add . -- GitLab From 151ec869a6ac0caf64dc0f6c46f181a7d7b3f826 Mon Sep 17 00:00:00 2001 From: GitLab Build Bot Date: Thu, 27 Oct 2016 22:41:22 +0200 Subject: [PATCH 247/393] [ci skip] js-precompiled 20161027-204107 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index dff3416e54..f7c08953e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1212,7 +1212,7 @@ dependencies = [ [[package]] name = "parity-ui-precompiled" version = "1.4.0" -source = "git+https://github.com/ethcore/js-precompiled.git#0b2b13109f3cc4daa33511bddcb1c7edefc25dd1" +source = "git+https://github.com/ethcore/js-precompiled.git#3f31aca3dd0b71871f6439407c3e258c3ed91abf" dependencies = [ "parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -- GitLab From 55efa16e4248d48375f4bb5d8de96e1fd3387422 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 28 Oct 2016 12:00:01 +0200 Subject: [PATCH 248/393] More bootnodes (#2926) --- ethcore/res/ethereum/frontier.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ethcore/res/ethereum/frontier.json b/ethcore/res/ethereum/frontier.json index d5f57defdc..111dff30e7 100644 --- a/ethcore/res/ethereum/frontier.json +++ b/ethcore/res/ethereum/frontier.json @@ -158,9 +158,17 @@ "stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544" }, "nodes": [ - "enode://cd6611461840543d5b9c56fbf088736154c699c43973b3a1a32390cf27106f87e58a818a606ccb05f3866de95a4fe860786fea71bf891ea95f234480d3022aa3@136.243.154.245:30303", + "enode://efe4f2493f4aff2d641b1db8366b96ddacfe13e7a6e9c8f8f8cf49f9cdba0fdf3258d8c8f8d0c5db529f8123c8f1d95f36d54d590ca1bb366a5818b9a4ba521c@163.172.187.252:30303", + "enode://cd6611461840543d5b9c56fbf088736154c699c43973b3a1a32390cf27106f87e58a818a606ccb05f3866de95a4fe860786fea71bf891ea95f234480d3022aa3@163.172.157.114:30303", "enode://bcc7240543fe2cf86f5e9093d05753dd83343f8fda7bf0e833f65985c73afccf8f981301e13ef49c4804491eab043647374df1c4adf85766af88a624ecc3330e@136.243.154.244:30303", "enode://ed4227681ca8c70beb2277b9e870353a9693f12e7c548c35df6bca6a956934d6f659999c2decb31f75ce217822eefca149ace914f1cbe461ed5a2ebaf9501455@88.212.206.70:30303", + "enode://cadc6e573b6bc2a9128f2f635ac0db3353e360b56deef239e9be7e7fce039502e0ec670b595f6288c0d2116812516ad6b6ff8d5728ff45eba176989e40dead1e@37.128.191.230:30303", + "enode://595a9a06f8b9bc9835c8723b6a82105aea5d55c66b029b6d44f229d6d135ac3ecdd3e9309360a961ea39d7bee7bac5d03564077a4e08823acc723370aace65ec@46.20.235.22:30303", + "enode://029178d6d6f9f8026fc0bc17d5d1401aac76ec9d86633bba2320b5eed7b312980c0a210b74b20c4f9a8b0b2bf884b111fa9ea5c5f916bb9bbc0e0c8640a0f56c@216.158.85.185:30303", + "enode://84f5d5957b4880a8b0545e32e05472318898ad9fc8ebe1d56c90c12334a98e12351eccfdf3a2bf72432ac38b57e9d348400d17caa083879ade3822390f89773f@10.1.52.78:30303", + "enode://f90dc9b9bf7b8db97726b7849e175f1eb2707f3d8f281c929336e398dd89b0409fc6aeceb89e846278e9d3ecc3857cebfbe6758ff352ece6fe5d42921ee761db@10.1.173.87:30303", + "enode://6a868ced2dec399c53f730261173638a93a40214cf299ccf4d42a76e3fa54701db410669e8006347a4b3a74fa090bb35af0320e4bc8d04cf5b7f582b1db285f5@10.3.149.199:30303", + "enode://fdd1b9bb613cfbc200bba17ce199a9490edc752a833f88d4134bf52bb0d858aa5524cb3ec9366c7a4ef4637754b8b15b5dc913e4ed9fdb6022f7512d7b63f181@212.47.247.103:30303", "enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303", "enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:30303", "enode://1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082@52.74.57.123:30303", -- GitLab From 956a059a06806cf01c9dce39ec9b42e2a9f6e576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 28 Oct 2016 16:02:23 +0200 Subject: [PATCH 249/393] Updating bootnodes for ETC (#2938) --- ethcore/res/ethereum/classic.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ethcore/res/ethereum/classic.json b/ethcore/res/ethereum/classic.json index 5d951752f9..5be7b1caf8 100644 --- a/ethcore/res/ethereum/classic.json +++ b/ethcore/res/ethereum/classic.json @@ -39,10 +39,18 @@ "stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544" }, "nodes": [ + "enode://08c7ee6a4f861ff0664a49532bcc86de1363acd608999d1b76609bb9bc278649906f069057630fd9493924a368b5d1dc9b8f8bf13ac26df72512f6d1fabd8c95@45.32.7.81:30303", "enode://e809c4a2fec7daed400e5e28564e23693b23b2cc5a019b612505631bbe7b9ccf709c1796d2a3d29ef2b045f210caf51e3c4f5b6d3587d43ad5d6397526fa6179@174.112.32.157:30303", "enode://687be94c3a7beaa3d2fde82fa5046cdeb3e8198354e05b29d6e0d4e276713e3707ac10f784a7904938b06b46c764875c241b0337dd853385a4d8bfcbf8190647@95.183.51.229:30303", "enode://6e538e7c1280f0a31ff08b382db5302480f775480b8e68f8febca0ceff81e4b19153c6f8bf60313b93bef2cc34d34e1df41317de0ce613a201d1660a788a03e2@52.206.67.235:30303", - "enode://217ebe27e89bf4fec8ce06509323ff095b1014378deb75ab2e5f6759a4e8750a3bd8254b8c6833136e4d5e58230d65ee8ab34a5db5abf0640408c4288af3c8a7@188.138.1.237:30303" + "enode://ca5ae4eca09ba6787e29cf6d86f7634d07aae6b9e6317a59aff675851c0bf445068173208cf8ef7f5cd783d8e29b85b2fa3fa358124cf0546823149724f9bde1@138.68.1.16:30303", + "enode://217ebe27e89bf4fec8ce06509323ff095b1014378deb75ab2e5f6759a4e8750a3bd8254b8c6833136e4d5e58230d65ee8ab34a5db5abf0640408c4288af3c8a7@188.138.1.237:30303", + "enode://fa20444ef991596ce99b81652ac4e61de1eddc4ff21d3cd42762abd7ed47e7cf044d3c9ccddaf6035d39725e4eb372806787829ccb9a08ec7cb71883cb8c3abd@50.149.116.182:30303", + "enode://4bd6a4df3612c718333eb5ea7f817923a8cdf1bed89cee70d1710b45a0b6b77b2819846440555e451a9b602ad2efa2d2facd4620650249d8468008946887820a@71.178.232.20:30304", + "enode://921cf8e4c345fe8db913c53964f9cadc667644e7f20195a0b7d877bd689a5934e146ff2c2259f1bae6817b6585153a007ceb67d260b720fa3e6fc4350df25c7f@51.255.49.170:30303", + "enode://ffea3b01c000cdd89e1e9229fea3e80e95b646f9b2aa55071fc865e2f19543c9b06045cc2e69453e6b78100a119e66be1b5ad50b36f2ffd27293caa28efdd1b2@128.199.93.177:3030", + "enode://ee3da491ce6a155eb132708eb0e8d04b0637926ec0ae1b79e63fc97cb9fc3818f49250a0ae0d7f79ed62b66ec677f408c4e01741504dc7a051e274f1e803d454@91.121.65.179:40404", + "enode://48e063a6cf5f335b1ef2ed98126bf522cf254396f850c7d442fe2edbbc23398787e14cd4de7968a00175a82762de9cbe9e1407d8ccbcaeca5004d65f8398d759@159.203.255.59:30303" ], "accounts": { "0000000000000000000000000000000000000001": { "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } }, -- GitLab From 29ab4ecac1e78d90980a56f39116c46f40f9a473 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 28 Oct 2016 16:04:44 +0200 Subject: [PATCH 250/393] Shared code cache (#2921) * add a global code cache * extract memory-limited lru cache to util * use memory-limited code cache * account for code cache size in mem_used --- Cargo.lock | 9 +-- ethcore/Cargo.toml | 2 +- ethcore/src/evm/interpreter/shared_cache.rs | 53 +++++--------- ethcore/src/state/account.rs | 21 ++++-- ethcore/src/state/mod.rs | 40 +++++++---- ethcore/src/state_db.rs | 34 ++++++++- util/Cargo.toml | 1 + util/src/cache.rs | 79 +++++++++++++++++++++ util/src/lib.rs | 2 + 9 files changed, 180 insertions(+), 61 deletions(-) create mode 100644 util/src/cache.rs diff --git a/Cargo.lock b/Cargo.lock index f7c08953e9..26fab3d49b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -298,7 +298,7 @@ dependencies = [ "hyper 0.9.4 (git+https://github.com/ethcore/hyper)", "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lru-cache 0.0.7 (git+https://github.com/contain-rs/lru-cache)", + "lru-cache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -555,6 +555,7 @@ dependencies = [ "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "lru-cache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", @@ -907,8 +908,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lru-cache" -version = "0.0.7" -source = "git+https://github.com/contain-rs/lru-cache#13255e33c45ceb69a4b143f235a4322df5fb580e" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1987,7 +1988,7 @@ dependencies = [ "checksum linked-hash-map 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bda158e0dabeb97ee8a401f4d17e479d6b891a14de0bba79d5cc2d4d325b5e48" "checksum linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd" "checksum log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ab83497bf8bf4ed2a74259c1c802351fcd67a65baa86394b6ba73c36f4838054" -"checksum lru-cache 0.0.7 (git+https://github.com/contain-rs/lru-cache)" = "" +"checksum lru-cache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "656fa4dfcb02bcf1063c592ba3ff6a5303ee1f2afe98c8a889e8b1a77c6dfdb7" "checksum matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "15305656809ce5a4805b1ff2946892810992197ce1270ff79baded852187942e" "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" "checksum mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a74cc2587bf97c49f3f5bab62860d6abf3902ca73b66b51d9b049fbdcd727bd2" diff --git a/ethcore/Cargo.toml b/ethcore/Cargo.toml index d48e76e941..1f84133394 100644 --- a/ethcore/Cargo.toml +++ b/ethcore/Cargo.toml @@ -27,7 +27,6 @@ time = "0.1" rand = "0.3" byteorder = "0.5" transient-hashmap = "0.1" -lru-cache = { git = "https://github.com/contain-rs/lru-cache" } evmjit = { path = "../evmjit", optional = true } clippy = { version = "0.0.96", optional = true} ethash = { path = "../ethash" } @@ -40,6 +39,7 @@ ethstore = { path = "../ethstore" } ethkey = { path = "../ethkey" } ethcore-ipc-nano = { path = "../ipc/nano" } rlp = { path = "../util/rlp" } +lru-cache = "0.1.0" ethcore-bloom-journal = { path = "../util/bloom" } [dependencies.hyper] diff --git a/ethcore/src/evm/interpreter/shared_cache.rs b/ethcore/src/evm/interpreter/shared_cache.rs index dee5575227..cacc4dde39 100644 --- a/ethcore/src/evm/interpreter/shared_cache.rs +++ b/ethcore/src/evm/interpreter/shared_cache.rs @@ -15,20 +15,27 @@ // along with Parity. If not, see . use std::sync::Arc; -use lru_cache::LruCache; -use util::{H256, Mutex}; +use util::{H256, HeapSizeOf, Mutex}; use util::sha3::*; +use util::cache::MemoryLruCache; use bit_set::BitSet; use super::super::instructions; -const INITIAL_CAPACITY: usize = 32; const DEFAULT_CACHE_SIZE: usize = 4 * 1024 * 1024; +// stub for a HeapSizeOf implementation. +struct Bits(Arc); + +impl HeapSizeOf for Bits { + fn heap_size_of_children(&self) -> usize { + // dealing in bits here + self.0.capacity() * 8 + } +} + /// Global cache for EVM interpreter pub struct SharedCache { - jump_destinations: Mutex>>, - max_size: usize, - cur_size: Mutex, + jump_destinations: Mutex>, } impl SharedCache { @@ -36,9 +43,7 @@ impl SharedCache { /// to cache. pub fn new(max_size: usize) -> Self { SharedCache { - jump_destinations: Mutex::new(LruCache::new(INITIAL_CAPACITY)), - max_size: max_size * 8, // dealing with bits here. - cur_size: Mutex::new(0), + jump_destinations: Mutex::new(MemoryLruCache::new(max_size)), } } @@ -49,37 +54,11 @@ impl SharedCache { } if let Some(d) = self.jump_destinations.lock().get_mut(code_hash) { - return d.clone(); + return d.0.clone(); } let d = Self::find_jump_destinations(code); - - { - let mut cur_size = self.cur_size.lock(); - *cur_size += d.capacity(); - - let mut jump_dests = self.jump_destinations.lock(); - let cap = jump_dests.capacity(); - - // grow the cache as necessary; it operates on amount of items - // but we're working based on memory usage. - if jump_dests.len() == cap && *cur_size < self.max_size { - jump_dests.set_capacity(cap * 2); - } - - // account for any element displaced from the cache. - if let Some(lru) = jump_dests.insert(code_hash.clone(), d.clone()) { - *cur_size -= lru.capacity(); - } - - // remove elements until we are below the memory target. - while *cur_size > self.max_size { - match jump_dests.remove_lru() { - Some((_, v)) => *cur_size -= v.capacity(), - _ => break, - } - } - } + self.jump_destinations.lock().insert(code_hash.clone(), Bits(d.clone())); d } diff --git a/ethcore/src/state/account.rs b/ethcore/src/state/account.rs index 2bd8a2d15f..d8d281b176 100644 --- a/ethcore/src/state/account.rs +++ b/ethcore/src/state/account.rs @@ -247,23 +247,34 @@ impl Account { } /// Provide a database to get `code_hash`. Should not be called if it is a contract without code. - pub fn cache_code(&mut self, db: &HashDB) -> bool { + pub fn cache_code(&mut self, db: &HashDB) -> Option> { // TODO: fill out self.code_cache; trace!("Account::cache_code: ic={}; self.code_hash={:?}, self.code_cache={}", self.is_cached(), self.code_hash, self.code_cache.pretty()); - self.is_cached() || + + if self.is_cached() { return Some(self.code_cache.clone()) } + match db.get(&self.code_hash) { Some(x) => { self.code_size = Some(x.len()); self.code_cache = Arc::new(x.to_vec()); - true + Some(self.code_cache.clone()) }, _ => { warn!("Failed reverse get of {}", self.code_hash); - false + None }, } } + /// Provide code to cache. For correctness, should be the correct code for the + /// account. + pub fn cache_given_code(&mut self, code: Arc) { + trace!("Account::cache_given_code: ic={}; self.code_hash={:?}, self.code_cache={}", self.is_cached(), self.code_hash, self.code_cache.pretty()); + + self.code_size = Some(code.len()); + self.code_cache = code; + } + /// Provide a database to get `code_size`. Should not be called if it is a contract without code. pub fn cache_code_size(&mut self, db: &HashDB) -> bool { // TODO: fill out self.code_cache; @@ -476,7 +487,7 @@ mod tests { }; let mut a = Account::from_rlp(&rlp); - assert!(a.cache_code(&db.immutable())); + assert!(a.cache_code(&db.immutable()).is_some()); let mut a = Account::from_rlp(&rlp); assert_eq!(a.note_code(vec![0x55, 0x44, 0xffu8]), Ok(())); diff --git a/ethcore/src/state/mod.rs b/ethcore/src/state/mod.rs index bef20d257d..7c0f43d972 100644 --- a/ethcore/src/state/mod.rs +++ b/ethcore/src/state/mod.rs @@ -599,14 +599,30 @@ impl State { pod_state::diff_pod(&state_pre.to_pod(), &pod_state_post) } - fn update_account_cache(require: RequireCache, account: &mut Account, db: &HashDB) { - match require { - RequireCache::None => {}, - RequireCache::Code => { - account.cache_code(db); - } - RequireCache::CodeSize => { - account.cache_code_size(db); + // load required account data from the databases. + fn update_account_cache(require: RequireCache, account: &mut Account, state_db: &StateDB, db: &HashDB) { + match (account.is_cached(), require) { + (true, _) | (false, RequireCache::None) => {} + (false, require) => { + // if there's already code in the global cache, always cache it + // locally. + let hash = account.code_hash(); + match state_db.get_cached_code(&hash) { + Some(code) => account.cache_given_code(code), + None => match require { + RequireCache::None => {}, + RequireCache::Code => { + if let Some(code) = account.cache_code(db) { + // propagate code loaded from the database to + // the global code cache. + state_db.cache_code(hash, code) + } + } + RequireCache::CodeSize => { + account.cache_code_size(db); + } + } + } } } } @@ -620,7 +636,7 @@ impl State { if let Some(ref mut maybe_acc) = self.cache.borrow_mut().get_mut(a) { if let Some(ref mut account) = maybe_acc.account { let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), account.address_hash(a)); - Self::update_account_cache(require, account, accountdb.as_hashdb()); + Self::update_account_cache(require, account, &self.db, accountdb.as_hashdb()); return f(Some(account)); } return f(None); @@ -629,7 +645,7 @@ impl State { let result = self.db.get_cached(a, |mut acc| { if let Some(ref mut account) = acc { let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), account.address_hash(a)); - Self::update_account_cache(require, account, accountdb.as_hashdb()); + Self::update_account_cache(require, account, &self.db, accountdb.as_hashdb()); } f(acc.map(|a| &*a)) }); @@ -647,7 +663,7 @@ impl State { }; if let Some(ref mut account) = maybe_acc.as_mut() { let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), account.address_hash(a)); - Self::update_account_cache(require, account, accountdb.as_hashdb()); + Self::update_account_cache(require, account, &self.db, accountdb.as_hashdb()); } let r = f(maybe_acc.as_ref()); self.insert_cache(a, AccountEntry::new_clean(maybe_acc)); @@ -703,7 +719,7 @@ impl State { if require_code { let addr_hash = account.address_hash(a); let accountdb = self.factories.accountdb.readonly(self.db.as_hashdb(), addr_hash); - account.cache_code(accountdb.as_hashdb()); + Self::update_account_cache(RequireCache::Code, account, &self.db, accountdb.as_hashdb()); } account }, diff --git a/ethcore/src/state_db.rs b/ethcore/src/state_db.rs index dfa65ab1d9..affc0b4057 100644 --- a/ethcore/src/state_db.rs +++ b/ethcore/src/state_db.rs @@ -16,6 +16,7 @@ use std::collections::{VecDeque, HashSet}; use lru_cache::LruCache; +use util::cache::MemoryLruCache; use util::journaldb::JournalDB; use util::hash::{H256}; use util::hashdb::HashDB; @@ -33,12 +34,17 @@ pub const ACCOUNT_BLOOM_HASHCOUNT_KEY: &'static [u8] = b"account_hash_count"; const STATE_CACHE_BLOCKS: usize = 12; +// The percentage of supplied cache size to go to accounts. +const ACCOUNT_CACHE_RATIO: usize = 90; + /// Shared canonical state cache. struct AccountCache { /// DB Account cache. `None` indicates that account is known to be missing. // When changing the type of the values here, be sure to update `mem_used` and // `new`. accounts: LruCache>, + /// DB Code cache. Maps code hashes to shared bytes. + code: MemoryLruCache>>, /// Information on the modifications in recently committed blocks; specifically which addresses /// changed in which block. Ordered by block number. modifications: VecDeque, @@ -111,12 +117,15 @@ impl StateDB { // into the `AccountCache` structure as its own `LruCache<(Address, H256), H256>`. pub fn new(db: Box, cache_size: usize) -> StateDB { let bloom = Self::load_bloom(db.backing()); - let cache_items = cache_size / ::std::mem::size_of::>(); + let acc_cache_size = cache_size * ACCOUNT_CACHE_RATIO / 100; + let code_cache_size = cache_size - acc_cache_size; + let cache_items = acc_cache_size / ::std::mem::size_of::>(); StateDB { db: db, account_cache: Arc::new(Mutex::new(AccountCache { accounts: LruCache::new(cache_items), + code: MemoryLruCache::new(code_cache_size), modifications: VecDeque::new(), })), local_cache: Vec::new(), @@ -342,7 +351,12 @@ impl StateDB { /// Heap size used. pub fn mem_used(&self) -> usize { // TODO: account for LRU-cache overhead; this is a close approximation. - self.db.mem_used() + self.account_cache.lock().accounts.len() * ::std::mem::size_of::>() + self.db.mem_used() + { + let cache = self.account_cache.lock(); + + cache.code.current_size() + + cache.accounts.len() * ::std::mem::size_of::>() + } } /// Returns underlying `JournalDB`. @@ -362,6 +376,15 @@ impl StateDB { }) } + /// Add a global code cache entry. This doesn't need to worry about canonicality because + /// it simply maps hashes to raw code and will always be correct in the absence of + /// hash collisions. + pub fn cache_code(&self, hash: H256, code: Arc>) { + let mut cache = self.account_cache.lock(); + + cache.code.insert(hash, code); + } + /// Get basic copy of the cached account. Does not include storage. /// Returns 'None' if cache is disabled or if the account is not cached. pub fn get_cached_account(&self, addr: &Address) -> Option> { @@ -372,6 +395,13 @@ impl StateDB { cache.accounts.get_mut(addr).map(|a| a.as_ref().map(|a| a.clone_basic())) } + /// Get cached code based on hash. + pub fn get_cached_code(&self, hash: &H256) -> Option>> { + let mut cache = self.account_cache.lock(); + + cache.code.get_mut(hash).map(|code| code.clone()) + } + /// Get value from a cached account. /// Returns 'None' if cache is disabled or if the account is not cached. pub fn get_cached(&self, a: &Address, f: F) -> Option diff --git a/util/Cargo.toml b/util/Cargo.toml index 1b69395954..78cca92e0c 100644 --- a/util/Cargo.toml +++ b/util/Cargo.toml @@ -36,6 +36,7 @@ ansi_term = "0.7" tiny-keccak= "1.0" ethcore-bloom-journal = { path = "bloom" } regex = "0.1" +lru-cache = "0.1.0" [features] default = [] diff --git a/util/src/cache.rs b/util/src/cache.rs new file mode 100644 index 0000000000..2b2c50c8b5 --- /dev/null +++ b/util/src/cache.rs @@ -0,0 +1,79 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Lru-cache related utilities as quick-and-dirty wrappers around the lru-cache +//! crate. +// TODO: push changes upstream in a clean way. + +use heapsize::HeapSizeOf; +use lru_cache::LruCache; + +use std::hash::Hash; + +const INITIAL_CAPACITY: usize = 4; + +/// An LRU-cache which operates on memory used. +pub struct MemoryLruCache { + inner: LruCache, + cur_size: usize, + max_size: usize, +} + +impl MemoryLruCache { + /// Create a new cache with a maximum size in bytes. + pub fn new(max_size: usize) -> Self { + MemoryLruCache { + inner: LruCache::new(INITIAL_CAPACITY), + max_size: max_size, + cur_size: 0, + } + } + + /// Insert an item. + pub fn insert(&mut self, key: K, val: V) { + let cap = self.inner.capacity(); + + // grow the cache as necessary; it operates on amount of items + // but we're working based on memory usage. + if self.inner.len() == cap && self.cur_size < self.max_size { + self.inner.set_capacity(cap * 2); + } + + // account for any element displaced from the cache. + if let Some(lru) = self.inner.insert(key, val) { + self.cur_size -= lru.heap_size_of_children(); + } + + // remove elements until we are below the memory target. + while self.cur_size > self.max_size { + match self.inner.remove_lru() { + Some((_, v)) => self.cur_size -= v.heap_size_of_children(), + _ => break, + } + } + } + + /// Get a reference to an item in the cache. It is a logic error for its + /// heap size to be altered while borrowed. + pub fn get_mut(&mut self, key: &K) -> Option<&mut V> { + self.inner.get_mut(key) + } + + /// Currently-used size of values in bytes. + pub fn current_size(&self) -> usize { + self.cur_size + } +} \ No newline at end of file diff --git a/util/src/lib.rs b/util/src/lib.rs index e362459a6d..f5558bcfc5 100644 --- a/util/src/lib.rs +++ b/util/src/lib.rs @@ -105,6 +105,7 @@ extern crate ansi_term; extern crate tiny_keccak; extern crate rlp; extern crate regex; +extern crate lru_cache; #[macro_use] extern crate heapsize; @@ -143,6 +144,7 @@ pub mod semantic_version; pub mod log; pub mod path; pub mod snappy; +pub mod cache; mod timer; pub use common::*; -- GitLab From 2806f1d4c938c87386d0ee0f91e5a6d4446b16d4 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 28 Oct 2016 16:10:30 +0200 Subject: [PATCH 251/393] Even more snapshot validity checks (#2935) * clarify "cancelled periodic snapshot" message * more rigorous checks for snapshot validity * verify ancient blocks on import * limit number of fed blocks * make it possible to feed snapshot service canonical hashes * fix failing test build * swap ethash DAG only when more recent --- ethash/src/lib.rs | 21 +++-- ethcore/src/blockchain/blockchain.rs | 5 +- ethcore/src/client/client.rs | 23 +++++- ethcore/src/snapshot/error.rs | 12 ++- ethcore/src/snapshot/mod.rs | 80 ++++++++++++++++--- ethcore/src/snapshot/service.rs | 28 +++++-- .../src/snapshot/snapshot_service_trait.rs | 4 + ethcore/src/snapshot/tests/blocks.rs | 13 +-- sync/src/tests/snapshot.rs | 7 ++ 9 files changed, 154 insertions(+), 39 deletions(-) diff --git a/ethash/src/lib.rs b/ethash/src/lib.rs index 1308823187..a04e2486b4 100644 --- a/ethash/src/lib.rs +++ b/ethash/src/lib.rs @@ -69,14 +69,19 @@ impl EthashManager { Some(ref e) if *e == epoch => lights.recent.clone(), _ => match lights.prev_epoch.clone() { Some(e) if e == epoch => { - // swap - let t = lights.prev_epoch; - lights.prev_epoch = lights.recent_epoch; - lights.recent_epoch = t; - let t = lights.prev.clone(); - lights.prev = lights.recent.clone(); - lights.recent = t; - lights.recent.clone() + // don't swap if recent is newer. + if lights.recent_epoch > lights.prev_epoch { + None + } else { + // swap + let t = lights.prev_epoch; + lights.prev_epoch = lights.recent_epoch; + lights.recent_epoch = t; + let t = lights.prev.clone(); + lights.prev = lights.recent.clone(); + lights.recent = t; + lights.recent.clone() + } } _ => None, }, diff --git a/ethcore/src/blockchain/blockchain.rs b/ethcore/src/blockchain/blockchain.rs index 282039c16b..d95c199ede 100644 --- a/ethcore/src/blockchain/blockchain.rs +++ b/ethcore/src/blockchain/blockchain.rs @@ -792,11 +792,10 @@ impl BlockChain { /// the chain and the child's parent is this block. /// /// Used in snapshots to glue the chunks together at the end. - pub fn add_child(&self, block_hash: H256, child_hash: H256) { + pub fn add_child(&self, batch: &mut DBTransaction, block_hash: H256, child_hash: H256) { let mut parent_details = self.block_details(&block_hash) .unwrap_or_else(|| panic!("Invalid block hash: {:?}", block_hash)); - let mut batch = self.db.transaction(); parent_details.children.push(child_hash); let mut update = HashMap::new(); @@ -807,8 +806,6 @@ impl BlockChain { batch.extend_with_cache(db::COL_EXTRA, &mut *write_details, update, CacheUpdatePolicy::Overwrite); self.cache_man.lock().note_used(CacheID::BlockDetails(block_hash)); - - self.db.write(batch).unwrap(); } #[cfg_attr(feature="dev", allow(similar_names))] diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index b59d892c53..388ea97e84 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -66,6 +66,7 @@ use snapshot::{self, io as snapshot_io}; use factory::Factories; use rlp::{View, UntrustedRlp}; use state_db::StateDB; +use rand::OsRng; // re-export pub use types::blockchain_info::BlockChainInfo; @@ -144,6 +145,7 @@ pub struct Client { last_hashes: RwLock>, factories: Factories, history: u64, + rng: Mutex, } impl Client { @@ -239,6 +241,7 @@ impl Client { last_hashes: RwLock::new(VecDeque::new()), factories: factories, history: history, + rng: Mutex::new(try!(OsRng::new().map_err(::util::UtilError::StdIo))), }; Ok(Arc::new(client)) } @@ -434,14 +437,26 @@ impl Client { /// Import a block with transaction receipts. /// The block is guaranteed to be the next best blocks in the first block sequence. /// Does no sealing or transaction validation. - fn import_old_block(&self, block_bytes: Bytes, receipts_bytes: Bytes) -> H256 { + fn import_old_block(&self, block_bytes: Bytes, receipts_bytes: Bytes) -> Result { let block = BlockView::new(&block_bytes); - let hash = block.header().hash(); + let header = block.header(); + let hash = header.hash(); let _import_lock = self.import_lock.lock(); { let _timer = PerfTimer::new("import_old_block"); + let mut rng = self.rng.lock(); let chain = self.chain.read(); + // verify block. + try!(::snapshot::verify_old_block( + &mut *rng, + &header, + &*self.engine, + &*chain, + Some(&block_bytes), + false, + )); + // Commit results let receipts = ::rlp::decode(&receipts_bytes); let mut batch = DBTransaction::new(&self.db.read()); @@ -451,7 +466,7 @@ impl Client { chain.commit(); } self.db.read().flush().expect("DB flush failed."); - hash + Ok(hash) } fn commit_block(&self, block: B, hash: &H256, block_data: &[u8]) -> ImportRoute where B: IsBlock + Drain { @@ -1036,7 +1051,7 @@ impl BlockChainClient for Client { return Err(BlockImportError::Block(BlockError::UnknownParent(header.parent_hash()))); } } - Ok(self.import_old_block(block_bytes, receipts_bytes)) + self.import_old_block(block_bytes, receipts_bytes).map_err(Into::into) } fn queue_info(&self) -> BlockQueueInfo { diff --git a/ethcore/src/snapshot/error.rs b/ethcore/src/snapshot/error.rs index acd9409f72..d634057dc7 100644 --- a/ethcore/src/snapshot/error.rs +++ b/ethcore/src/snapshot/error.rs @@ -33,6 +33,12 @@ pub enum Error { BlockNotFound(H256), /// Incomplete chain. IncompleteChain, + /// Best block has wrong state root. + WrongStateRoot(H256, H256), + /// Wrong block hash. + WrongBlockHash(u64, H256, H256), + /// Too many blocks contained within the snapshot. + TooManyBlocks(u64, u64), /// Old starting block in a pruned database. OldBlockPrunedDB, /// Missing code. @@ -52,7 +58,11 @@ impl fmt::Display for Error { match *self { Error::InvalidStartingBlock(ref id) => write!(f, "Invalid starting block: {:?}", id), Error::BlockNotFound(ref hash) => write!(f, "Block not found in chain: {}", hash), - Error::IncompleteChain => write!(f, "Cannot create snapshot due to incomplete chain."), + Error::IncompleteChain => write!(f, "Incomplete blockchain."), + Error::WrongStateRoot(ref expected, ref found) => write!(f, "Final block has wrong state root. Expected {:?}, got {:?}", expected, found), + Error::WrongBlockHash(ref num, ref expected, ref found) => + write!(f, "Block {} had wrong hash. expected {:?}, got {:?}", num, expected, found), + Error::TooManyBlocks(ref expected, ref found) => write!(f, "Snapshot contained too many blocks. Expected {}, got {}", expected, found), Error::OldBlockPrunedDB => write!(f, "Attempted to create a snapshot at an old block while using \ a pruned database. Please re-run with the --pruning archive flag."), Error::MissingCode(ref missing) => write!(f, "Incomplete snapshot: {} contract codes not found.", missing.len()), diff --git a/ethcore/src/snapshot/mod.rs b/ethcore/src/snapshot/mod.rs index 86f921cf09..22c44ba3b5 100644 --- a/ethcore/src/snapshot/mod.rs +++ b/ethcore/src/snapshot/mod.rs @@ -26,6 +26,7 @@ use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; use account_db::{AccountDB, AccountDBMut}; use blockchain::{BlockChain, BlockProvider}; use engines::Engine; +use header::Header; use ids::BlockID; use views::BlockView; @@ -528,6 +529,20 @@ fn rebuild_accounts( /// Proportion of blocks which we will verify `PoW` for. const POW_VERIFY_RATE: f32 = 0.02; +/// Verify an old block with the given header, engine, blockchain, body. If `always` is set, it will perform +/// the fullest verification possible. If not, it will take a random sample to determine whether it will +/// do heavy or light verification. +pub fn verify_old_block(rng: &mut OsRng, header: &Header, engine: &Engine, chain: &BlockChain, body: Option<&[u8]>, always: bool) -> Result<(), ::error::Error> { + if always || rng.gen::() <= POW_VERIFY_RATE { + match chain.block_header(header.parent_hash()) { + Some(parent) => engine.verify_block_family(&header, &parent, body), + None => engine.verify_block_seal(&header), + } + } else { + engine.verify_block_basic(&header, body) + } +} + /// Rebuilds the blockchain from chunks. /// /// Does basic verification for all blocks, but `PoW` verification for some. @@ -543,17 +558,23 @@ pub struct BlockRebuilder { rng: OsRng, disconnected: Vec<(u64, H256)>, best_number: u64, + best_hash: H256, + best_root: H256, + fed_blocks: u64, } impl BlockRebuilder { /// Create a new BlockRebuilder. - pub fn new(chain: BlockChain, db: Arc, best_number: u64) -> Result { + pub fn new(chain: BlockChain, db: Arc, manifest: &ManifestData) -> Result { Ok(BlockRebuilder { chain: chain, db: db, rng: try!(OsRng::new()), disconnected: Vec::new(), - best_number: best_number, + best_number: manifest.block_number, + best_hash: manifest.block_hash, + best_root: manifest.state_root, + fed_blocks: 0, }) } @@ -566,9 +587,14 @@ impl BlockRebuilder { let rlp = UntrustedRlp::new(chunk); let item_count = rlp.item_count(); + let num_blocks = (item_count - 3) as u64; trace!(target: "snapshot", "restoring block chunk with {} blocks.", item_count - 3); + if self.fed_blocks + num_blocks > SNAPSHOT_BLOCKS { + return Err(Error::TooManyBlocks(SNAPSHOT_BLOCKS, self.fed_blocks).into()) + } + // todo: assert here that these values are consistent with chunks being in order. let mut cur_number = try!(rlp.val_at::(0)) + 1; let mut parent_hash = try!(rlp.val_at::(1)); @@ -585,14 +611,27 @@ impl BlockRebuilder { let block = try!(abridged_block.to_block(parent_hash, cur_number, receipts_root)); let block_bytes = block.rlp_bytes(With); + let is_best = cur_number == self.best_number; - if self.rng.gen::() <= POW_VERIFY_RATE { - try!(engine.verify_block_seal(&block.header)) - } else { - try!(engine.verify_block_basic(&block.header, Some(&block_bytes))); + if is_best { + if block.header.hash() != self.best_hash { + return Err(Error::WrongBlockHash(cur_number, self.best_hash, block.header.hash()).into()) + } + + if block.header.state_root() != &self.best_root { + return Err(Error::WrongStateRoot(self.best_root, *block.header.state_root()).into()) + } } - let is_best = cur_number == self.best_number; + try!(verify_old_block( + &mut self.rng, + &block.header, + engine, + &self.chain, + Some(&block_bytes), + is_best + )); + let mut batch = self.db.transaction(); // special-case the first block in each chunk. @@ -610,11 +649,15 @@ impl BlockRebuilder { cur_number += 1; } - Ok(item_count as u64 - 3) + self.fed_blocks += num_blocks; + + Ok(num_blocks) } - /// Glue together any disconnected chunks. To be called at the end. - pub fn glue_chunks(self) { + /// Glue together any disconnected chunks and check that the chain is complete. + pub fn finalize(self, canonical: HashMap) -> Result<(), Error> { + let mut batch = self.db.transaction(); + for (first_num, first_hash) in self.disconnected { let parent_num = first_num - 1; @@ -623,8 +666,23 @@ impl BlockRebuilder { // the first block of the first chunks has nothing to connect to. if let Some(parent_hash) = self.chain.block_hash(parent_num) { // if so, add the child to it. - self.chain.add_child(parent_hash, first_hash); + self.chain.add_child(&mut batch, parent_hash, first_hash); } } + self.db.write_buffered(batch); + + let best_number = self.best_number; + for num in (0..self.fed_blocks).map(|x| best_number - x) { + + let hash = try!(self.chain.block_hash(num).ok_or(Error::IncompleteChain)); + + if let Some(canon_hash) = canonical.get(&num).cloned() { + if canon_hash != hash { + return Err(Error::WrongBlockHash(num, canon_hash, hash)); + } + } + } + + Ok(()) } } diff --git a/ethcore/src/snapshot/service.rs b/ethcore/src/snapshot/service.rs index 9b66a5cdc9..cc30a5c262 100644 --- a/ethcore/src/snapshot/service.rs +++ b/ethcore/src/snapshot/service.rs @@ -16,7 +16,7 @@ //! Snapshot network service implementation. -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use std::io::ErrorKind; use std::fs; use std::path::PathBuf; @@ -74,6 +74,7 @@ struct Restoration { snappy_buffer: Bytes, final_state_root: H256, guard: Guard, + canonical_hashes: HashMap, db: Arc, } @@ -99,7 +100,7 @@ impl Restoration { .map_err(UtilError::SimpleString))); let chain = BlockChain::new(Default::default(), params.genesis, raw_db.clone()); - let blocks = try!(BlockRebuilder::new(chain, raw_db.clone(), manifest.block_number)); + let blocks = try!(BlockRebuilder::new(chain, raw_db.clone(), &manifest)); let root = manifest.state_root.clone(); Ok(Restoration { @@ -112,6 +113,7 @@ impl Restoration { snappy_buffer: Vec::new(), final_state_root: root, guard: params.guard, + canonical_hashes: HashMap::new(), db: raw_db, }) } @@ -138,13 +140,18 @@ impl Restoration { try!(self.blocks.feed(&self.snappy_buffer[..len], engine)); if let Some(ref mut writer) = self.writer.as_mut() { - try!(writer.write_block_chunk(hash, chunk)); + try!(writer.write_block_chunk(hash, chunk)); } } Ok(()) } + // note canonical hashes. + fn note_canonical(&mut self, hashes: &[(u64, H256)]) { + self.canonical_hashes.extend(hashes.iter().cloned()); + } + // finish up restoration. fn finalize(self) -> Result<(), Error> { use util::trie::TrieError; @@ -161,8 +168,8 @@ impl Restoration { // check for missing code. try!(self.state.check_missing()); - // connect out-of-order chunks. - self.blocks.glue_chunks(); + // connect out-of-order chunks and verify chain integrity. + try!(self.blocks.finalize(self.canonical_hashes)); if let Some(writer) = self.writer { try!(writer.finish(self.manifest)); @@ -352,7 +359,8 @@ impl Service { // "Cancelled" is mincing words a bit -- what really happened // is that the state we were snapshotting got pruned out // before we could finish. - info!("Cancelled prematurely-started periodic snapshot."); + info!("Periodic snapshot failed: block state pruned.\ + Run with a longer `--pruning-history` or with `--no-periodic-snapshot`"); return Ok(()) } else { return Err(e); @@ -580,6 +588,14 @@ impl SnapshotService for Service { trace!("Error sending snapshot service message: {:?}", e); } } + + fn provide_canon_hashes(&self, canonical: &[(u64, H256)]) { + let mut rest = self.restoration.lock(); + + if let Some(ref mut rest) = rest.as_mut() { + rest.note_canonical(canonical); + } + } } impl Drop for Service { diff --git a/ethcore/src/snapshot/snapshot_service_trait.rs b/ethcore/src/snapshot/snapshot_service_trait.rs index 65448090fc..42223f8784 100644 --- a/ethcore/src/snapshot/snapshot_service_trait.rs +++ b/ethcore/src/snapshot/snapshot_service_trait.rs @@ -48,6 +48,10 @@ pub trait SnapshotService : Sync + Send { /// Feed a raw block chunk to the service to be processed asynchronously. /// no-op if currently restoring. fn restore_block_chunk(&self, hash: H256, chunk: Bytes); + + /// Give the restoration in-progress some canonical block hashes for + /// extra verification (performed at the end) + fn provide_canon_hashes(&self, canonical: &[(u64, H256)]); } impl IpcConfig for SnapshotService { } diff --git a/ethcore/src/snapshot/tests/blocks.rs b/ethcore/src/snapshot/tests/blocks.rs index 62c6ea2fe5..12efcda77a 100644 --- a/ethcore/src/snapshot/tests/blocks.rs +++ b/ethcore/src/snapshot/tests/blocks.rs @@ -26,6 +26,7 @@ use snapshot::io::{PackedReader, PackedWriter, SnapshotReader, SnapshotWriter}; use util::{Mutex, snappy}; use util::kvdb::{Database, DatabaseConfig}; +use std::collections::HashMap; use std::sync::Arc; fn chunk_and_restore(amount: u64) { @@ -58,18 +59,20 @@ fn chunk_and_restore(amount: u64) { // snapshot it. let writer = Mutex::new(PackedWriter::new(&snapshot_path).unwrap()); let block_hashes = chunk_blocks(&bc, best_hash, &writer, &Progress::default()).unwrap(); - writer.into_inner().finish(::snapshot::ManifestData { + let manifest = ::snapshot::ManifestData { state_hashes: Vec::new(), block_hashes: block_hashes, - state_root: Default::default(), + state_root: ::util::sha3::SHA3_NULL_RLP, block_number: amount, block_hash: best_hash, - }).unwrap(); + }; + + writer.into_inner().finish(manifest.clone()).unwrap(); // restore it. let new_db = Arc::new(Database::open(&db_cfg, new_path.as_str()).unwrap()); let new_chain = BlockChain::new(Default::default(), &genesis, new_db.clone()); - let mut rebuilder = BlockRebuilder::new(new_chain, new_db.clone(), amount).unwrap(); + let mut rebuilder = BlockRebuilder::new(new_chain, new_db.clone(), &manifest).unwrap(); let reader = PackedReader::new(&snapshot_path).unwrap().unwrap(); let engine = ::engines::NullEngine::new(Default::default(), Default::default()); for chunk_hash in &reader.manifest().block_hashes { @@ -78,7 +81,7 @@ fn chunk_and_restore(amount: u64) { rebuilder.feed(&chunk, &engine).unwrap(); } - rebuilder.glue_chunks(); + rebuilder.finalize(HashMap::new()).unwrap(); // and test it. let new_chain = BlockChain::new(Default::default(), &genesis, new_db); diff --git a/sync/src/tests/snapshot.rs b/sync/src/tests/snapshot.rs index 58b7ec7862..813513e848 100644 --- a/sync/src/tests/snapshot.rs +++ b/sync/src/tests/snapshot.rs @@ -23,6 +23,7 @@ use super::helpers::*; pub struct TestSnapshotService { manifest: Option, chunks: HashMap, + canon_hashes: Mutex>, restoration_manifest: Mutex>, state_restoration_chunks: Mutex>, @@ -34,6 +35,7 @@ impl TestSnapshotService { TestSnapshotService { manifest: None, chunks: HashMap::new(), + canon_hashes: Mutex::new(HashMap::new()), restoration_manifest: Mutex::new(None), state_restoration_chunks: Mutex::new(HashMap::new()), block_restoration_chunks: Mutex::new(HashMap::new()), @@ -57,6 +59,7 @@ impl TestSnapshotService { TestSnapshotService { manifest: Some(manifest), chunks: chunks, + canon_hashes: Mutex::new(HashMap::new()), restoration_manifest: Mutex::new(None), state_restoration_chunks: Mutex::new(HashMap::new()), block_restoration_chunks: Mutex::new(HashMap::new()), @@ -110,6 +113,10 @@ impl SnapshotService for TestSnapshotService { self.block_restoration_chunks.lock().insert(hash, chunk); } } + + fn provide_canon_hashes(&self, hashes: &[(u64, H256)]) { + self.canon_hashes.lock().extend(hashes.iter().cloned()); + } } #[test] -- GitLab From 0f0334275eded44ae1646501d5fc73f3d1404889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 28 Oct 2016 16:42:24 +0200 Subject: [PATCH 252/393] Validating minimal required gas for a transaction (#2937) * Validating minimal required gas for a transaction * Adding RPC case and note * Fixing whitespace [ci skip] --- ethcore/src/client/client.rs | 19 +- ethcore/src/client/test_client.rs | 8 +- ethcore/src/client/traits.rs | 5 +- ethcore/src/error.rs | 9 + ethcore/src/miner/banning_queue.rs | 28 ++- ethcore/src/miner/miner.rs | 6 +- ethcore/src/miner/transaction_queue.rs | 270 ++++++++++++++----------- rpc/src/v1/helpers/errors.rs | 3 + 8 files changed, 218 insertions(+), 130 deletions(-) diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 388ea97e84..4709955d18 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -60,7 +60,7 @@ use receipt::LocalizedReceipt; use trace::{TraceDB, ImportRequest as TraceImportRequest, LocalizedTrace, Database as TraceDatabase}; use trace; use trace::FlatTransactionTraces; -use evm::Factory as EvmFactory; +use evm::{Factory as EvmFactory, Schedule}; use miner::{Miner, MinerService}; use snapshot::{self, io as snapshot_io}; use factory::Factories; @@ -1156,6 +1156,23 @@ impl BlockChainClient for Client { } impl MiningBlockChainClient for Client { + + fn latest_schedule(&self) -> Schedule { + let header_data = self.best_block_header(); + let view = HeaderView::new(&header_data); + + let env_info = EnvInfo { + number: view.number(), + author: view.author(), + timestamp: view.timestamp(), + difficulty: view.difficulty(), + last_hashes: self.build_last_hashes(view.hash()), + gas_used: U256::default(), + gas_limit: view.gas_limit(), + }; + self.engine.schedule(&env_info) + } + fn prepare_open_block(&self, author: Address, gas_range_target: (U256, U256), extra_data: Bytes) -> OpenBlock { let engine = &*self.engine; let chain = self.chain.read(); diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index e32a074bb5..11a9286da1 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -34,7 +34,7 @@ use log_entry::LocalizedLogEntry; use receipt::{Receipt, LocalizedReceipt}; use blockchain::extras::BlockReceipts; use error::{ImportResult}; -use evm::{Factory as EvmFactory, VMType}; +use evm::{Factory as EvmFactory, VMType, Schedule}; use miner::{Miner, MinerService, TransactionImportResult}; use spec::Spec; @@ -137,7 +137,7 @@ impl TestBlockChainClient { client.genesis_hash = client.last_hash.read().clone(); client } - + /// Set the transaction receipt result pub fn set_transaction_receipt(&self, id: TransactionID, receipt: LocalizedReceipt) { self.receipts.write().insert(id, receipt); @@ -306,6 +306,10 @@ pub fn get_temp_state_db() -> GuardedTempResult { } impl MiningBlockChainClient for TestBlockChainClient { + fn latest_schedule(&self) -> Schedule { + Schedule::new_homestead_gas_fix() + } + fn prepare_open_block(&self, author: Address, gas_range_target: (U256, U256), extra_data: Bytes) -> OpenBlock { let engine = &*self.spec.engine; let genesis_header = self.spec.genesis_header(); diff --git a/ethcore/src/client/traits.rs b/ethcore/src/client/traits.rs index 0bc9e70fa8..700b88f8bc 100644 --- a/ethcore/src/client/traits.rs +++ b/ethcore/src/client/traits.rs @@ -27,7 +27,7 @@ use views::{BlockView}; use error::{ImportResult, CallError}; use receipt::LocalizedReceipt; use trace::LocalizedTrace; -use evm::Factory as EvmFactory; +use evm::{Factory as EvmFactory, Schedule}; use types::ids::*; use types::trace_filter::Filter as TraceFilter; use executive::Executed; @@ -236,6 +236,9 @@ pub trait MiningBlockChainClient : BlockChainClient { /// Import sealed block. Skips all verifications. fn import_sealed_block(&self, block: SealedBlock) -> ImportResult; + + /// Returns latest schedule. + fn latest_schedule(&self) -> Schedule; } impl IpcConfig for BlockChainClient { } diff --git a/ethcore/src/error.rs b/ethcore/src/error.rs index 40f4c6d28a..04a0920faa 100644 --- a/ethcore/src/error.rs +++ b/ethcore/src/error.rs @@ -47,6 +47,13 @@ pub enum TransactionError { /// Transaction gas price got: U256, }, + /// Transaction's gas is below currently set minimal gas requirement. + InsufficientGas { + /// Minimal expected gas + minimal: U256, + /// Transaction gas + got: U256, + }, /// Sender doesn't have enough funds to pay for this transaction InsufficientBalance { /// Senders balance @@ -81,6 +88,8 @@ impl fmt::Display for TransactionError { LimitReached => "Transaction limit reached".into(), InsufficientGasPrice { minimal, got } => format!("Insufficient gas price. Min={}, Given={}", minimal, got), + InsufficientGas { minimal, got } => + format!("Insufficient gas. Min={}, Given={}", minimal, got), InsufficientBalance { balance, cost } => format!("Insufficient balance for transaction. Balance={}, Cost={}", balance, cost), diff --git a/ethcore/src/miner/banning_queue.rs b/ethcore/src/miner/banning_queue.rs index 0ad99b008a..0329503bf7 100644 --- a/ethcore/src/miner/banning_queue.rs +++ b/ethcore/src/miner/banning_queue.rs @@ -75,11 +75,15 @@ impl BanningTransactionQueue { /// Add to the queue taking bans into consideration. /// May reject transaction because of the banlist. - pub fn add_with_banlist( + pub fn add_with_banlist( &mut self, transaction: SignedTransaction, account_details: &F, - ) -> Result where F: Fn(&Address) -> AccountDetails { + gas_estimator: &G, + ) -> Result where + F: Fn(&Address) -> AccountDetails, + G: Fn(&SignedTransaction) -> U256, + { if let Threshold::BanAfter(threshold) = self.ban_threshold { // NOTE In all checks use direct query to avoid increasing ban timeout. @@ -111,7 +115,7 @@ impl BanningTransactionQueue { } } } - self.queue.add(transaction, account_details, TransactionOrigin::External) + self.queue.add(transaction, TransactionOrigin::External, account_details, gas_estimator) } /// Ban transaction with given hash. @@ -228,6 +232,10 @@ mod tests { } } + fn gas_required(_tx: &SignedTransaction) -> U256 { + 0.into() + } + fn transaction(action: Action) -> SignedTransaction { let keypair = Random.generate().unwrap(); Transaction { @@ -255,7 +263,7 @@ mod tests { let mut txq = queue(); // when - txq.queue().add(tx, &default_account_details, TransactionOrigin::External).unwrap(); + txq.queue().add(tx, TransactionOrigin::External, &default_account_details, &gas_required).unwrap(); // then // should also deref to queue @@ -271,12 +279,12 @@ mod tests { let banlist1 = txq.ban_sender(tx.sender().unwrap()); assert!(!banlist1, "Threshold not reached yet."); // Insert once - let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required).unwrap(); assert_eq!(import1, TransactionImportResult::Current); // when let banlist2 = txq.ban_sender(tx.sender().unwrap()); - let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required); // then assert!(banlist2, "Threshold should be reached - banned."); @@ -295,12 +303,12 @@ mod tests { let banlist1 = txq.ban_recipient(recipient); assert!(!banlist1, "Threshold not reached yet."); // Insert once - let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required).unwrap(); assert_eq!(import1, TransactionImportResult::Current); // when let banlist2 = txq.ban_recipient(recipient); - let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required); // then assert!(banlist2, "Threshold should be reached - banned."); @@ -317,12 +325,12 @@ mod tests { let banlist1 = txq.ban_codehash(codehash); assert!(!banlist1, "Threshold not reached yet."); // Insert once - let import1 = txq.add_with_banlist(tx.clone(), &default_account_details).unwrap(); + let import1 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required).unwrap(); assert_eq!(import1, TransactionImportResult::Current); // when let banlist2 = txq.ban_codehash(codehash); - let import2 = txq.add_with_banlist(tx.clone(), &default_account_details); + let import2 = txq.add_with_banlist(tx.clone(), &default_account_details, &gas_required); // then assert!(banlist2, "Threshold should be reached - banned."); diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 47464b36f9..d36869a749 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -562,13 +562,15 @@ impl Miner { balance: chain.latest_balance(a), }; + let schedule = chain.latest_schedule(); + let gas_required = |tx: &SignedTransaction| tx.gas_required(&schedule).into(); transactions.into_iter() .map(|tx| match origin { TransactionOrigin::Local | TransactionOrigin::RetractedBlock => { - transaction_queue.add(tx, &fetch_account, origin) + transaction_queue.add(tx, origin, &fetch_account, &gas_required) }, TransactionOrigin::External => { - transaction_queue.add_with_banlist(tx, &fetch_account) + transaction_queue.add_with_banlist(tx, &fetch_account, &gas_required) } }) .collect() diff --git a/ethcore/src/miner/transaction_queue.rs b/ethcore/src/miner/transaction_queue.rs index 40150b78db..f8baf89892 100644 --- a/ethcore/src/miner/transaction_queue.rs +++ b/ethcore/src/miner/transaction_queue.rs @@ -48,10 +48,11 @@ //! nonce: U256::from(10), //! balance: U256::from(1_000_000), //! }; +//! let gas_estimator = |_tx: &SignedTransaction| 2.into(); //! //! let mut txq = TransactionQueue::default(); -//! txq.add(st2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); -//! txq.add(st1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); +//! txq.add(st2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); +//! txq.add(st1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); //! //! // Check status //! assert_eq!(txq.status().pending, 2); @@ -593,9 +594,20 @@ impl TransactionQueue { } } - /// Add signed transaction to queue to be verified and imported - pub fn add(&mut self, tx: SignedTransaction, fetch_account: &T, origin: TransactionOrigin) -> Result - where T: Fn(&Address) -> AccountDetails { + /// Add signed transaction to queue to be verified and imported. + /// + /// NOTE fetch_account and gas_estimator should be cheap to compute + /// otherwise it might open up an attack vector. + pub fn add( + &mut self, + tx: SignedTransaction, + origin: TransactionOrigin, + fetch_account: &F, + gas_estimator: &G, + ) -> Result where + F: Fn(&Address) -> AccountDetails, + G: Fn(&SignedTransaction) -> U256, + { if tx.gas_price < self.minimal_gas_price && origin != TransactionOrigin::Local { trace!(target: "txqueue", @@ -626,8 +638,6 @@ impl TransactionQueue { })); } - try!(tx.check_low_s()); - if tx.gas > self.gas_limit || tx.gas > self.tx_gas_limit { trace!(target: "txqueue", "Dropping transaction above gas limit: {:?} ({} > min({}, {}))", @@ -643,6 +653,24 @@ impl TransactionQueue { })); } + let minimal_gas = gas_estimator(&tx); + if tx.gas < minimal_gas { + trace!(target: "txqueue", + "Dropping transaction with insufficient gas: {:?} ({} > {})", + tx.hash(), + tx.gas, + minimal_gas, + ); + + return Err(Error::Transaction(TransactionError::InsufficientGas { + minimal: minimal_gas, + got: tx.gas, + })); + } + + // Verify signature + try!(tx.check_low_s()); + let vtx = try!(VerifiedTransaction::new(tx, origin)); let client_account = fetch_account(&vtx.sender()); @@ -905,16 +933,6 @@ impl TransactionQueue { let nonce = tx.nonce(); let hash = tx.hash(); - { - // Rough size sanity check - let gas = &tx.transaction.gas; - if U256::from(tx.transaction.data.len()) > *gas { - // Droping transaction - trace!(target: "txqueue", "Dropping oversized transaction: {:?} (gas: {} < size {})", hash, gas, tx.transaction.data.len()); - return Err(TransactionError::LimitReached); - } - } - // The transaction might be old, let's check that. // This has to be the first test, otherwise calculating // nonce height would result in overflow. @@ -1104,6 +1122,10 @@ mod test { } } + fn gas_estimator(_tx: &SignedTransaction) -> U256 { + U256::zero() + } + fn new_tx_pair(nonce: U256, gas_price: U256, nonce_increment: U256, gas_price_increment: U256) -> (SignedTransaction, SignedTransaction) { let tx1 = new_unsigned_tx(nonce, default_gas_val(), gas_price); let tx2 = new_unsigned_tx(nonce + nonce_increment, default_gas_val(), gas_price + gas_price_increment); @@ -1155,14 +1177,14 @@ mod test { let (tx1, tx2) = new_tx_pair(123.into(), 1.into(), 1.into(), 0.into()); let sender = tx1.sender().unwrap(); let nonce = tx1.nonce; - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 2); assert_eq!(txq.last_nonce(&sender), Some(nonce + 1.into())); // when let tx = new_tx(123.into(), 1.into()); - let res = txq.add(tx.clone(), &default_account_details, TransactionOrigin::External); + let res = txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator); // then // No longer the case as we don't even consider a transaction that isn't above a full @@ -1318,12 +1340,12 @@ mod test { !U256::zero() }; // First insert one transaction to future - let res = txq.add(tx, &prev_nonce, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &prev_nonce, &gas_estimator); assert_eq!(res.unwrap(), TransactionImportResult::Future); assert_eq!(txq.status().future, 1); // now import second transaction to current - let res = txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External); + let res = txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator); // and then there should be only one transaction in current (the one with higher gas_price) assert_eq!(res.unwrap(), TransactionImportResult::Current); @@ -1343,12 +1365,12 @@ mod test { !U256::zero() }; // First insert one transaction to future - let res = txq.add(tx.clone(), &prev_nonce, TransactionOrigin::External); + let res = txq.add(tx.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator); assert_eq!(res.unwrap(), TransactionImportResult::Future); assert_eq!(txq.status().future, 1); // now import second transaction to current - let res = txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External); + let res = txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(res.unwrap(), TransactionImportResult::Current); @@ -1367,7 +1389,7 @@ mod test { let tx = new_tx_default(); // when - let res = txq.add(tx, &default_account_details, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(res.unwrap(), TransactionImportResult::Current); @@ -1386,10 +1408,10 @@ mod test { txq.set_minimal_gas_price(15.into()); // when - let res1 = txq.add(tx1, &default_account_details, TransactionOrigin::External); - let res2 = txq.add(tx2, &default_account_details, TransactionOrigin::External); - let res3 = txq.add(tx3, &default_account_details, TransactionOrigin::External); - let res4 = txq.add(tx4, &default_account_details, TransactionOrigin::External); + let res1 = txq.add(tx1, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res2 = txq.add(tx2, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res3 = txq.add(tx3, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res4 = txq.add(tx4, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(res1.unwrap(), TransactionImportResult::Current); @@ -1420,10 +1442,10 @@ mod test { txq.set_minimal_gas_price(15.into()); // when - let res1 = txq.add(tx1, &default_account_details, TransactionOrigin::External); - let res2 = txq.add(tx2, &default_account_details, TransactionOrigin::External); - let res3 = txq.add(tx3, &default_account_details, TransactionOrigin::External); - let res4 = txq.add(tx4, &default_account_details, TransactionOrigin::External); + let res1 = txq.add(tx1, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res2 = txq.add(tx2, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res3 = txq.add(tx3, TransactionOrigin::External, &default_account_details, &gas_estimator); + let res4 = txq.add(tx4, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(res1.unwrap(), TransactionImportResult::Current); @@ -1466,7 +1488,7 @@ mod test { txq.set_gas_limit(limit); // when - let res = txq.add(tx, &default_account_details, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(unwrap_tx_err(res), TransactionError::GasLimitExceeded { @@ -1490,7 +1512,7 @@ mod test { }; // when - let res = txq.add(tx, &account, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &account, &gas_estimator); // then assert_eq!(unwrap_tx_err(res), TransactionError::InsufficientBalance { @@ -1510,7 +1532,7 @@ mod test { txq.set_minimal_gas_price(tx.gas_price + U256::one()); // when - let res = txq.add(tx, &default_account_details, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert_eq!(unwrap_tx_err(res), TransactionError::InsufficientGasPrice { @@ -1530,7 +1552,7 @@ mod test { txq.set_minimal_gas_price(tx.gas_price + U256::one()); // when - let res = txq.add(tx, &default_account_details, TransactionOrigin::Local); + let res = txq.add(tx, TransactionOrigin::Local, &default_account_details, &gas_estimator); // then assert_eq!(res.unwrap(), TransactionImportResult::Current); @@ -1560,7 +1582,7 @@ mod test { rlp::decode(s.as_raw()) }; // when - let res = txq.add(stx, &default_account_details, TransactionOrigin::External); + let res = txq.add(stx, TransactionOrigin::External, &default_account_details, &gas_estimator); // then assert!(res.is_err()); @@ -1574,8 +1596,8 @@ mod test { let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // when - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let top = txq.top_transactions(); @@ -1594,9 +1616,9 @@ mod test { // when // first insert the one with higher gas price - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then the one with lower gas price, but local - txq.add(tx.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); // then let top = txq.top_transactions(); @@ -1615,9 +1637,9 @@ mod test { // when // first insert local one with higher gas price - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); // then the one with lower gas price, but from retracted block - txq.add(tx.clone(), &default_account_details, TransactionOrigin::RetractedBlock).unwrap(); + txq.add(tx.clone(), TransactionOrigin::RetractedBlock, &default_account_details, &gas_estimator).unwrap(); // then let top = txq.top_transactions(); @@ -1633,8 +1655,8 @@ mod test { let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // when - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); // then let top = txq.top_transactions(); @@ -1653,10 +1675,10 @@ mod test { let (tx1, tx2) = new_tx_pair_with_gas_price_increment(3.into()); // insert everything - txq.add(txa.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); - txq.add(txb.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); - txq.add(tx1.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + txq.add(txa.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); + txq.add(txb.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 4); @@ -1682,10 +1704,10 @@ mod test { let (tx1, tx2) = new_tx_pair_with_gas_price_increment(3.into()); // insert everything - txq.add(txa.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(txb.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(txa.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(txb.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); let top = txq.top_transactions(); assert_eq!(top[0], tx1); @@ -1714,8 +1736,8 @@ mod test { let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // when - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let top = txq.pending_hashes(); @@ -1732,8 +1754,8 @@ mod test { let (tx, tx2) = new_tx_pair_default(2.into(), 0.into()); // when - let res1 = txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - let res2 = txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + let res1 = txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + let res2 = txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then assert_eq!(res1, TransactionImportResult::Current); @@ -1756,8 +1778,8 @@ mod test { let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); - txq.add(tx.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &prev_nonce, TransactionOrigin::External).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 2); // when @@ -1779,13 +1801,13 @@ mod test { let tx1 = new_unsigned_tx(124.into(), default_gas_val(), 1.into()).sign(secret); let tx2 = new_unsigned_tx(125.into(), default_gas_val(), 1.into()).sign(secret); - txq.add(tx, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 1); - txq.add(tx2, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); // when - txq.add(tx1, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let stats = txq.status(); @@ -1801,8 +1823,8 @@ mod test { // given let mut txq2 = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(3.into(), 0.into()); - txq2.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq2.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq2.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq2.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq2.status().pending, 1); assert_eq!(txq2.status().future, 1); @@ -1823,10 +1845,10 @@ mod test { let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let tx3 = new_tx_default(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx3.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 3); // when @@ -1845,8 +1867,8 @@ mod test { let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); // add - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); let stats = txq.status(); assert_eq!(stats.pending, 2); @@ -1865,11 +1887,11 @@ mod test { let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let sender = tx.sender().unwrap(); let nonce = tx.nonce; - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 1); // when - let res = txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External); + let res = txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator); // then let t = txq.top_transactions(); @@ -1886,14 +1908,14 @@ mod test { txq.current.set_limit(10); let (tx1, tx2) = new_tx_pair_default(4.into(), 1.into()); let (tx3, tx4) = new_tx_pair_default(4.into(), 2.into()); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx3.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 2); // when - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); - txq.add(tx4.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx4.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then assert_eq!(txq.status().future, 1); @@ -1904,11 +1926,11 @@ mod test { let mut txq = TransactionQueue::with_limits(PrioritizationStrategy::GasPriceOnly, 100, default_gas_val() * U256::from(2), !U256::zero()); let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx3.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // limited by gas - txq.add(tx4.clone(), &default_account_details, TransactionOrigin::External).unwrap_err(); + txq.add(tx4.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap_err(); assert_eq!(txq.status().pending, 2); } @@ -1918,13 +1940,13 @@ mod test { let (tx1, tx2) = new_tx_pair_default(U256::from(1), U256::from(1)); let (tx3, tx4) = new_tx_pair_default(U256::from(1), U256::from(2)); let (tx5, tx6) = new_tx_pair_default(U256::from(1), U256::from(2)); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); - txq.add(tx5.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx5.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // Not accepted because of limit - txq.add(tx6.clone(), &default_account_details, TransactionOrigin::External).unwrap_err(); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); - txq.add(tx4.clone(), &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx6.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap_err(); + txq.add(tx3.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx4.clone(), TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 4); } @@ -1936,7 +1958,7 @@ mod test { let fetch_last_nonce = |_a: &Address| AccountDetails { nonce: last_nonce, balance: !U256::zero() }; // when - let res = txq.add(tx, &fetch_last_nonce, TransactionOrigin::External); + let res = txq.add(tx, TransactionOrigin::External, &fetch_last_nonce, &gas_estimator); // then assert_eq!(unwrap_tx_err(res), TransactionError::Old); @@ -1952,12 +1974,12 @@ mod test { balance: !U256::zero() }; let mut txq = TransactionQueue::default(); let (_tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); assert_eq!(txq.status().pending, 0); // when - let res = txq.add(tx2.clone(), &nonce, TransactionOrigin::External); + let res = txq.add(tx2.clone(), TransactionOrigin::External, &nonce, &gas_estimator); // then assert_eq!(unwrap_tx_err(res), TransactionError::AlreadyImported); @@ -1971,15 +1993,15 @@ mod test { // given let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 2); // when txq.remove_invalid(&tx1.hash(), &default_account_details); assert_eq!(txq.status().pending, 0); assert_eq!(txq.status().future, 1); - txq.add(tx1.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let stats = txq.status(); @@ -1993,10 +2015,10 @@ mod test { let mut txq = TransactionQueue::default(); let (tx, tx2) = new_tx_pair_default(1.into(), 0.into()); let tx3 = new_tx_default(); - txq.add(tx2.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx2.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); - txq.add(tx3.clone(), &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx.clone(), &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx3.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx.clone(), TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().pending, 3); // when @@ -2023,8 +2045,8 @@ mod test { }; // when - txq.add(tx, &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let stats = txq.status(); @@ -2051,10 +2073,10 @@ mod test { }; // when - txq.add(tx1, &default_account_details, TransactionOrigin::External).unwrap(); - txq.add(tx2, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx1, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 1); - txq.add(tx0, &default_account_details, TransactionOrigin::External).unwrap(); + txq.add(tx0, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(); // then let stats = txq.status(); @@ -2072,8 +2094,8 @@ mod test { !U256::zero() }; let mut txq = TransactionQueue::default(); let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); - txq.add(tx1.clone(), &previous_nonce, TransactionOrigin::External).unwrap(); - txq.add(tx2, &previous_nonce, TransactionOrigin::External).unwrap(); + txq.add(tx1.clone(), TransactionOrigin::External, &previous_nonce, &gas_estimator).unwrap(); + txq.add(tx2, TransactionOrigin::External, &previous_nonce, &gas_estimator).unwrap(); assert_eq!(txq.status().future, 2); // when @@ -2104,7 +2126,7 @@ mod test { let details = |_a: &Address| AccountDetails { nonce: nonce, balance: !U256::zero() }; // when - txq.add(tx, &details, TransactionOrigin::External).unwrap(); + txq.add(tx, TransactionOrigin::External, &details, &gas_estimator).unwrap(); // then assert_eq!(txq.last_nonce(&from), Some(nonce)); @@ -2119,7 +2141,7 @@ mod test { let details1 = |_a: &Address| AccountDetails { nonce: nonce1, balance: !U256::zero() }; // Insert first transaction - txq.add(tx1, &details1, TransactionOrigin::External).unwrap(); + txq.add(tx1, TransactionOrigin::External, &details1, &gas_estimator).unwrap(); // when txq.remove_all(tx2.sender().unwrap(), nonce2 + U256::one()); @@ -2139,9 +2161,9 @@ mod test { // when // Insert first transaction - assert_eq!(txq.add(tx1, &details1, TransactionOrigin::External).unwrap(), TransactionImportResult::Current); + assert_eq!(txq.add(tx1, TransactionOrigin::External, &details1, &gas_estimator).unwrap(), TransactionImportResult::Current); // Second should go to future - assert_eq!(txq.add(tx2, &details1, TransactionOrigin::External).unwrap(), TransactionImportResult::Future); + assert_eq!(txq.add(tx2, TransactionOrigin::External, &details1, &gas_estimator).unwrap(), TransactionImportResult::Future); // Now block is imported txq.remove_all(sender, nonce2 - U256::from(1)); // tx2 should be not be promoted to current @@ -2160,9 +2182,9 @@ mod test { assert_eq!(txq.has_local_pending_transactions(), false); // when - assert_eq!(txq.add(tx1, &default_account_details, TransactionOrigin::External).unwrap(), TransactionImportResult::Current); + assert_eq!(txq.add(tx1, TransactionOrigin::External, &default_account_details, &gas_estimator).unwrap(), TransactionImportResult::Current); assert_eq!(txq.has_local_pending_transactions(), false); - assert_eq!(txq.add(tx2, &default_account_details, TransactionOrigin::Local).unwrap(), TransactionImportResult::Current); + assert_eq!(txq.add(tx2, TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(), TransactionImportResult::Current); // then assert_eq!(txq.has_local_pending_transactions(), true); @@ -2177,8 +2199,8 @@ mod test { default_account_details(a).balance }; // when - assert_eq!(txq.add(tx2, &prev_nonce, TransactionOrigin::External).unwrap(), TransactionImportResult::Future); - assert_eq!(txq.add(tx1.clone(), &prev_nonce, TransactionOrigin::External).unwrap(), TransactionImportResult::Future); + assert_eq!(txq.add(tx2, TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(), TransactionImportResult::Future); + assert_eq!(txq.add(tx1.clone(), TransactionOrigin::External, &prev_nonce, &gas_estimator).unwrap(), TransactionImportResult::Future); // then assert_eq!(txq.future.by_priority.len(), 1); @@ -2203,14 +2225,14 @@ mod test { (tx.sign(secret), tx2.sign(secret), tx2_2.sign(secret), tx3.sign(secret)) }; let sender = tx1.sender().unwrap(); - txq.add(tx1, &default_account_details, TransactionOrigin::Local).unwrap(); - txq.add(tx2, &default_account_details, TransactionOrigin::Local).unwrap(); - txq.add(tx3, &default_account_details, TransactionOrigin::Local).unwrap(); + txq.add(tx1, TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx2, TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); + txq.add(tx3, TransactionOrigin::Local, &default_account_details, &gas_estimator).unwrap(); assert_eq!(txq.future.by_priority.len(), 0); assert_eq!(txq.current.by_priority.len(), 3); // when - let res = txq.add(tx2_2, &default_account_details, TransactionOrigin::Local); + let res = txq.add(tx2_2, TransactionOrigin::Local, &default_account_details, &gas_estimator); // then assert_eq!(txq.last_nonce(&sender).unwrap(), 125.into()); @@ -2218,4 +2240,24 @@ mod test { assert_eq!(txq.current.by_priority.len(), 3); } + #[test] + fn should_reject_transactions_below_bas_gas() { + // given + let mut txq = TransactionQueue::default(); + let (tx1, tx2) = new_tx_pair_default(1.into(), 0.into()); + let high_gas = |_: &SignedTransaction| 100_001.into(); + + // when + let res1 = txq.add(tx1, TransactionOrigin::Local, &default_account_details, &gas_estimator); + let res2 = txq.add(tx2, TransactionOrigin::Local, &default_account_details, &high_gas); + + // then + assert_eq!(res1.unwrap(), TransactionImportResult::Current); + assert_eq!(unwrap_tx_err(res2), TransactionError::InsufficientGas { + minimal: 100_001.into(), + got: 100_000.into(), + }); + + } + } diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 3f5dda2d3e..4750638326 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -221,6 +221,9 @@ pub fn from_transaction_error(error: EthcoreError) -> Error { LimitReached => { "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.".into() }, + InsufficientGas { minimal, got } => { + format!("Transaction gas is too low. There is not enough gas to cover minimal cost of the transaction (minimal: {}, got: {}). Try increasing supplied gas.", minimal, got) + }, InsufficientGasPrice { minimal, got } => { format!("Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: {}, got: {}). Try increasing the gas price.", minimal, got) }, -- GitLab From 6abd08f5b2843779a56ae29d98d4b7a4832ecf20 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 28 Oct 2016 16:46:11 +0200 Subject: [PATCH 253/393] Bring in styling queues from original Gavcoin (#2936) * Bring in styling queues from original * NewTranch background colour update --- js/assets/images/dapps/gavcoin-bg.jpg | Bin 0 -> 79447 bytes js/src/dapps/gavcoin/Accounts/accounts.css | 2 +- .../Actions/ActionBuyIn/actionBuyIn.js | 3 +++ .../Actions/ActionRefund/actionRefund.js | 3 +++ .../Actions/ActionTransfer/actionTransfer.js | 3 +++ js/src/dapps/gavcoin/Actions/actions.css | 19 ++++++++++++---- .../dapps/gavcoin/Application/application.css | 21 ++++++++++++++++++ .../dapps/gavcoin/Application/application.js | 9 +++++++- js/src/dapps/gavcoin/Events/events.css | 2 +- js/src/dapps/gavcoin/Status/status.css | 10 +++++---- 10 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 js/assets/images/dapps/gavcoin-bg.jpg create mode 100644 js/src/dapps/gavcoin/Application/application.css diff --git a/js/assets/images/dapps/gavcoin-bg.jpg b/js/assets/images/dapps/gavcoin-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c344f5979f655729fa9418be631ac9d9d32c36d1 GIT binary patch literal 79447 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

    g$M7M0L0-57(kpq!#?35 z#GjV~E9@awRRpNL!9uM7Gy&j8f2aHxp1-p}z25`|m~%RFWmHfuWerhBQ!r=(j6XyE zCk52##C+tGZvQVl1W>u}TaC&BcY-IIq~F@mdQkN?Y;kvFbxw7o5OUqtPpaJi3;pkZ ztnX7GZvX;}!tp)J2vfm|(jL6yY=p^8z*s0s>Gty^|9{~CEEjsV2P{VbfQ}u&uoZ-4 zm`fA$GVWYLWe{p4ph2krA07b2JaI9x7%D(LCrg8}V$tpZ^g9E%L z?h7M~p$LG8z;LjEJU;&{^Q#~X6PKB>7eM*%CjgL-<{_~UF9Ey?u;?=Ay)juGD=eT4 zSw_5`!~7rM0H98q56P0eioj^n`vCwB({cwKIjPIPZ~h}La8 z0vOldGm73@Xr}yMP5=O|WZ57q#CJXmj5#O|$encm+f%~-6$~EG&I>)`G#5Qe0K~RS z(VmV||788Y;9$1`=!SPUgxgM-NNxmzweGP0Z}@*4b$`4aB-~K?&K{~+vwhYeAdv7_|5xw!ecFWwuMaiPy}s$%(cvWk3k zkmC6fA%WNhhW&Cw=zCl_s9jY+o5!oud!OrdZnWM?p1A8^U+~2<=lpxE%FFi5vucyC zueiiX@ks0m*Lvl12yI;!E_;gZrZ3!I&F#cJmFtO_j8{1=m8Nn!A}*do^60G3#&hNM zG3R5>)yDiU9@f1e>3Z_Z3taPY-Yur#i8K{UQPtd*oEG~Y6$AHPWhAQt^O*HzNxqL| zokB9IiSrw{kg|m`POUQTt~(u8pup7SiP}26ph{1fjaAY_*S}yU(qygYo1{BENU&_+1;6{tirE9pJ+GIy47RDcS@9FKo`c;u34h{{Wk;uk z>L9tS^M|9QxDzb0WA&U{O{I6`&1%p1{<*#ydi9KMNgKEGKGyhFvnW;xu zaXg0;mwlbkr01qY;5|Rjf%Qq+gXLbSB+@$ke6nQ+ePT0`6KkJm7n}Mf9%szoCh{Xp zh*MCBIMI0C{(bs}(2+HgD)-NzXHwTSR_6r-4Kpewf8s*j&>uh0YR{ow3YR5V*CD^- z;f`NcJ!2>L1*nYkbqFHA`i4Ej86Tpm>{%bw{7sO?um;NwjP@nxCV%ssb=Io09IE5I zmyX;rmh2DeDUwieQq?rjR;CNpUG@|*M!hi{GnVW~LTz}BzRa^@f8x2Ltehh|-owMM z`b}KHxC80BbmQ!p<7SF&+}tT{NPKs9p_s6^o;IWuOT0wJtRlR>Ql&@ zfk+zOYP?0BDyg(Fxp7-6l6K51exXJ}were&t-2)pUc;DJg^+_Ab#sj>y{h;5bp!Xb z+oW#02Q>bStm7A zBm8|v-Yzxo9jj-QHFyvo;R3-jY=$90Dc*#f}*p z=OT=gl#X|#3#2A8^Fd1A#wk-tFjrNfY|+z)zDPXUo0NmQ;?=`()Nx%&31|FaD=5?c z(A~WJ!Tiu%eW;=rm|-H;!6BBr@E-1o+5|JvrRUkcfWm!?N(dmX>ymM(JY;W3 z{DUuP3kylKSXK6WZ^R8&k_7V~{28s)`^91ke=J-kUDnP|UdC{pdP=bx?9 z1{Vzx971>ZdkwjXMblAY>y!JMQenA^t-jBR3?Z9*?mV|EKhE*%{VKarpY%OwJ>pCq z-1ygdyS|`(EzTFjosWwx#T8Pw{<*SVtd;vSEF*SaKYzs_{vmO6K1{VeQuUmmz}I6@ z#`EEV+S+bbYxeu1V;2U!U3 z%mscyluSA}-ucBZbi(PQP`2p`>1>g6b9qB~gHPv1UeWJIm#x5DyTI^73w~63a>X_5(Cd74nX1+w zomTp22Cbz^Yq3@CL6Xu1n;!nNN0-ZXt&0CmmHYSGTtCmD@KjN%e*Wc;ryNN|$wejK z6N6nJEnIae?>gK)Te>}w1Cj>7TWzfrJgs9|aA~%B8|PXy|Iho?2GN~kZA3=It@$R? z!uRLTw{<-^eKy?w$Ajn-`j%t%(bz~<{njpB zi0@>jm1#K>S7zQUmcN&bbGCN2ZYknU7Q(qTfDss$_djB<{}qIRVHgD91;wAF@C17! zcThMb`afk;{#AcMeV`j6dU?ftsP4tS+A>IZ zA}Ofw0Mt`3>xh^q8ictT9aw%n}!FOy@)g|J;c zTroBn+u*zI-L5ueJ6=*|A~=3xZ_}S1*jgeUX>ubmk?LvP`n?{W*6JW{Le?0G{q2D?U2M?{iQvgH z6Iu69)5c|4m*{P;XiOKg3v#I*_6=pZA>!P=Y)iVbW*gp`=+@xs^0tfVoD6S}y}LK} zrOw;UX=-R=iXq7!(>LhRG@${?=`n9@v@+YiG?VJaqn7n(5wkb@5V~$xTRe(|7yW~E zd-A&Ek?rKWVb*r1VkS!Z+G3gMMLN-&-Vrza7sX}T_wkcOx7w%uH^0&PPQB_bN%YTJ zJ!DDGe!Co{`bu|7-0GNN`wW6OdpB>=g>P!J(<`1|^`X=PGjA&Y)1Vno(+Bj_@|Ra^ z#$#(>h525+#KfYDR$-I3Sum|no5{1mBM&`3C$8z~+Yv?vt=+8kCL>rP2e1|%k=xQ( z#;iqVVz&i1*HqXLVZp5{g%T`1-?+0(=&CQ6X^qB%St7|5 zeR+Eld`BWqdc`Owe;rtvT`chscSUcm^*Xmc*lT@h&M^4$)xYorx$AR7htEdBxB1_) zEyw%jjt8$FH};C|^`PAgZ@Zg#@mTGRz{Y{Voq*kB-~PljgQxjXFZFC+Hc2%~LOuQG zrhE0jUte4ZPF!6tF8paXH)|w5(6C5T{|gK-k2^9pwwo}JnqQAJY1NfLCX^7!IJ-|>qh0>mjB=Ob z+S?3snf9;b;)ZmI?5=K&xdTRc$=${6+j)%ig53uBUix~c)NcI!4o_0ktG*b$slXjM zkwj+v(+s8rGP>tw=u)G3l_^EZ< z#W5Iq!rKN&2|YdYpvAuBPpb!Jf>A3aN(T*@ox;mKb>q|CU7fmpI?)!f0IN_;}>rH zMhgF2XB_VnBlj7MSQ!eNW-;u#N!~#vZ7e-`Qi&dUWLd$Hs(^yk5wlTp@pwcD%Tw3D zX!*HFlWT!5N)mSKqYPwQuuMjzd}^Hrp9D+5Jbun%sV^E?xDd*>6xu2;(EzsTFbh{u zxLf~+9xt{o{>N@WK3YS9-Haz&BKs-4_!m+-0?9`UHDH&}BkLZRWE++yC}%}s3TaKz zONK|ZT>`VZx3*fabIc4TpM(ihf-A~lC?=(crzCoxEV6#|9?AS|IyKpX#LzLEA?{;;fF7CGLYt0Nus- z-eHXo3_b~RP~b@S%k{;+FNt%~doF!tKG~gg+?s*41mf*z_meG&z__g)J>B(1y~ydc zVPCGupb@)Q`?LcREq`1l#Yj>^k5f9#E-pARK3#Z$j7(}uPh4QOvS%;Wll7(w+eX|M zzeyjblilFK@x9$6hi+HhGE}R{@ZxxAgq_Y)iPsUf$j4;xgt|2i{m7N7(s>5iP<^+7 z9L1@+Bc^>NaHuF!=mUHa@5@Hs(@0MWKPk!5Un11K-O%Yv8lMgCJxZUf)K}AJ^x)QJgNb>0I(E%6|o{wvct( zc{$w8%J8O>wClR4PlyCtAyI&w+S2)sONF;b%9ZX}GXuZ}GlXkAR_{OPfL zMYgWj{~Kew}Ue$9x1jF!r}3 z?^WyRtGhFKZfQktzs0L_%Gt5d%t(cC$C@IvX96qI1YPv-fynt^2E38Yy66(q!fxZd zPTjn%`ZvxV3xg&kpDYV3s1eNN>XT ziQK@(DUs=gu-EVeJ+yB;l67-BAa6EUFsP((QGTqXJp$j99Z_!*RA7Na3=ck1&#JJe@!9e=B8 zBYAG)m86Ek4mOJvc`aarEYnk1Tx_=@J!R!_e4fb?|8zw;?lYFI+ZwsnJDfSR7*QsH zTQBAvYMizDC6kP6@~SIh|NhWRpc7l%6B0!{q-h1S|aXZq}VsQe&trZ;RBbBEQg=IeHg0D z=!nSLU*PDpM|$YSu()ohdT`qd z_if)z^AL#-qv0ZQzQ6NFUNL_&eQWkMdr7gX-9|V;LVYD-Pa&yt1R{yOSwl zx1f(3?92QXnJn{%78Ni*|5|r&BziCBcCgt~-1>+{Rgp&LvDaecLriNRr#`7~x7)BZ z-AY5^MAy0j=SuunLt4;Qas151NcNcJJ^0G>hC~b#i=PXhy;NADmM+B5!0(Opwf0Ku z%cqeIWLx7?7(YqAS)?Dj4g2z+{@fJaob3TULL(_4k1R-H4;c{*z30`3%RBWaoqdN_ z!mM&DP#YYj7pKU)?cfS|!++VLuYaZU!ogrrN$7W7lTe91+P^-cH#8F!mR;CM-sMZY z#gu2nGhRpVrT5fM<60rC#i7e}3r0S_4~_S3#Scb=7T;@}(RjCzOpfyO$uJ3%Xc@+T zUcT`S+$S|Q{1ec)*Hlxxc~QB@yVx7IOb(3OZs?L9%e&2>k&tC+dKW#KhJ0zkjWgPl z0Zp&C@A}-eU<7-_nuBV0Zl7OV-m!9NOr|Q2S-Ui!j3T zNRe*xyLR7Z@V@Nh_4L7d+_GKVwc`wGKW=$i)%J*2joadW_NPN=#4xfTkhb1(L@c23 zw|j#1Pr8Knw4u(s-|cOETPxp(C3BKJ8fP`yC*@f0`kEDb=NYlK1k`W;4BGOI{0sE{ z;t`*fn!7v0c0FJ*fFTwbvsm~31nrezxW-1{>PXK$<@lndemxOAWE%KTwzhn=BSe1f zN8R#RdoR<6{mJx2_v_t?kNd6XbbYJ%?Z>}>*4(te_8_CFBg;yEYUx^-txscU$?Gix z)t@sdeBAYP@fiulIkIn@(L$fZ-E)1VhopUcp6+y4SH!hfg4c12-;(G05)DsnwjZAO zIvlugo7aCUV4*8eEIe}#Cg-9T(NJaBMGKoeNUuCJn4V~m%8qRq@7L3w@|jm|+!gP< z(C~5Z+Ae7bG_q`Ptts3n2R54y`l8Q?KaEs3s}@I2Ms+bqtia6|-D?3qr{};aUg&Eq%18mGIeLiU>Wk&JZPFc#m%?Q}8E{^R>2h}CI9a7F(k zlX(YoX1h5J||eq z-@b4*X6>RbUAJEu0eh!EGVg20Hf^Di&{FdA#`2-wq4`JUbI-3_{!r+1HPnvcZk%0_)NaFx>~8uSH0Ry&ls^m-TKEf?eN(N- z_I-uif4^>EA8B~CM!usZqm?UUwv}7@DJrS zH`|A=4!&`Rr*=s`B{8~#Zhf+Ua`v(fn7;$kzpuQG5RvNIH4@*;K6Y<1;E-ikW20(( z&aFvNGpb6;g z#snUC;Qj)!#+=)@oG>s}V|cAAgGWl=i{1VP0kdL?6gv>EBA*)QE{)P{ND9vbT2mT6?_n07`@Lx*df4Mwov$ z(lXWT%Lwju>;GGZ7-hE8=wH`%$*T3-POmtxI_JrL+zR?mQ8%%Bh@gxb#O_yWH-hp>$a2^_}sNyxwWWMx$TT!Oztrg-$Z? zZ&9zLRxwAUtG`K&ZwWogwtea-|0(&Vp&5_}J<(>}u5EIG%^*<;&_jsoJ{*Nni zxShE!hn#b|x-W-Nvm7gOh$yaG)*^?^QkyyL;4I{DIa}9oJEf@HRBW|j&J)`;QBGO2 zAzYXlR)&UtevilZ@9$sV@8|PAJYTQZtpKpTjD4|`)nlI*I;|Vyj--?DH_Z*^8xcY7 z72oqew-)HVL@UVTBatf_eQC<0n{#Pf1K$Y{_YUWPq760ijc*14f%eJk#no!o!E#;M zoPZ!7Dr5d2Yfc)*D=FSLHrr3@Gu#m5< zomoY|M#)dHuph0Zg6oaB82k-NidnoU9t9iMSY|f<`Ab6TYT^~S1j*6jfTr2n{JY`S zCTfvN{itFtUzg8jCc$Semlr)f>``}b;+ij-$33@A@ILMKQw%YB_;745bWC8axrmsD z^=KO1*Q3U+4gH#S=6f%yu;FXcC-Dxc7L8G@X5&X+7Mv0s700%+L(JtyX8dV(n~h-H6WUH68TN5=N$9L(_Ww9)T$n} z^-M=od~vCdG3}{A73|KSHM`|?7))^4J}Dx>ly%p0BkM!OzP!MzrQ-n)y*?_ZVPkwd zXf((@a!rq8q{y3v`5kn_=&@ng~0pv*0M{j4CH^Z*R(bx)3LbOf(Px<$7T8pm8k;7w5w_-3Z0?<4 zw-(Q|qnOKRG4zKpg#Jn)xPp$Qcxi=UhE9?Vr`e~kcEC6%<$7*K>3@uRRsLhnmWFf! zJ@KiW6a7nvRp6kgnMhZ*zPg=2kFvXDCDbd%>(qKVln5qBPKv`a=fs$Zab||+akVNi zBc=K)b;2IVI}tPZBRgA<)_zn|L>brjL#S0E_in1neps5hc)Gub7)>wQ#MGWb@G0cT zNA3L=eSdX&&mHF4$?3#-7Lp=S&Ab)J`Ayaly{M~Xg%F=j0OJerl;qZ=yvGF|O~wAC zqlF(t`^TNbFph0h{TdMV+(kit{4^rp>^q`|i7p{8I#xw2#v}ep6VYl})ex|bwE%3L zleE~Q`z%6lqpf7l@vr;91M53p!Okz=FC`ffSfYi)qrlsChxB#ZW8dni1dC_O|0KV) zW3`FIO`E}WhR%D-(@NS!hMBW}y3-vx-<_RUirCfx8;#w&^+k;C z6g-?gOs2pC6B3v|#RhZ?%@E$bGehRnyta~T7v!rBy_utD3%~t0s6EbLFqk)<*!g4! zETYsq2OJu2qp6=N1sm=yKNvTUVU`iS(EQ(c86&;4T7c%FhU*F|_U51H8-tvEL71%z z#jC^?DO1WOaD+E{n?jPkB3b~9^!0m*T*Qw#@)!3P8cOt|S2~WZT!6)%?D|F-0K>2G9}z_wAr(_gF{Fc&}&0 z(V0gxx(Ny_PGG9nEVN{j+#_qBi<)$Kxx)JbbWJLzFtFFVy5`T;s@kQL9;&VFwvh>3 zZ^LJLvQle0j1UGtdy6t4`+R>=;R}rNKzK=Nqif;>3ME9C{*K?KN9=@yg<#6UvuKR6z z_?wjSx`H`+$y})%(wE$yS7veUv!8{7LDz+f5G~cAAL>`Xt`GIkM+_w9jN5ZX4w=)` z=aBJF1vM1&%JwqD=`&V4@@CZtdwq+tkyuy> z&bxb&v6^&W_@9%0n2S+Kj@y+qpO2|0=HwhO@)U?0{|k8X)e6fP@ArXC;M%CZ)4>S+ zxhX{r-D<~QX>dmWXTt20n}?q7zuI@Z$e!fA?ZhY@4a*d!#|t=Xp{Felvx)15U4i%S zYSi}05o1~PZ9|NuO4vlmZrH|Yg2+pQebS(iYxFYiKKPSmT)$m6xr=PqZII&)pE__U z%bSEfkI9oR3y%-plrb)xvUY=?8c%RQG6!H|MV6SkUV&RfJBhbv8 zX4QQ8hPNU?b7I#+2*Yi*lUuv-;I32+SUL8vrg&;D;!EzU=*+{apxO~T4|P^pea~Te zOAzdT`+?o;+9y%BpWejp1!mlO!3xqi+bA;2ie}x4qG_`<4@4;(c&M>jTsxc ztlz{g5lf0XE;Wbo8D7**U0CZNJtp z^ld(FB?WBr%HRn;)j%Iu&d+OtEv*@H?w7M zee!(&hK5*y?{RDsMfq^B=C-3tVSO*8#$O{Q8 zmFaF;hEvQ8{&-7ve4F^_g%*P3DNOS4f8FOLtzAt1@Ld3RcKT49owgY6b+2;vORcMO zWle8~ZA-WAvMp?hIDkT{e0@2 zVfyb{&2Z4kgntLZ$YS|zQ9|BKw|kH!CV;K6v2t=$#Wl2)8F8*P@FZwzdA6<9O>5Tn zr4{j_nr%SfMQ7-zhT5xv338ZBtr?%4{g4N|)1Yh@_*VfNXI@MNFw2Jy@xh=jHC6lm zxs#f<2LH0J75)^O-PCTcP{a1N- z;%ygw?uRbuIPXg+-I7cXmu+L3lnnKg1hDG6NcHEQ!@m_LyUCTBD7baP(KQFx^|>L; zl7%zx@`^TwGm^S$58k4P&4?AGc{%UhR55zY)8)!ul9E&b>#nBuf!D*7GE*M$>Bs#g zD@DnXCsmkX)(cDhss*nDgOB^-jDs$d-&~1W|MES$5xU^iNOXqQMAX(l59|b~KzE~P z6~Mn%@_&DAl;+7Oo%pwTkxyg$uHyKqA^k`U0e~oybpWhpq595eyQ49vvIqBKis-W$ zfw=(Qc4vZom9}l}E<3|rC;RZt3)YJ;FH3V4G4+zesaBl?3x=F`M{L{g%jHMM!y%-fp5|w8@c$gRBkn#DoLxsM6jM zvchwo)&dldf83k-DAFHDb^3d@@O+u_mvMT-AHGDiH{9xMhY%|woMEWJV3 zYl=BD_($>Nf4F-b2&ZTJSsMA4MRBz0jep+(Mu+_I+>zv%@>YDNEUD~o)dFAWltQP- ze$VM@mrC&M`OrGm$v9vZfO!HCK;z5tan;vOIpT&Wfto#?X~mkJVVD?`sZE~*Y$fw~}k z^Y-6{65+0nRp-cwdHkLJn2>@H{%&(aB@$gS!r60)7$dv6*c)q=se>gb{j-X#T+h?y z-BXq5?!XabJchMVQ#*J@Zw7V5f9MF%l&^`Yl$u$aGh@tfxe8i{&XCS7@=LSq=z_fR zP3A!FPJ(m$iL%1v-j9!4nTJNJ#KtG@Q?>qUAf z-$+G_gF6m=;rc9>hxu#_1bNU@!YvgOeg`_n^4@B{1w65KX>KlvBhv!8+J>{+coqqN zQ;8WG<(_=etb0)Ue3vDx$t3Dh!M?a9t5uJnw-BK>dpo}u*W}y-efPcfo4TYAk)QLx zjW2t2#c+nMA3bJJ6X9ZBqQH;`ZlY27qM*;0yq2uviQ(m80}z{B`-L1WJFm(5x3&+h z-kRu=pc7%DV$_yc#24;7ApX<)sEurVhXSEgB6@4hP(&|b(HlrH; zo~~N#Nsdk-;x|tq{Uj>3Dz*2R!>?a&Kt8|GUr~^HBMLiv{y;r~-2i#9Z<;TzOSDV< zx+8Y@x^_S-vsof7PD=Rc2P>uo>3@P~AO75Zsp7F(xW2dHcW+F$-?Ydsb4l$Z(V_cm zd?*p19%CK=7b#Gut-51`In6%WFJAHm41{e?ob~6YGC8(PqFbs9G?|`NCKQwbL(Y1(L;+FvT8r*yILqQ{+kE?P+^< z?wY}o|Mco)@5hWwtMABp03Y#TcrS27&T2?^3%?^LJYw6Jj!LwCstw$6w4EyzB}vxN zQ)=A|c;d;UGE+Sg?}}+rwUDdaPpM_YpLBi~l?<42Nm4DqE&#QlKr#g%BFoS9~#H9vYtkxdpyj^pb;4HEvi zoMvfUOVw>}H9n>v1$VC9^IG+};5hZRK)SXr8IQr}#ooOI6Inu^C_gT+=6+Ry-DH+b z9OTvM^Jx!ss^zMHK*d%U@2(8PNf892=!ZOO(MY8Hem#XeB9q(=nr+Bvb1_2uGG#ivAK+a&-{y(5jb@0yQUj(C(4$UQ0BhAB}KJxXoI^o4yeeSWz@KEs=s)awy7XYkq2xaD1Wbo3gLzq+e` z3|BZ4`iK6_y_5#kxg

    a@sg3#Gn>8y;_>oT*lOrhsN@pIDb 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/ttf/RobotoMono-ThinItalic.ttf b/js/assets/fonts/RobotoMono/ttf/RobotoMono-ThinItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e1bb9121ec6568d6b8772d121eafeaa5da0db928 GIT binary patch literal 121456 zcmbTe2Vh&})js}?do{gfTaLFZOCIu;C3#!kd+$B7oy6HY&VoS5WQMeivP#QJ*sGM5 zmbSE|8~OoXfl}H6ZJ~=oV#)vKy^=Ga^!M+V8_BxT9q%~rInO!gIhRmENC@5}Lh7n( zYW2DLJVIyyzIE4i^;G^o^i2cyn+aj{ZC%-UPnW-+O$fgpzmHF?nV9YR!yRJ(AB1RD zO>NnfI93pPme3y`!S7#QHoJVy+u^T&MCi+@gy?TtKCy9D+zr1U#9z(wneEGNd7{ur zNWeIu`^bu=6Vso(5rW^3j^lUd3VflzpL?)>3j4_`)@<5#DpeDQ{bzBRq?vV76ICO3 zNQB<<7A}{(W@6i{{L4Taq4%ISBysJ;nx#E+yKlvQGTL}}cHPEJ?^b^GJwm^Bh7j}5 zW;ZOIb!{&GCZYfHJdS^mh_Mho7ylU1kRM^A)I?M8-cP6SzKw3f`);}i?|bQ9ykASN z$NP^cj#SRqk$93pXmxFKH?APsK^7L2U+Bg)Q?vLE!>PQ`Zso6rF!~&MgWf`KrMJ=B z=~w6-^iFygy_?=cze?|=U!z~A_t97B{qzC)Abp6Qp=asC^bz_feeC~q&fDxXyBV)9 zVf!+>h26?-W4E)fushhD>@IdUyN7+1-OIklzRvDr_p=AsgX|%8hMi>(vq#vY>@oKE z|M9F3*b~^E#P$@nr?EYQ?Hkyh!}d*V&tv-*wr^v50o!-5eHYvJuzerf53s$2?T6TY zgzd-dWo$pe_ET&>!}fD*zrglOY`?)77F_P^MEgY8XhZ(-Yk z?YG$8!S*|B?_&Eswm)F|BewUjy^rk!_9twA#`YI%H$zeaiJ6pOF005ei6#fI<&!J0 zIq19e_ryv6$kIsx%VcF_C#zs%x4`9 zkaI*PL_RIsAub8Nzx-!p8N+QZ{(FnCg%FZBgl`hXx3k+fY!p(p;L%KaeuXtL$!v*) z-qwciq#_wokK^!}aQ`b-*(0iPd?UV(C6cNdf8Qc|iHeNl6C+ym&qVf++sXap0rE}q zBKZmVJ^7G$X)q0?7MenHXcrx$%jq6EhxPCkNa#m&fyFQv8(`03?tXxg{yV3fb1e_% zW`39-;n(u7@H6}={saCp|2cm}vPjudjnpPhO6#Pp(v{N7(yP+j(m!P?hscI_8eblN zMf_jm{~rHoLQA4PF(NTOF)7iSn3HHvEJ`d%tWMmNIG1==;#U*zH_0Z0Dbkc=vYN6? zqe(1Dl@y#5mK2>7pJYp_Pa02JYI*777rYA#9;{38&)365l7t?91wDL_JWswyeoFp8 zJ|YV=goaToO{KZCn~u{JN)K*0{UhoP7BaN6I)d7*iv07)V1(UNK`sr7Q9S& zCEyi@m(cT(3lR(4`?2>u+AoI2JLRn;M?J52?)JRsIg9tZJhypHdk*1h%NLf3BRpz+ zuA4tU{|O=UkK^?qUU%Yk8_qt7*D-vqBjnxYcLRR+jo*FnyN=(z_dEJFuKsr0+pTXm zzg_i?;qBsg^l#_A&ENVIg7*u&w!XFMtrc&Lym|7i&bO>@9{A1I-rV};mN(bEIrHZD zo7Hb-zM1~|i@KNDb@V2m^on+nUn}pvx1ZwAYv>KMFO9$CHGau4gig|#OZPAROb5jt zj@X0u8-2e}^o)KCalsXt8?R=(Ucu}4c%AbdbMc-1<>KdypV)73EMEV`KQ4vP_vr`p zPxR09FZ4q)M}JSx(erekdZ?E!V4dz`Fd&RE&Lpy*9AGk2F*VaLEz^;M%`*=<%e-uXJPh^p2&d#x&NwHJ zafv)mp5QW9aW&UKhv>MT2S8f}@nG_89!Opw-yz?HUiu#SKKTI;Auo|1@-`kxe!`99 zr#y-;;n6&X{EYmZ{DQ~vb{5z>jzi`76)mdE{^0PX5mGc?Wk8FL#m! z?&1Z!kQV_KP|A2Q@8l(vQ;Ev_9Pi@Y)Ih^&1dZf9ycZfKg)c~if670Bu1TZm)W*;A zd742p`QQ0JcpvZQ@ABW%ESk+d+zXAH%m2XtNb{(j=2HiCQWqcKgZw@IJ|E)4l3LR6 z5BQ&G0WIWz=6|6@w3wFgf6-D}#{bDb<|BNRkI{1KmSjmqD`=%eCB{GGA4y!2Xcb?@ zSMt?-hOgmk`8rxnYxrOJ-}pg(1+ArZ{7QaE(n>m7&##j7{AzxfPSd4QpcFv2^WV{( zL2Kt7XM!Q>!qK4XF~dcp=8)1HIS2*=!hN&Esz9}VBpA55=IOp zoJ5dFVkA*y39N4nY*-vHSOQ6e)k=b8P9_#&B`GA8q>*%D13JqjStOg}kX({S?6B1i z;v_CoKnh6_DTXC4C1s?XxJd=6giWs|HKdl*k$TcV8c7prCM~3uw2^kwK{`nn=_Wm- zm-LZ-GC&5&5HP?986{)FdWscG|4RRk6}y1-slwV+V_j;Pjs>tF7RZ8G2n%DO%)r92 zPK{WpQ7jrOH5RKBYm}}f>&PUTBFpJ4*$iBWFuKYkCHjEj~*to^cX!(mXb~M z3VMiMNnW7WkX2+mc>-(y5UlnDnW0yc8|V@85Lr!j&<%t`pZuA6#fla4Mpx4r*zOhN zN_v7NvSV}$-AOmm&0;d>IyqZ(NopKYy10 zxB+)`LVR3oO!Sf{V`N0QAuQDYFC;`0XQL)G)8qp5z{}3X%dR$Y6JBQQnb;HFJC7G0 z^PX4JkSDxvYG}sE!jp9L+QJk6P%n@tX_(sk&WVC=(BY@NchJ+`W%P7D3vklgyc6Q( z^!y_q-@VKNFl^T^2pvu(6!JyoSt3KwRBHhvCB9q?4_4h2 zQK_UMA^~He$8cyqdnn)dZ;l*rhgP~vid{}eetc|{F*HQ23Aa&a7E8(Et}^a&+12q} zZN?Yoq#&kN#Y;x)2XVF9?7|UtRXoFC{7g_r|CW;4gA+M{0WBL&v?dfJ^zUkjQ9CtD zYBqM%9++ti)CHv!*LS4V9+=1t2xwVze5T zN;5k*KmvCxd?5A9--X7oVRiRmwHCUaLr~AO5mE#l2ro|}YL%p(0+_?kgj6?S=;R?H z%QbRyn(tq-MiXl@lyQ4rJX52;=AiJRwy&mA|U5ps0U!PK$k2pR2HMRj#$CAt$S@H?76e+mM%4 z-4I1p@G=S!6v7DEqrWny#ppCzXZP9)S6|^0 zjXI;G-h4alEboYP8it#Wl+D`4mai*mziP}Dpe^c{$jvTXG1i;n{f5z=G0^1H1|+v{ zv}#mFbHp79rFM%(9g<#Qa}3pFadUd#&{%HiY_HwcFrJ^?)!>fZ<@s~hQ%g7hZ0OYo zt+mcX=hRhQ?oG=Et)A4_yy{f?sU^kSF|wklc5`>Ov@WBsyWP4g%2i&Mn%Z1srs;LV z5G%@tq)GO=q8F_`t*FPh(CvPmsKpMnwa|!W-#x$Nv)`FS}@Typ0}pWGv^ zLsxih{QIgtSUuGvk!qS_qh+$os8TVArb-phjp{7P>7s{%bE*e79_;^g2!);RX!3(tJ@m?N|O9q*^!cMnCkJ^aMu_g-6&R&?rtZ+!Ea9^48I z`j$7HC#rg(XH}1c%i>GXXodG1CSQMck!z(E>2X-5G`AJ{LEa#+^hQa5HqwJXgbpgUsZ~+-Au3HYRJ~B@ zK1I)V(VwZknSHK4uUkW(?{l%|99}K`mxIC|!ZoA?N`DTEs39TlKn`Ohn!eH~8g5aB z4HHVAjo+4(Qx#-%#@x9z$+flqN?+SPVsrc~dkiZs${m5RC$vYjYCz0GOK6B95wJG= z>z-OQf+=%O{QB#KbF7oh0v#FLA)*CC_!36Wnk){t`1O%WWwu)B8#FL1QXdc=q-IiD zq%q#9iwM=}@l}MGT5ym177j`^u&La4EuUzX&}QGQjb>{9LkS-(*`>0H_HuF~^g<2v zLLAUlIZ1U}?0HEh2@?j@%9MscmHL%x4QbBK&a^64K1hc8bLS)Sno5|#Y9Z_rwR9^}{3ZsLMfE@egA6BuXywxMM0Ragun;Sc>Ufme# z4DH%}%W%)(;ncvu)|J}}ywO~8GHc$<)&mU!-!*7=jLbFm zTsKo%y6QxC}A*^z6WA(rdGbQfzUmkA1YN{Y_Xm4BJuJ#l-BMkVTNRgOZ9W+jg zJ2{XNi8jgrl zHlJ8m4b$Yr{4=t1;RF656b#v{0+4dSeo-MX!qEF|JpYwCbm@cFZ5ywPvW~CY z;hsF&9T%ugE$y7zRJrPwNlRdKX!X)7?|E^9_XqB4c8(gt17bU`8t*$kQxg~%S-(U6 zj*~e@_nx|cz}{7C>OOQ|U-7nehpJGtUd@&8ywpyYD&BPHE@f zTU%Rh+9npZkaWn#NoCzHaYtewArZzFS3QJ*i>^>Jg+7*!&Octj-SbbX`62n(xef9T zF=Wt>TQKLVlrbxY_vmovEs+_MF>EqnTn0jifCzPcnU-vBtaKMRvoeyCvQ)y_UAA_x zwk`lCz6d%oW&(v8KC>?k>r4CAl$1_Y#p!}4j@&=kcY3WoIG}23XO*+Z6`>96ox8QS z>*z$rso<=!D;io(?HLRX&KSS4vGt}s15<&P?yWTqhu60S23fndRo5Nf&@Po#tm!Ea z53e2BR5^0}a+hnxbtCm#hAYA&s`^(J_a0wSShV8!{5x%PgE={ab8YQ&eOXz3b3CqY z`#@f9-;Rd*&D~j<-CM-iF!FtjjT5#b6_%siU7`_k)Cg(9Qjq}3{X$d?5Gh2<2O`tc zC~-N`%G1kJEYVRx0VI{CYT%z(AU-bOMlm$9%NZ|0j^Km>JW(Gy2TJjyNSZi(-|>wD zSl}4cT3@dk(BTMjtU|-VC1w&w)v039wm2EmE@E%V4qZvz!%K18L%c@RQ*@>UG4lQ zYJOP5PIK z4$n}FB-f1)>t|QmzS2W@5#&RoULp=FyShmzM`>e)6)Lb zqH9OJck04}wbUG`GvH5>kn6OCze*3t&yi`eTUgXh$pOfLv@|m;dEszsInz#Q5EZ0E z<_Pmhl6r`!)k+^#L-0FmRL$GAWMo(}@GsS>6M=>xIYoGz=nDRbKFjdAjcOi*kgh!v zFiD_r1v?4wk3HcFs8s@C`2m(3#3Lh(;!uOtnqm!-q+^;Tmb|JSM@D{(%p>y4n`}A7 z32Ie{I>2JD>Y6Tz&afthv8yDV#6y$fGHP9E3E}F%P&uh-`{2aA$2Sd?hlOe)3nz|_ zHy*DDsl26i#V|x zjL&mdxufY_(Fu%NDtkvqg-~H75&j-@yBe0?;!e_uC;*HxmXm~)Ak;kOM}TPI0w|D7 z1be960Cms#M$gw@DP%t={gu;mfH~*rBiPd zgEPnW*Lr^{pJ6$phlk3SwiktKLMlf#l=q)pRl?X$Jj+@B;O^$SP2JhhVQFofTH3a> z2)snee#BCiLTB5F(`^?fj58UlRu*A21fTe#F$1O*aTGv)yxWOAGdVmnSq)?hW0oRZ zQ=gg!KFrSou$BE@Yh)R7NhEsw%KMge?d-7|na&cJQ#ZQ#Xy??mBk4Tf+_Gz+ac)(& zJ0l=PD~F~v%rp((xTQCaeq-p~{VkLhPwqQ*vf{P68;-murCpQ^_=>_1{b=aJz1?%e zMX^ku7MRyKvE@j|;L!;rL?m1LmiC6Z)qPc20qHsxnccR&dBZQdn!Nip^wBR5^)XsB zF?aO3n!nUuclGu`N5%S^dKwN)71Er}b-S)8|ETneeVZ{AthSBb>w;*YFEtn+f&cWx zV_HFWxY?=A9~f^*L~ zopPnGy=_>V4^cRm<8u>anP z(W67D2-7CC?C9*dVRL(kd}dxZ^wqg$N-H*;9%wm)L8H~P*R_i=5;F7#?ioPh-7z|q z;u|w`OXyE!h{6n^VG4?XpM>FYQ6mLpUif&-elGvSzu3WMPZRxvo1Ooa=QZ5to4;kF z)H6H(TSeDEN8gWY%S7OBKlG*pi*gwv@V84yyZr_Bo{)0bJshsgT?^Xv73>6&EVoT3 z6tCjdqQ#8P$`aPs1r3kmgGi78?NkZp)j;iNsezjH%xs`HJi?@&dFRf}o=@{0-?ZI% z9*vykC(gAa`+xoXc7Dh+>8Vg|N=2AQI)TqxF&1jX31Ct<=Cz~=(=5a#EHq3Rdy^T! z&S0k)j~jD63-8;{QNpYS)VamCVe~ z1XLF7y$H|wA%PMQ^aWFr0<-HzHXZHk+R0(R> zS?&E)+JrGR!RN?!XJ~*sg}={f1N;Td;1`T>x-V$O)o}L_NK49+{8~!-_v2h0QZ~A$ z?c1q8PVG$Z-aA|jZDkG2Z<^Y9vfIDwfQrg#+tAW{aNS^aPC&}y?iK3>YO(^^>c0DL z-k0J1#6&{^LkcJ6j$L2=IDlogDdNUf|9y+H+#>pbsp$UR=NJB{-zyMO);Jm zLF{f`GO@R=<={jS)*U75AlGX!2Nep2Krjp;v01=E&T z!w`T`l2MW`8Ks0lKA(!ZEG)u*tPRboYVWtz9a~cz7&v;xSK0@UPv)o{JhgLsYt7NE zy@9&0tm?Mjw1$&wi*Uf9yL(1%+fb~|=lK&?cQ&5f)|ksitwX%JD+xBtFnOON-(2i<4?dO&3Tu7QD5n_EMmV&^R* zXRqq&z2>0-{`$P7<;%NTn|9pN!Cy!7aqkb%{^#Yhh-ahy!er4#(ThdN2@N#}O>8l` zz)LW5BmKK3iLEU1bd`SKI@Z)C$DQkt&*CKV4zBYl`VcAl5CRWK=wui^pDy+V*({+E zW)T3TY8Q3bvD}o4I(Ukj8qJ}0Fei%WRd!}$g>*dETauf~%-#{2mrH9Ncw8Fe{QRkh z9+j4!>)_J!<15cMaNJJm1Nb}A_s|Eu(4<-w>>=(gOq8(Y3edTbfJQH1p~QbX+sAm7 z=M~yt>V4kxdp9fhK3c}Z*e#xXPaJ#JQw>_+ixlr#=C^oWXIUJok|M`Oq!Bb+>(}~=;)356jbE70H5b+oF-ZK`$&=Lc zH_QArPpq0}NKR*l+~%+7$zmRz~JrEOT2wJIcgJ}oMZ2M z-*`{${SAmFiK@m=9(Agpgyp?^VLy*SKRGeD!PzBLWRQ`T@uwyr0QBwxT2>&R{q$#O zFSX&`a~JLn(TC=Te+B5;BXlkL!{{ZE2J{7&00uC5f9QQ%{T?;{LACdjdZ)S>*HW=- z`BNAd6^U?%K>{x(Coaa~;GnVJc&AI~_v}v<%hR459t$u*NyEZR{7N+SKjc+p0Was~ zUs5ByipU0KtEIPjp8RKjU;VcOb-~|PGq>|R*NHOeZG}0_$XehpwbTlZ3HT%K3ZzF> zfWSl+N*6=SLFb@EB~wIs8B_A|bxmsOcLuSD^KuJaxm9^pfN1F{8j%ICI^pswnof3^ zlx%>AkRlzR=sm8Aj8I#I%VhAm{_%|WGo8-1a_j!;@(mqndR=kf>P_1Us5(|>ZeCYW zv3s?Mtq<%t(bRlk*rp%VQ0iq3S8rdDmUTX7)vC#k0-Y|YY9xQkp5IlNKxta@Om)Rn zLvDN^y|rdlgEgsY(#@JSx7)G?=Gr~Kbu4#iP0Ug=QA~+GDz&Vq(A8IJ!YDJc0s4xn z2(XKbj6Put4S;_rI17RZl7Q})iL{3j)T>h*4G}Y5^cZ8r5gcUMFFazvtxd~>s<0|9 zkCIDbDX>*`5%N*eNoGI#VQL=lOC<5X2c(yGt=!X?Gu%-b8SkJP=LS>f*ouPY*|wZW zrY+D)L6(Zis={rny9}fHg4Rh#)$DMi%c5rn_rV=V2t{R8*=|=6&wg8@D>0{I&Cb20 z`5V?wH)W>Pjk`SmaP$-<*y_jEZYjbv-+=z>Aq%;r*j)hICSv7c`jJ{#i>~^6E+U(X z6-K0-lH{cLxFyB_ok}LTG*_@LEFyMkSG2hR9KLDyn>!KVM68F-*X>!}66uWW-Ey*{ zabu4&j_cH6y$2s&*R_8jU2;fCjqB>FHcqsar0X?W8j(@IG%3Ahrm|)4kUg_?<+gq0 z=~Lgjd8}yZ;r5y>eYq($BQsly(_I^9#_G~BkJqCg>y>$Q_~%gsX&2`aseuaYHH!eXd=WDu$6->^9L7i`PG=B{ zT3OyKs(#yOWr|*>3CL?4+pxc3{77FyfNuVWTpJwQdvtvHnMOI?m+Q_7hE#@7q#;D)OXiY1l{T56?7&hSCQme%>Q-*VyQ>vD~mcjf$pr?C2cB z`1X67!2oXsGp|NO$%;)-5~?U8;}RM~DO#XXDLMfoEXzJ3lNf7d#WWzdl$mC+L|8@B z7G=jJyjpXTHN_PfDH0+|P9RByK|e1@cP$FiFa#;d^<-$WmxFe3V$qXbkfNrUwjLn?fWDiR9_i^>n}>K4P0G4OyvCI?f&hmSA( zFz`fZge4+b!Ay&G!7TDXBHJM%mNX@KWZmAnf$cShfNierdcAXLTix;9BN5wORO{r9 zqGipQmFuo;1DbiZY7VNL7LM<(_Ee%#n4`TgnUBa%0*gclKVp#;1?=a~T9+#=6d*z* zNt2PLyeKV;kqeQojD)sI0Rf?iKKU@+sGk3&hVJ{icQ3tGN>5BmkY!t9VuDn3e%|Ti zFVoeDX&DLeX%wjs6gzmljr>meDYU>OGH803QXK#Ugv2iuXbo1N$e}}K{2p8bLLKIa ze2bsG0kKf46tNJY4n$KH+oVpiqQK`T&xAB?JUwoo%F|~JXZK#UtTOnlcNP5#n&oet z361;Fz-`+bDAj4QRe*TqtB$mTl{+Kant*Bn+@6A8Nu*v3T_7oYT(4F_0KRz*g+wd! zDh5n(cVpc6jzK*#cHuklAPu1gU%W(_Jp@b?IQpvmjTR@>xX#|l8hbtW(Z{P<13&Do zR+01GE%Zfiu192ssBgY-e=UYWF}6aUl%XlRY@%Y^BKZ%li!>nu-HY=FX%h3NNE1My zKk{@neb&1`*C~^B#V6ifDsm1GNk$FSg76IvNNv!N`R-h`2x8Gj4OOeln|z^EAYoG1 zgw(bo9=K&T$&Ro@L1N8Xv2N8!RX8J!cozf*=oe?c)v6W>FN99kVM~Ujk>-EI^KD%fR%)vswa@=aLRQKbo0FiAVugQ#VN-<3uYklL z31{s;tu?q?)QZJ6hs9PM7O>T~*jnq3?-GmcX;&_H7A?hMn?3ot#U>Sb=P@{7T)^fe zqYX=d97N2=AL&s{rxN`^2+wA-B?}SpaS?$7`~X2PFMUc6v1lMdrru{5Ir`MP#w`P- zCN)sO;!cuU=L|BoTsbv$_gr_FMk~eGTb5T$-ZR$|#`2ba`_xEA%gSy0-RT!Uc0X`r zpy%*|1L*|<7^I1hXfE1o^^S87+ADCL-JP=t^c0!K5H2FTMQ|sKN(F`H{w#PCno9j2 zz}trx!CO`2QU_&DvjX0l*2C&EEwpp60B_|RrrP7i0t(tD9F^;b8w#u!!CPjf>*f zwMWw%oC%kKx7tyM=Y2$7hx<;u(JrYlPaV5Ef~%Ul$D$ zH5-)q`8PI5Qs3$8R+D|WwJgHq^m?7k%w40)7LCs3U`7WpQ&=@SqIAm-XJQ?VnU9{c zveJ}_?C9LiwL30{Gf~dbn$-0AiM3k_#e7j}z?h3YI4hNUU^n|_N=h6Mjj z5jUuFNAEV{D=6DV)7N~0g$W|bYw?D+>)qp z#Ap}eKk{b)v7d@8`<4T6bGUCg@Kc)btjdPw#FXBS`n)KOu6OG-6%B`$6?2ztAJ|mv z*t)VMKpfK8l$hGrQJ-tn=m+;)S5TN^Nv;zcZ~ZRZ4A3tyAZgMFhQ9yJh-sD5;b_kTU z{%3Q8J8HrLwm7!}cTBg|T(!ABd~d>*EE<-Vn5G_7@A4g2%?7nN}$ z&p<}!q~Z&Hz8I0kT$B=N5^*NH7FcDO=US)tt>O;;$MfIA8B|msNZ&>u!id?O7#IL= zTfPuw5?0n1WeN`sHwYVN5HTy|jhaP>2`>G4K0wRz3If__R*|-TM-i*r92tmd2vFdUz!8@Lo=A&D z$+du)W=Ed&G8~L=ykV@T(nAuO23Na{HgIRH;f|5k%IHJ@SmPH*hgw@DjBnw zRNQJiE9Lw82V^6aqqCRAqi|!i?F-^jvU(pMQ_Z)k`4b)_NLw_BNAXu(6p<~=q}y9B zb*M^FpQCyN99Qs(A;d1HHKklo8w5TRZLap55VbX8@73P=*ul-mJO4R%L~jf?>aW@Jul{Q{_r_+~Upf7+ zowvpX7q?Fr{PTuif^C9~{omL>5liAq91D{uDA*Txu8MfQ=cEBn@849X9^q;Mky8Nmfq0wS+9i!M=#gFl5GsZXFk#M32^&j?OP6I8;* zJiHoQ66gKERHeeI7^dV-6g4dS3qtPzHF>4iHXFQ zW>;4!*tQ=Qt?hNtCF#z%sI24&no&QTQ#9M>pi${A@l7PY8Op)E5%W9ky_vlMtjI~I zg0Mu~k%*`WT@T&jg9>mVEPmP%(r`kEtyT;(cs#7#`Iw8AE5w|L1TLjSL?o~$&%Z72 z_7iZzO*BavpVJF^DMYpcksNs}o~o6&Qvl*lxyV9G@-hO3q*|p!W7HxV1Ce6OLBR1x z*ymglxD-?FDP zee#<(kF#IDt|_11*ZBGHj$d~jKrY56JaBYVLK(~~n0PuZ<3!>U=%rEyQ>~=D7uP$6 z*+y&;2vmkfhK7dg1w{#YF|`E_gAgEt*=6^kQ)KZMA-qXV@5~OcyVzUm`C;`2Yn~}g zmGhGNhna!3YfcXKY;TIwIyB)WOB-9~#!3US=`uC@lJ~K;6D9D~BHT@#skF&S%Q|k^ z*<8N*NK56m5htyjxw_8#Z6|!hPZ!>m-je=GQV@GZtR_ATj))~8Hat|XQ8RAU!4u<+ zaRx@~Q?w$_hkO{LTm)hlqmE@IIa$$B0M=mX`*f!|#iatuv~%(n=h>vkZBe1&D_eJ^ZL@R^jN3l^lCC-){xSyuEw$C;im&nTiMQ{1A8}#+~4}WhulT`_ipNU`7CTWFb0eb z@(@~zdJ7B(L&%DwAP0e-2_1wSUb8HNRCiffn=+L~;rWTpAMZh69OlDlcS(;{dG4e) zs=bZr^ijMQI9=X0HGRb9ZPj3TKTt*s10|FE5S{3WLa(pW5f#cdv6llrsCs z6T-jGJ{Edq;Ztv@v>r0t2PKZU`%oT;p8z*15!RA%AwfVvEFN{0D1f63D_(dmW9Yr2 zbE@U$l`HCND=SKilf$zVRv|RvMY6hU(XA2;AJ9`E--2a&F&GOroxq;Zo-zfu4kwG6 zIEakk1WBR#s?iNaxg7;j+MtQ6@9LPmWp$q3sY@Hay07N=j{aa>XhvmAS4#GZ$)1vE zy{@EhbzxRRj=^{E#0}$VdWY8BIoDNpe8)g=uzhMzN!GFn9O`Y1%8n{rKVB0UV05() zjii+n?waWc3NRLQ42{r-Dn{H^t+BXew5Wf7Z+hwMZBwl8$dn_geoa$eM|qAVMjvR( zENq!9D;uq}>5U~#gU-GKy*Bs8TSwckURp$HQvKSdmNiYeVL=J$uEsGMst(r335ES- zg?*KImbd@|U*hOR*;Q3uN-U-U^ZPBim%jsUSRka&=nfYqjtq&2Vl`qh$tgY>h={wu z(^sldEQ>)HD0%t99=)|B~^WjejY$8^gU1YtK1-4j7 z!c|6;G`U;?wqW#mE0gV4wP*L1CunqaOScp}7^K!)t8%h?>z%=_kn+Bjg(ZDX#F>Ki z-sjRf>Wjk@@5!3%b?Y>dIaTcW#FE6~W)|aUwY&RVOK43-TZx6zh|H?2g1+MT%;ssA z_r-zXG-^yQO1_^4r&Q&q6{o<77SH#YCnr&le-%rin-(S){uh+zP2`@1|0Q99pS|$E zU~vmNxAFleQ1UuG!hgs93O*C~LE?*zn1IhDLKRXILIxrid9NeilaH!8dW7aU0O9f> z>#L=DRKKT?LQ+eb-3?Bv*3d>Mbv08<4COjRtC6)6M56=l(Wob&PZuNT{U*ta{*Rt^TeFRhkJSAb{#k`oSg;;Lc^vK36A)qgB z*^EzhA=c^JR<3&bbHuGHSaHh@v5t%cl`7O? zkGYP;tpA}9&L6B@|D&4+N51sZ+R4X{^mJbH#L|h!72!SZJ;x@QF{9FE%Ckgk@T?Mb zJ`IVp#V2IO2SJ}>IO!eoPDytW)BC)Wi@9kGsl+|Eso12v(;@WLtC+n9Ap2rGi<{0Q zL+B$G2Mn@}sS(`sa#1ZF27>{Ic8InYf zH=WU8l%g?sz9Kd#RS8c%@K=Swe~M{3BcS#d9RW*#BShi)7abw4@r6I)^nrnaC!&+X zd}VT=3oMq&C8;hgHIq$zpXVbrZHO&%rD-$%=jpsuEUBICLrosR~ z9xkbmQ=yPc8oMwMLNh80uUy?+R+68Wm6?{39QN7rxXYS+5pZ0H<0?yxO;lOiYwTK0 zM0RCz&+b@fP(jm3es*73yjGQLFE=F>rGhP2*g2Kw7^<{T2aC1Wr>AyQBhm|LWQ-1WlvvzrPj;}Y&cFDEW1!qT-S2r)ehrOCgOD1b z7lMf3zle2ApelVF)y1>~7@(;p38X`lL8&2v<>Bnz!A;Y5&SZy%PG9%*@<-?K2#>m5 zUthZX>pN@NxpvJ4Z$upX z4hlweG&w@48v&Z3G}qh0!1)G$SHyYHOdo%gf(apz6n<$?==4Tn42@RW>O-k&VJL;H zxaddG5C?-w;~rR^Ma`WJ1zJs{*xAdDT^=>H>G2S`pSI>t;CDvXu!n*7zJt7+jl{Z_ zd|pN3xe1pk$P1C#Me8D3tpF-|bwJ7B=DOPH(g>{~pk!c6Ej~uV9}LLqC@G$7vg;!? zfmt2J#Z&kwZFX-TDJ&Y@R=&An+ekqnKIAWL%gJtC>fCH!+Lo8ywiJ)zSs-5}_wz6D z2VkE!FSMe?YCPZM%c9Hp?K_Z(MEMECQogmYnSEGznpo+U-)Qi3v+vLhLa;9$Y4{}j z&}YTZXnZwUcv2XV%H&5Fj($<2oV|;EP+Jq!w5x7g_1c=%pYefn2>(EF~g6 zaBD;&4>eN~KrK!ZRtw3975E{kXQ&FyO^JqfqSG};sE*Jm9iXt3>05g zrV}OGmx%Q#ZETt|Id8nZC_o=pJW*A%zP}8`$hFI^Xm8!z7#k2!*0-{t%pDS^6jntn zihn$NJgcqFonRYUwyC;oeUCl2dtF)M{>j3Ur3V`t_pYDLv~O#p6TY<}mIzjg=-R?N z82=wYR)Z1Y1+ykh@M=UcrAi~K0DFkQLxS77$eDv09uO|bB3WN#H?byAU@iFiia`{9 zt_g*_9GpwH_w+k1uBWf7y%WQ9MD4wEDZSkjPdoP0uX+1KmBT5gXOP~@mt)XZ!xrnf z8@5>Wh?XNJ=n{o*g5a*Ec)-rn-ruFuXnNZ0T}tig-k*5ut@IkY%Hq9&u1@n_=iO$e zS9(RgP|U*P(jVkkF#bhY;fU##mt|!pB?Rg;z5-i8vg2G~Oeu4#REjNzEvhQ=^CB`0 zU_ybrE|^f(6vQo1B<3e5GXyPoJQG#iDinZSEU~wyP=zCb68lI$D|}!sV}Iq{ai$ik`kVSfU@@)HOc;b}>XXtP8 zw(Q(l@S2Y+9%rvj|2g%3oHac?mHArk+S!>bDLl0*H`d1+Z+@if{J-)_F7n1#V6Gc5 z*C8+yqfKX)05v24Zb0GFDM3*wxyYVdOjyOZ@lZQ(>Og0izWh*OfrQ%;9vVtWXk2J) zco;4m5}N9(NalW`xd?gi3nf4o>Oc z-z1;$evcKcykThM`W1!D`!M!Tda79N;9Ps#zF|9%DaEr>-sk@-FTg|XdfWsO(FG!0 zGz3-gpD?!&(F@!bu))Bz70Vir4x9SyPXlg!aiPT=A8SFLKGJ44Uxe-=@E`)u7nu%- zKrC7Z5vBNw<2ym6@0_bDT02;-*Tpz0 zoCz9DUQxbQy~Np)*|4$46)0_OI=U7y;AJJnE0?V(${*}#?-?(un(agho-HRk6-BNo zH4{ay;m(%MVV81DR(lCdc){4t3YhA;3O=g?e2gSsIYQm5fP??<0;T( z7P>7sK(oPm#^A?jn0g8obX*3-N|x)Ig77RY4H=?=7+esp{D{+zv-Dij&jwRHQ|rMl z{r`1p`2XpKkvQxBbi@C)b3nTT?zEx7s!B>G#|M`UE$e8j9H<&7DzN8e+AQXT_~hq6J2#MIjlw!r^H{XZXEp0P985 z%;u-|hR0O358KOo^MbYdl93$^-!*B}$+gbB{@QF^zOJBaRoV2$sM5xMd)rj5Mi=9G zH$lhK`kSpaG$cMgVoI3T-7?;nj0Lx zb~LS_(B$l!anJeyq6h_wT0j55ia|6YU!??y1=URGSS1&v zfEnM|N-o~&s!rs=fdRSoqZ_Vlnmo~;7!)#c5D1 zzj}UVSKg+EW!9YZ^=(`8=6@fW5b9`m#8hp*WuW=g&gRtGv31)@(SMHT#(j)ukggM0 zo|ws4)0qT_aMEJL2C7ojTZ^YRt;awJI57!@Sts<672^T~iX;;VxtAa2dp6CW&~dGx za$2oc?p0uwH+#FiT7oofD)H-iQWARI4Btpy-HpaA5H`|QDd+IJa7_UJF$ zRr*!GFbkf>w}}a?>vDkz5UnCEXKG6961^HFC17j_1}YTFMs#j57UHjcfu7CGHrNcw zqRomH#Y`$G83n0gf|VzlSp>HB8B69eVRnrO^C~m#!cXsX4mMjW^ zc6t8d>@JL>w#Lb|n?#`|gI^9#D{z7Vo>Qs2D1hoQ-+Dfw1rM#HNhdr|GN3_u7qaD| z&Js8vJUkp3;>d_g9_SY+l32bcy9f{%rld2=71%+F9njOGI0?h>}0Aa*Eqo}Xbz zE|MbARrED&;m^|J=qpeoNq47UrGlIx&!UT>AV>ib7we`(e$KZb0TS#cA2-%t@u>j& zG3R-d);OOJs+c;|-L|nlTIbM(7L3<4Zi20s&z!%z{ot4*Z*X^0#j2*%jJEZ)xPwHD z-bQJsEcloS(5Eia=57WjQ|04i22h<&JEW&tZAlYKd_c>DGQq%$LI+<=N(2KG)B}np z9vqZ~Y-y4h2SIWPQD(u!FT*eflf@(+tf-96V#)x#%?s%R@JiV`wB+fKrbQ0tNS2?& zIq&%=t$p|mpZ+_3r_)bKy+HF!xP+UEdUy;7 z*iE0Sf4#uy{P*>*zxYiF2!ZQ=%$)U}hv=_rS@>h#uON=G@j(zkywvkOAwQK++`qtF z2a0UD7J~_&8<8j9BWM;=u@Rx+N@bBnEei>Pw~puuypLv$_u;KdS?r#7HGkOT;-=|> zX-|ujy;@yR!*2J>r!)lJ5lR}}+Q0xjn*dQgKezwCrHw{l`uwy}?r#dF3s1xX)fV*8 z?eut%ck`Y_4(V?1Ob|V>UNA{LjeSME9!w?sNq+Uxz7F12d1Dk{@x2(yGc zTOEnoFmK%ZdFSvfiFe9=EFp&XgB%m4}6B$9Si@|n3UusdzLy=RqDON^U#XRx6Ga=%>77BcBxLB^DG}K}0 zS+=dZa=gMCENONJIJ(w1m?{ztv97q1(V7hXoLZ%g&F?7eIJ%+Tu*vasu9Y_yqHrO# zdT9AthbO&a*JKF|)Z}UOl;(G@bg*A%j1F~{TFO@)Zt^UXihi%?68pm6~Lnh36>xNSvaK12PZ5>H={8w|5b6 z`@gx%e|G}~V;hnZQ!R=1B)d>Vrc6_!9`SOMNreXz;9(VDa|)KS5-AYT0yz@jfv1c) zRDzaLf;Y`M<7!#ckQO5A@&i(f+n4TccCL2OH#Oe$HS`9Jchx5PD^Gn!U&de4du_{Z zT3Hd|&}y^^C1YI2Si#VieFuwa4j%rnu`eIbhv9fagVQq&2S}1Tz|fSZZ+^1h`?7t@ zrkQT!F8IRlfM=hB9G2n9!)rubI)G}_d8sMjvam)BIY66+DHaf(5~d3rY$#)CNKpCk zG}zIR#3JZdwB){NF zYLw4i_^j8OvMV~5m6i^cB+ACJ_N8UcHb;B_SI2t(6d~vn8P$1~8h3GAWPC+!V`_0v zVWJdO(Y2zyY@oyxAmP!bYLzjo(dp=~bEU;<;sCxQvl<+9k1->HvvTk#C4yAfc9)efEI1|O^5rU)(^U#CeK&=jP+wPJ?s*+7qQo+*VzEC_$ z)C>Fu+!yT{5amdhkpUwt2&`Ky{=^T|%_1F8s2iXgp>}+9UePqQNs9EIJ`?Dk+Sig) zWirGS##gNAas@o_p8C&A0_&C^Y)oyn2AgZmrL#lj0Y*Ieo1ed{0Z)kw(B`46EVFHO znKbM=-MFAH1KXZ9=FEe892hshS{*-J95N}Yn@mO&`}j}0-RUl3P8)cJ27f#6==R$wUUa3uxV z^=Xx36-FuW|L{13B1)$yMmjexP~#XA0rbRS7Z5iOoS6RuIh zLohUOTKr>y*p|QM3I2-BmKmiK`z*RE=qFV8ITsHqwfU9-VNvpSvl<7Sw{~v4b0pG@TWe?-c z3>pFU0(KGvK#%|lkN^m<69jwjy>}H-g_0;zU9!4W+-uw&J96UKa_l&+Nu08&&Oga! zvq?6^n`Ad}inF#i*+|6bJMRrxWJ$I+`|)SW1TdI+@4j}+x#!*>g`UWOtCr^pPr&X* zTr3Xi0_6{dt~F0Bfii5&fMIK7=uVx*W|>6z0P}zm2T2K*G+{d6GsT24 zq!C$$IW60eod`7%WPotv(_Bk%$F6#7JdBzN5E2F54tN?}WZp0C!pyy+#t@CxQ8&E( zrrM!%{f6KW-XR2sB(xnH+VE;iT<5py2JT+$O$35DII(F_Xy%6QcxlM%JF+;_kX5(m z;hqi>;%$H8SSQE%Dzj>9FMpqATI%a>-t47)BIIr19Z)#@2~i2~*I<{X!wxYA$etsj zBzk8h^)i^8{J(JJxBW{wA@U62QV{v-8zFzD_gEHw#=j;1wR8`OSAcE~JMaKRVgnS> z@L4DgW{-#a=D)ki<-%u(M;`R!;J+_xa5CT?-xdCa|C9Vp==l_P0y7xkH%1|WTy|U# zE(=eK!kz-+h=A+RsfcmHoyGqt*wZ{&SkPaZ!sW@whK7&C%fIUxC^s6*2l59e$+VQ$ zz&#=_<>Tc~BM!pi#8RjdaeQMM>*0#U29Ot+K+Ms)6oJo(23T%)RGL8-ol5jL1l+=_ z{2@gYJzHfgN(&QS#si;;qpl}lFmj~j<3TRCBDvmCYDn`KL*?=`M_F2$+Zb9TD5KMK zu~})cKmj_SoyTREGIeHQJShRwIwCxl%z&y>Z2l4Eiuv7wCE^3j$z0zMcl>t z(6TthW;B4_BmN(!;bgT9&*or1($H(@>4m(e1TSJ~xS%KSo{Y5gJ#R8oF@S%MLfN4> z!sWW+pyhn2jg`nuwOaH=NkJ*)M!m}rCRezsTMS%`qo~GWad2F0Xl_KD&g@CGHF-Tc z+#Wpt{66^?p|>MW445}oE|b@m4_|_exEuu zr!2!<Kz`0B}p?(S`p3j)M-QzAFzv`lb(?7nv~<6bCbrdAI`;IgkWQUD@!0lNLT9 z-4+|0kr*uS@uqBDY-Vyuu{<(C8y6D>M)Qy;O=xUn=ucxUdLRt5bUI5)B%KR7gE~A$ ztBDEI5KRO7s@v`s>@q1U_V{K_Cc-6Q@ zf)n&TAGik~7vjm9A9>|hi1;glIQH^ea>bPa%mtAw_~=qt`rD6^}Z;zEo=tq!HaT2gD! z2;ZLIHL(_hIV)OD>_nSZ;>`4zqU2!9z*t@Wl<-^s7v+Cu^8xtJ)iEa&GqN(|NUs;|Lc(Fx>k_Et;+yqIv2MM>%{rB9;1K@KXgWfbuwli};oU1-YBx_dYgD$*l&iu+k1 z;V!?~!9VnKRT?G3bPIp0rv5^HmB);iQPwTWxsTb1Og9#%r@X#76p7AJ*g`Hm^4Zzu zfb4K*-PPJX94FUP>iHHiL`mNL&i{qo>~neh{~>-ea^*5Q`4`BG@zOv#87x;KlTCUi zXPQm~UYg(fTMM}#mHgTxAHDQ26%k|uV_sNbvR2~!q_V-W2jhJV5)t}f0zl{(&sCw* zbwuYClo-bHNEsQ6`8n0{9skMQuJq5@c&BRlO?cCO>*fh=PUk`so^b-tVEj{PAHznh zZ)BLDL>3?B0-X>1Ip@26)4NE7D+|mBdJk-S!hN_0w0UnDs4if^QL7{{tJbx!GCZ8# zjZkO>#X~rCdH9QP|L(t;-=$hEQE+#Py`XC0rl`_R7Qp<6Oa7sc+RM~vY%fJ79ML+%fm2=&S*Zt0+Cl9sCmmB2G z2cH_Ie=GPG6wQa8lw|)B`tn8eC53wHldzqINj?Ka8?mo!gBliCSLlaM7akoWR{{c! zR>L5H#()8#37%43Wu%iE9C>iDC8E#O6WM$Gb942s`i-}B#fSFg^@K#$9vJ?Ni~LyK zarp6mB8uG1OScRt#ZmIGdi3_skJ5KKAG@hn&HseW32e8*Ah25{GJ`i2@32gW92OoS z$U>Etcw$y~3XXwzT0>%;r$?!Xih)mqdgM(u&J{4c`6z0E(i9-BedxB?n#gE14|0+% z^>v3f_4u;2(V^KBU2>ulcd1Bi(||Q3Dmb@xWcS&Qj{UvvcuiD9_2yd!NrO_{(d;;T z;Y-uI3lAR*WVReH+ui@_XYX>wy4|Gsq32%j-&K3ZnLUHZ_CIj*t-f8;U%z;Vo6tju z0|(RF{3ZCs>_E~W7F3cQ#mf{_XQO$xf?%bnf7VwgvRW~1k)HtI9o3jB%Jbd$nms!s zU8kZmn3u?vC54R=Wiq8=ouk3yLD7n2C>&6w0?g}zlK-DucrcGgrX_~!!-Vj(2uEQ8 zCr|5|oG+={R0sT>n%86$wM_1yA=)S|)ivcucDqAGYx^K4o993oi+Ne9{sy0@{YeNT)KRMu>8fc84%v-|JJ{a1v^G-wEk(ugX zZF22gMdMA=RUv0Xd;^=^t+#{aG0Z%0y!pIJ{#8;qeX4o)h3tshiG4K#cWo+)vifZP zZ*p%af)#}OMe98awf;^nt8GWUZ%20yDcf+gYWe5+?RoJz{fFB+j`ZhpAYPZfCXNZ8 zX1TjSFsczM#8F2T7fckWp`*1v{7}SQ$BS`)hNv zk4%|Em0_(5_YLrw%|*%I3rPl%(AZPQ1|n42w9X?PqtBilkB}!-jFcu3uGOwLBmKeF zm~Sa}m=dB?y0H@%hAq>t-qPKB>#Gx%zDE!Dg$GAEeC__Ao+ppCHXpvwZ)tkqP`6T5 zf8;4B9rUc2LjQ}f25V*I-cmT6=~)rbp^$<@nSg1Ms-WP3ZQ`W-J15lul#~WNR|$&R zEIsl;Y$_$IxAlQ+s{q78a6+@9#bTs9yj7a4E$ZT~jqa?r!bFvJ;?zTRH8;ojSQ}s-|P9IXxsf zw~|72A%}k!7ljA0_q(VT6(2{_4(UNjcbp6c|FU!QV1-txb5u387zPcE#c2vfdO?-Rl;U-p6!JuSVcbyWKu@zLL8Yl0 z-R|Mk%U@HC&Pa?_$ExEkCE3;{Z(d|txGmq8o|csuu87sd8FR`z z-EFrYU-EF;JhXot+#bsq$3&K`#~gUrCa^Nr294)40}DlBMv)FLW`bcWpmx_PRRl2@ z`Zn*c8QxnNu6@n(nns;B-PU>g?#{^Vh=f}Cvf_!_jM{~J+b_Q&)KnhZ;4Pay*X-Xa z#j1GO=P{>D*u$hcLv50No`l6lX+vq63)`~T=EXoBxd=~ruld|Tr`gKq(9_L2vo0H+ zA?WEVdZrWwfu6ZOo*|b)AuQs-|5j@*M7DNI>$bY|U?mC?nTuLBu$QJ_wc0P|o{Lgx z6p6)SwKY42s$Rk+XVvM?)iO(3ZI;C?AgCCknil7-+z!24ghF(<&XSX>{&6ApN{ZaNv8<->Dbn_ zvcn((kjnHiy+_(V*8C5M%sPmz^sG9rsNa*(V&=@vlrSPqeOUayP)L@)QP^FWtdZN5 z>a?m2poyT*zVhQMf9Jm;e+OkZ7QLFpIOKtZvWH9ILmfLt=)sDSz-G<@h|p{T7`?TR zF%VaOOjAPEKECGLp;vu;&9|ws_95Snxa#9;zAbr`=>d4%mec6t+Rd-|HZ423_VG0> zr%{fzk3aBjFYIV2VsPM0td|FkNJ>9mLQa7m|Im%%)A*k z2F>M{+??dByCyqM^}0MbA=?-nhq9ybA+{2;PI*f3zh2DE=@sFrc~<&CaJ>A_B&Tu6 zvP=@o^V8ve@zqOE#`8!HNqHb zvbpui=7casw61pU?hV~1rmLeua;gT4`VX`k<0an@YNY*5xDS5v1Q{5l5sQ<-R}Kmt zWKJMGlBQh+Rv`5iVDiIci%yRYQz}ut$$)S%bZ2SgB<>dMlLlm_-S({`3O+j59-kLa z;$87@w+O16MDAkVv(GE}-yv~LYiusJa==+Rk)uf*EfWszeMYPYd2_N9-!EBIp()*XtCFWZkULlEa)vtCYd!OvpcA6 zwnaQ9grQGP>gUv_f*1j61YF=CQz=_+6x?~Zm^6& z`=n$Yr9Ag+*NJ|M(ydNw+*v>UB&EO#vrgU7XKpG=QY#EOg~|H7{t#8Hy(D?!@okPU zW#rKLSA^z*sWY9mOFcOqC!ZO#j6b;4sS8TXuE;fd-Pz%Wr2bN~BQ-)5H+bUNSlw_IcpyfA;-Oe5wl!ml1kNlNADJerC5#P*9PO3VKF0S66y>^Lo^+TB zPm0eJHd)jZYj|cIx!3TS7iT&B<#$42nvRc4#9qO1t;a`39zWO}4js(AVex2%b?S|K zSJ=HKU%91+^S{~onX?kLSH}~_I$Do>iuv0}FzPsTpxrup_OH!xDb_4$0dxb$Sioh& z;>@i5dV0uQHN7#l8^p<@DwVOyom`yEQ-lOEpFt4NRJ(X}5D0v5xiAhe| zY$^9g4`fGVpTs%$KF+xmCOP=v2&5K}AD)Uo;pEQLndEeXS=El+oY@%@u>#hOBqK{f zn!K@wiAR^3!{dVtzL=mmt*xSO%aQuNg-TE&0(Dj6-9K4MF_mXX(&;ne@6J>lU7BgK zR?pwo#Jz~eU>qM1_28^3L3FB&YIAW|^`u@)pyLKywpLkVc2+9pAE-VlWCRKvjY2a7 z1+|EyiIMUsrKfXl=}>9o{pXgfHp}+IXR5&6I@aV= z@&o#Ew}Inb{X3U-W=*~E;0Cprhw4M4=b!0Ko7%diD@V@9r`tdXN@aZq?4Ux(+D!dB z>CuFStLiBZf6Wxab;uBki;I)wO?#0JQBz+g^HWfq3>+1(h;@KhjQ`6<_RKxi2PE@~$py2Oog_}-z$sfgtf~5u2sZ|NseNp=h>uDD4tfjHk0yL7^79ffsvTaHQf*)4qdy{Z3 zxh%!7R#uyl8J7{CsiJD00=$^0nFNk1p^Qg!qnVLUkt}T9&{8xsRAOefJ_lRY9pNFZ zwcFwq!9q}4nJc%YBs(PvfjHuD+T}FoGL!U(=b|`S8vnt zQO?R9cWJ9FLaU4$?hp!2i@&-*b$DjF-9@Z*L*v8g$Wfyv3%+?=L~nTd?s zi1F6*;?Hie&+nY;a#^Z+ZP`85R!{%-opTxY5c5rJJ|2P`jv~9!0h|7FFE|K?G;k^P zHWhLJl8?sECctyR*ju2LtnD^X#;8Jcz3ZT!Ty-5)eXe)i)%UyZC0E@F$_z3+bh=E$ zv`rCe>ZDUJ2pkK9MKaZNh2)o+yKJ>kNIl*EbP_ra(@Z#O8_cnXH|%_1eB@|Ld~m)y zUmI4oy|d@^bVX?H)Kj}Wp@PQMve8@6k)Mj|OKd$^{)fVB8}1z_#RH?WsvPdFa#V-; zUI>ay{ZIcRi`5N#AM7GkocL1x=~*8s-gvH+s1;R*7nhOsh z2gdK*P^cgs#*X&-0zI)e4ujAN`xLy{*}&0RWCy(=DJr-Rz!RrNTy7*3y7&mx8?7$1M~e4v%A37g6=U*b##o}lb-D4>!VTIQUnl(7 z++G0yRakJkDwvk)O7%bCzn|O1)u+~$nn{Q%D<~A^tgk&&EMGW4_Y!bIVs8FB)@Yin zo-+J}F;WS5pA|BtVjI(vm}lDxd@y)aS3GbTv6)ffaT%FmYQ|OA zt!GAe9k!^cc_#eyT#Q<$iZ|ysjF#lp+hh4CS7na}6daKnrLME;gi_e^FR^@tKel`< zR-qMw3|^O`r6emQTFE(`cBLYSLs%K%6|)4@CRhd zz^{kd!Tcgvr-YxNW&l$iW0(t8N43W2tawA1QUR?oQ1BBTR?KO7ve4sW#j-|_1kf$V zma1Et%O`8HW7Hw_+ivSoHtZiR3sLi-27v3#jdit#!;W{w&nS`TyT|{K!IfUoKeNr# zap#UYg;U|1K2l>F8)z#rhQ+6b`BPZ+O2TUU9)Qj5k?oP}Z5sj;I1?yA6fmMF4U4KB zs1PeKfCe+blc;}{8Q96x0RP{7Ayp=&qT+ELbGVMy3sck1uk*Un8O-!MT6T-_6RiOh zg_yYEV^7a??(25Na2hFl@m$B$9YdLN7fEe8Fwl4iHEptjLpZzA|NXEaR_La2_?}%| ziR8863kMreIqd9hzMt0Kb#DJK;uejEE)2HaF<*%y5Iv|I2BwXnLRRC3kc#bh(E>f( z73$j`#du}}Y8WC&p+p^d>eQ0=ArD0!18fgPtI*}IgPNBK3bwpV7b+NL$TIYq;TC<6 z0^WW}=f=>|=t~Ht2XmGxJ&|~y4Rtz_;48Mj8$?>RMHfx>JjsxvZ_PKf`xsS2K^nf7QI@@abbq zg9RuC>*?Eh;K;&6D!0e)^H=iK(@Xg|3mfae>Oj}A0sU)1|6=eLkk~RHuz@R8(b+60 zK^#m^!5GSPz{7Cnc^!`khR&c%qiFsNRFi?n!y1X|Oz0m|cBB9kJgKYw`T_a&UfZ?< zJ)2w#ZLqudQ1^>VV&0SN!m~ay9)5r|oRHQ2kJE*4_5~LxyfCM2r8sSsW$T3f4r>6}ewa$0B zpCTqF?k{#0i;D;zqAtv(R`D@1B#jkjq;MYhrn$1PN@WD7GUSHPv0~vqJSC9y#P$}N z0GozELjN%V^{d&hc+_h0t8ilZ{Y|8>>-?xCB(&$?Bfa7=M2VLd7f4alx$P||_|v|p z4qd;GE10>ZxBr&ud=7(RL!q^!{#|{t_2={1w z6KjNmR#=1+YXp392;_mT1apVd;Gp-^{KOwl=x#W}kx;)T=pl?#4vw;q4wbI)I>A>Y4roWC$HisElNiM$ef@s%GyUT@1U zBHE8^z(^HvX0-Gy^Z%pB9+HJ<%TTG4E!=1%4TnqhpMw<8T?}XyLLivP;8DT!200qS zyFVY=pR>PLj4396{cZjaH!tKYOp`Abi~36i-2e0Eu-~`vZx{EJzni<@xA@JFLjiDa zXW>urQSPb~qJ-8BCkpJ`HEt0~NO)E8ZMMlWw!&lq7I1l4p3{yjnwY4tP>ovVBR;hP zwlLj00{&NEei*$rwivb&nbt*Nq72(jY0VIp8Etv^1Q>gqn{H|7xcA^tj3;{f{L@3d zk1ZC3Y0F0zyuOW9iQ4cjpLlh6KA)@ z4s@7v`VO@X-o7E9DnG#B< zy${w2$Rbcbjp|Pj1~oWipwqK)zz~E93WVl77y!%;ColA)%HE%r?fCbw1Bhs?`lj{Cfi#o+*t+$Mo{DmPs4Va|Jd`--!>$GNxye~|B>BO25t}fQgY=F zayRDJ^*CG60^lepWGtC9GR{`kCyBEayS*nSh92@DapeY6xZRb@ze{T$oA>FgG0_pm zNcV7SWn#ZL?ImBy=D&Ek-8s>kLsaryc^r;%w` z_t^d>ZKQNFjU;XFl7sK%zK4HuE-!CgUg;j)O>s;7KzoPmUcie`dXC7T=#U^jx_E?V`2&QrO7?dIbT|J1{VC99v5Sr$1Ys zp`j_sNr|Beq479cQdM+P2Tp!^kV&ULPFK2ciRRm#i?uPq!Brd2bc&b!Ir|sBUBA>{ ztks6(Pt=k(axUlaQE1qi=GJqY&@gtc@SefFv|$Cj9|$8lR>&>D`S!a&`zU$_`#5VI zR#>2Mn6x-oLPJ;D#n$<%ywEPav{RZ%87aEzu*=(b)lr8Aeb_-qWSg*;H()RK(6}eg zcSd3WRT=x365BZdA4-mlVfSG+Id*Z(r2**6$!sn`?L{F}s`=8n6p7uLmdHifCn>LH zl>?9ZXQ`KhA`%|sQX2OUHXPd6f%=SL{+}wj47iU%GePn=bSG3>SM1QSPtSDj?Q+EM zLFvKvD%5`Ln7(Z=LqT3|yNhYJy*rMa^bWWi3XUA!JqX3OV*ZY{p-&yECxsJ-&fSJm zx+wEFoKKn#Uw}uGlNn*#(fWxdS%qvyvI>xdik=CqXOOu~N!UCHbK z4F!RPhwIXr9fEhU9Sb6W%xf3Wsw|MyAR9WH3-opo-|ArTbrs<0#2PtVbcjb>*H#3-* zwEiNP_F>;qo*F3DM37Nz7jvCL_X%hiG8qEII$RxL4G%}|6KJUPQbdQI1bXl?;;_bh zAw2KeB<6~PW#n^QQBPh(Q0U;Pr^m@%%l>MrvPc%-LXu}5)+^OK%6QCc^opjf;6Jxp zM`OgRj1*LB;clLKU^**U5k7F{`HdSMn9KmABM8%Xc+Xt}xzl}BU>K^O+Fd;TiQT>W z=ARtuf9OCr%9f{gof;f^1ndb4t)cfM|911y&yHFqUO3&}dFJ_1i@K!!!o#=hYztFI zXH<6=;Zm&^p5XzSM9pL%hLJq{-*kUkMvkN?pvUNdR{h)fBwXL;6}tCZd}JZ zRyxnAIfR{t*70`cUR}pqv96AHASAJ-X9sGV3TFN2t7NhK$ha$5Z7FTB2|3Nq7?q}R z%ke7lJ8k4x;rvLYR%33QcA}8?Xu+1ja;-Wvy`Zw*AijWjZBqHB7H3nTC6w3LD|(y_ zbG1g~%!=70v7oQ4q}vlu+$6!>U7B5)n;Hq7lCWCDmFVA97*TXa(zSpQ#XN*<0G&W6 z@kd`QdWAQzT26(S-@g&x5bXGF2#$HoZ-lydpo}To5=0l<06Hd|%FObBSqNPqCOQh& zhS1Y8N)4NX`c0>{>P7fL<1NXJL z0ms0MnCT_|v0U({-Q6g$O71HY8%bs{7v}#9`?YdmqK3RLYRP-V|F-`Zv@Nn7$kX>B zc2zC=;tK|*)~~uyK0>=sp<5`^?o$OCIH&Pt_)$Lgw_p=6$IHk50v-eRENIKCDhfPK zhb=2MCL%moBdaFWYlehWPew8%7{$=_4G9AbiLsL7yL&@|qH-#m+fCl1J9{FEW5*8N z)s#Ip(Cm&4Qs*@dI#yW5I0gSFQ3p8W1z^{K|@rLOwP(nQSL!m)Z+V_qt- zIT!=VA7#TFW%ZcX*%PrhwkP=iE_m5hPzOKyzOIb*HCI6yGhO}|%d5s%u z3@UwbpBMhkppA&Nd|lwh2KT|kdq#@+JiY+F%aUJ% zKti#!A)tn7xExE@6fnPddKi;GbFl?4IUe(0F~9bd}pmM&s}@Lo4^7En)lB+6EXfHrWmcC+j_;@nXS6 zu~fEt%7U014r>CALikdte(Rcj0%}ws64d*-JkfYgq{MpSl?wSp^bjF9cL!zqp54|w_ ziQTOcd{%Ho&Ax#bhVS3q5{|k}uiQSOMqP`hpsBmRFl3o}`Sww@xPzQkPu=~}P{$`v z3-VwqvMVt4;Kc7h`*xKgX+EGV5o`N~Y^FseOn^&iGHRu@5Jy zeaQB$53vs;Z)6|-<-Mx$;;0}^VehUg@%yhhTF2il8n4gQ1ZlHd3dys%ujFzM@`XbS zWj+`!JX&e z8v1};c6db*AlST!5+M|Y9H`iBG(ZM4>lk(SG3x+|K!D08nbuOZ;VvKd3#p)|rYAZG z&OolST2x{vM|E#ShXQBRtgzUO(Tp=fL0z75Cqte3I!8L zGR?a(L!2LZWh%|W(ohpJCfm$>$%uQF%F$tfFr*MaaQy6W#+Czw6Ez%HqH2QjvwtF5 zqpPxaOGV{yX{tt{QU;|ts(ZKke8Z)Btz7k94<_JOl`4fUx233Xw5cRJS&gy+^kpG? znWE;hiPF7i_m)maUeET$g#hXPqaF?eb>1<@n%hecPO9S)h|9=x@V@2Y6|2Hv6Or(IKOqO zuxVFICMUj8I9!nqMn+EW9cObITsT5B&OQ%~dvl04#G(+94we8PfFf9ADu`toVKI6h zDrMs?r$>s4X#8Kr%t$;w1Wts^xmSkXro2Y&4tsIdj9wU&A}Ht=HJ-Ltj0Y+IKL0dKJ( zd+G3jsdC;el#cA$wb2MvlEVL2KC5QPl`~MAjeI?Ld1T<#DP*xyM3kUSs#P3~lHwdB zgl%abGfGN(LKW*(f9Y%FiRRqqA9?#+q3R%K>n5-GmnpG-5?c^CH1H#LPq|gCR+*~u zxJ4}4Vm`ljYeDhW9yibV{I8=cw58d#Lk?SiotiWb# zzgu;0n%h9;J-Zb_t(G9`ZX;+%IrNUkCF%FBV(V3@G;{+LkE8(Lk(Uh zHbC7Fk)-!I?xBnMFN^mUdy2(dR&=qii;t3F3@v*`CD!rp;nypcHNOzdR9fjck4D`r zSV}Rl0jZ@1xDPgN>}uC}pE)=~akpYwF-<_oFso>|7t?nQd4|&on(wMl6MrkPC?yAH zr11M^RB`F9>Rykt)*dTFIV-wc1r7FSxk~YT?z2b}3r;Jt+v*FmQlpj6=RPA3((38! zBKjI}jm!S5sfodAtJ&9;W$o};vg?N@$IR5ENpA1yuC$oTI(mAH*S==`kAaVy)>kZ| zu@OlCQqQUNyRPTBxJXu%@uA&YJ$cbRhU8%SN2Kt^4pm}ier> zDfnT*F%P&&xVhABYbvoDVwJm`^I$`eN197*RnxUr%`P0QBewC;?sBuKyvv^5=`&|m z_KuEba*y~&QrkLOOVbU7O`VIE$af6<%i>Pxih+nEDb+v~Fvb4c% zyUsU?yI=XL@}H{QRd8r+7$ddi`(|o`gN==IC0MwVoV{yrbIaZ?8!8;Q$!+2m|NlVy zPOqJ*^v%?mB)u{Zex_%E(W#LAvosM4fYG7YKj@PX3?MqN;?+d1lmVop(X7Qp5Pm>m zL8@D^a!9GF6<^aoc!Olz!21t=7Y~OADx$(y?ky{2F_82abC?#pMZF*X6aRYSd&9%p^I?6#FL0a`mq z4P75GAh`0jX=uDe#!-z3;V3#1Y!Ft|B6v<|T0B$x3uOP$cbNqcQC>zpdMuIxu`-F0 z)l{aHl(|*m@c|tf!iLVolIxTvenGrRrBcgvjZ^1qFF9zhiDh3(T#*{PoT&OU42{BUVz)!@`dJCsKJa97|_6(S*A4Xj_-aiOSQ z3+IXgXDkk>G3b=obpvq}di21P6hO_k_W|>O)cx;#r8lSdrJv^g z7-B#~>^@>42RsW7v5eeSL}FKjzy$H^@)7<3g76ORKT5%_i*`}}pcVUmG%^_&ixq7a zMy{6XZGon-xeUiY{6=UQT>fk@FdS>3nRV?lJC!Rf`|Puo&dTS0kpCU=hgHs(opZ!X z>WG7T%>@f&OMPhhil~^l3jHUzT>^Lc8<5$($Iqi}PPA<)RpCzVfeYhz)l_@CH2Z44`_Zu5J$yT5NDn_WP^KegXZl1{x(NsFh)k0=_ z<=MsD#Y2@dbvA94!yBC6yVSh!Q(igdf9MN}DDF>u$;6>5L}-o`&O&?i*Ksd$j*huf z`cCbk@nVkqirarjQVQA)tyhSEOiePYtk_#%LA#R>Z{uhJGCg-_Rv5T5Dfa{77T|Yf z7(1EFoQ|)UKwnBb5rkkdHc7xm=vY(NqCv_WrF}BfR4XNFTOe&2)b75iW9_CNaz7Op zlUsLG>ogfoQ&5O|q^3eS=o;cGYPWag2WRj_{dv{92s%L_4^kwg!7CZX?*J~ z-*x%b7&Iie!Rteq`2 z$;6NH68;kIEB+F`cJn?r9it?luhfyk(Q)I8dN(=5y+B3W84`j%=Aw_a7_Us3joK_( zH1Ug$6^$%muqM$*(g#a${b*4Sj2V>-bJ=J~XBt$5)sb=o?}M#rWvDQAZmH{X+P|-p zpWn*4#n+=6`m91wrroIG6RXN|grS@fkcIY_m^79gLuhS{_>;k$S8}*F#ZCK>saHq- z3u9I>bD-p{x11Y$ig+UTzsrU4oTqEn^VVCv4;K>upM^q?*rpDmV^<=c5ZaZSfWK;! zwRxLcV6N+k9E=He8^_mx4^}ZRLwz}D{eV{h@H>GC$uuBn6R5O8k17QDzyaUXP+wD3 zly6E4(E^B8OKR8RN5E`*0*Voh906g4nMqyWO36dPAfXJ12Fj2Co0&0yNSi)gBYs{< zDmot61uU9x1YSRiMbnh@Y*{=|+-j^Twki=}%}Ik z^S-{ai8^O$2+8Nqt_-zgU^|fwUXaW&8t-m$*LQ0RS^L3cDlca*qq#w7hQ1s|a1lN^X^9JRFjDQi54zz|X*{|~uB0%oL} z65_2ElRe#@ni6kJFj|c&DI~Sd4J>#F^$k-8Fk!x6tWc@OLH$Bsi5@QCh@rDm&S9D| zh|3y({7@H-L&Y{77k@YQ$pc*x%RkcUnvNqH^~OCbd4_9$a$%jPKGWOr>6?3(gWwP9 z?R@GqILTz-Et8J{Qxqjbyarnf&FSKKY%Z{(X=h=oFw;F8{CyPuX~M=&k7u@r5Cg9x z-_m4pp>f`p@nVfizvbV(DGj;+A)CLIDQM1pnz*(C;Le${n(u z-q5yU%;s7swKXWYN}Z@Quib<;1SUUautDoqmcT03N-xJ0xZ!oF>#u`bJSIIl79?Bi zpj8|W9mzdT5!T?INT=!AEH=Ox^e`sf|+P$sYMGOKwDJxFRGu z)a-Sdf_u{nxG~$|n@`VG*6uieW{>I5>tApQn+_hItM<+uIyi6oOTwl@$G70c;Y0H# zae&`{InvzU=u!&smSmMTB>yMx$LtBn8FlB^%bDXLXL6OCua+(wdkOTkUVf1CjjsDJ zIZLb(RJv01flA!D>fZ6J!q~1WXCL+U)D0JxHd#aXV1-H*XUeM`DK5cFE?D7~YvD*K z%taQH4Gtc)9JPj%igI&XO0)Gb3ht9P7PBjResM>?r*LHV;#_*R^rC2(zDOLJ-O^V8 z=J?r3qdjqG^OnARSI4H!6Grj)b)_tT<87PJ3C=;v1xc}izm+C0f>zkNrvY?C%w~fO z$|yfALmZKtfw8cH6GSG!APzzbT#@+U|2N-~Kr%E@F=zd=cu>qJ6})oGjh;roM`LPo z5G}LTt^Wp~OxHAz!DMJuNrEP>WGKMMgR}OU)8%?Bb=)tUPM7%4E|-f_edrnU;l$H& z4RQY6fd%=E8y+$rMmjCvjA_Lg^Gh~XdRc+&t<|vt%nxIwjbCw?k!D}-+;fNEh?|g7 z?2%>VY?>)&m3;Vfr0vpn(nfAwJMuo7C!0sU@=N{ z>vwc>aupY9EV0?y70OA4nhQ6V=NwaprRHQ9GwjJGmoZi?cYs1IuO>_H$TVi=>c!a< zy*fHKOp~82e_C#17?gJtnTq)Y;kMwJ3g)#U)vCGUAEB?M;e^ zH@EpL2^NPnmHR`IH*4CfAvrXMi5JiIscMakY#l&6OeFsgD(c=0B~*BP634dx6Eyr86O?!@9Jo7 z^p<+ux%Lc;Gz;M8kRZ6`m842)X|v#HU=m0~=+cCsq;}Lijl97W07eH>;HkFJY$3>_ zb#^SY0!fjtM zS!2=Ut4UgO)hCo;`n+sQmMb+q-;$`3J2{1^urb@<&bDT|4PtSsNgb6NqA9TnwTi~= zrz*rZD$nh#Pt9+#Wi=M08B1FG1}&tt;q;bjrCaG8T__RX&^I>Kc+z~+d-6%5_?vaF zN(*+4Rj5b=9cO!HJV|qvr$oeOwtF)%&RHqk|0I=JCZ;{z$*}Jlpp*Ya@fJ?DO4*|? zM8mwJx%L6w3|a&Spdox-aCD4mf>c;f@Xw+2lte-xoobW?2nyOqUCa(8P=M0wkX(D? zyRyT`8>LdIDpi#wMKsKkK{q?N+G}G^olDookRB?_ox3u{7U|8{;^}? z8~_8N zT?l~oSmz{H@``%*wq}N?HNnBTbz^((>I1YVRpsL1DtGp`o!r_Bj?a)FjT#jiJ1pWO zq(Rj%f9rksS2j01djFYCrOih^)z^5(&YHsUBj@j^Xf3+sR%rNAJo-hn*94n4{Uh6( z!Z%t$S+Lq(M(4wDA8Qc{>Qr)a(RoF)x3uX(l@Z;?KewgxV244Kr%b5WT<6;{)>>@Q zs6s+34^7xPWqY)S*;I4$x z7=UN0hq4(^g%RoF1c@!tks-kY;CTusc*4HDdlZka#pT2(OBAHkB>0<97!ZTBgc}&WzqJ0MUKKKicQF4 zp!LfI2&M*o*%(gX6r|oTosxVdZZs}4UH+@nx9p8)a`nrrxo@%WgnB7GEc-?z`vwXr zIF(#VTDNXAR$iTS=)`%MO8htRtBP{@Gl&G4VXe2wCS<#0r(_S13sN1MiB!x5NP=uI z>7w;Yl)6(X8m@Uh!6vOg`k*-C8~IWX%sY(NVLf$Bv>0V zAq$gXdPPtM0p|ILX)vcG8A9d3!Mb2Nz_e)R^va`zZR?(;+P3at+HL=+hKLI{ zMx z*`*QCB!IolvUzWkJ~akdL33JCEXwwUW36ZipKeM_!1hf2WHzjeL`0hynhA&p8f2Hj zK%_aKGDIw4>SJF-8CzUK_<4E(H9zSmz#V`RR3?Xxt^!;O5jh364Y>~HVkC-F@TjGt z1jCrgBPSk{P7dM|vnkSyL}sFk1h4O_LC=gIzEAVa*dg+{VB!cDU%PxRSp04Tso=jQ zkhTKxtIJyj@nR7v9**d%yM=o(qQCxpQJDByGAcY8M%u(j#4yeNk?JD)4|yi^-kPs1 zpAEaW_G{d40GIcPKV1F|C%#xova!M5gkALk=textDg?6*07pFQEcIK;p@8y;cETE` zspYKaK-UXGN>X$r;*8;XR9?f;q~tvWoeKnG0?B6x&+t!K-?WM~o7~Ifss39>GeblB zjy^FU-b{A2+zQ_1P<`9}X7LD@peGZ0@%R3F< z_F4UJ$bb60rOus_(>AyFP>E}P%Va}#X7zBM|Lwf?f@Ev$DC+pqGY4P~nedL%h*K5} zau_R~PC<@R=rdn80-{ufX9Nd&Izo|7;fdwn(%K9OUbn=>Pj=!y!0*B4{OrnosHZ$| zALhEg-hC?k9P;-#v8+hSe_{7IEM5{`$9zhn=!VsE916h%?#D<1aAyFp1+>c&tCupG zkh4bvcmW=wKtxtAe17@;@t^E_WtTN7yyy6{o0P-%?`jH*G)_Oc_1{lQ#U=dT<$CV^ z?&2iURFqCt@9`&lH@$Saja&XRS^)U#6(TevwyLN8_)x;v;60Aj<3?vGPYCmSBh08z zMUr`f9x5Q_GHnctiJ4)?G9C*mH=)KKUH7HRjFO=$73MEY zKf1SIt$_qdL9IRo84prpc0*Q5B~n13`$+r;Q8Gpwf-wz`(7-NJbKnd?`{*x{nCUMO z{^0*HnJ*Xb8vvEr!rx$~w`_VKg+9Df@3eeqRN>9-?H-A$b0cex8_)17Ej z0~#15TR>ek+9Zj6*GwT_3gw0yG;p_?xcZm(@$LJ3Y&DM0ex_Wv6fF8-eA0ts(g@qO|>lkfM?m)}6XArw!jy*f)8yBnj$ zp)^WsiFE;V50xT9qL3j=)ZBJ{FUWYFRFN}F_i~0({};)0A@@)I0&ws68@bOBf4ZOQ zin1@^dFLU!4|^Vk9)HyH_CGk_x+s28Nfvt^BQMvBM$%Qo64V5@lnD9nr_J@4E1`+v6I zzHCQb&ri889j6tiabNn3_i)>PMxWL{V|?`)5-{__o^dmm*+agG5~UaO2K+xB1OkVv zA@6xE`=yLK_KZv7--RAL&n&Zft)P6S`ZD!+Ou!BaY!v~3tvTIfG^AmfCZ*Do6i5d+ zAK_=DK)zK72kRgA`?=cD!URF1R>zycnOLH5ww2oS(JEyK3AeSDE}XQ#E6U!pFLNV& zHCHgOYu{d{bH|R&T?GoK5`pWPDXV36+iaJcUw%j09?>X_aR&AhIpm?IZ3Q>)HEpHS zn+5jRW|EkI)ccjTvaOBnCZJejXcMWa=Ld&&ft^C*Xql~27Z3QXTD4r8;%;_NkLErn zPJS-uRU&f3eA|HsnyYTw+8J$)ZkpU#lr_-ZSZLs|od8{n7IDY}dRy28+q_CPLUB|L zz6`{-!94`V&03b$0eMOsaI2oczMiT|w=3Of#0HEyV(`c*6o!DQ&OEpQ?5vv-=)UL`LYYc9@CQCrnP zL5AwNR@bP#xY5jOb5x0zg2wTZvJOX#5TwivbvDlU92@h+K`k-VmzGaAIzw|6V3Iaf z=H+#i=Nfd%7(P{>Y9JL`Z@K?I-@8Qz7Uw$M3b(@9Jh6GJ+_t)VZaI`=-*@i5W|EXPvT>%(33|*8Qve!K z%*qz{iOQj4l*xL?UnIuF;HqLHF9;AO@c*^2mZ*nLdXq{x@Fq>CzUE5mp8LR+AGnCp zaZ9^w%E~Z7X9~sf*t4Ul=~y)?((RB8hrUCSjVrWoyQvwLsy4!1patY76;ckDh}F`B=yb-doH zi?VE7I$kvk0RBLArX6&zQyJ68f7cNe$&tVL4sIVc)cxY{#?-FGiP^t>d07T;2l zq+H@tiC=!3+X5n_!J3?6zg)iLCd7T|HM)&5rYE|O-i)*pV>MZru4#hvk#S4$vIL5+105Untx-i; z#%+Ul2M`y26705&!;2-=uuUAi=Ltdrl8E6tVVM*((1+eCK1evlrMPyw$d7KoIz?{f zo+7(GjCqRgJ3tf&U`j??5@gdafMgF%loq@JF-l6gN8R>l@rIQK(=;Y1udJyF&;hQx zYOP=EFYEIL(WK~rLSRCFBCneo&5afe7yj-B>Cx|TS<7$TFh}}TwDJn(RDj0|sy6jv z!hmMVKV}s`y@7O@bv#~FX?43Pg9+qI0ki2iXkNYSJlOVV*W`)D=#Ua;F{AP7W;9-Y z#|nuT{H!A&@hayyv(DcMIqpVG~z~j%A5oO`^c*p6fBy6CokWVZ8aJa<3oaFs28PzGg6*r<59p02PezJ zr#gz1Bf1I>W3|u8I(!&6)3UqM6{|@v0tvgy!OIi#bJW51%HFNVn;W(?+M@WN)aCy& zs^#ICH5+U5CWrbgI_uEnChmIlJZ$oh<*Jwy=H5lhsz4 zt94eKJ-)l&MQp8`0d0KxI|WO-z>Xhl@g!#(imW=mdcnDMcC6l-(>}N7P%-3K3^~^0 z9Lz=~ujAfOVAPSO!lR(*IystwazIKK0!qlRMcJJ(%1z1y8aTpMW%;qLWb%x&+lb7a zXDhLnq#F|xVxoezvTTw~0gI5SP{yUFL!?ymket1GwnHZ!p%rSXemSTVI?L&b=b2 zNK9r~XOyjF)9!;MS>a*l=X$q=c7E!3XXnvRwv~luB$}_>%A?tN~V=jp~Wic4JB{O=W^T$5sI4G=qj1i%PWtefBEzm#T-< zlGAZ5u00pVlOn^KmOeS795}zRA~YhV^Nu<38`P}Z^&+>mnwN7!pZNBck(cfoS2@*# zC!c5^`~3M{PBQPf3ot8XN5$WP!m3b~D$DSifF-WMP6Hp8Y?5lME9N~lfmxfPyhEsXj1O8ycN6_h7F;-W)*9o$jYOT_;zi^lg7= zvg6do+DL1JZ)B-%?Dh!QATnSKsPxF`J=|-19OB=C%oU>*aoM^k&{6|7 zYKRM0-0ZJdbX=A|+JFC>XU~QTqE$H*nnYW1xi5(iqX2F^i1Hma2&s@;!gbp?&e{m^ zUE9V4SpqFzu&#|XMh+z#ER0e<8f)WN7k8rD^DV8bbG|Ogoe-tV)|CubSv9l%rNO+H zk;MX9lFM`D`^SrE1A(yZ+?dC0qEbZjuuj{duZ{xiXOR_BPeQs0#w~Rv0N2SOGYc^b zBy>}#BSn`?=JO?edM>*i20ZDrk6dO*7Il$9Y zcI;ls0{7jXV~T;ACuF*yR~4`NPJ$$y!@-gGkoCO-L;>ofAH>;GbO~?yZhv=)qD4OPaWCW>m;$({FH2C ziB)%LxL|nS>GQtY(!+aa+ZZ4EDfIPmjEh<3@Y+}D4LHyna40l~(V`g*Y{D??IMSRl zj8PeBD``7uJ%h(fP=z&O0(#z79CU5xXcXZFy^CJ{FD2io z^nXh}djE_iEVTc~WBr4-{eRrOcYIt&xj%g7oU=`3)q7pFRd2i6RoANb-kT-4%2l>y zTkhSC?bwN(Ufj}2LWoH)Nl1W%nnHlUh0BFp2!Y&GxIk!$wMXywnX|i=Etz}o@6R`% z*xucF&U0p-nR(`!r%q%-A(_;<7o*$K;TK@)KQU0RlO=nN^UbQQ4~%1QrInlSAA$n5 zI3I%>IJ2rmWOmdCp0i_L`~s@l6yZx%h#Xg|1x8jDlSxPU_aK1LUID=?Z7cjs^5PQ<+S600MauX3ucvr{dcU)^79)$^4Rc?cPd|PLxC_q zzvRCCEmEp@48mE->f47$?pR$UI*sB>V&2fcj*k7q7K()wd7V=$`V^1T5HTp=P7o;#nLWVy^Cyz(ZFIn+=sNc>NA@ zP@=2DY@&P05$NOVSbnto%Er7;$4h%l61@U-VwSf)z&op9vhKE>f3BbID+Joyk$S0N z^Q{dnw{EJHFpxt`uAbPKKYV!@|Cbz|YLRW?OH$dyE=TDu1e#+w7|#gy(X=)kal(Tn z50~ZoK(OR;8jKfIWKx3o=t{Rv4&f;KfK;5^kuoa-H80E|+{f4Ddm4tJkjE*)CQu|Qu0V~L z=j|J)k4i0USyqu=nBdRCOB=d#D!Xz6e08E#3dwHFE9|SvHHGP9tx=~>sIupbv=#Yi zaEQd_?bx$*q%bM=?{PZFqZa-TLNK7+La$4|JC9Uft>w z-aNE4doXddy95<;x>irE%UJ&U3XsaWbI0cX0>&yQrV*?}bT|z94TWXQ1*T;_4z0z0F*)OcYlKnPq+i6SNb9 zSOrj!3Mj{jhtd;F7(Gv-vT)`(A>jWH2>}WPtPZ5?fUhqV8P3q3Ydd#%iNAl=vYT6! z_jD|1;KF8`zmH>VTh)QxLE#3kc-a!;;}zzUK7h+_An;dET3qRv#G4 z_0^|WbmsIm`+&*oq+-dS56~x6FR`*j_fXj%Z7jk*R9!t%7(sEl4O4CTy|osB{55Wwo`1iA=Qi zuAf?!Obl)1Ys<5@?%X5wHh`Ur9TNgfO%%VLF93 z4P`>QxGz>bKAq&9SW2s}S6sQr_0t8Y@1btj*kW?C83Bxj?R3xo7uOGW!8~i~N!p=OpGaOC9Ic zJ1P9{C-geihPH5+Swa?UBQ#Dm$+l6X^3w}WF?FDH88Zb*>%J~wOv$GF_LB72AdF6v z;}aN&aFzVJ(b7y?jF;pkm!s4~&Xt^it%_53g;FkVXFGqPpwRHO;zTWU0X+s z%;g?%<0JxEd zr!-ctjii{Hw;l_wnKp5)(m8}IF9Yo9p}gG~j~HZ5AW!P}P+g#yhg!ezx-MuKF3c*7 zLzO*^sB?aXi-^b+XIyZ3O|2b+F;@?a3?;c{DRXkwcvB_a6H#cuC|H@5yt(MIPeup3t9UW_lOubO zdQiB9CNZ~b|7cmfF#?DN0;uaZ9cehxGv8p8zp%=H#hg*G2IprC`xu& z6A;*c@X?Thk)0<_*D`I>9mlr~SeaC7k56I@y4Bq`RVn{0JG5t0Z(jM@TRI0JM15sw z=)s*-i|wAdkEOrK9YPL`DLxMMN$J3YTL)!W@;DpNaNH*y6Os~Qq5}O5dI9;-XiPjm z5|{X>;0`aAz-2%l_T^SKis7(Tc9jtz%Y*o3 zrB*LJu2brt)9C|?OOT(TC_UN$-J8W*4)ikRB7;LsZgqMH{MT@GvR(O2>e}%dki28n z)P`)AG-lhqb7P-1p|}}El+n*e(a#j@gT?#Fj~gE5!~2Q#e{DapQ20LPw{4d+Y8RuG z6FSMJQ)Xts_yUp&(`_RyW!Z6tAdQ#JOAhc#LV&@V^5*_@*&u5Q3YIht=fkWiGl^su;6b{nHn45 z>K2Z2{2$=sb(Dk-H(L{KfZ4R`$=jY^dq{)osZ+@vR^9Q?w9wR?CUUP&_3}OSMPrpw zUVf|Ycy^@!o^>{Ft1fH!U|Z*fBV+ynh3n2VKBl|a^VrSH0s?I7?`rEmw{JAu8od1U zGZQ6SR`tO9^kB=jfzp7Wir%%3i91QJQ;hpl$AO`|)Si941KXQStdJ$P?HwID)R)d! z!T3!*<7YRNg=NvZ~!HKe;;G}p*9dQ;i@^( zbLiMA^4X#`QH#F+msSu{*yO|1GATd<4@u^)=*My1k3b>V5#Z|s!3~JPpH_#5i~7)c zy$N%7i#_4jTw=R+Jl@V z;f@gcLFlL7;r%AC_Ov9Tp4-XO&BxiRx`f=a!~}av0K%#g^2!nuZOH+W_@AcY%!r7L z5>u?HI6Wdfqu7KwdwlM5`NzUWtY?4WEnwCO{^DNzOZ(!ExzD9r)Ha1?G6gUkf|cT5 zt*{q-aR7GyG+3y6g|)%~;fT=as5`=N(ec9V5gvP95M{kI%g}AaFCh6J<;dW2UJWmd zrxwqKXY-z2n>Vgnkw*WeBAurX$mbds*RF?#k}i-RQ)c=nCB;hN(UyEq1OJ5%1%4{y zM$f~0MRFEe@Ei9RxDHM-!^h@TUA(o$5}Oel2opwzHLjo}LL01)vo>2}Q4mvOG^JVi zZ^|cn0=(K>P#mdcqZ*xeN@{9RN~kte)_bRHeZCl*7sFwPC{von;{)d|OIPn_*LR)LxR3?=f|Oes+rv0B zVZ!^uVd))B5Ts4*vp|%akxUa5nj^lJdpKU6iU(f-@^f;M<{2z9qtJ*FsJ{|+xpwel6`5s10RO)42lCXjzcC+&Dr_f%qGq5>UI zRh9Dx?17#->At)l{D8%Ysm%ES`*kageL%cfHfml(to_5}uZGU4o)kgU0ara|sKJpC z?`oxZwTZM@rDTWUuAyo(IWpYfNpfBYyU~-2K1A*X4quQTMWB$fFj1?A(np7@1XUUY zKg6|{JB#C^XbiR9x} zJ{G(9j&^oPzbPf(6s!$-UH3-JxAosn^sQZgW~gUpON_w=70t?~wtY)VeUjJ;y>fpH z8)d)0qy2O#oaaLv&0VQ?*k3FBwDa7qmWnl}TC28?+E~@P(4nc18z;&MysSZ?uxOr<(iy47`w^4DHEjPQ$;^w6x((9E!+ zQlyVKx;L;93Yfe5VYy#D~~j@Bm{*FO64mLHB=v7U4^S3&Gkmm;1NF8Esn+{Bn(Vu zTFMS9NKFQ&^}tD z3BQ_`g=F$dpkm39K@0q@%|Bfzn^|?28+Sb?%`6~;i zp1);0RL5S>D-8+kIk6#sISQr(84Ha8!}q*4m2dxMVbbQ;?j8vAE%py;yXmW|QVPF` zJAIO4zHns&bpFZe_76T741YGcdSevGC})@R-;>o2uWDA3%l-D z^8>Nf9j5_L6U)5PQ9Zf1HN#iyYsju&Qe>%5_meG57nPry(^QzOH)>&i&rT}MPW0Ym z$f_GHDQQjf*7+ro zA>SmJ98+Kw7e5`Evgv&NPu;I;JKeBK8xogM)R>)WMNEypX0Ev;+Z67Pa^SuD?{DcS(-ug{@gm01+g6$sXRWHMjgDXS&Bt!eUza)5 z+friIi1xgFcRfCm5I5Kb9ddj@O=CTD0ej-T{;VHk0g0gjLdlP-JB~KU;k}(rY0aVF}Exw)e`4}v~j_j zfC%?jQ70Ej23ZPBijB)jjtugZgI!;<%2UI%&nlO7tXWg=`5P$M_H#|T@=9z&bDb?A zu?YV}ZjEhdsP_?aJ_@U4>l_>Dd8ImD0<;t(1uo zN+J6`bH2~sQR3Mm-@@83H~DR<3?d7J&8N=%_MOJmS~sAXbXK+ zN{aMg-`AHn?OooK;p6RH+`E47$;R~;S0o#C&d}2Q?G2XYVkc|pE`pZQ*IG-_(`JrK+a1Xk|AzcB^NVj4E z+-QEODVWZ)CGqBcuN4^#-pMUH2C}-^8WSQKzBJxG(`%3OmW&1;UrW=nowxN&-anCq zN*rUiJhx`_q5b`VI%7=d(UI0eQ-d`*z6N8>(p{3WXJf@Z_nw}r2{dIzW>nO&?5?T( zHy=M}Z)m*l^#1X}-jkORWD4GDQ;SSp+}l<#Fmw3ks=VrT&5#gqb}Ui;1R7B6v-Vjn z$#pD|ndpyHibw(Hapj7I`Qj-5llH`C+q5s!Gjk6sf8oA?et1SN(KC<>AfF-bF{}W7 zcuaiWStY%vzw)LIu>?)JL?->aZnl{{E!NEb9yT+{F6CxQQo-zRfew9mL3~U41owJm zHh@4#qAP`oQpgDtS_AyKpo>i{y*K-BdMQJE%ZA^-0-kXz>@D8t19aC|??}*uyeQaA zFpGRSv{iJJI2$Z%$9CPtkM6!Gzw~*hC>|%kpB2$;h%dL~^thU3YR9LZjXg?CWO(Lo27KLI^F9>$S=OWHoiR07;TF|7Pkz;j|LrkmX`VI^L1X<-qlu3R>kyyjT!V7 zt%0%ZrZLOsKgGM@*Ut9KqtY*hWLV+#ms^XI1F;`T-(?GhvWp}#I`Fh9r~yhJ=*+_` zF4puyL}5jpxok~-cwT-%jJe)X6e;1ST659T+(@gfFb+QzM>cV&*g~5nGCWs>D~^;s za28vU3MbV?SyLkz%Zf2ZhWN0k^n%DL^_Pq&zvxhSG9e>Zl=71Ln@@0*p9{_!D$@fF|p?%gzq&N7ubKeJnX2J`g-_ADhV*5IVq zU)F2kVvBL0CU2ra3}WJ&78dRNqeXdFG%GRxWbeW5k>Jcm<-j|gE1m1b`-u+h;9P;2 zC2XObG|!^4C7p9_#aVpBvV@cZAEV8De04(3@{)E`@tymN;3a=a)(U2iPGT7LK9X&1vBd;U3|vfPAj^-+T9+x1YK7)Xm3lI&ygD%(m&x zQybQ_fDe{V4qgRrF}64NJ96Gs4aBz9P=@rg{BiISPl zVzS-Z!VnEi@lxUzW?Y63{L6QIZ}a_0z9A&QAZfBgbCkA{sFDi&$-*D$ zba7O11^#5=kC;?Y!>TRiky-J9tjfBLc?HLZMaKDfM@NKH*+Av3nfN@G8&|>q?hA=$ zQDIp*@YqQIv2)FrrYb6?z9fyEbBvBU&W$R0a&TBU?&?d}j~x8J*_sOepSY5VdZTY- zAY+{;l*f*<(BsNut`D@wG=iV=XY$kfX`B#gu(9O{1p?yqt@#M!kvBJT|5qTCb2`$W%rtBrGumewiVO^haDOwmP46J|%ul>l5G|nw1omT)WayIMJBF z-VoEmlj8%zqr74gL-en|{`xv(Cxbso*DR$1|Iw8QM7aCM*^3-$j#Z83*vb`k_FRWG z(voBLO-fD4&mBfJZ`tcS5>X1T&;3dITs{X~LLT;1Mr?pgdy3z1$jO*rd8A-$5tmW{ z>jkWloNS~Y`ZsJox3YFsV^)YE5ueZFa|1pX_~;7O4-MVC+~Jq3m;4e-2g-&{tf=r~ z?+ktU)IfUU(hXY+-&8+NOl>Wc8}2*M-M05^+fQ>=Egh&bcOV>z=*fgX;jnc`@z{AO z@T(@X7-a*&`3sLCiW#O89xlW!kx79_uc1dVE)!3($oooXt$JSr>(-bg!TBd0Ym6?p zr|I=U8II(Uy-{|fy=}st(_I>^*JoGM$1A^OuV*rIL_uk_*<79xKG|dKuSkq7?8wjR zsIQ3rC(aD^hWtA@U3&&Pu@ulNIuz=0(93MrB_<=5muocXtbkJ^T_QQ5WTEqs_lB6M zn8|wF9b#j%QZr)1;zRwl7JWogUR+!zzK6u&yZk%$!t?*hUW&{&hbN}Si(-f=B~Tw} z&x&F2?g)%ZAV(pQ-Gn}Tq`jT=a_B=4>a2VEU|7(Mq@6m4EBxdZp_wdQfw7*dj8U1uN@UN{&CUqiGC8pSs883O3H}~&>;R$WX1CD zq_?$sc%PSms9RT6G^{vybfM-d5`aS50w)wjXuF^Q2;`HY62+oPG+U&%J0Je9Ar{`M zdl^bjEfy<0AWC6Y!hHh1>i=w1Wh!vhb5YI zxNRdv$-i~H-tx$Q^@*=Ff3r&SE%uuio<|LC_8NLbegBpGLu`zFIQPOptI%MttLxic zKMMK@v)Llc#*)ru_JZN6M9C^f;nF^IQ|yJ-9i5t|Z9PS?F-5)htje_Dp1vUVE>_?J z^4n60HVh|`TZSdRP0Tb={Hk|OTxLYNSC~yRQZSqmVD8L5jJ{BPUFouX3bL|~fUKd= zsF3j*CTtoj8GI+82Xq@a)N#V(z@RRo!&)ar$qmpFPT{t5d-a+*sa>5 zAu=3~hM4rw>RR0K_UcMvo}$xN1EkjsNK0P~cYf_XUHe9iH zO^c6DTGx8Ja+aCO_N;03HRdnbUZ}h;pJMTKn|tg%<(Yooc@0YnJ7zl4nONey!c3LR zY8*?-Vj*Tk6pqx?j~0evCgCeR_uq1aeBR}|Aj027)NDj33o^{g8_=#sfq*Aa^3_^i z%N;%#X-K@2q@x96gb%kX^orD^ln;Y%4>Dwi5;uE2a&+I>!TL?T#fYwo4jj1Y%WL~i zj9XbjM%T9HvGdzI0%CoG8upL1AD`-uVk>%1EX7TvaoMIll3iE)3-GVX77#ZLP zFdviFGY8aDiIbmi?JaMx_H|Eg%JmNoUU&X`Q%j#?;mf{qdRb7oU+U7kC*)IN&&jW? zKD_QlM5@buSKbjDcRx0Mbo9~P%}`epE!UziJ?M)!kMD&)oko(8t{6?E&xKBp!uz4b z<;E|!oecsakMT80cRDwZh#%@^fBm`?r+0>Rizmfu=chLLlwE-)2Kd320 zqlAA3H1=qsI?@YQxC`$+&Y`9D*Q65N?B~7WBVvK`4MGV^2H{+d`H#jql|!Dp;5qOk zMQn(B-nCfW&{5Kv;F|w{5X^lV<~}L|Y#9=~>nsz)60^ajaom!y#iyQ!WIvR?a^u$G zb?3$t{9*%#PdvM(?Z~oXID+Q)Y_48%aaVUhyfL!#*hKz{iD7eza-W`^KLEE;FRcT`q9Ys95dt?Qb`X%3o@PosyyO>mPV zF*p3jscnKylT=nb25!Q##5px)ebqWHo|&+SDb8QYr<^|$^MG?d=$zoji4BgK6W9a= zT}b3*R^|%PcFiD}DR*OwqIE=alEqOuU z6Da2cCU7$d4kjf@+-I$pwIl^6`^#i@fGZG0NO+KvGL()U=@a`ceyy8Mwzcmc%+#Xf zUi13usvS#fjPj}3Z?*0pwc=XSzqg}yZ9_6+neFQ<@xHq-j@$7*AF?xfp_q-w&Lm;) z&+RzY#0DoTu2&Ys4j&lr9iw?N`}voPT%j;p^r$ zFvV{Gw^}cnDumO|U+hmZ7h9DKCz!OlmH_H-P2l+4`dUdzG8qMl8)Ur&F-+@8iab5zihTVB}EFf-yvGI$kW51&}d z^Pa{SBRY;RUH0gK-az*E=94>@CA^vV3vb`SGhbVJapjAr`%)X0ZrNWc_CI>Cy=DJn z!w>d9dZ?r2z+)pchV7WQbWC9&qOcI%>IW|5j~Ro_NQ7^)2wM>hD@=0py3{O_OKPEA z?aE;j1g)0IC90Xk2b75(+v{v!^ND4YEV6%n@h8mgJis=V&n&C+@lEa7TA_TAy{|-o zxn~dV@2XtUW)D(Ay~G&NT))CmzpgRG#oO0l4P=78wcN*nr}rYSX$_KdY@i81H_3UL zJCWB)Eme+Ef$1cMzLzhxbraPLnlNyLP-*sM||R`dDQIc7cP9oIbF)N<3hX20WLeINDRI$2zTa>!EX>_-i|hpd*N-Hnp#Z2K|# z|Ac%CbP}iw4N(AWhQ`3_Fmo;iBYT)zK?&aXXRmazvDCS?T=}f%czd@rcV!EnX2Mb6 zd5^El1V@}Nq9<|bB#s4+B7j?|XL@izFdW)&dst&=;iX*~1TBlGb0@B0WF3Zngz)L6$tcZyVn1E#RCmXmLE?b@Z38 znS^$9JrKN+Q=cb1VbBXRi`d8Bu5mh9bGh=S5>O?EDX&zB`$S*n{Fd`sF~Rw3u~#hO zbMlIdE?z_zSTwJrOJE?U3&TLdh(7{#ws)i$RO9?Ylf6ZGxPr|lB#Wn*Gg;|iFNr_l zI9q^|7`%aVNNA9-UM8r;eI($9K|Q830saC=q;(Na&9hHyrCXeZI*AeqXUl0emWHkL z2i#pG?SJ8Jk%hZO!XkGI+zF6Fgf3*V*?l3CCBLG!F-u;5Winy`qVj7}d-unDXpC?a zXK3W0r0m>GKV$r0J2KU#7uUucG*4SvED_6IZ*uxNhgN`aoM?$L3qwYq$5N`gqrkt<6#ADzjaV|fwl>skn;gwhxHA$HZie3BA9!~a`ib%-q{maa zA(zeOy_sJ=uHibInu+XZV8)vqDw|9D<-NEl4_S$G(mdL?B3Q? z*jJhDXUwY~DQ?@*otf3Yr<25$gqjuAd96j}2ygIEWW5&PvwI3RVk73>*IT_;LhXiy z=y5fP{tx}HkQvE&pGN$!(wQX&?H^#c4ZV&VcDz);X5SItUWeWC4bHPqL2IOa76%Dv z!6jlShCDHM1r~SlIMN8FXrZBfSlp#|K6B#W-ED`4(tLbdrtj>l-_n_BORO3%Z8@;K z+SezpX{x5@t~zl{%q~`xAXa!e_qn$tmRn>-6fbK!5MZ`c18MdzMxE_(ayOlkc;MJ-58Pp?#!$ z^@-NDTc@fRtDU~9bMKK)o>?s_nQ_J41^xAhmY2fXFuuF0dSUR^m?wzVarS~a+{4>okr#87#MeU zrO`@motKNpdmL+A-=$eYLCcc7{QmM7gU`^uyPNB8UR`MPD(hck&uX@W>3ur3oUE_j zH=1+6H+N{JsQmDzE?;Br@Jw;Vp^crbKB?_%Y$e-QG~$ZfxyDwsZDpgh%-&y>>+f%E z94+kJ(Vl8<-_cbz){y7tZ>j0cZ{FIGp5D2|xxacvl?jg7)wL@eaq*SQ#oc9NRSBlb z@$&M~^4R!th$xuLKhFI{n#FxN305lo<(%Y%P|RgAhG$oAL$uk{O4_6;rW1^=mUPj? z=vc${SMOUB#p1ii*A{i`?N0FV?U=czr)p(OUZi9Q4%_(TJICS;Ot$Y>*At}o@hP6_ zYdkbr=j#(*xjI$sJoWM>U3ODJG@K~cpK9s6V{$=y1Kd{RK|tAJHEEKc(5|nD^f3+=%XXei`AEJA1^Imy1n?OvK{INP1f=ryQOPI z{+X;5J$5TTV2y1BA)k@LuHmIR;-wh{yPZ0g;Vu5S%}R#{&VqO3cVM<%j($g=-{GN) z=$SxcGlW=K>sQh_Va*?^Nf8UgXlq?sMq6dRaj5#uV$IXmHrR$N?Y7Kvb3jmPY5HaM z6UNs&16}$-mvZn3Bzv3BFR#&bF3K)pLtwwDPU)z%81x}IRY|>jqHV^)=22@-e|fAy zn`EglB^0LyX!S*1%krTCOJ?Ypr6E1FvpQFAh%f6%X<$#Vpp=sI)Ux!jp|<>v!njxj zu_YH}#(8@se4olw=KV`CX)^0s>h!A!Y%q+6AKa*qz?XbnG(agx~$H54tqbT#9aA*;3^DR0-5b+qQ#)rCiXu}5ftWMcEm@$-V8!U@P1Uw3d=eHNdiv@C5du~r< zrd}VM(~xN!%VzhmJr?D?kcgD(VO!C7ojJawBe!{p7+=($oz++n!$eagtpmTgze*`m z40vch);f zag)p2(=(9Qi+E=*=Hvuubv^Htjw;^8R69?Hs&#*JdW*ly$J&#GPeI!OtUZ-?KKRuL zT!oRGN_B{g!U0C1nYdNpx~aK(-NgOXl~(G8AP}qpLMf$g2trtH+zJHb3~6j>s&W+C zvJn%VOcy4yT z!?ao-Q`nrG+TCC^7-EX>si)p*)kox2C!{o2W~1Cqesw}piz7#DN-EC6VVIOxmTd2` zM@8AX3e#Y1_wh;0vYRX&wwM@Ohth>D6B3%?$jEf02Zy9P*kk6>^svzMGPAifH8>=- zg!35t+&`sG$>ceoW5|Dmc)IIe%y~K#TNr(!J;=?|xj;oseQW!H<@Lc?yBlqNg<*Pw zt!uKVdf4Kp_w{exdjDvM{>!Ni6;}8t=#pw-6sgWO=#A-BsiI|IXOq1;t7+U~U(o_l z!9KXDxOwoNjSexF>BG_sO{T1o<{WcHS7usU8I1aj4Z|PfJom?N`TEkqEZyb&u3ju5 z?+dIcaRwd~>DmXdx{%EWJ`^d@fqKZ|#Mg9YoyT&+1;1F;;N&`vrJoG^qV_g9Cc_pT zogHVC<(Tw>sOX${KO58gMFa&V#01N-E-)%EBt9}&`@q-PccU!k@Q74PR8(F{SXhcB z!apwD&o4Yaz&}31-!IZcv=s;BgVHOS*U5^9eT!;o+{Y>i2M9M0yEOa%aj8(eoVUrh zxiTo%?h{-9MYcUe`59Z)uq7!YdAMXL#}y;LD%WanM&9il;L3@+?kor;6EBWo8e1Yb z0Bl9%Q$X`2#~5wRBi8)xQm`P+Xh-jk$O*4FTt;HD(zBv-iUV`;%@)tUg`4BT^qRBz z?Y5X`TZg5)i}kd>7gJykjW$KuQw=fsDIttSo1z0^Qi9Pf%*$=cMbRHsKO_M;$FXg3 z!$rsj9AqfH0qK`swKdq3i|h%&YLxrMSooVofS-DEe{FR`!5adu8Dx0IbeP#Uf>WZr zb(-ijOH5*MRA^XEOri~*Nl__*!I4E}RSD6#i6JZ^INJ}wVwnkXWkpuko%gcRES?sY z;_d`35PVHV1NtM9`it_tV4&^Nx>dBfAzs{2n)`uU``Oi+D% z7fq%6ccj5wEQc=6N<_p+J(}mS=K^TYVgJ*8gDYy_yA5K)*lbQoVa4qE7j4fd``K-B zdVE5hMw1aAA14=I`5p$oHa;ygE;bEOqcqQq9hmz>+JpQPINhH0;r?inmLf(lhuFi| za`5^L63_g=TVv{JuiRc{th%Y8yw?_`)9c^RhF@7)z8l$al7sT2O$kNq!%Oq!+kqBw zQg!HSExf3;Sh4gS8b0|9{~iGVk>|I~zri(p05p(xRz=t*(S6}o~D6#?rGPb#9N zP@k&`!K+3!7TarmjZHTnS(54N+qM0UHsxEaylUU-CZlg+`zD9-yjv02zpt})D%?ihMw4jL1w5ND2^xl7ezdQ$h_}74K3pc85MF&SJ*zEFf8~Vmb9aW@SJ; zgkPqaX+zr1wvQC0GCSk*) ze^<#s=Qh%<%u7}@*@qKJF}3cBC~r( zTl;R5t;fur#N7TBenviIAM+wHm3SssDw1)9(idJ$wW|h)(zTyw)FK_1^6g#LE0&oz z#S6908upQc=k&d#rt~#C;R=eipMiCHO7j$qt>j0L7-b}%Tbz@mPz;01yt-JSS2U?{ zQN;SN74lhj`6)w0$&fv@-7K2hQmdz05)22Fw^%px4Gi%PiI+v6z)-Ic><>2kYH@#2 z4D-_F=nM(9lMRx>Ye|klfdfr>L zu_ej-6Xh+<9J?Z2`x=>I%_p&6HiCv;z>C8)7iSpPLy-+?Bb$C-*`#OBhWwfJ>1O9_ zn!Gb57d}5qzRt(y?ty*aWB76RfG$lng&9N_WOKMG<5*Nai&Br|i$dI4B^FPt$<-9t z@?kn25$#TVBVE!<%yP6&0<$G!mu4y(x`fgwvlfzWpmeI7V zuzPQBCac*sYKMB|=xz0-RVNQ^?T2q#f+;^KsbI;TTkmbE*#7ZL)Acj=b}OfHMzf7M zVQGaX_!*gM)-+~ymO`U}@t43y_zYq(a&XhrUoOdotc~$QtprxcH4|6$6W2!Lx~}fD zzk}p6+7Fix{9iMBJN&A;c3{c|3{s+1yyneR8Phv^3ipf(Ez?IjUoG zD?^woa~3(Zv5k|Pdv94=@8=)cwy*DQJ$u-EdVI-|VVmDm1z+?pUv=-=inRlcF$#)r z+&-G*@7J;8fr;vU6@AviWhXj&kB(VHR>bb;UB>FR-Pbi6DgD=yrw+F#RSp&?>%`La z_l=L9+vI@v7f6kM-ifvU8FWIqlxHTv4^cn4TnNGSR77kS-Dr@839d%4r8eUU9{*FT zZAnc`4oO0`6|yZ~y-+R~S*Uwpi3u3j(2B+btLlx$tdTtqhmLJZIojU0XTWAWXg%Op zzWmmu>+dg84vS5>4Gzm>JgS|&aa!cq;dQ<+n^asrkaYmizewj2%{D<%0Uhuj6leka%vUnNak>3jb zC?A5)9mXCdU5nj;xLJ5uVZ5+gxpG$`jEzi1NODQWWI;e-aC2mM7#u_dL^uT)V3mNA z2$_^&8-mBW4&j6*?#K*%H`1KX>{kA+XWrY{SkKXwwJBQfSR=v&4&T#Ta&W@BmY0>KSOk_AX7|sqA+n8VlR*HM{u|!9$ES^4NMF9Sf?weY!=+`Ue8m2!!aYu z5icNJ4T_t4;I0QjZ6xw1Kzv{_vP4ki9o&~y=Ex%iiCy5#g0m+%hKk=)-s(yko!VbN zxT7}6XS;oex3_IYd;P6@MniVk|MTDVzeuztv1|=fti>x^vWN*dYs8nT_e~%Wr)Ydn zjk8L_Y_B1rj`kHC<>a4ZUHOqDME*t?izG}?hBcmc9m~pPey1)X0j@q8_YaZ*Xese@ z5Ekjk2e;X7SKigL_^;oxk9rI8un;5`lQP z;EciJy&IJeDh-h(1GcpGR5`Vs&fi3@%8&J*lqhfNSb?Pom6i3%krEav?o^H!_t>K# z`^Z)uLIODrW8IL~l(+55Q?w`H@*{ny%S8UVL<~mbTe&SQo!W?mmRi{F*y-<6Q@p8hM50yMUpPQ>`%L{}1$rGWJnm z4yG3{>#>$j@Nq%FC;H4?s6=rhoLltJ; z*jJ)I8+m`wLFx~(Rngez_eX`H{-`k1!jm_Eq5h~aXOZ1^aXi!?6=qUsU(la=^yf66 z(_G%42Zi7AIi>!%=M;A$xkpzCJa81DKI5$Dam{;=Yu;5Dq`-B-ObZX)0Ol&5vqJWw zFnziN51t2wU*Z5&*YmP#-WB12nMCpk-XGA}-JhfA^X;6@u+Q^8|8)Uc)aUD;WGFH_71yb(OYfK0ohW`@uh-<>N(?59-ff z%xZ>EGrEH@QTtz!-y{W5D(bx5CCr21v>}*(%)@ckG!H_>A;<7BtM8aB=I!Do*E?vx z8#Qm>9Uc4~4+^*8?#T0$`ncz7Bj}c-p*7H{_VZ=MMK{GmHx=eX56txP8^K(~bM{X+ zf}#GHeY>*`WRU=qBLBO&FW5|HEz2}FivBo|^_jLRZ2!PD5dFA-dl zLvooYIOwSslL?Ft64IClOhOJO1FT_@$*GjU!W2dt$55A4!ZqShOCt9SN`?hNu9M!A z<6CMhS|m_6mBe_(RVJCNiKsP|Th)?K?tJ3sMdE8^KXbNZB$82f_KiWub%_Mx;BchC*UEv$pCv{_gp+(9WQbo%BTQP7paKe!wsr+a|8 z#Y3oet>=!7omgT8tSb;jVi`BWN|+vBjRGM8v_ZEj?W= zOInvyIZBG)b((JWg6~o?^Z`ch)QigorDRw2u27`AuK%GSy2M4PmQ23hLD165q{Ef^ znYSTh^~}MVip`yA-d-jBYqxAKWV&dt#FnYb$~|j4f^0#9J5M*a92&{+UIG`SsKrTb zt!qzIY8#L5m`uyQlDlTj(#}FJuY~H+fZU-RYj;r`{B&B@)l@EP%!~D9=WC&Gz z5Mk2K$R6C+;e5AXRe@oV*~xBo*u#usGBS8TvJFoy?=7s+I``dYDDJniw}$wM%Fm~_(;f%Jygjbsp)*~@a~Ao!=`3D|hxWUQ=d5%iJj{dV z0?yFI@jU6lb0OqLcGjKxy;t}a| zHmE#Cl}Cxks5s8g{gLw+!r|sIDvq~2IL=2&Dh_EL4lSLJDvk?t?=C90#A?3i!EwRw zx-%5}ay|Aka=l=j(+;lyaH&9Cim09;ai~kmDIVVI*gsMZ zlZ9L`YZ=!=*s66RI5PqVG-JqeqIKP{F=zn_4<18OQO<;#>hi{lMr(dnMr?Fw2y#f4 zu`(|>%JLkNYIrv+uDnu&>)xna$arj|zC`^95k7@rR$_R=_9azjR08+OZyMWtuyOok zf1Hok>>HB7FS_s4_^L}y$>p`;VoY7%lpAR|F?7$4!D#Vw$uFXDM{s7#s+mKTnN^3j zPqt*VAAGbQWhDBZI)R9kj@p=tRJM@k7Z0asv~p&{*1Ot#8_#TRpmS4Qv$SW_^>z;H zp7so_S@%6cU9*4kthaLkzUrFwRoCn;#Ko`T_lz{Y@6ICO=Jh;aKxvVa`I+Ac7_D$t z=5oh1JW0i4#(Pve=Y=k~XR3V}be+*Eo*x57#dAJERQn>%?+fuG6~_hKQ5WwE@go(- zh0sO%qKwI_G$ey^JnYQeujbO#zRac1?~As;jfb6Gj<`JH2eE2jz%}JF{4SI3qD#Vp zy}SxAdR+!^G^sGkr>xvH=5p72NY32I?|SNe@Im3-1#`3?FpZkO0go#0J}A72%tl-m zwGkScYmSHWI2F$Zp=kk+BRmzFcU^cOM-{-I1*_pwzB(qgFT~?i9Os3e1w4*$WNJuW zQ|0FK7053_I5MdxOjrrtL^gsHVHJu8fiDGPbGms`0!~{VN+gu>H1QIO4{|*$lt{yn zDJnJKN^!0Yyf`e$QQ$|M9l7}t@thlRB+@>y3CT~d-0~6Iq`&!Ju%uV?Z23nD3fmTb z{*4@);ME)#WyGma=5hx7 zuOA{_Y|P0*JtmbKQvyTCir~2m*%PEmu6euO==uzs)+smLmqtik=3`ory09_o(=kCsh#Jne#bnjrX|r~W*KC>uAPNwx9_cMD$xZ6GE(p&#zw3het_!9f?>f!(m8wo^ zT6ki?oD%<#xok>zX59UT7s`V5%4+#E?+?cV`n4^MH1e7Zs$3zjW`1~1)vaw1s&JE2?~`LLdZ_pM z=K-VM{WnN@P#))l9snL3bl#~r&O_%)=N;*Q-RGT(gU&k@$9dmt&pYbJ*SSts#qp4E zFF)_Zc{(-1u~*~t;CN_=pLf^X`Qh^_kMp^+y4LL~K6mr<(F`6C$caw(iXL_Dsus@O zR?N#dpF55R^RkD}3-HXj*Y+7@vpmV?j_}aj`OTH7YiX{`MLV@WG!QpoQHHO*DW!KF9-`l0=i*&Z z@hxXz3^jnzE2Y14Ukg)gxiyH@*w^SS(1p5McOU3b`2giord8;_Q=i%Ub zD;39ip>lz|rQ-Oh2gmt8XjB}U`8ddKqvE*ewmHnRZ*Ux37mBff&KKWR=}&ZcMpy26 z_95XGm8W0#?5Ji=eLtRkh{Cua=N(nHB;M_h``S7t%i|j>bFWv5$x-HM zJ-fTDdFQ!K=~wFb9)uj5hkWuDVaQ>Of*cD?AmZ6*eCjuwHUK zAgypB!gW9-!5Lt`&HPtdK-??2LQow)cW%c=Y4hSjTV8c*LQ=z9`-XPb2KsEX&A`aJ zysh@w)`8&tgvqOB^*a38o;H*Cfm~U}CGBh(-7ia&WKKn6#{~nCbZkx(k!Fat*#ib)An~JInK07<_ zS?y<@XD0=-`YhI?`+Ug({!xCGmGZt#3)2hwmI{~(ejgp-eVZnqSd5E5%k?knvlj&a z8$A0I`k+30!EfHPT>qp#drk;kz%$hM{zZKjJmVbP0_X9JIil-pyzl#5eg77J|GaZ} z?l0JrcWTJaau_g>p}I)_BjK#MYKw`Q`>OoDZW1sDTzGx~$&W*^J;dZN)`q!_uuXgb zn445QBTg3{CqZy}7||c(uK@qONO;)m%CmDT07d8d3KyRL4U8*RSLNf7!C(LRPl1Kb z$Dg|2rRGV|>H&k5gK;jf=Hkeg5pv7PimQS&qp|(%2T&$gFp|+p> z%OdT3oND`|7jJiulk8`5f;IrpKcc?>8%gT>llWY?+9ChC+NYN;)_(Q*vwvKqozI1e ze^Sfa#Y-;y>*)Qw{RzCE=IS0kSD=7fP4bQ;DdUqlvXD832bfcq>HC~%v3A~c$A>wpY_w01rHFR{f(>$r| zXMed!yXI9-`-M*yY1jIC+Ry!wIFoC&!{fr~aw!7o>Up!)&aDtV6kjQiQ36nyeHY?mE3zhZN!H z9N85pnb0EEgv14aE~Sd_KHhZIT$<~Y zNTX8%@0i4#r|~{KtoGrvYjJQMu7Rw1J8@F?a1vM_5vGzf>F)0)%y zE@cJfIs%Tz2nO?c`&_PTK6733c^l-LZ*U&-1&(KW&awc{ZOSUjYXm$ThTrS+U3f@E zPjkxg%!8Sndqp{^!YC&fhk?#doc%6m5pATW z{UP2*(R2Q7#~w-NV|Yp(1LxaUWrXb*19JM{d1_bZg~mYgt(%@I4jO}sL*>oDL6Qi@ zz;o~LcYH~G$MCguQrqclP}|SGe_gxMK)HK7?K9>pt{J^TGr`x7ii7%~;y8EZT7L9R z=wUp15Lox(1YXgO;rmO3X#b< z5lQA7Wc``Glm~4>?X}v3SR1lTYZprfgf(;&>-0U&L!RMtqspS-!!CLM6|_IW+f_O4 z?4Pe)L%f~Kfol7tVIJLpzXi|R_!_;;=XP3nbOCSSFkD6<7_D%j`r3D>IA{&3?dNK* zU4usOuMf4UxKAeXcRZg2T|w z)ZJ&CQSwF(^PCIM+tvOELDBIqkl9|A(}Paqs)kvxhl-pexl9eSl#N@V4;p zN&GwdLOvU4H}mgY7s0|9#1a{;~;-yh)LfeGKa zJ%oSH<=?pt1Nvw!*&on;2=Fj%;(I>-{!e@--L95&yJ-Iy-@m8%GQOAa@3Hv)ef}Lu zJkZYj!+prnAJBU-zh#c&f6(7-nEOcjT=Vas<@21DPk#SPu2u9U4=q<f(Ynr#LOh=8^mpBH;JQC1@Yu-w_iluj1c_ z=sWM%E1EBP`Zf7${!Z9zuC6EEFAk&jYw|xA!tj1@8lWFUr#~#DrHY4WpyGM*m4!60 zV?66L1oMW9=dTN4`1mo2UCiwgn(qje!V0zU zWfDTfku&#dLOW4S&=#Y{DdCnds)oYnE2^A7D#Fu&j(d|sBJb{pr*@AHiSm@?SoZQK?C1vp^N3+oryBK{{H$LF8( z6wE(x@-@T1t30m({W`_p@gJ^t*cZH`6)^Mp+Vy<#dcH>RH}Q8o%inoDpX0ueh)2P?tSKh;)$GM00>-iq{=jVI9nzwU*DgGTC7x0sKK3nq=X!{AqgeX0~Ke~9# zA3Z$gdVY}t-sR*ty0}2YeIMc5mM5%L_e3&fUqLZ8a>7N>*amlU$2hoCOr%QJb)fSG8i3s!Y(rSb}mZx)97j~6+^&|~-?GINRE}O02yQ($R7TUM%OlQ+{ zuPsLM(jkZFGgI9M2h&kjJE3W+zIuA1y)@lhZ(t#r4J#7TTh~>!?jN>fwXNQMpdx+Q zEBB5SuQ<_ByRARZTsyjMTS>ZodfixkI`pyJSDf=j*a1Mx>-Z$M)5UU|DrgPbE*2|5 z`=dtlZ=nAN9A;YKd=lrtRbI;NoSfdh{5|_2%fNRBYogix{a?ib%sG`N=^@PvfQOWX ze%^$4ZqSfT?hooa-~Yfh=e%kW!MJQ31cR~Bx`?>eZudLjm~UgLn)}96?#lzC zDzbiWRdsjv5LOWo8v=-s#Ow)(m~_%%hY+>|71CKCfsn*3fQX2Qh={1jCOa`efB>BU zAp}ImVU$6KaU6$nkWmL6MiG^9ln)U)?{})IJI$iLH}C!P2&Yd~-BahBI(4e*-nvzF zAqTT|H@su9y{-BPm6!I&^aF3|XJ7r9y!6f*tr9ac<5~x2_Ecb~VzT0MLX=nrfF1J)d%?51KaQ6uTN}O+BuoZ$KSa zH{5uA5XRN9mJ(dYJs6(b-o5^h5=EK#yPB3#as@xflN3pbZXw-s7* zrP|8v_VB2_itejaUuApq*0yp8`n)0g!v<-~6)uOVzigu?W&9J|Q#&m5o~6CiWrz7G z<0q;Q?owZ8+Hc5C{ctOvm7ww31I136Zl#gF?REeAI?BCEmb*!o z`=)WZ`F)h}f*i~KD$BSLYuahg3GP7M>%p6AK(kwp4Hrm%V`I~;W5Z2+<$jp|tGz6+ zEyiinukH6#`_yjPYo^{&%KCqj%B|i<%D!`{nE%j*`b8KLXCe*2?T0`}{#?Wg2?3>xI2`V7Gt zi=c4c2?Fq(hB_GLgSkIijUahEh%@fgI5kf5C_w+(-b}jwqPYQc}VgpZgt~29d&O^ex-O6;45P{jhULqt^30J}2G9GD7Zz5iX?K<(T19;@F0%^3Nd_=B=R>8$%MkJ?L3 z_3@y#X*l=K8i}{KY!3o#y*xda>)< zmT{NTP5)8!C_{+PHt?bG+Q+Cd{e(LLIY-3`bU9_eXPE*T)%Vnx{)F=-<*ajWB9U@2 z#u;**ujGSoZue!$#0U0D_TqEe5~=xE*jh|e%6kKv=_1{sOQ=toTNm~!_BGy)hmR%N z!{gPvZsB2mz~^5c9&3y-x2*p}dCYAs+dVwi+}lp+(XK_0!9H($c&s+MvUptxK?S7BSZfAuEYy7!ooZ9V%~ja~-!u@WV<0OHByhfKk9hU-T; z-{>Bvcbfi=bDQKdzdxx(e!j@{AKFs|z385i>T)Dr)Ool_8a3Win^NO_jcK)PQ*@u> zZd3A^*plzzQ)Buas3jlTP3^@8^UIn~mGSs3>!*lMPxHGTK2?}4_S%i);j=-uO{ouC z+k8T{E9w*7ZIk%CW1)IQxv;i)?PVac3EJcm*(O!qSFs<8+T_i7yIP_=d0%balJ|^k ziz@G$=1aHS6F@FL5=yp$T->j&xvMQ%fjir(dRFqOEh-+Xn-9yjNb=onQQ7iY50BMf zURK`Jd|8@OmV@e6uFnG>@RH|VF!BPbgRE?KUAy=A!*8%RpK{0=Z!O=5 z(Tq42nyD}0N_)wBQ`w)Q4nbXGa@|t*^YJY0vMhtXOEk@wSZy!;EL|!L*;Ak|&1Jjy zgX}b?-r|e%aTXyxllP)$a;e!)N#ia8mHR2zH&_R895nKI3fe~_Rrc?m`TSDXc{w-h z-Y37)9Mvp)Gt3Cc6G(^;{9~*SjrWRAjp?#nKS%5E-0SD${fQ+HG^2I74#H~Er)kxN zv=8z5$>$k2AB+>d*m&Lc#}g4`5uewkFM<#G;up%FlnzwSQU{C=w%g|IA$?KheN}k! zniKKiS9jhu#zknUS)kgVZ8xVMGK>e1IzuLHy4bwb^dGY9BS>)ld z`lBBdMe`3tp=>~P;y#DOpm71`hsgS)x@kk6CGVL%OBl%}R7dV}6UY}YxnvHiDVamw zzsVfx&={q!d6Z8qbXg_qqulsP_0{0-?yJYc*5Aly`qi3dV>3O~)B9d|N9f@b@8M&^ z9zxmY-@=FHPKXcIDqg*Ti@WZj5Bapxr^Y-GN3Tj*tW4Wa>LYzf=~H9+_w9TLeD3h@ zsbbw(rsk9B%}1U^q4-o8f4SxCho@ZMnn&R+snkc_D?KLl91mN6W7?(5LM{I8TiU}S zj44>l4Vna0D$%HSN>xb58fc_X(CKX?PwJyyk^KVbQFAq>uWsoV)SC0DDzBtjh2562 zU$|E~59)&Y%NOK4%^F=_PpEri)P?(A0({JIa(?esSr_FgbXQ96dA{`cpyEUGBZ`l$ z`ENhNhvq&MAKRv%<3s(o;!|UK?{?+Fhj2z|K2-KqbkZp_lB2oXJ}4KBb&5}wvHzB_ zPL=DRN1v)WS9H0qw3G{V`humE;v?%NT=GY~nBz>OC(0tz{bl-B=x6C2o_p=}PIHf& z`&spzBJb7ltRY+7+s%3}ezSWo{#O_$-||`K;ZtKe%^p$Ou}73oDn1sfU&W`!^xIqN zSMlK=3Nzr^#y!qgKJ2#&yV>`|mllG*Y7APM#XkR~?A!hI&FlHT$xyvLl*^FiQ zbgtUHJ~UB|BUy2-n#F>1)%^U#LwIR4NS;SF3_CF0D+M|y;aePLOPN=OpQXh<%YF&> zVB359@Sd$hxO$d<*7bs^SoQ&5lfST2?0oar+Ec$)b!ga;m(I=Yg%u?-FT;CV z@SKYD2$}biPTwrkuOQvCuLxt}sd!ul{cn)INz#9ZgqHNKNcVp3JjMPk>0^-Y{oHwq zouYJ{#I_lG*+?HeH&azU61=)jRoH=?6+aBf)2t@qf^3(6Rq0&5qi?Q3`fk}4FX(jDj%T?tO;t3n!5*MKkDV%R zgvDtTYgA1FWf|al$TXDh-La!w(a5#vpgHWJnTmGoE1$oIf<_F^`7qz%im&D_E96;b+rXm>hKuXnc)e+$m^>*k}scGk^(&>-`C zM3g_``T)DFhdh@T6BIPzi8Ui!lU9D{d!|c57uLsBmBVsu3yVhu1@#$U`GClNllL7v zHzQ;2*f1utK&A*Lr?D|x@EFJ(@AX-XnD zJsJPgPp*5fXY#1bCq@o`JTr>_f2S|QW-Pp~hkb(#oQZ7loau!9Tj*lYbP?H^pCH4WDDpwUB`} z@pCfZZMVqqoEqta<3`!PE>67vA=g*FtiuEm>T|vQhzmUU`gc4yo?T9GC6f%}3C!2{ zq8#mv_@o$kH9j@z$9(Xr6n!3iTb|nO@YSb03vq`S-ma}I6V79TQ_D^CG3sk(B%6+h z#L{$!<>N_sk&hFFu&c0crb6L|`d$Men` zqYU18Qx0~~ouirFeS31qKGTjoo-so5_XV}OlOwj&KTjpT?(xFI@kSbaZd$Gn=taA^ zB%eEP;S&#<2PL0x6%A{?nFe!_U$)FeNBv z1~9>fv@|4qL8YY;k;k=BjVP3A4Yv+B09gKsq<>l_#ZGp81|M~uO=4|*c~a8#rV~8E z@A^kPB3_KRwoeSZc7Xg#zn8*^_4rCL3Q4hxQC?Jx{3kH$0{-}RQ?_Ld$SiX+tV zUlm$PpLd3he!z9?`uQXt=K9f>nOtuUWYJvUv%~N5KjXt{M{pYLpW}JWbqC*Y9TUsU zy*}V)<>!$6j=v;7R2m)H#fXXTv7srhc3pbzgQ;YN=5BaGI zTCmis7f(z$kbo};1hsDO-{EeYQis#wJ9K3)o9@2)^bLo>!y7OzCHr@tcw%y^0Y4Z4 zzDO{Pg`d@GWM&3^~SAOfW3D&>iA3pX} zuM!9=z&rhVqcdOyU=E{W!f0+s=uKztbRy?|iAG{6Et7GMTo763d9J75Z66oAr*W&~gm z;3>ef01b)>j0by zm)f z=0{-2V{25H!RE$5#B+hK0X_o6A`af{uLwh5_9y`5=iqDfK^V5=;KibVI|7p(w*!s? zb_3=CV4G&L3zfSwfa(`@-TWPJf54M~!2l{37N-$gN)|)5$^|p9h*-AKLCKO zSP$Ty0P^_*0MJW&O#{X?%*-giB7LVI4!btjAY2Y806dHMIbhgM`X%`$>4N$*)&brD zkbWd%DPSldA3%A@7Oer$!&nVIb-+~SEC6H~selduYWrl<3848HxGf+BKr&I+(iXje z;bXE~Gk{SSvMqc9yc0n33Eb(V6a3K_1|S)`00#k282-!;Fd6V$z;(mlbr!Q8$+-43 zfbvm&k&bR&JW)vj77C)aDif9s!U& zs2-jJ!2g>Q0Ps0uGJyPweCjxW+BSTK*>D|oC+pabbh5)10NSl_8L$mNb~pYHp%C<> z3uJKUhILW(41U3&Bl{QP7F_!t&;aO$G?bn1K$!d!?V9=$Ms@-%J~3R+G7-K9&<{ZU z)G`414*Bc90mviuM!Ad^0I(I+xdH!gt_D5?*biU;Di7I}XqEuT{L08yF`uF3Yp>kFLrUOW4Dm(F?51_hP1y~Ls`;%{zFE{|R z0n-3)0O3kG>C4Iq$4_931V0BDEO zZ>UTKrYd7G@cn>^0MJo?2piIv`d;&w3XErvb_Lh`frEbm$o?~Kf+>i5!yv@T7B>Ug z%^SW#y!aP@%H&N?VX7~0n1XoeZJ-KiUO?la922Q*B=crWm~qvLi!--NO?RMy2-eCnZ#s&;&(HqG^!J_*Uh*R zb>9~0z{bl8%XkUGF9CiHyL|_k+KTj}E2c9NFG5-s;C~l?2HFh(_=l`B@{{`jy>G>I zUm@=!I^)`40M#o2bfC8Xb0GVJ>7erlZ@;3jyB~NOVQ-**z#D#Zqa4Y*3^ZWciE{Ed8e1i;-Vke=itUje!Th=#(&fP6rX=C>7L z@^A9hK7hjj>hnkzU88iu2>_BweLDFl@go=oSPCHd4*=Zy5gpN!uaI7L0JQ}QlWruF z^rJDD^dr3%0jO?BW-kEx3F(*6M_wa&)JAl@$@}(aHO*&8Ctto9qs+vEo_Dy#FOTg4 z4ca)3!K4dT*eIPzKH1K#vs)L8g|a^a4|)I754apa`cpqf`CkV>H@a_-_jIHu*@1X! z>}fy5pLk~go>$<>=jKf|BRjb9&3%YFPJTdiu)DO=O<0bJ@8CMg8VVpglPy<({v_ZW z!Z+#p|2*z4?|+NQmQ>$v>@NF%gU5pp<@+T}byEfSKgI9^cOUA7--E5+!&mrJ8-cIN zb}$u~eE&B9T_^6ka${p8u1y9{w@*>~qWfFQ+Z{mVAczA^E&7Ki0NW5Bj1{MLV=C6# z$2XsBK8Ja**D*g7gE^AEg}d(#xt zBD@b8YhGf$V9Bv8^l9Vsl24USgU>0S%f2DL^Ze5N=J{RpAM0P`|GxjVfSiD(0Zjql z2X+rk3Y-&I6=Vq-9&{`?ICxQTP4M|v{;dYLn%!z+tG8NR3^9fD2^k!c6Edf@(RzOC z&)ej*dADtwwkz6x-mX`>x$Ta$`@a3e_Uqe!-yyrhyLSZNvE+_39lLfM&~awRZ5_|w z8GL8@odtL9>Ez#OV5bi{Cw4y4#lK5@m#cTh-t|G(vaU)uVflMLh$14eoW~p4fZ#_m1zqpm%NW zZ|<$Qx9Z;a`*iJ7)aU)a&ai1=RpFNK6%jmQQN)@1I^MV7zUuqly6dm_J! z>Je2MwLEHn)X}J`(Osf#(V5YW(Z`}cjQp!Ww|8r*;I{2{g> z(}t`c^5Ia+(8!?~Lo0@!9>#|a99BH6X4v<`ZNnFj2p+L{#CIbXj|v$zd(^4){^>>O z7e`MVy+32#m|kOY#;hOn#n||<%g0_BH*MVM@iQlMoUlH#LuPvB@~pJ1D-%yWwCdrC zN2W~bGU@2#4wI)$uAcl&c6@evc0o?3oSiwY+$Fhta^KJEn3tEgC%;|(@cf1O4f$V8 z88~I>)X0Ku1?LJo6&4k~H!Wn^{^=Rh*H1rRlvuR5$Teg9jN>!T%(ztCzqqO-spNR+ zz*6UnURhi@r*d)Sipn=DFU^de znKQF==KNU&vlh?VGwaxF%j`w7uRb>Su}gF2&N=(|@W@AHO!YxTmF!mv zUMYQL_A4K*NL*39;>^naD~GR~w6b*Nf|V;)Zd=*7^5n|1E5BJ~tZK8W$Ex^MgI7&l zRkUi}s+U$(t=hlptyLecy0Gfn>fqJZ)nTg>SEsHXzdC1i@#^`jm#?l~-LU$^>NBe^ ztiHA;a7~vr5o?mxWUR?sGjq-2H7nL^UQ@fKan12H@2xqv=DSx-ueN)2;o9+Q3)aqA zyL9cwwa&F~uKi%`=W8#o#;6=UD~?Lb<@^;zJA{Nm)37yU%&qN`qS&rufMXv ze?ylIVH*Z+NZ*jNp<=_L4XZZPY-rpVwy|mByBj~=cxe;g)NWI+O^KU^ZhClA@uvBk zmT#)w)UfHqrZbx^ZgOo7-rQ+(*yaJ7M{b_9xpeb_%_}x<+uXSM+;&#*J@vDeC_0Gr(gTxwX4;Z>W&~rBTTgC1yY=GMYuf_1b=?-RZQ!<%+a_%*-ZpRB zvTYl;x7pr(d-QhO_KfX0+sn2u*uK2Rzot`7pPK$PLu($cDXN)Qv#e(0j*uPJ9nm{d zcZ}aruw%}Sr90N|*t6s4j#E26-to;2*Upfg)}4_%lXhn8%-LD7bK%ZaJGbp@*!kAZ z)4OcDGIr(cD%-Vi*NR=$yBc<#*mY*t#a*u2klOCGv9$wgQ)`FUj;(#THm|m*wxV`! z?ZVonwJU1Z*H+gy)Sjq4Q+u)2wL4^Y_uYMVNAK>x+qQe??uU05@1DPV`R?l74ZBb5 z$=s8@r)AfHCz2xLr?bycI9Y=Qza1M7)a!zy3buMk^}N1aeV6(k^(lEq>!;Pv zsb5;ZrhapMO?^}S$@;VPpVwdB=ew`dzOa1*_oeU4*;lb|(Y`hNcJ8a+*R=25eP{Q5 zv)|a?W`FnnvHO$uXY8M}zjXhC{VVow+h4!`=>E6%zrX+E{TKFMKHz(x(}A!90}hNl zFzG<)f%ylPAE-Xibl~KHvj;97a5V%sSQ{c6Yz-L=1r2i>mNjf{sBbvlaJu1(hN}lH z2Rk0@aWMX1+QH0&(+(~?xbdL#;F||OIC%cxl}7)@E{ze5NsYrBCpAuMoZGmxabu&i z@nqxYjh7Gk9_n-`?9jkN>4$O-RUDdsX!)Uyhjt!1a_H2dPY-?9WNPZr)VryF)9|KA zP1BlYHZ5*i+f>_hwCTO3bBE^~UU7Ky;rhcz51%}I`tZ5K-yFVr#B!v~k*-Jj9Em?- zJ2LXf#3MyV<{epdC~;JrkLO$ayYuo))_pVwgvR(ki>VIQ27pQpoqMj*~$Q9J{T zcFZj|5Gy-R>GUAuVfMWa2ODE~x(Evx^}+-#UvH~K+z`9*N-pSUpf(F+O_qaWAvjT4m2|3=3dp1K5101NM~G@G4>Xks zlk_r#E5L(lI~jiAK)tBgjd{Xw{q{B`52`@U{&@F&AKD20MSxEWuL$T+2A{f5*SlMf za-aT!}^F0IG4Gjai`JA=xlT`?!wc<-6(lCtWpZa8C*TFuHYW{ z#JyNk))(g*grlVQ$+i;>4~d0e#bdQ2cyhG zv7&r9+Q&%j^i9WV?hKTFEKa;0k5#Ri*x@`8D;OU(9zkC+89k4~cnv47K7*&3RoGF! z$XI4PkA2uXjA~;E6F5cX72`YOKR5?uwXqm0r#?3Rjh<_#@q_WbaT#YSy<}W6UdFEQ z=ZwwRU)X4DF}}fCj=y3J7e1wBoHIVdLMwm6Y1FX*V;c)(K`fZHVj-+Gb{hTzJH*an z#oDLX<@*V1!`iZTtUc?1m(?BFop_($nRQ`zv99cHW@X)2cf3vSf$u~0WWCrutT$d= z_hEfm7z<|+IOS~}i)2ywuy_oMWpOMXUz1P7HH0XA@W^%VHDRL+oMp2tIE;nPoEv%VD`J zkL9x|Y$_{Yg=`v|&WhL!R?JFRDSMQav2s?yD%ngni_K<_u{rEtJrF`hP{eCR_oY$wt;PA zo7iTyg;lZFST)o)KE#^XVRnSQ z&W^G-*fI7S_9pu+JI;Q`-ePaF6YTd`C;1M0m;C|j1^;N&8~fOMMuTzCIL`iL?8ny{ ze`hQ(-ZY+N?;E>t9{Ew@4dV#=Gy8!3g`H-9WgoJ?Vddmf_7OYF{*Dy`pJ46pTCC5d z9pB5bDt^21qOrnQX&hpovVX91>@)T``zJfk{>8pvU$P7AD|V56&AwsZvP^t@! z_C5Q7U1tBouCO23RrV9R#;!9LYew_Jk|8WCGU40S7Vg7+xgYoE0X&cg@nGJHhw#?C z4R6ca@%Fp}))sZ-ck)iWGw;Ih!l@B=b1U!0yYo=qgZJdU_&vNgznAyneR&uU=Mnrq z9?7GOS{}_~j4ydCkK^&iZsYgH+r}P@Hn}_jE&m<#VJD1}#vhG$@gyob}D z_M+!GZG3>$=>?b%n1-HkI{M8bqnIb6UwRb%R2h0j>i1`&=bCNI!PxjX-r&tOp2X-q zAM5=t8cn<(@6Ye&1NZ}cpmE)B@dtSlPv$nG8EYg`cq+c}o5lz6!F&iG%7^jcd;}lK zM`0AcV*JQQ^9(+QkLBa|cs_w=@+>})Kg1vAkMK!+GSB7?p2Kr_9?$1f_*7oN3;8rY zofq*LyqK5pQvN6}`TQxq0DDcZ@u&Gh<8$Mm z{29K8Kg$>M=lBx-JmxlD;LG@n_@vd#d^vxGuiz{BD!!Vp;ji+we4TNaujd>1M!pI6 zA^+l=`4(QqU*pw$E8oVq^BTT`@8r99E#J-e@V%HPspIv0AK#C!dpGcdypbQ`P5dxF z!e8e{`5XKg{|$eW|CS%;zvFN5xA_VFdw!C?!{6n9;HUT>`Fs3N{C)ms{sI3BKh6Kj zKjeSoXZT0_EdM+In18}Q<^SO4_-Fic{!f0M|BHXYzvLJASNtOXnt#K;<(K%s`FH$3 z{CoZbzs&!KU*SLUtNbT^jbG<3-Yg7(6@vob6BA}(!H1`Pg`e;j0U}TY;b8YxB1E(n zZA4qqPP7*tu;{L%xKnfzoiX=w7moC~TUbRm(Ora!9-^n{CGHWu#l51B=qtiRxQGz< ziAWJ8qD72|6>%aS-$qOn{X~CpzZih;mJbvUiX@RNY$8RZ3cE-XgT!DlL<|+f#BebJ zvrD5yx)?1o#27JFj1%L<1d%DS#6`#9R;W-#VNsq8nF>lurc2V8$TZ))l8T)CqLNwWijv}z@}RszC{H#4gG# zk*IJ~`c$f{q7)JkG?&cCpQ?%*lNzPUk{YdXyu`7QDjpjdtK0CX#NSBe}d+psLPe8 z%ay3*C2DzzT3(`-m#E8^sO2VVxrv%@qUPIA^X;ek_S1a&X+Hh5Uj4LQ$(lY{(z zk;=|-k;=|-QBrPnq>>LT^#hjm2rTsgmgNJMdH_p3fTbS5QV(FM2e8xw*cMb-oR?o# zo?C)pAg3tk(Moi-W%)Cal%GdF866p|c_zgA6_;1afuqb+R9NP)l;)RH-)XNbE0Ls8 zT6|QLQY$Jd-Y>trqHuZC z9FANXqlkN&Jxv-VEiFwN4LH?rPJUTQMEQ)|QlE-h2vnA~%`Gg;t(-BXD1WwRtZCDd zMxzc5NnT{0VahAbGhhYhkS#nUt-W+A!-!FlZ%LNoEjEQx6iQXdu27mngA^L9&=7@& zDl|-?;R=mVXrw};6dJ8ihC*W$8mrJag~ls1L7_~AvJ{#qQIIT;+X}v@5}E8Ptp_vu z%c_xSep5;+%XA1;r0B{EXUl-UtSJ?g^`!`l3*8J=#Z;F1ND-B#%8(wr`e`|prM^lG z1*8;YkwPj<{j>~(v2?*dWro0??Eq-N%#Zx6;zdT2Ip`&DWp+gDt)PF$kV`YU! zMTNN)g}EW_Fxj9ee@aE5cY=9pgrle;xX4j9757KvtDrI$Qlhztex=2ViYsSm15nVC zE(`CITc8LtB>6DwR^2=r*oKsZZswF77 z2D#Of6(fgk^5k1hNio}f>%y5;k6C~QfVtSk=2F}Y+a zs%W~8L*amwmc|m0+Y*+NqjdKb6={P84%|mt@+9)HYZ>`khF!_Xm&o6a`#aT;{qsFR zAG?;Eudv0gIOaSv(Mi#bv1N$Tyii$Zh}N-CVgDf>^#g{sund^i5)K^Zr9&WfHttRgH>-3XjJr%i zfy2En1r~WlEW?!{iX<`(he%Tqek>zZ{$iDXq*s=}Vy}p0q{?5c3|Z_bEh(=kD=96= z_Zg)NTcQg)N)@(5qM%U)m1s(3l{1PQl@&oH-Z4vtl3k``XLyMVEc1$3GL-Bxg~q5{ z^ntDWjv*NEscaM#|_YHBv^!M+ed!60mA*DiUKEt0Yw@G)~oR zrK;O;y113PxZ_lDD_qCaKMBX)dOaEg|ocEkF|s? z6O|F>NaR1!<3av&JVBpiyS(b-$XBKsRbJ#MFHqqUudr(O(gMEriUJw%qYglZ0+QuO zrNc6}42LAQsG~1R1Ici3viosMMpY*wgRNTn6B!Rm$<5D0N9vHV0K1nkrM^rLvEL*t z*nWe6fFWM_hIlDCFHCqB>R?4%FSMx{%V6BgCtJRg}_^Bh_sLdSB{QRW8-TDk9y#stc-f zmEl$`U8^QkPO1r8xP^H2r|RM$*$PxHsY7(6jI{RdQDsVqS5K<)sxDOJ)g7q5;Kfw; zo$^AfmX1@#L%e!Vnb6w1+f=+%cd4#=cb58UOWFLWi&Uwqi&S~MJ4k)CB~PI43e^SG z56WcUSbY?o6ms^B*bzt&ph*!@g6N0mD^mx^S$xE$T`Y#y|nAlPb z|74nSk&`xob~RTbBj~AAs^1X0XQnA0n7@#QTNN4SMeIL{W>sW*YnqgCYa&z3Qi92b zrw$)2!88#O0SP8zZXV_+Ep_k_m3(9+Mms4(WE7N$v6#QnVnj+oVIUE^S+~*`+;M+7 zb);0&(?v4k3rRBIM~cZ%J3S}l&MFhl(@6=R5+z;^Z!xwMUR)_~ix}u#s8%;+57c=i zn?QY0M*QVulMG6RvFb@MGFCr{#_A`~Sp5VVtDit)^%H2U9#3N<^%Jsw(u`G4n31tj zdS*a9x*@KgwDou#8>RC_=_l(bJtGjMX9V;uS!}d^f{xbwqVSj{I^Kf%Xp`Z%2)r_3RksPCwzt=_mU*t#_Q=GC_9umRSl-ke#w+ zmPCFN+%@Po%N??0DZpGzAVo3%b%T#*+Sg0s~gfZrFFELe~7ZH(f~{A zMA_BzJFwI~D$PA_rRNo5_49vhoGyKwwsL}wC+Jcq=u#%=QufoO?5C}mtmiF~_54t> zwraAjr4-FCMe|G1wUnZ-r|Ro^J~LL&XU3*#Yp3ekOx0FT)%v7reNwgjRIN{{)+1Hd zLaHuTs@5x2%e8Ag>{^ap%du-Yb}h%Q<=Az(?OKjq%e8BHb}i4Y<=M47yOyWxD>hBr zAx+Cq)AG}_{4^~;P0LHu^3)VWWNez^AE#SmoNh&Nsue}q)w~z5s&{*`l!LgG11#kL zOF6)@oWQc2z)~)-lnX4&2`tMAEXxTj^#GRT1eWEDvfE^R0&Dp;E#Ic)t9dnC*Ya&z zzD>(l^K7`T<=eD;o0jkPcQxMzIxXL(8_@6kYxlUH%j;U-@&CUHLPxF2C|;#C7?VKO?T?D}P2@mtV~fBCh2t|3+NP zSALDSmaqI8ab12juNY-l^NPT_{L0S}*X37!j<_zr@^i#>`IVm|uFJ3d9C2NK<>!d& z@+&`&vMWCa*5y}zjkqpvnwFQQ%d7kx*Zbkgo~9V6dy9^AcPIU%_{i9PviOm)%AJ9A zvr+DdxM~)$%H1MkmAe5;allesWUQ)2VBK7mI%rnM8jDLC7p)oqsZ+?s^XcVpd6JkBmKaHfml%BE8S%*V02WhA~9 zI!vA!;6-D0n))N%p{XvKe<$f=9GpD7%x6vadvUvncniO1Bid<%S)InXOna8qI;_zM z9zD!y88b1{8Qa;}J1cvNb;-C)C-3Pvj zIjz}K!ks+KnrC$$OLv-jO|0+D{8Q|?_Kb%zyM=b^yd=}=Oi$13=1j`!Y;`75C^0L` zTBnE{dCuNQ(lM(ulCDP*<+1ckE0kE`usZ$IGqaImrEC5ailojHCbDg43H>9Unmspp8cU`2pCyF&XGdsPrBO@y_Gz(Xg#$@7BXDXDI9PTuSIek+4 z)?=ZTG>rw(P+KTW9BOkodCn9k%Y}TWxlg#$C(KGp;*qcs2StGdY9?i85lMEcRMI!B z-Y39FvD^A|^BCJN>_+4JD=w@rRDkL|v#s_ep$@7DX(^*KS<`9l3?jAc|!m7KB*1vlZBcNRwD$fn2EV3{J_mF3Gk!gJHCAXGqwvv6*$Iywt27 z&Y=9z+2PLCVZ%me4jZEqJ9k5RTbbS_tj=haGA^^ORjU*ybJ(1%`jV5vb!~Nl^b>?1 zC+mQk5Ixf~>&SCqEZY)PFNy8bEfm?@;m+zhWr6S0)hv``5cD6EjY_kOl9 zC`_E}Dg8s?Z#HW-#2*L=VOYy&vn|Q4Yh&r_ ztnAylJIvG$Woz3v+}S>?juGwvI}^SmtWFT_7*=N@d}mmlnQ*7DIt$^>VRb%)yM)#G z622>}&X4fDVb%yIdnDZ1M+P1ZclMQmvT$eDFvA(t_rK8bZs^z*ysglYa5v~kxI1(t z910x?_kfOsdqPLTy`UrEd!QrX-q4Y7SeSKyYy#n7Fil9dH3jvPP4(#jc7~C^MT9xS z`#QtXlJ0{O4}!Pdwkd@=5<{sQ`$Y=4Qn)kHQ$4JM^S(ZHX4c-GiEfB0A6t`86(v1%L<#>=fFf_3)nzcuXVo`o5eA_J9aBN3nxHB#+;*J5~ z&iG#=g%jq2JONc=bm(b~unwZe3sVkRvSd)`AaoX)=+@CKqD99u*1jF&C!&|>fChs9 zlEmqk(l>ueM5xs|U{g3ZWY$f`*<(WDa%HEpf7q; z$b-btG_*d{=8a7W?Vj~jojp&<&I@&l6h|JqA)eysjBs`q+V0JH98d`zb7-0)v2!RS zq@i3uQVRIpMhFz4&eDVq0Jb;7q0qJ8qzO1Wkh!N+0>2n(sF!Pz1&`=YHn2jvxtF#< z=m41Jewpm_MFY25(?SQ4FsiKq(qvQsZBb)vW`uPB#zxXuCxTgv$t^t*8-h!o(N|T} zt%MXWQ(Ks`U*9G0A##=_XqLAKMzusZBOpITnu{FJZC!G%P_&8& zG!ms_Dmo4H;T}(Qm-p9QanS7?a~MmS^976<=K`VjQFtX*4Y9B77yITL_}k=5+5t2GV7n%hpp z!^j<-!(i4CVK~ns6@ifmFba$ct7kGL9RZm#nrQ5}ltDBU7(+A^7)vx17)Lb82#hBh z3QQmx3S<%u1+s`H1%Zh~LxG2gh5`>04Fw({nluC^5e)?<6AcBjiG~6WqOl>6Lo^h~ zB^nCk5e)_M!<_v+W}ZS3=RhP+m7xa_Dvridghks%^2l_4U1G|c&chqR0$lC)fgh_ph6h_o_npPz}lZ=P&@oxb@_(Ib7f zd&t3I#JCwhk%1c(whTS9y8SM#Gc2|P#-NzHO-3IIC;5+H{e64+w!;!ZoiNf!wM1I( zGRp*i+v{!T2Osl0W=_J_2mC-1Y%kU}#;xb#%sP>mTGxwWO}_K7 u6DVnMF7CfTf;;T2B>$1d0N>ue9ehlIeHvNwGfvYB7*SH|%z3GX@xK6@R?i^- literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz-pRBTtN4E2_qSPBnw6AgMc.woff2 b/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz-pRBTtN4E2_qSPBnw6AgMc.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f1fdb93524e7a84934cc4f6d4b731006059705f1 GIT binary patch literal 3516 zcmV;t4MXyGPew8T0RR9101dnV3;+NC03LJz01avY0suh(00000000000000000000 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 qeFFdh000000000$2qA{P+qPgx>^#xc| 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 C6V#>v literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz2MSHb9EAJwuSzGfuRChQzQ.woff2 b/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz2MSHb9EAJwuSzGfuRChQzQ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..54484b1e3edcbac1fc80f13cfa4a03cb29c84bf1 GIT binary patch literal 5264 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz9TIkQYohD4BpHvJ3NvbHoA.woff2 b/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59Fz9TIkQYohD4BpHvJ3NvbHoA.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..62b3a15f698a5e966f5f6b4a5b6d5081e340c654 GIT binary patch literal 11032 zcmV+zE9caAPew8T0RR9104o>(3;+NC083B+04l}+0suh(00000000000000000000 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 Scv!ceo=>Nzrn}1J^(g>##wLjX literal 0 HcmV?d00001 diff --git a/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59FzyJ0caWjaSBdV-xZbEgst_k.woff2 b/js/assets/fonts/RobotoMono/v4/N4duVc9C58uwPiY8_59FzyJ0caWjaSBdV-xZbEgst_k.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d4fda538a22e1046718d4d158e7512eae086f69 GIT binary patch literal 740 zcmV z+RAd76BT?PY(kec3BTZPYG+|J-?aT)o_hM=)4(kF(kZQ8ikqvnj&)5YH8+`?#a&gl zxH+#yl-?<=S&E&DmW+2#BsDi@LzUNfE}?9Xz~EW@bt&T7T1j+KkvOKdHbv~OOPABn za(uJDUczIFiht*)=b9O4|4JGycV7+9UDs77jCcPfdUtw2xe8(n$jC_jZ-oew{p5vQ zP3_;>&n9le6JPK$ezPn(;ORpU1@P{?V%0++CqvtDb;ZxgK5JaPQ;c%kE|Og?h1qFJmamnK?=b!n7da(GL> z5rd-0C=H7yHmctsDV5E`>Cq~b%2%jLJ#->xtGv~*$(RA!RT+X1p~yf$B9O^djTIG) WfnL>UuS{>Y&@|G~*rJ320000!p+^V+ literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/augur-68x68.png b/js/assets/images/contracts/augur-68x68.png new file mode 100644 index 0000000000000000000000000000000000000000..962c3acf2cf6ccd1af5315e28c73fa62e6bf7560 GIT binary patch literal 4856 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 CwS3qB literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/beer-64x64.png b/js/assets/images/contracts/beer-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..04e91e459f469821f1997a6f2bebdeddd64286b4 GIT binary patch literal 6545 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 Q4gdfE07*qoM6N<$f`!&!S^xk5 literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/dgd-64x64.png b/js/assets/images/contracts/dgd-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1bd308f7d4c78e034e522a5399663ac6d55cd6 GIT binary patch literal 8203 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/dgd.png b/js/assets/images/contracts/dgd.png new file mode 100644 index 0000000000000000000000000000000000000000..09b2831aff5c3e5b7adca0c5cfa14ab4394a6c8b GIT binary patch literal 27070 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�qAnC+Rk} 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 literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/dgx.png b/js/assets/images/contracts/dgx.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac5dff1b2cd4b6343bb7bc973a2601f1c608f03 GIT binary patch literal 29751 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 W;Jy(3`gJk@00009VZs?55@xeFKBN z`w#R_m9Q&+F3tO^Scx3shr6Bk!eRSgUZQdCruk&(&F&X$mnP*zs<@%5Eg zP|(uS2AZ&N$r7L;KojQ7n-4J`s4FTux~ite(#i^Gm!XkSLQ;~MxjE1xplOq*PF=Zr zjhDAK(5RHuw5FC;Yg-_&%gN1~w{YRcEn9qjeSyvZI@`|P-ow*VPhWrc-hJWW5zVcw zKzj=c3sTjba_`#@AR3oTwGnZ?bvB$ zW$o(bR$ft2Ti?*zKcT3&BqA~rXl!6`@QKrBW`&d}07IX#B*-tA!Qt7BG!Q4r+uens zgH_f8$l)yTh%9Dc;1&j9Muu5)B!GhKC7!;n><_rug@i;3s-3!kdIUXP977@wAH9B> zuSJ2U_2D|dOUqw$g+KXuyh55wV~g*Erz!vZeW!3={GGtnr*WVs;rxN=4DT8CG5=r@ zcv;SHpCN|f2U7y;fxGbxVa#_JBDf3K8`kSHtYQAactEQ`p3$O;_W)0aiuQt6xl3|q zu*{WraP;}E#PvhCc&`WZog*v?mstIhZgkr)v47<9Fb=Z4$1ssoLDfib*&cO?-_tfc z<4ruhQ*>6{7o{sMbNlZfd1d+K?)h3CuM5-X|CQl(dVcxy!T*-0cANWpP7jE?XR%t$ z{^qmNJeL2578GB<<;J0R{^r%=jIS8Z`3Cj9yL5*kw4r+SEWtau&tH_;GhN_yIcH;8 q^`eV$3-iXs*?nIN8$P|@x9{W+n#VuqXgV;w7(8A5T-G@yGywp%&m|iG literal 0 HcmV?d00001 diff --git a/js/assets/images/contracts/ethereum-black.png b/js/assets/images/contracts/ethereum-black.png new file mode 100644 index 0000000000000000000000000000000000000000..d7bdc4c904012b2224306216f1d36c78eb29122a GIT binary patch literal 147077 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 ^<8Tpf9A?3V!vp;Iw4({x>wwGt-<{c zc+bn7_{?k6>hKC22e4wIpTziR>>;6ix=pZoVesVge%CqW!jWgMe1Ua5_zWW14q$rk zk#3>66rl(IST4XmiG~~&2b&Q(3v|eO0q-LKfHP)+EAq*tZGk8b5^FT1*TGWGW{R>o zsQ19vHn(gUs4)BL^!!WfR(#RxE^1g{Tw$xN^R_;_pN}Rm9-q5!TVVAQQ&xZH3<|yH zb*#E|Usdg@cg`-7kThiVj{Vj8%z?i43NXdyEl28WG6(wSJJV1#e%sLo^t)l&F3;or z&Jz#~g@s4vEi!gp&yR6^2pJg}>3j&dqaZt(7MehhZbPTzX01SC?sU7Z5K+=S{J}e3 z+4GBpvV@IKEYI-Q2QNJKt*slM7)$rNs1LA@b@tr3xWeC8A5b*b*?TAI-iw*X|I_uv z^0$y#MO=LHn=7in_1-2TK{E2P?cZ$WHV-7QC2>T2%WjQpi_w;XLn|IJuO3F}B% zYIxlfGAQDA3;{6%>d`*pCYN+mrpawDBvZe;6hK&nSv93V=t>hyls~skUSWsZ?ps}| zl`SnxirzwPjSun{cND?RwRm36rwoOoiPvX$@9M1_Z7q#d-~hisWHE*F?DAJx2MOiaW1OxgYhivYpQ!BMplodIw`N`qATI>t%jqY*8F?hvy zZM;nCBRE#h*!+?m)_|TA*PUx?WVvtu*_Mt&YbwP_W-jl}&m3+q(n=8-j*=3C>yG8+ zvXtF0IJVl_^~jb+@kN$Vx6qcgsI!#i7gT2({laV=6Yae_JCae&t$$B9D{Lut?8k;FnP@#0lj-3AL_YpG+)2xh27eS!ugJp(N?SPK5W;24jo;I z;2`p{m;A5&!$ywgqPc3QSPDS@zXV$PCf=p%gV0^; z3fN2EncDsIhhJvd!|SAZS10f^6L7_lui=wFjlmbuP=ty6iom&G<0f3-E=Y=}axSnf z{J%8}JS>+bJ)?9zlB!IeFr1TF;34f{Js4+bd?u|>aC49s-p2g>WBeNb8utw6I`db1pj|R+W}@27fa! z*pinlNy!BT{{9g~WhFUC7#5%7h|y|ZC~hynj73@7ip0_)R#F_gok@Pkwh`&WI+)}e z7N4Dvm}v}#Vh-I$2(ENgz9080=#5Fo4Ix6~NU@6FfAI^-nmExCC!OE;7`)Fg4>%8H zU)xL2>jRb|k*Cx!0ObRe{C0;;us0cVLkP_LI&nEmd1r4W%g`scU)=`zj3Y zufY3J`wn+F@2!GfZ}z^PLR@H9+2F0f**Nj_H1?x4xx@49T1|98ZCZAlE6@KW|Bg+E zTkH2ODbh%pRo%HgeHu;YuG8(!`$x;Z$P(-gS-AsE1zN4CVt&?c@evl8+fbP4%EIhM zWVtfiw|1n7VrIwYHhY&VFVwVmXu+NZSNY{Nh{J9$j`4{pbj-&C;Z zi>NoO#c|9tnWaeBe+U^3Gb#_!iUuBx8VArco5umx?1htpwMq>CYb z3(xLZl2CG}W8Sv*WUa1w>#4q>gZ-&Kz7d;V{_KeI+s?btv%t)j65C)cQkI0}Hpma2 z$Q!zIfumAn&J}ky_Z?k>T&%4-AMNcr^q2F)Z0e_CXN}piqPLWZ>9vE_oX$#Inwanh z(C>E48K-rcGm->}kB?2&e^Y#MYLQVIm7}lzLFMC;a1?VK3VJic&kWV|UaBiA%#8O} z?IKW_sx(G}f|8Wep5&1q+yf*x89od6PF4gt05L=D*=_wqW+&U~?_5!)k+SRh3#uAr zxq0K^mYQ9Q?f=rm6*Z^l_BZ5fHF1unjNHDa{8~9WzbZMS&6$DXxw(}o8S`9O(vrf? zYHN7LT?4(h_hg6+gxFp(*x(4y*fDSZj&1~~WwdXcI+Igt0c(i0wOVp&a&aQWSewO) zG-q~nOnz;a`!Ck;JJbJ`u41g7HH-@ZZKlwrU6qj3y@erj4KJ=fGlt4i22bCUEYkMiJ z;N8uA53h3~C)}Q=7Sta4_^BbdW8EfpRXOvPb~!Mx#)a1G?rNAA!9O+Af0qWKhl}9+ zGc7h~hCW7J1c;*^e&nGusX?FDKGD*+q%1-cq|fV^XlWQNiPSzMiDB7k86~L^aySf7 z+36X@$gR$5YqwK%%HqK-Rd=g}Dp8=aG9XM#L&^zAHt{ z;-Na?q4OUad(Xg@M2g)-`_}^${r?X5f4KH;w>~Mtt4|`ef=8c(KqbJGbgwA1E=Dnl z!(vTYc~5ZBx!2ZfUV#5!B-mbiu~_C{thn?&_BtJ!!pGB}O3S4r#KdYZri5|csOniL zb0={|^47%adC1mg4UhD4&ouUKyRj%YQI>+@GYkbS!6&r#j!}F5NOQI%#%4R>OG@F? zG_cNLU)-2=yv`PD&q+Xevy^;eFMAsSjj>q?(J4{>IhNv1hmpnD<`*XyWt#&c7F0L~ zN)gl)U(#FR$cNOQ9iNa91(zp27s9*Xhkckg;)l2;sg87zcV*4~)7d{Ve93PT$iK2ptKP%L>9`(c!Fp){c~si?0kL6Qo(#+|m|h8*cZO@+OxORudg zOK~Q!eeAwH=K}(hD+e5v%Ns!x3CNzrYcz?N+i2PXOgOC~@OM8py z=uKdc-aZh2v`SPSz|Ahu8!0?MzvG$Qv;n)L%VCrxYv*`*&C<$vjmEeA_UBf-Woe6( zC7+nwxx9&dIlI=miji`%Tp7crL!K|oxu~O`<0Ss*_%phl-MV}Ff~tn;10k`!ap#ULC_iT#73e2MFXz3-n2MI zOtzXR5$ah)8+osexQim&@#nQdCPu05x|%Z7$jnSnjL#`bvASgDS_I&E}XME1w>z@!4M7$M}9$D1jkK^U7 z<}`-`KND|N#}vs{-*PT1Wxl1TrTXZla(Hu~6=DpINQ?^Au7B}Y$xcgbbat7^ zT%Kn%WR@f+0)u0caCxeg?~pCXMF9&J_D~@F0ca0}!Ln#3gQY=>ZG$_= zfpg+-<~d67-YKa~fy?|=vA0au=Bh74|V z^WdpjvK~V`I;pQr9LQH&=C>BBsfHi4X9ukLzhcVwb z_x+&E1yJRP@}<5>fO6jdiZUWj2$i^RYA^b6pJgtEo3*O@0;Y#fMD{InMP7_3rB!xY zY>O=E#-jNA7QGx4pB7dbVXtb+2N zi28-_PlaBHvZjNRlV-@ob>?A0SW1eF4yNFsf#EpK;U))%_-rzgknE%+Bu0ZJDx)+b zN}G1xz68aG(=KIp>k=D9$6VV%S0}{DlgT`Xh z(eBYCz>^Cyn43w^ZbBt76J-Wa;lLIUe}x(F-mtyGi@fDNSX4#7o?WNrr#7X;WTM_y zY;x%1wfn}(G;+z{#_e0JX~RRkl_|Jtl{9CjX{DHSYg}cSM)c|0b*3}5K9#M#_RsLt z@Z$MC+U&+&b3#jdt1Amp_m29cUr2F|=FGf-CaYeOW9_XumchmXo%96D8!RyN>>si) ze?Nmg*$^8{73yLu*K|0SwK>eF{O1>yUe;b%&{^$>$aSVTZMot0L*0f2cMj#T5Y5%U zBgDcuP-!VM2k1lNVYkbI35|&-vl|PMjxVmL%@UE@Y>UUai@*V_;br9)(tT1TcCed1 zJQjGGGMbpQAHROn+_djYm7kN8miCcw4GXpwIjuCH4*g`PFEo!>C$1bJYnGiD16C@P zMTs%5OrB95VUMsfOH^81P?;sKoGS5353!dm$RiOPn;vC>j6wDe##T=M39(F3s^19F zGa_^$Ku7Xz&XpzNC*MTgEmv{jh(+t%S2w)2NbmEOHtOo4{BBn&O9*)&E>UDPYai&4 zA3&^74ElK++<>*fNd6#Sz&!v-Vevhh``--V`+VFBD33^@7LUpV^B_6Y1ab2X=QYyk{W$Au-0*QIv;8<5xxKN8VAI<-Kw}q+Iu18|h^XP*kum z{KZV@h_;EQafOi}JEn3kRTfd&SD6)9$NIma#O~1sA&0qNlwWXQbWmAWNov55vg2(r zVvRm5AukDq<^m1*ay`pwUT9UO+4NMNk`$4jod7FsSqZ(n$N zU6GGAuX&`%T9u55K14c&gh(%hhG;a9fI}_w9Dn*s?e-BDQWKO9mHkfKI<;T(JQFFw zfNN~NE85V|x2*7Po?sw4x}>}!eqSN(vC?rd7P3$Iu+xO;RDI*L+%FGOrZ0(>NdFB& zb4L$TszM%9&qJxy;7z)c^W<0%^TojPJe%`Lk@}8xHPQNEpmOhqohKH-PAWD6YD{`g^UfS$%n8eRGSseLYH0y{SB*nPyjq@jhJf zBLen?8vJ2oEL*y#iQ-2vpR2H+?sWSa`e?8}VH_fz5!w0nvz*Jy7ZccjhrY)W;--W% za>BX`FZ}1PXFxN%rjN_*^2b88FduW&SX-1qG=s~tR}Qioh#h$?3EnMFrUqUVUD9d| zIue~6X@T%Ek4K(x2%uR@%gYwPUrnxCdvD9AY$)t-tUk56++VK^O|4o~UA)SY;@Dd~ ze9w~d1dU$y$!%V~`_$0jUEOBiGClKW%9n}<<8obj1I<d1 zXC|}tRi=t^|B;sm%L_M*FKNzU395!b}LVeXlZ;?(H z=Nv9|ZnVvp@{dh@+R=%sFRPFC*RJcUGDO$5_vQ?pSX(ZMuGNRSSbkq^29>p0WY6!d zN*9kN*N@ed4>>`2X^F@j&EOOJM|laxVFhhPYO(fKvl<*=aOb~L&wa1r38i%L3$5t8 zmmUjly!DG)swbB9WhjsI?3|aR^Xc6C+^BO)Nlj*7zH?Pap-vZU8>reG%c?WSo%7c> zXZlKCU-PvCZHQj4=q^y!`ZcaQ)VcKBhH{Y^qmIVlYMIr#qTIQ>83|ahhIylW}5hEHxvL~?o(MQ){B7kksLj~5(-3-&W6hMiBImt*aABKN+@*_ksG%?yd{ z+0FrHihkFnT>;hOCzls58|X??UU9B&&5$*96A$&4thP-?$C{np`L^m*WI{N^%n3N< zb3vR_LE_&Qoxx;?vH4YL$`|$7%`0m9?q3R@A)^83-iz|%(!Vqpan7CM=N@qf{14y3 z{csL`Tg;cfD}D>#ksk~GCBFqvr+ls<0&aJ%LL`5Mr4mbsJ{D-3Zd>@+VIVlu1iL+5|+uncy5uf-xrF!%Jx$5CI2wTk#*t-%Cxcy(9L) z?F~^r8zv{T{@Jaixt-0`v3E_r`;76taWakt$UjitOs_$@aj|aWvH4TI;xo3PdZ-u; zStUu=K9+xQ>=-VGO!x-I^%>|Ti0%eRk4uNGB#cnzHBBEV1?1v3I#Cyq*;bD-x^%J< ziIABDS>&b5AKZK4-k%uXEmoRi<>*+YrTD)j$F*-sj$^Fm)G6f^yytZuo8!X#ZRP=U zf*LTVhR7lHKF-o*aE2lik}Qn)AW~Y}M=`zb$T+$^Qne+d^v7KOkAQuyV9<3U?=q4= z2K&*hn)!v}`a#Y^3NZu-2^fYBSz>>asqw=>?pR|FaX!osa$V++jXz9K{v6H1a$n44 z_eU%15`HK4UsDg(aR0sLNRgE<-P?5a*vt1(aN2z@V;dp|9_>SzGsIMkSYSG#YWjEZ zI`DZxWS3b#c__PKCUl8jmg9irZNez3PV5H0JaTP`w zCAnAgCSX!98Cqd;A)gaoALJ~b6H?{VocxT>2|T?$bK-`fIZYU%!F`YPJdJw z>W>O@LfAd0KPn9MM}-*^V&?QG3H`aq*U`fJ^QiCwUq>33dmT|@_#=6Zt_XPY-F^Ou zt#z;UTKD`D%r>3P3o{|S!&bXtR?mQ0qZ{(VoDkkbraG0b*3E#qOSjAm^QiDk#CfYQ zn`XeQ(K);@W5SS%2lMQ~Glu?5>WF3>?mjE54R~l=ZEid&Ot=?jLiinPcEdE!f+_RD zoDhDFdNC@Vd9z?5y)a|KdKCu!@xc5D^ZYkm0$@sceXY-uEKvS#(R+8hRr4!%JI%qJa31A- zkM#7N}-$8q?+Rx)NW&>kY+pl=rCw8DF2#u7I(|Fte z?rlG@QKPnNX13EhsrbkIc)NH(ZJ+)Cv01NZ2tSmKd>#%#D)7F6pP4EQ;UE~)N>7-L zgU-|g+W(+kJyXYpUT6VSe$<3+c=lYo<}zT^eLHT{<1N^gdfrcdF8Au1y*N$@3)yiu zj^i_M7_~lL9H-1ZDh|#ZAY&`@;MGNWyG=rks}hmsvH_BlAG8uwRuPFxwB(^G^2`y< zIt_Bg@{0!;K4XmxLU&>U9*z$QiApu-DbBz^7h#W%fm@;-aI_`2Z^(ku4>XBYMQO6u z8B<`0NbSzJhfNMGDDrRHs!jG1%|cNK|kc?XYy!6&qNe zvR`unk%BSeCfs31(Dxw3($)%HLYJ$f2JRXa1-BbMTC$zOJRIuB*NaKB1Y}$jhuZ-gGRfWF{e{A2OU7yoy_QK*bDofcu^- z?YYT-Q_7mtkXfz%iIJMEefhGS-?nVx*0S#gXpKc3`B|N{1-_F$3vPe7Y5u)S3w^qL z7*eN1Eqc5t?GeY0@ix6C(o!>bf^s`*iwuU`C?^tKWw&o=s9W7pWDa6I);2pVL*bc~ zIc)yccDQC)hW7O;K8|sF$N_Pn<$V^IJ-<4uDkn!$z&Iho=yypes*~`yl70(Ib5Bw}8Jf5?Z@MLpdq2f6q9N}jQ@OaM@ z6_3T+pVPv`&GBe{1{lJl6;7LoU%0VgzY~r_x`kdGCxwk{z59$@@7^cW7pGS5#c?u; zcsFpkc{lf;)zP_>%Ex?CFrZ$Jx?cy~I5tgxq+O_u07M7J1-;DDP9IpZU?<{zSS*UbX1cPg!Mj&Nl zhf0>|aZ88BwU4Ka0;>>F!3%dtx>NEjM~yN$iW^c5xQDs#i6$M=`p)4U9#8$ROm7AuXoRS7(r}{d?Hu3D#wUcuX`BY*(CP)N_t8hyfwjm94O(xX@{H=I3Q0@Gmu5?@r}) z!yxQ-(xtf-hTe(|66v6Lxd!R`mfg+q6@}2f&ESe+optF$OEP^l`rO8m&G)pfd$>P7 zAYjU%k9MtW96s&(781OWmM^E5%gT@zR%$M@h`yP=b*smwXZ8Ljr?h^HUyMC1Z>J{G9+k%;|%iQjoM-ShGEoPFj3OrmZraKH%y{PcvdjNRcL z?;Y;<5X^)8KBeBdAY0G5Pmv6`N<%UQ$(K6eQQ=kivT!cuOK7OS91rI|DxPt{IEVib zo?A3uaO2Sm%Aj0F)eCow>s-aTtO(mgWf(!iPLC!x= z4Y+2A!#d8$Yr!`Lm3ffi-w;gDoY%RkXK+0qA9qeD z@IBsrCodm(6ULXDZT7G}%8>`L2s)dau|D2?u#Z`m%QFnadF*pWqMVImqkHC9Hm@!F z+);`Do@?^-(20)D2X%c<3qf<});ax=W~HtaFkq=fx9sCNcVPzmd8_6_z&z}x?e9%r zbyL$-H*Hra74kLMKT{DAN9X1tVVClud!Ko7jZ`Tvc@&~(DtWDPm^`@Q@^e$6{31k? z3vj=BPe(8~t7C4>!Z3#$hG_B;t_NsSVT8Z3lWv%k9z05s^d9dI$HV*cTlc$u z>%pTGOMm43;dlV^u<|=M%v(4NM>s76PQ9VROuca(kGv2%T{j-#G>e-0gB#`#ZWvW3lZg3Ibutseqc_$6 zBy-u0?ulAqVk>C^+>#yUI7umzFY+;Q92j?-a^u{%0243I!+ZE$6EH(_VAQ_QS)=yl zq>wu2tRY?%&t)>TFDI4RG8u9~qMh_3Xh$~Au_?sJqK~9AdO$~dh|sH31IAL({{68R5DU!hwA_{lc7eQ~Ofk!Grv# z<*eO3FYWHR<$d8}Qu}i9quJ}$iS;?i?-(}scwU-w$Jh>-JU$*oJMb~@nRCZb@sQq6 z#dAV&SaqH~6L8nqBALRO7!U6qm?`P_+nf{DM!{>jyQZ1)*dRB34 zZu*xS=3iczP9=E;9^zqpmG7!h%6HxKvK{iobvy*KWsW?dj*0Fn>X=RnrE~5o>X_)R zqW0&ce)jx+L&+sO2-@Kl!FlB><)`kx{M6l-*8yYKxB%1RhPg5a<{QwZdGV0$yIh@* zvr4Osm?SZkJ+IDLuBh?|5y-LsUdMA@+|XlfhD1aA@*AMh&vZmPykDT5dQLkeUwUW< zwiQjR_9FP0+OIKo9&nrkarR7jRQ+l#@HnXNkaPady4CTqZuj_99ne+4kPe4nD87{A z@goo~9_=SyJmbO!R^i4|F$>RQZak2M{Qp~pnEr2$#*0Vi^x`=sY-0!9cn-|M^WR=P zr^1nwiuh_30K8+`<;8IZx?a-dkdEJTr{iPN+Pyf=__YxZ@d7EHRUDcIKELX`oWq@) z>y&5ciwVbXxlE?c%Q@k8_)Bptq}{>-Ghv0YQ=WuemLs5GLrgHdjY1%ik*V4QD`55b1R8xFz%$2_$VE|iP#1Y{*(yU<10pPtq$>7J-JFN#??4S zAGYmB(epWKu$dum(3ik>3K$nzzit8an^jzFG}_>eKSKN8boFRgZ3-uZ^EcX(+&WOgq3S?SK%YDV3*TQV z9+MZ(819o~HzbHDxTBAygBw170(-PJkS$G&*(AcPQ^j|NyTweK=OF^KKAe@6$jmEs4rUKWQDQo7z_v#bqoytKBxg>Ayk0bB5a*uo8Sc=eVswVi!ENhUqt_&!NK6 zFy3>!8|GW=2>K!c&k^_B^-OQYy!-+%`*~j`hLE!m5EsJLzWfaHhCB`6(`N_=yP`Zc zy#+YXm+37kj_Lmej3)-w!|&OZPkyb=%Ji=Z3(dcp3q&&wn3KFORp;#J3v|_XwJ&d> zFILSpcRR^2caoZx~{%dzTtqHW6>KhE6adH@vmLIw44b@=?BSPop1n7XOK_8%E+;H#OFu&((RgudmOd zAKu=@>4(~>uTR}bKPnDBUnPzc*-~p5e#fM z4vxh;uRNZb_w|C>*H>q+tJ+TMO6}Cw$9P}eE6e-AVR&Cvm=l;;zIy8FUWeiRP~S6V zYf}oq^h%#%IS-@8?(gzNc(uy=Tl z9X>be{+!r4Yi`tbKL2X_iFGq(-~0S$m>aeI^wdq-wW;3rlS+}gD~kBssyT9aJMmte z6K_#FxShLQfRl{N^1iOQP)P@+k9=*_ERWp%iC#fJiI|e{Zrdd|7Ax1a60y3 z?IMXJ1DYZD(9v1-1-{2m;O0I9iC^X%OI zIg6}B&CI{^IZMpb@_5FidCxnh(}^=q6tq*`o*(nMeO#SewqVZO)+vRQX9qZ*AQ-HX zP5GsJjehA~qs7n%e!zLalN`^)v||n*UaZ(Drw;IN7~rugZs|th(hd5<@yvi36PlIH z?ssjT`L63Q!s+Q#;22zwH^mPh;GuJHKktuv4o(Q~&*@JW${izz4*J7k(4R@=efPWG zcfX79?BM%@V8B}z&E6k$#;xIeUp>FZi)QhCe!dlP-lDdja?RlT=qH}n1akb;PCBV) z)pJxmc{tsg(Fci-6<+B%5m`bs5nl(G@D2A zd@uYR&#CX&G@FO>c1|a1`-wF(b|CsN3_S$$#h?#pC;bJ?!?fqr=ZJT!&z-zFd;ZQU zmKpjD>ieMbbN3qj+`R_iO!Cvb@2U>uBock_ed*@!>iM37cc|z4qr#;*GLI@J&>5hf z@8gBD&j1w%@iDdiRM~7krnZwTtG3V_l0@_wo?=O8!nS@NtUc*s8G z0M8GTBMiBGgK^UjabNdQ=g$?Z#ktP2eBF2lh6U8S87m|}%j&r))0ICE(@j_Y zh=|l!p1AIRcjsSohp%nk@-jn~DRTCmKPzeeox`~|$v{)HX;FPdaB7Yr#VMDxcN_-%PW~5%$#TQ|bPmim z=#g&c`18Y6{D0%m!cwZ~=D(M^-wXK(a{=`a{GF&jFS+4A=D+_Dci{rw|5y3=pZVFB zX{Sk-r@zd*gJ;z-LZ7LnF#=ZwaG`)Bz9;kV+-}Xkr}6Ln9?!qy9uN3Lz{9o&_)PxY zh3~LC;=4Lt!bkQeE!m#{4=nPl{Cgh%o`mmY^U#v50`1&y6*^-r*#__(ntS;P-d@1J ze*@o1Z>l9dC)$66?|D^FA(OA?H#v@HUYxU@6tpPcg_`PG;UFJBx1+%Bprx5a zKeebiR>#{n^6%i%@`G|I+F{|Nc6>k1+xz)6J7EM&ItBkvP$SNk;fm)Y&A z9f#%(@5dfI?>l?m)G^Vx)#uOuaqhV7825TUH*c#rLg&J8I_2vO3ghcM*N?j%V|$G2 zkLYZoyW?wIe?&U+UOvlA;5Guyn>bG(^JTzh4h#Mb+0aC_f>N9sAOoixR4ptiDzxV1 zP(C#64f)Uz6RGCQqv${$t4$7W?qo&Ma$R=olDzr@Yg`)b;C&bRhEJ`pkSYHV7%w|C)j)IAYv zZaF<%va|*H4@}O1l9KtQnZd@^mG|^7KDM+#WR(+-E=I5hF%V&n)2ikAg@6(@QzsK_D=VQT{!2JT@o0TWPFN6|!fWj$1Dq@qyajHoJ zpyvcQSHO>pyg1#3TI1uQ4gS7b4a$n-Q5j`ks?`z5v)Q?wuV!T8L9$#iB7f1mBER!K z{d>;L+i+%avaiM`w|?QKyW6_%U22z~7GsO&7k1v(@9@=Vf)eemx3f6MynNQVe<8|% z4<31SSytoS+m<$@!U(ebzHZdlLR6+yz3$$|%&h+I)?$7(sd{qGt3b>c`;ELy^|AYW zpK*95$qTtp_=lJq*yC@-AK>9OK-eU;BxT?`w9(|3g73|q@AChXKe$fCfUvnB!#ED34#P0$FpA2c<2DRBt_&pK?^IQH znxN13-uM0U5l)}Fbx)mh>eQ*_)~%|mc+fil;z8}=5_p6hw|L(HC_c0=Md?z2chjx+ z$tXUwE?enR(B9|m7v!jZmUs-(`S~M`)sxS0EK9Wu+9q#}Lu!VI&FJv{q)m`3vw}EA6y?>NVZJ zUi0*?p6{Zf9V?J&WZNM73yf8yUC>WxePw@v`uh#+Um@S6kI^(cTE9!jI`AiG9XMpu zIMQNl?Jdh6YpkE3HP(nnU8ndjRlFJP>nzJ8#KTeWeD~J%Npe)$*nZm9N#%2c&Cj%RNi*HD?m-mrh8wAuKk zzNQD|ctVYp>*2#={2UmAcal2nG?lRlWJA2CnxOjv%tV-;vvdPZXHC-;J&SzSvU&0w z)pRG$aiI50?}5g`-uZB~F2B{D@-xOX4KNKfjRp-2Ni;uh)HEBtGFgLjd!05(Xg9oT8%r6^=N0`l5NpZX@_Lw$!8qgj3-1>lkD%_m3gee{wMhk8e@-Y zWryZ1pm|-k?O%{?H?{4pd0qtl|J5D^J^ufd{eE(P(tok9NWGVnKJX~zUA=>oeGa_C z>#MYvLiy_dW=-`ys1t=2^m`0-1^!-O3}lfgU0UxGsqAM|Vyt?%Y`0&Ma^o!f73GMw+Wm2Ga2YL7YL}6_Dg51|eeo1U<+Z%;cPq*g_odAy%YAhMHk+hvCez60d!!*5pT@&xg1h6D%|_ERf!yEtcgM&&-qqu6@$8WlB` zB|lPp3XJJD`O&ZJS(4-7A#x9d;<3f};AeS!FWU#wh2{=d-MGF4w!VZmVZD3~`aseY zG+%Gc2WuQ@3`suloy=1~#Es8v;mu8^($6C_` zHjdg8w8!Ig9@W0g$3dgooLbXnBa~VY<_;wiDHr|QaX(t;B>AwlMzkE$P`jkZG}L~Y zpRnxFd@OA3cU_1JcXyG#ET40V{AjI#;<3i)&G3y}*|rVy(Iv+6l9$ICERdBv^x6pI z$2`wpczIMC2`paopejT4ko36Aa>C1_`ajf$K+~4B=Tetx{!v~&RVe!e&4*sCYd)s_ zmVbKrRQ;3c1o8QfD7@w2-H&eEjyJH_j}D)e{*ifjrP0X)$auQ0UA$`y*=XzDz^@nbzc2WG`Cl_Y7g~vpO^1X^F7MmFJW)`e9dFN zPaf~EeCXxzl0VH2qRiABwA5peKlN#fN26h5!!?iLK0Mm`dG`mh#;^Sp55E>YX8P0E zT=94t>%hlq9%FrYL|Z7ounoo{Z=c1Pc%(;L%>(}J9Rt92a-U)=JL~ZU#+%zs-u;S3 zgn|8vH(Hq*U--$eCO7Rpf=tz4?=schwAY~sys*ayG()K#qFi5*^-YaSsa~nHwWhPO zUeO$jr(UUjE=yEeXi#ga!Kot16?3chv}DC?)>gZdevo;iH#C-|5jv+UJ;P(Qz>{uwsb{j<`A>Zjtd27B_Ue$p7$Q$IVwY*bO@26~$t|DFBk0*&YV)zA@u*FCoz_%?cXn@pk9?j&9uGJFNEX3btsluE zpvi7pZ;F%tOk*0d!}exctxPmOXc{#(I`8FEYx;yuS2S$8hY!XaaTe+`6rWmCb?ZKZ z=D5wjlfEGJflnr~VpT${xP_1TVcBO8ANb^#H}n~Dp1jPD)(9#dYmEMEs^&4Zg$Hz@ zK11zU(ZpP_hEe|=M*q2}!UQ@wnuFik}3 z45>}_tf5!)z|?0bK2?9e*|%jmdCr(}- z>_p}zpHY0mktfB+(R@+P&k&!w| z=O!A%sIp}iKWAD zsO?GD_EYP!XREZ5=7r`PRs*6Oz{mWxEYE6PR)<>8)6lsE=5jd)w+1?34sIckH!YQ+ zO6zDobJHA~N=tJfNK0k7=EgY?C7;Sr@u)SueN%fUdC2yTcu-znys5oYe5ec+pUv=p zI-iH^;cBr5@^Mw`LhD}W8v}B#&btq>psB|EwfS=|A8N~}y#pU_dxtVHmz!Qxd}KM# zlJ+=@HkaO~dFJSLnKriOk7uF))623v)pN)$b9QsC=AWzeRC9eNy?km-r{vg%@}kE! z>e`yYHsN#wGZv*-EI6VoAV5xsV_&krKf6zV2_;OO z=XJ*~6XP5#N+IXZy-J zZm<34OLLpSoV#F9r_^N&i!yAOd3P`q zPXD^Lsc+`QQG&5^iOHi2zq8SZfB?1(|joEM@rWvsbRxHrG72+>T{_2_a z9o|dQTM+O2%=!+kNdTWqh+i-1@vJTNRB|^UUg?A9YoGX==xN>wd~Twr)AA8N6nwTx z{%C`VPjj-2ACCA3r2e1jcsb9~>_&W(qz7N3=hB|dTM+-cq{keVjJHZYWle)jTWL;} z-KEOH*x9@pb&JM4n^oPyoa!J`i3x2IW~5|!Vbx1(nq-Xktn%4?1o(5q-rOvHFb%}& zZ+W&L&WKaTwdEKrfcg6|oEKs?cO8knyt0mT;iI~Ap>Im|qI1~#_6!ZQ;Ow}be(HNy zxA*iMXvc*2&|SWv>AlX(KKyZ4ycyp%Su^%}^V83TE$@7=3%jG~*%X!-IVn9Fn?vqQ z?JL3`$03*aUPk8QljzXeszr;M#xyNwUG5wj)6Wrk3x~?k*@pRyFuXVTFLmzxD>{e! z={LL{opB7M_Z(ba^;!S#?yo6H^beT2;^_3IA;;eddprDK_~%WBT|cDFn=&}S@0Po! z4l-r@z(i8vn%tsovy+%9qw4p+zy7!Df8l*c&2kQYAT{FuOMMx>EroaQux}gs`h&%L zejpsdl!b*&u&g|mmplNcR`^-MXzR8LvW`RHgQB*($C@d-j4d4u<*=+oif@*HUw4pioJ(l9=SDn@neAoGL+ zhvC?AM|zz4wz!rp&uTo~^kb6u%;Bb^IE46QUD)2+4&KHBOodIa^QG5u`Y@eEY$~jB zyCG*1@;VRwSw|!5P=E!;I75+N>IDYEO8Beg4UtMov^WJTGcgx+4e?Ap<>ej|v zzcjsmef`7C)nvcElKt>h(@N9pRkgL$j>R`sw!DWoXpRE!;bE^3KD7BfdI}m7&|W^- z@SH~gX%dm9%=4Zb<9fX3mMPMZf}T#@DZU9%G)QAb8gKs~sqX@{8ut)eqLF+(eTA3f zjWoA|53Ny(z*}-E*ASk66QAy&nJfAHOVbQ%O@ld1*NV` z{M{zgTHgNpW!}C@_+5|S=db-lzOCP38KH(P`HrAKtUbi16~VqM)&t<9ijz531$3cG z)D7Q3>qwp=D=I$8EWHDwB8?C79%jvS}poEL$a+6zCn!IgsqVH8nNy#@ZDZ>=aDq<>LS0q){efuraTkAiPO;G zlXUhKe#E++tjq7;Zz}qTeZDhnYtz-=|Cv4YVN={{UUNN%JFg$(HC6oK>u>OZ*Po!g zqUune{$I=P`rnjYww`r4d9kVHL$-H!*tVvo-=1Ule$-U*B>TAOHuh3eKKrCzhfv{);!lR z#>XX7d&KE|w}^vp2<)&MqE1Qegd3RS!ZF?>v4TSmVdX)`KNF8HIc7CRV5BKOzDJ)8 z)hA-8Bg^@+#@&rg_prNSyY}l5%98Ophg;jRcg0_?*2SdYB>x_FbdACB%<|JGuqpMU zDJ%LkEqI{q;O~qef6~x6d8J(x;Xf_jf8Vt|*Z<=83BFj*@%CPJWVnHJ{yEptyawc5 z+wX3%C;y26zro0eB6t2=E)wAj}*HZvrd?; z9M}a&0g%pf07b|nrH=%V>?r`EBmEI>{sx%hvl0FQn9{rpAlsb;JPW7;ECElK(>;S9<%m6?}Gs%ApnD`6?3__Uf)E7Yd5e?<*RsiK4c540vcoZN` z$C1580FWnx>^csZ10DcSc~BXU9T=bz_ff9wbwDF*J`LcHuz`D5fRSg`)->q)vw)8Q zZ2(tHgRUI|>;WyMUk)4(df21+I52oLzX{wMK=CF(1^_m1{t0+Ga1-!)zzNR!}7w9j2Z!>Ty(i{cu3?NK80Gba2+z2DT z^7<4o*fFzSVo2pEoQlw0!_gi+2i4tg}7K^VRxuZfQ8 zZ4O{CU<05NAP_JcK>U*cly@`IUeMPS2%kilXz$i>(A~HLFbhCBLjUF?fPWy2v}9k* zf=io{FEoFOxHJIDPTGya^#HPM1fU0C8UTJO+ZFN~_?eWk40s#BVFa>hK$#K9#{u>k zflVJ^cEo{uVEQNGPot^z=HcQF9>shyMU9qDNN z4*~g=_3q#BbCd(tPBkzqpc~+6z$3U{1=tSgg6o~Y^Do1Hj*8`$W1>+2rUrl1=(k zS%m{g50bqU0KUfa;CmUE+BERRH)53?DE+elD%)znVF3B^YQWo|F#{k6-xO>x{s}k- zK-rQ_*{#4R2NnUaLw5ov!q)**m&lHLA@?(2;(HD8GXN+n>1$JQ4|$hXHQkqE=iMlRyX?pU#pKJ_&EK?yRCClG%Ud@lYnNV}0;d?6XvzCd!O{R|W!&KJ(& zn#$&vpaS=bTEP@t`vS?Oa&HaKBF+b>Ka_yHkv!S|`(T+bl1F~=b2!R8O!m2yZ_?@4 zFzG`!|0Qh2y<`oP9}52xruLEnh5#IZOaRe(F?5sH=H(KT{fS>|+zD}1F4;eWha&D> z0AccX&-HkO7XW?@p8ySfM~;OydBf*r9F;kh#joK)O}7eo2>|{f$1&t5)TZ2ZGp2C` zjU(i^ViNFQ6;OSpy8lZc+XHF~d;#@Iwg(}r+XKx3PFHQrD1(2_xOy&5GXb_ftA+>V} z0PvGzA++DpS1rJG0K%So^s)j-FS;h( zs60qN=pyxVAx!l>5dfL8pRNGDglp1=?os(t9ici%K(>col4cdcO8~7gW5A8&hh5AIhg@TT+djz>J%!GpFOb|stsPciH&%i4oIw)mf7vKjhr?=#FVT^E4nzte`crqh1r z+m@nCPQ%ux4I6k;9icj81yI?N@7KWoUjtK_c*@Fyss6yX^Qq=Dm=9Zzxg!haQQoC_P)s2#qF?X7Bx4tgX6N~GewcrS z-B}r8k*LA0s*B>PDH~q}f6JU%R(ZGIz zD+AvP@(+p)st!64bS1c7aAxqFV0Z9)ZHBa2+UCcQ^pICWK5E;e?claWZP&Iv-uAQ5 zkkE+GQK7R#D?|6R>(}mN`+n^Ycd&LS>bSDwrA~c2E$Z}Yr|&x#cRtyrdzTemyLO%3 z^^03FZdrTF@mqfE7SU~5x8>cw3NwY3hrQW7xckEHmu{VX>(N^;_E^{B>}?CI(bi$s zc|F_r?ALQ%&xW4YdX@KD-Rqn19^oUxmxON(|FO5Fcdy<Tl~mum5G+(a0H*o1-jIFWzaobJCrScYYH+ zC3;cx*68=5n_|*q7RH>7`95}3?6lYgu}fo5#9oREiR&FVJ8oXw>bRqJn|*|RfxX6l zI^Gsv8hrOOq}RNE)zfz^4P33{l+K8wTGe%U8I5FbVNXy6>BUg_+Gs+k>aMaRKXYc8D&(hKT zM$aD;I%eUROBn+*wr9LIcHr1`W4|A_ZhYqW<>TL+5HexXgvN$eE@wNkr(~DsMC3H)2IoGL>&`u! z*CTIQ-kbSp`3v$7$Dlu8mCtmOe@$}aIVl%_;TU38I?18&n%kRSY#=hRCH=q zuUYeFt(dia)|KMo691CQ*}=0bAGAEUth8h4i)EIw^0M>gw(|KE{1^X1D!NtJDn?Zl zRa922uGm`9P;qfi=$vtL7SCBRXY<_3xx40`o_ld#-+4>tH9d4{{^0pIhUVXIVqa7DTFREPh{$ml3 z7dEz53L-%2AaYE5CT!c-r>#(x;C; zef61P&tyMy_1W}iGoM}e?1|-}%lj?QT)yJDfzM5QZsl`FpF8o~sTCbpzJA^nBXFKm6`>WkA}T)V3Ms@|&-Rt;Mg{xMqTDPih z)$vtlR$W^4{c8W!-B#OH4_TeDI%jqH>ZPlzSMOT=^6Gb1f3*6WDqhvGDxxZ>YFJff zRY6sG)sm{!Rokl?tKO(OQ+288+iFX7=jy)IN!25&Cs)s?o?l&Ay|#K!^~=@oR9~pR zvc_0*|62dG-PYRH4q2PAHfL?=+9hjWT)Tbk;kBpMo?rXb+G{U`ywu~R1?w#9x~}WH zZs58R>!z$LTDNfB@^u^6x!0XocXr*U>wa7xxW4=PsP#kESJwpB^r(rhanwwxnN~Be zrm|*TOT9e-oJ77#zh-fZrr-DapRjC&u{!<VC$X~m|^ zn+|L`x#`@dPdELzIdJph&7W<)x+QQ+_bpLdlDCZ8lDB2fmZe*&x72Pqy5+4c7q(p9 zYHV%4wf9#0*7U8Dwiaxix3zNXx~+9vU)}o7)(cxNZ*AHZx~=cI|7}cXZzy``+94(Y|l6AU@RH-5uplc8|k{c1qpzanRX|?(Ocw z?o;mf-Iv|pyPN7Q^c`dR)tA>Vs9#dQx_*28;riqCr|U1)e}f@)$A*Z8 zq=pdusQpv+7w=!VzjFWT{Wbe{ z?Qh(FV*fk)KidDz0n>qw2ONjf0^FdmW5D zIPBn*gT)8uAAIIu%|Z9U69>;8ymavUMoVMY#(s^18%H-5G%jdd-ng-`q48wnxyH{L zuO13M)Z;A6j~-`cT86w+>x6bmcHV-2QOy!wH9n9iDu6+TnSJmmFSk zc=O={hu=7S=J2J%-yX3X>3XE!k-2A zj~{*O=zB*m9ldh&+A;rQ9gkU$*^VV0OFNcvEazDHu?5G@y&U!O(w7gv{KYF#uPk|` z=9R;*oOx;SCDC!DxdORS21|yO6%+r^5^>?$=?CciH7SEO1uQA{{p2#DqE>Hsd^+ zGdgTBda(!{_A^Fc<*?!(U<9+3IviwlWHmY*j1|h53zIsuF{ZHhbU4JA!0lKCUSiBP z9x_UeLSwp708Ok$EY41d!6?a!wb&*2n{E^t`M4U6ExozW&}yV0rU-bPH&vOu%Ew;M zeDIos-#k!`L+TtrIlzk3z)QfP1boWz#fc)M&Amawz+a#r=+)@w`H^NV94AQ)%D|nZ zQEsA;ANm_$Bq3LWWSq(&h0F0b4f<37m%svrNJUoYi(JGYZ5+Nz;49aYi^vIRGW+CK``DnZ&*=t!ki1}zK0iSnqVljX}1 zPx&5&d%2KREK4L0G!+Pw^iqV&!GlUP1!eC7ow~X)jScsI-j?Jg%$Wd-Nzn%qZ9`6<>cDZH&inq%I$N*C+oq&w!Rc^AGh*epnUWYsOd| zYrOEzFA(eUf>Fmp@EyreynAhrx0W5TuC_DIM(m2Sxw{!*Mt9>@qX*WdTCrBI7giAU z#@BLa<$Yh2Yd@SSVuKD*(2G1G7Nu>6k0jvfAPN355Z*EvXEzMNmq(IeEeAADgVyON zrD4d&2&@tx1-~ARbsQO3i98N@nt)y2ldv*16T6ltV+G+9V=C(U185ms*kQHAc*1xE zYhgdb+2PBLr_pxo#5ct&nZP&NUNF8f{*CpQRmL)AGA%cm)POLLtgLh@O;PrbL>&|XvJ=kr`%6hV1coW_mr_%Rf5$tx> zm)*hovHr})B3Tr>6W_9kW-%-lFUjpJo+YqEmc$0Ifou>PjPF7ZVRy4+d~n6VQdt^v zvUE0-4a3K$MzE1=6uXCwW@A_e8_UMA@oWN{$R@FSStiS3ld+p;3Y*Gs`a8>JE|$Y` zSsu%0)7W%YzzW$6Hj@>xS*)0qU=8dA5w?&$$`-N5 z*kblLTf&}TOWBib8GDLVvZt{|=X7W`v?1sea^mMU$U?8wTH{>U+fC| zntj9m&Aw&dvG3Ur>__$!yUPBd2il_NATNuUw#Mg$NO^| zkK|GOP9Du;j6FP-#~Ghwo`5-=+-^GU**NrBAH&5m%++j3hok%KA!?#}3`A|NL59cHJ zNIr_+!$i<`42xUdGGum^O#c<@5MMd_I4eFW`^xh5S*zh(E>`8~-t` z@yGcR?7IAfKf#ysC;2k|6tCn@^Jn<8n16VVui($~mHY+%B45Q<^D17=*YLIcCF2-h z$Jg^3zQOp^_y^y}H}TDU3*XAO@$GyEujM=WF20-Z;d^-<-^bm&o;UFQ`~W}58~Gv3 zYaHQ6`7!=7e}%uwU*pI5>-+@&4L`|$%irL?<8R_i&!_kw_*?vK{to{mKh6Kd&+tF< zv-~go9DkR;$N$RD^S|-;`3L+0|B!#gKjs(t-}xo}3ICM;gMY?9=U?zI`B(g({4)O+ zzrw%f-|&C)Z~1rpd;SCek^jW6^8fH_{5o&q&G?`bR`dyhv&_r_pH&zBB0vO+AQ3Fu z;9Rn{B2=^!?L`OCQFIcWu_&&qxJ7gmVWPXZRrCdP=7_mso_I*i7Y~aC;t{b>Jc{|H$HZdsxL6{d z5KG0AVwreKREnp?GvZmXTs$XMi08#h@q&0!tP-n5m8ceL#9Hx^SSQwFW@>}jC^m`B zVvE=+wu$Xxho}`h#V)a1>=AoKo!BSbqFywJ{o;T)C>q5f%w-)BN5wJmvUo+jDqa)E z#p~jP_>DLzeku z&zxSGpI=<$D$Xm+70%-6BENXLxu~RgdYO4lK}l(`xkUa>l)n}9>sL`+7#$mzXfDew znCntk>2U$mOI>sFb4zCB1h{f5%2lYmuqaQ4Oa&z+GbL$Ubh>|DNqJ6wQOR6$c}a0e zS)05s+; zaa#X4EhkRv6{qFJX?by4UYwQ_r{%7} zsQD-9d?o38C24s{T3(Wtm!#z->HH;Wxk*}XlIEMF`3}&02WY+nG@k*Q&j7900IgSw zrccrIDVjb-)2C>;DcY_nT7HU_@6hxPP4Ce69iIEzE)Ff%q2;FPe5UI3shWSPPM@Z+ zQ|sr{`lV}r>B`RW(dvG@uFvt&if_EG*YVLxulQ({kN9XMCq7#7kB?S*#z!l@@zEZ> zO5gZsrEh$+vU7a2vU7Zllp7nZ8vO%k)$zNd`yf|D<&o(Aiu1+XaCrf`7!@uHnpQZ+6Amte z;9}1WbRDx?u3YM)hX$x3Dy~V%D^x z{CVEKrhQ8s^*Yog`H*?LDW5oRhZT}Tw(yd)^U%okHvS?&nz_gNzQXN7ODY~-4c`^_vOG*W0c`3r;LJvb#Fcq`?q=<^y%8*{W z2531Iv;CDA3P>qPB861U4$v|X(jq{lBp`rMOj#L5Ediy4#nUC71CH5En`mYa(3Bkh0~i>sV&v~kTsMJmG}i>?BP=9kVw zIH#zrZA(ycZR1f-7M$!PqEpf=X~@2-+*AMqm?qFqIer3DytW8*d4ql_YRKp3QrMCr zSy^0)V@k<%6wypSm%>4*EtMrGwiI9P=d#8rmW|XnIRn=@F}%~momtpiN2X_Q{j8%H&OdQg~CDiwx}L7 z*C(9i6Mm>AY?-W#Fkhm;$zBf%obL_#r8wnXKUcmo)tIs(S6P7ym-vKLy_Xj7ca|5( zKmauWG8B{|dnz54sbx4cr9~ZmQyNHyLsC4CTk=vhA~M*vr9F|?ZBldd^U#pGA;%#Hje z`tX?O!((DA9w8HNOqbO{8?4(_Wf0Y{%5bo5R@IHvmK32r?W>}cjvTFq5omp>RaL1} z3#*89`>JlJ##M&fwluApP&uh4Y~dE_)1IoELuD;csiY3E(ek35Z;L8pLVa3Nl~y&O zDy?on^$j1Uy6u!V+O{;D@;cO~^^_6qe49!wiMQ0<@$x4)qkRJT>*C&TT0n?8NFg=>&%@ML_bPje?D+Kj)U`iyT$)^37N z6RMc1W=(}vqb9?_x=GVFTC5!?TQeEm{)Wa(C-ZTOP@e`&-VOC>xnx90){P#oS}=L5 zZA<$luY)GHWFs(zrd;HtO|VnVmBjnj0*t?CSq6$&;#qX)$qbtzcNf}~XL5Y}v`5P@pq!ttg z6S0SNTYbZG9Vn-clxljqNM86uk_-fpVlvcG&k1>w%1HA}Qo^r9iI?45oFkPNR|pId zgMBmAwpH?Aokp?=);Hxvpqy-yLCMgro&=-q`bpHTpFr*U3DmBiK<)Yo)UNwed$fK+ z)=!#t^@JI1kI^#&>d_6?`bk^&$MzVVE=E6D$LJY>7(FAPhh+9x{RADW`NirdZ}k)z zZI9DW+HsnHoPL6j)BNoEzFqUN>nC`-rjOV0@j5=<6R&3w;`I}LyneEe*Luf0E%(X> z-!fOBdu5|+nJZDiy`B;bnCl5yvJ~M%3e74krqNp&rZ0>00`lkOVzv+?b~PYPS6aua z`G**%$_=ozPK;AMzXMC{W70kIR(f8+uAl$y@jCbM+RBOgI#K63QRgyI=W>9~*_JGC6Amh05=oLZh!%X4aZ zPAyNDmpxtEAzjN)*YeY~{B$ipUCT??^3)VWv^`z%kJq&^Ue}^{Rf}SrYTgT2mAf-V z%E7gi11#kLOF6(YpTIJoz)~)-lnX5L2`uvoEb|F0^#GRn1eW=XaXMsq0&DpWE#IN# zt9dot*YX`&zC+7b^K7`Uk5 zEnm&k;l9p)s+OOs<)>=-sXG6uI{&F!zVhc7r}AfDoqy%exYqes{)}raU->hxb^g`- zAg;B1<=?p0@|9oXTFX~{jcc8MHLn=sRP&0!I{(Vgajo;O{2bRh|H{vCt@E$^9M?Mk z%Fl7F^RN6I*E;{o&tsg*&w+LRm0#mp=Qmx;OV{~TevbPC@MKR@4Ai{EMtho*0aARl zeSpkmdrhL7jNM9h54eS8!q|98nJG}W_24A zGo4vh>&U}K$k>r?%lOHeZhM%!Z&vm+YvsgDH}B&*;*SMKxw+vvVLf}gjV!m38lHyT zBt~ksBht-mZfo|mNH@1x^Q`XU8E#X=JJbU&IXk7s0Bp+u$2>JH4v%tnlr?gdgPfkFw{VcA(( zSz&J0KPxNTZDeHTXJtjYh0W@;x=nptP{^E`k?A&vJKUCV2h`7Uv+PK>$rcX1ta

  • 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 z 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 literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-LightItalic.ttf b/js/assets/fonts/Roboto/ttf/Roboto-LightItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..04cc002302024c4e032d32319f0d40a32b54aada GIT binary patch literal 166492 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 O52#$t24}uzn*1+3HAyD` literal 0 HcmV?d00001 diff --git a/js/assets/fonts/Roboto/ttf/Roboto-Medium.ttf b/js/assets/fonts/Roboto/ttf/Roboto-Medium.ttf new file mode 100755 index 0000000000000000000000000000000000000000..39c63d7461796094c0b8889ee8fe2706d344a99a GIT binary patch literal 162588 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 cASb?` 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