diff --git a/.github/workflows/monero-tests.yaml b/.github/workflows/monero-tests.yaml
index ef643d6c..a72a85a5 100644
--- a/.github/workflows/monero-tests.yaml
+++ b/.github/workflows/monero-tests.yaml
@@ -39,9 +39,6 @@ jobs:
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-simple-request-rpc --lib
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-address --lib
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet --lib
-          GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-seed --lib
-          GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package polyseed --lib
-          GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet-util --lib
 
       # Doesn't run unit tests with features as the tests workflow will
 
@@ -65,7 +62,6 @@ jobs:
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-serai --test '*'
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-simple-request-rpc --test '*'
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet --test '*'
-          GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet-util --test '*'
 
       - name: Run Integration Tests
         # Don't run if the the tests workflow also will
@@ -74,4 +70,3 @@ jobs:
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-serai --all-features --test '*'
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-simple-request-rpc --test '*'
           GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet --all-features --test '*'
-          GITHUB_CI=true RUST_BACKTRACE=1 cargo test --package monero-wallet-util --all-features --test '*'
diff --git a/.github/workflows/networks-tests.yml b/.github/workflows/networks-tests.yml
index f346b986..5966a6a8 100644
--- a/.github/workflows/networks-tests.yml
+++ b/.github/workflows/networks-tests.yml
@@ -45,7 +45,4 @@ jobs:
             -p monero-simple-request-rpc \
             -p monero-address \
             -p monero-wallet \
-            -p monero-seed \
-            -p polyseed \
-            -p monero-wallet-util \
             -p monero-serai-verify-chain
diff --git a/Cargo.lock b/Cargo.lock
index 3c2bc9e1..930187b3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1054,7 +1054,6 @@ name = "bitcoin-serai"
 version = "0.3.0"
 dependencies = [
  "bitcoin",
- "flexible-transcript",
  "hex",
  "k256",
  "modular-frost",
@@ -4960,19 +4959,6 @@ dependencies = [
  "zeroize",
 ]
 
-[[package]]
-name = "monero-seed"
-version = "0.1.0"
-dependencies = [
- "curve25519-dalek",
- "hex",
- "monero-primitives",
- "rand_core",
- "std-shims",
- "thiserror",
- "zeroize",
-]
-
 [[package]]
 name = "monero-serai"
 version = "0.1.4-alpha"
@@ -5047,21 +5033,6 @@ dependencies = [
  "zeroize",
 ]
 
-[[package]]
-name = "monero-wallet-util"
-version = "0.1.0"
-dependencies = [
- "curve25519-dalek",
- "hex",
- "monero-seed",
- "monero-wallet",
- "polyseed",
- "rand_core",
- "std-shims",
- "thiserror",
- "zeroize",
-]
-
 [[package]]
 name = "multiaddr"
 version = "0.18.1"
@@ -5776,17 +5747,6 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156"
 
-[[package]]
-name = "password-hash"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
-dependencies = [
- "base64ct",
- "rand_core",
- "subtle",
-]
-
 [[package]]
 name = "pasta_curves"
 version = "0.5.1"
@@ -5831,9 +5791,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
 dependencies = [
  "digest 0.10.7",
- "hmac",
- "password-hash",
- "sha2",
 ]
 
 [[package]]
@@ -5946,20 +5903,6 @@ dependencies = [
  "universal-hash",
 ]
 
-[[package]]
-name = "polyseed"
-version = "0.1.0"
-dependencies = [
- "hex",
- "pbkdf2 0.12.2",
- "rand_core",
- "sha3",
- "std-shims",
- "subtle",
- "thiserror",
- "zeroize",
-]
-
 [[package]]
 name = "polyval"
 version = "0.6.2"
@@ -8375,7 +8318,7 @@ dependencies = [
  "dleq",
  "flexible-transcript",
  "minimal-ed448",
- "monero-wallet-util",
+ "monero-wallet",
  "multiexp",
  "schnorr-signatures",
 ]
@@ -8454,6 +8397,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
+ "sp-std",
  "zeroize",
 ]
 
diff --git a/Cargo.toml b/Cargo.toml
index 3416d222..357698b6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -55,9 +55,6 @@ members = [
   "networks/monero/rpc/simple-request",
   "networks/monero/wallet/address",
   "networks/monero/wallet",
-  "networks/monero/wallet/seed",
-  "networks/monero/wallet/polyseed",
-  "networks/monero/wallet/util",
   "networks/monero/verify-chain",
 
   "message-queue",
diff --git a/coordinator/src/cosign_evaluator.rs b/coordinator/src/cosign_evaluator.rs
index 29d9cc4b..84436008 100644
--- a/coordinator/src/cosign_evaluator.rs
+++ b/coordinator/src/cosign_evaluator.rs
@@ -12,9 +12,9 @@ use tokio::{
 use borsh::BorshSerialize;
 use sp_application_crypto::RuntimePublic;
 use serai_client::{
-  primitives::{NETWORKS, NetworkId, Signature},
-  validator_sets::primitives::{Session, ValidatorSet},
-  SeraiError, TemporalSerai, Serai,
+  primitives::{ExternalNetworkId, Signature, EXTERNAL_NETWORKS},
+  validator_sets::primitives::{ExternalValidatorSet, Session},
+  Serai, SeraiError, TemporalSerai,
 };
 
 use serai_db::{Get, DbTxn, Db, create_db};
@@ -28,17 +28,17 @@ use crate::{
 
 create_db! {
   CosignDb {
-    ReceivedCosign: (set: ValidatorSet, block: [u8; 32]) -> CosignedBlock,
-    LatestCosign: (network: NetworkId) -> CosignedBlock,
-    DistinctChain: (set: ValidatorSet) -> (),
+    ReceivedCosign: (set: ExternalValidatorSet, block: [u8; 32]) -> CosignedBlock,
+    LatestCosign: (network: ExternalNetworkId) -> CosignedBlock,
+    DistinctChain: (set: ExternalValidatorSet) -> (),
   }
 }
 
 pub struct CosignEvaluator<D: Db> {
   db: Mutex<D>,
   serai: Arc<Serai>,
-  stakes: RwLock<Option<HashMap<NetworkId, u64>>>,
-  latest_cosigns: RwLock<HashMap<NetworkId, CosignedBlock>>,
+  stakes: RwLock<Option<HashMap<ExternalNetworkId, u64>>>,
+  latest_cosigns: RwLock<HashMap<ExternalNetworkId, CosignedBlock>>,
 }
 
 impl<D: Db> CosignEvaluator<D> {
@@ -79,7 +79,7 @@ impl<D: Db> CosignEvaluator<D> {
     let serai = self.serai.as_of_latest_finalized_block().await?;
 
     let mut stakes = HashMap::new();
-    for network in NETWORKS {
+    for network in EXTERNAL_NETWORKS {
       // Use if this network has published a Batch for a short-circuit of if they've ever set a key
       let set_key = serai.in_instructions().last_batch_for_network(network).await?.is_some();
       if set_key {
@@ -87,7 +87,7 @@ impl<D: Db> CosignEvaluator<D> {
           network,
           serai
             .validator_sets()
-            .total_allocated_stake(network)
+            .total_allocated_stake(network.into())
             .await?
             .expect("network which published a batch didn't have a stake set")
             .0,
@@ -126,9 +126,9 @@ impl<D: Db> CosignEvaluator<D> {
 
     async fn set_with_keys_fn(
       serai: &TemporalSerai<'_>,
-      network: NetworkId,
-    ) -> Result<Option<ValidatorSet>, SeraiError> {
-      let Some(latest_session) = serai.validator_sets().session(network).await? else {
+      network: ExternalNetworkId,
+    ) -> Result<Option<ExternalValidatorSet>, SeraiError> {
+      let Some(latest_session) = serai.validator_sets().session(network.into()).await? else {
         log::warn!("received cosign from {:?}, which doesn't yet have a session", network);
         return Ok(None);
       };
@@ -136,13 +136,13 @@ impl<D: Db> CosignEvaluator<D> {
       Ok(Some(
         if serai
           .validator_sets()
-          .keys(ValidatorSet { network, session: prior_session })
+          .keys(ExternalValidatorSet { network, session: prior_session })
           .await?
           .is_some()
         {
-          ValidatorSet { network, session: prior_session }
+          ExternalValidatorSet { network, session: prior_session }
         } else {
-          ValidatorSet { network, session: latest_session }
+          ExternalValidatorSet { network, session: latest_session }
         },
       ))
     }
@@ -204,16 +204,12 @@ impl<D: Db> CosignEvaluator<D> {
 
       let mut total_stake = 0;
       let mut total_on_distinct_chain = 0;
-      for network in NETWORKS {
-        if network == NetworkId::Serai {
-          continue;
-        }
-
+      for network in EXTERNAL_NETWORKS {
         // Get the current set for this network
         let set_with_keys = {
           let mut res;
           while {
-            res = set_with_keys_fn(&serai, cosign.network).await;
+            res = set_with_keys_fn(&serai, network).await;
             res.is_err()
           } {
             log::error!(
@@ -231,7 +227,8 @@ impl<D: Db> CosignEvaluator<D> {
           let stake = {
             let mut res;
             while {
-              res = serai.validator_sets().total_allocated_stake(set_with_keys.network).await;
+              res =
+                serai.validator_sets().total_allocated_stake(set_with_keys.network.into()).await;
               res.is_err()
             } {
               log::error!(
@@ -271,7 +268,7 @@ impl<D: Db> CosignEvaluator<D> {
   #[allow(clippy::new_ret_no_self)]
   pub fn new<P: P2p>(db: D, p2p: P, serai: Arc<Serai>) -> mpsc::UnboundedSender<CosignedBlock> {
     let mut latest_cosigns = HashMap::new();
-    for network in NETWORKS {
+    for network in EXTERNAL_NETWORKS {
       if let Some(cosign) = LatestCosign::get(&db, network) {
         latest_cosigns.insert(network, cosign);
       }
diff --git a/coordinator/src/db.rs b/coordinator/src/db.rs
index 04ee9d35..934e5050 100644
--- a/coordinator/src/db.rs
+++ b/coordinator/src/db.rs
@@ -6,9 +6,9 @@ use blake2::{
 use scale::Encode;
 use borsh::{BorshSerialize, BorshDeserialize};
 use serai_client::{
-  primitives::NetworkId,
-  validator_sets::primitives::{Session, ValidatorSet},
   in_instructions::primitives::{Batch, SignedBatch},
+  primitives::ExternalNetworkId,
+  validator_sets::primitives::{ExternalValidatorSet, Session},
 };
 
 pub use serai_db::*;
@@ -18,21 +18,21 @@ use crate::tributary::{TributarySpec, Transaction, scanner::RecognizedIdType};
 
 create_db!(
   MainDb {
-    HandledMessageDb: (network: NetworkId) -> u64,
+    HandledMessageDb: (network: ExternalNetworkId) -> u64,
     ActiveTributaryDb: () -> Vec<u8>,
-    RetiredTributaryDb: (set: ValidatorSet) -> (),
+    RetiredTributaryDb: (set: ExternalValidatorSet) -> (),
     FirstPreprocessDb: (
-      network: NetworkId,
+      network: ExternalNetworkId,
       id_type: RecognizedIdType,
       id: &[u8]
     ) -> Vec<Vec<u8>>,
-    LastReceivedBatchDb: (network: NetworkId) -> u32,
-    ExpectedBatchDb: (network: NetworkId, id: u32) -> [u8; 32],
-    BatchDb: (network: NetworkId, id: u32)  -> SignedBatch,
-    LastVerifiedBatchDb: (network: NetworkId) -> u32,
-    HandoverBatchDb: (set: ValidatorSet) -> u32,
-    LookupHandoverBatchDb: (network: NetworkId, batch: u32) -> Session,
-    QueuedBatchesDb: (set: ValidatorSet) -> Vec<u8>
+    LastReceivedBatchDb: (network: ExternalNetworkId) -> u32,
+    ExpectedBatchDb: (network: ExternalNetworkId, id: u32) -> [u8; 32],
+    BatchDb: (network: ExternalNetworkId, id: u32)  -> SignedBatch,
+    LastVerifiedBatchDb: (network: ExternalNetworkId) -> u32,
+    HandoverBatchDb: (set: ExternalValidatorSet) -> u32,
+    LookupHandoverBatchDb: (network: ExternalNetworkId, batch: u32) -> Session,
+    QueuedBatchesDb: (set: ExternalValidatorSet) -> Vec<u8>
   }
 );
 
@@ -61,7 +61,7 @@ impl ActiveTributaryDb {
     ActiveTributaryDb::set(txn, &existing_bytes);
   }
 
-  pub fn retire_tributary(txn: &mut impl DbTxn, set: ValidatorSet) {
+  pub fn retire_tributary(txn: &mut impl DbTxn, set: ExternalValidatorSet) {
     let mut active = Self::active_tributaries(txn).1;
     for i in 0 .. active.len() {
       if active[i].set() == set {
@@ -82,7 +82,7 @@ impl ActiveTributaryDb {
 impl FirstPreprocessDb {
   pub fn save_first_preprocess(
     txn: &mut impl DbTxn,
-    network: NetworkId,
+    network: ExternalNetworkId,
     id_type: RecognizedIdType,
     id: &[u8],
     preprocess: &Vec<Vec<u8>>,
@@ -108,19 +108,19 @@ impl ExpectedBatchDb {
 }
 
 impl HandoverBatchDb {
-  pub fn set_handover_batch(txn: &mut impl DbTxn, set: ValidatorSet, batch: u32) {
+  pub fn set_handover_batch(txn: &mut impl DbTxn, set: ExternalValidatorSet, batch: u32) {
     Self::set(txn, set, &batch);
     LookupHandoverBatchDb::set(txn, set.network, batch, &set.session);
   }
 }
 impl QueuedBatchesDb {
-  pub fn queue(txn: &mut impl DbTxn, set: ValidatorSet, batch: &Transaction) {
+  pub fn queue(txn: &mut impl DbTxn, set: ExternalValidatorSet, batch: &Transaction) {
     let mut batches = Self::get(txn, set).unwrap_or_default();
     batch.write(&mut batches).unwrap();
     Self::set(txn, set, &batches);
   }
 
-  pub fn take(txn: &mut impl DbTxn, set: ValidatorSet) -> Vec<Transaction> {
+  pub fn take(txn: &mut impl DbTxn, set: ExternalValidatorSet) -> Vec<Transaction> {
     let batches_vec = Self::get(txn, set).unwrap_or_default();
     txn.del(Self::key(set));
 
diff --git a/coordinator/src/main.rs b/coordinator/src/main.rs
index 58de348d..adcc49ef 100644
--- a/coordinator/src/main.rs
+++ b/coordinator/src/main.rs
@@ -23,8 +23,8 @@ use serai_db::{DbTxn, Db};
 use scale::Encode;
 use borsh::BorshSerialize;
 use serai_client::{
-  primitives::NetworkId,
-  validator_sets::primitives::{Session, ValidatorSet, KeyPair},
+  primitives::ExternalNetworkId,
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair, Session},
   Public, Serai, SeraiInInstructions,
 };
 
@@ -79,7 +79,7 @@ pub struct ActiveTributary<D: Db, P: P2p> {
 #[derive(Clone)]
 pub enum TributaryEvent<D: Db, P: P2p> {
   NewTributary(ActiveTributary<D, P>),
-  TributaryRetired(ValidatorSet),
+  TributaryRetired(ExternalValidatorSet),
 }
 
 // Creates a new tributary and sends it to all listeners.
@@ -145,7 +145,7 @@ async fn handle_processor_message<D: Db, P: P2p>(
   p2p: &P,
   cosign_channel: &mpsc::UnboundedSender<CosignedBlock>,
   tributaries: &HashMap<Session, ActiveTributary<D, P>>,
-  network: NetworkId,
+  network: ExternalNetworkId,
   msg: &processors::Message,
 ) -> bool {
   #[allow(clippy::nonminimal_bool)]
@@ -193,7 +193,8 @@ async fn handle_processor_message<D: Db, P: P2p>(
           .iter()
           .map(|plan| plan.session)
           .filter(|session| {
-            RetiredTributaryDb::get(&txn, ValidatorSet { network, session: *session }).is_none()
+            RetiredTributaryDb::get(&txn, ExternalValidatorSet { network, session: *session })
+              .is_none()
           })
           .collect::<HashSet<_>>();
 
@@ -265,7 +266,7 @@ async fn handle_processor_message<D: Db, P: P2p>(
       }
       // This causes an action on Substrate yet not on any Tributary
       coordinator::ProcessorMessage::SignedSlashReport { session, signature } => {
-        let set = ValidatorSet { network, session: *session };
+        let set = ExternalValidatorSet { network, session: *session };
         let signature: &[u8] = signature.as_ref();
         let signature = serai_client::Signature(signature.try_into().unwrap());
 
@@ -393,7 +394,7 @@ async fn handle_processor_message<D: Db, P: P2p>(
   if let Some(relevant_tributary_value) = relevant_tributary {
     if RetiredTributaryDb::get(
       &txn,
-      ValidatorSet { network: msg.network, session: relevant_tributary_value },
+      ExternalValidatorSet { network: msg.network, session: relevant_tributary_value },
     )
     .is_some()
     {
@@ -782,7 +783,7 @@ async fn handle_processor_messages<D: Db, Pro: Processors, P: P2p>(
   processors: Pro,
   p2p: P,
   cosign_channel: mpsc::UnboundedSender<CosignedBlock>,
-  network: NetworkId,
+  network: ExternalNetworkId,
   mut tributary_event: mpsc::UnboundedReceiver<TributaryEvent<D, P>>,
 ) {
   let mut tributaries = HashMap::new();
@@ -831,7 +832,7 @@ async fn handle_processor_messages<D: Db, Pro: Processors, P: P2p>(
 #[allow(clippy::too_many_arguments)]
 async fn handle_cosigns_and_batch_publication<D: Db, P: P2p>(
   mut db: D,
-  network: NetworkId,
+  network: ExternalNetworkId,
   mut tributary_event: mpsc::UnboundedReceiver<TributaryEvent<D, P>>,
 ) {
   let mut tributaries = HashMap::new();
@@ -905,7 +906,7 @@ async fn handle_cosigns_and_batch_publication<D: Db, P: P2p>(
         for batch in start_id ..= last_id {
           let is_pre_handover = LookupHandoverBatchDb::get(&txn, network, batch + 1);
           if let Some(session) = is_pre_handover {
-            let set = ValidatorSet { network, session };
+            let set = ExternalValidatorSet { network, session };
             let mut queued = QueuedBatchesDb::take(&mut txn, set);
             // is_handover_batch is only set for handover `Batch`s we're participating in, making
             // this safe
@@ -923,7 +924,8 @@ async fn handle_cosigns_and_batch_publication<D: Db, P: P2p>(
 
           let is_handover = LookupHandoverBatchDb::get(&txn, network, batch);
           if let Some(session) = is_handover {
-            for queued in QueuedBatchesDb::take(&mut txn, ValidatorSet { network, session }) {
+            for queued in QueuedBatchesDb::take(&mut txn, ExternalValidatorSet { network, session })
+            {
               to_publish.push((session, queued));
             }
           }
@@ -970,10 +972,7 @@ pub async fn handle_processors<D: Db, Pro: Processors, P: P2p>(
   mut tributary_event: broadcast::Receiver<TributaryEvent<D, P>>,
 ) {
   let mut channels = HashMap::new();
-  for network in serai_client::primitives::NETWORKS {
-    if network == NetworkId::Serai {
-      continue;
-    }
+  for network in serai_client::primitives::EXTERNAL_NETWORKS {
     let (processor_send, processor_recv) = mpsc::unbounded_channel();
     tokio::spawn(handle_processor_messages(
       db.clone(),
@@ -1195,7 +1194,7 @@ pub async fn run<D: Db, Pro: Processors, P: P2p>(
       }
     });
 
-    move |set: ValidatorSet, genesis, id_type, id: Vec<u8>| {
+    move |set: ExternalValidatorSet, genesis, id_type, id: Vec<u8>| {
       log::debug!("recognized ID {:?} {}", id_type, hex::encode(&id));
       let mut raw_db = raw_db.clone();
       let key = key.clone();
diff --git a/coordinator/src/p2p.rs b/coordinator/src/p2p.rs
index cecb3517..a9fd288e 100644
--- a/coordinator/src/p2p.rs
+++ b/coordinator/src/p2p.rs
@@ -11,7 +11,9 @@ use rand_core::{RngCore, OsRng};
 
 use scale::{Decode, Encode};
 use borsh::{BorshSerialize, BorshDeserialize};
-use serai_client::{primitives::NetworkId, validator_sets::primitives::ValidatorSet, Serai};
+use serai_client::{
+  primitives::ExternalNetworkId, validator_sets::primitives::ExternalValidatorSet, Serai,
+};
 
 use serai_db::Db;
 
@@ -69,7 +71,7 @@ const BLOCKS_PER_BATCH: usize = BLOCKS_PER_MINUTE + 1;
 
 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, BorshSerialize, BorshDeserialize)]
 pub struct CosignedBlock {
-  pub network: NetworkId,
+  pub network: ExternalNetworkId,
   pub block_number: u64,
   pub block: [u8; 32],
   pub signature: [u8; 64],
@@ -208,8 +210,8 @@ pub struct HeartbeatBatch {
 pub trait P2p: Send + Sync + Clone + fmt::Debug + TributaryP2p {
   type Id: Send + Sync + Clone + Copy + fmt::Debug;
 
-  async fn subscribe(&self, set: ValidatorSet, genesis: [u8; 32]);
-  async fn unsubscribe(&self, set: ValidatorSet, genesis: [u8; 32]);
+  async fn subscribe(&self, set: ExternalValidatorSet, genesis: [u8; 32]);
+  async fn unsubscribe(&self, set: ExternalValidatorSet, genesis: [u8; 32]);
 
   async fn send_raw(&self, to: Self::Id, msg: Vec<u8>);
   async fn broadcast_raw(&self, kind: P2pMessageKind, msg: Vec<u8>);
@@ -309,7 +311,7 @@ struct Behavior {
 #[allow(clippy::type_complexity)]
 #[derive(Clone)]
 pub struct LibP2p {
-  subscribe: Arc<Mutex<mpsc::UnboundedSender<(bool, ValidatorSet, [u8; 32])>>>,
+  subscribe: Arc<Mutex<mpsc::UnboundedSender<(bool, ExternalValidatorSet, [u8; 32])>>>,
   send: Arc<Mutex<mpsc::UnboundedSender<(PeerId, Vec<u8>)>>>,
   broadcast: Arc<Mutex<mpsc::UnboundedSender<(P2pMessageKind, Vec<u8>)>>>,
   receive: Arc<Mutex<mpsc::UnboundedReceiver<Message<Self>>>>,
@@ -397,7 +399,7 @@ impl LibP2p {
     let (receive_send, receive_recv) = mpsc::unbounded_channel();
     let (subscribe_send, mut subscribe_recv) = mpsc::unbounded_channel();
 
-    fn topic_for_set(set: ValidatorSet) -> IdentTopic {
+    fn topic_for_set(set: ExternalValidatorSet) -> IdentTopic {
       IdentTopic::new(format!("{LIBP2P_TOPIC}-{}", hex::encode(set.encode())))
     }
 
@@ -407,7 +409,8 @@ impl LibP2p {
     // The addrs we're currently dialing, and the networks associated with them
     let dialing_peers = Arc::new(RwLock::new(HashMap::new()));
     // The peers we're currently connected to, and the networks associated with them
-    let connected_peers = Arc::new(RwLock::new(HashMap::<Multiaddr, HashSet<NetworkId>>::new()));
+    let connected_peers =
+      Arc::new(RwLock::new(HashMap::<Multiaddr, HashSet<ExternalNetworkId>>::new()));
 
     // Find and connect to peers
     let (connect_to_network_send, mut connect_to_network_recv) =
@@ -420,7 +423,7 @@ impl LibP2p {
       let connect_to_network_send = connect_to_network_send.clone();
       async move {
         loop {
-          let connect = |network: NetworkId, addr: Multiaddr| {
+          let connect = |network: ExternalNetworkId, addr: Multiaddr| {
             let dialing_peers = dialing_peers.clone();
             let connected_peers = connected_peers.clone();
             let to_dial_send = to_dial_send.clone();
@@ -507,7 +510,7 @@ impl LibP2p {
             connect_to_network_networks.insert(network);
           }
           for network in connect_to_network_networks {
-            if let Ok(mut nodes) = serai.p2p_validators(network).await {
+            if let Ok(mut nodes) = serai.p2p_validators(network.into()).await {
               // If there's an insufficient amount of nodes known, connect to all yet add it
               // back and break
               if nodes.len() < TARGET_PEERS {
@@ -557,7 +560,7 @@ impl LibP2p {
 
             // Subscribe to any new topics
             set = subscribe_recv.recv() => {
-              let (subscribe, set, genesis): (_, ValidatorSet, [u8; 32]) =
+              let (subscribe, set, genesis): (_, ExternalValidatorSet, [u8; 32]) =
                 set.expect("subscribe_recv closed. are we shutting down?");
               let topic = topic_for_set(set);
               if subscribe {
@@ -776,7 +779,7 @@ impl LibP2p {
 impl P2p for LibP2p {
   type Id = PeerId;
 
-  async fn subscribe(&self, set: ValidatorSet, genesis: [u8; 32]) {
+  async fn subscribe(&self, set: ExternalValidatorSet, genesis: [u8; 32]) {
     self
       .subscribe
       .lock()
@@ -785,7 +788,7 @@ impl P2p for LibP2p {
       .expect("subscribe_send closed. are we shutting down?");
   }
 
-  async fn unsubscribe(&self, set: ValidatorSet, genesis: [u8; 32]) {
+  async fn unsubscribe(&self, set: ExternalValidatorSet, genesis: [u8; 32]) {
     self
       .subscribe
       .lock()
diff --git a/coordinator/src/processors.rs b/coordinator/src/processors.rs
index 9157e2a6..cfdbfa25 100644
--- a/coordinator/src/processors.rs
+++ b/coordinator/src/processors.rs
@@ -1,6 +1,6 @@
 use std::sync::Arc;
 
-use serai_client::primitives::NetworkId;
+use serai_client::primitives::ExternalNetworkId;
 use processor_messages::{ProcessorMessage, CoordinatorMessage};
 
 use message_queue::{Service, Metadata, client::MessageQueue};
@@ -8,27 +8,27 @@ use message_queue::{Service, Metadata, client::MessageQueue};
 #[derive(Clone, PartialEq, Eq, Debug)]
 pub struct Message {
   pub id: u64,
-  pub network: NetworkId,
+  pub network: ExternalNetworkId,
   pub msg: ProcessorMessage,
 }
 
 #[async_trait::async_trait]
 pub trait Processors: 'static + Send + Sync + Clone {
-  async fn send(&self, network: NetworkId, msg: impl Send + Into<CoordinatorMessage>);
-  async fn recv(&self, network: NetworkId) -> Message;
+  async fn send(&self, network: ExternalNetworkId, msg: impl Send + Into<CoordinatorMessage>);
+  async fn recv(&self, network: ExternalNetworkId) -> Message;
   async fn ack(&self, msg: Message);
 }
 
 #[async_trait::async_trait]
 impl Processors for Arc<MessageQueue> {
-  async fn send(&self, network: NetworkId, msg: impl Send + Into<CoordinatorMessage>) {
+  async fn send(&self, network: ExternalNetworkId, msg: impl Send + Into<CoordinatorMessage>) {
     let msg: CoordinatorMessage = msg.into();
     let metadata =
       Metadata { from: self.service, to: Service::Processor(network), intent: msg.intent() };
     let msg = borsh::to_vec(&msg).unwrap();
     self.queue(metadata, msg).await;
   }
-  async fn recv(&self, network: NetworkId) -> Message {
+  async fn recv(&self, network: ExternalNetworkId) -> Message {
     let msg = self.next(Service::Processor(network)).await;
     assert_eq!(msg.from, Service::Processor(network));
 
diff --git a/coordinator/src/substrate/cosign.rs b/coordinator/src/substrate/cosign.rs
index 00560763..644ddf13 100644
--- a/coordinator/src/substrate/cosign.rs
+++ b/coordinator/src/substrate/cosign.rs
@@ -19,9 +19,9 @@ use ciphersuite::{Ciphersuite, Ristretto};
 use borsh::{BorshSerialize, BorshDeserialize};
 
 use serai_client::{
-  SeraiError, Serai,
-  primitives::NetworkId,
-  validator_sets::primitives::{Session, ValidatorSet},
+  primitives::ExternalNetworkId,
+  validator_sets::primitives::{ExternalValidatorSet, Session},
+  Serai, SeraiError,
 };
 
 use serai_db::*;
@@ -70,13 +70,18 @@ impl LatestCosignedBlock {
 
 db_channel! {
   SubstrateDbChannels {
-    CosignTransactions: (network: NetworkId) -> (Session, u64, [u8; 32]),
+    CosignTransactions: (network: ExternalNetworkId) -> (Session, u64, [u8; 32]),
   }
 }
 
 impl CosignTransactions {
   // Append a cosign transaction.
-  pub fn append_cosign(txn: &mut impl DbTxn, set: ValidatorSet, number: u64, hash: [u8; 32]) {
+  pub fn append_cosign(
+    txn: &mut impl DbTxn,
+    set: ExternalValidatorSet,
+    number: u64,
+    hash: [u8; 32],
+  ) {
     CosignTransactions::send(txn, set.network, &(set.session, number, hash))
   }
 }
@@ -256,22 +261,22 @@ async fn advance_cosign_protocol_inner(
       // Using the keys of the prior block ensures this deadlock isn't reached
       let serai = serai.as_of(actual_block.header.parent_hash.into());
 
-      for network in serai_client::primitives::NETWORKS {
+      for network in serai_client::primitives::EXTERNAL_NETWORKS {
         // Get the latest session to have set keys
         let set_with_keys = {
-          let Some(latest_session) = serai.validator_sets().session(network).await? else {
+          let Some(latest_session) = serai.validator_sets().session(network.into()).await? else {
             continue;
           };
           let prior_session = Session(latest_session.0.saturating_sub(1));
           if serai
             .validator_sets()
-            .keys(ValidatorSet { network, session: prior_session })
+            .keys(ExternalValidatorSet { network, session: prior_session })
             .await?
             .is_some()
           {
-            ValidatorSet { network, session: prior_session }
+            ExternalValidatorSet { network, session: prior_session }
           } else {
-            let set = ValidatorSet { network, session: latest_session };
+            let set = ExternalValidatorSet { network, session: latest_session };
             if serai.validator_sets().keys(set).await?.is_none() {
               continue;
             }
@@ -280,7 +285,7 @@ async fn advance_cosign_protocol_inner(
         };
 
         log::debug!("{:?} will be cosigning {block}", set_with_keys.network);
-        cosigning.push((set_with_keys, in_set(key, &serai, set_with_keys).await?.unwrap()));
+        cosigning.push((set_with_keys, in_set(key, &serai, set_with_keys.into()).await?.unwrap()));
       }
 
       break;
diff --git a/coordinator/src/substrate/db.rs b/coordinator/src/substrate/db.rs
index 2621e5ef..52493105 100644
--- a/coordinator/src/substrate/db.rs
+++ b/coordinator/src/substrate/db.rs
@@ -1,4 +1,4 @@
-use serai_client::primitives::NetworkId;
+use serai_client::primitives::ExternalNetworkId;
 
 pub use serai_db::*;
 
@@ -9,7 +9,7 @@ mod inner_db {
     SubstrateDb {
       NextBlock: () -> u64,
       HandledEvent: (block: [u8; 32]) -> u32,
-      BatchInstructionsHashDb: (network: NetworkId, id: u32) -> [u8; 32]
+      BatchInstructionsHashDb: (network: ExternalNetworkId, id: u32) -> [u8; 32]
     }
   );
 }
diff --git a/coordinator/src/substrate/mod.rs b/coordinator/src/substrate/mod.rs
index fb1e3aed..a10806a3 100644
--- a/coordinator/src/substrate/mod.rs
+++ b/coordinator/src/substrate/mod.rs
@@ -9,11 +9,14 @@ use zeroize::Zeroizing;
 use ciphersuite::{group::GroupEncoding, Ciphersuite, Ristretto};
 
 use serai_client::{
-  SeraiError, Block, Serai, TemporalSerai,
-  primitives::{BlockHash, NetworkId},
-  validator_sets::{primitives::ValidatorSet, ValidatorSetsEvent},
-  in_instructions::InInstructionsEvent,
   coins::CoinsEvent,
+  in_instructions::InInstructionsEvent,
+  primitives::{BlockHash, ExternalNetworkId},
+  validator_sets::{
+    primitives::{ExternalValidatorSet, ValidatorSet},
+    ValidatorSetsEvent,
+  },
+  Block, Serai, SeraiError, TemporalSerai,
 };
 
 use serai_db::DbTxn;
@@ -52,9 +55,9 @@ async fn handle_new_set<D: Db>(
   new_tributary_spec: &mpsc::UnboundedSender<TributarySpec>,
   serai: &Serai,
   block: &Block,
-  set: ValidatorSet,
+  set: ExternalValidatorSet,
 ) -> Result<(), SeraiError> {
-  if in_set(key, &serai.as_of(block.hash()), set)
+  if in_set(key, &serai.as_of(block.hash()), set.into())
     .await?
     .expect("NewSet for set which doesn't exist")
   {
@@ -64,7 +67,7 @@ async fn handle_new_set<D: Db>(
       let serai = serai.as_of(block.hash());
       let serai = serai.validator_sets();
       let set_participants =
-        serai.participants(set.network).await?.expect("NewSet for set which doesn't exist");
+        serai.participants(set.network.into()).await?.expect("NewSet for set which doesn't exist");
 
       set_participants.into_iter().map(|(k, w)| (k, u16::try_from(w).unwrap())).collect::<Vec<_>>()
     };
@@ -131,7 +134,7 @@ async fn handle_batch_and_burns<Pro: Processors>(
   };
 
   let mut batch_block = HashMap::new();
-  let mut batches = HashMap::<NetworkId, Vec<u32>>::new();
+  let mut batches = HashMap::<ExternalNetworkId, Vec<u32>>::new();
   let mut burns = HashMap::new();
 
   let serai = serai.as_of(block.hash());
@@ -205,8 +208,8 @@ async fn handle_block<D: Db, Pro: Processors>(
   db: &mut D,
   key: &Zeroizing<<Ristretto as Ciphersuite>::F>,
   new_tributary_spec: &mpsc::UnboundedSender<TributarySpec>,
-  perform_slash_report: &mpsc::UnboundedSender<ValidatorSet>,
-  tributary_retired: &mpsc::UnboundedSender<ValidatorSet>,
+  perform_slash_report: &mpsc::UnboundedSender<ExternalValidatorSet>,
+  tributary_retired: &mpsc::UnboundedSender<ExternalValidatorSet>,
   processors: &Pro,
   serai: &Serai,
   block: Block,
@@ -226,12 +229,8 @@ async fn handle_block<D: Db, Pro: Processors>(
       panic!("NewSet event wasn't NewSet: {new_set:?}");
     };
 
-    // If this is Serai, do nothing
     // We only coordinate/process external networks
-    if set.network == NetworkId::Serai {
-      continue;
-    }
-
+    let Ok(set) = ExternalValidatorSet::try_from(set) else { continue };
     if HandledEvent::is_unhandled(db, hash, event_id) {
       log::info!("found fresh new set event {:?}", new_set);
       let mut txn = db.txn();
@@ -286,10 +285,7 @@ async fn handle_block<D: Db, Pro: Processors>(
       panic!("AcceptedHandover event wasn't AcceptedHandover: {accepted_handover:?}");
     };
 
-    if set.network == NetworkId::Serai {
-      continue;
-    }
-
+    let Ok(set) = ExternalValidatorSet::try_from(set) else { continue };
     if HandledEvent::is_unhandled(db, hash, event_id) {
       log::info!("found fresh accepted handover event {:?}", accepted_handover);
       // TODO: This isn't atomic with the event handling
@@ -307,10 +303,7 @@ async fn handle_block<D: Db, Pro: Processors>(
       panic!("SetRetired event wasn't SetRetired: {retired_set:?}");
     };
 
-    if set.network == NetworkId::Serai {
-      continue;
-    }
-
+    let Ok(set) = ExternalValidatorSet::try_from(set) else { continue };
     if HandledEvent::is_unhandled(db, hash, event_id) {
       log::info!("found fresh set retired event {:?}", retired_set);
       let mut txn = db.txn();
@@ -340,8 +333,8 @@ async fn handle_new_blocks<D: Db, Pro: Processors>(
   db: &mut D,
   key: &Zeroizing<<Ristretto as Ciphersuite>::F>,
   new_tributary_spec: &mpsc::UnboundedSender<TributarySpec>,
-  perform_slash_report: &mpsc::UnboundedSender<ValidatorSet>,
-  tributary_retired: &mpsc::UnboundedSender<ValidatorSet>,
+  perform_slash_report: &mpsc::UnboundedSender<ExternalValidatorSet>,
+  tributary_retired: &mpsc::UnboundedSender<ExternalValidatorSet>,
   processors: &Pro,
   serai: &Serai,
   next_block: &mut u64,
@@ -395,8 +388,8 @@ pub async fn scan_task<D: Db, Pro: Processors>(
   processors: Pro,
   serai: Arc<Serai>,
   new_tributary_spec: mpsc::UnboundedSender<TributarySpec>,
-  perform_slash_report: mpsc::UnboundedSender<ValidatorSet>,
-  tributary_retired: mpsc::UnboundedSender<ValidatorSet>,
+  perform_slash_report: mpsc::UnboundedSender<ExternalValidatorSet>,
+  tributary_retired: mpsc::UnboundedSender<ExternalValidatorSet>,
 ) {
   log::info!("scanning substrate");
   let mut next_substrate_block = NextBlock::get(&db).unwrap_or_default();
@@ -494,9 +487,12 @@ pub async fn scan_task<D: Db, Pro: Processors>(
 /// retry.
 pub(crate) async fn expected_next_batch(
   serai: &Serai,
-  network: NetworkId,
+  network: ExternalNetworkId,
 ) -> Result<u32, SeraiError> {
-  async fn expected_next_batch_inner(serai: &Serai, network: NetworkId) -> Result<u32, SeraiError> {
+  async fn expected_next_batch_inner(
+    serai: &Serai,
+    network: ExternalNetworkId,
+  ) -> Result<u32, SeraiError> {
     let serai = serai.as_of_latest_finalized_block().await?;
     let last = serai.in_instructions().last_batch_for_network(network).await?;
     Ok(if let Some(last) = last { last + 1 } else { 0 })
@@ -519,7 +515,7 @@ pub(crate) async fn expected_next_batch(
 /// This is deemed fine.
 pub(crate) async fn verify_published_batches<D: Db>(
   txn: &mut D::Transaction<'_>,
-  network: NetworkId,
+  network: ExternalNetworkId,
   optimistic_up_to: u32,
 ) -> Option<u32> {
   // TODO: Localize from MainDb to SubstrateDb
diff --git a/coordinator/src/tests/mod.rs b/coordinator/src/tests/mod.rs
index db4c158f..1d9d6d34 100644
--- a/coordinator/src/tests/mod.rs
+++ b/coordinator/src/tests/mod.rs
@@ -4,7 +4,7 @@ use std::{
   collections::{VecDeque, HashSet, HashMap},
 };
 
-use serai_client::{primitives::NetworkId, validator_sets::primitives::ValidatorSet};
+use serai_client::{primitives::ExternalNetworkId, validator_sets::primitives::ExternalValidatorSet};
 
 use processor_messages::CoordinatorMessage;
 
@@ -20,7 +20,7 @@ use crate::{
 pub mod tributary;
 
 #[derive(Clone)]
-pub struct MemProcessors(pub Arc<RwLock<HashMap<NetworkId, VecDeque<CoordinatorMessage>>>>);
+pub struct MemProcessors(pub Arc<RwLock<HashMap<ExternalNetworkId, VecDeque<CoordinatorMessage>>>>);
 impl MemProcessors {
   #[allow(clippy::new_without_default)]
   pub fn new() -> MemProcessors {
@@ -30,12 +30,12 @@ impl MemProcessors {
 
 #[async_trait::async_trait]
 impl Processors for MemProcessors {
-  async fn send(&self, network: NetworkId, msg: impl Send + Into<CoordinatorMessage>) {
+  async fn send(&self, network: ExternalNetworkId, msg: impl Send + Into<CoordinatorMessage>) {
     let mut processors = self.0.write().await;
     let processor = processors.entry(network).or_insert_with(VecDeque::new);
     processor.push_back(msg.into());
   }
-  async fn recv(&self, _: NetworkId) -> Message {
+  async fn recv(&self, _: ExternalNetworkId) -> Message {
     todo!()
   }
   async fn ack(&self, _: Message) {
@@ -65,8 +65,8 @@ impl LocalP2p {
 impl P2p for LocalP2p {
   type Id = usize;
 
-  async fn subscribe(&self, _set: ValidatorSet, _genesis: [u8; 32]) {}
-  async fn unsubscribe(&self, _set: ValidatorSet, _genesis: [u8; 32]) {}
+  async fn subscribe(&self, _set: ExternalValidatorSet, _genesis: [u8; 32]) {}
+  async fn unsubscribe(&self, _set: ExternalValidatorSet, _genesis: [u8; 32]) {}
 
   async fn send_raw(&self, to: Self::Id, msg: Vec<u8>) {
     let mut msg_ref = msg.as_slice();
diff --git a/coordinator/src/tests/tributary/chain.rs b/coordinator/src/tests/tributary/chain.rs
index 7fc6a064..62feb78b 100644
--- a/coordinator/src/tests/tributary/chain.rs
+++ b/coordinator/src/tests/tributary/chain.rs
@@ -15,8 +15,8 @@ use ciphersuite::{
 use sp_application_crypto::sr25519;
 use borsh::BorshDeserialize;
 use serai_client::{
-  primitives::NetworkId,
-  validator_sets::primitives::{Session, ValidatorSet},
+  primitives::ExternalNetworkId,
+  validator_sets::primitives::{ExternalValidatorSet, Session},
 };
 
 use tokio::time::sleep;
@@ -50,7 +50,7 @@ pub fn new_spec<R: RngCore + CryptoRng>(
 
   let start_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
 
-  let set = ValidatorSet { session: Session(0), network: NetworkId::Bitcoin };
+  let set = ExternalValidatorSet { session: Session(0), network: ExternalNetworkId::Bitcoin };
 
   let set_participants = keys
     .iter()
diff --git a/coordinator/src/tests/tributary/dkg.rs b/coordinator/src/tests/tributary/dkg.rs
index 04a528f9..adaa6643 100644
--- a/coordinator/src/tests/tributary/dkg.rs
+++ b/coordinator/src/tests/tributary/dkg.rs
@@ -10,7 +10,7 @@ use frost::Participant;
 use sp_runtime::traits::Verify;
 use serai_client::{
   primitives::{SeraiAddress, Signature},
-  validator_sets::primitives::{ValidatorSet, KeyPair},
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair},
 };
 
 use tokio::time::sleep;
@@ -350,7 +350,7 @@ async fn dkg_test() {
     async fn publish_set_keys(
       &self,
       _db: &(impl Sync + Get),
-      set: ValidatorSet,
+      set: ExternalValidatorSet,
       removed: Vec<SeraiAddress>,
       key_pair: KeyPair,
       signature: Signature,
@@ -362,7 +362,7 @@ async fn dkg_test() {
         &*serai_client::validator_sets::primitives::set_keys_message(&set, &[], &key_pair),
         &serai_client::Public(
           frost::dkg::musig::musig_key::<Ristretto>(
-            &serai_client::validator_sets::primitives::musig_context(set),
+            &serai_client::validator_sets::primitives::musig_context(set.into()),
             &self.spec.validators().into_iter().map(|(validator, _)| validator).collect::<Vec<_>>()
           )
           .unwrap()
diff --git a/coordinator/src/tests/tributary/mod.rs b/coordinator/src/tests/tributary/mod.rs
index c3f98311..1016248d 100644
--- a/coordinator/src/tests/tributary/mod.rs
+++ b/coordinator/src/tests/tributary/mod.rs
@@ -7,7 +7,7 @@ use ciphersuite::{group::Group, Ciphersuite, Ristretto};
 use scale::{Encode, Decode};
 use serai_client::{
   primitives::{SeraiAddress, Signature},
-  validator_sets::primitives::{MAX_KEY_SHARES_PER_SET, ValidatorSet, KeyPair},
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair, MAX_KEY_SHARES_PER_SET},
 };
 use processor_messages::coordinator::SubstrateSignableId;
 
@@ -31,7 +31,7 @@ impl PublishSeraiTransaction for () {
   async fn publish_set_keys(
     &self,
     _db: &(impl Sync + serai_db::Get),
-    _set: ValidatorSet,
+    _set: ExternalValidatorSet,
     _removed: Vec<SeraiAddress>,
     _key_pair: KeyPair,
     _signature: Signature,
diff --git a/coordinator/src/tributary/db.rs b/coordinator/src/tributary/db.rs
index fda1c47b..fe39b7de 100644
--- a/coordinator/src/tributary/db.rs
+++ b/coordinator/src/tributary/db.rs
@@ -6,7 +6,7 @@ use borsh::{BorshSerialize, BorshDeserialize};
 use ciphersuite::{group::GroupEncoding, Ciphersuite, Ristretto};
 use frost::Participant;
 
-use serai_client::validator_sets::primitives::{KeyPair, ValidatorSet};
+use serai_client::validator_sets::primitives::{KeyPair, ExternalValidatorSet};
 
 use processor_messages::coordinator::SubstrateSignableId;
 
@@ -46,7 +46,7 @@ pub enum Accumulation {
 create_db!(
   Tributary {
     SeraiBlockNumber: (hash: [u8; 32]) -> u64,
-    SeraiDkgCompleted: (spec: ValidatorSet) -> [u8; 32],
+    SeraiDkgCompleted: (spec: ExternalValidatorSet) -> [u8; 32],
 
     TributaryBlockNumber: (block: [u8; 32]) -> u32,
     LastHandledBlock: (genesis: [u8; 32]) -> [u8; 32],
@@ -80,7 +80,7 @@ create_db!(
     SlashReports: (genesis: [u8; 32], signer: [u8; 32]) -> Vec<u32>,
     SlashReported: (genesis: [u8; 32]) -> u16,
     SlashReportCutOff: (genesis: [u8; 32]) -> u64,
-    SlashReport: (set: ValidatorSet) -> Vec<([u8; 32], u32)>,
+    SlashReport: (set: ExternalValidatorSet) -> Vec<([u8; 32], u32)>,
   }
 );
 
diff --git a/coordinator/src/tributary/mod.rs b/coordinator/src/tributary/mod.rs
index cc9bdb1e..27bb6396 100644
--- a/coordinator/src/tributary/mod.rs
+++ b/coordinator/src/tributary/mod.rs
@@ -1,6 +1,6 @@
 use ciphersuite::{group::GroupEncoding, Ciphersuite, Ristretto};
 
-use serai_client::validator_sets::primitives::ValidatorSet;
+use serai_client::validator_sets::primitives::ExternalValidatorSet;
 
 use tributary::{
   ReadWrite,
@@ -40,7 +40,7 @@ pub fn removed_as_of_dkg_attempt(
 
 pub fn removed_as_of_set_keys(
   getter: &impl Get,
-  set: ValidatorSet,
+  set: ExternalValidatorSet,
   genesis: [u8; 32],
 ) -> Option<Vec<<Ristretto as Ciphersuite>::G>> {
   // SeraiDkgCompleted has the key placed on-chain.
diff --git a/coordinator/src/tributary/scanner.rs b/coordinator/src/tributary/scanner.rs
index 9b56e0a0..8e1f4842 100644
--- a/coordinator/src/tributary/scanner.rs
+++ b/coordinator/src/tributary/scanner.rs
@@ -10,7 +10,7 @@ use tokio::sync::broadcast;
 use scale::{Encode, Decode};
 use serai_client::{
   primitives::{SeraiAddress, Signature},
-  validator_sets::primitives::{KeyPair, ValidatorSet},
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair},
   Serai,
 };
 
@@ -38,7 +38,7 @@ pub enum RecognizedIdType {
 pub trait RIDTrait {
   async fn recognized_id(
     &self,
-    set: ValidatorSet,
+    set: ExternalValidatorSet,
     genesis: [u8; 32],
     kind: RecognizedIdType,
     id: Vec<u8>,
@@ -47,12 +47,12 @@ pub trait RIDTrait {
 #[async_trait::async_trait]
 impl<
     FRid: Send + Future<Output = ()>,
-    F: Sync + Fn(ValidatorSet, [u8; 32], RecognizedIdType, Vec<u8>) -> FRid,
+    F: Sync + Fn(ExternalValidatorSet, [u8; 32], RecognizedIdType, Vec<u8>) -> FRid,
   > RIDTrait for F
 {
   async fn recognized_id(
     &self,
-    set: ValidatorSet,
+    set: ExternalValidatorSet,
     genesis: [u8; 32],
     kind: RecognizedIdType,
     id: Vec<u8>,
@@ -66,7 +66,7 @@ pub trait PublishSeraiTransaction {
   async fn publish_set_keys(
     &self,
     db: &(impl Sync + Get),
-    set: ValidatorSet,
+    set: ExternalValidatorSet,
     removed: Vec<SeraiAddress>,
     key_pair: KeyPair,
     signature: Signature,
@@ -86,7 +86,7 @@ mod impl_pst_for_serai {
       async fn publish(
         serai: &Serai,
         db: &impl Get,
-        set: ValidatorSet,
+        set: ExternalValidatorSet,
         tx: serai_client::Transaction,
         meta: $Meta,
       ) -> bool {
@@ -128,7 +128,7 @@ mod impl_pst_for_serai {
     async fn publish_set_keys(
       &self,
       db: &(impl Sync + Get),
-      set: ValidatorSet,
+      set: ExternalValidatorSet,
       removed: Vec<SeraiAddress>,
       key_pair: KeyPair,
       signature: Signature,
@@ -140,7 +140,7 @@ mod impl_pst_for_serai {
         key_pair,
         signature,
       );
-      async fn check(serai: SeraiValidatorSets<'_>, set: ValidatorSet, (): ()) -> bool {
+      async fn check(serai: SeraiValidatorSets<'_>, set: ExternalValidatorSet, (): ()) -> bool {
         if matches!(serai.keys(set).await, Ok(Some(_))) {
           log::info!("another coordinator set key pair for {:?}", set);
           return true;
diff --git a/coordinator/src/tributary/signing_protocol.rs b/coordinator/src/tributary/signing_protocol.rs
index a90ed479..20dda48e 100644
--- a/coordinator/src/tributary/signing_protocol.rs
+++ b/coordinator/src/tributary/signing_protocol.rs
@@ -119,7 +119,7 @@ impl<T: DbTxn, C: Encode> SigningProtocol<'_, T, C> {
 
     let algorithm = Schnorrkel::new(b"substrate");
     let keys: ThresholdKeys<Ristretto> =
-      musig(&musig_context(self.spec.set()), self.key, participants)
+      musig(&musig_context(self.spec.set().into()), self.key, participants)
         .expect("signing for a set we aren't in/validator present multiple times")
         .into();
 
diff --git a/coordinator/src/tributary/spec.rs b/coordinator/src/tributary/spec.rs
index 92905490..345584b6 100644
--- a/coordinator/src/tributary/spec.rs
+++ b/coordinator/src/tributary/spec.rs
@@ -9,7 +9,7 @@ use frost::Participant;
 use scale::Encode;
 use borsh::{BorshSerialize, BorshDeserialize};
 
-use serai_client::{primitives::PublicKey, validator_sets::primitives::ValidatorSet};
+use serai_client::{primitives::PublicKey, validator_sets::primitives::ExternalValidatorSet};
 
 fn borsh_serialize_validators<W: io::Write>(
   validators: &Vec<(<Ristretto as Ciphersuite>::G, u16)>,
@@ -43,7 +43,7 @@ fn borsh_deserialize_validators<R: io::Read>(
 pub struct TributarySpec {
   serai_block: [u8; 32],
   start_time: u64,
-  set: ValidatorSet,
+  set: ExternalValidatorSet,
   #[borsh(
     serialize_with = "borsh_serialize_validators",
     deserialize_with = "borsh_deserialize_validators"
@@ -55,7 +55,7 @@ impl TributarySpec {
   pub fn new(
     serai_block: [u8; 32],
     start_time: u64,
-    set: ValidatorSet,
+    set: ExternalValidatorSet,
     set_participants: Vec<(PublicKey, u16)>,
   ) -> TributarySpec {
     let mut validators = vec![];
@@ -68,7 +68,7 @@ impl TributarySpec {
     Self { serai_block, start_time, set, validators }
   }
 
-  pub fn set(&self) -> ValidatorSet {
+  pub fn set(&self) -> ExternalValidatorSet {
     self.set
   }
 
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
index c41d7268..1d5b4214 100644
--- a/docs/Gemfile.lock
+++ b/docs/Gemfile.lock
@@ -5,20 +5,20 @@ GEM
       public_suffix (>= 2.0.2, < 7.0)
     bigdecimal (3.1.8)
     colorator (1.1.0)
-    concurrent-ruby (1.3.3)
+    concurrent-ruby (1.3.4)
     em-websocket (0.5.3)
       eventmachine (>= 0.12.9)
       http_parser.rb (~> 0)
     eventmachine (1.2.7)
     ffi (1.17.0-x86_64-linux-gnu)
     forwardable-extended (2.6.0)
-    google-protobuf (4.27.3-x86_64-linux)
+    google-protobuf (4.28.2-x86_64-linux)
       bigdecimal
       rake (>= 13)
     http_parser.rb (0.8.0)
-    i18n (1.14.5)
+    i18n (1.14.6)
       concurrent-ruby (~> 1.0)
-    jekyll (4.3.3)
+    jekyll (4.3.4)
       addressable (~> 2.4)
       colorator (~> 1.0)
       em-websocket (~> 0.5)
@@ -63,17 +63,15 @@ GEM
     rb-fsevent (0.11.2)
     rb-inotify (0.11.1)
       ffi (~> 1.0)
-    rexml (3.3.4)
-      strscan
-    rouge (4.3.0)
+    rexml (3.3.7)
+    rouge (4.4.0)
     safe_yaml (1.0.5)
-    sass-embedded (1.77.8-x86_64-linux-gnu)
-      google-protobuf (~> 4.26)
-    strscan (3.1.0)
+    sass-embedded (1.79.3-x86_64-linux-gnu)
+      google-protobuf (~> 4.27)
     terminal-table (3.0.2)
       unicode-display_width (>= 1.1.1, < 3)
-    unicode-display_width (2.5.0)
-    webrick (1.8.1)
+    unicode-display_width (2.6.0)
+    webrick (1.8.2)
 
 PLATFORMS
   x86_64-linux
diff --git a/message-queue/src/main.rs b/message-queue/src/main.rs
index c43cc3c8..b1c6e85b 100644
--- a/message-queue/src/main.rs
+++ b/message-queue/src/main.rs
@@ -6,7 +6,7 @@ pub(crate) use std::{
 pub(crate) use ciphersuite::{group::GroupEncoding, Ciphersuite, Ristretto};
 pub(crate) use schnorr_signatures::SchnorrSignature;
 
-pub(crate) use serai_primitives::NetworkId;
+pub(crate) use serai_primitives::ExternalNetworkId;
 
 pub(crate) use tokio::{
   io::{AsyncReadExt, AsyncWriteExt},
@@ -193,10 +193,7 @@ async fn main() {
     KEYS.write().unwrap().insert(service, key);
     let mut queues = QUEUES.write().unwrap();
     if service == Service::Coordinator {
-      for network in serai_primitives::NETWORKS {
-        if network == NetworkId::Serai {
-          continue;
-        }
+      for network in serai_primitives::EXTERNAL_NETWORKS {
         queues.insert(
           (service, Service::Processor(network)),
           RwLock::new(Queue(db.clone(), service, Service::Processor(network))),
@@ -210,17 +207,13 @@ async fn main() {
     }
   };
 
-  // Make queues for each NetworkId, other than Serai
-  for network in serai_primitives::NETWORKS {
-    if network == NetworkId::Serai {
-      continue;
-    }
+  // Make queues for each ExternalNetworkId
+  for network in serai_primitives::EXTERNAL_NETWORKS {
     // Use a match so we error if the list of NetworkIds changes
     let Some(key) = read_key(match network {
-      NetworkId::Serai => unreachable!(),
-      NetworkId::Bitcoin => "BITCOIN_KEY",
-      NetworkId::Ethereum => "ETHEREUM_KEY",
-      NetworkId::Monero => "MONERO_KEY",
+      ExternalNetworkId::Bitcoin => "BITCOIN_KEY",
+      ExternalNetworkId::Ethereum => "ETHEREUM_KEY",
+      ExternalNetworkId::Monero => "MONERO_KEY",
     }) else {
       continue;
     };
diff --git a/message-queue/src/messages.rs b/message-queue/src/messages.rs
index 942f3ff5..13c3dee0 100644
--- a/message-queue/src/messages.rs
+++ b/message-queue/src/messages.rs
@@ -3,11 +3,11 @@ use ciphersuite::{group::GroupEncoding, Ciphersuite, Ristretto};
 
 use borsh::{BorshSerialize, BorshDeserialize};
 
-use serai_primitives::NetworkId;
+use serai_primitives::ExternalNetworkId;
 
 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, BorshSerialize, BorshDeserialize)]
 pub enum Service {
-  Processor(NetworkId),
+  Processor(ExternalNetworkId),
   Coordinator,
 }
 
diff --git a/networks/bitcoin/Cargo.toml b/networks/bitcoin/Cargo.toml
index 6fc33da1..5ab44cc6 100644
--- a/networks/bitcoin/Cargo.toml
+++ b/networks/bitcoin/Cargo.toml
@@ -26,8 +26,6 @@ rand_core = { version = "0.6", default-features = false }
 bitcoin = { version = "0.32", default-features = false }
 
 k256 = { version = "^0.13.1", default-features = false, features = ["arithmetic", "bits"] }
-
-transcript = { package = "flexible-transcript", path = "../../crypto/transcript", version = "0.3", default-features = false, features = ["recommended"], optional = true }
 frost = { package = "modular-frost", path = "../../crypto/frost", version = "0.8", default-features = false, features = ["secp256k1"], optional = true }
 
 hex = { version = "0.4", default-features = false, optional = true }
@@ -55,8 +53,6 @@ std = [
   "bitcoin/serde",
 
   "k256/std",
-
-  "transcript/std",
   "frost",
 
   "hex/std",
diff --git a/networks/bitcoin/src/crypto.rs b/networks/bitcoin/src/crypto.rs
index 72aff20c..11510909 100644
--- a/networks/bitcoin/src/crypto.rs
+++ b/networks/bitcoin/src/crypto.rs
@@ -40,14 +40,12 @@ mod frost_crypto {
 
   use bitcoin::hashes::{HashEngine, Hash, sha256::Hash as Sha256};
 
-  use transcript::Transcript;
-
   use k256::{elliptic_curve::ops::Reduce, U256, Scalar};
 
   use frost::{
     curve::{Ciphersuite, Secp256k1},
     Participant, ThresholdKeys, ThresholdView, FrostError,
-    algorithm::{Hram as HramTrait, Algorithm, Schnorr as FrostSchnorr},
+    algorithm::{Hram as HramTrait, Algorithm, IetfSchnorr as FrostSchnorr},
   };
 
   use super::*;
@@ -82,16 +80,17 @@ mod frost_crypto {
   ///
   /// This must be used with a ThresholdKeys whose group key is even. If it is odd, this will panic.
   #[derive(Clone)]
-  pub struct Schnorr<T: Sync + Clone + Debug + Transcript>(FrostSchnorr<Secp256k1, T, Hram>);
-  impl<T: Sync + Clone + Debug + Transcript> Schnorr<T> {
+  pub struct Schnorr(FrostSchnorr<Secp256k1, Hram>);
+  impl Schnorr {
     /// Construct a Schnorr algorithm continuing the specified transcript.
-    pub fn new(transcript: T) -> Schnorr<T> {
-      Schnorr(FrostSchnorr::new(transcript))
+    #[allow(clippy::new_without_default)]
+    pub fn new() -> Schnorr {
+      Schnorr(FrostSchnorr::ietf())
     }
   }
 
-  impl<T: Sync + Clone + Debug + Transcript> Algorithm<Secp256k1> for Schnorr<T> {
-    type Transcript = T;
+  impl Algorithm<Secp256k1> for Schnorr {
+    type Transcript = <FrostSchnorr<Secp256k1, Hram> as Algorithm<Secp256k1>>::Transcript;
     type Addendum = ();
     type Signature = [u8; 64];
 
diff --git a/networks/bitcoin/src/tests/crypto.rs b/networks/bitcoin/src/tests/crypto.rs
index cfc694f4..57a0eb3e 100644
--- a/networks/bitcoin/src/tests/crypto.rs
+++ b/networks/bitcoin/src/tests/crypto.rs
@@ -3,7 +3,6 @@ use rand_core::OsRng;
 use secp256k1::{Secp256k1 as BContext, Message, schnorr::Signature};
 
 use k256::Scalar;
-use transcript::{Transcript, RecommendedTranscript};
 use frost::{
   curve::Secp256k1,
   Participant,
@@ -25,8 +24,7 @@ fn test_algorithm() {
     *keys = keys.offset(Scalar::from(offset));
   }
 
-  let algo =
-    Schnorr::<RecommendedTranscript>::new(RecommendedTranscript::new(b"bitcoin-serai sign test"));
+  let algo = Schnorr::new();
   let sig = sign(
     &mut OsRng,
     &algo,
diff --git a/networks/bitcoin/src/wallet/mod.rs b/networks/bitcoin/src/wallet/mod.rs
index 195182ff..1a078958 100644
--- a/networks/bitcoin/src/wallet/mod.rs
+++ b/networks/bitcoin/src/wallet/mod.rs
@@ -22,7 +22,7 @@ use bitcoin::{
   Block,
 };
 #[cfg(feature = "std")]
-use bitcoin::consensus::encode::Decodable;
+use bitcoin::{hashes::Hash, consensus::encode::Decodable, TapTweakHash};
 
 use crate::crypto::x_only;
 #[cfg(feature = "std")]
@@ -33,12 +33,40 @@ mod send;
 #[cfg(feature = "std")]
 pub use send::*;
 
-/// Tweak keys to ensure they're usable with Bitcoin.
+/// Tweak keys to ensure they're usable with Bitcoin's Taproot upgrade.
 ///
-/// Taproot keys, which these keys are used as, must be even. This offsets the keys until they're
-/// even.
+/// This adds an unspendable script path to the key, preventing any outputs received to this key
+/// from being spent via a script. To have keys which have spendable script paths, further offsets
+/// from this position must be used.
+///
+/// After adding an unspendable script path, the key is incremented until its even. This means the
+/// existence of the unspendable script path may not provable, without an understanding of the
+/// algorithm used here.
 #[cfg(feature = "std")]
 pub fn tweak_keys(keys: &ThresholdKeys<Secp256k1>) -> ThresholdKeys<Secp256k1> {
+  // Adds the unspendable script path per
+  // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-23
+  let keys = {
+    use k256::elliptic_curve::{
+      bigint::{Encoding, U256},
+      ops::Reduce,
+      group::GroupEncoding,
+    };
+    let tweak_hash = TapTweakHash::hash(&keys.group_key().to_bytes().as_slice()[1 ..]);
+    /*
+      https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#cite_ref-13-0 states how the
+      bias is negligible. This reduction shouldn't ever occur, yet if it did, the script path
+      would be unusable due to a check the script path hash is less than the order. That doesn't
+      impact us as we don't want the script path to be usable.
+    */
+    keys.offset(<Secp256k1 as Ciphersuite>::F::reduce(U256::from_be_bytes(
+      *tweak_hash.to_raw_hash().as_ref(),
+    )))
+  };
+
+  // This doesn't risk re-introducing a script path as you'd have to find a preimage for the tweak
+  // hash with whatever increment, or manipulate the key so that the tweak hash and increment
+  // equals the desired offset, yet manipulating the key would change the tweak hash
   let (_, offset) = make_even(keys.group_key());
   keys.offset(Scalar::from(offset))
 }
@@ -142,6 +170,10 @@ impl Scanner {
   ///
   /// This means offsets are surjective, not bijective, and the order offsets are registered in
   /// may determine the validity of future offsets.
+  ///
+  /// The offsets registered must be securely generated. Arbitrary offsets may introduce a script
+  /// path into the output, allowing the output to be spent by satisfaction of an arbitrary script
+  /// (not by the signature of the key).
   pub fn register_offset(&mut self, mut offset: Scalar) -> Option<Scalar> {
     // This loop will terminate as soon as an even point is found, with any point having a ~50%
     // chance of being even
diff --git a/networks/bitcoin/src/wallet/send.rs b/networks/bitcoin/src/wallet/send.rs
index 9a723523..276f536e 100644
--- a/networks/bitcoin/src/wallet/send.rs
+++ b/networks/bitcoin/src/wallet/send.rs
@@ -7,9 +7,7 @@ use thiserror::Error;
 
 use rand_core::{RngCore, CryptoRng};
 
-use transcript::{Transcript, RecommendedTranscript};
-
-use k256::{elliptic_curve::sec1::ToEncodedPoint, Scalar};
+use k256::Scalar;
 use frost::{curve::Secp256k1, Participant, ThresholdKeys, FrostError, sign::*};
 
 use bitcoin::{
@@ -46,7 +44,7 @@ pub enum TransactionError {
   #[error("fee was too low to pass the default minimum fee rate")]
   TooLowFee,
   #[error("not enough funds for these payments")]
-  NotEnoughFunds,
+  NotEnoughFunds { inputs: u64, payments: u64, fee: u64 },
   #[error("transaction was too large")]
   TooLargeTransaction,
 }
@@ -215,7 +213,11 @@ impl SignableTransaction {
     }
 
     if input_sat < (payment_sat + needed_fee) {
-      Err(TransactionError::NotEnoughFunds)?;
+      Err(TransactionError::NotEnoughFunds {
+        inputs: input_sat,
+        payments: payment_sat,
+        fee: needed_fee,
+      })?;
     }
 
     // If there's a change address, check if there's change to give it
@@ -260,49 +262,23 @@ impl SignableTransaction {
     res
   }
 
-  /// Returns the outputs this transaction will create.
-  pub fn outputs(&self) -> &[TxOut] {
-    &self.tx.output
+  /// Returns the transaction, sans witness, this will create if signed.
+  pub fn transaction(&self) -> &Transaction {
+    &self.tx
   }
 
   /// Create a multisig machine for this transaction.
   ///
   /// Returns None if the wrong keys are used.
-  pub fn multisig(
-    self,
-    keys: &ThresholdKeys<Secp256k1>,
-    mut transcript: RecommendedTranscript,
-  ) -> Option<TransactionMachine> {
-    transcript.domain_separate(b"bitcoin_transaction");
-    transcript.append_message(b"root_key", keys.group_key().to_encoded_point(true).as_bytes());
-
-    // Transcript the inputs and outputs
-    let tx = &self.tx;
-    for input in &tx.input {
-      transcript.append_message(b"input_hash", input.previous_output.txid);
-      transcript.append_message(b"input_output_index", input.previous_output.vout.to_le_bytes());
-    }
-    for payment in &tx.output {
-      transcript.append_message(b"output_script", payment.script_pubkey.as_bytes());
-      transcript.append_message(b"output_amount", payment.value.to_sat().to_le_bytes());
-    }
-
+  pub fn multisig(self, keys: &ThresholdKeys<Secp256k1>) -> Option<TransactionMachine> {
     let mut sigs = vec![];
-    for i in 0 .. tx.input.len() {
-      let mut transcript = transcript.clone();
-      // This unwrap is safe since any transaction with this many inputs violates the maximum
-      // size allowed under standards, which this lib will error on creation of
-      transcript.append_message(b"signing_input", u32::try_from(i).unwrap().to_le_bytes());
-
+    for i in 0 .. self.tx.input.len() {
       let offset = keys.clone().offset(self.offsets[i]);
       if p2tr_script_buf(offset.group_key())? != self.prevouts[i].script_pubkey {
         None?;
       }
 
-      sigs.push(AlgorithmMachine::new(
-        Schnorr::new(transcript),
-        keys.clone().offset(self.offsets[i]),
-      ));
+      sigs.push(AlgorithmMachine::new(Schnorr::new(), keys.clone().offset(self.offsets[i])));
     }
 
     Some(TransactionMachine { tx: self, sigs })
@@ -315,7 +291,7 @@ impl SignableTransaction {
 /// This will panic if either `cache` is called or the message isn't empty.
 pub struct TransactionMachine {
   tx: SignableTransaction,
-  sigs: Vec<AlgorithmMachine<Secp256k1, Schnorr<RecommendedTranscript>>>,
+  sigs: Vec<AlgorithmMachine<Secp256k1, Schnorr>>,
 }
 
 impl PreprocessMachine for TransactionMachine {
@@ -344,7 +320,7 @@ impl PreprocessMachine for TransactionMachine {
 
 pub struct TransactionSignMachine {
   tx: SignableTransaction,
-  sigs: Vec<AlgorithmSignMachine<Secp256k1, Schnorr<RecommendedTranscript>>>,
+  sigs: Vec<AlgorithmSignMachine<Secp256k1, Schnorr>>,
 }
 
 impl SignMachine<Transaction> for TransactionSignMachine {
@@ -424,7 +400,7 @@ impl SignMachine<Transaction> for TransactionSignMachine {
 
 pub struct TransactionSignatureMachine {
   tx: Transaction,
-  sigs: Vec<AlgorithmSignatureMachine<Secp256k1, Schnorr<RecommendedTranscript>>>,
+  sigs: Vec<AlgorithmSignatureMachine<Secp256k1, Schnorr>>,
 }
 
 impl SignatureMachine<Transaction> for TransactionSignatureMachine {
diff --git a/networks/bitcoin/tests/wallet.rs b/networks/bitcoin/tests/wallet.rs
index 4b77e61a..45371414 100644
--- a/networks/bitcoin/tests/wallet.rs
+++ b/networks/bitcoin/tests/wallet.rs
@@ -2,8 +2,6 @@ use std::collections::HashMap;
 
 use rand_core::{RngCore, OsRng};
 
-use transcript::{Transcript, RecommendedTranscript};
-
 use k256::{
   elliptic_curve::{
     group::{ff::Field, Group},
@@ -94,46 +92,11 @@ fn sign(
 ) -> Transaction {
   let mut machines = HashMap::new();
   for i in (1 ..= THRESHOLD).map(|i| Participant::new(i).unwrap()) {
-    machines.insert(
-      i,
-      tx.clone()
-        .multisig(&keys[&i].clone(), RecommendedTranscript::new(b"bitcoin-serai Test Transaction"))
-        .unwrap(),
-    );
+    machines.insert(i, tx.clone().multisig(&keys[&i].clone()).unwrap());
   }
   sign_without_caching(&mut OsRng, machines, &[])
 }
 
-#[test]
-fn test_tweak_keys() {
-  let mut even = false;
-  let mut odd = false;
-
-  // Generate keys until we get an even set and an odd set
-  while !(even && odd) {
-    let mut keys = key_gen(&mut OsRng).drain().next().unwrap().1;
-    if is_even(keys.group_key()) {
-      // Tweaking should do nothing
-      assert_eq!(tweak_keys(&keys).group_key(), keys.group_key());
-
-      even = true;
-    } else {
-      let tweaked = tweak_keys(&keys).group_key();
-      assert_ne!(tweaked, keys.group_key());
-      // Tweaking should produce an even key
-      assert!(is_even(tweaked));
-
-      // Verify it uses the smallest possible offset
-      while keys.group_key().to_encoded_point(true).tag() == Tag::CompressedOddY {
-        keys = keys.offset(Scalar::ONE);
-      }
-      assert_eq!(tweaked, keys.group_key());
-
-      odd = true;
-    }
-  }
-}
-
 async_sequential! {
   async fn test_scanner() {
     // Test Scanners are creatable for even keys.
@@ -232,10 +195,10 @@ async_sequential! {
       Err(TransactionError::TooLowFee),
     );
 
-    assert_eq!(
+    assert!(matches!(
       SignableTransaction::new(inputs.clone(), &[(addr(), inputs[0].value() * 2)], None, None, FEE),
-      Err(TransactionError::NotEnoughFunds),
-    );
+      Err(TransactionError::NotEnoughFunds { .. }),
+    ));
 
     assert_eq!(
       SignableTransaction::new(inputs, &vec![(addr(), 1000); 10000], None, None, FEE),
diff --git a/networks/monero/rpc/src/lib.rs b/networks/monero/rpc/src/lib.rs
index 4c5055cc..3c8d337a 100644
--- a/networks/monero/rpc/src/lib.rs
+++ b/networks/monero/rpc/src/lib.rs
@@ -249,7 +249,7 @@ fn rpc_point(point: &str) -> Result<EdwardsPoint, RpcError> {
 /// While no implementors are directly provided, [monero-simple-request-rpc](
 ///   https://github.com/serai-dex/serai/tree/develop/networks/monero/rpc/simple-request
 /// ) is recommended.
-pub trait Rpc: Sync + Clone + Debug {
+pub trait Rpc: Sync + Clone {
   /// Perform a POST request to the specified route with the specified body.
   ///
   /// The implementor is left to handle anything such as authentication.
@@ -1003,10 +1003,10 @@ pub trait Rpc: Sync + Clone + Debug {
 /// An implementation is provided for any satisfier of `Rpc`. It is not recommended to use an `Rpc`
 /// object to satisfy this. This should be satisfied by a local store of the output distribution,
 /// both for performance and to prevent potential attacks a remote node can perform.
-pub trait DecoyRpc: Sync + Clone + Debug {
+pub trait DecoyRpc: Sync {
   /// Get the height the output distribution ends at.
   ///
-  /// This is equivalent to the hight of the blockchain it's for. This is intended to be cheaper
+  /// This is equivalent to the height of the blockchain it's for. This is intended to be cheaper
   /// than fetching the entire output distribution.
   fn get_output_distribution_end_height(
     &self,
diff --git a/networks/monero/src/block.rs b/networks/monero/src/block.rs
index 62a77f8b..15a8d1fc 100644
--- a/networks/monero/src/block.rs
+++ b/networks/monero/src/block.rs
@@ -79,10 +79,13 @@ pub struct Block {
 }
 
 impl Block {
-  /// The zero-index position of this block within the blockchain.
+  /// The zero-indexed position of this block within the blockchain.
   ///
   /// This information comes from the Block's miner transaction. If the miner transaction isn't
-  /// structed as expected, this will return None.
+  /// structed as expected, this will return None. This will return Some for any Block which would
+  /// pass the consensus rules.
+  // https://github.com/monero-project/monero/blob/a1dc85c5373a30f14aaf7dcfdd95f5a7375d3623
+  //   /src/cryptonote_core/blockchain.cpp#L1365-L1382
   pub fn number(&self) -> Option<usize> {
     match &self.miner_transaction {
       Transaction::V1 { prefix, .. } | Transaction::V2 { prefix, .. } => {
diff --git a/networks/monero/wallet/polyseed/Cargo.toml b/networks/monero/wallet/polyseed/Cargo.toml
deleted file mode 100644
index 38861481..00000000
--- a/networks/monero/wallet/polyseed/Cargo.toml
+++ /dev/null
@@ -1,46 +0,0 @@
-[package]
-name = "polyseed"
-version = "0.1.0"
-description = "Rust implementation of Polyseed"
-license = "MIT"
-repository = "https://github.com/serai-dex/serai/tree/develop/networks/monero/wallet/polyseed"
-authors = ["Luke Parker <lukeparker5132@gmail.com>"]
-edition = "2021"
-rust-version = "1.80"
-
-[package.metadata.docs.rs]
-all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
-
-[lints]
-workspace = true
-
-[dependencies]
-std-shims = { path = "../../../../common/std-shims", version = "^0.1.1", default-features = false }
-
-thiserror = { version = "1", default-features = false, optional = true }
-
-subtle = { version = "^2.4", default-features = false }
-zeroize = { version = "^1.5", default-features = false, features = ["zeroize_derive"] }
-rand_core = { version = "0.6", default-features = false }
-
-sha3 = { version = "0.10", default-features = false }
-pbkdf2 = { version = "0.12", features = ["simple"], default-features = false }
-
-[dev-dependencies]
-hex = { version = "0.4", default-features = false, features = ["std"] }
-
-[features]
-std = [
-  "std-shims/std",
-
-  "thiserror",
-
-  "subtle/std",
-  "zeroize/std",
-  "rand_core/std",
-
-  "sha3/std",
-  "pbkdf2/std",
-]
-default = ["std"]
diff --git a/networks/monero/wallet/polyseed/LICENSE b/networks/monero/wallet/polyseed/LICENSE
deleted file mode 100644
index 91d893c1..00000000
--- a/networks/monero/wallet/polyseed/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022-2024 Luke Parker
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/networks/monero/wallet/polyseed/README.md b/networks/monero/wallet/polyseed/README.md
deleted file mode 100644
index 4869bba0..00000000
--- a/networks/monero/wallet/polyseed/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Polyseed
-
-Rust implementation of [Polyseed](https://github.com/tevador/polyseed).
-
-This library is usable under no-std when the `std` feature (on by default) is
-disabled.
-
-### Cargo Features
-
-- `std` (on by default): Enables `std` (and with it, more efficient internal
-  implementations).
diff --git a/networks/monero/wallet/polyseed/src/lib.rs b/networks/monero/wallet/polyseed/src/lib.rs
deleted file mode 100644
index 8163d3c4..00000000
--- a/networks/monero/wallet/polyseed/src/lib.rs
+++ /dev/null
@@ -1,473 +0,0 @@
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
-#![doc = include_str!("../README.md")]
-#![deny(missing_docs)]
-#![cfg_attr(not(feature = "std"), no_std)]
-
-use core::fmt;
-use std_shims::{sync::LazyLock, string::String, collections::HashMap};
-#[cfg(feature = "std")]
-use std::time::{SystemTime, UNIX_EPOCH};
-
-use subtle::ConstantTimeEq;
-use zeroize::{Zeroize, Zeroizing, ZeroizeOnDrop};
-use rand_core::{RngCore, CryptoRng};
-
-use sha3::Sha3_256;
-use pbkdf2::pbkdf2_hmac;
-
-#[cfg(test)]
-mod tests;
-
-// Features
-const FEATURE_BITS: u8 = 5;
-#[allow(dead_code)]
-const INTERNAL_FEATURES: u8 = 2;
-const USER_FEATURES: u8 = 3;
-
-const USER_FEATURES_MASK: u8 = (1 << USER_FEATURES) - 1;
-const ENCRYPTED_MASK: u8 = 1 << 4;
-const RESERVED_FEATURES_MASK: u8 = ((1 << FEATURE_BITS) - 1) ^ ENCRYPTED_MASK;
-
-fn user_features(features: u8) -> u8 {
-  features & USER_FEATURES_MASK
-}
-
-fn polyseed_features_supported(features: u8) -> bool {
-  (features & RESERVED_FEATURES_MASK) == 0
-}
-
-// Dates
-const DATE_BITS: u8 = 10;
-const DATE_MASK: u16 = (1u16 << DATE_BITS) - 1;
-const POLYSEED_EPOCH: u64 = 1635768000; // 1st November 2021 12:00 UTC
-const TIME_STEP: u64 = 2629746; // 30.436875 days = 1/12 of the Gregorian year
-
-// After ~85 years, this will roll over.
-fn birthday_encode(time: u64) -> u16 {
-  u16::try_from((time.saturating_sub(POLYSEED_EPOCH) / TIME_STEP) & u64::from(DATE_MASK))
-    .expect("value masked by 2**10 - 1 didn't fit into a u16")
-}
-
-fn birthday_decode(birthday: u16) -> u64 {
-  POLYSEED_EPOCH + (u64::from(birthday) * TIME_STEP)
-}
-
-// Polyseed parameters
-const SECRET_BITS: usize = 150;
-
-const BITS_PER_BYTE: usize = 8;
-const SECRET_SIZE: usize = SECRET_BITS.div_ceil(BITS_PER_BYTE); // 19
-const CLEAR_BITS: usize = (SECRET_SIZE * BITS_PER_BYTE) - SECRET_BITS; // 2
-
-// Polyseed calls this CLEAR_MASK and has a very complicated formula for this fundamental
-// equivalency
-#[allow(clippy::cast_possible_truncation)]
-const LAST_BYTE_SECRET_BITS_MASK: u8 = ((1 << (BITS_PER_BYTE - CLEAR_BITS)) - 1) as u8;
-
-const SECRET_BITS_PER_WORD: usize = 10;
-
-// The amount of words in a seed.
-const POLYSEED_LENGTH: usize = 16;
-// Amount of characters each word must have if trimmed
-pub(crate) const PREFIX_LEN: usize = 4;
-
-const POLY_NUM_CHECK_DIGITS: usize = 1;
-const DATA_WORDS: usize = POLYSEED_LENGTH - POLY_NUM_CHECK_DIGITS;
-
-// Polynomial
-const GF_BITS: usize = 11;
-const POLYSEED_MUL2_TABLE: [u16; 8] = [5, 7, 1, 3, 13, 15, 9, 11];
-
-type Poly = [u16; POLYSEED_LENGTH];
-
-fn elem_mul2(x: u16) -> u16 {
-  if x < 1024 {
-    return 2 * x;
-  }
-  POLYSEED_MUL2_TABLE[usize::from(x % 8)] + (16 * ((x - 1024) / 8))
-}
-
-fn poly_eval(poly: &Poly) -> u16 {
-  // Horner's method at x = 2
-  let mut result = poly[POLYSEED_LENGTH - 1];
-  for i in (0 .. (POLYSEED_LENGTH - 1)).rev() {
-    result = elem_mul2(result) ^ poly[i];
-  }
-  result
-}
-
-// Key gen parameters
-const POLYSEED_SALT: &[u8] = b"POLYSEED key";
-const POLYSEED_KEYGEN_ITERATIONS: u32 = 10000;
-
-// Polyseed technically supports multiple coins, and the value for Monero is 0
-// See: https://github.com/tevador/polyseed/blob/dfb05d8edb682b0e8f743b1b70c9131712ff4157
-//   /include/polyseed.h#L57
-const COIN: u16 = 0;
-
-/// An error when working with a Polyseed.
-#[derive(Clone, Copy, PartialEq, Eq, Debug)]
-#[cfg_attr(feature = "std", derive(thiserror::Error))]
-pub enum PolyseedError {
-  /// The seed was invalid.
-  #[cfg_attr(feature = "std", error("invalid seed"))]
-  InvalidSeed,
-  /// The entropy was invalid.
-  #[cfg_attr(feature = "std", error("invalid entropy"))]
-  InvalidEntropy,
-  /// The checksum did not match the data.
-  #[cfg_attr(feature = "std", error("invalid checksum"))]
-  InvalidChecksum,
-  /// Unsupported feature bits were set.
-  #[cfg_attr(feature = "std", error("unsupported features"))]
-  UnsupportedFeatures,
-}
-
-/// Language options for Polyseed.
-#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Zeroize)]
-pub enum Language {
-  /// English language option.
-  English,
-  /// Spanish language option.
-  Spanish,
-  /// French language option.
-  French,
-  /// Italian language option.
-  Italian,
-  /// Japanese language option.
-  Japanese,
-  /// Korean language option.
-  Korean,
-  /// Czech language option.
-  Czech,
-  /// Portuguese language option.
-  Portuguese,
-  /// Simplified Chinese language option.
-  ChineseSimplified,
-  /// Traditional Chinese language option.
-  ChineseTraditional,
-}
-
-struct WordList {
-  words: &'static [&'static str],
-  has_prefix: bool,
-  has_accent: bool,
-}
-
-impl WordList {
-  fn new(words: &'static [&'static str], has_prefix: bool, has_accent: bool) -> WordList {
-    let res = WordList { words, has_prefix, has_accent };
-    // This is needed for a later unwrap to not fails
-    assert!(words.len() < usize::from(u16::MAX));
-    res
-  }
-}
-
-static LANGUAGES: LazyLock<HashMap<Language, WordList>> = LazyLock::new(|| {
-  HashMap::from([
-    (Language::Czech, WordList::new(include!("./words/cs.rs"), true, false)),
-    (Language::French, WordList::new(include!("./words/fr.rs"), true, true)),
-    (Language::Korean, WordList::new(include!("./words/ko.rs"), false, false)),
-    (Language::English, WordList::new(include!("./words/en.rs"), true, false)),
-    (Language::Italian, WordList::new(include!("./words/it.rs"), true, false)),
-    (Language::Spanish, WordList::new(include!("./words/es.rs"), true, true)),
-    (Language::Japanese, WordList::new(include!("./words/ja.rs"), false, false)),
-    (Language::Portuguese, WordList::new(include!("./words/pt.rs"), true, false)),
-    (
-      Language::ChineseSimplified,
-      WordList::new(include!("./words/zh_simplified.rs"), false, false),
-    ),
-    (
-      Language::ChineseTraditional,
-      WordList::new(include!("./words/zh_traditional.rs"), false, false),
-    ),
-  ])
-});
-
-/// A Polyseed.
-#[derive(Clone, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]
-pub struct Polyseed {
-  language: Language,
-  features: u8,
-  birthday: u16,
-  entropy: Zeroizing<[u8; 32]>,
-  checksum: u16,
-}
-
-impl fmt::Debug for Polyseed {
-  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-    f.debug_struct("Polyseed").finish_non_exhaustive()
-  }
-}
-
-fn valid_entropy(entropy: &Zeroizing<[u8; 32]>) -> bool {
-  // Last byte of the entropy should only use certain bits
-  let mut res =
-    entropy[SECRET_SIZE - 1].ct_eq(&(entropy[SECRET_SIZE - 1] & LAST_BYTE_SECRET_BITS_MASK));
-  // Last 13 bytes of the buffer should be unused
-  for b in SECRET_SIZE .. entropy.len() {
-    res &= entropy[b].ct_eq(&0);
-  }
-  res.into()
-}
-
-impl Polyseed {
-  // TODO: Clean this
-  fn to_poly(&self) -> Poly {
-    let mut extra_bits = u32::from(FEATURE_BITS + DATE_BITS);
-    let extra_val = (u16::from(self.features) << DATE_BITS) | self.birthday;
-
-    let mut entropy_idx = 0;
-    let mut secret_bits = BITS_PER_BYTE;
-    let mut seed_rem_bits = SECRET_BITS - BITS_PER_BYTE;
-
-    let mut poly = [0; POLYSEED_LENGTH];
-    for i in 0 .. DATA_WORDS {
-      extra_bits -= 1;
-
-      let mut word_bits = 0;
-      let mut word_val = 0;
-      while word_bits < SECRET_BITS_PER_WORD {
-        if secret_bits == 0 {
-          entropy_idx += 1;
-          secret_bits = seed_rem_bits.min(BITS_PER_BYTE);
-          seed_rem_bits -= secret_bits;
-        }
-        let chunk_bits = secret_bits.min(SECRET_BITS_PER_WORD - word_bits);
-        secret_bits -= chunk_bits;
-        word_bits += chunk_bits;
-        word_val <<= chunk_bits;
-        word_val |=
-          (u16::from(self.entropy[entropy_idx]) >> secret_bits) & ((1u16 << chunk_bits) - 1);
-      }
-
-      word_val <<= 1;
-      word_val |= (extra_val >> extra_bits) & 1;
-      poly[POLY_NUM_CHECK_DIGITS + i] = word_val;
-    }
-
-    poly
-  }
-
-  fn from_internal(
-    language: Language,
-    masked_features: u8,
-    encoded_birthday: u16,
-    entropy: Zeroizing<[u8; 32]>,
-  ) -> Result<Polyseed, PolyseedError> {
-    if !polyseed_features_supported(masked_features) {
-      Err(PolyseedError::UnsupportedFeatures)?;
-    }
-
-    if !valid_entropy(&entropy) {
-      Err(PolyseedError::InvalidEntropy)?;
-    }
-
-    let mut res = Polyseed {
-      language,
-      birthday: encoded_birthday,
-      features: masked_features,
-      entropy,
-      checksum: 0,
-    };
-    res.checksum = poly_eval(&res.to_poly());
-    Ok(res)
-  }
-
-  /// Create a new `Polyseed` with specific internals.
-  ///
-  /// `birthday` is defined in seconds since the epoch.
-  pub fn from(
-    language: Language,
-    features: u8,
-    birthday: u64,
-    entropy: Zeroizing<[u8; 32]>,
-  ) -> Result<Polyseed, PolyseedError> {
-    Self::from_internal(language, user_features(features), birthday_encode(birthday), entropy)
-  }
-
-  /// Create a new `Polyseed`.
-  ///
-  /// This uses the system's time for the birthday, if available, else 0.
-  pub fn new<R: RngCore + CryptoRng>(rng: &mut R, language: Language) -> Polyseed {
-    // Get the birthday
-    #[cfg(feature = "std")]
-    let birthday =
-      SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or(core::time::Duration::ZERO).as_secs();
-    #[cfg(not(feature = "std"))]
-    let birthday = 0;
-
-    // Derive entropy
-    let mut entropy = Zeroizing::new([0; 32]);
-    rng.fill_bytes(entropy.as_mut());
-    entropy[SECRET_SIZE ..].fill(0);
-    entropy[SECRET_SIZE - 1] &= LAST_BYTE_SECRET_BITS_MASK;
-
-    Self::from(language, 0, birthday, entropy).unwrap()
-  }
-
-  /// Create a new `Polyseed` from a String.
-  #[allow(clippy::needless_pass_by_value)]
-  pub fn from_string(lang: Language, seed: Zeroizing<String>) -> Result<Polyseed, PolyseedError> {
-    // Decode the seed into its polynomial coefficients
-    let mut poly = [0; POLYSEED_LENGTH];
-
-    // Validate words are in the lang word list
-    let lang_word_list: &WordList = &LANGUAGES[&lang];
-    for (i, word) in seed.split_whitespace().enumerate() {
-      // Find the word's index
-      fn check_if_matches<S: AsRef<str>, I: Iterator<Item = S>>(
-        has_prefix: bool,
-        mut lang_words: I,
-        word: &str,
-      ) -> Option<usize> {
-        if has_prefix {
-          // Get the position of the word within the iterator
-          // Doesn't use starts_with and some words are substrs of others, leading to false
-          // positives
-          let mut get_position = || {
-            lang_words.position(|lang_word| {
-              let mut lang_word = lang_word.as_ref().chars();
-              let mut word = word.chars();
-
-              let mut res = true;
-              for _ in 0 .. PREFIX_LEN {
-                res &= lang_word.next() == word.next();
-              }
-              res
-            })
-          };
-          let res = get_position();
-          // If another word has this prefix, don't call it a match
-          if get_position().is_some() {
-            return None;
-          }
-          res
-        } else {
-          lang_words.position(|lang_word| lang_word.as_ref() == word)
-        }
-      }
-
-      let Some(coeff) = (if lang_word_list.has_accent {
-        let ascii = |word: &str| word.chars().filter(char::is_ascii).collect::<String>();
-        check_if_matches(
-          lang_word_list.has_prefix,
-          lang_word_list.words.iter().map(|lang_word| ascii(lang_word)),
-          &ascii(word),
-        )
-      } else {
-        check_if_matches(lang_word_list.has_prefix, lang_word_list.words.iter(), word)
-      }) else {
-        Err(PolyseedError::InvalidSeed)?
-      };
-
-      // WordList asserts the word list length is less than u16::MAX
-      poly[i] = u16::try_from(coeff).expect("coeff exceeded u16");
-    }
-
-    // xor out the coin
-    poly[POLY_NUM_CHECK_DIGITS] ^= COIN;
-
-    // Validate the checksum
-    if poly_eval(&poly) != 0 {
-      Err(PolyseedError::InvalidChecksum)?;
-    }
-
-    // Convert the polynomial into entropy
-    let mut entropy = Zeroizing::new([0; 32]);
-
-    let mut extra = 0;
-
-    let mut entropy_idx = 0;
-    let mut entropy_bits = 0;
-
-    let checksum = poly[0];
-    for mut word_val in poly.into_iter().skip(POLY_NUM_CHECK_DIGITS) {
-      // Parse the bottom bit, which is one of the bits of extra
-      // This iterates for less than 16 iters, meaning this won't drop any bits
-      extra <<= 1;
-      extra |= word_val & 1;
-      word_val >>= 1;
-
-      // 10 bits per word creates a [8, 2], [6, 4], [4, 6], [2, 8] cycle
-      // 15 % 4 is 3, leaving 2 bits off, and 152 (19 * 8) - 2 is 150, the amount of bits in the
-      // secret
-      let mut word_bits = GF_BITS - 1;
-      while word_bits > 0 {
-        if entropy_bits == BITS_PER_BYTE {
-          entropy_idx += 1;
-          entropy_bits = 0;
-        }
-        let chunk_bits = word_bits.min(BITS_PER_BYTE - entropy_bits);
-        word_bits -= chunk_bits;
-        let chunk_mask = (1u16 << chunk_bits) - 1;
-        if chunk_bits < BITS_PER_BYTE {
-          entropy[entropy_idx] <<= chunk_bits;
-        }
-        entropy[entropy_idx] |=
-          u8::try_from((word_val >> word_bits) & chunk_mask).expect("chunk exceeded u8");
-        entropy_bits += chunk_bits;
-      }
-    }
-
-    let birthday = extra & DATE_MASK;
-    // extra is contained to u16, and DATE_BITS > 8
-    let features =
-      u8::try_from(extra >> DATE_BITS).expect("couldn't convert extra >> DATE_BITS to u8");
-
-    let res = Self::from_internal(lang, features, birthday, entropy);
-    if let Ok(res) = res.as_ref() {
-      debug_assert_eq!(res.checksum, checksum);
-    }
-    res
-  }
-
-  /// When this seed was created, defined in seconds since the epoch.
-  pub fn birthday(&self) -> u64 {
-    birthday_decode(self.birthday)
-  }
-
-  /// This seed's features.
-  pub fn features(&self) -> u8 {
-    self.features
-  }
-
-  /// This seed's entropy.
-  pub fn entropy(&self) -> &Zeroizing<[u8; 32]> {
-    &self.entropy
-  }
-
-  /// The key derived from this seed.
-  pub fn key(&self) -> Zeroizing<[u8; 32]> {
-    let mut key = Zeroizing::new([0; 32]);
-    pbkdf2_hmac::<Sha3_256>(
-      self.entropy.as_slice(),
-      POLYSEED_SALT,
-      POLYSEED_KEYGEN_ITERATIONS,
-      key.as_mut(),
-    );
-    key
-  }
-
-  /// The String representation of this seed.
-  pub fn to_string(&self) -> Zeroizing<String> {
-    // Encode the polynomial with the existing checksum
-    let mut poly = self.to_poly();
-    poly[0] = self.checksum;
-
-    // Embed the coin
-    poly[POLY_NUM_CHECK_DIGITS] ^= COIN;
-
-    // Output words
-    let mut seed = Zeroizing::new(String::new());
-    let words = &LANGUAGES[&self.language].words;
-    for i in 0 .. poly.len() {
-      seed.push_str(words[usize::from(poly[i])]);
-      if i < poly.len() - 1 {
-        seed.push(' ');
-      }
-    }
-
-    seed
-  }
-}
diff --git a/networks/monero/wallet/polyseed/src/tests.rs b/networks/monero/wallet/polyseed/src/tests.rs
deleted file mode 100644
index 4913c217..00000000
--- a/networks/monero/wallet/polyseed/src/tests.rs
+++ /dev/null
@@ -1,218 +0,0 @@
-use zeroize::Zeroizing;
-use rand_core::OsRng;
-
-use crate::*;
-
-#[test]
-fn test_polyseed() {
-  struct Vector {
-    language: Language,
-    seed: String,
-    entropy: String,
-    birthday: u64,
-    has_prefix: bool,
-    has_accent: bool,
-  }
-
-  let vectors = [
-    Vector {
-      language: Language::English,
-      seed: "raven tail swear infant grief assist regular lamp \
-      duck valid someone little harsh puppy airport language"
-        .into(),
-      entropy: "dd76e7359a0ded37cd0ff0f3c829a5ae01673300000000000000000000000000".into(),
-      birthday: 1638446400,
-      has_prefix: true,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::Spanish,
-      seed: "eje fin parte célebre tabú pestaña lienzo puma \
-      prisión hora regalo lengua existir lápiz lote sonoro"
-        .into(),
-      entropy: "5a2b02df7db21fcbe6ec6df137d54c7b20fd2b00000000000000000000000000".into(),
-      birthday: 3118651200,
-      has_prefix: true,
-      has_accent: true,
-    },
-    Vector {
-      language: Language::French,
-      seed: "valable arracher décaler jeudi amusant dresser mener épaissir risible \
-      prouesse réserve ampleur ajuster muter caméra enchère"
-        .into(),
-      entropy: "11cfd870324b26657342c37360c424a14a050b00000000000000000000000000".into(),
-      birthday: 1679314966,
-      has_prefix: true,
-      has_accent: true,
-    },
-    Vector {
-      language: Language::Italian,
-      seed: "caduco midollo copione meninge isotopo illogico riflesso tartaruga fermento \
-      olandese normale tristezza episodio voragine forbito achille"
-        .into(),
-      entropy: "7ecc57c9b4652d4e31428f62bec91cfd55500600000000000000000000000000".into(),
-      birthday: 1679316358,
-      has_prefix: true,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::Portuguese,
-      seed: "caverna custear azedo adeus senador apertada sedoso omitir \
-      sujeito aurora videira molho cartaz gesso dentista tapar"
-        .into(),
-      entropy: "45473063711376cae38f1b3eba18c874124e1d00000000000000000000000000".into(),
-      birthday: 1679316657,
-      has_prefix: true,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::Czech,
-      seed: "usmrtit nora dotaz komunita zavalit funkce mzda sotva akce \
-      vesta kabel herna stodola uvolnit ustrnout email"
-        .into(),
-      entropy: "7ac8a4efd62d9c3c4c02e350d32326df37821c00000000000000000000000000".into(),
-      birthday: 1679316898,
-      has_prefix: true,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::Korean,
-      seed: "전망 선풍기 국제 무궁화 설사 기름 이론적 해안 절망 예선 \
-        지우개 보관 절망 말기 시각 귀신"
-        .into(),
-      entropy: "684663fda420298f42ed94b2c512ed38ddf12b00000000000000000000000000".into(),
-      birthday: 1679317073,
-      has_prefix: false,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::Japanese,
-      seed: "うちあわせ ちつじょ つごう しはい けんこう とおる てみやげ はんとし たんとう \
-      といれ おさない おさえる むかう ぬぐう なふだ せまる"
-        .into(),
-      entropy: "94e6665518a6286c6e3ba508a2279eb62b771f00000000000000000000000000".into(),
-      birthday: 1679318722,
-      has_prefix: false,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::ChineseTraditional,
-      seed: "亂 挖 斤 柄 代 圈 枝 轄 魯 論 函 開 勘 番 榮 壁".into(),
-      entropy: "b1594f585987ab0fd5a31da1f0d377dae5283f00000000000000000000000000".into(),
-      birthday: 1679426433,
-      has_prefix: false,
-      has_accent: false,
-    },
-    Vector {
-      language: Language::ChineseSimplified,
-      seed: "啊 百 族 府 票 划 伪 仓 叶 虾 借 溜 晨 左 等 鬼".into(),
-      entropy: "21cdd366f337b89b8d1bc1df9fe73047c22b0300000000000000000000000000".into(),
-      birthday: 1679426817,
-      has_prefix: false,
-      has_accent: false,
-    },
-    // The following seed requires the language specification in order to calculate
-    // a single valid checksum
-    Vector {
-      language: Language::Spanish,
-      seed: "impo sort usua cabi venu nobl oliv clim \
-        cont barr marc auto prod vaca torn fati"
-        .into(),
-      entropy: "dbfce25fe09b68a340e01c62417eeef43ad51800000000000000000000000000".into(),
-      birthday: 1701511650,
-      has_prefix: true,
-      has_accent: true,
-    },
-  ];
-
-  for vector in vectors {
-    let add_whitespace = |mut seed: String| {
-      seed.push(' ');
-      seed
-    };
-
-    let seed_without_accents = |seed: &str| {
-      seed
-        .split_whitespace()
-        .map(|w| w.chars().filter(char::is_ascii).collect::<String>())
-        .collect::<Vec<_>>()
-        .join(" ")
-    };
-
-    let trim_seed = |seed: &str| {
-      let seed_to_trim =
-        if vector.has_accent { seed_without_accents(seed) } else { seed.to_string() };
-      seed_to_trim
-        .split_whitespace()
-        .map(|w| {
-          let mut ascii = 0;
-          let mut to_take = w.len();
-          for (i, char) in w.chars().enumerate() {
-            if char.is_ascii() {
-              ascii += 1;
-            }
-            if ascii == PREFIX_LEN {
-              // +1 to include this character, which put us at the prefix length
-              to_take = i + 1;
-              break;
-            }
-          }
-          w.chars().take(to_take).collect::<String>()
-        })
-        .collect::<Vec<_>>()
-        .join(" ")
-    };
-
-    // String -> Seed
-    println!("{}. language: {:?}, seed: {}", line!(), vector.language, vector.seed.clone());
-    let seed = Polyseed::from_string(vector.language, Zeroizing::new(vector.seed.clone())).unwrap();
-    let trim = trim_seed(&vector.seed);
-    let add_whitespace = add_whitespace(vector.seed.clone());
-    let seed_without_accents = seed_without_accents(&vector.seed);
-
-    // Make sure a version with added whitespace still works
-    let whitespaced_seed =
-      Polyseed::from_string(vector.language, Zeroizing::new(add_whitespace)).unwrap();
-    assert_eq!(seed, whitespaced_seed);
-    // Check trimmed versions works
-    if vector.has_prefix {
-      let trimmed_seed = Polyseed::from_string(vector.language, Zeroizing::new(trim)).unwrap();
-      assert_eq!(seed, trimmed_seed);
-    }
-    // Check versions without accents work
-    if vector.has_accent {
-      let seed_without_accents =
-        Polyseed::from_string(vector.language, Zeroizing::new(seed_without_accents)).unwrap();
-      assert_eq!(seed, seed_without_accents);
-    }
-
-    let entropy = Zeroizing::new(hex::decode(vector.entropy).unwrap().try_into().unwrap());
-    assert_eq!(*seed.entropy(), entropy);
-    assert!(seed.birthday().abs_diff(vector.birthday) < TIME_STEP);
-
-    // Entropy -> Seed
-    let from_entropy = Polyseed::from(vector.language, 0, seed.birthday(), entropy).unwrap();
-    assert_eq!(seed.to_string(), from_entropy.to_string());
-
-    // Check against ourselves
-    {
-      let seed = Polyseed::new(&mut OsRng, vector.language);
-      println!("{}. seed: {}", line!(), *seed.to_string());
-      assert_eq!(seed, Polyseed::from_string(vector.language, seed.to_string()).unwrap());
-      assert_eq!(
-        seed,
-        Polyseed::from(vector.language, 0, seed.birthday(), seed.entropy().clone(),).unwrap()
-      );
-    }
-  }
-}
-
-#[test]
-fn test_invalid_polyseed() {
-  // This seed includes unsupported features bits and should error on decode
-  let seed = "include domain claim resemble urban hire lunch bird \
-    crucial fire best wife ring warm ignore model"
-    .into();
-  let res = Polyseed::from_string(Language::English, Zeroizing::new(seed));
-  assert_eq!(res, Err(PolyseedError::UnsupportedFeatures));
-}
diff --git a/networks/monero/wallet/polyseed/src/words/cs.rs b/networks/monero/wallet/polyseed/src/words/cs.rs
deleted file mode 100644
index aab4b8d4..00000000
--- a/networks/monero/wallet/polyseed/src/words/cs.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "abdikace",
-    "abeceda",
-    "adresa",
-    "agrese",
-    "akce",
-    "aktovka",
-    "alej",
-    "alkohol",
-    "amputace",
-    "ananas",
-    "andulka",
-    "anekdota",
-    "anketa",
-    "antika",
-    "anulovat",
-    "archa",
-    "arogance",
-    "asfalt",
-    "asistent",
-    "aspirace",
-    "astma",
-    "astronom",
-    "atlas",
-    "atletika",
-    "atol",
-    "autobus",
-    "azyl",
-    "babka",
-    "bachor",
-    "bacil",
-    "baculka",
-    "badatel",
-    "bageta",
-    "bagr",
-    "bahno",
-    "bakterie",
-    "balada",
-    "baletka",
-    "balkon",
-    "balonek",
-    "balvan",
-    "balza",
-    "bambus",
-    "bankomat",
-    "barbar",
-    "baret",
-    "barman",
-    "baroko",
-    "barva",
-    "baterka",
-    "batoh",
-    "bavlna",
-    "bazalka",
-    "bazilika",
-    "bazuka",
-    "bedna",
-    "beran",
-    "beseda",
-    "bestie",
-    "beton",
-    "bezinka",
-    "bezmoc",
-    "beztak",
-    "bicykl",
-    "bidlo",
-    "biftek",
-    "bikiny",
-    "bilance",
-    "biograf",
-    "biolog",
-    "bitva",
-    "bizon",
-    "blahobyt",
-    "blatouch",
-    "blecha",
-    "bledule",
-    "blesk",
-    "blikat",
-    "blizna",
-    "blokovat",
-    "bloudit",
-    "blud",
-    "bobek",
-    "bobr",
-    "bodlina",
-    "bodnout",
-    "bohatost",
-    "bojkot",
-    "bojovat",
-    "bokorys",
-    "bolest",
-    "borec",
-    "borovice",
-    "bota",
-    "boubel",
-    "bouchat",
-    "bouda",
-    "boule",
-    "bourat",
-    "boxer",
-    "bradavka",
-    "brambora",
-    "branka",
-    "bratr",
-    "brepta",
-    "briketa",
-    "brko",
-    "brloh",
-    "bronz",
-    "broskev",
-    "brunetka",
-    "brusinka",
-    "brzda",
-    "brzy",
-    "bublina",
-    "bubnovat",
-    "buchta",
-    "buditel",
-    "budka",
-    "budova",
-    "bufet",
-    "bujarost",
-    "bukvice",
-    "buldok",
-    "bulva",
-    "bunda",
-    "bunkr",
-    "burza",
-    "butik",
-    "buvol",
-    "buzola",
-    "bydlet",
-    "bylina",
-    "bytovka",
-    "bzukot",
-    "capart",
-    "carevna",
-    "cedr",
-    "cedule",
-    "cejch",
-    "cejn",
-    "cela",
-    "celer",
-    "celkem",
-    "celnice",
-    "cenina",
-    "cennost",
-    "cenovka",
-    "centrum",
-    "cenzor",
-    "cestopis",
-    "cetka",
-    "chalupa",
-    "chapadlo",
-    "charita",
-    "chata",
-    "chechtat",
-    "chemie",
-    "chichot",
-    "chirurg",
-    "chlad",
-    "chleba",
-    "chlubit",
-    "chmel",
-    "chmura",
-    "chobot",
-    "chochol",
-    "chodba",
-    "cholera",
-    "chomout",
-    "chopit",
-    "choroba",
-    "chov",
-    "chrapot",
-    "chrlit",
-    "chrt",
-    "chrup",
-    "chtivost",
-    "chudina",
-    "chutnat",
-    "chvat",
-    "chvilka",
-    "chvost",
-    "chyba",
-    "chystat",
-    "chytit",
-    "cibule",
-    "cigareta",
-    "cihelna",
-    "cihla",
-    "cinkot",
-    "cirkus",
-    "cisterna",
-    "citace",
-    "citrus",
-    "cizinec",
-    "cizost",
-    "clona",
-    "cokoliv",
-    "couvat",
-    "ctitel",
-    "ctnost",
-    "cudnost",
-    "cuketa",
-    "cukr",
-    "cupot",
-    "cvaknout",
-    "cval",
-    "cvik",
-    "cvrkot",
-    "cyklista",
-    "daleko",
-    "dareba",
-    "datel",
-    "datum",
-    "dcera",
-    "debata",
-    "dechovka",
-    "decibel",
-    "deficit",
-    "deflace",
-    "dekl",
-    "dekret",
-    "demokrat",
-    "deprese",
-    "derby",
-    "deska",
-    "detektiv",
-    "dikobraz",
-    "diktovat",
-    "dioda",
-    "diplom",
-    "disk",
-    "displej",
-    "divadlo",
-    "divoch",
-    "dlaha",
-    "dlouho",
-    "dluhopis",
-    "dnes",
-    "dobro",
-    "dobytek",
-    "docent",
-    "dochutit",
-    "dodnes",
-    "dohled",
-    "dohoda",
-    "dohra",
-    "dojem",
-    "dojnice",
-    "doklad",
-    "dokola",
-    "doktor",
-    "dokument",
-    "dolar",
-    "doleva",
-    "dolina",
-    "doma",
-    "dominant",
-    "domluvit",
-    "domov",
-    "donutit",
-    "dopad",
-    "dopis",
-    "doplnit",
-    "doposud",
-    "doprovod",
-    "dopustit",
-    "dorazit",
-    "dorost",
-    "dort",
-    "dosah",
-    "doslov",
-    "dostatek",
-    "dosud",
-    "dosyta",
-    "dotaz",
-    "dotek",
-    "dotknout",
-    "doufat",
-    "doutnat",
-    "dovozce",
-    "dozadu",
-    "doznat",
-    "dozorce",
-    "drahota",
-    "drak",
-    "dramatik",
-    "dravec",
-    "draze",
-    "drdol",
-    "drobnost",
-    "drogerie",
-    "drozd",
-    "drsnost",
-    "drtit",
-    "drzost",
-    "duben",
-    "duchovno",
-    "dudek",
-    "duha",
-    "duhovka",
-    "dusit",
-    "dusno",
-    "dutost",
-    "dvojice",
-    "dvorec",
-    "dynamit",
-    "ekolog",
-    "ekonomie",
-    "elektron",
-    "elipsa",
-    "email",
-    "emise",
-    "emoce",
-    "empatie",
-    "epizoda",
-    "epocha",
-    "epopej",
-    "epos",
-    "esej",
-    "esence",
-    "eskorta",
-    "eskymo",
-    "etiketa",
-    "euforie",
-    "evoluce",
-    "exekuce",
-    "exkurze",
-    "expedice",
-    "exploze",
-    "export",
-    "extrakt",
-    "facka",
-    "fajfka",
-    "fakulta",
-    "fanatik",
-    "fantazie",
-    "farmacie",
-    "favorit",
-    "fazole",
-    "federace",
-    "fejeton",
-    "fenka",
-    "fialka",
-    "figurant",
-    "filozof",
-    "filtr",
-    "finance",
-    "finta",
-    "fixace",
-    "fjord",
-    "flanel",
-    "flirt",
-    "flotila",
-    "fond",
-    "fosfor",
-    "fotbal",
-    "fotka",
-    "foton",
-    "frakce",
-    "freska",
-    "fronta",
-    "fukar",
-    "funkce",
-    "fyzika",
-    "galeje",
-    "garant",
-    "genetika",
-    "geolog",
-    "gilotina",
-    "glazura",
-    "glejt",
-    "golem",
-    "golfista",
-    "gotika",
-    "graf",
-    "gramofon",
-    "granule",
-    "grep",
-    "gril",
-    "grog",
-    "groteska",
-    "guma",
-    "hadice",
-    "hadr",
-    "hala",
-    "halenka",
-    "hanba",
-    "hanopis",
-    "harfa",
-    "harpuna",
-    "havran",
-    "hebkost",
-    "hejkal",
-    "hejno",
-    "hejtman",
-    "hektar",
-    "helma",
-    "hematom",
-    "herec",
-    "herna",
-    "heslo",
-    "hezky",
-    "historik",
-    "hladovka",
-    "hlasivky",
-    "hlava",
-    "hledat",
-    "hlen",
-    "hlodavec",
-    "hloh",
-    "hloupost",
-    "hltat",
-    "hlubina",
-    "hluchota",
-    "hmat",
-    "hmota",
-    "hmyz",
-    "hnis",
-    "hnojivo",
-    "hnout",
-    "hoblina",
-    "hoboj",
-    "hoch",
-    "hodiny",
-    "hodlat",
-    "hodnota",
-    "hodovat",
-    "hojnost",
-    "hokej",
-    "holinka",
-    "holka",
-    "holub",
-    "homole",
-    "honitba",
-    "honorace",
-    "horal",
-    "horda",
-    "horizont",
-    "horko",
-    "horlivec",
-    "hormon",
-    "hornina",
-    "horoskop",
-    "horstvo",
-    "hospoda",
-    "hostina",
-    "hotovost",
-    "houba",
-    "houf",
-    "houpat",
-    "houska",
-    "hovor",
-    "hradba",
-    "hranice",
-    "hravost",
-    "hrazda",
-    "hrbolek",
-    "hrdina",
-    "hrdlo",
-    "hrdost",
-    "hrnek",
-    "hrobka",
-    "hromada",
-    "hrot",
-    "hrouda",
-    "hrozen",
-    "hrstka",
-    "hrubost",
-    "hryzat",
-    "hubenost",
-    "hubnout",
-    "hudba",
-    "hukot",
-    "humr",
-    "husita",
-    "hustota",
-    "hvozd",
-    "hybnost",
-    "hydrant",
-    "hygiena",
-    "hymna",
-    "hysterik",
-    "idylka",
-    "ihned",
-    "ikona",
-    "iluze",
-    "imunita",
-    "infekce",
-    "inflace",
-    "inkaso",
-    "inovace",
-    "inspekce",
-    "internet",
-    "invalida",
-    "investor",
-    "inzerce",
-    "ironie",
-    "jablko",
-    "jachta",
-    "jahoda",
-    "jakmile",
-    "jakost",
-    "jalovec",
-    "jantar",
-    "jarmark",
-    "jaro",
-    "jasan",
-    "jasno",
-    "jatka",
-    "javor",
-    "jazyk",
-    "jedinec",
-    "jedle",
-    "jednatel",
-    "jehlan",
-    "jekot",
-    "jelen",
-    "jelito",
-    "jemnost",
-    "jenom",
-    "jepice",
-    "jeseter",
-    "jevit",
-    "jezdec",
-    "jezero",
-    "jinak",
-    "jindy",
-    "jinoch",
-    "jiskra",
-    "jistota",
-    "jitrnice",
-    "jizva",
-    "jmenovat",
-    "jogurt",
-    "jurta",
-    "kabaret",
-    "kabel",
-    "kabinet",
-    "kachna",
-    "kadet",
-    "kadidlo",
-    "kahan",
-    "kajak",
-    "kajuta",
-    "kakao",
-    "kaktus",
-    "kalamita",
-    "kalhoty",
-    "kalibr",
-    "kalnost",
-    "kamera",
-    "kamkoliv",
-    "kamna",
-    "kanibal",
-    "kanoe",
-    "kantor",
-    "kapalina",
-    "kapela",
-    "kapitola",
-    "kapka",
-    "kaple",
-    "kapota",
-    "kapr",
-    "kapusta",
-    "kapybara",
-    "karamel",
-    "karotka",
-    "karton",
-    "kasa",
-    "katalog",
-    "katedra",
-    "kauce",
-    "kauza",
-    "kavalec",
-    "kazajka",
-    "kazeta",
-    "kazivost",
-    "kdekoliv",
-    "kdesi",
-    "kedluben",
-    "kemp",
-    "keramika",
-    "kino",
-    "klacek",
-    "kladivo",
-    "klam",
-    "klapot",
-    "klasika",
-    "klaun",
-    "klec",
-    "klenba",
-    "klepat",
-    "klesnout",
-    "klid",
-    "klima",
-    "klisna",
-    "klobouk",
-    "klokan",
-    "klopa",
-    "kloub",
-    "klubovna",
-    "klusat",
-    "kluzkost",
-    "kmen",
-    "kmitat",
-    "kmotr",
-    "kniha",
-    "knot",
-    "koalice",
-    "koberec",
-    "kobka",
-    "kobliha",
-    "kobyla",
-    "kocour",
-    "kohout",
-    "kojenec",
-    "kokos",
-    "koktejl",
-    "kolaps",
-    "koleda",
-    "kolize",
-    "kolo",
-    "komando",
-    "kometa",
-    "komik",
-    "komnata",
-    "komora",
-    "kompas",
-    "komunita",
-    "konat",
-    "koncept",
-    "kondice",
-    "konec",
-    "konfese",
-    "kongres",
-    "konina",
-    "konkurs",
-    "kontakt",
-    "konzerva",
-    "kopanec",
-    "kopie",
-    "kopnout",
-    "koprovka",
-    "korbel",
-    "korektor",
-    "kormidlo",
-    "koroptev",
-    "korpus",
-    "koruna",
-    "koryto",
-    "korzet",
-    "kosatec",
-    "kostka",
-    "kotel",
-    "kotleta",
-    "kotoul",
-    "koukat",
-    "koupelna",
-    "kousek",
-    "kouzlo",
-    "kovboj",
-    "koza",
-    "kozoroh",
-    "krabice",
-    "krach",
-    "krajina",
-    "kralovat",
-    "krasopis",
-    "kravata",
-    "kredit",
-    "krejcar",
-    "kresba",
-    "kreveta",
-    "kriket",
-    "kritik",
-    "krize",
-    "krkavec",
-    "krmelec",
-    "krmivo",
-    "krocan",
-    "krok",
-    "kronika",
-    "kropit",
-    "kroupa",
-    "krovka",
-    "krtek",
-    "kruhadlo",
-    "krupice",
-    "krutost",
-    "krvinka",
-    "krychle",
-    "krypta",
-    "krystal",
-    "kryt",
-    "kudlanka",
-    "kufr",
-    "kujnost",
-    "kukla",
-    "kulajda",
-    "kulich",
-    "kulka",
-    "kulomet",
-    "kultura",
-    "kuna",
-    "kupodivu",
-    "kurt",
-    "kurzor",
-    "kutil",
-    "kvalita",
-    "kvasinka",
-    "kvestor",
-    "kynolog",
-    "kyselina",
-    "kytara",
-    "kytice",
-    "kytka",
-    "kytovec",
-    "kyvadlo",
-    "labrador",
-    "lachtan",
-    "ladnost",
-    "laik",
-    "lakomec",
-    "lamela",
-    "lampa",
-    "lanovka",
-    "lasice",
-    "laso",
-    "lastura",
-    "latinka",
-    "lavina",
-    "lebka",
-    "leckdy",
-    "leden",
-    "lednice",
-    "ledovka",
-    "ledvina",
-    "legenda",
-    "legie",
-    "legrace",
-    "lehce",
-    "lehkost",
-    "lehnout",
-    "lektvar",
-    "lenochod",
-    "lentilka",
-    "lepenka",
-    "lepidlo",
-    "letadlo",
-    "letec",
-    "letmo",
-    "letokruh",
-    "levhart",
-    "levitace",
-    "levobok",
-    "libra",
-    "lichotka",
-    "lidojed",
-    "lidskost",
-    "lihovina",
-    "lijavec",
-    "lilek",
-    "limetka",
-    "linie",
-    "linka",
-    "linoleum",
-    "listopad",
-    "litina",
-    "litovat",
-    "lobista",
-    "lodivod",
-    "logika",
-    "logoped",
-    "lokalita",
-    "loket",
-    "lomcovat",
-    "lopata",
-    "lopuch",
-    "lord",
-    "losos",
-    "lotr",
-    "loudal",
-    "louh",
-    "louka",
-    "louskat",
-    "lovec",
-    "lstivost",
-    "lucerna",
-    "lucifer",
-    "lump",
-    "lusk",
-    "lustrace",
-    "lvice",
-    "lyra",
-    "lyrika",
-    "lysina",
-    "madam",
-    "madlo",
-    "magistr",
-    "mahagon",
-    "majetek",
-    "majitel",
-    "majorita",
-    "makak",
-    "makovice",
-    "makrela",
-    "malba",
-    "malina",
-    "malovat",
-    "malvice",
-    "maminka",
-    "mandle",
-    "manko",
-    "marnost",
-    "masakr",
-    "maskot",
-    "masopust",
-    "matice",
-    "matrika",
-    "maturita",
-    "mazanec",
-    "mazivo",
-    "mazlit",
-    "mazurka",
-    "mdloba",
-    "mechanik",
-    "meditace",
-    "medovina",
-    "melasa",
-    "meloun",
-    "mentolka",
-    "metla",
-    "metoda",
-    "metr",
-    "mezera",
-    "migrace",
-    "mihnout",
-    "mihule",
-    "mikina",
-    "mikrofon",
-    "milenec",
-    "milimetr",
-    "milost",
-    "mimika",
-    "mincovna",
-    "minibar",
-    "minomet",
-    "minulost",
-    "miska",
-    "mistr",
-    "mixovat",
-    "mladost",
-    "mlha",
-    "mlhovina",
-    "mlok",
-    "mlsat",
-    "mluvit",
-    "mnich",
-    "mnohem",
-    "mobil",
-    "mocnost",
-    "modelka",
-    "modlitba",
-    "mohyla",
-    "mokro",
-    "molekula",
-    "momentka",
-    "monarcha",
-    "monokl",
-    "monstrum",
-    "montovat",
-    "monzun",
-    "mosaz",
-    "moskyt",
-    "most",
-    "motivace",
-    "motorka",
-    "motyka",
-    "moucha",
-    "moudrost",
-    "mozaika",
-    "mozek",
-    "mozol",
-    "mramor",
-    "mravenec",
-    "mrkev",
-    "mrtvola",
-    "mrzet",
-    "mrzutost",
-    "mstitel",
-    "mudrc",
-    "muflon",
-    "mulat",
-    "mumie",
-    "munice",
-    "muset",
-    "mutace",
-    "muzeum",
-    "muzikant",
-    "myslivec",
-    "mzda",
-    "nabourat",
-    "nachytat",
-    "nadace",
-    "nadbytek",
-    "nadhoz",
-    "nadobro",
-    "nadpis",
-    "nahlas",
-    "nahnat",
-    "nahodile",
-    "nahradit",
-    "naivita",
-    "najednou",
-    "najisto",
-    "najmout",
-    "naklonit",
-    "nakonec",
-    "nakrmit",
-    "nalevo",
-    "namazat",
-    "namluvit",
-    "nanometr",
-    "naoko",
-    "naopak",
-    "naostro",
-    "napadat",
-    "napevno",
-    "naplnit",
-    "napnout",
-    "naposled",
-    "naprosto",
-    "narodit",
-    "naruby",
-    "narychlo",
-    "nasadit",
-    "nasekat",
-    "naslepo",
-    "nastat",
-    "natolik",
-    "navenek",
-    "navrch",
-    "navzdory",
-    "nazvat",
-    "nebe",
-    "nechat",
-    "necky",
-    "nedaleko",
-    "nedbat",
-    "neduh",
-    "negace",
-    "nehet",
-    "nehoda",
-    "nejen",
-    "nejprve",
-    "neklid",
-    "nelibost",
-    "nemilost",
-    "nemoc",
-    "neochota",
-    "neonka",
-    "nepokoj",
-    "nerost",
-    "nerv",
-    "nesmysl",
-    "nesoulad",
-    "netvor",
-    "neuron",
-    "nevina",
-    "nezvykle",
-    "nicota",
-    "nijak",
-    "nikam",
-    "nikdy",
-    "nikl",
-    "nikterak",
-    "nitro",
-    "nocleh",
-    "nohavice",
-    "nominace",
-    "nora",
-    "norek",
-    "nositel",
-    "nosnost",
-    "nouze",
-    "noviny",
-    "novota",
-    "nozdra",
-    "nuda",
-    "nudle",
-    "nuget",
-    "nutit",
-    "nutnost",
-    "nutrie",
-    "nymfa",
-    "obal",
-    "obarvit",
-    "obava",
-    "obdiv",
-    "obec",
-    "obehnat",
-    "obejmout",
-    "obezita",
-    "obhajoba",
-    "obilnice",
-    "objasnit",
-    "objekt",
-    "obklopit",
-    "oblast",
-    "oblek",
-    "obliba",
-    "obloha",
-    "obluda",
-    "obnos",
-    "obohatit",
-    "obojek",
-    "obout",
-    "obrazec",
-    "obrna",
-    "obruba",
-    "obrys",
-    "obsah",
-    "obsluha",
-    "obstarat",
-    "obuv",
-    "obvaz",
-    "obvinit",
-    "obvod",
-    "obvykle",
-    "obyvatel",
-    "obzor",
-    "ocas",
-    "ocel",
-    "ocenit",
-    "ochladit",
-    "ochota",
-    "ochrana",
-    "ocitnout",
-    "odboj",
-    "odbyt",
-    "odchod",
-    "odcizit",
-    "odebrat",
-    "odeslat",
-    "odevzdat",
-    "odezva",
-    "odhadce",
-    "odhodit",
-    "odjet",
-    "odjinud",
-    "odkaz",
-    "odkoupit",
-    "odliv",
-    "odluka",
-    "odmlka",
-    "odolnost",
-    "odpad",
-    "odpis",
-    "odplout",
-    "odpor",
-    "odpustit",
-    "odpykat",
-    "odrazka",
-    "odsoudit",
-    "odstup",
-    "odsun",
-    "odtok",
-    "odtud",
-    "odvaha",
-    "odveta",
-    "odvolat",
-    "odvracet",
-    "odznak",
-    "ofina",
-    "ofsajd",
-    "ohlas",
-    "ohnisko",
-    "ohrada",
-    "ohrozit",
-    "ohryzek",
-    "okap",
-    "okenice",
-    "oklika",
-    "okno",
-    "okouzlit",
-    "okovy",
-    "okrasa",
-    "okres",
-    "okrsek",
-    "okruh",
-    "okupant",
-    "okurka",
-    "okusit",
-    "olejnina",
-    "olizovat",
-    "omak",
-    "omeleta",
-    "omezit",
-    "omladina",
-    "omlouvat",
-    "omluva",
-    "omyl",
-    "onehdy",
-    "opakovat",
-    "opasek",
-    "operace",
-    "opice",
-    "opilost",
-    "opisovat",
-    "opora",
-    "opozice",
-    "opravdu",
-    "oproti",
-    "orbital",
-    "orchestr",
-    "orgie",
-    "orlice",
-    "orloj",
-    "ortel",
-    "osada",
-    "oschnout",
-    "osika",
-    "osivo",
-    "oslava",
-    "oslepit",
-    "oslnit",
-    "oslovit",
-    "osnova",
-    "osoba",
-    "osolit",
-    "ospalec",
-    "osten",
-    "ostraha",
-    "ostuda",
-    "ostych",
-    "osvojit",
-    "oteplit",
-    "otisk",
-    "otop",
-    "otrhat",
-    "otrlost",
-    "otrok",
-    "otruby",
-    "otvor",
-    "ovanout",
-    "ovar",
-    "oves",
-    "ovlivnit",
-    "ovoce",
-    "oxid",
-    "ozdoba",
-    "pachatel",
-    "pacient",
-    "padouch",
-    "pahorek",
-    "pakt",
-    "palanda",
-    "palec",
-    "palivo",
-    "paluba",
-    "pamflet",
-    "pamlsek",
-    "panenka",
-    "panika",
-    "panna",
-    "panovat",
-    "panstvo",
-    "pantofle",
-    "paprika",
-    "parketa",
-    "parodie",
-    "parta",
-    "paruka",
-    "paryba",
-    "paseka",
-    "pasivita",
-    "pastelka",
-    "patent",
-    "patrona",
-    "pavouk",
-    "pazneht",
-    "pazourek",
-    "pecka",
-    "pedagog",
-    "pejsek",
-    "peklo",
-    "peloton",
-    "penalta",
-    "pendrek",
-    "penze",
-    "periskop",
-    "pero",
-    "pestrost",
-    "petarda",
-    "petice",
-    "petrolej",
-    "pevnina",
-    "pexeso",
-    "pianista",
-    "piha",
-    "pijavice",
-    "pikle",
-    "piknik",
-    "pilina",
-    "pilnost",
-    "pilulka",
-    "pinzeta",
-    "pipeta",
-    "pisatel",
-    "pistole",
-    "pitevna",
-    "pivnice",
-    "pivovar",
-    "placenta",
-    "plakat",
-    "plamen",
-    "planeta",
-    "plastika",
-    "platit",
-    "plavidlo",
-    "plaz",
-    "plech",
-    "plemeno",
-    "plenta",
-    "ples",
-    "pletivo",
-    "plevel",
-    "plivat",
-    "plnit",
-    "plno",
-    "plocha",
-    "plodina",
-    "plomba",
-    "plout",
-    "pluk",
-    "plyn",
-    "pobavit",
-    "pobyt",
-    "pochod",
-    "pocit",
-    "poctivec",
-    "podat",
-    "podcenit",
-    "podepsat",
-    "podhled",
-    "podivit",
-    "podklad",
-    "podmanit",
-    "podnik",
-    "podoba",
-    "podpora",
-    "podraz",
-    "podstata",
-    "podvod",
-    "podzim",
-    "poezie",
-    "pohanka",
-    "pohnutka",
-    "pohovor",
-    "pohroma",
-    "pohyb",
-    "pointa",
-    "pojistka",
-    "pojmout",
-    "pokazit",
-    "pokles",
-    "pokoj",
-    "pokrok",
-    "pokuta",
-    "pokyn",
-    "poledne",
-    "polibek",
-    "polknout",
-    "poloha",
-    "polynom",
-    "pomalu",
-    "pominout",
-    "pomlka",
-    "pomoc",
-    "pomsta",
-    "pomyslet",
-    "ponechat",
-    "ponorka",
-    "ponurost",
-    "popadat",
-    "popel",
-    "popisek",
-    "poplach",
-    "poprosit",
-    "popsat",
-    "popud",
-    "poradce",
-    "porce",
-    "porod",
-    "porucha",
-    "poryv",
-    "posadit",
-    "posed",
-    "posila",
-    "poskok",
-    "poslanec",
-    "posoudit",
-    "pospolu",
-    "postava",
-    "posudek",
-    "posyp",
-    "potah",
-    "potkan",
-    "potlesk",
-    "potomek",
-    "potrava",
-    "potupa",
-    "potvora",
-    "poukaz",
-    "pouto",
-    "pouzdro",
-    "povaha",
-    "povidla",
-    "povlak",
-    "povoz",
-    "povrch",
-    "povstat",
-    "povyk",
-    "povzdech",
-    "pozdrav",
-    "pozemek",
-    "poznatek",
-    "pozor",
-    "pozvat",
-    "pracovat",
-    "prahory",
-    "praktika",
-    "prales",
-    "praotec",
-    "praporek",
-    "prase",
-    "pravda",
-    "princip",
-    "prkno",
-    "probudit",
-    "procento",
-    "prodej",
-    "profese",
-    "prohra",
-    "projekt",
-    "prolomit",
-    "promile",
-    "pronikat",
-    "propad",
-    "prorok",
-    "prosba",
-    "proton",
-    "proutek",
-    "provaz",
-    "prskavka",
-    "prsten",
-    "prudkost",
-    "prut",
-    "prvek",
-    "prvohory",
-    "psanec",
-    "psovod",
-    "pstruh",
-    "ptactvo",
-    "puberta",
-    "puch",
-    "pudl",
-    "pukavec",
-    "puklina",
-    "pukrle",
-    "pult",
-    "pumpa",
-    "punc",
-    "pupen",
-    "pusa",
-    "pusinka",
-    "pustina",
-    "putovat",
-    "putyka",
-    "pyramida",
-    "pysk",
-    "pytel",
-    "racek",
-    "rachot",
-    "radiace",
-    "radnice",
-    "radon",
-    "raft",
-    "ragby",
-    "raketa",
-    "rakovina",
-    "rameno",
-    "rampouch",
-    "rande",
-    "rarach",
-    "rarita",
-    "rasovna",
-    "rastr",
-    "ratolest",
-    "razance",
-    "razidlo",
-    "reagovat",
-    "reakce",
-    "recept",
-    "redaktor",
-    "referent",
-    "reflex",
-    "rejnok",
-    "reklama",
-    "rekord",
-    "rekrut",
-    "rektor",
-    "reputace",
-    "revize",
-    "revma",
-    "revolver",
-    "rezerva",
-    "riskovat",
-    "riziko",
-    "robotika",
-    "rodokmen",
-    "rohovka",
-    "rokle",
-    "rokoko",
-    "romaneto",
-    "ropovod",
-    "ropucha",
-    "rorejs",
-    "rosol",
-    "rostlina",
-    "rotmistr",
-    "rotoped",
-    "rotunda",
-    "roubenka",
-    "roucho",
-    "roup",
-    "roura",
-    "rovina",
-    "rovnice",
-    "rozbor",
-    "rozchod",
-    "rozdat",
-    "rozeznat",
-    "rozhodce",
-    "rozinka",
-    "rozjezd",
-    "rozkaz",
-    "rozloha",
-    "rozmar",
-    "rozpad",
-    "rozruch",
-    "rozsah",
-    "roztok",
-    "rozum",
-    "rozvod",
-    "rubrika",
-    "ruchadlo",
-    "rukavice",
-    "rukopis",
-    "ryba",
-    "rybolov",
-    "rychlost",
-    "rydlo",
-    "rypadlo",
-    "rytina",
-    "ryzost",
-    "sadista",
-    "sahat",
-    "sako",
-    "samec",
-    "samizdat",
-    "samota",
-    "sanitka",
-    "sardinka",
-    "sasanka",
-    "satelit",
-    "sazba",
-    "sazenice",
-    "sbor",
-    "schovat",
-    "sebranka",
-    "secese",
-    "sedadlo",
-    "sediment",
-    "sedlo",
-    "sehnat",
-    "sejmout",
-    "sekera",
-    "sekta",
-    "sekunda",
-    "sekvoje",
-    "semeno",
-    "seno",
-    "servis",
-    "sesadit",
-    "seshora",
-    "seskok",
-    "seslat",
-    "sestra",
-    "sesuv",
-    "sesypat",
-    "setba",
-    "setina",
-    "setkat",
-    "setnout",
-    "setrvat",
-    "sever",
-    "seznam",
-    "shoda",
-    "shrnout",
-    "sifon",
-    "silnice",
-    "sirka",
-    "sirotek",
-    "sirup",
-    "situace",
-    "skafandr",
-    "skalisko",
-    "skanzen",
-    "skaut",
-    "skeptik",
-    "skica",
-    "skladba",
-    "sklenice",
-    "sklo",
-    "skluz",
-    "skoba",
-    "skokan",
-    "skoro",
-    "skripta",
-    "skrz",
-    "skupina",
-    "skvost",
-    "skvrna",
-    "slabika",
-    "sladidlo",
-    "slanina",
-    "slast",
-    "slavnost",
-    "sledovat",
-    "slepec",
-    "sleva",
-    "slezina",
-    "slib",
-    "slina",
-    "sliznice",
-    "slon",
-    "sloupek",
-    "slovo",
-    "sluch",
-    "sluha",
-    "slunce",
-    "slupka",
-    "slza",
-    "smaragd",
-    "smetana",
-    "smilstvo",
-    "smlouva",
-    "smog",
-    "smrad",
-    "smrk",
-    "smrtka",
-    "smutek",
-    "smysl",
-    "snad",
-    "snaha",
-    "snob",
-    "sobota",
-    "socha",
-    "sodovka",
-    "sokol",
-    "sopka",
-    "sotva",
-    "souboj",
-    "soucit",
-    "soudce",
-    "souhlas",
-    "soulad",
-    "soumrak",
-    "souprava",
-    "soused",
-    "soutok",
-    "souviset",
-    "spalovna",
-    "spasitel",
-    "spis",
-    "splav",
-    "spodek",
-    "spojenec",
-    "spolu",
-    "sponzor",
-    "spornost",
-    "spousta",
-    "sprcha",
-    "spustit",
-    "sranda",
-    "sraz",
-    "srdce",
-    "srna",
-    "srnec",
-    "srovnat",
-    "srpen",
-    "srst",
-    "srub",
-    "stanice",
-    "starosta",
-    "statika",
-    "stavba",
-    "stehno",
-    "stezka",
-    "stodola",
-    "stolek",
-    "stopa",
-    "storno",
-    "stoupat",
-    "strach",
-    "stres",
-    "strhnout",
-    "strom",
-    "struna",
-    "studna",
-    "stupnice",
-    "stvol",
-    "styk",
-    "subjekt",
-    "subtropy",
-    "suchar",
-    "sudost",
-    "sukno",
-    "sundat",
-    "sunout",
-    "surikata",
-    "surovina",
-    "svah",
-    "svalstvo",
-    "svatba",
-    "svazek",
-    "svetr",
-    "svisle",
-    "svitek",
-    "svoboda",
-    "svodidlo",
-    "svorka",
-    "svrab",
-    "sykavka",
-    "sykot",
-    "synek",
-    "synovec",
-    "sypat",
-    "sypkost",
-    "syrovost",
-    "sysel",
-    "sytost",
-    "tabletka",
-    "tabule",
-    "tahoun",
-    "tajemno",
-    "tajfun",
-    "tajga",
-    "tajit",
-    "tajnost",
-    "taktika",
-    "tamhle",
-    "tampon",
-    "tancovat",
-    "tanec",
-    "tanker",
-    "tapeta",
-    "tavenina",
-    "tazatel",
-    "technika",
-    "tehdy",
-    "tekutina",
-    "telefon",
-    "temnota",
-    "tendence",
-    "tenista",
-    "tenor",
-    "teplota",
-    "tepna",
-    "teprve",
-    "terapie",
-    "termoska",
-    "textil",
-    "ticho",
-    "tiskopis",
-    "titulek",
-    "tkadlec",
-    "tkanina",
-    "tlapka",
-    "tleskat",
-    "tlukot",
-    "tlupa",
-    "tmel",
-    "toaleta",
-    "topinka",
-    "topol",
-    "torzo",
-    "touha",
-    "toulec",
-    "tradice",
-    "traktor",
-    "tramp",
-    "trasa",
-    "traverza",
-    "trefit",
-    "trest",
-    "trezor",
-    "trhavina",
-    "trhlina",
-    "trochu",
-    "trojice",
-    "troska",
-    "trouba",
-    "trpce",
-    "trpitel",
-    "trpkost",
-    "trubec",
-    "truchlit",
-    "truhlice",
-    "trus",
-    "trvat",
-    "tudy",
-    "tuhnout",
-    "tuhost",
-    "tundra",
-    "turista",
-    "turnaj",
-    "tuzemsko",
-    "tvaroh",
-    "tvorba",
-    "tvrdost",
-    "tvrz",
-    "tygr",
-    "tykev",
-    "ubohost",
-    "uboze",
-    "ubrat",
-    "ubrousek",
-    "ubrus",
-    "ubytovna",
-    "ucho",
-    "uctivost",
-    "udivit",
-    "uhradit",
-    "ujednat",
-    "ujistit",
-    "ujmout",
-    "ukazatel",
-    "uklidnit",
-    "uklonit",
-    "ukotvit",
-    "ukrojit",
-    "ulice",
-    "ulita",
-    "ulovit",
-    "umyvadlo",
-    "unavit",
-    "uniforma",
-    "uniknout",
-    "upadnout",
-    "uplatnit",
-    "uplynout",
-    "upoutat",
-    "upravit",
-    "uran",
-    "urazit",
-    "usednout",
-    "usilovat",
-    "usmrtit",
-    "usnadnit",
-    "usnout",
-    "usoudit",
-    "ustlat",
-    "ustrnout",
-    "utahovat",
-    "utkat",
-    "utlumit",
-    "utonout",
-    "utopenec",
-    "utrousit",
-    "uvalit",
-    "uvolnit",
-    "uvozovka",
-    "uzdravit",
-    "uzel",
-    "uzenina",
-    "uzlina",
-    "uznat",
-    "vagon",
-    "valcha",
-    "valoun",
-    "vana",
-    "vandal",
-    "vanilka",
-    "varan",
-    "varhany",
-    "varovat",
-    "vcelku",
-    "vchod",
-    "vdova",
-    "vedro",
-    "vegetace",
-    "vejce",
-    "velbloud",
-    "veletrh",
-    "velitel",
-    "velmoc",
-    "velryba",
-    "venkov",
-    "veranda",
-    "verze",
-    "veselka",
-    "veskrze",
-    "vesnice",
-    "vespodu",
-    "vesta",
-    "veterina",
-    "veverka",
-    "vibrace",
-    "vichr",
-    "videohra",
-    "vidina",
-    "vidle",
-    "vila",
-    "vinice",
-    "viset",
-    "vitalita",
-    "vize",
-    "vizitka",
-    "vjezd",
-    "vklad",
-    "vkus",
-    "vlajka",
-    "vlak",
-    "vlasec",
-    "vlevo",
-    "vlhkost",
-    "vliv",
-    "vlnovka",
-    "vloupat",
-    "vnucovat",
-    "vnuk",
-    "voda",
-    "vodivost",
-    "vodoznak",
-    "vodstvo",
-    "vojensky",
-    "vojna",
-    "vojsko",
-    "volant",
-    "volba",
-    "volit",
-    "volno",
-    "voskovka",
-    "vozidlo",
-    "vozovna",
-    "vpravo",
-    "vrabec",
-    "vracet",
-    "vrah",
-    "vrata",
-    "vrba",
-    "vrcholek",
-    "vrhat",
-    "vrstva",
-    "vrtule",
-    "vsadit",
-    "vstoupit",
-    "vstup",
-    "vtip",
-    "vybavit",
-    "vybrat",
-    "vychovat",
-    "vydat",
-    "vydra",
-    "vyfotit",
-    "vyhledat",
-    "vyhnout",
-    "vyhodit",
-    "vyhradit",
-    "vyhubit",
-    "vyjasnit",
-    "vyjet",
-    "vyjmout",
-    "vyklopit",
-    "vykonat",
-    "vylekat",
-    "vymazat",
-    "vymezit",
-    "vymizet",
-    "vymyslet",
-    "vynechat",
-    "vynikat",
-    "vynutit",
-    "vypadat",
-    "vyplatit",
-    "vypravit",
-    "vypustit",
-    "vyrazit",
-    "vyrovnat",
-    "vyrvat",
-    "vyslovit",
-    "vysoko",
-    "vystavit",
-    "vysunout",
-    "vysypat",
-    "vytasit",
-    "vytesat",
-    "vytratit",
-    "vyvinout",
-    "vyvolat",
-    "vyvrhel",
-    "vyzdobit",
-    "vyznat",
-    "vzadu",
-    "vzbudit",
-    "vzchopit",
-    "vzdor",
-    "vzduch",
-    "vzdychat",
-    "vzestup",
-    "vzhledem",
-    "vzkaz",
-    "vzlykat",
-    "vznik",
-    "vzorek",
-    "vzpoura",
-    "vztah",
-    "vztek",
-    "xylofon",
-    "zabrat",
-    "zabydlet",
-    "zachovat",
-    "zadarmo",
-    "zadusit",
-    "zafoukat",
-    "zahltit",
-    "zahodit",
-    "zahrada",
-    "zahynout",
-    "zajatec",
-    "zajet",
-    "zajistit",
-    "zaklepat",
-    "zakoupit",
-    "zalepit",
-    "zamezit",
-    "zamotat",
-    "zamyslet",
-    "zanechat",
-    "zanikat",
-    "zaplatit",
-    "zapojit",
-    "zapsat",
-    "zarazit",
-    "zastavit",
-    "zasunout",
-    "zatajit",
-    "zatemnit",
-    "zatknout",
-    "zaujmout",
-    "zavalit",
-    "zavelet",
-    "zavinit",
-    "zavolat",
-    "zavrtat",
-    "zazvonit",
-    "zbavit",
-    "zbrusu",
-    "zbudovat",
-    "zbytek",
-    "zdaleka",
-    "zdarma",
-    "zdatnost",
-    "zdivo",
-    "zdobit",
-    "zdroj",
-    "zdvih",
-    "zdymadlo",
-    "zelenina",
-    "zeman",
-    "zemina",
-    "zeptat",
-    "zezadu",
-    "zezdola",
-    "zhatit",
-    "zhltnout",
-    "zhluboka",
-    "zhotovit",
-    "zhruba",
-    "zima",
-    "zimnice",
-    "zjemnit",
-    "zklamat",
-    "zkoumat",
-    "zkratka",
-    "zkumavka",
-    "zlato",
-    "zlehka",
-    "zloba",
-    "zlom",
-    "zlost",
-    "zlozvyk",
-    "zmapovat",
-    "zmar",
-    "zmatek",
-    "zmije",
-    "zmizet",
-    "zmocnit",
-    "zmodrat",
-    "zmrzlina",
-    "zmutovat",
-    "znak",
-    "znalost",
-    "znamenat",
-    "znovu",
-    "zobrazit",
-    "zotavit",
-    "zoubek",
-    "zoufale",
-    "zplodit",
-    "zpomalit",
-    "zprava",
-    "zprostit",
-    "zprudka",
-    "zprvu",
-    "zrada",
-    "zranit",
-    "zrcadlo",
-    "zrnitost",
-    "zrno",
-    "zrovna",
-    "zrychlit",
-    "zrzavost",
-    "zticha",
-    "ztratit",
-    "zubovina",
-    "zubr",
-    "zvednout",
-    "zvenku",
-    "zvesela",
-    "zvon",
-    "zvrat",
-    "zvukovod",
-    "zvyk"
-]
diff --git a/networks/monero/wallet/polyseed/src/words/en.rs b/networks/monero/wallet/polyseed/src/words/en.rs
deleted file mode 100644
index aa90e28d..00000000
--- a/networks/monero/wallet/polyseed/src/words/en.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "abandon",
-    "ability",
-    "able",
-    "about",
-    "above",
-    "absent",
-    "absorb",
-    "abstract",
-    "absurd",
-    "abuse",
-    "access",
-    "accident",
-    "account",
-    "accuse",
-    "achieve",
-    "acid",
-    "acoustic",
-    "acquire",
-    "across",
-    "act",
-    "action",
-    "actor",
-    "actress",
-    "actual",
-    "adapt",
-    "add",
-    "addict",
-    "address",
-    "adjust",
-    "admit",
-    "adult",
-    "advance",
-    "advice",
-    "aerobic",
-    "affair",
-    "afford",
-    "afraid",
-    "again",
-    "age",
-    "agent",
-    "agree",
-    "ahead",
-    "aim",
-    "air",
-    "airport",
-    "aisle",
-    "alarm",
-    "album",
-    "alcohol",
-    "alert",
-    "alien",
-    "all",
-    "alley",
-    "allow",
-    "almost",
-    "alone",
-    "alpha",
-    "already",
-    "also",
-    "alter",
-    "always",
-    "amateur",
-    "amazing",
-    "among",
-    "amount",
-    "amused",
-    "analyst",
-    "anchor",
-    "ancient",
-    "anger",
-    "angle",
-    "angry",
-    "animal",
-    "ankle",
-    "announce",
-    "annual",
-    "another",
-    "answer",
-    "antenna",
-    "antique",
-    "anxiety",
-    "any",
-    "apart",
-    "apology",
-    "appear",
-    "apple",
-    "approve",
-    "april",
-    "arch",
-    "arctic",
-    "area",
-    "arena",
-    "argue",
-    "arm",
-    "armed",
-    "armor",
-    "army",
-    "around",
-    "arrange",
-    "arrest",
-    "arrive",
-    "arrow",
-    "art",
-    "artefact",
-    "artist",
-    "artwork",
-    "ask",
-    "aspect",
-    "assault",
-    "asset",
-    "assist",
-    "assume",
-    "asthma",
-    "athlete",
-    "atom",
-    "attack",
-    "attend",
-    "attitude",
-    "attract",
-    "auction",
-    "audit",
-    "august",
-    "aunt",
-    "author",
-    "auto",
-    "autumn",
-    "average",
-    "avocado",
-    "avoid",
-    "awake",
-    "aware",
-    "away",
-    "awesome",
-    "awful",
-    "awkward",
-    "axis",
-    "baby",
-    "bachelor",
-    "bacon",
-    "badge",
-    "bag",
-    "balance",
-    "balcony",
-    "ball",
-    "bamboo",
-    "banana",
-    "banner",
-    "bar",
-    "barely",
-    "bargain",
-    "barrel",
-    "base",
-    "basic",
-    "basket",
-    "battle",
-    "beach",
-    "bean",
-    "beauty",
-    "because",
-    "become",
-    "beef",
-    "before",
-    "begin",
-    "behave",
-    "behind",
-    "believe",
-    "below",
-    "belt",
-    "bench",
-    "benefit",
-    "best",
-    "betray",
-    "better",
-    "between",
-    "beyond",
-    "bicycle",
-    "bid",
-    "bike",
-    "bind",
-    "biology",
-    "bird",
-    "birth",
-    "bitter",
-    "black",
-    "blade",
-    "blame",
-    "blanket",
-    "blast",
-    "bleak",
-    "bless",
-    "blind",
-    "blood",
-    "blossom",
-    "blouse",
-    "blue",
-    "blur",
-    "blush",
-    "board",
-    "boat",
-    "body",
-    "boil",
-    "bomb",
-    "bone",
-    "bonus",
-    "book",
-    "boost",
-    "border",
-    "boring",
-    "borrow",
-    "boss",
-    "bottom",
-    "bounce",
-    "box",
-    "boy",
-    "bracket",
-    "brain",
-    "brand",
-    "brass",
-    "brave",
-    "bread",
-    "breeze",
-    "brick",
-    "bridge",
-    "brief",
-    "bright",
-    "bring",
-    "brisk",
-    "broccoli",
-    "broken",
-    "bronze",
-    "broom",
-    "brother",
-    "brown",
-    "brush",
-    "bubble",
-    "buddy",
-    "budget",
-    "buffalo",
-    "build",
-    "bulb",
-    "bulk",
-    "bullet",
-    "bundle",
-    "bunker",
-    "burden",
-    "burger",
-    "burst",
-    "bus",
-    "business",
-    "busy",
-    "butter",
-    "buyer",
-    "buzz",
-    "cabbage",
-    "cabin",
-    "cable",
-    "cactus",
-    "cage",
-    "cake",
-    "call",
-    "calm",
-    "camera",
-    "camp",
-    "can",
-    "canal",
-    "cancel",
-    "candy",
-    "cannon",
-    "canoe",
-    "canvas",
-    "canyon",
-    "capable",
-    "capital",
-    "captain",
-    "car",
-    "carbon",
-    "card",
-    "cargo",
-    "carpet",
-    "carry",
-    "cart",
-    "case",
-    "cash",
-    "casino",
-    "castle",
-    "casual",
-    "cat",
-    "catalog",
-    "catch",
-    "category",
-    "cattle",
-    "caught",
-    "cause",
-    "caution",
-    "cave",
-    "ceiling",
-    "celery",
-    "cement",
-    "census",
-    "century",
-    "cereal",
-    "certain",
-    "chair",
-    "chalk",
-    "champion",
-    "change",
-    "chaos",
-    "chapter",
-    "charge",
-    "chase",
-    "chat",
-    "cheap",
-    "check",
-    "cheese",
-    "chef",
-    "cherry",
-    "chest",
-    "chicken",
-    "chief",
-    "child",
-    "chimney",
-    "choice",
-    "choose",
-    "chronic",
-    "chuckle",
-    "chunk",
-    "churn",
-    "cigar",
-    "cinnamon",
-    "circle",
-    "citizen",
-    "city",
-    "civil",
-    "claim",
-    "clap",
-    "clarify",
-    "claw",
-    "clay",
-    "clean",
-    "clerk",
-    "clever",
-    "click",
-    "client",
-    "cliff",
-    "climb",
-    "clinic",
-    "clip",
-    "clock",
-    "clog",
-    "close",
-    "cloth",
-    "cloud",
-    "clown",
-    "club",
-    "clump",
-    "cluster",
-    "clutch",
-    "coach",
-    "coast",
-    "coconut",
-    "code",
-    "coffee",
-    "coil",
-    "coin",
-    "collect",
-    "color",
-    "column",
-    "combine",
-    "come",
-    "comfort",
-    "comic",
-    "common",
-    "company",
-    "concert",
-    "conduct",
-    "confirm",
-    "congress",
-    "connect",
-    "consider",
-    "control",
-    "convince",
-    "cook",
-    "cool",
-    "copper",
-    "copy",
-    "coral",
-    "core",
-    "corn",
-    "correct",
-    "cost",
-    "cotton",
-    "couch",
-    "country",
-    "couple",
-    "course",
-    "cousin",
-    "cover",
-    "coyote",
-    "crack",
-    "cradle",
-    "craft",
-    "cram",
-    "crane",
-    "crash",
-    "crater",
-    "crawl",
-    "crazy",
-    "cream",
-    "credit",
-    "creek",
-    "crew",
-    "cricket",
-    "crime",
-    "crisp",
-    "critic",
-    "crop",
-    "cross",
-    "crouch",
-    "crowd",
-    "crucial",
-    "cruel",
-    "cruise",
-    "crumble",
-    "crunch",
-    "crush",
-    "cry",
-    "crystal",
-    "cube",
-    "culture",
-    "cup",
-    "cupboard",
-    "curious",
-    "current",
-    "curtain",
-    "curve",
-    "cushion",
-    "custom",
-    "cute",
-    "cycle",
-    "dad",
-    "damage",
-    "damp",
-    "dance",
-    "danger",
-    "daring",
-    "dash",
-    "daughter",
-    "dawn",
-    "day",
-    "deal",
-    "debate",
-    "debris",
-    "decade",
-    "december",
-    "decide",
-    "decline",
-    "decorate",
-    "decrease",
-    "deer",
-    "defense",
-    "define",
-    "defy",
-    "degree",
-    "delay",
-    "deliver",
-    "demand",
-    "demise",
-    "denial",
-    "dentist",
-    "deny",
-    "depart",
-    "depend",
-    "deposit",
-    "depth",
-    "deputy",
-    "derive",
-    "describe",
-    "desert",
-    "design",
-    "desk",
-    "despair",
-    "destroy",
-    "detail",
-    "detect",
-    "develop",
-    "device",
-    "devote",
-    "diagram",
-    "dial",
-    "diamond",
-    "diary",
-    "dice",
-    "diesel",
-    "diet",
-    "differ",
-    "digital",
-    "dignity",
-    "dilemma",
-    "dinner",
-    "dinosaur",
-    "direct",
-    "dirt",
-    "disagree",
-    "discover",
-    "disease",
-    "dish",
-    "dismiss",
-    "disorder",
-    "display",
-    "distance",
-    "divert",
-    "divide",
-    "divorce",
-    "dizzy",
-    "doctor",
-    "document",
-    "dog",
-    "doll",
-    "dolphin",
-    "domain",
-    "donate",
-    "donkey",
-    "donor",
-    "door",
-    "dose",
-    "double",
-    "dove",
-    "draft",
-    "dragon",
-    "drama",
-    "drastic",
-    "draw",
-    "dream",
-    "dress",
-    "drift",
-    "drill",
-    "drink",
-    "drip",
-    "drive",
-    "drop",
-    "drum",
-    "dry",
-    "duck",
-    "dumb",
-    "dune",
-    "during",
-    "dust",
-    "dutch",
-    "duty",
-    "dwarf",
-    "dynamic",
-    "eager",
-    "eagle",
-    "early",
-    "earn",
-    "earth",
-    "easily",
-    "east",
-    "easy",
-    "echo",
-    "ecology",
-    "economy",
-    "edge",
-    "edit",
-    "educate",
-    "effort",
-    "egg",
-    "eight",
-    "either",
-    "elbow",
-    "elder",
-    "electric",
-    "elegant",
-    "element",
-    "elephant",
-    "elevator",
-    "elite",
-    "else",
-    "embark",
-    "embody",
-    "embrace",
-    "emerge",
-    "emotion",
-    "employ",
-    "empower",
-    "empty",
-    "enable",
-    "enact",
-    "end",
-    "endless",
-    "endorse",
-    "enemy",
-    "energy",
-    "enforce",
-    "engage",
-    "engine",
-    "enhance",
-    "enjoy",
-    "enlist",
-    "enough",
-    "enrich",
-    "enroll",
-    "ensure",
-    "enter",
-    "entire",
-    "entry",
-    "envelope",
-    "episode",
-    "equal",
-    "equip",
-    "era",
-    "erase",
-    "erode",
-    "erosion",
-    "error",
-    "erupt",
-    "escape",
-    "essay",
-    "essence",
-    "estate",
-    "eternal",
-    "ethics",
-    "evidence",
-    "evil",
-    "evoke",
-    "evolve",
-    "exact",
-    "example",
-    "excess",
-    "exchange",
-    "excite",
-    "exclude",
-    "excuse",
-    "execute",
-    "exercise",
-    "exhaust",
-    "exhibit",
-    "exile",
-    "exist",
-    "exit",
-    "exotic",
-    "expand",
-    "expect",
-    "expire",
-    "explain",
-    "expose",
-    "express",
-    "extend",
-    "extra",
-    "eye",
-    "eyebrow",
-    "fabric",
-    "face",
-    "faculty",
-    "fade",
-    "faint",
-    "faith",
-    "fall",
-    "false",
-    "fame",
-    "family",
-    "famous",
-    "fan",
-    "fancy",
-    "fantasy",
-    "farm",
-    "fashion",
-    "fat",
-    "fatal",
-    "father",
-    "fatigue",
-    "fault",
-    "favorite",
-    "feature",
-    "february",
-    "federal",
-    "fee",
-    "feed",
-    "feel",
-    "female",
-    "fence",
-    "festival",
-    "fetch",
-    "fever",
-    "few",
-    "fiber",
-    "fiction",
-    "field",
-    "figure",
-    "file",
-    "film",
-    "filter",
-    "final",
-    "find",
-    "fine",
-    "finger",
-    "finish",
-    "fire",
-    "firm",
-    "first",
-    "fiscal",
-    "fish",
-    "fit",
-    "fitness",
-    "fix",
-    "flag",
-    "flame",
-    "flash",
-    "flat",
-    "flavor",
-    "flee",
-    "flight",
-    "flip",
-    "float",
-    "flock",
-    "floor",
-    "flower",
-    "fluid",
-    "flush",
-    "fly",
-    "foam",
-    "focus",
-    "fog",
-    "foil",
-    "fold",
-    "follow",
-    "food",
-    "foot",
-    "force",
-    "forest",
-    "forget",
-    "fork",
-    "fortune",
-    "forum",
-    "forward",
-    "fossil",
-    "foster",
-    "found",
-    "fox",
-    "fragile",
-    "frame",
-    "frequent",
-    "fresh",
-    "friend",
-    "fringe",
-    "frog",
-    "front",
-    "frost",
-    "frown",
-    "frozen",
-    "fruit",
-    "fuel",
-    "fun",
-    "funny",
-    "furnace",
-    "fury",
-    "future",
-    "gadget",
-    "gain",
-    "galaxy",
-    "gallery",
-    "game",
-    "gap",
-    "garage",
-    "garbage",
-    "garden",
-    "garlic",
-    "garment",
-    "gas",
-    "gasp",
-    "gate",
-    "gather",
-    "gauge",
-    "gaze",
-    "general",
-    "genius",
-    "genre",
-    "gentle",
-    "genuine",
-    "gesture",
-    "ghost",
-    "giant",
-    "gift",
-    "giggle",
-    "ginger",
-    "giraffe",
-    "girl",
-    "give",
-    "glad",
-    "glance",
-    "glare",
-    "glass",
-    "glide",
-    "glimpse",
-    "globe",
-    "gloom",
-    "glory",
-    "glove",
-    "glow",
-    "glue",
-    "goat",
-    "goddess",
-    "gold",
-    "good",
-    "goose",
-    "gorilla",
-    "gospel",
-    "gossip",
-    "govern",
-    "gown",
-    "grab",
-    "grace",
-    "grain",
-    "grant",
-    "grape",
-    "grass",
-    "gravity",
-    "great",
-    "green",
-    "grid",
-    "grief",
-    "grit",
-    "grocery",
-    "group",
-    "grow",
-    "grunt",
-    "guard",
-    "guess",
-    "guide",
-    "guilt",
-    "guitar",
-    "gun",
-    "gym",
-    "habit",
-    "hair",
-    "half",
-    "hammer",
-    "hamster",
-    "hand",
-    "happy",
-    "harbor",
-    "hard",
-    "harsh",
-    "harvest",
-    "hat",
-    "have",
-    "hawk",
-    "hazard",
-    "head",
-    "health",
-    "heart",
-    "heavy",
-    "hedgehog",
-    "height",
-    "hello",
-    "helmet",
-    "help",
-    "hen",
-    "hero",
-    "hidden",
-    "high",
-    "hill",
-    "hint",
-    "hip",
-    "hire",
-    "history",
-    "hobby",
-    "hockey",
-    "hold",
-    "hole",
-    "holiday",
-    "hollow",
-    "home",
-    "honey",
-    "hood",
-    "hope",
-    "horn",
-    "horror",
-    "horse",
-    "hospital",
-    "host",
-    "hotel",
-    "hour",
-    "hover",
-    "hub",
-    "huge",
-    "human",
-    "humble",
-    "humor",
-    "hundred",
-    "hungry",
-    "hunt",
-    "hurdle",
-    "hurry",
-    "hurt",
-    "husband",
-    "hybrid",
-    "ice",
-    "icon",
-    "idea",
-    "identify",
-    "idle",
-    "ignore",
-    "ill",
-    "illegal",
-    "illness",
-    "image",
-    "imitate",
-    "immense",
-    "immune",
-    "impact",
-    "impose",
-    "improve",
-    "impulse",
-    "inch",
-    "include",
-    "income",
-    "increase",
-    "index",
-    "indicate",
-    "indoor",
-    "industry",
-    "infant",
-    "inflict",
-    "inform",
-    "inhale",
-    "inherit",
-    "initial",
-    "inject",
-    "injury",
-    "inmate",
-    "inner",
-    "innocent",
-    "input",
-    "inquiry",
-    "insane",
-    "insect",
-    "inside",
-    "inspire",
-    "install",
-    "intact",
-    "interest",
-    "into",
-    "invest",
-    "invite",
-    "involve",
-    "iron",
-    "island",
-    "isolate",
-    "issue",
-    "item",
-    "ivory",
-    "jacket",
-    "jaguar",
-    "jar",
-    "jazz",
-    "jealous",
-    "jeans",
-    "jelly",
-    "jewel",
-    "job",
-    "join",
-    "joke",
-    "journey",
-    "joy",
-    "judge",
-    "juice",
-    "jump",
-    "jungle",
-    "junior",
-    "junk",
-    "just",
-    "kangaroo",
-    "keen",
-    "keep",
-    "ketchup",
-    "key",
-    "kick",
-    "kid",
-    "kidney",
-    "kind",
-    "kingdom",
-    "kiss",
-    "kit",
-    "kitchen",
-    "kite",
-    "kitten",
-    "kiwi",
-    "knee",
-    "knife",
-    "knock",
-    "know",
-    "lab",
-    "label",
-    "labor",
-    "ladder",
-    "lady",
-    "lake",
-    "lamp",
-    "language",
-    "laptop",
-    "large",
-    "later",
-    "latin",
-    "laugh",
-    "laundry",
-    "lava",
-    "law",
-    "lawn",
-    "lawsuit",
-    "layer",
-    "lazy",
-    "leader",
-    "leaf",
-    "learn",
-    "leave",
-    "lecture",
-    "left",
-    "leg",
-    "legal",
-    "legend",
-    "leisure",
-    "lemon",
-    "lend",
-    "length",
-    "lens",
-    "leopard",
-    "lesson",
-    "letter",
-    "level",
-    "liar",
-    "liberty",
-    "library",
-    "license",
-    "life",
-    "lift",
-    "light",
-    "like",
-    "limb",
-    "limit",
-    "link",
-    "lion",
-    "liquid",
-    "list",
-    "little",
-    "live",
-    "lizard",
-    "load",
-    "loan",
-    "lobster",
-    "local",
-    "lock",
-    "logic",
-    "lonely",
-    "long",
-    "loop",
-    "lottery",
-    "loud",
-    "lounge",
-    "love",
-    "loyal",
-    "lucky",
-    "luggage",
-    "lumber",
-    "lunar",
-    "lunch",
-    "luxury",
-    "lyrics",
-    "machine",
-    "mad",
-    "magic",
-    "magnet",
-    "maid",
-    "mail",
-    "main",
-    "major",
-    "make",
-    "mammal",
-    "man",
-    "manage",
-    "mandate",
-    "mango",
-    "mansion",
-    "manual",
-    "maple",
-    "marble",
-    "march",
-    "margin",
-    "marine",
-    "market",
-    "marriage",
-    "mask",
-    "mass",
-    "master",
-    "match",
-    "material",
-    "math",
-    "matrix",
-    "matter",
-    "maximum",
-    "maze",
-    "meadow",
-    "mean",
-    "measure",
-    "meat",
-    "mechanic",
-    "medal",
-    "media",
-    "melody",
-    "melt",
-    "member",
-    "memory",
-    "mention",
-    "menu",
-    "mercy",
-    "merge",
-    "merit",
-    "merry",
-    "mesh",
-    "message",
-    "metal",
-    "method",
-    "middle",
-    "midnight",
-    "milk",
-    "million",
-    "mimic",
-    "mind",
-    "minimum",
-    "minor",
-    "minute",
-    "miracle",
-    "mirror",
-    "misery",
-    "miss",
-    "mistake",
-    "mix",
-    "mixed",
-    "mixture",
-    "mobile",
-    "model",
-    "modify",
-    "mom",
-    "moment",
-    "monitor",
-    "monkey",
-    "monster",
-    "month",
-    "moon",
-    "moral",
-    "more",
-    "morning",
-    "mosquito",
-    "mother",
-    "motion",
-    "motor",
-    "mountain",
-    "mouse",
-    "move",
-    "movie",
-    "much",
-    "muffin",
-    "mule",
-    "multiply",
-    "muscle",
-    "museum",
-    "mushroom",
-    "music",
-    "must",
-    "mutual",
-    "myself",
-    "mystery",
-    "myth",
-    "naive",
-    "name",
-    "napkin",
-    "narrow",
-    "nasty",
-    "nation",
-    "nature",
-    "near",
-    "neck",
-    "need",
-    "negative",
-    "neglect",
-    "neither",
-    "nephew",
-    "nerve",
-    "nest",
-    "net",
-    "network",
-    "neutral",
-    "never",
-    "news",
-    "next",
-    "nice",
-    "night",
-    "noble",
-    "noise",
-    "nominee",
-    "noodle",
-    "normal",
-    "north",
-    "nose",
-    "notable",
-    "note",
-    "nothing",
-    "notice",
-    "novel",
-    "now",
-    "nuclear",
-    "number",
-    "nurse",
-    "nut",
-    "oak",
-    "obey",
-    "object",
-    "oblige",
-    "obscure",
-    "observe",
-    "obtain",
-    "obvious",
-    "occur",
-    "ocean",
-    "october",
-    "odor",
-    "off",
-    "offer",
-    "office",
-    "often",
-    "oil",
-    "okay",
-    "old",
-    "olive",
-    "olympic",
-    "omit",
-    "once",
-    "one",
-    "onion",
-    "online",
-    "only",
-    "open",
-    "opera",
-    "opinion",
-    "oppose",
-    "option",
-    "orange",
-    "orbit",
-    "orchard",
-    "order",
-    "ordinary",
-    "organ",
-    "orient",
-    "original",
-    "orphan",
-    "ostrich",
-    "other",
-    "outdoor",
-    "outer",
-    "output",
-    "outside",
-    "oval",
-    "oven",
-    "over",
-    "own",
-    "owner",
-    "oxygen",
-    "oyster",
-    "ozone",
-    "pact",
-    "paddle",
-    "page",
-    "pair",
-    "palace",
-    "palm",
-    "panda",
-    "panel",
-    "panic",
-    "panther",
-    "paper",
-    "parade",
-    "parent",
-    "park",
-    "parrot",
-    "party",
-    "pass",
-    "patch",
-    "path",
-    "patient",
-    "patrol",
-    "pattern",
-    "pause",
-    "pave",
-    "payment",
-    "peace",
-    "peanut",
-    "pear",
-    "peasant",
-    "pelican",
-    "pen",
-    "penalty",
-    "pencil",
-    "people",
-    "pepper",
-    "perfect",
-    "permit",
-    "person",
-    "pet",
-    "phone",
-    "photo",
-    "phrase",
-    "physical",
-    "piano",
-    "picnic",
-    "picture",
-    "piece",
-    "pig",
-    "pigeon",
-    "pill",
-    "pilot",
-    "pink",
-    "pioneer",
-    "pipe",
-    "pistol",
-    "pitch",
-    "pizza",
-    "place",
-    "planet",
-    "plastic",
-    "plate",
-    "play",
-    "please",
-    "pledge",
-    "pluck",
-    "plug",
-    "plunge",
-    "poem",
-    "poet",
-    "point",
-    "polar",
-    "pole",
-    "police",
-    "pond",
-    "pony",
-    "pool",
-    "popular",
-    "portion",
-    "position",
-    "possible",
-    "post",
-    "potato",
-    "pottery",
-    "poverty",
-    "powder",
-    "power",
-    "practice",
-    "praise",
-    "predict",
-    "prefer",
-    "prepare",
-    "present",
-    "pretty",
-    "prevent",
-    "price",
-    "pride",
-    "primary",
-    "print",
-    "priority",
-    "prison",
-    "private",
-    "prize",
-    "problem",
-    "process",
-    "produce",
-    "profit",
-    "program",
-    "project",
-    "promote",
-    "proof",
-    "property",
-    "prosper",
-    "protect",
-    "proud",
-    "provide",
-    "public",
-    "pudding",
-    "pull",
-    "pulp",
-    "pulse",
-    "pumpkin",
-    "punch",
-    "pupil",
-    "puppy",
-    "purchase",
-    "purity",
-    "purpose",
-    "purse",
-    "push",
-    "put",
-    "puzzle",
-    "pyramid",
-    "quality",
-    "quantum",
-    "quarter",
-    "question",
-    "quick",
-    "quit",
-    "quiz",
-    "quote",
-    "rabbit",
-    "raccoon",
-    "race",
-    "rack",
-    "radar",
-    "radio",
-    "rail",
-    "rain",
-    "raise",
-    "rally",
-    "ramp",
-    "ranch",
-    "random",
-    "range",
-    "rapid",
-    "rare",
-    "rate",
-    "rather",
-    "raven",
-    "raw",
-    "razor",
-    "ready",
-    "real",
-    "reason",
-    "rebel",
-    "rebuild",
-    "recall",
-    "receive",
-    "recipe",
-    "record",
-    "recycle",
-    "reduce",
-    "reflect",
-    "reform",
-    "refuse",
-    "region",
-    "regret",
-    "regular",
-    "reject",
-    "relax",
-    "release",
-    "relief",
-    "rely",
-    "remain",
-    "remember",
-    "remind",
-    "remove",
-    "render",
-    "renew",
-    "rent",
-    "reopen",
-    "repair",
-    "repeat",
-    "replace",
-    "report",
-    "require",
-    "rescue",
-    "resemble",
-    "resist",
-    "resource",
-    "response",
-    "result",
-    "retire",
-    "retreat",
-    "return",
-    "reunion",
-    "reveal",
-    "review",
-    "reward",
-    "rhythm",
-    "rib",
-    "ribbon",
-    "rice",
-    "rich",
-    "ride",
-    "ridge",
-    "rifle",
-    "right",
-    "rigid",
-    "ring",
-    "riot",
-    "ripple",
-    "risk",
-    "ritual",
-    "rival",
-    "river",
-    "road",
-    "roast",
-    "robot",
-    "robust",
-    "rocket",
-    "romance",
-    "roof",
-    "rookie",
-    "room",
-    "rose",
-    "rotate",
-    "rough",
-    "round",
-    "route",
-    "royal",
-    "rubber",
-    "rude",
-    "rug",
-    "rule",
-    "run",
-    "runway",
-    "rural",
-    "sad",
-    "saddle",
-    "sadness",
-    "safe",
-    "sail",
-    "salad",
-    "salmon",
-    "salon",
-    "salt",
-    "salute",
-    "same",
-    "sample",
-    "sand",
-    "satisfy",
-    "satoshi",
-    "sauce",
-    "sausage",
-    "save",
-    "say",
-    "scale",
-    "scan",
-    "scare",
-    "scatter",
-    "scene",
-    "scheme",
-    "school",
-    "science",
-    "scissors",
-    "scorpion",
-    "scout",
-    "scrap",
-    "screen",
-    "script",
-    "scrub",
-    "sea",
-    "search",
-    "season",
-    "seat",
-    "second",
-    "secret",
-    "section",
-    "security",
-    "seed",
-    "seek",
-    "segment",
-    "select",
-    "sell",
-    "seminar",
-    "senior",
-    "sense",
-    "sentence",
-    "series",
-    "service",
-    "session",
-    "settle",
-    "setup",
-    "seven",
-    "shadow",
-    "shaft",
-    "shallow",
-    "share",
-    "shed",
-    "shell",
-    "sheriff",
-    "shield",
-    "shift",
-    "shine",
-    "ship",
-    "shiver",
-    "shock",
-    "shoe",
-    "shoot",
-    "shop",
-    "short",
-    "shoulder",
-    "shove",
-    "shrimp",
-    "shrug",
-    "shuffle",
-    "shy",
-    "sibling",
-    "sick",
-    "side",
-    "siege",
-    "sight",
-    "sign",
-    "silent",
-    "silk",
-    "silly",
-    "silver",
-    "similar",
-    "simple",
-    "since",
-    "sing",
-    "siren",
-    "sister",
-    "situate",
-    "six",
-    "size",
-    "skate",
-    "sketch",
-    "ski",
-    "skill",
-    "skin",
-    "skirt",
-    "skull",
-    "slab",
-    "slam",
-    "sleep",
-    "slender",
-    "slice",
-    "slide",
-    "slight",
-    "slim",
-    "slogan",
-    "slot",
-    "slow",
-    "slush",
-    "small",
-    "smart",
-    "smile",
-    "smoke",
-    "smooth",
-    "snack",
-    "snake",
-    "snap",
-    "sniff",
-    "snow",
-    "soap",
-    "soccer",
-    "social",
-    "sock",
-    "soda",
-    "soft",
-    "solar",
-    "soldier",
-    "solid",
-    "solution",
-    "solve",
-    "someone",
-    "song",
-    "soon",
-    "sorry",
-    "sort",
-    "soul",
-    "sound",
-    "soup",
-    "source",
-    "south",
-    "space",
-    "spare",
-    "spatial",
-    "spawn",
-    "speak",
-    "special",
-    "speed",
-    "spell",
-    "spend",
-    "sphere",
-    "spice",
-    "spider",
-    "spike",
-    "spin",
-    "spirit",
-    "split",
-    "spoil",
-    "sponsor",
-    "spoon",
-    "sport",
-    "spot",
-    "spray",
-    "spread",
-    "spring",
-    "spy",
-    "square",
-    "squeeze",
-    "squirrel",
-    "stable",
-    "stadium",
-    "staff",
-    "stage",
-    "stairs",
-    "stamp",
-    "stand",
-    "start",
-    "state",
-    "stay",
-    "steak",
-    "steel",
-    "stem",
-    "step",
-    "stereo",
-    "stick",
-    "still",
-    "sting",
-    "stock",
-    "stomach",
-    "stone",
-    "stool",
-    "story",
-    "stove",
-    "strategy",
-    "street",
-    "strike",
-    "strong",
-    "struggle",
-    "student",
-    "stuff",
-    "stumble",
-    "style",
-    "subject",
-    "submit",
-    "subway",
-    "success",
-    "such",
-    "sudden",
-    "suffer",
-    "sugar",
-    "suggest",
-    "suit",
-    "summer",
-    "sun",
-    "sunny",
-    "sunset",
-    "super",
-    "supply",
-    "supreme",
-    "sure",
-    "surface",
-    "surge",
-    "surprise",
-    "surround",
-    "survey",
-    "suspect",
-    "sustain",
-    "swallow",
-    "swamp",
-    "swap",
-    "swarm",
-    "swear",
-    "sweet",
-    "swift",
-    "swim",
-    "swing",
-    "switch",
-    "sword",
-    "symbol",
-    "symptom",
-    "syrup",
-    "system",
-    "table",
-    "tackle",
-    "tag",
-    "tail",
-    "talent",
-    "talk",
-    "tank",
-    "tape",
-    "target",
-    "task",
-    "taste",
-    "tattoo",
-    "taxi",
-    "teach",
-    "team",
-    "tell",
-    "ten",
-    "tenant",
-    "tennis",
-    "tent",
-    "term",
-    "test",
-    "text",
-    "thank",
-    "that",
-    "theme",
-    "then",
-    "theory",
-    "there",
-    "they",
-    "thing",
-    "this",
-    "thought",
-    "three",
-    "thrive",
-    "throw",
-    "thumb",
-    "thunder",
-    "ticket",
-    "tide",
-    "tiger",
-    "tilt",
-    "timber",
-    "time",
-    "tiny",
-    "tip",
-    "tired",
-    "tissue",
-    "title",
-    "toast",
-    "tobacco",
-    "today",
-    "toddler",
-    "toe",
-    "together",
-    "toilet",
-    "token",
-    "tomato",
-    "tomorrow",
-    "tone",
-    "tongue",
-    "tonight",
-    "tool",
-    "tooth",
-    "top",
-    "topic",
-    "topple",
-    "torch",
-    "tornado",
-    "tortoise",
-    "toss",
-    "total",
-    "tourist",
-    "toward",
-    "tower",
-    "town",
-    "toy",
-    "track",
-    "trade",
-    "traffic",
-    "tragic",
-    "train",
-    "transfer",
-    "trap",
-    "trash",
-    "travel",
-    "tray",
-    "treat",
-    "tree",
-    "trend",
-    "trial",
-    "tribe",
-    "trick",
-    "trigger",
-    "trim",
-    "trip",
-    "trophy",
-    "trouble",
-    "truck",
-    "true",
-    "truly",
-    "trumpet",
-    "trust",
-    "truth",
-    "try",
-    "tube",
-    "tuition",
-    "tumble",
-    "tuna",
-    "tunnel",
-    "turkey",
-    "turn",
-    "turtle",
-    "twelve",
-    "twenty",
-    "twice",
-    "twin",
-    "twist",
-    "two",
-    "type",
-    "typical",
-    "ugly",
-    "umbrella",
-    "unable",
-    "unaware",
-    "uncle",
-    "uncover",
-    "under",
-    "undo",
-    "unfair",
-    "unfold",
-    "unhappy",
-    "uniform",
-    "unique",
-    "unit",
-    "universe",
-    "unknown",
-    "unlock",
-    "until",
-    "unusual",
-    "unveil",
-    "update",
-    "upgrade",
-    "uphold",
-    "upon",
-    "upper",
-    "upset",
-    "urban",
-    "urge",
-    "usage",
-    "use",
-    "used",
-    "useful",
-    "useless",
-    "usual",
-    "utility",
-    "vacant",
-    "vacuum",
-    "vague",
-    "valid",
-    "valley",
-    "valve",
-    "van",
-    "vanish",
-    "vapor",
-    "various",
-    "vast",
-    "vault",
-    "vehicle",
-    "velvet",
-    "vendor",
-    "venture",
-    "venue",
-    "verb",
-    "verify",
-    "version",
-    "very",
-    "vessel",
-    "veteran",
-    "viable",
-    "vibrant",
-    "vicious",
-    "victory",
-    "video",
-    "view",
-    "village",
-    "vintage",
-    "violin",
-    "virtual",
-    "virus",
-    "visa",
-    "visit",
-    "visual",
-    "vital",
-    "vivid",
-    "vocal",
-    "voice",
-    "void",
-    "volcano",
-    "volume",
-    "vote",
-    "voyage",
-    "wage",
-    "wagon",
-    "wait",
-    "walk",
-    "wall",
-    "walnut",
-    "want",
-    "warfare",
-    "warm",
-    "warrior",
-    "wash",
-    "wasp",
-    "waste",
-    "water",
-    "wave",
-    "way",
-    "wealth",
-    "weapon",
-    "wear",
-    "weasel",
-    "weather",
-    "web",
-    "wedding",
-    "weekend",
-    "weird",
-    "welcome",
-    "west",
-    "wet",
-    "whale",
-    "what",
-    "wheat",
-    "wheel",
-    "when",
-    "where",
-    "whip",
-    "whisper",
-    "wide",
-    "width",
-    "wife",
-    "wild",
-    "will",
-    "win",
-    "window",
-    "wine",
-    "wing",
-    "wink",
-    "winner",
-    "winter",
-    "wire",
-    "wisdom",
-    "wise",
-    "wish",
-    "witness",
-    "wolf",
-    "woman",
-    "wonder",
-    "wood",
-    "wool",
-    "word",
-    "work",
-    "world",
-    "worry",
-    "worth",
-    "wrap",
-    "wreck",
-    "wrestle",
-    "wrist",
-    "write",
-    "wrong",
-    "yard",
-    "year",
-    "yellow",
-    "you",
-    "young",
-    "youth",
-    "zebra",
-    "zero",
-    "zone",
-    "zoo"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/es.rs b/networks/monero/wallet/polyseed/src/words/es.rs
deleted file mode 100644
index 21ab1299..00000000
--- a/networks/monero/wallet/polyseed/src/words/es.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "ábaco",
-    "abdomen",
-    "abeja",
-    "abierto",
-    "abogado",
-    "abono",
-    "aborto",
-    "abrazo",
-    "abrir",
-    "abuelo",
-    "abuso",
-    "acabar",
-    "academia",
-    "acceso",
-    "acción",
-    "aceite",
-    "acelga",
-    "acento",
-    "aceptar",
-    "ácido",
-    "aclarar",
-    "acné",
-    "acoger",
-    "acoso",
-    "activo",
-    "acto",
-    "actriz",
-    "actuar",
-    "acudir",
-    "acuerdo",
-    "acusar",
-    "adicto",
-    "admitir",
-    "adoptar",
-    "adorno",
-    "aduana",
-    "adulto",
-    "aéreo",
-    "afectar",
-    "afición",
-    "afinar",
-    "afirmar",
-    "ágil",
-    "agitar",
-    "agonía",
-    "agosto",
-    "agotar",
-    "agregar",
-    "agrio",
-    "agua",
-    "agudo",
-    "águila",
-    "aguja",
-    "ahogo",
-    "ahorro",
-    "aire",
-    "aislar",
-    "ajedrez",
-    "ajeno",
-    "ajuste",
-    "alacrán",
-    "alambre",
-    "alarma",
-    "alba",
-    "álbum",
-    "alcalde",
-    "aldea",
-    "alegre",
-    "alejar",
-    "alerta",
-    "aleta",
-    "alfiler",
-    "alga",
-    "algodón",
-    "aliado",
-    "aliento",
-    "alivio",
-    "alma",
-    "almeja",
-    "almíbar",
-    "altar",
-    "alteza",
-    "altivo",
-    "alto",
-    "altura",
-    "alumno",
-    "alzar",
-    "amable",
-    "amante",
-    "amapola",
-    "amargo",
-    "amasar",
-    "ámbar",
-    "ámbito",
-    "ameno",
-    "amigo",
-    "amistad",
-    "amor",
-    "amparo",
-    "amplio",
-    "añadir",
-    "ancho",
-    "anciano",
-    "ancla",
-    "andar",
-    "andén",
-    "añejo",
-    "anemia",
-    "ángulo",
-    "anillo",
-    "ánimo",
-    "anís",
-    "año",
-    "anotar",
-    "antena",
-    "antiguo",
-    "antojo",
-    "anual",
-    "anular",
-    "anuncio",
-    "apagar",
-    "aparato",
-    "apetito",
-    "apio",
-    "aplicar",
-    "apodo",
-    "aporte",
-    "apoyo",
-    "aprender",
-    "aprobar",
-    "apuesta",
-    "apuro",
-    "arado",
-    "araña",
-    "arar",
-    "árbitro",
-    "árbol",
-    "arbusto",
-    "archivo",
-    "arco",
-    "arder",
-    "ardilla",
-    "arduo",
-    "área",
-    "árido",
-    "aries",
-    "armonía",
-    "arnés",
-    "aroma",
-    "arpa",
-    "arpón",
-    "arreglo",
-    "arroz",
-    "arruga",
-    "arte",
-    "artista",
-    "asa",
-    "asado",
-    "asalto",
-    "ascenso",
-    "asegurar",
-    "aseo",
-    "asesor",
-    "asiento",
-    "asilo",
-    "asistir",
-    "asno",
-    "asombro",
-    "áspero",
-    "astilla",
-    "astro",
-    "astuto",
-    "asumir",
-    "asunto",
-    "atajo",
-    "ataque",
-    "atar",
-    "atento",
-    "ateo",
-    "ático",
-    "atleta",
-    "átomo",
-    "atraer",
-    "atroz",
-    "atún",
-    "audaz",
-    "audio",
-    "auge",
-    "aula",
-    "aumento",
-    "ausente",
-    "autor",
-    "aval",
-    "avance",
-    "avaro",
-    "ave",
-    "avellana",
-    "avena",
-    "avestruz",
-    "avión",
-    "aviso",
-    "ayer",
-    "ayuda",
-    "ayuno",
-    "azafrán",
-    "azar",
-    "azote",
-    "azúcar",
-    "azufre",
-    "azul",
-    "baba",
-    "babor",
-    "bache",
-    "bahía",
-    "baile",
-    "bajar",
-    "balanza",
-    "balcón",
-    "balde",
-    "bambú",
-    "banco",
-    "banda",
-    "baño",
-    "barba",
-    "barco",
-    "barniz",
-    "barro",
-    "báscula",
-    "bastón",
-    "basura",
-    "batalla",
-    "batería",
-    "batir",
-    "batuta",
-    "baúl",
-    "bazar",
-    "bebé",
-    "bebida",
-    "bello",
-    "besar",
-    "beso",
-    "bestia",
-    "bicho",
-    "bien",
-    "bingo",
-    "blanco",
-    "bloque",
-    "blusa",
-    "boa",
-    "bobina",
-    "bobo",
-    "boca",
-    "bocina",
-    "boda",
-    "bodega",
-    "boina",
-    "bola",
-    "bolero",
-    "bolsa",
-    "bomba",
-    "bondad",
-    "bonito",
-    "bono",
-    "bonsái",
-    "borde",
-    "borrar",
-    "bosque",
-    "bote",
-    "botín",
-    "bóveda",
-    "bozal",
-    "bravo",
-    "brazo",
-    "brecha",
-    "breve",
-    "brillo",
-    "brinco",
-    "brisa",
-    "broca",
-    "broma",
-    "bronce",
-    "brote",
-    "bruja",
-    "brusco",
-    "bruto",
-    "buceo",
-    "bucle",
-    "bueno",
-    "buey",
-    "bufanda",
-    "bufón",
-    "búho",
-    "buitre",
-    "bulto",
-    "burbuja",
-    "burla",
-    "burro",
-    "buscar",
-    "butaca",
-    "buzón",
-    "caballo",
-    "cabeza",
-    "cabina",
-    "cabra",
-    "cacao",
-    "cadáver",
-    "cadena",
-    "caer",
-    "café",
-    "caída",
-    "caimán",
-    "caja",
-    "cajón",
-    "cal",
-    "calamar",
-    "calcio",
-    "caldo",
-    "calidad",
-    "calle",
-    "calma",
-    "calor",
-    "calvo",
-    "cama",
-    "cambio",
-    "camello",
-    "camino",
-    "campo",
-    "caña",
-    "cáncer",
-    "candil",
-    "canela",
-    "canguro",
-    "canica",
-    "cañón",
-    "canto",
-    "caoba",
-    "caos",
-    "capaz",
-    "capitán",
-    "capote",
-    "captar",
-    "capucha",
-    "cara",
-    "carbón",
-    "cárcel",
-    "careta",
-    "carga",
-    "cariño",
-    "carne",
-    "carpeta",
-    "carro",
-    "carta",
-    "casa",
-    "casco",
-    "casero",
-    "caspa",
-    "castor",
-    "catorce",
-    "catre",
-    "caudal",
-    "causa",
-    "cazo",
-    "cebolla",
-    "ceder",
-    "cedro",
-    "celda",
-    "célebre",
-    "celoso",
-    "célula",
-    "cemento",
-    "ceniza",
-    "centro",
-    "cerca",
-    "cerdo",
-    "cereza",
-    "cero",
-    "cerrar",
-    "certeza",
-    "césped",
-    "cetro",
-    "chacal",
-    "chaleco",
-    "champú",
-    "chancla",
-    "chapa",
-    "charla",
-    "chico",
-    "chiste",
-    "chivo",
-    "choque",
-    "choza",
-    "chuleta",
-    "chupar",
-    "ciclón",
-    "ciego",
-    "cielo",
-    "cien",
-    "cierto",
-    "cifra",
-    "cigarro",
-    "cima",
-    "cinco",
-    "cine",
-    "cinta",
-    "ciprés",
-    "circo",
-    "ciruela",
-    "cisne",
-    "cita",
-    "ciudad",
-    "clamor",
-    "clan",
-    "claro",
-    "clase",
-    "clave",
-    "cliente",
-    "clima",
-    "clínica",
-    "cobre",
-    "cocción",
-    "cochino",
-    "cocina",
-    "coco",
-    "código",
-    "codo",
-    "cofre",
-    "coger",
-    "cohete",
-    "cojín",
-    "cojo",
-    "cola",
-    "colcha",
-    "colegio",
-    "colgar",
-    "colina",
-    "collar",
-    "colmo",
-    "columna",
-    "combate",
-    "comer",
-    "comida",
-    "cómodo",
-    "compra",
-    "conde",
-    "conejo",
-    "conga",
-    "conocer",
-    "consejo",
-    "contar",
-    "copa",
-    "copia",
-    "corazón",
-    "corbata",
-    "corcho",
-    "cordón",
-    "corona",
-    "correr",
-    "coser",
-    "cosmos",
-    "costa",
-    "cráneo",
-    "cráter",
-    "crear",
-    "crecer",
-    "creído",
-    "crema",
-    "cría",
-    "crimen",
-    "cripta",
-    "crisis",
-    "cromo",
-    "crónica",
-    "croqueta",
-    "crudo",
-    "cruz",
-    "cuadro",
-    "cuarto",
-    "cuatro",
-    "cubo",
-    "cubrir",
-    "cuchara",
-    "cuello",
-    "cuento",
-    "cuerda",
-    "cuesta",
-    "cueva",
-    "cuidar",
-    "culebra",
-    "culpa",
-    "culto",
-    "cumbre",
-    "cumplir",
-    "cuna",
-    "cuneta",
-    "cuota",
-    "cupón",
-    "cúpula",
-    "curar",
-    "curioso",
-    "curso",
-    "curva",
-    "cutis",
-    "dama",
-    "danza",
-    "dar",
-    "dardo",
-    "dátil",
-    "deber",
-    "débil",
-    "década",
-    "decir",
-    "dedo",
-    "defensa",
-    "definir",
-    "dejar",
-    "delfín",
-    "delgado",
-    "delito",
-    "demora",
-    "denso",
-    "dental",
-    "deporte",
-    "derecho",
-    "derrota",
-    "desayuno",
-    "deseo",
-    "desfile",
-    "desnudo",
-    "destino",
-    "desvío",
-    "detalle",
-    "detener",
-    "deuda",
-    "día",
-    "diablo",
-    "diadema",
-    "diamante",
-    "diana",
-    "diario",
-    "dibujo",
-    "dictar",
-    "diente",
-    "dieta",
-    "diez",
-    "difícil",
-    "digno",
-    "dilema",
-    "diluir",
-    "dinero",
-    "directo",
-    "dirigir",
-    "disco",
-    "diseño",
-    "disfraz",
-    "diva",
-    "divino",
-    "doble",
-    "doce",
-    "dolor",
-    "domingo",
-    "don",
-    "donar",
-    "dorado",
-    "dormir",
-    "dorso",
-    "dos",
-    "dosis",
-    "dragón",
-    "droga",
-    "ducha",
-    "duda",
-    "duelo",
-    "dueño",
-    "dulce",
-    "dúo",
-    "duque",
-    "durar",
-    "dureza",
-    "duro",
-    "ébano",
-    "ebrio",
-    "echar",
-    "eco",
-    "ecuador",
-    "edad",
-    "edición",
-    "edificio",
-    "editor",
-    "educar",
-    "efecto",
-    "eficaz",
-    "eje",
-    "ejemplo",
-    "elefante",
-    "elegir",
-    "elemento",
-    "elevar",
-    "elipse",
-    "élite",
-    "elixir",
-    "elogio",
-    "eludir",
-    "embudo",
-    "emitir",
-    "emoción",
-    "empate",
-    "empeño",
-    "empleo",
-    "empresa",
-    "enano",
-    "encargo",
-    "enchufe",
-    "encía",
-    "enemigo",
-    "enero",
-    "enfado",
-    "enfermo",
-    "engaño",
-    "enigma",
-    "enlace",
-    "enorme",
-    "enredo",
-    "ensayo",
-    "enseñar",
-    "entero",
-    "entrar",
-    "envase",
-    "envío",
-    "época",
-    "equipo",
-    "erizo",
-    "escala",
-    "escena",
-    "escolar",
-    "escribir",
-    "escudo",
-    "esencia",
-    "esfera",
-    "esfuerzo",
-    "espada",
-    "espejo",
-    "espía",
-    "esposa",
-    "espuma",
-    "esquí",
-    "estar",
-    "este",
-    "estilo",
-    "estufa",
-    "etapa",
-    "eterno",
-    "ética",
-    "etnia",
-    "evadir",
-    "evaluar",
-    "evento",
-    "evitar",
-    "exacto",
-    "examen",
-    "exceso",
-    "excusa",
-    "exento",
-    "exigir",
-    "exilio",
-    "existir",
-    "éxito",
-    "experto",
-    "explicar",
-    "exponer",
-    "extremo",
-    "fábrica",
-    "fábula",
-    "fachada",
-    "fácil",
-    "factor",
-    "faena",
-    "faja",
-    "falda",
-    "fallo",
-    "falso",
-    "faltar",
-    "fama",
-    "familia",
-    "famoso",
-    "faraón",
-    "farmacia",
-    "farol",
-    "farsa",
-    "fase",
-    "fatiga",
-    "fauna",
-    "favor",
-    "fax",
-    "febrero",
-    "fecha",
-    "feliz",
-    "feo",
-    "feria",
-    "feroz",
-    "fértil",
-    "fervor",
-    "festín",
-    "fiable",
-    "fianza",
-    "fiar",
-    "fibra",
-    "ficción",
-    "ficha",
-    "fideo",
-    "fiebre",
-    "fiel",
-    "fiera",
-    "fiesta",
-    "figura",
-    "fijar",
-    "fijo",
-    "fila",
-    "filete",
-    "filial",
-    "filtro",
-    "fin",
-    "finca",
-    "fingir",
-    "finito",
-    "firma",
-    "flaco",
-    "flauta",
-    "flecha",
-    "flor",
-    "flota",
-    "fluir",
-    "flujo",
-    "flúor",
-    "fobia",
-    "foca",
-    "fogata",
-    "fogón",
-    "folio",
-    "folleto",
-    "fondo",
-    "forma",
-    "forro",
-    "fortuna",
-    "forzar",
-    "fosa",
-    "foto",
-    "fracaso",
-    "frágil",
-    "franja",
-    "frase",
-    "fraude",
-    "freír",
-    "freno",
-    "fresa",
-    "frío",
-    "frito",
-    "fruta",
-    "fuego",
-    "fuente",
-    "fuerza",
-    "fuga",
-    "fumar",
-    "función",
-    "funda",
-    "furgón",
-    "furia",
-    "fusil",
-    "fútbol",
-    "futuro",
-    "gacela",
-    "gafas",
-    "gaita",
-    "gajo",
-    "gala",
-    "galería",
-    "gallo",
-    "gamba",
-    "ganar",
-    "gancho",
-    "ganga",
-    "ganso",
-    "garaje",
-    "garza",
-    "gasolina",
-    "gastar",
-    "gato",
-    "gavilán",
-    "gemelo",
-    "gemir",
-    "gen",
-    "género",
-    "genio",
-    "gente",
-    "geranio",
-    "gerente",
-    "germen",
-    "gesto",
-    "gigante",
-    "gimnasio",
-    "girar",
-    "giro",
-    "glaciar",
-    "globo",
-    "gloria",
-    "gol",
-    "golfo",
-    "goloso",
-    "golpe",
-    "goma",
-    "gordo",
-    "gorila",
-    "gorra",
-    "gota",
-    "goteo",
-    "gozar",
-    "grada",
-    "gráfico",
-    "grano",
-    "grasa",
-    "gratis",
-    "grave",
-    "grieta",
-    "grillo",
-    "gripe",
-    "gris",
-    "grito",
-    "grosor",
-    "grúa",
-    "grueso",
-    "grumo",
-    "grupo",
-    "guante",
-    "guapo",
-    "guardia",
-    "guerra",
-    "guía",
-    "guiño",
-    "guion",
-    "guiso",
-    "guitarra",
-    "gusano",
-    "gustar",
-    "haber",
-    "hábil",
-    "hablar",
-    "hacer",
-    "hacha",
-    "hada",
-    "hallar",
-    "hamaca",
-    "harina",
-    "haz",
-    "hazaña",
-    "hebilla",
-    "hebra",
-    "hecho",
-    "helado",
-    "helio",
-    "hembra",
-    "herir",
-    "hermano",
-    "héroe",
-    "hervir",
-    "hielo",
-    "hierro",
-    "hígado",
-    "higiene",
-    "hijo",
-    "himno",
-    "historia",
-    "hocico",
-    "hogar",
-    "hoguera",
-    "hoja",
-    "hombre",
-    "hongo",
-    "honor",
-    "honra",
-    "hora",
-    "hormiga",
-    "horno",
-    "hostil",
-    "hoyo",
-    "hueco",
-    "huelga",
-    "huerta",
-    "hueso",
-    "huevo",
-    "huida",
-    "huir",
-    "humano",
-    "húmedo",
-    "humilde",
-    "humo",
-    "hundir",
-    "huracán",
-    "hurto",
-    "icono",
-    "ideal",
-    "idioma",
-    "ídolo",
-    "iglesia",
-    "iglú",
-    "igual",
-    "ilegal",
-    "ilusión",
-    "imagen",
-    "imán",
-    "imitar",
-    "impar",
-    "imperio",
-    "imponer",
-    "impulso",
-    "incapaz",
-    "índice",
-    "inerte",
-    "infiel",
-    "informe",
-    "ingenio",
-    "inicio",
-    "inmenso",
-    "inmune",
-    "innato",
-    "insecto",
-    "instante",
-    "interés",
-    "íntimo",
-    "intuir",
-    "inútil",
-    "invierno",
-    "ira",
-    "iris",
-    "ironía",
-    "isla",
-    "islote",
-    "jabalí",
-    "jabón",
-    "jamón",
-    "jarabe",
-    "jardín",
-    "jarra",
-    "jaula",
-    "jazmín",
-    "jefe",
-    "jeringa",
-    "jinete",
-    "jornada",
-    "joroba",
-    "joven",
-    "joya",
-    "juerga",
-    "jueves",
-    "juez",
-    "jugador",
-    "jugo",
-    "juguete",
-    "juicio",
-    "junco",
-    "jungla",
-    "junio",
-    "juntar",
-    "júpiter",
-    "jurar",
-    "justo",
-    "juvenil",
-    "juzgar",
-    "kilo",
-    "koala",
-    "labio",
-    "lacio",
-    "lacra",
-    "lado",
-    "ladrón",
-    "lagarto",
-    "lágrima",
-    "laguna",
-    "laico",
-    "lamer",
-    "lámina",
-    "lámpara",
-    "lana",
-    "lancha",
-    "langosta",
-    "lanza",
-    "lápiz",
-    "largo",
-    "larva",
-    "lástima",
-    "lata",
-    "látex",
-    "latir",
-    "laurel",
-    "lavar",
-    "lazo",
-    "leal",
-    "lección",
-    "leche",
-    "lector",
-    "leer",
-    "legión",
-    "legumbre",
-    "lejano",
-    "leña",
-    "lengua",
-    "lento",
-    "león",
-    "leopardo",
-    "lesión",
-    "letal",
-    "letra",
-    "leve",
-    "leyenda",
-    "libertad",
-    "libro",
-    "licor",
-    "líder",
-    "lidiar",
-    "lienzo",
-    "liga",
-    "ligero",
-    "lima",
-    "límite",
-    "limón",
-    "limpio",
-    "lince",
-    "lindo",
-    "línea",
-    "lingote",
-    "lino",
-    "linterna",
-    "líquido",
-    "liso",
-    "lista",
-    "litera",
-    "litio",
-    "litro",
-    "llaga",
-    "llama",
-    "llanto",
-    "llave",
-    "llegar",
-    "llenar",
-    "llevar",
-    "llorar",
-    "llover",
-    "lluvia",
-    "lobo",
-    "loción",
-    "loco",
-    "locura",
-    "lógica",
-    "logro",
-    "lombriz",
-    "lomo",
-    "lonja",
-    "lote",
-    "lucha",
-    "lucir",
-    "lugar",
-    "lujo",
-    "luna",
-    "lunes",
-    "lupa",
-    "lustro",
-    "luto",
-    "luz",
-    "maceta",
-    "macho",
-    "madera",
-    "madre",
-    "maduro",
-    "maestro",
-    "mafia",
-    "magia",
-    "mago",
-    "maíz",
-    "maldad",
-    "maleta",
-    "malla",
-    "malo",
-    "mamá",
-    "mambo",
-    "mamut",
-    "mañana",
-    "manco",
-    "mando",
-    "manejar",
-    "manga",
-    "maniquí",
-    "manjar",
-    "mano",
-    "manso",
-    "manta",
-    "mapa",
-    "máquina",
-    "mar",
-    "marco",
-    "marea",
-    "marfil",
-    "margen",
-    "marido",
-    "mármol",
-    "marrón",
-    "martes",
-    "marzo",
-    "masa",
-    "máscara",
-    "masivo",
-    "matar",
-    "materia",
-    "matiz",
-    "matriz",
-    "máximo",
-    "mayor",
-    "mazorca",
-    "mecha",
-    "medalla",
-    "medio",
-    "médula",
-    "mejilla",
-    "mejor",
-    "melena",
-    "melón",
-    "memoria",
-    "menor",
-    "mensaje",
-    "mente",
-    "menú",
-    "mercado",
-    "merengue",
-    "mérito",
-    "mes",
-    "mesón",
-    "meta",
-    "meter",
-    "método",
-    "metro",
-    "mezcla",
-    "miedo",
-    "miel",
-    "miembro",
-    "miga",
-    "mil",
-    "milagro",
-    "militar",
-    "millón",
-    "mimo",
-    "mina",
-    "minero",
-    "mínimo",
-    "minuto",
-    "miope",
-    "mirar",
-    "misa",
-    "miseria",
-    "misil",
-    "mismo",
-    "mitad",
-    "mito",
-    "mochila",
-    "moción",
-    "moda",
-    "modelo",
-    "moho",
-    "mojar",
-    "molde",
-    "moler",
-    "molino",
-    "momento",
-    "momia",
-    "monarca",
-    "moneda",
-    "monja",
-    "moño",
-    "monto",
-    "morada",
-    "morder",
-    "moreno",
-    "morir",
-    "morro",
-    "morsa",
-    "mortal",
-    "mosca",
-    "mostrar",
-    "motivo",
-    "mover",
-    "móvil",
-    "mozo",
-    "mucho",
-    "mudar",
-    "mueble",
-    "muela",
-    "muerte",
-    "muestra",
-    "mugre",
-    "mujer",
-    "mula",
-    "muleta",
-    "multa",
-    "mundo",
-    "muñeca",
-    "mural",
-    "muro",
-    "músculo",
-    "museo",
-    "musgo",
-    "música",
-    "muslo",
-    "nácar",
-    "nación",
-    "nadar",
-    "naipe",
-    "naranja",
-    "nariz",
-    "narrar",
-    "nasal",
-    "natal",
-    "nativo",
-    "natural",
-    "náusea",
-    "naval",
-    "nave",
-    "navidad",
-    "necio",
-    "néctar",
-    "negar",
-    "negocio",
-    "negro",
-    "neón",
-    "nervio",
-    "neto",
-    "neutro",
-    "nevar",
-    "nevera",
-    "nicho",
-    "nido",
-    "niebla",
-    "nieto",
-    "niñez",
-    "niño",
-    "nítido",
-    "nivel",
-    "nobleza",
-    "noche",
-    "nómina",
-    "noria",
-    "norma",
-    "norte",
-    "nota",
-    "noticia",
-    "novato",
-    "novela",
-    "novio",
-    "nube",
-    "nuca",
-    "núcleo",
-    "nudillo",
-    "nudo",
-    "nuera",
-    "nueve",
-    "nuez",
-    "nulo",
-    "número",
-    "nutria",
-    "oasis",
-    "obeso",
-    "obispo",
-    "objeto",
-    "obra",
-    "obrero",
-    "observar",
-    "obtener",
-    "obvio",
-    "oca",
-    "ocaso",
-    "océano",
-    "ochenta",
-    "ocho",
-    "ocio",
-    "ocre",
-    "octavo",
-    "octubre",
-    "oculto",
-    "ocupar",
-    "ocurrir",
-    "odiar",
-    "odio",
-    "odisea",
-    "oeste",
-    "ofensa",
-    "oferta",
-    "oficio",
-    "ofrecer",
-    "ogro",
-    "oído",
-    "oír",
-    "ojo",
-    "ola",
-    "oleada",
-    "olfato",
-    "olivo",
-    "olla",
-    "olmo",
-    "olor",
-    "olvido",
-    "ombligo",
-    "onda",
-    "onza",
-    "opaco",
-    "opción",
-    "ópera",
-    "opinar",
-    "oponer",
-    "optar",
-    "óptica",
-    "opuesto",
-    "oración",
-    "orador",
-    "oral",
-    "órbita",
-    "orca",
-    "orden",
-    "oreja",
-    "órgano",
-    "orgía",
-    "orgullo",
-    "oriente",
-    "origen",
-    "orilla",
-    "oro",
-    "orquesta",
-    "oruga",
-    "osadía",
-    "oscuro",
-    "osezno",
-    "oso",
-    "ostra",
-    "otoño",
-    "otro",
-    "oveja",
-    "óvulo",
-    "óxido",
-    "oxígeno",
-    "oyente",
-    "ozono",
-    "pacto",
-    "padre",
-    "paella",
-    "página",
-    "pago",
-    "país",
-    "pájaro",
-    "palabra",
-    "palco",
-    "paleta",
-    "pálido",
-    "palma",
-    "paloma",
-    "palpar",
-    "pan",
-    "panal",
-    "pánico",
-    "pantera",
-    "pañuelo",
-    "papá",
-    "papel",
-    "papilla",
-    "paquete",
-    "parar",
-    "parcela",
-    "pared",
-    "parir",
-    "paro",
-    "párpado",
-    "parque",
-    "párrafo",
-    "parte",
-    "pasar",
-    "paseo",
-    "pasión",
-    "paso",
-    "pasta",
-    "pata",
-    "patio",
-    "patria",
-    "pausa",
-    "pauta",
-    "pavo",
-    "payaso",
-    "peatón",
-    "pecado",
-    "pecera",
-    "pecho",
-    "pedal",
-    "pedir",
-    "pegar",
-    "peine",
-    "pelar",
-    "peldaño",
-    "pelea",
-    "peligro",
-    "pellejo",
-    "pelo",
-    "peluca",
-    "pena",
-    "peñón",
-    "pensar",
-    "peón",
-    "peor",
-    "pepino",
-    "pequeño",
-    "pera",
-    "percha",
-    "perder",
-    "pereza",
-    "perfil",
-    "perico",
-    "perla",
-    "permiso",
-    "perro",
-    "persona",
-    "pesa",
-    "pesca",
-    "pésimo",
-    "pestaña",
-    "pétalo",
-    "petróleo",
-    "pez",
-    "pezuña",
-    "picar",
-    "pichón",
-    "pie",
-    "piedra",
-    "pierna",
-    "pieza",
-    "pijama",
-    "pilar",
-    "piloto",
-    "pimienta",
-    "piña",
-    "pino",
-    "pintor",
-    "pinza",
-    "piojo",
-    "pipa",
-    "pirata",
-    "pisar",
-    "piscina",
-    "piso",
-    "pista",
-    "pitón",
-    "pizca",
-    "placa",
-    "plan",
-    "plata",
-    "playa",
-    "plaza",
-    "pleito",
-    "pleno",
-    "plomo",
-    "pluma",
-    "plural",
-    "pobre",
-    "poco",
-    "poder",
-    "podio",
-    "poema",
-    "poesía",
-    "poeta",
-    "polen",
-    "policía",
-    "pollo",
-    "polvo",
-    "pomada",
-    "pomelo",
-    "pomo",
-    "pompa",
-    "poner",
-    "porción",
-    "portal",
-    "posada",
-    "poseer",
-    "posible",
-    "poste",
-    "potencia",
-    "potro",
-    "pozo",
-    "prado",
-    "precoz",
-    "pregunta",
-    "premio",
-    "prensa",
-    "preso",
-    "previo",
-    "primo",
-    "príncipe",
-    "prisión",
-    "privar",
-    "proa",
-    "probar",
-    "proceso",
-    "producto",
-    "proeza",
-    "profesor",
-    "programa",
-    "prole",
-    "promesa",
-    "pronto",
-    "propio",
-    "próximo",
-    "prueba",
-    "público",
-    "puchero",
-    "pudor",
-    "pueblo",
-    "puerta",
-    "puesto",
-    "pulga",
-    "pulir",
-    "pulmón",
-    "pulpo",
-    "pulso",
-    "puma",
-    "puñal",
-    "puño",
-    "punto",
-    "pupa",
-    "pupila",
-    "puré",
-    "quedar",
-    "queja",
-    "quemar",
-    "querer",
-    "queso",
-    "quieto",
-    "química",
-    "quince",
-    "quitar",
-    "rábano",
-    "rabia",
-    "rabo",
-    "ración",
-    "radical",
-    "raíz",
-    "rama",
-    "rampa",
-    "rancho",
-    "rango",
-    "rapaz",
-    "rápido",
-    "rapto",
-    "rasgo",
-    "raspa",
-    "rato",
-    "rayo",
-    "raza",
-    "razón",
-    "reacción",
-    "realidad",
-    "rebaño",
-    "rebote",
-    "recaer",
-    "receta",
-    "rechazo",
-    "recoger",
-    "recreo",
-    "recto",
-    "recurso",
-    "red",
-    "redondo",
-    "reducir",
-    "reflejo",
-    "reforma",
-    "refrán",
-    "refugio",
-    "regalo",
-    "regir",
-    "regla",
-    "regreso",
-    "rehén",
-    "reino",
-    "reír",
-    "reja",
-    "relato",
-    "relevo",
-    "relieve",
-    "relleno",
-    "reloj",
-    "remar",
-    "remedio",
-    "remo",
-    "rencor",
-    "rendir",
-    "renta",
-    "reparto",
-    "repetir",
-    "reposo",
-    "reptil",
-    "res",
-    "rescate",
-    "resina",
-    "respeto",
-    "resto",
-    "resumen",
-    "retiro",
-    "retorno",
-    "retrato",
-    "reunir",
-    "revés",
-    "revista",
-    "rey",
-    "rezar",
-    "rico",
-    "riego",
-    "rienda",
-    "riesgo",
-    "rifa",
-    "rígido",
-    "rigor",
-    "rincón",
-    "riñón",
-    "río",
-    "riqueza",
-    "risa",
-    "ritmo",
-    "rito",
-    "rizo",
-    "roble",
-    "roce",
-    "rociar",
-    "rodar",
-    "rodeo",
-    "rodilla",
-    "roer",
-    "rojizo",
-    "rojo",
-    "romero",
-    "romper",
-    "ron",
-    "ronco",
-    "ronda",
-    "ropa",
-    "ropero",
-    "rosa",
-    "rosca",
-    "rostro",
-    "rotar",
-    "rubí",
-    "rubor",
-    "rudo",
-    "rueda",
-    "rugir",
-    "ruido",
-    "ruina",
-    "ruleta",
-    "rulo",
-    "rumbo",
-    "rumor",
-    "ruptura",
-    "ruta",
-    "rutina",
-    "sábado",
-    "saber",
-    "sabio",
-    "sable",
-    "sacar",
-    "sagaz",
-    "sagrado",
-    "sala",
-    "saldo",
-    "salero",
-    "salir",
-    "salmón",
-    "salón",
-    "salsa",
-    "salto",
-    "salud",
-    "salvar",
-    "samba",
-    "sanción",
-    "sandía",
-    "sanear",
-    "sangre",
-    "sanidad",
-    "sano",
-    "santo",
-    "sapo",
-    "saque",
-    "sardina",
-    "sartén",
-    "sastre",
-    "satán",
-    "sauna",
-    "saxofón",
-    "sección",
-    "seco",
-    "secreto",
-    "secta",
-    "sed",
-    "seguir",
-    "seis",
-    "sello",
-    "selva",
-    "semana",
-    "semilla",
-    "señal",
-    "senda",
-    "señor",
-    "sensor",
-    "separar",
-    "sepia",
-    "sequía",
-    "ser",
-    "serie",
-    "sermón",
-    "servir",
-    "sesenta",
-    "sesión",
-    "seta",
-    "setenta",
-    "severo",
-    "sexo",
-    "sexto",
-    "sidra",
-    "siesta",
-    "siete",
-    "siglo",
-    "signo",
-    "sílaba",
-    "silbar",
-    "silencio",
-    "silla",
-    "símbolo",
-    "simio",
-    "sirena",
-    "sistema",
-    "sitio",
-    "situar",
-    "sobre",
-    "socio",
-    "sodio",
-    "sol",
-    "solapa",
-    "soldado",
-    "soledad",
-    "sólido",
-    "soltar",
-    "solución",
-    "sombra",
-    "sondeo",
-    "sonido",
-    "sonoro",
-    "sonrisa",
-    "sopa",
-    "soplar",
-    "soporte",
-    "sordo",
-    "sorpresa",
-    "sorteo",
-    "sostén",
-    "sótano",
-    "suave",
-    "subir",
-    "suceso",
-    "sudor",
-    "suegra",
-    "suelo",
-    "sueño",
-    "suerte",
-    "sufrir",
-    "sujeto",
-    "sultán",
-    "sumar",
-    "superar",
-    "suplir",
-    "suponer",
-    "supremo",
-    "sur",
-    "surco",
-    "sureño",
-    "surgir",
-    "susto",
-    "sutil",
-    "tabaco",
-    "tabique",
-    "tabla",
-    "tabú",
-    "taco",
-    "tacto",
-    "tajo",
-    "talar",
-    "talco",
-    "talento",
-    "talla",
-    "talón",
-    "tamaño",
-    "tambor",
-    "tango",
-    "tanque",
-    "tapa",
-    "tapete",
-    "tapia",
-    "tapón",
-    "taquilla",
-    "tarde",
-    "tarea",
-    "tarifa",
-    "tarjeta",
-    "tarot",
-    "tarro",
-    "tarta",
-    "tatuaje",
-    "tauro",
-    "taza",
-    "tazón",
-    "teatro",
-    "techo",
-    "tecla",
-    "técnica",
-    "tejado",
-    "tejer",
-    "tejido",
-    "tela",
-    "teléfono",
-    "tema",
-    "temor",
-    "templo",
-    "tenaz",
-    "tender",
-    "tener",
-    "tenis",
-    "tenso",
-    "teoría",
-    "terapia",
-    "terco",
-    "término",
-    "ternura",
-    "terror",
-    "tesis",
-    "tesoro",
-    "testigo",
-    "tetera",
-    "texto",
-    "tez",
-    "tibio",
-    "tiburón",
-    "tiempo",
-    "tienda",
-    "tierra",
-    "tieso",
-    "tigre",
-    "tijera",
-    "tilde",
-    "timbre",
-    "tímido",
-    "timo",
-    "tinta",
-    "tío",
-    "típico",
-    "tipo",
-    "tira",
-    "tirón",
-    "titán",
-    "títere",
-    "título",
-    "tiza",
-    "toalla",
-    "tobillo",
-    "tocar",
-    "tocino",
-    "todo",
-    "toga",
-    "toldo",
-    "tomar",
-    "tono",
-    "tonto",
-    "topar",
-    "tope",
-    "toque",
-    "tórax",
-    "torero",
-    "tormenta",
-    "torneo",
-    "toro",
-    "torpedo",
-    "torre",
-    "torso",
-    "tortuga",
-    "tos",
-    "tosco",
-    "toser",
-    "tóxico",
-    "trabajo",
-    "tractor",
-    "traer",
-    "tráfico",
-    "trago",
-    "traje",
-    "tramo",
-    "trance",
-    "trato",
-    "trauma",
-    "trazar",
-    "trébol",
-    "tregua",
-    "treinta",
-    "tren",
-    "trepar",
-    "tres",
-    "tribu",
-    "trigo",
-    "tripa",
-    "triste",
-    "triunfo",
-    "trofeo",
-    "trompa",
-    "tronco",
-    "tropa",
-    "trote",
-    "trozo",
-    "truco",
-    "trueno",
-    "trufa",
-    "tubería",
-    "tubo",
-    "tuerto",
-    "tumba",
-    "tumor",
-    "túnel",
-    "túnica",
-    "turbina",
-    "turismo",
-    "turno",
-    "tutor",
-    "ubicar",
-    "úlcera",
-    "umbral",
-    "uña",
-    "unidad",
-    "unir",
-    "universo",
-    "uno",
-    "untar",
-    "urbano",
-    "urbe",
-    "urgente",
-    "urna",
-    "usar",
-    "usuario",
-    "útil",
-    "utopía",
-    "uva",
-    "vaca",
-    "vacío",
-    "vacuna",
-    "vagar",
-    "vago",
-    "vaina",
-    "vajilla",
-    "vale",
-    "válido",
-    "valle",
-    "valor",
-    "válvula",
-    "vampiro",
-    "vara",
-    "variar",
-    "varón",
-    "vaso",
-    "vecino",
-    "vector",
-    "vehículo",
-    "veinte",
-    "vejez",
-    "vela",
-    "velero",
-    "veloz",
-    "vena",
-    "vencer",
-    "venda",
-    "veneno",
-    "vengar",
-    "venir",
-    "venta",
-    "venus",
-    "ver",
-    "verano",
-    "verbo",
-    "verde",
-    "vereda",
-    "verja",
-    "verso",
-    "verter",
-    "vía",
-    "viaje",
-    "vibrar",
-    "vicio",
-    "víctima",
-    "vida",
-    "vídeo",
-    "vidrio",
-    "viejo",
-    "viernes",
-    "vigor",
-    "vil",
-    "villa",
-    "vinagre",
-    "viñedo",
-    "vino",
-    "violín",
-    "viral",
-    "virgo",
-    "virtud",
-    "visor",
-    "víspera",
-    "vista",
-    "vitamina",
-    "viudo",
-    "vivaz",
-    "vivero",
-    "vivir",
-    "vivo",
-    "volcán",
-    "volumen",
-    "volver",
-    "voraz",
-    "votar",
-    "voto",
-    "voz",
-    "vuelo",
-    "vulgar",
-    "yacer",
-    "yate",
-    "yegua",
-    "yema",
-    "yerno",
-    "yeso",
-    "yodo",
-    "yoga",
-    "yogur",
-    "zafiro",
-    "zanja",
-    "zapato",
-    "zarza",
-    "zona",
-    "zorro",
-    "zumo",
-    "zurdo"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/fr.rs b/networks/monero/wallet/polyseed/src/words/fr.rs
deleted file mode 100644
index 5b3303e9..00000000
--- a/networks/monero/wallet/polyseed/src/words/fr.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "abaisser",
-    "abandon",
-    "abdiquer",
-    "abeille",
-    "abolir",
-    "aborder",
-    "aboutir",
-    "aboyer",
-    "abrasif",
-    "abreuver",
-    "abriter",
-    "abroger",
-    "abrupt",
-    "absence",
-    "absolu",
-    "absurde",
-    "abusif",
-    "abyssal",
-    "académie",
-    "acajou",
-    "acarien",
-    "accabler",
-    "accepter",
-    "acclamer",
-    "accolade",
-    "accroche",
-    "accuser",
-    "acerbe",
-    "achat",
-    "acheter",
-    "aciduler",
-    "acier",
-    "acompte",
-    "acquérir",
-    "acronyme",
-    "acteur",
-    "actif",
-    "actuel",
-    "adepte",
-    "adéquat",
-    "adhésif",
-    "adjectif",
-    "adjuger",
-    "admettre",
-    "admirer",
-    "adopter",
-    "adorer",
-    "adoucir",
-    "adresse",
-    "adroit",
-    "adulte",
-    "adverbe",
-    "aérer",
-    "aéronef",
-    "affaire",
-    "affecter",
-    "affiche",
-    "affreux",
-    "affubler",
-    "agacer",
-    "agencer",
-    "agile",
-    "agiter",
-    "agrafer",
-    "agréable",
-    "agrume",
-    "aider",
-    "aiguille",
-    "ailier",
-    "aimable",
-    "aisance",
-    "ajouter",
-    "ajuster",
-    "alarmer",
-    "alchimie",
-    "alerte",
-    "algèbre",
-    "algue",
-    "aliéner",
-    "aliment",
-    "alléger",
-    "alliage",
-    "allouer",
-    "allumer",
-    "alourdir",
-    "alpaga",
-    "altesse",
-    "alvéole",
-    "amateur",
-    "ambigu",
-    "ambre",
-    "aménager",
-    "amertume",
-    "amidon",
-    "amiral",
-    "amorcer",
-    "amour",
-    "amovible",
-    "amphibie",
-    "ampleur",
-    "amusant",
-    "analyse",
-    "anaphore",
-    "anarchie",
-    "anatomie",
-    "ancien",
-    "anéantir",
-    "angle",
-    "angoisse",
-    "anguleux",
-    "animal",
-    "annexer",
-    "annonce",
-    "annuel",
-    "anodin",
-    "anomalie",
-    "anonyme",
-    "anormal",
-    "antenne",
-    "antidote",
-    "anxieux",
-    "apaiser",
-    "apéritif",
-    "aplanir",
-    "apologie",
-    "appareil",
-    "appeler",
-    "apporter",
-    "appuyer",
-    "aquarium",
-    "aqueduc",
-    "arbitre",
-    "arbuste",
-    "ardeur",
-    "ardoise",
-    "argent",
-    "arlequin",
-    "armature",
-    "armement",
-    "armoire",
-    "armure",
-    "arpenter",
-    "arracher",
-    "arriver",
-    "arroser",
-    "arsenic",
-    "artériel",
-    "article",
-    "aspect",
-    "asphalte",
-    "aspirer",
-    "assaut",
-    "asservir",
-    "assiette",
-    "associer",
-    "assurer",
-    "asticot",
-    "astre",
-    "astuce",
-    "atelier",
-    "atome",
-    "atrium",
-    "atroce",
-    "attaque",
-    "attentif",
-    "attirer",
-    "attraper",
-    "aubaine",
-    "auberge",
-    "audace",
-    "audible",
-    "augurer",
-    "aurore",
-    "automne",
-    "autruche",
-    "avaler",
-    "avancer",
-    "avarice",
-    "avenir",
-    "averse",
-    "aveugle",
-    "aviateur",
-    "avide",
-    "avion",
-    "aviser",
-    "avoine",
-    "avouer",
-    "avril",
-    "axial",
-    "axiome",
-    "badge",
-    "bafouer",
-    "bagage",
-    "baguette",
-    "baignade",
-    "balancer",
-    "balcon",
-    "baleine",
-    "balisage",
-    "bambin",
-    "bancaire",
-    "bandage",
-    "banlieue",
-    "bannière",
-    "banquier",
-    "barbier",
-    "baril",
-    "baron",
-    "barque",
-    "barrage",
-    "bassin",
-    "bastion",
-    "bataille",
-    "bateau",
-    "batterie",
-    "baudrier",
-    "bavarder",
-    "belette",
-    "bélier",
-    "belote",
-    "bénéfice",
-    "berceau",
-    "berger",
-    "berline",
-    "bermuda",
-    "besace",
-    "besogne",
-    "bétail",
-    "beurre",
-    "biberon",
-    "bicycle",
-    "bidule",
-    "bijou",
-    "bilan",
-    "bilingue",
-    "billard",
-    "binaire",
-    "biologie",
-    "biopsie",
-    "biotype",
-    "biscuit",
-    "bison",
-    "bistouri",
-    "bitume",
-    "bizarre",
-    "blafard",
-    "blague",
-    "blanchir",
-    "blessant",
-    "blinder",
-    "blond",
-    "bloquer",
-    "blouson",
-    "bobard",
-    "bobine",
-    "boire",
-    "boiser",
-    "bolide",
-    "bonbon",
-    "bondir",
-    "bonheur",
-    "bonifier",
-    "bonus",
-    "bordure",
-    "borne",
-    "botte",
-    "boucle",
-    "boueux",
-    "bougie",
-    "boulon",
-    "bouquin",
-    "bourse",
-    "boussole",
-    "boutique",
-    "boxeur",
-    "branche",
-    "brasier",
-    "brave",
-    "brebis",
-    "brèche",
-    "breuvage",
-    "bricoler",
-    "brigade",
-    "brillant",
-    "brioche",
-    "brique",
-    "brochure",
-    "broder",
-    "bronzer",
-    "brousse",
-    "broyeur",
-    "brume",
-    "brusque",
-    "brutal",
-    "bruyant",
-    "buffle",
-    "buisson",
-    "bulletin",
-    "bureau",
-    "burin",
-    "bustier",
-    "butiner",
-    "butoir",
-    "buvable",
-    "buvette",
-    "cabanon",
-    "cabine",
-    "cachette",
-    "cadeau",
-    "cadre",
-    "caféine",
-    "caillou",
-    "caisson",
-    "calculer",
-    "calepin",
-    "calibre",
-    "calmer",
-    "calomnie",
-    "calvaire",
-    "camarade",
-    "caméra",
-    "camion",
-    "campagne",
-    "canal",
-    "caneton",
-    "canon",
-    "cantine",
-    "canular",
-    "capable",
-    "caporal",
-    "caprice",
-    "capsule",
-    "capter",
-    "capuche",
-    "carabine",
-    "carbone",
-    "caresser",
-    "caribou",
-    "carnage",
-    "carotte",
-    "carreau",
-    "carton",
-    "cascade",
-    "casier",
-    "casque",
-    "cassure",
-    "causer",
-    "caution",
-    "cavalier",
-    "caverne",
-    "caviar",
-    "cédille",
-    "ceinture",
-    "céleste",
-    "cellule",
-    "cendrier",
-    "censurer",
-    "central",
-    "cercle",
-    "cérébral",
-    "cerise",
-    "cerner",
-    "cerveau",
-    "cesser",
-    "chagrin",
-    "chaise",
-    "chaleur",
-    "chambre",
-    "chance",
-    "chapitre",
-    "charbon",
-    "chasseur",
-    "chaton",
-    "chausson",
-    "chavirer",
-    "chemise",
-    "chenille",
-    "chéquier",
-    "chercher",
-    "cheval",
-    "chien",
-    "chiffre",
-    "chignon",
-    "chimère",
-    "chiot",
-    "chlorure",
-    "chocolat",
-    "choisir",
-    "chose",
-    "chouette",
-    "chrome",
-    "chute",
-    "cigare",
-    "cigogne",
-    "cimenter",
-    "cinéma",
-    "cintrer",
-    "circuler",
-    "cirer",
-    "cirque",
-    "citerne",
-    "citoyen",
-    "citron",
-    "civil",
-    "clairon",
-    "clameur",
-    "claquer",
-    "classe",
-    "clavier",
-    "client",
-    "cligner",
-    "climat",
-    "clivage",
-    "cloche",
-    "clonage",
-    "cloporte",
-    "cobalt",
-    "cobra",
-    "cocasse",
-    "cocotier",
-    "coder",
-    "codifier",
-    "coffre",
-    "cogner",
-    "cohésion",
-    "coiffer",
-    "coincer",
-    "colère",
-    "colibri",
-    "colline",
-    "colmater",
-    "colonel",
-    "combat",
-    "comédie",
-    "commande",
-    "compact",
-    "concert",
-    "conduire",
-    "confier",
-    "congeler",
-    "connoter",
-    "consonne",
-    "contact",
-    "convexe",
-    "copain",
-    "copie",
-    "corail",
-    "corbeau",
-    "cordage",
-    "corniche",
-    "corpus",
-    "correct",
-    "cortège",
-    "cosmique",
-    "costume",
-    "coton",
-    "coude",
-    "coupure",
-    "courage",
-    "couteau",
-    "couvrir",
-    "coyote",
-    "crabe",
-    "crainte",
-    "cravate",
-    "crayon",
-    "créature",
-    "créditer",
-    "crémeux",
-    "creuser",
-    "crevette",
-    "cribler",
-    "crier",
-    "cristal",
-    "critère",
-    "croire",
-    "croquer",
-    "crotale",
-    "crucial",
-    "cruel",
-    "crypter",
-    "cubique",
-    "cueillir",
-    "cuillère",
-    "cuisine",
-    "cuivre",
-    "culminer",
-    "cultiver",
-    "cumuler",
-    "cupide",
-    "curatif",
-    "curseur",
-    "cyanure",
-    "cycle",
-    "cylindre",
-    "cynique",
-    "daigner",
-    "damier",
-    "danger",
-    "danseur",
-    "dauphin",
-    "débattre",
-    "débiter",
-    "déborder",
-    "débrider",
-    "débutant",
-    "décaler",
-    "décembre",
-    "déchirer",
-    "décider",
-    "déclarer",
-    "décorer",
-    "décrire",
-    "décupler",
-    "dédale",
-    "déductif",
-    "déesse",
-    "défensif",
-    "défiler",
-    "défrayer",
-    "dégager",
-    "dégivrer",
-    "déglutir",
-    "dégrafer",
-    "déjeuner",
-    "délice",
-    "déloger",
-    "demander",
-    "demeurer",
-    "démolir",
-    "dénicher",
-    "dénouer",
-    "dentelle",
-    "dénuder",
-    "départ",
-    "dépenser",
-    "déphaser",
-    "déplacer",
-    "déposer",
-    "déranger",
-    "dérober",
-    "désastre",
-    "descente",
-    "désert",
-    "désigner",
-    "désobéir",
-    "dessiner",
-    "destrier",
-    "détacher",
-    "détester",
-    "détourer",
-    "détresse",
-    "devancer",
-    "devenir",
-    "deviner",
-    "devoir",
-    "diable",
-    "dialogue",
-    "diamant",
-    "dicter",
-    "différer",
-    "digérer",
-    "digital",
-    "digne",
-    "diluer",
-    "dimanche",
-    "diminuer",
-    "dioxyde",
-    "directif",
-    "diriger",
-    "discuter",
-    "disposer",
-    "dissiper",
-    "distance",
-    "divertir",
-    "diviser",
-    "docile",
-    "docteur",
-    "dogme",
-    "doigt",
-    "domaine",
-    "domicile",
-    "dompter",
-    "donateur",
-    "donjon",
-    "donner",
-    "dopamine",
-    "dortoir",
-    "dorure",
-    "dosage",
-    "doseur",
-    "dossier",
-    "dotation",
-    "douanier",
-    "double",
-    "douceur",
-    "douter",
-    "doyen",
-    "dragon",
-    "draper",
-    "dresser",
-    "dribbler",
-    "droiture",
-    "duperie",
-    "duplexe",
-    "durable",
-    "durcir",
-    "dynastie",
-    "éblouir",
-    "écarter",
-    "écharpe",
-    "échelle",
-    "éclairer",
-    "éclipse",
-    "éclore",
-    "écluse",
-    "école",
-    "économie",
-    "écorce",
-    "écouter",
-    "écraser",
-    "écrémer",
-    "écrivain",
-    "écrou",
-    "écume",
-    "écureuil",
-    "édifier",
-    "éduquer",
-    "effacer",
-    "effectif",
-    "effigie",
-    "effort",
-    "effrayer",
-    "effusion",
-    "égaliser",
-    "égarer",
-    "éjecter",
-    "élaborer",
-    "élargir",
-    "électron",
-    "élégant",
-    "éléphant",
-    "élève",
-    "éligible",
-    "élitisme",
-    "éloge",
-    "élucider",
-    "éluder",
-    "emballer",
-    "embellir",
-    "embryon",
-    "émeraude",
-    "émission",
-    "emmener",
-    "émotion",
-    "émouvoir",
-    "empereur",
-    "employer",
-    "emporter",
-    "emprise",
-    "émulsion",
-    "encadrer",
-    "enchère",
-    "enclave",
-    "encoche",
-    "endiguer",
-    "endosser",
-    "endroit",
-    "enduire",
-    "énergie",
-    "enfance",
-    "enfermer",
-    "enfouir",
-    "engager",
-    "engin",
-    "englober",
-    "énigme",
-    "enjamber",
-    "enjeu",
-    "enlever",
-    "ennemi",
-    "ennuyeux",
-    "enrichir",
-    "enrobage",
-    "enseigne",
-    "entasser",
-    "entendre",
-    "entier",
-    "entourer",
-    "entraver",
-    "énumérer",
-    "envahir",
-    "enviable",
-    "envoyer",
-    "enzyme",
-    "éolien",
-    "épaissir",
-    "épargne",
-    "épatant",
-    "épaule",
-    "épicerie",
-    "épidémie",
-    "épier",
-    "épilogue",
-    "épine",
-    "épisode",
-    "épitaphe",
-    "époque",
-    "épreuve",
-    "éprouver",
-    "épuisant",
-    "équerre",
-    "équipe",
-    "ériger",
-    "érosion",
-    "erreur",
-    "éruption",
-    "escalier",
-    "espadon",
-    "espèce",
-    "espiègle",
-    "espoir",
-    "esprit",
-    "esquiver",
-    "essayer",
-    "essence",
-    "essieu",
-    "essorer",
-    "estime",
-    "estomac",
-    "estrade",
-    "étagère",
-    "étaler",
-    "étanche",
-    "étatique",
-    "éteindre",
-    "étendoir",
-    "éternel",
-    "éthanol",
-    "éthique",
-    "ethnie",
-    "étirer",
-    "étoffer",
-    "étoile",
-    "étonnant",
-    "étourdir",
-    "étrange",
-    "étroit",
-    "étude",
-    "euphorie",
-    "évaluer",
-    "évasion",
-    "éventail",
-    "évidence",
-    "éviter",
-    "évolutif",
-    "évoquer",
-    "exact",
-    "exagérer",
-    "exaucer",
-    "exceller",
-    "excitant",
-    "exclusif",
-    "excuse",
-    "exécuter",
-    "exemple",
-    "exercer",
-    "exhaler",
-    "exhorter",
-    "exigence",
-    "exiler",
-    "exister",
-    "exotique",
-    "expédier",
-    "explorer",
-    "exposer",
-    "exprimer",
-    "exquis",
-    "extensif",
-    "extraire",
-    "exulter",
-    "fable",
-    "fabuleux",
-    "facette",
-    "facile",
-    "facture",
-    "faiblir",
-    "falaise",
-    "fameux",
-    "famille",
-    "farceur",
-    "farfelu",
-    "farine",
-    "farouche",
-    "fasciner",
-    "fatal",
-    "fatigue",
-    "faucon",
-    "fautif",
-    "faveur",
-    "favori",
-    "fébrile",
-    "féconder",
-    "fédérer",
-    "félin",
-    "femme",
-    "fémur",
-    "fendoir",
-    "féodal",
-    "fermer",
-    "féroce",
-    "ferveur",
-    "festival",
-    "feuille",
-    "feutre",
-    "février",
-    "fiasco",
-    "ficeler",
-    "fictif",
-    "fidèle",
-    "figure",
-    "filature",
-    "filetage",
-    "filière",
-    "filleul",
-    "filmer",
-    "filou",
-    "filtrer",
-    "financer",
-    "finir",
-    "fiole",
-    "firme",
-    "fissure",
-    "fixer",
-    "flairer",
-    "flamme",
-    "flasque",
-    "flatteur",
-    "fléau",
-    "flèche",
-    "fleur",
-    "flexion",
-    "flocon",
-    "flore",
-    "fluctuer",
-    "fluide",
-    "fluvial",
-    "folie",
-    "fonderie",
-    "fongible",
-    "fontaine",
-    "forcer",
-    "forgeron",
-    "formuler",
-    "fortune",
-    "fossile",
-    "foudre",
-    "fougère",
-    "fouiller",
-    "foulure",
-    "fourmi",
-    "fragile",
-    "fraise",
-    "franchir",
-    "frapper",
-    "frayeur",
-    "frégate",
-    "freiner",
-    "frelon",
-    "frémir",
-    "frénésie",
-    "frère",
-    "friable",
-    "friction",
-    "frisson",
-    "frivole",
-    "froid",
-    "fromage",
-    "frontal",
-    "frotter",
-    "fruit",
-    "fugitif",
-    "fuite",
-    "fureur",
-    "furieux",
-    "furtif",
-    "fusion",
-    "futur",
-    "gagner",
-    "galaxie",
-    "galerie",
-    "gambader",
-    "garantir",
-    "gardien",
-    "garnir",
-    "garrigue",
-    "gazelle",
-    "gazon",
-    "géant",
-    "gélatine",
-    "gélule",
-    "gendarme",
-    "général",
-    "génie",
-    "genou",
-    "gentil",
-    "géologie",
-    "géomètre",
-    "géranium",
-    "germe",
-    "gestuel",
-    "geyser",
-    "gibier",
-    "gicler",
-    "girafe",
-    "givre",
-    "glace",
-    "glaive",
-    "glisser",
-    "globe",
-    "gloire",
-    "glorieux",
-    "golfeur",
-    "gomme",
-    "gonfler",
-    "gorge",
-    "gorille",
-    "goudron",
-    "gouffre",
-    "goulot",
-    "goupille",
-    "gourmand",
-    "goutte",
-    "graduel",
-    "graffiti",
-    "graine",
-    "grand",
-    "grappin",
-    "gratuit",
-    "gravir",
-    "grenat",
-    "griffure",
-    "griller",
-    "grimper",
-    "grogner",
-    "gronder",
-    "grotte",
-    "groupe",
-    "gruger",
-    "grutier",
-    "gruyère",
-    "guépard",
-    "guerrier",
-    "guide",
-    "guimauve",
-    "guitare",
-    "gustatif",
-    "gymnaste",
-    "gyrostat",
-    "habitude",
-    "hachoir",
-    "halte",
-    "hameau",
-    "hangar",
-    "hanneton",
-    "haricot",
-    "harmonie",
-    "harpon",
-    "hasard",
-    "hélium",
-    "hématome",
-    "herbe",
-    "hérisson",
-    "hermine",
-    "héron",
-    "hésiter",
-    "heureux",
-    "hiberner",
-    "hibou",
-    "hilarant",
-    "histoire",
-    "hiver",
-    "homard",
-    "hommage",
-    "homogène",
-    "honneur",
-    "honorer",
-    "honteux",
-    "horde",
-    "horizon",
-    "horloge",
-    "hormone",
-    "horrible",
-    "houleux",
-    "housse",
-    "hublot",
-    "huileux",
-    "humain",
-    "humble",
-    "humide",
-    "humour",
-    "hurler",
-    "hydromel",
-    "hygiène",
-    "hymne",
-    "hypnose",
-    "idylle",
-    "ignorer",
-    "iguane",
-    "illicite",
-    "illusion",
-    "image",
-    "imbiber",
-    "imiter",
-    "immense",
-    "immobile",
-    "immuable",
-    "impact",
-    "impérial",
-    "implorer",
-    "imposer",
-    "imprimer",
-    "imputer",
-    "incarner",
-    "incendie",
-    "incident",
-    "incliner",
-    "incolore",
-    "indexer",
-    "indice",
-    "inductif",
-    "inédit",
-    "ineptie",
-    "inexact",
-    "infini",
-    "infliger",
-    "informer",
-    "infusion",
-    "ingérer",
-    "inhaler",
-    "inhiber",
-    "injecter",
-    "injure",
-    "innocent",
-    "inoculer",
-    "inonder",
-    "inscrire",
-    "insecte",
-    "insigne",
-    "insolite",
-    "inspirer",
-    "instinct",
-    "insulter",
-    "intact",
-    "intense",
-    "intime",
-    "intrigue",
-    "intuitif",
-    "inutile",
-    "invasion",
-    "inventer",
-    "inviter",
-    "invoquer",
-    "ironique",
-    "irradier",
-    "irréel",
-    "irriter",
-    "isoler",
-    "ivoire",
-    "ivresse",
-    "jaguar",
-    "jaillir",
-    "jambe",
-    "janvier",
-    "jardin",
-    "jauger",
-    "jaune",
-    "javelot",
-    "jetable",
-    "jeton",
-    "jeudi",
-    "jeunesse",
-    "joindre",
-    "joncher",
-    "jongler",
-    "joueur",
-    "jouissif",
-    "journal",
-    "jovial",
-    "joyau",
-    "joyeux",
-    "jubiler",
-    "jugement",
-    "junior",
-    "jupon",
-    "juriste",
-    "justice",
-    "juteux",
-    "juvénile",
-    "kayak",
-    "kimono",
-    "kiosque",
-    "label",
-    "labial",
-    "labourer",
-    "lacérer",
-    "lactose",
-    "lagune",
-    "laine",
-    "laisser",
-    "laitier",
-    "lambeau",
-    "lamelle",
-    "lampe",
-    "lanceur",
-    "langage",
-    "lanterne",
-    "lapin",
-    "largeur",
-    "larme",
-    "laurier",
-    "lavabo",
-    "lavoir",
-    "lecture",
-    "légal",
-    "léger",
-    "légume",
-    "lessive",
-    "lettre",
-    "levier",
-    "lexique",
-    "lézard",
-    "liasse",
-    "libérer",
-    "libre",
-    "licence",
-    "licorne",
-    "liège",
-    "lièvre",
-    "ligature",
-    "ligoter",
-    "ligue",
-    "limer",
-    "limite",
-    "limonade",
-    "limpide",
-    "linéaire",
-    "lingot",
-    "lionceau",
-    "liquide",
-    "lisière",
-    "lister",
-    "lithium",
-    "litige",
-    "littoral",
-    "livreur",
-    "logique",
-    "lointain",
-    "loisir",
-    "lombric",
-    "loterie",
-    "louer",
-    "lourd",
-    "loutre",
-    "louve",
-    "loyal",
-    "lubie",
-    "lucide",
-    "lucratif",
-    "lueur",
-    "lugubre",
-    "luisant",
-    "lumière",
-    "lunaire",
-    "lundi",
-    "luron",
-    "lutter",
-    "luxueux",
-    "machine",
-    "magasin",
-    "magenta",
-    "magique",
-    "maigre",
-    "maillon",
-    "maintien",
-    "mairie",
-    "maison",
-    "majorer",
-    "malaxer",
-    "maléfice",
-    "malheur",
-    "malice",
-    "mallette",
-    "mammouth",
-    "mandater",
-    "maniable",
-    "manquant",
-    "manteau",
-    "manuel",
-    "marathon",
-    "marbre",
-    "marchand",
-    "mardi",
-    "maritime",
-    "marqueur",
-    "marron",
-    "marteler",
-    "mascotte",
-    "massif",
-    "matériel",
-    "matière",
-    "matraque",
-    "maudire",
-    "maussade",
-    "mauve",
-    "maximal",
-    "méchant",
-    "méconnu",
-    "médaille",
-    "médecin",
-    "méditer",
-    "méduse",
-    "meilleur",
-    "mélange",
-    "mélodie",
-    "membre",
-    "mémoire",
-    "menacer",
-    "mener",
-    "menhir",
-    "mensonge",
-    "mentor",
-    "mercredi",
-    "mérite",
-    "merle",
-    "messager",
-    "mesure",
-    "métal",
-    "météore",
-    "méthode",
-    "métier",
-    "meuble",
-    "miauler",
-    "microbe",
-    "miette",
-    "mignon",
-    "migrer",
-    "milieu",
-    "million",
-    "mimique",
-    "mince",
-    "minéral",
-    "minimal",
-    "minorer",
-    "minute",
-    "miracle",
-    "miroiter",
-    "missile",
-    "mixte",
-    "mobile",
-    "moderne",
-    "moelleux",
-    "mondial",
-    "moniteur",
-    "monnaie",
-    "monotone",
-    "monstre",
-    "montagne",
-    "monument",
-    "moqueur",
-    "morceau",
-    "morsure",
-    "mortier",
-    "moteur",
-    "motif",
-    "mouche",
-    "moufle",
-    "moulin",
-    "mousson",
-    "mouton",
-    "mouvant",
-    "multiple",
-    "munition",
-    "muraille",
-    "murène",
-    "murmure",
-    "muscle",
-    "muséum",
-    "musicien",
-    "mutation",
-    "muter",
-    "mutuel",
-    "myriade",
-    "myrtille",
-    "mystère",
-    "mythique",
-    "nageur",
-    "nappe",
-    "narquois",
-    "narrer",
-    "natation",
-    "nation",
-    "nature",
-    "naufrage",
-    "nautique",
-    "navire",
-    "nébuleux",
-    "nectar",
-    "néfaste",
-    "négation",
-    "négliger",
-    "négocier",
-    "neige",
-    "nerveux",
-    "nettoyer",
-    "neurone",
-    "neutron",
-    "neveu",
-    "niche",
-    "nickel",
-    "nitrate",
-    "niveau",
-    "noble",
-    "nocif",
-    "nocturne",
-    "noirceur",
-    "noisette",
-    "nomade",
-    "nombreux",
-    "nommer",
-    "normatif",
-    "notable",
-    "notifier",
-    "notoire",
-    "nourrir",
-    "nouveau",
-    "novateur",
-    "novembre",
-    "novice",
-    "nuage",
-    "nuancer",
-    "nuire",
-    "nuisible",
-    "numéro",
-    "nuptial",
-    "nuque",
-    "nutritif",
-    "obéir",
-    "objectif",
-    "obliger",
-    "obscur",
-    "observer",
-    "obstacle",
-    "obtenir",
-    "obturer",
-    "occasion",
-    "occuper",
-    "océan",
-    "octobre",
-    "octroyer",
-    "octupler",
-    "oculaire",
-    "odeur",
-    "odorant",
-    "offenser",
-    "officier",
-    "offrir",
-    "ogive",
-    "oiseau",
-    "oisillon",
-    "olfactif",
-    "olivier",
-    "ombrage",
-    "omettre",
-    "onctueux",
-    "onduler",
-    "onéreux",
-    "onirique",
-    "opale",
-    "opaque",
-    "opérer",
-    "opinion",
-    "opportun",
-    "opprimer",
-    "opter",
-    "optique",
-    "orageux",
-    "orange",
-    "orbite",
-    "ordonner",
-    "oreille",
-    "organe",
-    "orgueil",
-    "orifice",
-    "ornement",
-    "orque",
-    "ortie",
-    "osciller",
-    "osmose",
-    "ossature",
-    "otarie",
-    "ouragan",
-    "ourson",
-    "outil",
-    "outrager",
-    "ouvrage",
-    "ovation",
-    "oxyde",
-    "oxygène",
-    "ozone",
-    "paisible",
-    "palace",
-    "palmarès",
-    "palourde",
-    "palper",
-    "panache",
-    "panda",
-    "pangolin",
-    "paniquer",
-    "panneau",
-    "panorama",
-    "pantalon",
-    "papaye",
-    "papier",
-    "papoter",
-    "papyrus",
-    "paradoxe",
-    "parcelle",
-    "paresse",
-    "parfumer",
-    "parler",
-    "parole",
-    "parrain",
-    "parsemer",
-    "partager",
-    "parure",
-    "parvenir",
-    "passion",
-    "pastèque",
-    "paternel",
-    "patience",
-    "patron",
-    "pavillon",
-    "pavoiser",
-    "payer",
-    "paysage",
-    "peigne",
-    "peintre",
-    "pelage",
-    "pélican",
-    "pelle",
-    "pelouse",
-    "peluche",
-    "pendule",
-    "pénétrer",
-    "pénible",
-    "pensif",
-    "pénurie",
-    "pépite",
-    "péplum",
-    "perdrix",
-    "perforer",
-    "période",
-    "permuter",
-    "perplexe",
-    "persil",
-    "perte",
-    "peser",
-    "pétale",
-    "petit",
-    "pétrir",
-    "peuple",
-    "pharaon",
-    "phobie",
-    "phoque",
-    "photon",
-    "phrase",
-    "physique",
-    "piano",
-    "pictural",
-    "pièce",
-    "pierre",
-    "pieuvre",
-    "pilote",
-    "pinceau",
-    "pipette",
-    "piquer",
-    "pirogue",
-    "piscine",
-    "piston",
-    "pivoter",
-    "pixel",
-    "pizza",
-    "placard",
-    "plafond",
-    "plaisir",
-    "planer",
-    "plaque",
-    "plastron",
-    "plateau",
-    "pleurer",
-    "plexus",
-    "pliage",
-    "plomb",
-    "plonger",
-    "pluie",
-    "plumage",
-    "pochette",
-    "poésie",
-    "poète",
-    "pointe",
-    "poirier",
-    "poisson",
-    "poivre",
-    "polaire",
-    "policier",
-    "pollen",
-    "polygone",
-    "pommade",
-    "pompier",
-    "ponctuel",
-    "pondérer",
-    "poney",
-    "portique",
-    "position",
-    "posséder",
-    "posture",
-    "potager",
-    "poteau",
-    "potion",
-    "pouce",
-    "poulain",
-    "poumon",
-    "pourpre",
-    "poussin",
-    "pouvoir",
-    "prairie",
-    "pratique",
-    "précieux",
-    "prédire",
-    "préfixe",
-    "prélude",
-    "prénom",
-    "présence",
-    "prétexte",
-    "prévoir",
-    "primitif",
-    "prince",
-    "prison",
-    "priver",
-    "problème",
-    "procéder",
-    "prodige",
-    "profond",
-    "progrès",
-    "proie",
-    "projeter",
-    "prologue",
-    "promener",
-    "propre",
-    "prospère",
-    "protéger",
-    "prouesse",
-    "proverbe",
-    "prudence",
-    "pruneau",
-    "psychose",
-    "public",
-    "puceron",
-    "puiser",
-    "pulpe",
-    "pulsar",
-    "punaise",
-    "punitif",
-    "pupitre",
-    "purifier",
-    "puzzle",
-    "pyramide",
-    "quasar",
-    "querelle",
-    "question",
-    "quiétude",
-    "quitter",
-    "quotient",
-    "racine",
-    "raconter",
-    "radieux",
-    "ragondin",
-    "raideur",
-    "raisin",
-    "ralentir",
-    "rallonge",
-    "ramasser",
-    "rapide",
-    "rasage",
-    "ratisser",
-    "ravager",
-    "ravin",
-    "rayonner",
-    "réactif",
-    "réagir",
-    "réaliser",
-    "réanimer",
-    "recevoir",
-    "réciter",
-    "réclamer",
-    "récolter",
-    "recruter",
-    "reculer",
-    "recycler",
-    "rédiger",
-    "redouter",
-    "refaire",
-    "réflexe",
-    "réformer",
-    "refrain",
-    "refuge",
-    "régalien",
-    "région",
-    "réglage",
-    "régulier",
-    "réitérer",
-    "rejeter",
-    "rejouer",
-    "relatif",
-    "relever",
-    "relief",
-    "remarque",
-    "remède",
-    "remise",
-    "remonter",
-    "remplir",
-    "remuer",
-    "renard",
-    "renfort",
-    "renifler",
-    "renoncer",
-    "rentrer",
-    "renvoi",
-    "replier",
-    "reporter",
-    "reprise",
-    "reptile",
-    "requin",
-    "réserve",
-    "résineux",
-    "résoudre",
-    "respect",
-    "rester",
-    "résultat",
-    "rétablir",
-    "retenir",
-    "réticule",
-    "retomber",
-    "retracer",
-    "réunion",
-    "réussir",
-    "revanche",
-    "revivre",
-    "révolte",
-    "révulsif",
-    "richesse",
-    "rideau",
-    "rieur",
-    "rigide",
-    "rigoler",
-    "rincer",
-    "riposter",
-    "risible",
-    "risque",
-    "rituel",
-    "rival",
-    "rivière",
-    "rocheux",
-    "romance",
-    "rompre",
-    "ronce",
-    "rondin",
-    "roseau",
-    "rosier",
-    "rotatif",
-    "rotor",
-    "rotule",
-    "rouge",
-    "rouille",
-    "rouleau",
-    "routine",
-    "royaume",
-    "ruban",
-    "rubis",
-    "ruche",
-    "ruelle",
-    "rugueux",
-    "ruiner",
-    "ruisseau",
-    "ruser",
-    "rustique",
-    "rythme",
-    "sabler",
-    "saboter",
-    "sabre",
-    "sacoche",
-    "safari",
-    "sagesse",
-    "saisir",
-    "salade",
-    "salive",
-    "salon",
-    "saluer",
-    "samedi",
-    "sanction",
-    "sanglier",
-    "sarcasme",
-    "sardine",
-    "saturer",
-    "saugrenu",
-    "saumon",
-    "sauter",
-    "sauvage",
-    "savant",
-    "savonner",
-    "scalpel",
-    "scandale",
-    "scélérat",
-    "scénario",
-    "sceptre",
-    "schéma",
-    "science",
-    "scinder",
-    "score",
-    "scrutin",
-    "sculpter",
-    "séance",
-    "sécable",
-    "sécher",
-    "secouer",
-    "sécréter",
-    "sédatif",
-    "séduire",
-    "seigneur",
-    "séjour",
-    "sélectif",
-    "semaine",
-    "sembler",
-    "semence",
-    "séminal",
-    "sénateur",
-    "sensible",
-    "sentence",
-    "séparer",
-    "séquence",
-    "serein",
-    "sergent",
-    "sérieux",
-    "serrure",
-    "sérum",
-    "service",
-    "sésame",
-    "sévir",
-    "sevrage",
-    "sextuple",
-    "sidéral",
-    "siècle",
-    "siéger",
-    "siffler",
-    "sigle",
-    "signal",
-    "silence",
-    "silicium",
-    "simple",
-    "sincère",
-    "sinistre",
-    "siphon",
-    "sirop",
-    "sismique",
-    "situer",
-    "skier",
-    "social",
-    "socle",
-    "sodium",
-    "soigneux",
-    "soldat",
-    "soleil",
-    "solitude",
-    "soluble",
-    "sombre",
-    "sommeil",
-    "somnoler",
-    "sonde",
-    "songeur",
-    "sonnette",
-    "sonore",
-    "sorcier",
-    "sortir",
-    "sosie",
-    "sottise",
-    "soucieux",
-    "soudure",
-    "souffle",
-    "soulever",
-    "soupape",
-    "source",
-    "soutirer",
-    "souvenir",
-    "spacieux",
-    "spatial",
-    "spécial",
-    "sphère",
-    "spiral",
-    "stable",
-    "station",
-    "sternum",
-    "stimulus",
-    "stipuler",
-    "strict",
-    "studieux",
-    "stupeur",
-    "styliste",
-    "sublime",
-    "substrat",
-    "subtil",
-    "subvenir",
-    "succès",
-    "sucre",
-    "suffixe",
-    "suggérer",
-    "suiveur",
-    "sulfate",
-    "superbe",
-    "supplier",
-    "surface",
-    "suricate",
-    "surmener",
-    "surprise",
-    "sursaut",
-    "survie",
-    "suspect",
-    "syllabe",
-    "symbole",
-    "symétrie",
-    "synapse",
-    "syntaxe",
-    "système",
-    "tabac",
-    "tablier",
-    "tactile",
-    "tailler",
-    "talent",
-    "talisman",
-    "talonner",
-    "tambour",
-    "tamiser",
-    "tangible",
-    "tapis",
-    "taquiner",
-    "tarder",
-    "tarif",
-    "tartine",
-    "tasse",
-    "tatami",
-    "tatouage",
-    "taupe",
-    "taureau",
-    "taxer",
-    "témoin",
-    "temporel",
-    "tenaille",
-    "tendre",
-    "teneur",
-    "tenir",
-    "tension",
-    "terminer",
-    "terne",
-    "terrible",
-    "tétine",
-    "texte",
-    "thème",
-    "théorie",
-    "thérapie",
-    "thorax",
-    "tibia",
-    "tiède",
-    "timide",
-    "tirelire",
-    "tiroir",
-    "tissu",
-    "titane",
-    "titre",
-    "tituber",
-    "toboggan",
-    "tolérant",
-    "tomate",
-    "tonique",
-    "tonneau",
-    "toponyme",
-    "torche",
-    "tordre",
-    "tornade",
-    "torpille",
-    "torrent",
-    "torse",
-    "tortue",
-    "totem",
-    "toucher",
-    "tournage",
-    "tousser",
-    "toxine",
-    "traction",
-    "trafic",
-    "tragique",
-    "trahir",
-    "train",
-    "trancher",
-    "travail",
-    "trèfle",
-    "tremper",
-    "trésor",
-    "treuil",
-    "triage",
-    "tribunal",
-    "tricoter",
-    "trilogie",
-    "triomphe",
-    "tripler",
-    "triturer",
-    "trivial",
-    "trombone",
-    "tronc",
-    "tropical",
-    "troupeau",
-    "tuile",
-    "tulipe",
-    "tumulte",
-    "tunnel",
-    "turbine",
-    "tuteur",
-    "tutoyer",
-    "tuyau",
-    "tympan",
-    "typhon",
-    "typique",
-    "tyran",
-    "ubuesque",
-    "ultime",
-    "ultrason",
-    "unanime",
-    "unifier",
-    "union",
-    "unique",
-    "unitaire",
-    "univers",
-    "uranium",
-    "urbain",
-    "urticant",
-    "usage",
-    "usine",
-    "usuel",
-    "usure",
-    "utile",
-    "utopie",
-    "vacarme",
-    "vaccin",
-    "vagabond",
-    "vague",
-    "vaillant",
-    "vaincre",
-    "vaisseau",
-    "valable",
-    "valise",
-    "vallon",
-    "valve",
-    "vampire",
-    "vanille",
-    "vapeur",
-    "varier",
-    "vaseux",
-    "vassal",
-    "vaste",
-    "vecteur",
-    "vedette",
-    "végétal",
-    "véhicule",
-    "veinard",
-    "véloce",
-    "vendredi",
-    "vénérer",
-    "venger",
-    "venimeux",
-    "ventouse",
-    "verdure",
-    "vérin",
-    "vernir",
-    "verrou",
-    "verser",
-    "vertu",
-    "veston",
-    "vétéran",
-    "vétuste",
-    "vexant",
-    "vexer",
-    "viaduc",
-    "viande",
-    "victoire",
-    "vidange",
-    "vidéo",
-    "vignette",
-    "vigueur",
-    "vilain",
-    "village",
-    "vinaigre",
-    "violon",
-    "vipère",
-    "virement",
-    "virtuose",
-    "virus",
-    "visage",
-    "viseur",
-    "vision",
-    "visqueux",
-    "visuel",
-    "vital",
-    "vitesse",
-    "viticole",
-    "vitrine",
-    "vivace",
-    "vivipare",
-    "vocation",
-    "voguer",
-    "voile",
-    "voisin",
-    "voiture",
-    "volaille",
-    "volcan",
-    "voltiger",
-    "volume",
-    "vorace",
-    "vortex",
-    "voter",
-    "vouloir",
-    "voyage",
-    "voyelle",
-    "wagon",
-    "xénon",
-    "yacht",
-    "zèbre",
-    "zénith",
-    "zeste",
-    "zoologie"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/it.rs b/networks/monero/wallet/polyseed/src/words/it.rs
deleted file mode 100644
index 6d0e4382..00000000
--- a/networks/monero/wallet/polyseed/src/words/it.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "abaco",
-    "abbaglio",
-    "abbinato",
-    "abete",
-    "abisso",
-    "abolire",
-    "abrasivo",
-    "abrogato",
-    "accadere",
-    "accenno",
-    "accusato",
-    "acetone",
-    "achille",
-    "acido",
-    "acqua",
-    "acre",
-    "acrilico",
-    "acrobata",
-    "acuto",
-    "adagio",
-    "addebito",
-    "addome",
-    "adeguato",
-    "aderire",
-    "adipe",
-    "adottare",
-    "adulare",
-    "affabile",
-    "affetto",
-    "affisso",
-    "affranto",
-    "aforisma",
-    "afoso",
-    "africano",
-    "agave",
-    "agente",
-    "agevole",
-    "aggancio",
-    "agire",
-    "agitare",
-    "agonismo",
-    "agricolo",
-    "agrumeto",
-    "aguzzo",
-    "alabarda",
-    "alato",
-    "albatro",
-    "alberato",
-    "albo",
-    "albume",
-    "alce",
-    "alcolico",
-    "alettone",
-    "alfa",
-    "algebra",
-    "aliante",
-    "alibi",
-    "alimento",
-    "allagato",
-    "allegro",
-    "allievo",
-    "allodola",
-    "allusivo",
-    "almeno",
-    "alogeno",
-    "alpaca",
-    "alpestre",
-    "altalena",
-    "alterno",
-    "alticcio",
-    "altrove",
-    "alunno",
-    "alveolo",
-    "alzare",
-    "amalgama",
-    "amanita",
-    "amarena",
-    "ambito",
-    "ambrato",
-    "ameba",
-    "america",
-    "ametista",
-    "amico",
-    "ammasso",
-    "ammenda",
-    "ammirare",
-    "ammonito",
-    "amore",
-    "ampio",
-    "ampliare",
-    "amuleto",
-    "anacardo",
-    "anagrafe",
-    "analista",
-    "anarchia",
-    "anatra",
-    "anca",
-    "ancella",
-    "ancora",
-    "andare",
-    "andrea",
-    "anello",
-    "angelo",
-    "angolare",
-    "angusto",
-    "anima",
-    "annegare",
-    "annidato",
-    "anno",
-    "annuncio",
-    "anonimo",
-    "anticipo",
-    "anzi",
-    "apatico",
-    "apertura",
-    "apode",
-    "apparire",
-    "appetito",
-    "appoggio",
-    "approdo",
-    "appunto",
-    "aprile",
-    "arabica",
-    "arachide",
-    "aragosta",
-    "araldica",
-    "arancio",
-    "aratura",
-    "arazzo",
-    "arbitro",
-    "archivio",
-    "ardito",
-    "arenile",
-    "argento",
-    "argine",
-    "arguto",
-    "aria",
-    "armonia",
-    "arnese",
-    "arredato",
-    "arringa",
-    "arrosto",
-    "arsenico",
-    "arso",
-    "artefice",
-    "arzillo",
-    "asciutto",
-    "ascolto",
-    "asepsi",
-    "asettico",
-    "asfalto",
-    "asino",
-    "asola",
-    "aspirato",
-    "aspro",
-    "assaggio",
-    "asse",
-    "assoluto",
-    "assurdo",
-    "asta",
-    "astenuto",
-    "astice",
-    "astratto",
-    "atavico",
-    "ateismo",
-    "atomico",
-    "atono",
-    "attesa",
-    "attivare",
-    "attorno",
-    "attrito",
-    "attuale",
-    "ausilio",
-    "austria",
-    "autista",
-    "autonomo",
-    "autunno",
-    "avanzato",
-    "avere",
-    "avvenire",
-    "avviso",
-    "avvolgere",
-    "azione",
-    "azoto",
-    "azzimo",
-    "azzurro",
-    "babele",
-    "baccano",
-    "bacino",
-    "baco",
-    "badessa",
-    "badilata",
-    "bagnato",
-    "baita",
-    "balcone",
-    "baldo",
-    "balena",
-    "ballata",
-    "balzano",
-    "bambino",
-    "bandire",
-    "baraonda",
-    "barbaro",
-    "barca",
-    "baritono",
-    "barlume",
-    "barocco",
-    "basilico",
-    "basso",
-    "batosta",
-    "battuto",
-    "baule",
-    "bava",
-    "bavosa",
-    "becco",
-    "beffa",
-    "belgio",
-    "belva",
-    "benda",
-    "benevole",
-    "benigno",
-    "benzina",
-    "bere",
-    "berlina",
-    "beta",
-    "bibita",
-    "bici",
-    "bidone",
-    "bifido",
-    "biga",
-    "bilancia",
-    "bimbo",
-    "binocolo",
-    "biologo",
-    "bipede",
-    "bipolare",
-    "birbante",
-    "birra",
-    "biscotto",
-    "bisesto",
-    "bisnonno",
-    "bisonte",
-    "bisturi",
-    "bizzarro",
-    "blando",
-    "blatta",
-    "bollito",
-    "bonifico",
-    "bordo",
-    "bosco",
-    "botanico",
-    "bottino",
-    "bozzolo",
-    "braccio",
-    "bradipo",
-    "brama",
-    "branca",
-    "bravura",
-    "bretella",
-    "brevetto",
-    "brezza",
-    "briglia",
-    "brillante",
-    "brindare",
-    "broccolo",
-    "brodo",
-    "bronzina",
-    "brullo",
-    "bruno",
-    "bubbone",
-    "buca",
-    "budino",
-    "buffone",
-    "buio",
-    "bulbo",
-    "buono",
-    "burlone",
-    "burrasca",
-    "bussola",
-    "busta",
-    "cadetto",
-    "caduco",
-    "calamaro",
-    "calcolo",
-    "calesse",
-    "calibro",
-    "calmo",
-    "caloria",
-    "cambusa",
-    "camerata",
-    "camicia",
-    "cammino",
-    "camola",
-    "campale",
-    "canapa",
-    "candela",
-    "cane",
-    "canino",
-    "canotto",
-    "cantina",
-    "capace",
-    "capello",
-    "capitolo",
-    "capogiro",
-    "cappero",
-    "capra",
-    "capsula",
-    "carapace",
-    "carcassa",
-    "cardo",
-    "carisma",
-    "carovana",
-    "carretto",
-    "cartolina",
-    "casaccio",
-    "cascata",
-    "caserma",
-    "caso",
-    "cassone",
-    "castello",
-    "casuale",
-    "catasta",
-    "catena",
-    "catrame",
-    "cauto",
-    "cavillo",
-    "cedibile",
-    "cedrata",
-    "cefalo",
-    "celebre",
-    "cellulare",
-    "cena",
-    "cenone",
-    "centesimo",
-    "ceramica",
-    "cercare",
-    "certo",
-    "cerume",
-    "cervello",
-    "cesoia",
-    "cespo",
-    "ceto",
-    "chela",
-    "chiaro",
-    "chicca",
-    "chiedere",
-    "chimera",
-    "china",
-    "chirurgo",
-    "chitarra",
-    "ciao",
-    "ciclismo",
-    "cifrare",
-    "cigno",
-    "cilindro",
-    "ciottolo",
-    "circa",
-    "cirrosi",
-    "citrico",
-    "cittadino",
-    "ciuffo",
-    "civetta",
-    "civile",
-    "classico",
-    "clinica",
-    "cloro",
-    "cocco",
-    "codardo",
-    "codice",
-    "coerente",
-    "cognome",
-    "collare",
-    "colmato",
-    "colore",
-    "colposo",
-    "coltivato",
-    "colza",
-    "coma",
-    "cometa",
-    "commando",
-    "comodo",
-    "computer",
-    "comune",
-    "conciso",
-    "condurre",
-    "conferma",
-    "congelare",
-    "coniuge",
-    "connesso",
-    "conoscere",
-    "consumo",
-    "continuo",
-    "convegno",
-    "coperto",
-    "copione",
-    "coppia",
-    "copricapo",
-    "corazza",
-    "cordata",
-    "coricato",
-    "cornice",
-    "corolla",
-    "corpo",
-    "corredo",
-    "corsia",
-    "cortese",
-    "cosmico",
-    "costante",
-    "cottura",
-    "covato",
-    "cratere",
-    "cravatta",
-    "creato",
-    "credere",
-    "cremoso",
-    "crescita",
-    "creta",
-    "criceto",
-    "crinale",
-    "crisi",
-    "critico",
-    "croce",
-    "cronaca",
-    "crostata",
-    "cruciale",
-    "crusca",
-    "cucire",
-    "cuculo",
-    "cugino",
-    "cullato",
-    "cupola",
-    "curatore",
-    "cursore",
-    "curvo",
-    "cuscino",
-    "custode",
-    "dado",
-    "daino",
-    "dalmata",
-    "damerino",
-    "daniela",
-    "dannoso",
-    "danzare",
-    "datato",
-    "davanti",
-    "davvero",
-    "debutto",
-    "decennio",
-    "deciso",
-    "declino",
-    "decollo",
-    "decreto",
-    "dedicato",
-    "definito",
-    "deforme",
-    "degno",
-    "delegare",
-    "delfino",
-    "delirio",
-    "delta",
-    "demenza",
-    "denotato",
-    "dentro",
-    "deposito",
-    "derapata",
-    "derivare",
-    "deroga",
-    "descritto",
-    "deserto",
-    "desiderio",
-    "desumere",
-    "detersivo",
-    "devoto",
-    "diametro",
-    "dicembre",
-    "diedro",
-    "difeso",
-    "diffuso",
-    "digerire",
-    "digitale",
-    "diluvio",
-    "dinamico",
-    "dinnanzi",
-    "dipinto",
-    "diploma",
-    "dipolo",
-    "diradare",
-    "dire",
-    "dirotto",
-    "dirupo",
-    "disagio",
-    "discreto",
-    "disfare",
-    "disgelo",
-    "disposto",
-    "distanza",
-    "disumano",
-    "dito",
-    "divano",
-    "divelto",
-    "dividere",
-    "divorato",
-    "doblone",
-    "docente",
-    "doganale",
-    "dogma",
-    "dolce",
-    "domato",
-    "domenica",
-    "dominare",
-    "dondolo",
-    "dono",
-    "dormire",
-    "dote",
-    "dottore",
-    "dovuto",
-    "dozzina",
-    "drago",
-    "druido",
-    "dubbio",
-    "dubitare",
-    "ducale",
-    "duna",
-    "duomo",
-    "duplice",
-    "duraturo",
-    "ebano",
-    "eccesso",
-    "ecco",
-    "eclissi",
-    "economia",
-    "edera",
-    "edicola",
-    "edile",
-    "editoria",
-    "educare",
-    "egemonia",
-    "egli",
-    "egoismo",
-    "egregio",
-    "elaborato",
-    "elargire",
-    "elegante",
-    "elencato",
-    "eletto",
-    "elevare",
-    "elfico",
-    "elica",
-    "elmo",
-    "elsa",
-    "eluso",
-    "emanato",
-    "emblema",
-    "emesso",
-    "emiro",
-    "emotivo",
-    "emozione",
-    "empirico",
-    "emulo",
-    "endemico",
-    "enduro",
-    "energia",
-    "enfasi",
-    "enoteca",
-    "entrare",
-    "enzima",
-    "epatite",
-    "epilogo",
-    "episodio",
-    "epocale",
-    "eppure",
-    "equatore",
-    "erario",
-    "erba",
-    "erboso",
-    "erede",
-    "eremita",
-    "erigere",
-    "ermetico",
-    "eroe",
-    "erosivo",
-    "errante",
-    "esagono",
-    "esame",
-    "esanime",
-    "esaudire",
-    "esca",
-    "esempio",
-    "esercito",
-    "esibito",
-    "esigente",
-    "esistere",
-    "esito",
-    "esofago",
-    "esortato",
-    "esoso",
-    "espanso",
-    "espresso",
-    "essenza",
-    "esso",
-    "esteso",
-    "estimare",
-    "estonia",
-    "estroso",
-    "esultare",
-    "etilico",
-    "etnico",
-    "etrusco",
-    "etto",
-    "euclideo",
-    "europa",
-    "evaso",
-    "evidenza",
-    "evitato",
-    "evoluto",
-    "evviva",
-    "fabbrica",
-    "faccenda",
-    "fachiro",
-    "falco",
-    "famiglia",
-    "fanale",
-    "fanfara",
-    "fango",
-    "fantasma",
-    "fare",
-    "farfalla",
-    "farinoso",
-    "farmaco",
-    "fascia",
-    "fastoso",
-    "fasullo",
-    "faticare",
-    "fato",
-    "favoloso",
-    "febbre",
-    "fecola",
-    "fede",
-    "fegato",
-    "felpa",
-    "feltro",
-    "femmina",
-    "fendere",
-    "fenomeno",
-    "fermento",
-    "ferro",
-    "fertile",
-    "fessura",
-    "festivo",
-    "fetta",
-    "feudo",
-    "fiaba",
-    "fiducia",
-    "fifa",
-    "figurato",
-    "filo",
-    "finanza",
-    "finestra",
-    "finire",
-    "fiore",
-    "fiscale",
-    "fisico",
-    "fiume",
-    "flacone",
-    "flamenco",
-    "flebo",
-    "flemma",
-    "florido",
-    "fluente",
-    "fluoro",
-    "fobico",
-    "focaccia",
-    "focoso",
-    "foderato",
-    "foglio",
-    "folata",
-    "folclore",
-    "folgore",
-    "fondente",
-    "fonetico",
-    "fonia",
-    "fontana",
-    "forbito",
-    "forchetta",
-    "foresta",
-    "formica",
-    "fornaio",
-    "foro",
-    "fortezza",
-    "forzare",
-    "fosfato",
-    "fosso",
-    "fracasso",
-    "frana",
-    "frassino",
-    "fratello",
-    "freccetta",
-    "frenata",
-    "fresco",
-    "frigo",
-    "frollino",
-    "fronde",
-    "frugale",
-    "frutta",
-    "fucilata",
-    "fucsia",
-    "fuggente",
-    "fulmine",
-    "fulvo",
-    "fumante",
-    "fumetto",
-    "fumoso",
-    "fune",
-    "funzione",
-    "fuoco",
-    "furbo",
-    "furgone",
-    "furore",
-    "fuso",
-    "futile",
-    "gabbiano",
-    "gaffe",
-    "galateo",
-    "gallina",
-    "galoppo",
-    "gambero",
-    "gamma",
-    "garanzia",
-    "garbo",
-    "garofano",
-    "garzone",
-    "gasdotto",
-    "gasolio",
-    "gastrico",
-    "gatto",
-    "gaudio",
-    "gazebo",
-    "gazzella",
-    "geco",
-    "gelatina",
-    "gelso",
-    "gemello",
-    "gemmato",
-    "gene",
-    "genitore",
-    "gennaio",
-    "genotipo",
-    "gergo",
-    "ghepardo",
-    "ghiaccio",
-    "ghisa",
-    "giallo",
-    "gilda",
-    "ginepro",
-    "giocare",
-    "gioiello",
-    "giorno",
-    "giove",
-    "girato",
-    "girone",
-    "gittata",
-    "giudizio",
-    "giurato",
-    "giusto",
-    "globulo",
-    "glutine",
-    "gnomo",
-    "gobba",
-    "golf",
-    "gomito",
-    "gommone",
-    "gonfio",
-    "gonna",
-    "governo",
-    "gracile",
-    "grado",
-    "grafico",
-    "grammo",
-    "grande",
-    "grattare",
-    "gravoso",
-    "grazia",
-    "greca",
-    "gregge",
-    "grifone",
-    "grigio",
-    "grinza",
-    "grotta",
-    "gruppo",
-    "guadagno",
-    "guaio",
-    "guanto",
-    "guardare",
-    "gufo",
-    "guidare",
-    "ibernato",
-    "icona",
-    "identico",
-    "idillio",
-    "idolo",
-    "idra",
-    "idrico",
-    "idrogeno",
-    "igiene",
-    "ignaro",
-    "ignorato",
-    "ilare",
-    "illeso",
-    "illogico",
-    "illudere",
-    "imballo",
-    "imbevuto",
-    "imbocco",
-    "imbuto",
-    "immane",
-    "immerso",
-    "immolato",
-    "impacco",
-    "impeto",
-    "impiego",
-    "importo",
-    "impronta",
-    "inalare",
-    "inarcare",
-    "inattivo",
-    "incanto",
-    "incendio",
-    "inchino",
-    "incisivo",
-    "incluso",
-    "incontro",
-    "incrocio",
-    "incubo",
-    "indagine",
-    "india",
-    "indole",
-    "inedito",
-    "infatti",
-    "infilare",
-    "inflitto",
-    "ingaggio",
-    "ingegno",
-    "inglese",
-    "ingordo",
-    "ingrosso",
-    "innesco",
-    "inodore",
-    "inoltrare",
-    "inondato",
-    "insano",
-    "insetto",
-    "insieme",
-    "insonnia",
-    "insulina",
-    "intasato",
-    "intero",
-    "intonaco",
-    "intuito",
-    "inumidire",
-    "invalido",
-    "invece",
-    "invito",
-    "iperbole",
-    "ipnotico",
-    "ipotesi",
-    "ippica",
-    "iride",
-    "irlanda",
-    "ironico",
-    "irrigato",
-    "irrorare",
-    "isolato",
-    "isotopo",
-    "isterico",
-    "istituto",
-    "istrice",
-    "italia",
-    "iterare",
-    "labbro",
-    "labirinto",
-    "lacca",
-    "lacerato",
-    "lacrima",
-    "lacuna",
-    "laddove",
-    "lago",
-    "lampo",
-    "lancetta",
-    "lanterna",
-    "lardoso",
-    "larga",
-    "laringe",
-    "lastra",
-    "latenza",
-    "latino",
-    "lattuga",
-    "lavagna",
-    "lavoro",
-    "legale",
-    "leggero",
-    "lembo",
-    "lentezza",
-    "lenza",
-    "leone",
-    "lepre",
-    "lesivo",
-    "lessato",
-    "lesto",
-    "letterale",
-    "leva",
-    "levigato",
-    "libero",
-    "lido",
-    "lievito",
-    "lilla",
-    "limatura",
-    "limitare",
-    "limpido",
-    "lineare",
-    "lingua",
-    "liquido",
-    "lira",
-    "lirica",
-    "lisca",
-    "lite",
-    "litigio",
-    "livrea",
-    "locanda",
-    "lode",
-    "logica",
-    "lombare",
-    "londra",
-    "longevo",
-    "loquace",
-    "lorenzo",
-    "loto",
-    "lotteria",
-    "luce",
-    "lucidato",
-    "lumaca",
-    "luminoso",
-    "lungo",
-    "lupo",
-    "luppolo",
-    "lusinga",
-    "lusso",
-    "lutto",
-    "macabro",
-    "macchina",
-    "macero",
-    "macinato",
-    "madama",
-    "magico",
-    "maglia",
-    "magnete",
-    "magro",
-    "maiolica",
-    "malafede",
-    "malgrado",
-    "malinteso",
-    "malsano",
-    "malto",
-    "malumore",
-    "mana",
-    "mancia",
-    "mandorla",
-    "mangiare",
-    "manifesto",
-    "mannaro",
-    "manovra",
-    "mansarda",
-    "mantide",
-    "manubrio",
-    "mappa",
-    "maratona",
-    "marcire",
-    "maretta",
-    "marmo",
-    "marsupio",
-    "maschera",
-    "massaia",
-    "mastino",
-    "materasso",
-    "matricola",
-    "mattone",
-    "maturo",
-    "mazurca",
-    "meandro",
-    "meccanico",
-    "mecenate",
-    "medesimo",
-    "meditare",
-    "mega",
-    "melassa",
-    "melis",
-    "melodia",
-    "meninge",
-    "meno",
-    "mensola",
-    "mercurio",
-    "merenda",
-    "merlo",
-    "meschino",
-    "mese",
-    "messere",
-    "mestolo",
-    "metallo",
-    "metodo",
-    "mettere",
-    "miagolare",
-    "mica",
-    "micelio",
-    "michele",
-    "microbo",
-    "midollo",
-    "miele",
-    "migliore",
-    "milano",
-    "milite",
-    "mimosa",
-    "minerale",
-    "mini",
-    "minore",
-    "mirino",
-    "mirtillo",
-    "miscela",
-    "missiva",
-    "misto",
-    "misurare",
-    "mitezza",
-    "mitigare",
-    "mitra",
-    "mittente",
-    "mnemonico",
-    "modello",
-    "modifica",
-    "modulo",
-    "mogano",
-    "mogio",
-    "mole",
-    "molosso",
-    "monastero",
-    "monco",
-    "mondina",
-    "monetario",
-    "monile",
-    "monotono",
-    "monsone",
-    "montato",
-    "monviso",
-    "mora",
-    "mordere",
-    "morsicato",
-    "mostro",
-    "motivato",
-    "motosega",
-    "motto",
-    "movenza",
-    "movimento",
-    "mozzo",
-    "mucca",
-    "mucosa",
-    "muffa",
-    "mughetto",
-    "mugnaio",
-    "mulatto",
-    "mulinello",
-    "multiplo",
-    "mummia",
-    "munto",
-    "muovere",
-    "murale",
-    "musa",
-    "muscolo",
-    "musica",
-    "mutevole",
-    "muto",
-    "nababbo",
-    "nafta",
-    "nanometro",
-    "narciso",
-    "narice",
-    "narrato",
-    "nascere",
-    "nastrare",
-    "naturale",
-    "nautica",
-    "naviglio",
-    "nebulosa",
-    "necrosi",
-    "negativo",
-    "negozio",
-    "nemmeno",
-    "neofita",
-    "neretto",
-    "nervo",
-    "nessuno",
-    "nettuno",
-    "neutrale",
-    "neve",
-    "nevrotico",
-    "nicchia",
-    "ninfa",
-    "nitido",
-    "nobile",
-    "nocivo",
-    "nodo",
-    "nome",
-    "nomina",
-    "nordico",
-    "normale",
-    "norvegese",
-    "nostrano",
-    "notare",
-    "notizia",
-    "notturno",
-    "novella",
-    "nucleo",
-    "nulla",
-    "numero",
-    "nuovo",
-    "nutrire",
-    "nuvola",
-    "nuziale",
-    "oasi",
-    "obbedire",
-    "obbligo",
-    "obelisco",
-    "oblio",
-    "obolo",
-    "obsoleto",
-    "occasione",
-    "occhio",
-    "occidente",
-    "occorrere",
-    "occultare",
-    "ocra",
-    "oculato",
-    "odierno",
-    "odorare",
-    "offerta",
-    "offrire",
-    "offuscato",
-    "oggetto",
-    "oggi",
-    "ognuno",
-    "olandese",
-    "olfatto",
-    "oliato",
-    "oliva",
-    "ologramma",
-    "oltre",
-    "omaggio",
-    "ombelico",
-    "ombra",
-    "omega",
-    "omissione",
-    "ondoso",
-    "onere",
-    "onice",
-    "onnivoro",
-    "onorevole",
-    "onta",
-    "operato",
-    "opinione",
-    "opposto",
-    "oracolo",
-    "orafo",
-    "ordine",
-    "orecchino",
-    "orefice",
-    "orfano",
-    "organico",
-    "origine",
-    "orizzonte",
-    "orma",
-    "ormeggio",
-    "ornativo",
-    "orologio",
-    "orrendo",
-    "orribile",
-    "ortensia",
-    "ortica",
-    "orzata",
-    "orzo",
-    "osare",
-    "oscurare",
-    "osmosi",
-    "ospedale",
-    "ospite",
-    "ossa",
-    "ossidare",
-    "ostacolo",
-    "oste",
-    "otite",
-    "otre",
-    "ottagono",
-    "ottimo",
-    "ottobre",
-    "ovale",
-    "ovest",
-    "ovino",
-    "oviparo",
-    "ovocito",
-    "ovunque",
-    "ovviare",
-    "ozio",
-    "pacchetto",
-    "pace",
-    "pacifico",
-    "padella",
-    "padrone",
-    "paese",
-    "paga",
-    "pagina",
-    "palazzina",
-    "palesare",
-    "pallido",
-    "palo",
-    "palude",
-    "pandoro",
-    "pannello",
-    "paolo",
-    "paonazzo",
-    "paprica",
-    "parabola",
-    "parcella",
-    "parere",
-    "pargolo",
-    "pari",
-    "parlato",
-    "parola",
-    "partire",
-    "parvenza",
-    "parziale",
-    "passivo",
-    "pasticca",
-    "patacca",
-    "patologia",
-    "pattume",
-    "pavone",
-    "peccato",
-    "pedalare",
-    "pedonale",
-    "peggio",
-    "peloso",
-    "penare",
-    "pendice",
-    "penisola",
-    "pennuto",
-    "penombra",
-    "pensare",
-    "pentola",
-    "pepe",
-    "pepita",
-    "perbene",
-    "percorso",
-    "perdonato",
-    "perforare",
-    "pergamena",
-    "periodo",
-    "permesso",
-    "perno",
-    "perplesso",
-    "persuaso",
-    "pertugio",
-    "pervaso",
-    "pesatore",
-    "pesista",
-    "peso",
-    "pestifero",
-    "petalo",
-    "pettine",
-    "petulante",
-    "pezzo",
-    "piacere",
-    "pianta",
-    "piattino",
-    "piccino",
-    "picozza",
-    "piega",
-    "pietra",
-    "piffero",
-    "pigiama",
-    "pigolio",
-    "pigro",
-    "pila",
-    "pilifero",
-    "pillola",
-    "pilota",
-    "pimpante",
-    "pineta",
-    "pinna",
-    "pinolo",
-    "pioggia",
-    "piombo",
-    "piramide",
-    "piretico",
-    "pirite",
-    "pirolisi",
-    "pitone",
-    "pizzico",
-    "placebo",
-    "planare",
-    "plasma",
-    "platano",
-    "plenario",
-    "pochezza",
-    "poderoso",
-    "podismo",
-    "poesia",
-    "poggiare",
-    "polenta",
-    "poligono",
-    "pollice",
-    "polmonite",
-    "polpetta",
-    "polso",
-    "poltrona",
-    "polvere",
-    "pomice",
-    "pomodoro",
-    "ponte",
-    "popoloso",
-    "porfido",
-    "poroso",
-    "porpora",
-    "porre",
-    "portata",
-    "posa",
-    "positivo",
-    "possesso",
-    "postulato",
-    "potassio",
-    "potere",
-    "pranzo",
-    "prassi",
-    "pratica",
-    "precluso",
-    "predica",
-    "prefisso",
-    "pregiato",
-    "prelievo",
-    "premere",
-    "prenotare",
-    "preparato",
-    "presenza",
-    "pretesto",
-    "prevalso",
-    "prima",
-    "principe",
-    "privato",
-    "problema",
-    "procura",
-    "produrre",
-    "profumo",
-    "progetto",
-    "prolunga",
-    "promessa",
-    "pronome",
-    "proposta",
-    "proroga",
-    "proteso",
-    "prova",
-    "prudente",
-    "prugna",
-    "prurito",
-    "psiche",
-    "pubblico",
-    "pudica",
-    "pugilato",
-    "pugno",
-    "pulce",
-    "pulito",
-    "pulsante",
-    "puntare",
-    "pupazzo",
-    "pupilla",
-    "puro",
-    "quadro",
-    "qualcosa",
-    "quasi",
-    "querela",
-    "quota",
-    "raccolto",
-    "raddoppio",
-    "radicale",
-    "radunato",
-    "raffica",
-    "ragazzo",
-    "ragione",
-    "ragno",
-    "ramarro",
-    "ramingo",
-    "ramo",
-    "randagio",
-    "rantolare",
-    "rapato",
-    "rapina",
-    "rappreso",
-    "rasatura",
-    "raschiato",
-    "rasente",
-    "rassegna",
-    "rastrello",
-    "rata",
-    "ravveduto",
-    "reale",
-    "recepire",
-    "recinto",
-    "recluta",
-    "recondito",
-    "recupero",
-    "reddito",
-    "redimere",
-    "regalato",
-    "registro",
-    "regola",
-    "regresso",
-    "relazione",
-    "remare",
-    "remoto",
-    "renna",
-    "replica",
-    "reprimere",
-    "reputare",
-    "resa",
-    "residente",
-    "responso",
-    "restauro",
-    "rete",
-    "retina",
-    "retorica",
-    "rettifica",
-    "revocato",
-    "riassunto",
-    "ribadire",
-    "ribelle",
-    "ribrezzo",
-    "ricarica",
-    "ricco",
-    "ricevere",
-    "riciclato",
-    "ricordo",
-    "ricreduto",
-    "ridicolo",
-    "ridurre",
-    "rifasare",
-    "riflesso",
-    "riforma",
-    "rifugio",
-    "rigare",
-    "rigettato",
-    "righello",
-    "rilassato",
-    "rilevato",
-    "rimanere",
-    "rimbalzo",
-    "rimedio",
-    "rimorchio",
-    "rinascita",
-    "rincaro",
-    "rinforzo",
-    "rinnovo",
-    "rinomato",
-    "rinsavito",
-    "rintocco",
-    "rinuncia",
-    "rinvenire",
-    "riparato",
-    "ripetuto",
-    "ripieno",
-    "riportare",
-    "ripresa",
-    "ripulire",
-    "risata",
-    "rischio",
-    "riserva",
-    "risibile",
-    "riso",
-    "rispetto",
-    "ristoro",
-    "risultato",
-    "risvolto",
-    "ritardo",
-    "ritegno",
-    "ritmico",
-    "ritrovo",
-    "riunione",
-    "riva",
-    "riverso",
-    "rivincita",
-    "rivolto",
-    "rizoma",
-    "roba",
-    "robotico",
-    "robusto",
-    "roccia",
-    "roco",
-    "rodaggio",
-    "rodere",
-    "roditore",
-    "rogito",
-    "rollio",
-    "romantico",
-    "rompere",
-    "ronzio",
-    "rosolare",
-    "rospo",
-    "rotante",
-    "rotondo",
-    "rotula",
-    "rovescio",
-    "rubizzo",
-    "rubrica",
-    "ruga",
-    "rullino",
-    "rumine",
-    "rumoroso",
-    "ruolo",
-    "rupe",
-    "russare",
-    "rustico",
-    "sabato",
-    "sabbiare",
-    "sabotato",
-    "sagoma",
-    "salasso",
-    "saldatura",
-    "salgemma",
-    "salivare",
-    "salmone",
-    "salone",
-    "saltare",
-    "saluto",
-    "salvo",
-    "sapere",
-    "sapido",
-    "saporito",
-    "saraceno",
-    "sarcasmo",
-    "sarto",
-    "sassoso",
-    "satellite",
-    "satira",
-    "satollo",
-    "saturno",
-    "savana",
-    "savio",
-    "saziato",
-    "sbadiglio",
-    "sbalzo",
-    "sbancato",
-    "sbarra",
-    "sbattere",
-    "sbavare",
-    "sbendare",
-    "sbirciare",
-    "sbloccato",
-    "sbocciato",
-    "sbrinare",
-    "sbruffone",
-    "sbuffare",
-    "scabroso",
-    "scadenza",
-    "scala",
-    "scambiare",
-    "scandalo",
-    "scapola",
-    "scarso",
-    "scatenare",
-    "scavato",
-    "scelto",
-    "scenico",
-    "scettro",
-    "scheda",
-    "schiena",
-    "sciarpa",
-    "scienza",
-    "scindere",
-    "scippo",
-    "sciroppo",
-    "scivolo",
-    "sclerare",
-    "scodella",
-    "scolpito",
-    "scomparto",
-    "sconforto",
-    "scoprire",
-    "scorta",
-    "scossone",
-    "scozzese",
-    "scriba",
-    "scrollare",
-    "scrutinio",
-    "scuderia",
-    "scultore",
-    "scuola",
-    "scuro",
-    "scusare",
-    "sdebitare",
-    "sdoganare",
-    "seccatura",
-    "secondo",
-    "sedano",
-    "seggiola",
-    "segnalato",
-    "segregato",
-    "seguito",
-    "selciato",
-    "selettivo",
-    "sella",
-    "selvaggio",
-    "semaforo",
-    "sembrare",
-    "seme",
-    "seminato",
-    "sempre",
-    "senso",
-    "sentire",
-    "sepolto",
-    "sequenza",
-    "serata",
-    "serbato",
-    "sereno",
-    "serio",
-    "serpente",
-    "serraglio",
-    "servire",
-    "sestina",
-    "setola",
-    "settimana",
-    "sfacelo",
-    "sfaldare",
-    "sfamato",
-    "sfarzoso",
-    "sfaticato",
-    "sfera",
-    "sfida",
-    "sfilato",
-    "sfinge",
-    "sfocato",
-    "sfoderare",
-    "sfogo",
-    "sfoltire",
-    "sforzato",
-    "sfratto",
-    "sfruttato",
-    "sfuggito",
-    "sfumare",
-    "sfuso",
-    "sgabello",
-    "sgarbato",
-    "sgonfiare",
-    "sgorbio",
-    "sgrassato",
-    "sguardo",
-    "sibilo",
-    "siccome",
-    "sierra",
-    "sigla",
-    "signore",
-    "silenzio",
-    "sillaba",
-    "simbolo",
-    "simpatico",
-    "simulato",
-    "sinfonia",
-    "singolo",
-    "sinistro",
-    "sino",
-    "sintesi",
-    "sinusoide",
-    "sipario",
-    "sisma",
-    "sistole",
-    "situato",
-    "slitta",
-    "slogatura",
-    "sloveno",
-    "smarrito",
-    "smemorato",
-    "smentito",
-    "smeraldo",
-    "smilzo",
-    "smontare",
-    "smottato",
-    "smussato",
-    "snellire",
-    "snervato",
-    "snodo",
-    "sobbalzo",
-    "sobrio",
-    "soccorso",
-    "sociale",
-    "sodale",
-    "soffitto",
-    "sogno",
-    "soldato",
-    "solenne",
-    "solido",
-    "sollazzo",
-    "solo",
-    "solubile",
-    "solvente",
-    "somatico",
-    "somma",
-    "sonda",
-    "sonetto",
-    "sonnifero",
-    "sopire",
-    "soppeso",
-    "sopra",
-    "sorgere",
-    "sorpasso",
-    "sorriso",
-    "sorso",
-    "sorteggio",
-    "sorvolato",
-    "sospiro",
-    "sosta",
-    "sottile",
-    "spada",
-    "spalla",
-    "spargere",
-    "spatola",
-    "spavento",
-    "spazzola",
-    "specie",
-    "spedire",
-    "spegnere",
-    "spelatura",
-    "speranza",
-    "spessore",
-    "spettrale",
-    "spezzato",
-    "spia",
-    "spigoloso",
-    "spillato",
-    "spinoso",
-    "spirale",
-    "splendido",
-    "sportivo",
-    "sposo",
-    "spranga",
-    "sprecare",
-    "spronato",
-    "spruzzo",
-    "spuntino",
-    "squillo",
-    "sradicare",
-    "srotolato",
-    "stabile",
-    "stacco",
-    "staffa",
-    "stagnare",
-    "stampato",
-    "stantio",
-    "starnuto",
-    "stasera",
-    "statuto",
-    "stelo",
-    "steppa",
-    "sterzo",
-    "stiletto",
-    "stima",
-    "stirpe",
-    "stivale",
-    "stizzoso",
-    "stonato",
-    "storico",
-    "strappo",
-    "stregato",
-    "stridulo",
-    "strozzare",
-    "strutto",
-    "stuccare",
-    "stufo",
-    "stupendo",
-    "subentro",
-    "succoso",
-    "sudore",
-    "suggerito",
-    "sugo",
-    "sultano",
-    "suonare",
-    "superbo",
-    "supporto",
-    "surgelato",
-    "surrogato",
-    "sussurro",
-    "sutura",
-    "svagare",
-    "svedese",
-    "sveglio",
-    "svelare",
-    "svenuto",
-    "svezia",
-    "sviluppo",
-    "svista",
-    "svizzera",
-    "svolta",
-    "svuotare",
-    "tabacco",
-    "tabulato",
-    "tacciare",
-    "taciturno",
-    "tale",
-    "talismano",
-    "tampone",
-    "tannino",
-    "tara",
-    "tardivo",
-    "targato",
-    "tariffa",
-    "tarpare",
-    "tartaruga",
-    "tasto",
-    "tattico",
-    "taverna",
-    "tavolata",
-    "tazza",
-    "teca",
-    "tecnico",
-    "telefono",
-    "temerario",
-    "tempo",
-    "temuto",
-    "tendone",
-    "tenero",
-    "tensione",
-    "tentacolo",
-    "teorema",
-    "terme",
-    "terrazzo",
-    "terzetto",
-    "tesi",
-    "tesserato",
-    "testato",
-    "tetro",
-    "tettoia",
-    "tifare",
-    "tigella",
-    "timbro",
-    "tinto",
-    "tipico",
-    "tipografo",
-    "tiraggio",
-    "tiro",
-    "titanio",
-    "titolo",
-    "titubante",
-    "tizio",
-    "tizzone",
-    "toccare",
-    "tollerare",
-    "tolto",
-    "tombola",
-    "tomo",
-    "tonfo",
-    "tonsilla",
-    "topazio",
-    "topologia",
-    "toppa",
-    "torba",
-    "tornare",
-    "torrone",
-    "tortora",
-    "toscano",
-    "tossire",
-    "tostatura",
-    "totano",
-    "trabocco",
-    "trachea",
-    "trafila",
-    "tragedia",
-    "tralcio",
-    "tramonto",
-    "transito",
-    "trapano",
-    "trarre",
-    "trasloco",
-    "trattato",
-    "trave",
-    "treccia",
-    "tremolio",
-    "trespolo",
-    "tributo",
-    "tricheco",
-    "trifoglio",
-    "trillo",
-    "trincea",
-    "trio",
-    "tristezza",
-    "triturato",
-    "trivella",
-    "tromba",
-    "trono",
-    "troppo",
-    "trottola",
-    "trovare",
-    "truccato",
-    "tubatura",
-    "tuffato",
-    "tulipano",
-    "tumulto",
-    "tunisia",
-    "turbare",
-    "turchino",
-    "tuta",
-    "tutela",
-    "ubicato",
-    "uccello",
-    "uccisore",
-    "udire",
-    "uditivo",
-    "uffa",
-    "ufficio",
-    "uguale",
-    "ulisse",
-    "ultimato",
-    "umano",
-    "umile",
-    "umorismo",
-    "uncinetto",
-    "ungere",
-    "ungherese",
-    "unicorno",
-    "unificato",
-    "unisono",
-    "unitario",
-    "unte",
-    "uovo",
-    "upupa",
-    "uragano",
-    "urgenza",
-    "urlo",
-    "usanza",
-    "usato",
-    "uscito",
-    "usignolo",
-    "usuraio",
-    "utensile",
-    "utilizzo",
-    "utopia",
-    "vacante",
-    "vaccinato",
-    "vagabondo",
-    "vagliato",
-    "valanga",
-    "valgo",
-    "valico",
-    "valletta",
-    "valoroso",
-    "valutare",
-    "valvola",
-    "vampata",
-    "vangare",
-    "vanitoso",
-    "vano",
-    "vantaggio",
-    "vanvera",
-    "vapore",
-    "varano",
-    "varcato",
-    "variante",
-    "vasca",
-    "vedetta",
-    "vedova",
-    "veduto",
-    "vegetale",
-    "veicolo",
-    "velcro",
-    "velina",
-    "velluto",
-    "veloce",
-    "venato",
-    "vendemmia",
-    "vento",
-    "verace",
-    "verbale",
-    "vergogna",
-    "verifica",
-    "vero",
-    "verruca",
-    "verticale",
-    "vescica",
-    "vessillo",
-    "vestale",
-    "veterano",
-    "vetrina",
-    "vetusto",
-    "viandante",
-    "vibrante",
-    "vicenda",
-    "vichingo",
-    "vicinanza",
-    "vidimare",
-    "vigilia",
-    "vigneto",
-    "vigore",
-    "vile",
-    "villano",
-    "vimini",
-    "vincitore",
-    "viola",
-    "vipera",
-    "virgola",
-    "virologo",
-    "virulento",
-    "viscoso",
-    "visione",
-    "vispo",
-    "vissuto",
-    "visura",
-    "vita",
-    "vitello",
-    "vittima",
-    "vivanda",
-    "vivido",
-    "viziare",
-    "voce",
-    "voga",
-    "volatile",
-    "volere",
-    "volpe",
-    "voragine",
-    "vulcano",
-    "zampogna",
-    "zanna",
-    "zappato",
-    "zattera",
-    "zavorra",
-    "zefiro",
-    "zelante",
-    "zelo",
-    "zenzero",
-    "zerbino",
-    "zibetto",
-    "zinco",
-    "zircone",
-    "zitto",
-    "zolla",
-    "zotico",
-    "zucchero",
-    "zufolo",
-    "zulu",
-    "zuppa"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/ja.rs b/networks/monero/wallet/polyseed/src/words/ja.rs
deleted file mode 100644
index 3c94572a..00000000
--- a/networks/monero/wallet/polyseed/src/words/ja.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "あいこくしん",
-    "あいさつ",
-    "あいだ",
-    "あおぞら",
-    "あかちゃん",
-    "あきる",
-    "あけがた",
-    "あける",
-    "あこがれる",
-    "あさい",
-    "あさひ",
-    "あしあと",
-    "あじわう",
-    "あずかる",
-    "あずき",
-    "あそぶ",
-    "あたえる",
-    "あたためる",
-    "あたりまえ",
-    "あたる",
-    "あっしゅく",
-    "あつい",
-    "あつかう",
-    "あつまり",
-    "あつめる",
-    "あてな",
-    "あてはまる",
-    "あひる",
-    "あふれる",
-    "あぶら",
-    "あぶる",
-    "あまい",
-    "あまど",
-    "あまやかす",
-    "あまり",
-    "あみもの",
-    "あめりか",
-    "あやまる",
-    "あゆむ",
-    "あらいぐま",
-    "あらし",
-    "あらすじ",
-    "あらためる",
-    "あらゆる",
-    "あらわす",
-    "ありがとう",
-    "あわせる",
-    "あわてる",
-    "あんい",
-    "あんがい",
-    "あんこ",
-    "あんぜん",
-    "あんてい",
-    "あんない",
-    "あんまり",
-    "いいだす",
-    "いおん",
-    "いがい",
-    "いがく",
-    "いきおい",
-    "いきなり",
-    "いきもの",
-    "いきる",
-    "いくじ",
-    "いくぶん",
-    "いけばな",
-    "いけん",
-    "いこう",
-    "いこく",
-    "いこつ",
-    "いさましい",
-    "いさん",
-    "いしき",
-    "いじゅう",
-    "いじょう",
-    "いじわる",
-    "いずみ",
-    "いずれ",
-    "いせい",
-    "いせえび",
-    "いせかい",
-    "いせき",
-    "いぜん",
-    "いそうろう",
-    "いそがしい",
-    "いたずら",
-    "いたみ",
-    "いたりあ",
-    "いだい",
-    "いだく",
-    "いちおう",
-    "いちじ",
-    "いちど",
-    "いちば",
-    "いちぶ",
-    "いちりゅう",
-    "いっしゅん",
-    "いっせい",
-    "いっそう",
-    "いったん",
-    "いっち",
-    "いってい",
-    "いっぽう",
-    "いつか",
-    "いてざ",
-    "いてん",
-    "いとこ",
-    "いどう",
-    "いない",
-    "いなか",
-    "いねむり",
-    "いのち",
-    "いのる",
-    "いはつ",
-    "いはん",
-    "いばる",
-    "いひん",
-    "いびき",
-    "いふく",
-    "いへん",
-    "いほう",
-    "いみん",
-    "いもうと",
-    "いもたれ",
-    "いもり",
-    "いやがる",
-    "いやす",
-    "いよかん",
-    "いよく",
-    "いらい",
-    "いらすと",
-    "いりぐち",
-    "いりょう",
-    "いれい",
-    "いれもの",
-    "いれる",
-    "いろえんぴつ",
-    "いわい",
-    "いわう",
-    "いわかん",
-    "いわば",
-    "いわゆる",
-    "いんげんまめ",
-    "いんさつ",
-    "いんしょう",
-    "いんよう",
-    "うえき",
-    "うえる",
-    "うおざ",
-    "うかぶ",
-    "うかべる",
-    "うがい",
-    "うきわ",
-    "うくらいな",
-    "うくれれ",
-    "うけたまわる",
-    "うけつけ",
-    "うけとる",
-    "うけもつ",
-    "うける",
-    "うこん",
-    "うごかす",
-    "うごく",
-    "うさぎ",
-    "うしなう",
-    "うしろがみ",
-    "うすい",
-    "うすぎ",
-    "うすぐらい",
-    "うすめる",
-    "うせつ",
-    "うちあわせ",
-    "うちがわ",
-    "うちき",
-    "うちゅう",
-    "うっかり",
-    "うったえる",
-    "うつくしい",
-    "うつる",
-    "うどん",
-    "うなぎ",
-    "うなじ",
-    "うなずく",
-    "うなる",
-    "うねる",
-    "うのう",
-    "うぶげ",
-    "うぶごえ",
-    "うまれる",
-    "うめる",
-    "うもう",
-    "うやまう",
-    "うよく",
-    "うらがえす",
-    "うらぐち",
-    "うらない",
-    "うりあげ",
-    "うりきれ",
-    "うるさい",
-    "うれしい",
-    "うれゆき",
-    "うれる",
-    "うろこ",
-    "うわき",
-    "うわさ",
-    "うんこう",
-    "うんちん",
-    "うんてん",
-    "うんどう",
-    "えいえん",
-    "えいが",
-    "えいきょう",
-    "えいご",
-    "えいせい",
-    "えいぶん",
-    "えいよう",
-    "えいわ",
-    "えおり",
-    "えがお",
-    "えがく",
-    "えきたい",
-    "えくせる",
-    "えしゃく",
-    "えすて",
-    "えつらん",
-    "えのぐ",
-    "えほうまき",
-    "えほん",
-    "えまき",
-    "えもじ",
-    "えもの",
-    "えらい",
-    "えらぶ",
-    "えりあ",
-    "えんえん",
-    "えんかい",
-    "えんぎ",
-    "えんげき",
-    "えんしゅう",
-    "えんぜつ",
-    "えんそく",
-    "えんちょう",
-    "えんとつ",
-    "おいかける",
-    "おいこす",
-    "おいしい",
-    "おいつく",
-    "おうえん",
-    "おうさま",
-    "おうじ",
-    "おうせつ",
-    "おうたい",
-    "おうふく",
-    "おうべい",
-    "おうよう",
-    "おえる",
-    "おおい",
-    "おおう",
-    "おおどおり",
-    "おおや",
-    "おおよそ",
-    "おかえり",
-    "おかず",
-    "おかわり",
-    "おがむ",
-    "おきる",
-    "おぎなう",
-    "おくさま",
-    "おくじょう",
-    "おくりがな",
-    "おくる",
-    "おくれる",
-    "おこす",
-    "おこなう",
-    "おこる",
-    "おさえる",
-    "おさない",
-    "おさめる",
-    "おしいれ",
-    "おしえる",
-    "おしゃれ",
-    "おじぎ",
-    "おじさん",
-    "おそらく",
-    "おそわる",
-    "おたがい",
-    "おたく",
-    "おだやか",
-    "おちつく",
-    "おっと",
-    "おつり",
-    "おでかけ",
-    "おとしもの",
-    "おとなしい",
-    "おどり",
-    "おどろかす",
-    "おばさん",
-    "おまいり",
-    "おめでとう",
-    "おもいで",
-    "おもう",
-    "おもたい",
-    "おもちゃ",
-    "おやつ",
-    "おやゆび",
-    "およぼす",
-    "おらんだ",
-    "おろす",
-    "おんがく",
-    "おんけい",
-    "おんしゃ",
-    "おんせん",
-    "おんだん",
-    "おんちゅう",
-    "おんどけい",
-    "かあつ",
-    "かいが",
-    "かいさつ",
-    "かいしゃ",
-    "かいすいよく",
-    "かいぜん",
-    "かいぞうど",
-    "かいつう",
-    "かいてん",
-    "かいとう",
-    "かいふく",
-    "かいほう",
-    "かいよう",
-    "かいわ",
-    "かえる",
-    "かおり",
-    "かかえる",
-    "かがく",
-    "かがし",
-    "かがみ",
-    "かくご",
-    "かくとく",
-    "かざる",
-    "かたい",
-    "かたち",
-    "かなざわし",
-    "かのう",
-    "かぶか",
-    "かほう",
-    "かほご",
-    "かまう",
-    "かまぼこ",
-    "かめれおん",
-    "かゆい",
-    "かようび",
-    "からい",
-    "かるい",
-    "かろう",
-    "かわく",
-    "かわら",
-    "かんけい",
-    "かんこう",
-    "かんしゃ",
-    "かんそう",
-    "かんたん",
-    "かんち",
-    "がいき",
-    "がいけん",
-    "がいこう",
-    "がいへき",
-    "がいらい",
-    "がぞう",
-    "がちょう",
-    "がっきゅう",
-    "がっこう",
-    "がっさん",
-    "がっしょう",
-    "がはく",
-    "がんか",
-    "がんばる",
-    "きあい",
-    "きあつ",
-    "きいろ",
-    "きうい",
-    "きうん",
-    "きえる",
-    "きおう",
-    "きおく",
-    "きおち",
-    "きおん",
-    "きかい",
-    "きかく",
-    "きかんしゃ",
-    "ききて",
-    "きくばり",
-    "きくらげ",
-    "きけんせい",
-    "きこう",
-    "きこえる",
-    "きこく",
-    "きさい",
-    "きさく",
-    "きさま",
-    "きさらぎ",
-    "きすう",
-    "きせい",
-    "きせき",
-    "きせつ",
-    "きそう",
-    "きぞく",
-    "きぞん",
-    "きたえる",
-    "きちょう",
-    "きつえん",
-    "きつつき",
-    "きつね",
-    "きてい",
-    "きどう",
-    "きどく",
-    "きない",
-    "きなが",
-    "きなこ",
-    "きぬごし",
-    "きねん",
-    "きのう",
-    "きのした",
-    "きはく",
-    "きひん",
-    "きびしい",
-    "きふく",
-    "きぶん",
-    "きほん",
-    "きぼう",
-    "きまる",
-    "きみつ",
-    "きむずかしい",
-    "きめる",
-    "きもだめし",
-    "きもち",
-    "きもの",
-    "きゃく",
-    "きやく",
-    "きょうりゅう",
-    "きよう",
-    "きらい",
-    "きらく",
-    "きりん",
-    "きれい",
-    "きれつ",
-    "きろく",
-    "きわめる",
-    "きんかくじ",
-    "きんじょ",
-    "きんようび",
-    "ぎいん",
-    "ぎしき",
-    "ぎじかがく",
-    "ぎじたいけん",
-    "ぎじにってい",
-    "ぎじゅつしゃ",
-    "ぎっちり",
-    "ぎゅうにく",
-    "ぎろん",
-    "ぎんいろ",
-    "くいず",
-    "くうかん",
-    "くうき",
-    "くうぐん",
-    "くうこう",
-    "くうそう",
-    "くうふく",
-    "くうぼ",
-    "くかん",
-    "くきょう",
-    "くげん",
-    "くさい",
-    "くさき",
-    "くさばな",
-    "くさる",
-    "くしゃみ",
-    "くしょう",
-    "くすのき",
-    "くすりゆび",
-    "くせげ",
-    "くせん",
-    "くたびれる",
-    "くださる",
-    "くちこみ",
-    "くちさき",
-    "くつした",
-    "くつろぐ",
-    "くとうてん",
-    "くどく",
-    "くなん",
-    "くねくね",
-    "くのう",
-    "くふう",
-    "くみあわせ",
-    "くみたてる",
-    "くめる",
-    "くやくしょ",
-    "くらす",
-    "くらべる",
-    "くるま",
-    "くれる",
-    "くろう",
-    "くわしい",
-    "ぐあい",
-    "ぐうせい",
-    "ぐうたら",
-    "ぐこう",
-    "ぐたいてき",
-    "ぐっすり",
-    "ぐんかん",
-    "ぐんしょく",
-    "ぐんたい",
-    "ぐんて",
-    "けあな",
-    "けいかく",
-    "けいけん",
-    "けいこ",
-    "けいさつ",
-    "けいたい",
-    "けいれき",
-    "けいろ",
-    "けおとす",
-    "けおりもの",
-    "けさき",
-    "けしき",
-    "けしごむ",
-    "けしょう",
-    "けたば",
-    "けちゃっぷ",
-    "けちらす",
-    "けっこん",
-    "けっせき",
-    "けってい",
-    "けつあつ",
-    "けつい",
-    "けつえき",
-    "けつじょ",
-    "けつまつ",
-    "けつろん",
-    "けとばす",
-    "けとる",
-    "けなげ",
-    "けなす",
-    "けなみ",
-    "けぬき",
-    "けねん",
-    "けはい",
-    "けぶかい",
-    "けまり",
-    "けみかる",
-    "けむし",
-    "けむり",
-    "けもの",
-    "けらい",
-    "けろけろ",
-    "けわしい",
-    "けんい",
-    "けんえつ",
-    "けんお",
-    "けんか",
-    "けんげん",
-    "けんこう",
-    "けんさく",
-    "けんしゅう",
-    "けんすう",
-    "けんちく",
-    "けんてい",
-    "けんとう",
-    "けんない",
-    "けんにん",
-    "けんま",
-    "けんみん",
-    "けんめい",
-    "けんらん",
-    "けんり",
-    "げいじゅつ",
-    "げいのうじん",
-    "げきか",
-    "げきげん",
-    "げきだん",
-    "げきちん",
-    "げきとつ",
-    "げきは",
-    "げきやく",
-    "げこう",
-    "げこくじょう",
-    "げざい",
-    "げざん",
-    "げすと",
-    "げつようび",
-    "げつれい",
-    "げどく",
-    "げねつ",
-    "げひん",
-    "げぼく",
-    "げんき",
-    "げんそう",
-    "げんぶつ",
-    "こあくま",
-    "こいぬ",
-    "こいびと",
-    "こうえん",
-    "こうおん",
-    "こうかん",
-    "こうこう",
-    "こうさい",
-    "こうじ",
-    "こうすい",
-    "こうそく",
-    "こうたい",
-    "こうちゃ",
-    "こうつう",
-    "こうてい",
-    "こうどう",
-    "こうない",
-    "こうはい",
-    "こうもく",
-    "こうりつ",
-    "こえる",
-    "こおり",
-    "こくご",
-    "こくさい",
-    "こくとう",
-    "こくない",
-    "こくはく",
-    "こぐま",
-    "こけい",
-    "こける",
-    "ここのか",
-    "こころ",
-    "こさめ",
-    "こしつ",
-    "こすう",
-    "こせい",
-    "こせき",
-    "こぜん",
-    "こそだて",
-    "こたい",
-    "こたえる",
-    "こたつ",
-    "こちょう",
-    "こっか",
-    "こつこつ",
-    "こつばん",
-    "こつぶ",
-    "こてい",
-    "こてん",
-    "ことがら",
-    "ことし",
-    "ことば",
-    "ことり",
-    "こなごな",
-    "こねこね",
-    "このまま",
-    "このみ",
-    "このよ",
-    "こひつじ",
-    "こふう",
-    "こふん",
-    "こぼれる",
-    "こまかい",
-    "こまつな",
-    "こまる",
-    "こむぎこ",
-    "こもじ",
-    "こもち",
-    "こもの",
-    "こもん",
-    "こやく",
-    "こやま",
-    "こゆう",
-    "こゆび",
-    "こよい",
-    "こよう",
-    "こりる",
-    "これくしょん",
-    "ころっけ",
-    "こわもて",
-    "こわれる",
-    "こんいん",
-    "こんかい",
-    "こんき",
-    "こんしゅう",
-    "こんすい",
-    "こんだて",
-    "こんとん",
-    "こんなん",
-    "こんびに",
-    "こんぽん",
-    "こんまけ",
-    "こんや",
-    "こんれい",
-    "こんわく",
-    "ごうい",
-    "ごうきゅう",
-    "ごうけい",
-    "ごうせい",
-    "ごうほう",
-    "ごうまん",
-    "ごかい",
-    "ごかん",
-    "ごがつ",
-    "ごはん",
-    "ごまあぶら",
-    "ごますり",
-    "さいかい",
-    "さいきん",
-    "さいしょ",
-    "さいせい",
-    "さいてき",
-    "さうな",
-    "さかいし",
-    "さかな",
-    "さかみち",
-    "さがす",
-    "さがる",
-    "さぎょう",
-    "さくし",
-    "さくひん",
-    "さくら",
-    "さこく",
-    "さこつ",
-    "さずかる",
-    "さたん",
-    "さっきょく",
-    "さつえい",
-    "さつじん",
-    "さつたば",
-    "さつまいも",
-    "さてい",
-    "さといも",
-    "さとう",
-    "さとおや",
-    "さとし",
-    "さとる",
-    "さのう",
-    "さばく",
-    "さびしい",
-    "さべつ",
-    "さほう",
-    "さほど",
-    "さます",
-    "さみしい",
-    "さみだれ",
-    "さむけ",
-    "さめる",
-    "さやえんどう",
-    "さゆう",
-    "さよう",
-    "さよく",
-    "さらだ",
-    "さわやか",
-    "さわる",
-    "さんいん",
-    "さんか",
-    "さんきゃく",
-    "さんこう",
-    "さんさい",
-    "さんすう",
-    "さんせい",
-    "さんそ",
-    "さんち",
-    "さんま",
-    "さんみ",
-    "さんらん",
-    "ざいえき",
-    "ざいげん",
-    "ざいこ",
-    "ざいたく",
-    "ざいちゅう",
-    "ざいりょう",
-    "ざせき",
-    "ざっか",
-    "ざっし",
-    "ざっそう",
-    "ざつおん",
-    "ざつがく",
-    "ざるそば",
-    "ざんしょ",
-    "しあい",
-    "しあげ",
-    "しあさって",
-    "しあわせ",
-    "しいく",
-    "しいん",
-    "しうち",
-    "しえい",
-    "しおけ",
-    "しかい",
-    "しかく",
-    "しごと",
-    "しすう",
-    "したうけ",
-    "したぎ",
-    "したて",
-    "したみ",
-    "しちょう",
-    "しちりん",
-    "しっかり",
-    "しつじ",
-    "しつもん",
-    "してい",
-    "してき",
-    "してつ",
-    "しなぎれ",
-    "しなもの",
-    "しなん",
-    "しねま",
-    "しねん",
-    "しのぐ",
-    "しのぶ",
-    "しはい",
-    "しはつ",
-    "しはらい",
-    "しはん",
-    "しばかり",
-    "しひょう",
-    "しふく",
-    "しへい",
-    "しほう",
-    "しほん",
-    "しまう",
-    "しまる",
-    "しみん",
-    "しむける",
-    "しめい",
-    "しめる",
-    "しもん",
-    "しゃいん",
-    "しゃうん",
-    "しゃおん",
-    "しゃくほう",
-    "しゃけん",
-    "しゃこ",
-    "しゃざい",
-    "しゃしん",
-    "しゃせん",
-    "しゃそう",
-    "しゃたい",
-    "しゃちょう",
-    "しゃっきん",
-    "しゃりん",
-    "しゃれい",
-    "しやくしょ",
-    "しゅくはく",
-    "しゅっせき",
-    "しゅみ",
-    "しゅらば",
-    "しょうかい",
-    "しょくたく",
-    "しょっけん",
-    "しょどう",
-    "しょもつ",
-    "しらせる",
-    "しらべる",
-    "しんか",
-    "しんこう",
-    "しんせいじ",
-    "しんちく",
-    "しんりん",
-    "じかん",
-    "じだい",
-    "じてん",
-    "じどう",
-    "じぶん",
-    "じむしょ",
-    "じゃがいも",
-    "じゃま",
-    "じゅうしょ",
-    "じゅしん",
-    "じゅんばん",
-    "じゆう",
-    "じんじゃ",
-    "すあげ",
-    "すあし",
-    "すあな",
-    "すいえい",
-    "すいか",
-    "すいとう",
-    "すいようび",
-    "すうがく",
-    "すうじつ",
-    "すうせん",
-    "すおどり",
-    "すきま",
-    "すくう",
-    "すくない",
-    "すける",
-    "すこし",
-    "すごい",
-    "すすむ",
-    "すすめる",
-    "すずしい",
-    "すっかり",
-    "すてき",
-    "すてる",
-    "すねる",
-    "すのこ",
-    "すはだ",
-    "すばらしい",
-    "すふれ",
-    "すぶり",
-    "すべて",
-    "すべる",
-    "すぼん",
-    "すまい",
-    "すめし",
-    "すもう",
-    "すやき",
-    "すらすら",
-    "するめ",
-    "すれちがう",
-    "すろっと",
-    "すわる",
-    "すんぜん",
-    "すんぽう",
-    "ずあん",
-    "ずいぶん",
-    "ずさん",
-    "ずっしり",
-    "ずっと",
-    "ずひょう",
-    "ずぶぬれ",
-    "ずほう",
-    "せあぶら",
-    "せいかつ",
-    "せいげん",
-    "せいじ",
-    "せいよう",
-    "せおう",
-    "せかいかん",
-    "せきにん",
-    "せきむ",
-    "せきゆ",
-    "せきらんうん",
-    "せけん",
-    "せこう",
-    "せすじ",
-    "せたい",
-    "せたけ",
-    "せっかく",
-    "せっきゃく",
-    "せっけん",
-    "せっこつ",
-    "せっさたくま",
-    "せっぱん",
-    "せつぞく",
-    "せつだん",
-    "せつでん",
-    "せつび",
-    "せつぶん",
-    "せつめい",
-    "せつりつ",
-    "せなか",
-    "せのび",
-    "せはば",
-    "せびろ",
-    "せぼね",
-    "せまい",
-    "せまる",
-    "せめる",
-    "せもたれ",
-    "せりふ",
-    "せんい",
-    "せんえい",
-    "せんか",
-    "せんきょ",
-    "せんく",
-    "せんげん",
-    "せんさい",
-    "せんしゅ",
-    "せんすい",
-    "せんせい",
-    "せんぞ",
-    "せんたく",
-    "せんちょう",
-    "せんてい",
-    "せんとう",
-    "せんぬき",
-    "せんねん",
-    "せんぱい",
-    "せんむ",
-    "せんめんじょ",
-    "せんもん",
-    "せんやく",
-    "せんゆう",
-    "せんよう",
-    "せんれい",
-    "せんろ",
-    "ぜっく",
-    "ぜんあく",
-    "ぜんご",
-    "ぜんぶ",
-    "ぜんぽう",
-    "ぜんら",
-    "ぜんりゃく",
-    "そあく",
-    "そいとげる",
-    "そいね",
-    "そうがんきょう",
-    "そうき",
-    "そうご",
-    "そうしん",
-    "そうだん",
-    "そうなん",
-    "そうび",
-    "そうめん",
-    "そうり",
-    "そえもの",
-    "そえん",
-    "そがい",
-    "そげき",
-    "そこう",
-    "そこそこ",
-    "そざい",
-    "そしな",
-    "そせい",
-    "そせん",
-    "そそぐ",
-    "そだてる",
-    "そっかん",
-    "そっけつ",
-    "そっこう",
-    "そっせん",
-    "そっと",
-    "そつう",
-    "そつえん",
-    "そつぎょう",
-    "そとがわ",
-    "そとづら",
-    "そなえる",
-    "そなた",
-    "そふぼ",
-    "そぼく",
-    "そぼろ",
-    "そまつ",
-    "そまる",
-    "そむく",
-    "そむりえ",
-    "そめる",
-    "そもそも",
-    "そよかぜ",
-    "そらまめ",
-    "そろう",
-    "そんかい",
-    "そんけい",
-    "そんざい",
-    "そんしつ",
-    "そんぞく",
-    "そんちょう",
-    "そんみん",
-    "ぞんび",
-    "ぞんぶん",
-    "たあい",
-    "たいいん",
-    "たいうん",
-    "たいえき",
-    "たいおう",
-    "たいき",
-    "たいぐう",
-    "たいけん",
-    "たいこ",
-    "たいざい",
-    "たいせつ",
-    "たいそう",
-    "たいちょう",
-    "たいてい",
-    "たいない",
-    "たいねつ",
-    "たいのう",
-    "たいはん",
-    "たいふう",
-    "たいへん",
-    "たいほ",
-    "たいまつばな",
-    "たいみんぐ",
-    "たいむ",
-    "たいめん",
-    "たいやき",
-    "たいよう",
-    "たいら",
-    "たいりょく",
-    "たいる",
-    "たいわん",
-    "たうえ",
-    "たえる",
-    "たおす",
-    "たおる",
-    "たおれる",
-    "たかい",
-    "たかね",
-    "たきび",
-    "たくさん",
-    "たこく",
-    "たこやき",
-    "たさい",
-    "たしざん",
-    "たすける",
-    "たずさわる",
-    "たそがれ",
-    "たたかう",
-    "たたく",
-    "たたみ",
-    "ただしい",
-    "たちばな",
-    "たてる",
-    "たとえる",
-    "たなばた",
-    "たにん",
-    "たぬき",
-    "たのしみ",
-    "たはつ",
-    "たぶん",
-    "たべる",
-    "たぼう",
-    "たまご",
-    "たまる",
-    "ためいき",
-    "ためす",
-    "ためる",
-    "たもつ",
-    "たやすい",
-    "たよる",
-    "たらす",
-    "たりきほんがん",
-    "たりょう",
-    "たりる",
-    "たると",
-    "たれる",
-    "たれんと",
-    "たろっと",
-    "たわむれる",
-    "たんい",
-    "たんおん",
-    "たんか",
-    "たんき",
-    "たんけん",
-    "たんご",
-    "たんさん",
-    "たんじょうび",
-    "たんそく",
-    "たんたい",
-    "たんてい",
-    "たんとう",
-    "たんにん",
-    "たんのう",
-    "たんぴん",
-    "たんまつ",
-    "たんめい",
-    "だいがく",
-    "だいじょうぶ",
-    "だいすき",
-    "だいたい",
-    "だいどころ",
-    "だいひょう",
-    "だじゃれ",
-    "だっかい",
-    "だっきゃく",
-    "だっこ",
-    "だっしゅつ",
-    "だったい",
-    "だむる",
-    "だんあつ",
-    "だんせい",
-    "だんち",
-    "だんな",
-    "だんねつ",
-    "だんぼう",
-    "だんれつ",
-    "だんろ",
-    "だんわ",
-    "ちあい",
-    "ちあん",
-    "ちいき",
-    "ちいさい",
-    "ちえん",
-    "ちかい",
-    "ちから",
-    "ちきゅう",
-    "ちきん",
-    "ちけいず",
-    "ちけん",
-    "ちこく",
-    "ちさい",
-    "ちしき",
-    "ちしりょう",
-    "ちせい",
-    "ちそう",
-    "ちたい",
-    "ちたん",
-    "ちちおや",
-    "ちつじょ",
-    "ちてき",
-    "ちてん",
-    "ちぬき",
-    "ちぬり",
-    "ちのう",
-    "ちひょう",
-    "ちへいせん",
-    "ちほう",
-    "ちまた",
-    "ちみつ",
-    "ちみどろ",
-    "ちめいど",
-    "ちゃんこなべ",
-    "ちゅうい",
-    "ちゆりょく",
-    "ちょうし",
-    "ちょさくけん",
-    "ちらし",
-    "ちらみ",
-    "ちりがみ",
-    "ちりょう",
-    "ちるど",
-    "ちわわ",
-    "ちんたい",
-    "ちんもく",
-    "ついか",
-    "ついたち",
-    "つうか",
-    "つうじょう",
-    "つうはん",
-    "つうわ",
-    "つかう",
-    "つかれる",
-    "つくね",
-    "つくる",
-    "つけね",
-    "つける",
-    "つごう",
-    "つたえる",
-    "つつじ",
-    "つつむ",
-    "つづく",
-    "つとめる",
-    "つながる",
-    "つなみ",
-    "つねづね",
-    "つのる",
-    "つぶす",
-    "つまらない",
-    "つまる",
-    "つみき",
-    "つめたい",
-    "つもり",
-    "つもる",
-    "つよい",
-    "つるぼ",
-    "つるみく",
-    "つわもの",
-    "つわり",
-    "てあし",
-    "てあて",
-    "てあみ",
-    "ていおん",
-    "ていか",
-    "ていき",
-    "ていけい",
-    "ていこく",
-    "ていさつ",
-    "ていし",
-    "ていせい",
-    "ていたい",
-    "ていど",
-    "ていねい",
-    "ていひょう",
-    "ていへん",
-    "ていぼう",
-    "てうち",
-    "ておくれ",
-    "てきとう",
-    "てくび",
-    "てさぎょう",
-    "てさげ",
-    "てすり",
-    "てそう",
-    "てちがい",
-    "てちょう",
-    "てつがく",
-    "てつづき",
-    "てつぼう",
-    "てつや",
-    "てぬき",
-    "てぬぐい",
-    "てのひら",
-    "てはい",
-    "てふだ",
-    "てぶくろ",
-    "てほどき",
-    "てほん",
-    "てまえ",
-    "てまきずし",
-    "てみじか",
-    "てみやげ",
-    "てらす",
-    "てれび",
-    "てわけ",
-    "てわたし",
-    "てんいん",
-    "てんかい",
-    "てんき",
-    "てんぐ",
-    "てんけん",
-    "てんごく",
-    "てんさい",
-    "てんし",
-    "てんすう",
-    "てんてき",
-    "てんとう",
-    "てんない",
-    "てんぷら",
-    "てんぼうだい",
-    "てんめつ",
-    "てんらんかい",
-    "でこぼこ",
-    "でっぱ",
-    "でぬかえ",
-    "でんあつ",
-    "でんち",
-    "でんりょく",
-    "でんわ",
-    "といれ",
-    "とうきゅう",
-    "とうし",
-    "とうむぎ",
-    "とおい",
-    "とおか",
-    "とおく",
-    "とおす",
-    "とおる",
-    "とかい",
-    "とかす",
-    "ときおり",
-    "ときどき",
-    "とくい",
-    "とくしゅう",
-    "とくてん",
-    "とくに",
-    "とくべつ",
-    "とけい",
-    "とける",
-    "とこや",
-    "とさか",
-    "としょかん",
-    "とそう",
-    "とたん",
-    "とちゅう",
-    "とっきゅう",
-    "とっくん",
-    "とつぜん",
-    "とつにゅう",
-    "ととのえる",
-    "とどける",
-    "とない",
-    "となえる",
-    "となり",
-    "とのさま",
-    "とばす",
-    "とほう",
-    "とまる",
-    "とめる",
-    "ともだち",
-    "ともる",
-    "とらえる",
-    "とんかつ",
-    "どあい",
-    "どうかん",
-    "どうぐ",
-    "どぶがわ",
-    "どようび",
-    "どんぶり",
-    "ないかく",
-    "ないこう",
-    "ないしょ",
-    "ないす",
-    "ないせん",
-    "ないそう",
-    "なおす",
-    "ながい",
-    "なくす",
-    "なげる",
-    "なこうど",
-    "なさけ",
-    "なたでここ",
-    "なっとう",
-    "なつやすみ",
-    "ななおし",
-    "なにごと",
-    "なにもの",
-    "なにわ",
-    "なのか",
-    "なふだ",
-    "なまいき",
-    "なまえ",
-    "なまみ",
-    "なみだ",
-    "なめらか",
-    "なめる",
-    "なやむ",
-    "ならう",
-    "ならび",
-    "ならぶ",
-    "なれる",
-    "なわとび",
-    "なわばり",
-    "にあう",
-    "にいがた",
-    "にうけ",
-    "におい",
-    "にかい",
-    "にがて",
-    "にきび",
-    "にくしみ",
-    "にくまん",
-    "にげる",
-    "にさんかたんそ",
-    "にしき",
-    "にせもの",
-    "にちじょう",
-    "にちようび",
-    "にっか",
-    "にっき",
-    "にっけい",
-    "にっこう",
-    "にっさん",
-    "にっしょく",
-    "にっすう",
-    "にっせき",
-    "にってい",
-    "になう",
-    "にほん",
-    "にまめ",
-    "にもつ",
-    "にやり",
-    "にゅういん",
-    "にりんしゃ",
-    "にわとり",
-    "にんい",
-    "にんか",
-    "にんき",
-    "にんげん",
-    "にんしき",
-    "にんずう",
-    "にんそう",
-    "にんたい",
-    "にんち",
-    "にんてい",
-    "にんにく",
-    "にんぷ",
-    "にんまり",
-    "にんむ",
-    "にんめい",
-    "にんよう",
-    "ぬいくぎ",
-    "ぬかす",
-    "ぬくもり",
-    "ぬぐいとる",
-    "ぬぐう",
-    "ぬすむ",
-    "ぬまえび",
-    "ぬめり",
-    "ぬらす",
-    "ぬんちゃく",
-    "ねあげ",
-    "ねいき",
-    "ねいる",
-    "ねいろ",
-    "ねくたい",
-    "ねくら",
-    "ねぐせ",
-    "ねこぜ",
-    "ねこむ",
-    "ねさげ",
-    "ねすごす",
-    "ねそべる",
-    "ねだん",
-    "ねっしん",
-    "ねったいぎょ",
-    "ねつい",
-    "ねつぞう",
-    "ねふだ",
-    "ねぶそく",
-    "ねほりはほり",
-    "ねぼう",
-    "ねまき",
-    "ねまわし",
-    "ねみみ",
-    "ねむい",
-    "ねむたい",
-    "ねもと",
-    "ねらう",
-    "ねわざ",
-    "ねんいり",
-    "ねんおし",
-    "ねんかん",
-    "ねんきん",
-    "ねんぐ",
-    "ねんざ",
-    "ねんし",
-    "ねんちゃく",
-    "ねんど",
-    "ねんぴ",
-    "ねんぶつ",
-    "ねんまつ",
-    "ねんりょう",
-    "ねんれい",
-    "のいず",
-    "のおづま",
-    "のがす",
-    "のきなみ",
-    "のこぎり",
-    "のこす",
-    "のこる",
-    "のせる",
-    "のぞく",
-    "のぞむ",
-    "のたまう",
-    "のちほど",
-    "のっく",
-    "のはら",
-    "のばす",
-    "のべる",
-    "のぼる",
-    "のみもの",
-    "のやま",
-    "のらいぬ",
-    "のらねこ",
-    "のりもの",
-    "のりゆき",
-    "のれん",
-    "のんき",
-    "はあく",
-    "はいけん",
-    "はいご",
-    "はいしん",
-    "はいすい",
-    "はいせん",
-    "はいそう",
-    "はいち",
-    "はいれつ",
-    "はえる",
-    "はおる",
-    "はかい",
-    "はかる",
-    "はくしゅ",
-    "はけん",
-    "はこぶ",
-    "はさみ",
-    "はさん",
-    "はしご",
-    "はしる",
-    "はせる",
-    "はそん",
-    "はたん",
-    "はちみつ",
-    "はっかく",
-    "はっきり",
-    "はっくつ",
-    "はっけん",
-    "はっこう",
-    "はっさん",
-    "はっしん",
-    "はったつ",
-    "はっちゅう",
-    "はってん",
-    "はっぴょう",
-    "はっぽう",
-    "はつおん",
-    "はづき",
-    "はなす",
-    "はなび",
-    "はにかむ",
-    "はぶらし",
-    "はみがき",
-    "はむかう",
-    "はめつ",
-    "はやい",
-    "はやし",
-    "はらう",
-    "はろうぃん",
-    "はわい",
-    "はんい",
-    "はんえい",
-    "はんおん",
-    "はんかく",
-    "はんきょう",
-    "はんこ",
-    "はんしゃ",
-    "はんすう",
-    "はんだん",
-    "はんてい",
-    "はんとし",
-    "はんのう",
-    "はんぱ",
-    "はんぶん",
-    "はんぺん",
-    "はんぼうき",
-    "はんめい",
-    "はんらん",
-    "はんろん",
-    "ばあい",
-    "ばあさん",
-    "ばいか",
-    "ばいく",
-    "ばいばい",
-    "ばかり",
-    "ばしょ",
-    "ばんぐみ",
-    "ぱそこん",
-    "ぱんち",
-    "ぱんつ",
-    "ひいき",
-    "ひうん",
-    "ひえる",
-    "ひかく",
-    "ひかり",
-    "ひかる",
-    "ひかん",
-    "ひくい",
-    "ひけつ",
-    "ひこうき",
-    "ひこく",
-    "ひさい",
-    "ひさしぶり",
-    "ひさん",
-    "ひしょ",
-    "ひそか",
-    "ひそむ",
-    "ひたむき",
-    "ひたる",
-    "ひだり",
-    "ひっこし",
-    "ひっし",
-    "ひっす",
-    "ひつぎ",
-    "ひつじゅひん",
-    "ひつぜん",
-    "ひつよう",
-    "ひてい",
-    "ひとごみ",
-    "ひなまつり",
-    "ひなん",
-    "ひねる",
-    "ひはん",
-    "ひひょう",
-    "ひびく",
-    "ひほう",
-    "ひまわり",
-    "ひまん",
-    "ひみつ",
-    "ひめい",
-    "ひめじし",
-    "ひやけ",
-    "ひやす",
-    "ひよう",
-    "ひらがな",
-    "ひらく",
-    "ひりつ",
-    "ひりょう",
-    "ひるま",
-    "ひるやすみ",
-    "ひれい",
-    "ひろい",
-    "ひろう",
-    "ひろき",
-    "ひろゆき",
-    "ひんかく",
-    "ひんけつ",
-    "ひんこん",
-    "ひんしゅ",
-    "ひんそう",
-    "ひんぱん",
-    "びじゅつかん",
-    "びょうき",
-    "びんぼう",
-    "ぴったり",
-    "ぴっちり",
-    "ぴんち",
-    "ふあん",
-    "ふいうち",
-    "ふうけい",
-    "ふうせん",
-    "ふうとう",
-    "ふうふ",
-    "ふえる",
-    "ふおん",
-    "ふかい",
-    "ふきん",
-    "ふくざつ",
-    "ふくぶくろ",
-    "ふこう",
-    "ふさい",
-    "ふしぎ",
-    "ふじみ",
-    "ふすま",
-    "ふせい",
-    "ふせぐ",
-    "ふそく",
-    "ふたん",
-    "ふちょう",
-    "ふっかつ",
-    "ふっき",
-    "ふっこく",
-    "ふつう",
-    "ふつか",
-    "ふとる",
-    "ふとん",
-    "ふのう",
-    "ふはい",
-    "ふひょう",
-    "ふへん",
-    "ふまん",
-    "ふみん",
-    "ふめつ",
-    "ふめん",
-    "ふよう",
-    "ふりこ",
-    "ふりる",
-    "ふるい",
-    "ふんいき",
-    "ふんしつ",
-    "ふんそう",
-    "ぶたにく",
-    "ぶどう",
-    "ぶんがく",
-    "ぶんぐ",
-    "ぶんせき",
-    "ぶんぽう",
-    "ぷうたろう",
-    "へいあん",
-    "へいおん",
-    "へいがい",
-    "へいき",
-    "へいげん",
-    "へいこう",
-    "へいさ",
-    "へいしゃ",
-    "へいせつ",
-    "へいそ",
-    "へいたく",
-    "へいてん",
-    "へいねつ",
-    "へいわ",
-    "へきが",
-    "へこむ",
-    "へらす",
-    "へんかん",
-    "へんさい",
-    "へんたい",
-    "べにいろ",
-    "べにしょうが",
-    "べんきょう",
-    "べんごし",
-    "べんり",
-    "ほあん",
-    "ほいく",
-    "ほうこく",
-    "ほうそう",
-    "ほうほう",
-    "ほうもん",
-    "ほうりつ",
-    "ほえる",
-    "ほおん",
-    "ほかん",
-    "ほきょう",
-    "ほくろ",
-    "ほけつ",
-    "ほけん",
-    "ほこう",
-    "ほこる",
-    "ほしい",
-    "ほしつ",
-    "ほしゅ",
-    "ほしょう",
-    "ほせい",
-    "ほそい",
-    "ほそく",
-    "ほたて",
-    "ほたる",
-    "ほっきょく",
-    "ほっさ",
-    "ほったん",
-    "ほとんど",
-    "ほめる",
-    "ほんい",
-    "ほんき",
-    "ほんけ",
-    "ほんしつ",
-    "ほんやく",
-    "ぼうぎょ",
-    "ぼきん",
-    "ぽちぶくろ",
-    "まいにち",
-    "まかい",
-    "まかせる",
-    "まがる",
-    "まける",
-    "まこと",
-    "まさつ",
-    "まじめ",
-    "ますく",
-    "まぜる",
-    "まつり",
-    "まとめ",
-    "まなぶ",
-    "まぬけ",
-    "まねく",
-    "まほう",
-    "まもる",
-    "まゆげ",
-    "まよう",
-    "まろやか",
-    "まわす",
-    "まわり",
-    "まわる",
-    "まんが",
-    "まんきつ",
-    "まんぞく",
-    "まんなか",
-    "みいら",
-    "みうち",
-    "みえる",
-    "みかた",
-    "みかん",
-    "みがく",
-    "みけん",
-    "みこん",
-    "みじかい",
-    "みすい",
-    "みすえる",
-    "みせる",
-    "みっか",
-    "みつかる",
-    "みつける",
-    "みてい",
-    "みとめる",
-    "みなと",
-    "みなみかさい",
-    "みねらる",
-    "みのう",
-    "みのがす",
-    "みほん",
-    "みもと",
-    "みやげ",
-    "みらい",
-    "みりょく",
-    "みわく",
-    "みんか",
-    "みんぞく",
-    "むいか",
-    "むえき",
-    "むえん",
-    "むかい",
-    "むかう",
-    "むかえ",
-    "むかし",
-    "むぎちゃ",
-    "むける",
-    "むげん",
-    "むさぼる",
-    "むしあつい",
-    "むしば",
-    "むしろ",
-    "むじゅん",
-    "むすう",
-    "むすこ",
-    "むすぶ",
-    "むすめ",
-    "むせる",
-    "むせん",
-    "むちゅう",
-    "むなしい",
-    "むのう",
-    "むやみ",
-    "むよう",
-    "むらさき",
-    "むりょう",
-    "むろん",
-    "めいあん",
-    "めいうん",
-    "めいえん",
-    "めいかく",
-    "めいきょく",
-    "めいさい",
-    "めいし",
-    "めいそう",
-    "めいぶつ",
-    "めいれい",
-    "めいわく",
-    "めぐまれる",
-    "めざす",
-    "めした",
-    "めずらしい",
-    "めだつ",
-    "めまい",
-    "めやす",
-    "めんきょ",
-    "めんせき",
-    "めんどう",
-    "もうしあげる",
-    "もうどうけん",
-    "もえる",
-    "もくし",
-    "もくてき",
-    "もくようび",
-    "もちろん",
-    "もどる",
-    "もらう",
-    "もんく",
-    "もんだい",
-    "やおや",
-    "やける",
-    "やさい",
-    "やさしい",
-    "やすい",
-    "やすたろう",
-    "やすみ",
-    "やせる",
-    "やそう",
-    "やたい",
-    "やちん",
-    "やっと",
-    "やっぱり",
-    "やぶる",
-    "やめる",
-    "ややこしい",
-    "やよい",
-    "やわらかい",
-    "ゆうき",
-    "ゆうびんきょく",
-    "ゆうべ",
-    "ゆうめい",
-    "ゆけつ",
-    "ゆしゅつ",
-    "ゆせん",
-    "ゆそう",
-    "ゆたか",
-    "ゆちゃく",
-    "ゆでる",
-    "ゆにゅう",
-    "ゆびわ",
-    "ゆらい",
-    "ゆれる",
-    "ようい",
-    "ようか",
-    "ようきゅう",
-    "ようじ",
-    "ようす",
-    "ようちえん",
-    "よかぜ",
-    "よかん",
-    "よきん",
-    "よくせい",
-    "よくぼう",
-    "よけい",
-    "よごれる",
-    "よさん",
-    "よしゅう",
-    "よそう",
-    "よそく",
-    "よっか",
-    "よてい",
-    "よどがわく",
-    "よねつ",
-    "よやく",
-    "よゆう",
-    "よろこぶ",
-    "よろしい",
-    "らいう",
-    "らくがき",
-    "らくご",
-    "らくさつ",
-    "らくだ",
-    "らしんばん",
-    "らせん",
-    "らぞく",
-    "らたい",
-    "らっか",
-    "られつ",
-    "りえき",
-    "りかい",
-    "りきさく",
-    "りきせつ",
-    "りくぐん",
-    "りくつ",
-    "りけん",
-    "りこう",
-    "りせい",
-    "りそう",
-    "りそく",
-    "りてん",
-    "りねん",
-    "りゅうがく",
-    "りゆう",
-    "りょうり",
-    "りょかん",
-    "りょくちゃ",
-    "りょこう",
-    "りよう",
-    "りりく",
-    "りれき",
-    "りろん",
-    "りんご",
-    "るいけい",
-    "るいさい",
-    "るいじ",
-    "るいせき",
-    "るすばん",
-    "るりがわら",
-    "れいかん",
-    "れいぎ",
-    "れいせい",
-    "れいぞうこ",
-    "れいとう",
-    "れいぼう",
-    "れきし",
-    "れきだい",
-    "れんあい",
-    "れんけい",
-    "れんこん",
-    "れんさい",
-    "れんしゅう",
-    "れんぞく",
-    "れんらく",
-    "ろうか",
-    "ろうご",
-    "ろうじん",
-    "ろうそく",
-    "ろくが",
-    "ろこつ",
-    "ろしゅつ",
-    "ろじうら",
-    "ろせん",
-    "ろてん",
-    "ろめん",
-    "ろれつ",
-    "ろんぎ",
-    "ろんぱ",
-    "ろんぶん",
-    "ろんり",
-    "わかす",
-    "わかめ",
-    "わかやま",
-    "わかれる",
-    "わしつ",
-    "わじまし",
-    "わすれもの",
-    "わらう",
-    "われる"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/ko.rs b/networks/monero/wallet/polyseed/src/words/ko.rs
deleted file mode 100644
index a41902f5..00000000
--- a/networks/monero/wallet/polyseed/src/words/ko.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "가격",
-    "가끔",
-    "가난",
-    "가능",
-    "가득",
-    "가르침",
-    "가뭄",
-    "가방",
-    "가상",
-    "가슴",
-    "가운데",
-    "가을",
-    "가이드",
-    "가입",
-    "가장",
-    "가정",
-    "가족",
-    "가죽",
-    "각오",
-    "각자",
-    "간격",
-    "간부",
-    "간섭",
-    "간장",
-    "간접",
-    "간판",
-    "갈등",
-    "갈비",
-    "갈색",
-    "갈증",
-    "감각",
-    "감기",
-    "감소",
-    "감수성",
-    "감자",
-    "감정",
-    "갑자기",
-    "강남",
-    "강당",
-    "강도",
-    "강력히",
-    "강변",
-    "강북",
-    "강사",
-    "강수량",
-    "강아지",
-    "강원도",
-    "강의",
-    "강제",
-    "강조",
-    "같이",
-    "개구리",
-    "개나리",
-    "개방",
-    "개별",
-    "개선",
-    "개성",
-    "개인",
-    "객관적",
-    "거실",
-    "거액",
-    "거울",
-    "거짓",
-    "거품",
-    "걱정",
-    "건강",
-    "건물",
-    "건설",
-    "건조",
-    "건축",
-    "걸음",
-    "검사",
-    "검토",
-    "게시판",
-    "게임",
-    "겨울",
-    "견해",
-    "결과",
-    "결국",
-    "결론",
-    "결석",
-    "결승",
-    "결심",
-    "결정",
-    "결혼",
-    "경계",
-    "경고",
-    "경기",
-    "경력",
-    "경복궁",
-    "경비",
-    "경상도",
-    "경영",
-    "경우",
-    "경쟁",
-    "경제",
-    "경주",
-    "경찰",
-    "경치",
-    "경향",
-    "경험",
-    "계곡",
-    "계단",
-    "계란",
-    "계산",
-    "계속",
-    "계약",
-    "계절",
-    "계층",
-    "계획",
-    "고객",
-    "고구려",
-    "고궁",
-    "고급",
-    "고등학생",
-    "고무신",
-    "고민",
-    "고양이",
-    "고장",
-    "고전",
-    "고집",
-    "고춧가루",
-    "고통",
-    "고향",
-    "곡식",
-    "골목",
-    "골짜기",
-    "골프",
-    "공간",
-    "공개",
-    "공격",
-    "공군",
-    "공급",
-    "공기",
-    "공동",
-    "공무원",
-    "공부",
-    "공사",
-    "공식",
-    "공업",
-    "공연",
-    "공원",
-    "공장",
-    "공짜",
-    "공책",
-    "공통",
-    "공포",
-    "공항",
-    "공휴일",
-    "과목",
-    "과일",
-    "과장",
-    "과정",
-    "과학",
-    "관객",
-    "관계",
-    "관광",
-    "관념",
-    "관람",
-    "관련",
-    "관리",
-    "관습",
-    "관심",
-    "관점",
-    "관찰",
-    "광경",
-    "광고",
-    "광장",
-    "광주",
-    "괴로움",
-    "굉장히",
-    "교과서",
-    "교문",
-    "교복",
-    "교실",
-    "교양",
-    "교육",
-    "교장",
-    "교직",
-    "교통",
-    "교환",
-    "교훈",
-    "구경",
-    "구름",
-    "구멍",
-    "구별",
-    "구분",
-    "구석",
-    "구성",
-    "구속",
-    "구역",
-    "구입",
-    "구청",
-    "구체적",
-    "국가",
-    "국기",
-    "국내",
-    "국립",
-    "국물",
-    "국민",
-    "국수",
-    "국어",
-    "국왕",
-    "국적",
-    "국제",
-    "국회",
-    "군대",
-    "군사",
-    "군인",
-    "궁극적",
-    "권리",
-    "권위",
-    "권투",
-    "귀국",
-    "귀신",
-    "규정",
-    "규칙",
-    "균형",
-    "그날",
-    "그냥",
-    "그늘",
-    "그러나",
-    "그룹",
-    "그릇",
-    "그림",
-    "그제서야",
-    "그토록",
-    "극복",
-    "극히",
-    "근거",
-    "근교",
-    "근래",
-    "근로",
-    "근무",
-    "근본",
-    "근원",
-    "근육",
-    "근처",
-    "글씨",
-    "글자",
-    "금강산",
-    "금고",
-    "금년",
-    "금메달",
-    "금액",
-    "금연",
-    "금요일",
-    "금지",
-    "긍정적",
-    "기간",
-    "기관",
-    "기념",
-    "기능",
-    "기독교",
-    "기둥",
-    "기록",
-    "기름",
-    "기법",
-    "기본",
-    "기분",
-    "기쁨",
-    "기숙사",
-    "기술",
-    "기억",
-    "기업",
-    "기온",
-    "기운",
-    "기원",
-    "기적",
-    "기준",
-    "기침",
-    "기혼",
-    "기획",
-    "긴급",
-    "긴장",
-    "길이",
-    "김밥",
-    "김치",
-    "김포공항",
-    "깍두기",
-    "깜빡",
-    "깨달음",
-    "깨소금",
-    "껍질",
-    "꼭대기",
-    "꽃잎",
-    "나들이",
-    "나란히",
-    "나머지",
-    "나물",
-    "나침반",
-    "나흘",
-    "낙엽",
-    "난방",
-    "날개",
-    "날씨",
-    "날짜",
-    "남녀",
-    "남대문",
-    "남매",
-    "남산",
-    "남자",
-    "남편",
-    "남학생",
-    "낭비",
-    "낱말",
-    "내년",
-    "내용",
-    "내일",
-    "냄비",
-    "냄새",
-    "냇물",
-    "냉동",
-    "냉면",
-    "냉방",
-    "냉장고",
-    "넥타이",
-    "넷째",
-    "노동",
-    "노란색",
-    "노력",
-    "노인",
-    "녹음",
-    "녹차",
-    "녹화",
-    "논리",
-    "논문",
-    "논쟁",
-    "놀이",
-    "농구",
-    "농담",
-    "농민",
-    "농부",
-    "농업",
-    "농장",
-    "농촌",
-    "높이",
-    "눈동자",
-    "눈물",
-    "눈썹",
-    "뉴욕",
-    "느낌",
-    "늑대",
-    "능동적",
-    "능력",
-    "다방",
-    "다양성",
-    "다음",
-    "다이어트",
-    "다행",
-    "단계",
-    "단골",
-    "단독",
-    "단맛",
-    "단순",
-    "단어",
-    "단위",
-    "단점",
-    "단체",
-    "단추",
-    "단편",
-    "단풍",
-    "달걀",
-    "달러",
-    "달력",
-    "달리",
-    "닭고기",
-    "담당",
-    "담배",
-    "담요",
-    "담임",
-    "답변",
-    "답장",
-    "당근",
-    "당분간",
-    "당연히",
-    "당장",
-    "대규모",
-    "대낮",
-    "대단히",
-    "대답",
-    "대도시",
-    "대략",
-    "대량",
-    "대륙",
-    "대문",
-    "대부분",
-    "대신",
-    "대응",
-    "대장",
-    "대전",
-    "대접",
-    "대중",
-    "대책",
-    "대출",
-    "대충",
-    "대통령",
-    "대학",
-    "대한민국",
-    "대합실",
-    "대형",
-    "덩어리",
-    "데이트",
-    "도대체",
-    "도덕",
-    "도둑",
-    "도망",
-    "도서관",
-    "도심",
-    "도움",
-    "도입",
-    "도자기",
-    "도저히",
-    "도전",
-    "도중",
-    "도착",
-    "독감",
-    "독립",
-    "독서",
-    "독일",
-    "독창적",
-    "동화책",
-    "뒷모습",
-    "뒷산",
-    "딸아이",
-    "마누라",
-    "마늘",
-    "마당",
-    "마라톤",
-    "마련",
-    "마무리",
-    "마사지",
-    "마약",
-    "마요네즈",
-    "마을",
-    "마음",
-    "마이크",
-    "마중",
-    "마지막",
-    "마찬가지",
-    "마찰",
-    "마흔",
-    "막걸리",
-    "막내",
-    "막상",
-    "만남",
-    "만두",
-    "만세",
-    "만약",
-    "만일",
-    "만점",
-    "만족",
-    "만화",
-    "많이",
-    "말기",
-    "말씀",
-    "말투",
-    "맘대로",
-    "망원경",
-    "매년",
-    "매달",
-    "매력",
-    "매번",
-    "매스컴",
-    "매일",
-    "매장",
-    "맥주",
-    "먹이",
-    "먼저",
-    "먼지",
-    "멀리",
-    "메일",
-    "며느리",
-    "며칠",
-    "면담",
-    "멸치",
-    "명단",
-    "명령",
-    "명예",
-    "명의",
-    "명절",
-    "명칭",
-    "명함",
-    "모금",
-    "모니터",
-    "모델",
-    "모든",
-    "모범",
-    "모습",
-    "모양",
-    "모임",
-    "모조리",
-    "모집",
-    "모퉁이",
-    "목걸이",
-    "목록",
-    "목사",
-    "목소리",
-    "목숨",
-    "목적",
-    "목표",
-    "몰래",
-    "몸매",
-    "몸무게",
-    "몸살",
-    "몸속",
-    "몸짓",
-    "몸통",
-    "몹시",
-    "무관심",
-    "무궁화",
-    "무더위",
-    "무덤",
-    "무릎",
-    "무슨",
-    "무엇",
-    "무역",
-    "무용",
-    "무조건",
-    "무지개",
-    "무척",
-    "문구",
-    "문득",
-    "문법",
-    "문서",
-    "문제",
-    "문학",
-    "문화",
-    "물가",
-    "물건",
-    "물결",
-    "물고기",
-    "물론",
-    "물리학",
-    "물음",
-    "물질",
-    "물체",
-    "미국",
-    "미디어",
-    "미사일",
-    "미술",
-    "미역",
-    "미용실",
-    "미움",
-    "미인",
-    "미팅",
-    "미혼",
-    "민간",
-    "민족",
-    "민주",
-    "믿음",
-    "밀가루",
-    "밀리미터",
-    "밑바닥",
-    "바가지",
-    "바구니",
-    "바나나",
-    "바늘",
-    "바닥",
-    "바닷가",
-    "바람",
-    "바이러스",
-    "바탕",
-    "박물관",
-    "박사",
-    "박수",
-    "반대",
-    "반드시",
-    "반말",
-    "반발",
-    "반성",
-    "반응",
-    "반장",
-    "반죽",
-    "반지",
-    "반찬",
-    "받침",
-    "발가락",
-    "발걸음",
-    "발견",
-    "발달",
-    "발레",
-    "발목",
-    "발바닥",
-    "발생",
-    "발음",
-    "발자국",
-    "발전",
-    "발톱",
-    "발표",
-    "밤하늘",
-    "밥그릇",
-    "밥맛",
-    "밥상",
-    "밥솥",
-    "방금",
-    "방면",
-    "방문",
-    "방바닥",
-    "방법",
-    "방송",
-    "방식",
-    "방안",
-    "방울",
-    "방지",
-    "방학",
-    "방해",
-    "방향",
-    "배경",
-    "배꼽",
-    "배달",
-    "배드민턴",
-    "백두산",
-    "백색",
-    "백성",
-    "백인",
-    "백제",
-    "백화점",
-    "버릇",
-    "버섯",
-    "버튼",
-    "번개",
-    "번역",
-    "번지",
-    "번호",
-    "벌금",
-    "벌레",
-    "벌써",
-    "범위",
-    "범인",
-    "범죄",
-    "법률",
-    "법원",
-    "법적",
-    "법칙",
-    "베이징",
-    "벨트",
-    "변경",
-    "변동",
-    "변명",
-    "변신",
-    "변호사",
-    "변화",
-    "별도",
-    "별명",
-    "별일",
-    "병실",
-    "병아리",
-    "병원",
-    "보관",
-    "보너스",
-    "보라색",
-    "보람",
-    "보름",
-    "보상",
-    "보안",
-    "보자기",
-    "보장",
-    "보전",
-    "보존",
-    "보통",
-    "보편적",
-    "보험",
-    "복도",
-    "복사",
-    "복숭아",
-    "복습",
-    "볶음",
-    "본격적",
-    "본래",
-    "본부",
-    "본사",
-    "본성",
-    "본인",
-    "본질",
-    "볼펜",
-    "봉사",
-    "봉지",
-    "봉투",
-    "부근",
-    "부끄러움",
-    "부담",
-    "부동산",
-    "부문",
-    "부분",
-    "부산",
-    "부상",
-    "부엌",
-    "부인",
-    "부작용",
-    "부장",
-    "부정",
-    "부족",
-    "부지런히",
-    "부친",
-    "부탁",
-    "부품",
-    "부회장",
-    "북부",
-    "북한",
-    "분노",
-    "분량",
-    "분리",
-    "분명",
-    "분석",
-    "분야",
-    "분위기",
-    "분필",
-    "분홍색",
-    "불고기",
-    "불과",
-    "불교",
-    "불꽃",
-    "불만",
-    "불법",
-    "불빛",
-    "불안",
-    "불이익",
-    "불행",
-    "브랜드",
-    "비극",
-    "비난",
-    "비닐",
-    "비둘기",
-    "비디오",
-    "비로소",
-    "비만",
-    "비명",
-    "비밀",
-    "비바람",
-    "비빔밥",
-    "비상",
-    "비용",
-    "비율",
-    "비중",
-    "비타민",
-    "비판",
-    "빌딩",
-    "빗물",
-    "빗방울",
-    "빗줄기",
-    "빛깔",
-    "빨간색",
-    "빨래",
-    "빨리",
-    "사건",
-    "사계절",
-    "사나이",
-    "사냥",
-    "사람",
-    "사랑",
-    "사립",
-    "사모님",
-    "사물",
-    "사방",
-    "사상",
-    "사생활",
-    "사설",
-    "사슴",
-    "사실",
-    "사업",
-    "사용",
-    "사월",
-    "사장",
-    "사전",
-    "사진",
-    "사촌",
-    "사춘기",
-    "사탕",
-    "사투리",
-    "사흘",
-    "산길",
-    "산부인과",
-    "산업",
-    "산책",
-    "살림",
-    "살인",
-    "살짝",
-    "삼계탕",
-    "삼국",
-    "삼십",
-    "삼월",
-    "삼촌",
-    "상관",
-    "상금",
-    "상대",
-    "상류",
-    "상반기",
-    "상상",
-    "상식",
-    "상업",
-    "상인",
-    "상자",
-    "상점",
-    "상처",
-    "상추",
-    "상태",
-    "상표",
-    "상품",
-    "상황",
-    "새벽",
-    "색깔",
-    "색연필",
-    "생각",
-    "생명",
-    "생물",
-    "생방송",
-    "생산",
-    "생선",
-    "생신",
-    "생일",
-    "생활",
-    "서랍",
-    "서른",
-    "서명",
-    "서민",
-    "서비스",
-    "서양",
-    "서울",
-    "서적",
-    "서점",
-    "서쪽",
-    "서클",
-    "석사",
-    "석유",
-    "선거",
-    "선물",
-    "선배",
-    "선생",
-    "선수",
-    "선원",
-    "선장",
-    "선전",
-    "선택",
-    "선풍기",
-    "설거지",
-    "설날",
-    "설렁탕",
-    "설명",
-    "설문",
-    "설사",
-    "설악산",
-    "설치",
-    "설탕",
-    "섭씨",
-    "성공",
-    "성당",
-    "성명",
-    "성별",
-    "성인",
-    "성장",
-    "성적",
-    "성질",
-    "성함",
-    "세금",
-    "세미나",
-    "세상",
-    "세월",
-    "세종대왕",
-    "세탁",
-    "센터",
-    "센티미터",
-    "셋째",
-    "소규모",
-    "소극적",
-    "소금",
-    "소나기",
-    "소년",
-    "소득",
-    "소망",
-    "소문",
-    "소설",
-    "소속",
-    "소아과",
-    "소용",
-    "소원",
-    "소음",
-    "소중히",
-    "소지품",
-    "소질",
-    "소풍",
-    "소형",
-    "속담",
-    "속도",
-    "속옷",
-    "손가락",
-    "손길",
-    "손녀",
-    "손님",
-    "손등",
-    "손목",
-    "손뼉",
-    "손실",
-    "손질",
-    "손톱",
-    "손해",
-    "솔직히",
-    "솜씨",
-    "송아지",
-    "송이",
-    "송편",
-    "쇠고기",
-    "쇼핑",
-    "수건",
-    "수년",
-    "수단",
-    "수돗물",
-    "수동적",
-    "수면",
-    "수명",
-    "수박",
-    "수상",
-    "수석",
-    "수술",
-    "수시로",
-    "수업",
-    "수염",
-    "수영",
-    "수입",
-    "수준",
-    "수집",
-    "수출",
-    "수컷",
-    "수필",
-    "수학",
-    "수험생",
-    "수화기",
-    "숙녀",
-    "숙소",
-    "숙제",
-    "순간",
-    "순서",
-    "순수",
-    "순식간",
-    "순위",
-    "숟가락",
-    "술병",
-    "술집",
-    "숫자",
-    "스님",
-    "스물",
-    "스스로",
-    "스승",
-    "스웨터",
-    "스위치",
-    "스케이트",
-    "스튜디오",
-    "스트레스",
-    "스포츠",
-    "슬쩍",
-    "슬픔",
-    "습관",
-    "습기",
-    "승객",
-    "승리",
-    "승부",
-    "승용차",
-    "승진",
-    "시각",
-    "시간",
-    "시골",
-    "시금치",
-    "시나리오",
-    "시댁",
-    "시리즈",
-    "시멘트",
-    "시민",
-    "시부모",
-    "시선",
-    "시설",
-    "시스템",
-    "시아버지",
-    "시어머니",
-    "시월",
-    "시인",
-    "시일",
-    "시작",
-    "시장",
-    "시절",
-    "시점",
-    "시중",
-    "시즌",
-    "시집",
-    "시청",
-    "시합",
-    "시험",
-    "식구",
-    "식기",
-    "식당",
-    "식량",
-    "식료품",
-    "식물",
-    "식빵",
-    "식사",
-    "식생활",
-    "식초",
-    "식탁",
-    "식품",
-    "신고",
-    "신규",
-    "신념",
-    "신문",
-    "신발",
-    "신비",
-    "신사",
-    "신세",
-    "신용",
-    "신제품",
-    "신청",
-    "신체",
-    "신화",
-    "실감",
-    "실내",
-    "실력",
-    "실례",
-    "실망",
-    "실수",
-    "실습",
-    "실시",
-    "실장",
-    "실정",
-    "실질적",
-    "실천",
-    "실체",
-    "실컷",
-    "실태",
-    "실패",
-    "실험",
-    "실현",
-    "심리",
-    "심부름",
-    "심사",
-    "심장",
-    "심정",
-    "심판",
-    "쌍둥이",
-    "씨름",
-    "씨앗",
-    "아가씨",
-    "아나운서",
-    "아드님",
-    "아들",
-    "아쉬움",
-    "아스팔트",
-    "아시아",
-    "아울러",
-    "아저씨",
-    "아줌마",
-    "아직",
-    "아침",
-    "아파트",
-    "아프리카",
-    "아픔",
-    "아홉",
-    "아흔",
-    "악기",
-    "악몽",
-    "악수",
-    "안개",
-    "안경",
-    "안과",
-    "안내",
-    "안녕",
-    "안동",
-    "안방",
-    "안부",
-    "안주",
-    "알루미늄",
-    "알코올",
-    "암시",
-    "암컷",
-    "압력",
-    "앞날",
-    "앞문",
-    "애인",
-    "애정",
-    "액수",
-    "앨범",
-    "야간",
-    "야단",
-    "야옹",
-    "약간",
-    "약국",
-    "약속",
-    "약수",
-    "약점",
-    "약품",
-    "약혼녀",
-    "양념",
-    "양력",
-    "양말",
-    "양배추",
-    "양주",
-    "양파",
-    "어둠",
-    "어려움",
-    "어른",
-    "어젯밤",
-    "어쨌든",
-    "어쩌다가",
-    "어쩐지",
-    "언니",
-    "언덕",
-    "언론",
-    "언어",
-    "얼굴",
-    "얼른",
-    "얼음",
-    "얼핏",
-    "엄마",
-    "업무",
-    "업종",
-    "업체",
-    "엉덩이",
-    "엉망",
-    "엉터리",
-    "엊그제",
-    "에너지",
-    "에어컨",
-    "엔진",
-    "여건",
-    "여고생",
-    "여관",
-    "여군",
-    "여권",
-    "여대생",
-    "여덟",
-    "여동생",
-    "여든",
-    "여론",
-    "여름",
-    "여섯",
-    "여성",
-    "여왕",
-    "여인",
-    "여전히",
-    "여직원",
-    "여학생",
-    "여행",
-    "역사",
-    "역시",
-    "역할",
-    "연결",
-    "연구",
-    "연극",
-    "연기",
-    "연락",
-    "연설",
-    "연세",
-    "연속",
-    "연습",
-    "연애",
-    "연예인",
-    "연인",
-    "연장",
-    "연주",
-    "연출",
-    "연필",
-    "연합",
-    "연휴",
-    "열기",
-    "열매",
-    "열쇠",
-    "열심히",
-    "열정",
-    "열차",
-    "열흘",
-    "염려",
-    "엽서",
-    "영국",
-    "영남",
-    "영상",
-    "영양",
-    "영역",
-    "영웅",
-    "영원히",
-    "영하",
-    "영향",
-    "영혼",
-    "영화",
-    "옆구리",
-    "옆방",
-    "옆집",
-    "예감",
-    "예금",
-    "예방",
-    "예산",
-    "예상",
-    "예선",
-    "예술",
-    "예습",
-    "예식장",
-    "예약",
-    "예전",
-    "예절",
-    "예정",
-    "예컨대",
-    "옛날",
-    "오늘",
-    "오락",
-    "오랫동안",
-    "오렌지",
-    "오로지",
-    "오른발",
-    "오븐",
-    "오십",
-    "오염",
-    "오월",
-    "오전",
-    "오직",
-    "오징어",
-    "오페라",
-    "오피스텔",
-    "오히려",
-    "옥상",
-    "옥수수",
-    "온갖",
-    "온라인",
-    "온몸",
-    "온종일",
-    "온통",
-    "올가을",
-    "올림픽",
-    "올해",
-    "옷차림",
-    "와이셔츠",
-    "와인",
-    "완성",
-    "완전",
-    "왕비",
-    "왕자",
-    "왜냐하면",
-    "왠지",
-    "외갓집",
-    "외국",
-    "외로움",
-    "외삼촌",
-    "외출",
-    "외침",
-    "외할머니",
-    "왼발",
-    "왼손",
-    "왼쪽",
-    "요금",
-    "요일",
-    "요즘",
-    "요청",
-    "용기",
-    "용서",
-    "용어",
-    "우산",
-    "우선",
-    "우승",
-    "우연히",
-    "우정",
-    "우체국",
-    "우편",
-    "운동",
-    "운명",
-    "운반",
-    "운전",
-    "운행",
-    "울산",
-    "울음",
-    "움직임",
-    "웃어른",
-    "웃음",
-    "워낙",
-    "원고",
-    "원래",
-    "원서",
-    "원숭이",
-    "원인",
-    "원장",
-    "원피스",
-    "월급",
-    "월드컵",
-    "월세",
-    "월요일",
-    "웨이터",
-    "위반",
-    "위법",
-    "위성",
-    "위원",
-    "위험",
-    "위협",
-    "윗사람",
-    "유난히",
-    "유럽",
-    "유명",
-    "유물",
-    "유산",
-    "유적",
-    "유치원",
-    "유학",
-    "유행",
-    "유형",
-    "육군",
-    "육상",
-    "육십",
-    "육체",
-    "은행",
-    "음력",
-    "음료",
-    "음반",
-    "음성",
-    "음식",
-    "음악",
-    "음주",
-    "의견",
-    "의논",
-    "의문",
-    "의복",
-    "의식",
-    "의심",
-    "의외로",
-    "의욕",
-    "의원",
-    "의학",
-    "이것",
-    "이곳",
-    "이념",
-    "이놈",
-    "이달",
-    "이대로",
-    "이동",
-    "이렇게",
-    "이력서",
-    "이론적",
-    "이름",
-    "이민",
-    "이발소",
-    "이별",
-    "이불",
-    "이빨",
-    "이상",
-    "이성",
-    "이슬",
-    "이야기",
-    "이용",
-    "이웃",
-    "이월",
-    "이윽고",
-    "이익",
-    "이전",
-    "이중",
-    "이튿날",
-    "이틀",
-    "이혼",
-    "인간",
-    "인격",
-    "인공",
-    "인구",
-    "인근",
-    "인기",
-    "인도",
-    "인류",
-    "인물",
-    "인생",
-    "인쇄",
-    "인연",
-    "인원",
-    "인재",
-    "인종",
-    "인천",
-    "인체",
-    "인터넷",
-    "인하",
-    "인형",
-    "일곱",
-    "일기",
-    "일단",
-    "일대",
-    "일등",
-    "일반",
-    "일본",
-    "일부",
-    "일상",
-    "일생",
-    "일손",
-    "일요일",
-    "일월",
-    "일정",
-    "일종",
-    "일주일",
-    "일찍",
-    "일체",
-    "일치",
-    "일행",
-    "일회용",
-    "임금",
-    "임무",
-    "입대",
-    "입력",
-    "입맛",
-    "입사",
-    "입술",
-    "입시",
-    "입원",
-    "입장",
-    "입학",
-    "자가용",
-    "자격",
-    "자극",
-    "자동",
-    "자랑",
-    "자부심",
-    "자식",
-    "자신",
-    "자연",
-    "자원",
-    "자율",
-    "자전거",
-    "자정",
-    "자존심",
-    "자판",
-    "작가",
-    "작년",
-    "작성",
-    "작업",
-    "작용",
-    "작은딸",
-    "작품",
-    "잔디",
-    "잔뜩",
-    "잔치",
-    "잘못",
-    "잠깐",
-    "잠수함",
-    "잠시",
-    "잠옷",
-    "잠자리",
-    "잡지",
-    "장관",
-    "장군",
-    "장기간",
-    "장래",
-    "장례",
-    "장르",
-    "장마",
-    "장면",
-    "장모",
-    "장미",
-    "장비",
-    "장사",
-    "장소",
-    "장식",
-    "장애인",
-    "장인",
-    "장점",
-    "장차",
-    "장학금",
-    "재능",
-    "재빨리",
-    "재산",
-    "재생",
-    "재작년",
-    "재정",
-    "재채기",
-    "재판",
-    "재학",
-    "재활용",
-    "저것",
-    "저고리",
-    "저곳",
-    "저녁",
-    "저런",
-    "저렇게",
-    "저번",
-    "저울",
-    "저절로",
-    "저축",
-    "적극",
-    "적당히",
-    "적성",
-    "적용",
-    "적응",
-    "전개",
-    "전공",
-    "전기",
-    "전달",
-    "전라도",
-    "전망",
-    "전문",
-    "전반",
-    "전부",
-    "전세",
-    "전시",
-    "전용",
-    "전자",
-    "전쟁",
-    "전주",
-    "전철",
-    "전체",
-    "전통",
-    "전혀",
-    "전후",
-    "절대",
-    "절망",
-    "절반",
-    "절약",
-    "절차",
-    "점검",
-    "점수",
-    "점심",
-    "점원",
-    "점점",
-    "점차",
-    "접근",
-    "접시",
-    "접촉",
-    "젓가락",
-    "정거장",
-    "정도",
-    "정류장",
-    "정리",
-    "정말",
-    "정면",
-    "정문",
-    "정반대",
-    "정보",
-    "정부",
-    "정비",
-    "정상",
-    "정성",
-    "정오",
-    "정원",
-    "정장",
-    "정지",
-    "정치",
-    "정확히",
-    "제공",
-    "제과점",
-    "제대로",
-    "제목",
-    "제발",
-    "제법",
-    "제삿날",
-    "제안",
-    "제일",
-    "제작",
-    "제주도",
-    "제출",
-    "제품",
-    "제한",
-    "조각",
-    "조건",
-    "조금",
-    "조깅",
-    "조명",
-    "조미료",
-    "조상",
-    "조선",
-    "조용히",
-    "조절",
-    "조정",
-    "조직",
-    "존댓말",
-    "존재",
-    "졸업",
-    "졸음",
-    "종교",
-    "종로",
-    "종류",
-    "종소리",
-    "종업원",
-    "종종",
-    "종합",
-    "좌석",
-    "죄인",
-    "주관적",
-    "주름",
-    "주말",
-    "주머니",
-    "주먹",
-    "주문",
-    "주민",
-    "주방",
-    "주변",
-    "주식",
-    "주인",
-    "주일",
-    "주장",
-    "주전자",
-    "주택",
-    "준비",
-    "줄거리",
-    "줄기",
-    "줄무늬",
-    "중간",
-    "중계방송",
-    "중국",
-    "중년",
-    "중단",
-    "중독",
-    "중반",
-    "중부",
-    "중세",
-    "중소기업",
-    "중순",
-    "중앙",
-    "중요",
-    "중학교",
-    "즉석",
-    "즉시",
-    "즐거움",
-    "증가",
-    "증거",
-    "증권",
-    "증상",
-    "증세",
-    "지각",
-    "지갑",
-    "지경",
-    "지극히",
-    "지금",
-    "지급",
-    "지능",
-    "지름길",
-    "지리산",
-    "지방",
-    "지붕",
-    "지식",
-    "지역",
-    "지우개",
-    "지원",
-    "지적",
-    "지점",
-    "지진",
-    "지출",
-    "직선",
-    "직업",
-    "직원",
-    "직장",
-    "진급",
-    "진동",
-    "진로",
-    "진료",
-    "진리",
-    "진짜",
-    "진찰",
-    "진출",
-    "진통",
-    "진행",
-    "질문",
-    "질병",
-    "질서",
-    "짐작",
-    "집단",
-    "집안",
-    "집중",
-    "짜증",
-    "찌꺼기",
-    "차남",
-    "차라리",
-    "차량",
-    "차림",
-    "차별",
-    "차선",
-    "차츰",
-    "착각",
-    "찬물",
-    "찬성",
-    "참가",
-    "참기름",
-    "참새",
-    "참석",
-    "참여",
-    "참외",
-    "참조",
-    "찻잔",
-    "창가",
-    "창고",
-    "창구",
-    "창문",
-    "창밖",
-    "창작",
-    "창조",
-    "채널",
-    "채점",
-    "책가방",
-    "책방",
-    "책상",
-    "책임",
-    "챔피언",
-    "처벌",
-    "처음",
-    "천국",
-    "천둥",
-    "천장",
-    "천재",
-    "천천히",
-    "철도",
-    "철저히",
-    "철학",
-    "첫날",
-    "첫째",
-    "청년",
-    "청바지",
-    "청소",
-    "청춘",
-    "체계",
-    "체력",
-    "체온",
-    "체육",
-    "체중",
-    "체험",
-    "초등학생",
-    "초반",
-    "초밥",
-    "초상화",
-    "초순",
-    "초여름",
-    "초원",
-    "초저녁",
-    "초점",
-    "초청",
-    "초콜릿",
-    "촛불",
-    "총각",
-    "총리",
-    "총장",
-    "촬영",
-    "최근",
-    "최상",
-    "최선",
-    "최신",
-    "최악",
-    "최종",
-    "추석",
-    "추억",
-    "추진",
-    "추천",
-    "추측",
-    "축구",
-    "축소",
-    "축제",
-    "축하",
-    "출근",
-    "출발",
-    "출산",
-    "출신",
-    "출연",
-    "출입",
-    "출장",
-    "출판",
-    "충격",
-    "충고",
-    "충돌",
-    "충분히",
-    "충청도",
-    "취업",
-    "취직",
-    "취향",
-    "치약",
-    "친구",
-    "친척",
-    "칠십",
-    "칠월",
-    "칠판",
-    "침대",
-    "침묵",
-    "침실",
-    "칫솔",
-    "칭찬",
-    "카메라",
-    "카운터",
-    "칼국수",
-    "캐릭터",
-    "캠퍼스",
-    "캠페인",
-    "커튼",
-    "컨디션",
-    "컬러",
-    "컴퓨터",
-    "코끼리",
-    "코미디",
-    "콘서트",
-    "콜라",
-    "콤플렉스",
-    "콩나물",
-    "쾌감",
-    "쿠데타",
-    "크림",
-    "큰길",
-    "큰딸",
-    "큰소리",
-    "큰아들",
-    "큰어머니",
-    "큰일",
-    "큰절",
-    "클래식",
-    "클럽",
-    "킬로",
-    "타입",
-    "타자기",
-    "탁구",
-    "탁자",
-    "탄생",
-    "태권도",
-    "태양",
-    "태풍",
-    "택시",
-    "탤런트",
-    "터널",
-    "터미널",
-    "테니스",
-    "테스트",
-    "테이블",
-    "텔레비전",
-    "토론",
-    "토마토",
-    "토요일",
-    "통계",
-    "통과",
-    "통로",
-    "통신",
-    "통역",
-    "통일",
-    "통장",
-    "통제",
-    "통증",
-    "통합",
-    "통화",
-    "퇴근",
-    "퇴원",
-    "퇴직금",
-    "튀김",
-    "트럭",
-    "특급",
-    "특별",
-    "특성",
-    "특수",
-    "특징",
-    "특히",
-    "튼튼히",
-    "티셔츠",
-    "파란색",
-    "파일",
-    "파출소",
-    "판결",
-    "판단",
-    "판매",
-    "판사",
-    "팔십",
-    "팔월",
-    "팝송",
-    "패션",
-    "팩스",
-    "팩시밀리",
-    "팬티",
-    "퍼센트",
-    "페인트",
-    "편견",
-    "편의",
-    "편지",
-    "편히",
-    "평가",
-    "평균",
-    "평생",
-    "평소",
-    "평양",
-    "평일",
-    "평화",
-    "포스터",
-    "포인트",
-    "포장",
-    "포함",
-    "표면",
-    "표정",
-    "표준",
-    "표현",
-    "품목",
-    "품질",
-    "풍경",
-    "풍속",
-    "풍습",
-    "프랑스",
-    "프린터",
-    "플라스틱",
-    "피곤",
-    "피망",
-    "피아노",
-    "필름",
-    "필수",
-    "필요",
-    "필자",
-    "필통",
-    "핑계",
-    "하느님",
-    "하늘",
-    "하드웨어",
-    "하룻밤",
-    "하반기",
-    "하숙집",
-    "하순",
-    "하여튼",
-    "하지만",
-    "하천",
-    "하품",
-    "하필",
-    "학과",
-    "학교",
-    "학급",
-    "학기",
-    "학년",
-    "학력",
-    "학번",
-    "학부모",
-    "학비",
-    "학생",
-    "학술",
-    "학습",
-    "학용품",
-    "학원",
-    "학위",
-    "학자",
-    "학점",
-    "한계",
-    "한글",
-    "한꺼번에",
-    "한낮",
-    "한눈",
-    "한동안",
-    "한때",
-    "한라산",
-    "한마디",
-    "한문",
-    "한번",
-    "한복",
-    "한식",
-    "한여름",
-    "한쪽",
-    "할머니",
-    "할아버지",
-    "할인",
-    "함께",
-    "함부로",
-    "합격",
-    "합리적",
-    "항공",
-    "항구",
-    "항상",
-    "항의",
-    "해결",
-    "해군",
-    "해답",
-    "해당",
-    "해물",
-    "해석",
-    "해설",
-    "해수욕장",
-    "해안",
-    "핵심",
-    "핸드백",
-    "햄버거",
-    "햇볕",
-    "햇살",
-    "행동",
-    "행복",
-    "행사",
-    "행운",
-    "행위",
-    "향기",
-    "향상",
-    "향수",
-    "허락",
-    "허용",
-    "헬기",
-    "현관",
-    "현금",
-    "현대",
-    "현상",
-    "현실",
-    "현장",
-    "현재",
-    "현지",
-    "혈액",
-    "협력",
-    "형부",
-    "형사",
-    "형수",
-    "형식",
-    "형제",
-    "형태",
-    "형편",
-    "혜택",
-    "호기심",
-    "호남",
-    "호랑이",
-    "호박",
-    "호텔",
-    "호흡",
-    "혹시",
-    "홀로",
-    "홈페이지",
-    "홍보",
-    "홍수",
-    "홍차",
-    "화면",
-    "화분",
-    "화살",
-    "화요일",
-    "화장",
-    "화학",
-    "확보",
-    "확인",
-    "확장",
-    "확정",
-    "환갑",
-    "환경",
-    "환영",
-    "환율",
-    "환자",
-    "활기",
-    "활동",
-    "활발히",
-    "활용",
-    "활짝",
-    "회견",
-    "회관",
-    "회복",
-    "회색",
-    "회원",
-    "회장",
-    "회전",
-    "횟수",
-    "횡단보도",
-    "효율적",
-    "후반",
-    "후춧가루",
-    "훈련",
-    "훨씬",
-    "휴식",
-    "휴일",
-    "흉내",
-    "흐름",
-    "흑백",
-    "흑인",
-    "흔적",
-    "흔히",
-    "흥미",
-    "흥분",
-    "희곡",
-    "희망",
-    "희생",
-    "흰색",
-    "힘껏"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/pt.rs b/networks/monero/wallet/polyseed/src/words/pt.rs
deleted file mode 100644
index 38b9ff4c..00000000
--- a/networks/monero/wallet/polyseed/src/words/pt.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "abacate",
-    "abaixo",
-    "abalar",
-    "abater",
-    "abduzir",
-    "abelha",
-    "aberto",
-    "abismo",
-    "abotoar",
-    "abranger",
-    "abreviar",
-    "abrigar",
-    "abrupto",
-    "absinto",
-    "absoluto",
-    "absurdo",
-    "abutre",
-    "acabado",
-    "acalmar",
-    "acampar",
-    "acanhar",
-    "acaso",
-    "aceitar",
-    "acelerar",
-    "acenar",
-    "acervo",
-    "acessar",
-    "acetona",
-    "achatar",
-    "acidez",
-    "acima",
-    "acionado",
-    "acirrar",
-    "aclamar",
-    "aclive",
-    "acolhida",
-    "acomodar",
-    "acoplar",
-    "acordar",
-    "acumular",
-    "acusador",
-    "adaptar",
-    "adega",
-    "adentro",
-    "adepto",
-    "adequar",
-    "aderente",
-    "adesivo",
-    "adeus",
-    "adiante",
-    "aditivo",
-    "adjetivo",
-    "adjunto",
-    "admirar",
-    "adorar",
-    "adquirir",
-    "adubo",
-    "adverso",
-    "advogado",
-    "aeronave",
-    "afastar",
-    "aferir",
-    "afetivo",
-    "afinador",
-    "afivelar",
-    "aflito",
-    "afluente",
-    "afrontar",
-    "agachar",
-    "agarrar",
-    "agasalho",
-    "agenciar",
-    "agilizar",
-    "agiota",
-    "agitado",
-    "agora",
-    "agradar",
-    "agreste",
-    "agrupar",
-    "aguardar",
-    "agulha",
-    "ajoelhar",
-    "ajudar",
-    "ajustar",
-    "alameda",
-    "alarme",
-    "alastrar",
-    "alavanca",
-    "albergue",
-    "albino",
-    "alcatra",
-    "aldeia",
-    "alecrim",
-    "alegria",
-    "alertar",
-    "alface",
-    "alfinete",
-    "algum",
-    "alheio",
-    "aliar",
-    "alicate",
-    "alienar",
-    "alinhar",
-    "aliviar",
-    "almofada",
-    "alocar",
-    "alpiste",
-    "alterar",
-    "altitude",
-    "alucinar",
-    "alugar",
-    "aluno",
-    "alusivo",
-    "alvo",
-    "amaciar",
-    "amador",
-    "amarelo",
-    "amassar",
-    "ambas",
-    "ambiente",
-    "ameixa",
-    "amenizar",
-    "amido",
-    "amistoso",
-    "amizade",
-    "amolador",
-    "amontoar",
-    "amoroso",
-    "amostra",
-    "amparar",
-    "ampliar",
-    "ampola",
-    "anagrama",
-    "analisar",
-    "anarquia",
-    "anatomia",
-    "andaime",
-    "anel",
-    "anexo",
-    "angular",
-    "animar",
-    "anjo",
-    "anomalia",
-    "anotado",
-    "ansioso",
-    "anterior",
-    "anuidade",
-    "anunciar",
-    "anzol",
-    "apagador",
-    "apalpar",
-    "apanhado",
-    "apego",
-    "apelido",
-    "apertada",
-    "apesar",
-    "apetite",
-    "apito",
-    "aplauso",
-    "aplicada",
-    "apoio",
-    "apontar",
-    "aposta",
-    "aprendiz",
-    "aprovar",
-    "aquecer",
-    "arame",
-    "aranha",
-    "arara",
-    "arcada",
-    "ardente",
-    "areia",
-    "arejar",
-    "arenito",
-    "aresta",
-    "argiloso",
-    "argola",
-    "arma",
-    "arquivo",
-    "arraial",
-    "arrebate",
-    "arriscar",
-    "arroba",
-    "arrumar",
-    "arsenal",
-    "arterial",
-    "artigo",
-    "arvoredo",
-    "asfaltar",
-    "asilado",
-    "aspirar",
-    "assador",
-    "assinar",
-    "assoalho",
-    "assunto",
-    "astral",
-    "atacado",
-    "atadura",
-    "atalho",
-    "atarefar",
-    "atear",
-    "atender",
-    "aterro",
-    "ateu",
-    "atingir",
-    "atirador",
-    "ativo",
-    "atoleiro",
-    "atracar",
-    "atrevido",
-    "atriz",
-    "atual",
-    "atum",
-    "auditor",
-    "aumentar",
-    "aura",
-    "aurora",
-    "autismo",
-    "autoria",
-    "autuar",
-    "avaliar",
-    "avante",
-    "avaria",
-    "avental",
-    "avesso",
-    "aviador",
-    "avisar",
-    "avulso",
-    "axila",
-    "azarar",
-    "azedo",
-    "azeite",
-    "azulejo",
-    "babar",
-    "babosa",
-    "bacalhau",
-    "bacharel",
-    "bacia",
-    "bagagem",
-    "baiano",
-    "bailar",
-    "baioneta",
-    "bairro",
-    "baixista",
-    "bajular",
-    "baleia",
-    "baliza",
-    "balsa",
-    "banal",
-    "bandeira",
-    "banho",
-    "banir",
-    "banquete",
-    "barato",
-    "barbado",
-    "baronesa",
-    "barraca",
-    "barulho",
-    "baseado",
-    "bastante",
-    "batata",
-    "batedor",
-    "batida",
-    "batom",
-    "batucar",
-    "baunilha",
-    "beber",
-    "beijo",
-    "beirada",
-    "beisebol",
-    "beldade",
-    "beleza",
-    "belga",
-    "beliscar",
-    "bendito",
-    "bengala",
-    "benzer",
-    "berimbau",
-    "berlinda",
-    "berro",
-    "besouro",
-    "bexiga",
-    "bezerro",
-    "bico",
-    "bicudo",
-    "bienal",
-    "bifocal",
-    "bifurcar",
-    "bigorna",
-    "bilhete",
-    "bimestre",
-    "bimotor",
-    "biologia",
-    "biombo",
-    "biosfera",
-    "bipolar",
-    "birrento",
-    "biscoito",
-    "bisneto",
-    "bispo",
-    "bissexto",
-    "bitola",
-    "bizarro",
-    "blindado",
-    "bloco",
-    "bloquear",
-    "boato",
-    "bobagem",
-    "bocado",
-    "bocejo",
-    "bochecha",
-    "boicotar",
-    "bolada",
-    "boletim",
-    "bolha",
-    "bolo",
-    "bombeiro",
-    "bonde",
-    "boneco",
-    "bonita",
-    "borbulha",
-    "borda",
-    "boreal",
-    "borracha",
-    "bovino",
-    "boxeador",
-    "branco",
-    "brasa",
-    "braveza",
-    "breu",
-    "briga",
-    "brilho",
-    "brincar",
-    "broa",
-    "brochura",
-    "bronzear",
-    "broto",
-    "bruxo",
-    "bucha",
-    "budismo",
-    "bufar",
-    "bule",
-    "buraco",
-    "busca",
-    "busto",
-    "buzina",
-    "cabana",
-    "cabelo",
-    "cabide",
-    "cabo",
-    "cabrito",
-    "cacau",
-    "cacetada",
-    "cachorro",
-    "cacique",
-    "cadastro",
-    "cadeado",
-    "cafezal",
-    "caiaque",
-    "caipira",
-    "caixote",
-    "cajado",
-    "caju",
-    "calafrio",
-    "calcular",
-    "caldeira",
-    "calibrar",
-    "calmante",
-    "calota",
-    "camada",
-    "cambista",
-    "camisa",
-    "camomila",
-    "campanha",
-    "camuflar",
-    "canavial",
-    "cancelar",
-    "caneta",
-    "canguru",
-    "canhoto",
-    "canivete",
-    "canoa",
-    "cansado",
-    "cantar",
-    "canudo",
-    "capacho",
-    "capela",
-    "capinar",
-    "capotar",
-    "capricho",
-    "captador",
-    "capuz",
-    "caracol",
-    "carbono",
-    "cardeal",
-    "careca",
-    "carimbar",
-    "carneiro",
-    "carpete",
-    "carreira",
-    "cartaz",
-    "carvalho",
-    "casaco",
-    "casca",
-    "casebre",
-    "castelo",
-    "casulo",
-    "catarata",
-    "cativar",
-    "caule",
-    "causador",
-    "cautelar",
-    "cavalo",
-    "caverna",
-    "cebola",
-    "cedilha",
-    "cegonha",
-    "celebrar",
-    "celular",
-    "cenoura",
-    "censo",
-    "centeio",
-    "cercar",
-    "cerrado",
-    "certeiro",
-    "cerveja",
-    "cetim",
-    "cevada",
-    "chacota",
-    "chaleira",
-    "chamado",
-    "chapada",
-    "charme",
-    "chatice",
-    "chave",
-    "chefe",
-    "chegada",
-    "cheiro",
-    "cheque",
-    "chicote",
-    "chifre",
-    "chinelo",
-    "chocalho",
-    "chover",
-    "chumbo",
-    "chutar",
-    "chuva",
-    "cicatriz",
-    "ciclone",
-    "cidade",
-    "cidreira",
-    "ciente",
-    "cigana",
-    "cimento",
-    "cinto",
-    "cinza",
-    "ciranda",
-    "circuito",
-    "cirurgia",
-    "citar",
-    "clareza",
-    "clero",
-    "clicar",
-    "clone",
-    "clube",
-    "coado",
-    "coagir",
-    "cobaia",
-    "cobertor",
-    "cobrar",
-    "cocada",
-    "coelho",
-    "coentro",
-    "coeso",
-    "cogumelo",
-    "coibir",
-    "coifa",
-    "coiote",
-    "colar",
-    "coleira",
-    "colher",
-    "colidir",
-    "colmeia",
-    "colono",
-    "coluna",
-    "comando",
-    "combinar",
-    "comentar",
-    "comitiva",
-    "comover",
-    "complexo",
-    "comum",
-    "concha",
-    "condor",
-    "conectar",
-    "confuso",
-    "congelar",
-    "conhecer",
-    "conjugar",
-    "consumir",
-    "contrato",
-    "convite",
-    "cooperar",
-    "copeiro",
-    "copiador",
-    "copo",
-    "coquetel",
-    "coragem",
-    "cordial",
-    "corneta",
-    "coronha",
-    "corporal",
-    "correio",
-    "cortejo",
-    "coruja",
-    "corvo",
-    "cosseno",
-    "costela",
-    "cotonete",
-    "couro",
-    "couve",
-    "covil",
-    "cozinha",
-    "cratera",
-    "cravo",
-    "creche",
-    "credor",
-    "creme",
-    "crer",
-    "crespo",
-    "criada",
-    "criminal",
-    "crioulo",
-    "crise",
-    "criticar",
-    "crosta",
-    "crua",
-    "cruzeiro",
-    "cubano",
-    "cueca",
-    "cuidado",
-    "cujo",
-    "culatra",
-    "culminar",
-    "culpar",
-    "cultura",
-    "cumprir",
-    "cunhado",
-    "cupido",
-    "curativo",
-    "curral",
-    "cursar",
-    "curto",
-    "cuspir",
-    "custear",
-    "cutelo",
-    "damasco",
-    "datar",
-    "debater",
-    "debitar",
-    "deboche",
-    "debulhar",
-    "decalque",
-    "decimal",
-    "declive",
-    "decote",
-    "decretar",
-    "dedal",
-    "dedicado",
-    "deduzir",
-    "defesa",
-    "defumar",
-    "degelo",
-    "degrau",
-    "degustar",
-    "deitado",
-    "deixar",
-    "delator",
-    "delegado",
-    "delinear",
-    "delonga",
-    "demanda",
-    "demitir",
-    "demolido",
-    "dentista",
-    "depenado",
-    "depilar",
-    "depois",
-    "depressa",
-    "depurar",
-    "deriva",
-    "derramar",
-    "desafio",
-    "desbotar",
-    "descanso",
-    "desenho",
-    "desfiado",
-    "desgaste",
-    "desigual",
-    "deslize",
-    "desmamar",
-    "desova",
-    "despesa",
-    "destaque",
-    "desviar",
-    "detalhar",
-    "detentor",
-    "detonar",
-    "detrito",
-    "deusa",
-    "dever",
-    "devido",
-    "devotado",
-    "dezena",
-    "diagrama",
-    "dialeto",
-    "didata",
-    "difuso",
-    "digitar",
-    "dilatado",
-    "diluente",
-    "diminuir",
-    "dinastia",
-    "dinheiro",
-    "diocese",
-    "direto",
-    "discreta",
-    "disfarce",
-    "disparo",
-    "disquete",
-    "dissipar",
-    "distante",
-    "ditador",
-    "diurno",
-    "diverso",
-    "divisor",
-    "divulgar",
-    "dizer",
-    "dobrador",
-    "dolorido",
-    "domador",
-    "dominado",
-    "donativo",
-    "donzela",
-    "dormente",
-    "dorsal",
-    "dosagem",
-    "dourado",
-    "doutor",
-    "drenagem",
-    "drible",
-    "drogaria",
-    "duelar",
-    "duende",
-    "dueto",
-    "duplo",
-    "duquesa",
-    "durante",
-    "duvidoso",
-    "eclodir",
-    "ecoar",
-    "ecologia",
-    "edificar",
-    "edital",
-    "educado",
-    "efeito",
-    "efetivar",
-    "ejetar",
-    "elaborar",
-    "eleger",
-    "eleitor",
-    "elenco",
-    "elevador",
-    "eliminar",
-    "elogiar",
-    "embargo",
-    "embolado",
-    "embrulho",
-    "embutido",
-    "emenda",
-    "emergir",
-    "emissor",
-    "empatia",
-    "empenho",
-    "empinado",
-    "empolgar",
-    "emprego",
-    "empurrar",
-    "emulador",
-    "encaixe",
-    "encenado",
-    "enchente",
-    "encontro",
-    "endeusar",
-    "endossar",
-    "enfaixar",
-    "enfeite",
-    "enfim",
-    "engajado",
-    "engenho",
-    "englobar",
-    "engomado",
-    "engraxar",
-    "enguia",
-    "enjoar",
-    "enlatar",
-    "enquanto",
-    "enraizar",
-    "enrolado",
-    "enrugar",
-    "ensaio",
-    "enseada",
-    "ensino",
-    "ensopado",
-    "entanto",
-    "enteado",
-    "entidade",
-    "entortar",
-    "entrada",
-    "entulho",
-    "envergar",
-    "enviado",
-    "envolver",
-    "enxame",
-    "enxerto",
-    "enxofre",
-    "enxuto",
-    "epiderme",
-    "equipar",
-    "ereto",
-    "erguido",
-    "errata",
-    "erva",
-    "ervilha",
-    "esbanjar",
-    "esbelto",
-    "escama",
-    "escola",
-    "escrita",
-    "escuta",
-    "esfinge",
-    "esfolar",
-    "esfregar",
-    "esfumado",
-    "esgrima",
-    "esmalte",
-    "espanto",
-    "espelho",
-    "espiga",
-    "esponja",
-    "espreita",
-    "espumar",
-    "esquerda",
-    "estaca",
-    "esteira",
-    "esticar",
-    "estofado",
-    "estrela",
-    "estudo",
-    "esvaziar",
-    "etanol",
-    "etiqueta",
-    "euforia",
-    "europeu",
-    "evacuar",
-    "evaporar",
-    "evasivo",
-    "eventual",
-    "evidente",
-    "evoluir",
-    "exagero",
-    "exalar",
-    "examinar",
-    "exato",
-    "exausto",
-    "excesso",
-    "excitar",
-    "exclamar",
-    "executar",
-    "exemplo",
-    "exibir",
-    "exigente",
-    "exonerar",
-    "expandir",
-    "expelir",
-    "expirar",
-    "explanar",
-    "exposto",
-    "expresso",
-    "expulsar",
-    "externo",
-    "extinto",
-    "extrato",
-    "fabricar",
-    "fabuloso",
-    "faceta",
-    "facial",
-    "fada",
-    "fadiga",
-    "faixa",
-    "falar",
-    "falta",
-    "familiar",
-    "fandango",
-    "fanfarra",
-    "fantoche",
-    "fardado",
-    "farelo",
-    "farinha",
-    "farofa",
-    "farpa",
-    "fartura",
-    "fatia",
-    "fator",
-    "favorita",
-    "faxina",
-    "fazenda",
-    "fechado",
-    "feijoada",
-    "feirante",
-    "felino",
-    "feminino",
-    "fenda",
-    "feno",
-    "fera",
-    "feriado",
-    "ferrugem",
-    "ferver",
-    "festejar",
-    "fetal",
-    "feudal",
-    "fiapo",
-    "fibrose",
-    "ficar",
-    "ficheiro",
-    "figurado",
-    "fileira",
-    "filho",
-    "filme",
-    "filtrar",
-    "firmeza",
-    "fisgada",
-    "fissura",
-    "fita",
-    "fivela",
-    "fixador",
-    "fixo",
-    "flacidez",
-    "flamingo",
-    "flanela",
-    "flechada",
-    "flora",
-    "flutuar",
-    "fluxo",
-    "focal",
-    "focinho",
-    "fofocar",
-    "fogo",
-    "foguete",
-    "foice",
-    "folgado",
-    "folheto",
-    "forjar",
-    "formiga",
-    "forno",
-    "forte",
-    "fosco",
-    "fossa",
-    "fragata",
-    "fralda",
-    "frango",
-    "frasco",
-    "fraterno",
-    "freira",
-    "frente",
-    "fretar",
-    "frieza",
-    "friso",
-    "fritura",
-    "fronha",
-    "frustrar",
-    "fruteira",
-    "fugir",
-    "fulano",
-    "fuligem",
-    "fundar",
-    "fungo",
-    "funil",
-    "furador",
-    "furioso",
-    "futebol",
-    "gabarito",
-    "gabinete",
-    "gado",
-    "gaiato",
-    "gaiola",
-    "gaivota",
-    "galega",
-    "galho",
-    "galinha",
-    "galocha",
-    "ganhar",
-    "garagem",
-    "garfo",
-    "gargalo",
-    "garimpo",
-    "garoupa",
-    "garrafa",
-    "gasoduto",
-    "gasto",
-    "gata",
-    "gatilho",
-    "gaveta",
-    "gazela",
-    "gelado",
-    "geleia",
-    "gelo",
-    "gemada",
-    "gemer",
-    "gemido",
-    "generoso",
-    "gengiva",
-    "genial",
-    "genoma",
-    "genro",
-    "geologia",
-    "gerador",
-    "germinar",
-    "gesso",
-    "gestor",
-    "ginasta",
-    "gincana",
-    "gingado",
-    "girafa",
-    "girino",
-    "glacial",
-    "glicose",
-    "global",
-    "glorioso",
-    "goela",
-    "goiaba",
-    "golfe",
-    "golpear",
-    "gordura",
-    "gorjeta",
-    "gorro",
-    "gostoso",
-    "goteira",
-    "governar",
-    "gracejo",
-    "gradual",
-    "grafite",
-    "gralha",
-    "grampo",
-    "granada",
-    "gratuito",
-    "graveto",
-    "graxa",
-    "grego",
-    "grelhar",
-    "greve",
-    "grilo",
-    "grisalho",
-    "gritaria",
-    "grosso",
-    "grotesco",
-    "grudado",
-    "grunhido",
-    "gruta",
-    "guache",
-    "guarani",
-    "guaxinim",
-    "guerrear",
-    "guiar",
-    "guincho",
-    "guisado",
-    "gula",
-    "guloso",
-    "guru",
-    "habitar",
-    "harmonia",
-    "haste",
-    "haver",
-    "hectare",
-    "herdar",
-    "heresia",
-    "hesitar",
-    "hiato",
-    "hibernar",
-    "hidratar",
-    "hiena",
-    "hino",
-    "hipismo",
-    "hipnose",
-    "hipoteca",
-    "hoje",
-    "holofote",
-    "homem",
-    "honesto",
-    "honrado",
-    "hormonal",
-    "hospedar",
-    "humorado",
-    "iate",
-    "ideia",
-    "idoso",
-    "ignorado",
-    "igreja",
-    "iguana",
-    "ileso",
-    "ilha",
-    "iludido",
-    "iluminar",
-    "ilustrar",
-    "imagem",
-    "imediato",
-    "imenso",
-    "imersivo",
-    "iminente",
-    "imitador",
-    "imortal",
-    "impacto",
-    "impedir",
-    "implante",
-    "impor",
-    "imprensa",
-    "impune",
-    "imunizar",
-    "inalador",
-    "inapto",
-    "inativo",
-    "incenso",
-    "inchar",
-    "incidir",
-    "incluir",
-    "incolor",
-    "indeciso",
-    "indireto",
-    "indutor",
-    "ineficaz",
-    "inerente",
-    "infantil",
-    "infestar",
-    "infinito",
-    "inflamar",
-    "informal",
-    "infrator",
-    "ingerir",
-    "inibido",
-    "inicial",
-    "inimigo",
-    "injetar",
-    "inocente",
-    "inodoro",
-    "inovador",
-    "inox",
-    "inquieto",
-    "inscrito",
-    "inseto",
-    "insistir",
-    "inspetor",
-    "instalar",
-    "insulto",
-    "intacto",
-    "integral",
-    "intimar",
-    "intocado",
-    "intriga",
-    "invasor",
-    "inverno",
-    "invicto",
-    "invocar",
-    "iogurte",
-    "iraniano",
-    "ironizar",
-    "irreal",
-    "irritado",
-    "isca",
-    "isento",
-    "isolado",
-    "isqueiro",
-    "italiano",
-    "janeiro",
-    "jangada",
-    "janta",
-    "jararaca",
-    "jardim",
-    "jarro",
-    "jasmim",
-    "jato",
-    "javali",
-    "jazida",
-    "jejum",
-    "joaninha",
-    "joelhada",
-    "jogador",
-    "joia",
-    "jornal",
-    "jorrar",
-    "jovem",
-    "juba",
-    "judeu",
-    "judoca",
-    "juiz",
-    "julgador",
-    "julho",
-    "jurado",
-    "jurista",
-    "juro",
-    "justa",
-    "labareda",
-    "laboral",
-    "lacre",
-    "lactante",
-    "ladrilho",
-    "lagarta",
-    "lagoa",
-    "laje",
-    "lamber",
-    "lamentar",
-    "laminar",
-    "lampejo",
-    "lanche",
-    "lapidar",
-    "lapso",
-    "laranja",
-    "lareira",
-    "largura",
-    "lasanha",
-    "lastro",
-    "lateral",
-    "latido",
-    "lavanda",
-    "lavoura",
-    "lavrador",
-    "laxante",
-    "lazer",
-    "lealdade",
-    "lebre",
-    "legado",
-    "legendar",
-    "legista",
-    "leigo",
-    "leiloar",
-    "leitura",
-    "lembrete",
-    "leme",
-    "lenhador",
-    "lentilha",
-    "leoa",
-    "lesma",
-    "leste",
-    "letivo",
-    "letreiro",
-    "levar",
-    "leveza",
-    "levitar",
-    "liberal",
-    "libido",
-    "liderar",
-    "ligar",
-    "ligeiro",
-    "limitar",
-    "limoeiro",
-    "limpador",
-    "linda",
-    "linear",
-    "linhagem",
-    "liquidez",
-    "listagem",
-    "lisura",
-    "litoral",
-    "livro",
-    "lixa",
-    "lixeira",
-    "locador",
-    "locutor",
-    "lojista",
-    "lombo",
-    "lona",
-    "longe",
-    "lontra",
-    "lorde",
-    "lotado",
-    "loteria",
-    "loucura",
-    "lousa",
-    "louvar",
-    "luar",
-    "lucidez",
-    "lucro",
-    "luneta",
-    "lustre",
-    "lutador",
-    "luva",
-    "macaco",
-    "macete",
-    "machado",
-    "macio",
-    "madeira",
-    "madrinha",
-    "magnata",
-    "magreza",
-    "maior",
-    "mais",
-    "malandro",
-    "malha",
-    "malote",
-    "maluco",
-    "mamilo",
-    "mamoeiro",
-    "mamute",
-    "manada",
-    "mancha",
-    "mandato",
-    "manequim",
-    "manhoso",
-    "manivela",
-    "manobrar",
-    "mansa",
-    "manter",
-    "manusear",
-    "mapeado",
-    "maquinar",
-    "marcador",
-    "maresia",
-    "marfim",
-    "margem",
-    "marinho",
-    "marmita",
-    "maroto",
-    "marquise",
-    "marreco",
-    "martelo",
-    "marujo",
-    "mascote",
-    "masmorra",
-    "massagem",
-    "mastigar",
-    "matagal",
-    "materno",
-    "matinal",
-    "matutar",
-    "maxilar",
-    "medalha",
-    "medida",
-    "medusa",
-    "megafone",
-    "meiga",
-    "melancia",
-    "melhor",
-    "membro",
-    "memorial",
-    "menino",
-    "menos",
-    "mensagem",
-    "mental",
-    "merecer",
-    "mergulho",
-    "mesada",
-    "mesclar",
-    "mesmo",
-    "mesquita",
-    "mestre",
-    "metade",
-    "meteoro",
-    "metragem",
-    "mexer",
-    "mexicano",
-    "micro",
-    "migalha",
-    "migrar",
-    "milagre",
-    "milenar",
-    "milhar",
-    "mimado",
-    "minerar",
-    "minhoca",
-    "ministro",
-    "minoria",
-    "miolo",
-    "mirante",
-    "mirtilo",
-    "misturar",
-    "mocidade",
-    "moderno",
-    "modular",
-    "moeda",
-    "moer",
-    "moinho",
-    "moita",
-    "moldura",
-    "moleza",
-    "molho",
-    "molinete",
-    "molusco",
-    "montanha",
-    "moqueca",
-    "morango",
-    "morcego",
-    "mordomo",
-    "morena",
-    "mosaico",
-    "mosquete",
-    "mostarda",
-    "motel",
-    "motim",
-    "moto",
-    "motriz",
-    "muda",
-    "muito",
-    "mulata",
-    "mulher",
-    "multar",
-    "mundial",
-    "munido",
-    "muralha",
-    "murcho",
-    "muscular",
-    "museu",
-    "musical",
-    "nacional",
-    "nadador",
-    "naja",
-    "namoro",
-    "narina",
-    "narrado",
-    "nascer",
-    "nativa",
-    "natureza",
-    "navalha",
-    "navegar",
-    "navio",
-    "neblina",
-    "nebuloso",
-    "negativa",
-    "negociar",
-    "negrito",
-    "nervoso",
-    "neta",
-    "neural",
-    "nevasca",
-    "nevoeiro",
-    "ninar",
-    "ninho",
-    "nitidez",
-    "nivelar",
-    "nobreza",
-    "noite",
-    "noiva",
-    "nomear",
-    "nominal",
-    "nordeste",
-    "nortear",
-    "notar",
-    "noticiar",
-    "noturno",
-    "novelo",
-    "novilho",
-    "novo",
-    "nublado",
-    "nudez",
-    "numeral",
-    "nupcial",
-    "nutrir",
-    "nuvem",
-    "obcecado",
-    "obedecer",
-    "objetivo",
-    "obrigado",
-    "obscuro",
-    "obstetra",
-    "obter",
-    "obturar",
-    "ocidente",
-    "ocioso",
-    "ocorrer",
-    "oculista",
-    "ocupado",
-    "ofegante",
-    "ofensiva",
-    "oferenda",
-    "oficina",
-    "ofuscado",
-    "ogiva",
-    "olaria",
-    "oleoso",
-    "olhar",
-    "oliveira",
-    "ombro",
-    "omelete",
-    "omisso",
-    "omitir",
-    "ondulado",
-    "oneroso",
-    "ontem",
-    "opcional",
-    "operador",
-    "oponente",
-    "oportuno",
-    "oposto",
-    "orar",
-    "orbitar",
-    "ordem",
-    "ordinal",
-    "orfanato",
-    "orgasmo",
-    "orgulho",
-    "oriental",
-    "origem",
-    "oriundo",
-    "orla",
-    "ortodoxo",
-    "orvalho",
-    "oscilar",
-    "ossada",
-    "osso",
-    "ostentar",
-    "otimismo",
-    "ousadia",
-    "outono",
-    "outubro",
-    "ouvido",
-    "ovelha",
-    "ovular",
-    "oxidar",
-    "oxigenar",
-    "pacato",
-    "paciente",
-    "pacote",
-    "pactuar",
-    "padaria",
-    "padrinho",
-    "pagar",
-    "pagode",
-    "painel",
-    "pairar",
-    "paisagem",
-    "palavra",
-    "palestra",
-    "palheta",
-    "palito",
-    "palmada",
-    "palpitar",
-    "pancada",
-    "panela",
-    "panfleto",
-    "panqueca",
-    "pantanal",
-    "papagaio",
-    "papelada",
-    "papiro",
-    "parafina",
-    "parcial",
-    "pardal",
-    "parede",
-    "partida",
-    "pasmo",
-    "passado",
-    "pastel",
-    "patamar",
-    "patente",
-    "patinar",
-    "patrono",
-    "paulada",
-    "pausar",
-    "peculiar",
-    "pedalar",
-    "pedestre",
-    "pediatra",
-    "pedra",
-    "pegada",
-    "peitoral",
-    "peixe",
-    "pele",
-    "pelicano",
-    "penca",
-    "pendurar",
-    "peneira",
-    "penhasco",
-    "pensador",
-    "pente",
-    "perceber",
-    "perfeito",
-    "pergunta",
-    "perito",
-    "permitir",
-    "perna",
-    "perplexo",
-    "persiana",
-    "pertence",
-    "peruca",
-    "pescado",
-    "pesquisa",
-    "pessoa",
-    "petiscar",
-    "piada",
-    "picado",
-    "piedade",
-    "pigmento",
-    "pilastra",
-    "pilhado",
-    "pilotar",
-    "pimenta",
-    "pincel",
-    "pinguim",
-    "pinha",
-    "pinote",
-    "pintar",
-    "pioneiro",
-    "pipoca",
-    "piquete",
-    "piranha",
-    "pires",
-    "pirueta",
-    "piscar",
-    "pistola",
-    "pitanga",
-    "pivete",
-    "planta",
-    "plaqueta",
-    "platina",
-    "plebeu",
-    "plumagem",
-    "pluvial",
-    "pneu",
-    "poda",
-    "poeira",
-    "poetisa",
-    "polegada",
-    "policiar",
-    "poluente",
-    "polvilho",
-    "pomar",
-    "pomba",
-    "ponderar",
-    "pontaria",
-    "populoso",
-    "porta",
-    "possuir",
-    "postal",
-    "pote",
-    "poupar",
-    "pouso",
-    "povoar",
-    "praia",
-    "prancha",
-    "prato",
-    "praxe",
-    "prece",
-    "predador",
-    "prefeito",
-    "premiar",
-    "prensar",
-    "preparar",
-    "presilha",
-    "pretexto",
-    "prevenir",
-    "prezar",
-    "primata",
-    "princesa",
-    "prisma",
-    "privado",
-    "processo",
-    "produto",
-    "profeta",
-    "proibido",
-    "projeto",
-    "prometer",
-    "propagar",
-    "prosa",
-    "protetor",
-    "provador",
-    "publicar",
-    "pudim",
-    "pular",
-    "pulmonar",
-    "pulseira",
-    "punhal",
-    "punir",
-    "pupilo",
-    "pureza",
-    "puxador",
-    "quadra",
-    "quantia",
-    "quarto",
-    "quase",
-    "quebrar",
-    "queda",
-    "queijo",
-    "quente",
-    "querido",
-    "quimono",
-    "quina",
-    "quiosque",
-    "rabanada",
-    "rabisco",
-    "rachar",
-    "racionar",
-    "radial",
-    "raiar",
-    "rainha",
-    "raio",
-    "raiva",
-    "rajada",
-    "ralado",
-    "ramal",
-    "ranger",
-    "ranhura",
-    "rapadura",
-    "rapel",
-    "rapidez",
-    "raposa",
-    "raquete",
-    "raridade",
-    "rasante",
-    "rascunho",
-    "rasgar",
-    "raspador",
-    "rasteira",
-    "rasurar",
-    "ratazana",
-    "ratoeira",
-    "realeza",
-    "reanimar",
-    "reaver",
-    "rebaixar",
-    "rebelde",
-    "rebolar",
-    "recado",
-    "recente",
-    "recheio",
-    "recibo",
-    "recordar",
-    "recrutar",
-    "recuar",
-    "rede",
-    "redimir",
-    "redonda",
-    "reduzida",
-    "reenvio",
-    "refinar",
-    "refletir",
-    "refogar",
-    "refresco",
-    "refugiar",
-    "regalia",
-    "regime",
-    "regra",
-    "reinado",
-    "reitor",
-    "rejeitar",
-    "relativo",
-    "remador",
-    "remendo",
-    "remorso",
-    "renovado",
-    "reparo",
-    "repelir",
-    "repleto",
-    "repolho",
-    "represa",
-    "repudiar",
-    "requerer",
-    "resenha",
-    "resfriar",
-    "resgatar",
-    "residir",
-    "resolver",
-    "respeito",
-    "ressaca",
-    "restante",
-    "resumir",
-    "retalho",
-    "reter",
-    "retirar",
-    "retomada",
-    "retratar",
-    "revelar",
-    "revisor",
-    "revolta",
-    "riacho",
-    "rica",
-    "rigidez",
-    "rigoroso",
-    "rimar",
-    "ringue",
-    "risada",
-    "risco",
-    "risonho",
-    "robalo",
-    "rochedo",
-    "rodada",
-    "rodeio",
-    "rodovia",
-    "roedor",
-    "roleta",
-    "romano",
-    "roncar",
-    "rosado",
-    "roseira",
-    "rosto",
-    "rota",
-    "roteiro",
-    "rotina",
-    "rotular",
-    "rouco",
-    "roupa",
-    "roxo",
-    "rubro",
-    "rugido",
-    "rugoso",
-    "ruivo",
-    "rumo",
-    "rupestre",
-    "russo",
-    "sabor",
-    "saciar",
-    "sacola",
-    "sacudir",
-    "sadio",
-    "safira",
-    "saga",
-    "sagrada",
-    "saibro",
-    "salada",
-    "saleiro",
-    "salgado",
-    "saliva",
-    "salpicar",
-    "salsicha",
-    "saltar",
-    "salvador",
-    "sambar",
-    "samurai",
-    "sanar",
-    "sanfona",
-    "sangue",
-    "sanidade",
-    "sapato",
-    "sarda",
-    "sargento",
-    "sarjeta",
-    "saturar",
-    "saudade",
-    "saxofone",
-    "sazonal",
-    "secar",
-    "secular",
-    "seda",
-    "sedento",
-    "sediado",
-    "sedoso",
-    "sedutor",
-    "segmento",
-    "segredo",
-    "segundo",
-    "seiva",
-    "seleto",
-    "selvagem",
-    "semanal",
-    "semente",
-    "senador",
-    "senhor",
-    "sensual",
-    "sentado",
-    "separado",
-    "sereia",
-    "seringa",
-    "serra",
-    "servo",
-    "setembro",
-    "setor",
-    "sigilo",
-    "silhueta",
-    "silicone",
-    "simetria",
-    "simpatia",
-    "simular",
-    "sinal",
-    "sincero",
-    "singular",
-    "sinopse",
-    "sintonia",
-    "sirene",
-    "siri",
-    "situado",
-    "soberano",
-    "sobra",
-    "socorro",
-    "sogro",
-    "soja",
-    "solda",
-    "soletrar",
-    "solteiro",
-    "sombrio",
-    "sonata",
-    "sondar",
-    "sonegar",
-    "sonhador",
-    "sono",
-    "soprano",
-    "soquete",
-    "sorrir",
-    "sorteio",
-    "sossego",
-    "sotaque",
-    "soterrar",
-    "sovado",
-    "sozinho",
-    "suavizar",
-    "subida",
-    "submerso",
-    "subsolo",
-    "subtrair",
-    "sucata",
-    "sucesso",
-    "suco",
-    "sudeste",
-    "sufixo",
-    "sugador",
-    "sugerir",
-    "sujeito",
-    "sulfato",
-    "sumir",
-    "suor",
-    "superior",
-    "suplicar",
-    "suposto",
-    "suprimir",
-    "surdina",
-    "surfista",
-    "surpresa",
-    "surreal",
-    "surtir",
-    "suspiro",
-    "sustento",
-    "tabela",
-    "tablete",
-    "tabuada",
-    "tacho",
-    "tagarela",
-    "talher",
-    "talo",
-    "talvez",
-    "tamanho",
-    "tamborim",
-    "tampa",
-    "tangente",
-    "tanto",
-    "tapar",
-    "tapioca",
-    "tardio",
-    "tarefa",
-    "tarja",
-    "tarraxa",
-    "tatuagem",
-    "taurino",
-    "taxativo",
-    "taxista",
-    "teatral",
-    "tecer",
-    "tecido",
-    "teclado",
-    "tedioso",
-    "teia",
-    "teimar",
-    "telefone",
-    "telhado",
-    "tempero",
-    "tenente",
-    "tensor",
-    "tentar",
-    "termal",
-    "terno",
-    "terreno",
-    "tese",
-    "tesoura",
-    "testado",
-    "teto",
-    "textura",
-    "texugo",
-    "tiara",
-    "tigela",
-    "tijolo",
-    "timbrar",
-    "timidez",
-    "tingido",
-    "tinteiro",
-    "tiragem",
-    "titular",
-    "toalha",
-    "tocha",
-    "tolerar",
-    "tolice",
-    "tomada",
-    "tomilho",
-    "tonel",
-    "tontura",
-    "topete",
-    "tora",
-    "torcido",
-    "torneio",
-    "torque",
-    "torrada",
-    "torto",
-    "tostar",
-    "touca",
-    "toupeira",
-    "toxina",
-    "trabalho",
-    "tracejar",
-    "tradutor",
-    "trafegar",
-    "trajeto",
-    "trama",
-    "trancar",
-    "trapo",
-    "traseiro",
-    "tratador",
-    "travar",
-    "treino",
-    "tremer",
-    "trepidar",
-    "trevo",
-    "triagem",
-    "tribo",
-    "triciclo",
-    "tridente",
-    "trilogia",
-    "trindade",
-    "triplo",
-    "triturar",
-    "triunfal",
-    "trocar",
-    "trombeta",
-    "trova",
-    "trunfo",
-    "truque",
-    "tubular",
-    "tucano",
-    "tudo",
-    "tulipa",
-    "tupi",
-    "turbo",
-    "turma",
-    "turquesa",
-    "tutelar",
-    "tutorial",
-    "uivar",
-    "umbigo",
-    "unha",
-    "unidade",
-    "uniforme",
-    "urologia",
-    "urso",
-    "urtiga",
-    "urubu",
-    "usado",
-    "usina",
-    "usufruir",
-    "vacina",
-    "vadiar",
-    "vagaroso",
-    "vaidoso",
-    "vala",
-    "valente",
-    "validade",
-    "valores",
-    "vantagem",
-    "vaqueiro",
-    "varanda",
-    "vareta",
-    "varrer",
-    "vascular",
-    "vasilha",
-    "vassoura",
-    "vazar",
-    "vazio",
-    "veado",
-    "vedar",
-    "vegetar",
-    "veicular",
-    "veleiro",
-    "velhice",
-    "veludo",
-    "vencedor",
-    "vendaval",
-    "venerar",
-    "ventre",
-    "verbal",
-    "verdade",
-    "vereador",
-    "vergonha",
-    "vermelho",
-    "verniz",
-    "versar",
-    "vertente",
-    "vespa",
-    "vestido",
-    "vetorial",
-    "viaduto",
-    "viagem",
-    "viajar",
-    "viatura",
-    "vibrador",
-    "videira",
-    "vidraria",
-    "viela",
-    "viga",
-    "vigente",
-    "vigiar",
-    "vigorar",
-    "vilarejo",
-    "vinco",
-    "vinheta",
-    "vinil",
-    "violeta",
-    "virada",
-    "virtude",
-    "visitar",
-    "visto",
-    "vitral",
-    "viveiro",
-    "vizinho",
-    "voador",
-    "voar",
-    "vogal",
-    "volante",
-    "voleibol",
-    "voltagem",
-    "volumoso",
-    "vontade",
-    "vulto",
-    "vuvuzela",
-    "xadrez",
-    "xarope",
-    "xeque",
-    "xeretar",
-    "xerife",
-    "xingar",
-    "zangado",
-    "zarpar",
-    "zebu",
-    "zelador",
-    "zombar",
-    "zoologia",
-    "zumbido"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/zh_simplified.rs b/networks/monero/wallet/polyseed/src/words/zh_simplified.rs
deleted file mode 100644
index 50d2b586..00000000
--- a/networks/monero/wallet/polyseed/src/words/zh_simplified.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "的",
-    "一",
-    "是",
-    "在",
-    "不",
-    "了",
-    "有",
-    "和",
-    "人",
-    "这",
-    "中",
-    "大",
-    "为",
-    "上",
-    "个",
-    "国",
-    "我",
-    "以",
-    "要",
-    "他",
-    "时",
-    "来",
-    "用",
-    "们",
-    "生",
-    "到",
-    "作",
-    "地",
-    "于",
-    "出",
-    "就",
-    "分",
-    "对",
-    "成",
-    "会",
-    "可",
-    "主",
-    "发",
-    "年",
-    "动",
-    "同",
-    "工",
-    "也",
-    "能",
-    "下",
-    "过",
-    "子",
-    "说",
-    "产",
-    "种",
-    "面",
-    "而",
-    "方",
-    "后",
-    "多",
-    "定",
-    "行",
-    "学",
-    "法",
-    "所",
-    "民",
-    "得",
-    "经",
-    "十",
-    "三",
-    "之",
-    "进",
-    "着",
-    "等",
-    "部",
-    "度",
-    "家",
-    "电",
-    "力",
-    "里",
-    "如",
-    "水",
-    "化",
-    "高",
-    "自",
-    "二",
-    "理",
-    "起",
-    "小",
-    "物",
-    "现",
-    "实",
-    "加",
-    "量",
-    "都",
-    "两",
-    "体",
-    "制",
-    "机",
-    "当",
-    "使",
-    "点",
-    "从",
-    "业",
-    "本",
-    "去",
-    "把",
-    "性",
-    "好",
-    "应",
-    "开",
-    "它",
-    "合",
-    "还",
-    "因",
-    "由",
-    "其",
-    "些",
-    "然",
-    "前",
-    "外",
-    "天",
-    "政",
-    "四",
-    "日",
-    "那",
-    "社",
-    "义",
-    "事",
-    "平",
-    "形",
-    "相",
-    "全",
-    "表",
-    "间",
-    "样",
-    "与",
-    "关",
-    "各",
-    "重",
-    "新",
-    "线",
-    "内",
-    "数",
-    "正",
-    "心",
-    "反",
-    "你",
-    "明",
-    "看",
-    "原",
-    "又",
-    "么",
-    "利",
-    "比",
-    "或",
-    "但",
-    "质",
-    "气",
-    "第",
-    "向",
-    "道",
-    "命",
-    "此",
-    "变",
-    "条",
-    "只",
-    "没",
-    "结",
-    "解",
-    "问",
-    "意",
-    "建",
-    "月",
-    "公",
-    "无",
-    "系",
-    "军",
-    "很",
-    "情",
-    "者",
-    "最",
-    "立",
-    "代",
-    "想",
-    "已",
-    "通",
-    "并",
-    "提",
-    "直",
-    "题",
-    "党",
-    "程",
-    "展",
-    "五",
-    "果",
-    "料",
-    "象",
-    "员",
-    "革",
-    "位",
-    "入",
-    "常",
-    "文",
-    "总",
-    "次",
-    "品",
-    "式",
-    "活",
-    "设",
-    "及",
-    "管",
-    "特",
-    "件",
-    "长",
-    "求",
-    "老",
-    "头",
-    "基",
-    "资",
-    "边",
-    "流",
-    "路",
-    "级",
-    "少",
-    "图",
-    "山",
-    "统",
-    "接",
-    "知",
-    "较",
-    "将",
-    "组",
-    "见",
-    "计",
-    "别",
-    "她",
-    "手",
-    "角",
-    "期",
-    "根",
-    "论",
-    "运",
-    "农",
-    "指",
-    "几",
-    "九",
-    "区",
-    "强",
-    "放",
-    "决",
-    "西",
-    "被",
-    "干",
-    "做",
-    "必",
-    "战",
-    "先",
-    "回",
-    "则",
-    "任",
-    "取",
-    "据",
-    "处",
-    "队",
-    "南",
-    "给",
-    "色",
-    "光",
-    "门",
-    "即",
-    "保",
-    "治",
-    "北",
-    "造",
-    "百",
-    "规",
-    "热",
-    "领",
-    "七",
-    "海",
-    "口",
-    "东",
-    "导",
-    "器",
-    "压",
-    "志",
-    "世",
-    "金",
-    "增",
-    "争",
-    "济",
-    "阶",
-    "油",
-    "思",
-    "术",
-    "极",
-    "交",
-    "受",
-    "联",
-    "什",
-    "认",
-    "六",
-    "共",
-    "权",
-    "收",
-    "证",
-    "改",
-    "清",
-    "美",
-    "再",
-    "采",
-    "转",
-    "更",
-    "单",
-    "风",
-    "切",
-    "打",
-    "白",
-    "教",
-    "速",
-    "花",
-    "带",
-    "安",
-    "场",
-    "身",
-    "车",
-    "例",
-    "真",
-    "务",
-    "具",
-    "万",
-    "每",
-    "目",
-    "至",
-    "达",
-    "走",
-    "积",
-    "示",
-    "议",
-    "声",
-    "报",
-    "斗",
-    "完",
-    "类",
-    "八",
-    "离",
-    "华",
-    "名",
-    "确",
-    "才",
-    "科",
-    "张",
-    "信",
-    "马",
-    "节",
-    "话",
-    "米",
-    "整",
-    "空",
-    "元",
-    "况",
-    "今",
-    "集",
-    "温",
-    "传",
-    "土",
-    "许",
-    "步",
-    "群",
-    "广",
-    "石",
-    "记",
-    "需",
-    "段",
-    "研",
-    "界",
-    "拉",
-    "林",
-    "律",
-    "叫",
-    "且",
-    "究",
-    "观",
-    "越",
-    "织",
-    "装",
-    "影",
-    "算",
-    "低",
-    "持",
-    "音",
-    "众",
-    "书",
-    "布",
-    "复",
-    "容",
-    "儿",
-    "须",
-    "际",
-    "商",
-    "非",
-    "验",
-    "连",
-    "断",
-    "深",
-    "难",
-    "近",
-    "矿",
-    "千",
-    "周",
-    "委",
-    "素",
-    "技",
-    "备",
-    "半",
-    "办",
-    "青",
-    "省",
-    "列",
-    "习",
-    "响",
-    "约",
-    "支",
-    "般",
-    "史",
-    "感",
-    "劳",
-    "便",
-    "团",
-    "往",
-    "酸",
-    "历",
-    "市",
-    "克",
-    "何",
-    "除",
-    "消",
-    "构",
-    "府",
-    "称",
-    "太",
-    "准",
-    "精",
-    "值",
-    "号",
-    "率",
-    "族",
-    "维",
-    "划",
-    "选",
-    "标",
-    "写",
-    "存",
-    "候",
-    "毛",
-    "亲",
-    "快",
-    "效",
-    "斯",
-    "院",
-    "查",
-    "江",
-    "型",
-    "眼",
-    "王",
-    "按",
-    "格",
-    "养",
-    "易",
-    "置",
-    "派",
-    "层",
-    "片",
-    "始",
-    "却",
-    "专",
-    "状",
-    "育",
-    "厂",
-    "京",
-    "识",
-    "适",
-    "属",
-    "圆",
-    "包",
-    "火",
-    "住",
-    "调",
-    "满",
-    "县",
-    "局",
-    "照",
-    "参",
-    "红",
-    "细",
-    "引",
-    "听",
-    "该",
-    "铁",
-    "价",
-    "严",
-    "首",
-    "底",
-    "液",
-    "官",
-    "德",
-    "随",
-    "病",
-    "苏",
-    "失",
-    "尔",
-    "死",
-    "讲",
-    "配",
-    "女",
-    "黄",
-    "推",
-    "显",
-    "谈",
-    "罪",
-    "神",
-    "艺",
-    "呢",
-    "席",
-    "含",
-    "企",
-    "望",
-    "密",
-    "批",
-    "营",
-    "项",
-    "防",
-    "举",
-    "球",
-    "英",
-    "氧",
-    "势",
-    "告",
-    "李",
-    "台",
-    "落",
-    "木",
-    "帮",
-    "轮",
-    "破",
-    "亚",
-    "师",
-    "围",
-    "注",
-    "远",
-    "字",
-    "材",
-    "排",
-    "供",
-    "河",
-    "态",
-    "封",
-    "另",
-    "施",
-    "减",
-    "树",
-    "溶",
-    "怎",
-    "止",
-    "案",
-    "言",
-    "士",
-    "均",
-    "武",
-    "固",
-    "叶",
-    "鱼",
-    "波",
-    "视",
-    "仅",
-    "费",
-    "紧",
-    "爱",
-    "左",
-    "章",
-    "早",
-    "朝",
-    "害",
-    "续",
-    "轻",
-    "服",
-    "试",
-    "食",
-    "充",
-    "兵",
-    "源",
-    "判",
-    "护",
-    "司",
-    "足",
-    "某",
-    "练",
-    "差",
-    "致",
-    "板",
-    "田",
-    "降",
-    "黑",
-    "犯",
-    "负",
-    "击",
-    "范",
-    "继",
-    "兴",
-    "似",
-    "余",
-    "坚",
-    "曲",
-    "输",
-    "修",
-    "故",
-    "城",
-    "夫",
-    "够",
-    "送",
-    "笔",
-    "船",
-    "占",
-    "右",
-    "财",
-    "吃",
-    "富",
-    "春",
-    "职",
-    "觉",
-    "汉",
-    "画",
-    "功",
-    "巴",
-    "跟",
-    "虽",
-    "杂",
-    "飞",
-    "检",
-    "吸",
-    "助",
-    "升",
-    "阳",
-    "互",
-    "初",
-    "创",
-    "抗",
-    "考",
-    "投",
-    "坏",
-    "策",
-    "古",
-    "径",
-    "换",
-    "未",
-    "跑",
-    "留",
-    "钢",
-    "曾",
-    "端",
-    "责",
-    "站",
-    "简",
-    "述",
-    "钱",
-    "副",
-    "尽",
-    "帝",
-    "射",
-    "草",
-    "冲",
-    "承",
-    "独",
-    "令",
-    "限",
-    "阿",
-    "宣",
-    "环",
-    "双",
-    "请",
-    "超",
-    "微",
-    "让",
-    "控",
-    "州",
-    "良",
-    "轴",
-    "找",
-    "否",
-    "纪",
-    "益",
-    "依",
-    "优",
-    "顶",
-    "础",
-    "载",
-    "倒",
-    "房",
-    "突",
-    "坐",
-    "粉",
-    "敌",
-    "略",
-    "客",
-    "袁",
-    "冷",
-    "胜",
-    "绝",
-    "析",
-    "块",
-    "剂",
-    "测",
-    "丝",
-    "协",
-    "诉",
-    "念",
-    "陈",
-    "仍",
-    "罗",
-    "盐",
-    "友",
-    "洋",
-    "错",
-    "苦",
-    "夜",
-    "刑",
-    "移",
-    "频",
-    "逐",
-    "靠",
-    "混",
-    "母",
-    "短",
-    "皮",
-    "终",
-    "聚",
-    "汽",
-    "村",
-    "云",
-    "哪",
-    "既",
-    "距",
-    "卫",
-    "停",
-    "烈",
-    "央",
-    "察",
-    "烧",
-    "迅",
-    "境",
-    "若",
-    "印",
-    "洲",
-    "刻",
-    "括",
-    "激",
-    "孔",
-    "搞",
-    "甚",
-    "室",
-    "待",
-    "核",
-    "校",
-    "散",
-    "侵",
-    "吧",
-    "甲",
-    "游",
-    "久",
-    "菜",
-    "味",
-    "旧",
-    "模",
-    "湖",
-    "货",
-    "损",
-    "预",
-    "阻",
-    "毫",
-    "普",
-    "稳",
-    "乙",
-    "妈",
-    "植",
-    "息",
-    "扩",
-    "银",
-    "语",
-    "挥",
-    "酒",
-    "守",
-    "拿",
-    "序",
-    "纸",
-    "医",
-    "缺",
-    "雨",
-    "吗",
-    "针",
-    "刘",
-    "啊",
-    "急",
-    "唱",
-    "误",
-    "训",
-    "愿",
-    "审",
-    "附",
-    "获",
-    "茶",
-    "鲜",
-    "粮",
-    "斤",
-    "孩",
-    "脱",
-    "硫",
-    "肥",
-    "善",
-    "龙",
-    "演",
-    "父",
-    "渐",
-    "血",
-    "欢",
-    "械",
-    "掌",
-    "歌",
-    "沙",
-    "刚",
-    "攻",
-    "谓",
-    "盾",
-    "讨",
-    "晚",
-    "粒",
-    "乱",
-    "燃",
-    "矛",
-    "乎",
-    "杀",
-    "药",
-    "宁",
-    "鲁",
-    "贵",
-    "钟",
-    "煤",
-    "读",
-    "班",
-    "伯",
-    "香",
-    "介",
-    "迫",
-    "句",
-    "丰",
-    "培",
-    "握",
-    "兰",
-    "担",
-    "弦",
-    "蛋",
-    "沉",
-    "假",
-    "穿",
-    "执",
-    "答",
-    "乐",
-    "谁",
-    "顺",
-    "烟",
-    "缩",
-    "征",
-    "脸",
-    "喜",
-    "松",
-    "脚",
-    "困",
-    "异",
-    "免",
-    "背",
-    "星",
-    "福",
-    "买",
-    "染",
-    "井",
-    "概",
-    "慢",
-    "怕",
-    "磁",
-    "倍",
-    "祖",
-    "皇",
-    "促",
-    "静",
-    "补",
-    "评",
-    "翻",
-    "肉",
-    "践",
-    "尼",
-    "衣",
-    "宽",
-    "扬",
-    "棉",
-    "希",
-    "伤",
-    "操",
-    "垂",
-    "秋",
-    "宜",
-    "氢",
-    "套",
-    "督",
-    "振",
-    "架",
-    "亮",
-    "末",
-    "宪",
-    "庆",
-    "编",
-    "牛",
-    "触",
-    "映",
-    "雷",
-    "销",
-    "诗",
-    "座",
-    "居",
-    "抓",
-    "裂",
-    "胞",
-    "呼",
-    "娘",
-    "景",
-    "威",
-    "绿",
-    "晶",
-    "厚",
-    "盟",
-    "衡",
-    "鸡",
-    "孙",
-    "延",
-    "危",
-    "胶",
-    "屋",
-    "乡",
-    "临",
-    "陆",
-    "顾",
-    "掉",
-    "呀",
-    "灯",
-    "岁",
-    "措",
-    "束",
-    "耐",
-    "剧",
-    "玉",
-    "赵",
-    "跳",
-    "哥",
-    "季",
-    "课",
-    "凯",
-    "胡",
-    "额",
-    "款",
-    "绍",
-    "卷",
-    "齐",
-    "伟",
-    "蒸",
-    "殖",
-    "永",
-    "宗",
-    "苗",
-    "川",
-    "炉",
-    "岩",
-    "弱",
-    "零",
-    "杨",
-    "奏",
-    "沿",
-    "露",
-    "杆",
-    "探",
-    "滑",
-    "镇",
-    "饭",
-    "浓",
-    "航",
-    "怀",
-    "赶",
-    "库",
-    "夺",
-    "伊",
-    "灵",
-    "税",
-    "途",
-    "灭",
-    "赛",
-    "归",
-    "召",
-    "鼓",
-    "播",
-    "盘",
-    "裁",
-    "险",
-    "康",
-    "唯",
-    "录",
-    "菌",
-    "纯",
-    "借",
-    "糖",
-    "盖",
-    "横",
-    "符",
-    "私",
-    "努",
-    "堂",
-    "域",
-    "枪",
-    "润",
-    "幅",
-    "哈",
-    "竟",
-    "熟",
-    "虫",
-    "泽",
-    "脑",
-    "壤",
-    "碳",
-    "欧",
-    "遍",
-    "侧",
-    "寨",
-    "敢",
-    "彻",
-    "虑",
-    "斜",
-    "薄",
-    "庭",
-    "纳",
-    "弹",
-    "饲",
-    "伸",
-    "折",
-    "麦",
-    "湿",
-    "暗",
-    "荷",
-    "瓦",
-    "塞",
-    "床",
-    "筑",
-    "恶",
-    "户",
-    "访",
-    "塔",
-    "奇",
-    "透",
-    "梁",
-    "刀",
-    "旋",
-    "迹",
-    "卡",
-    "氯",
-    "遇",
-    "份",
-    "毒",
-    "泥",
-    "退",
-    "洗",
-    "摆",
-    "灰",
-    "彩",
-    "卖",
-    "耗",
-    "夏",
-    "择",
-    "忙",
-    "铜",
-    "献",
-    "硬",
-    "予",
-    "繁",
-    "圈",
-    "雪",
-    "函",
-    "亦",
-    "抽",
-    "篇",
-    "阵",
-    "阴",
-    "丁",
-    "尺",
-    "追",
-    "堆",
-    "雄",
-    "迎",
-    "泛",
-    "爸",
-    "楼",
-    "避",
-    "谋",
-    "吨",
-    "野",
-    "猪",
-    "旗",
-    "累",
-    "偏",
-    "典",
-    "馆",
-    "索",
-    "秦",
-    "脂",
-    "潮",
-    "爷",
-    "豆",
-    "忽",
-    "托",
-    "惊",
-    "塑",
-    "遗",
-    "愈",
-    "朱",
-    "替",
-    "纤",
-    "粗",
-    "倾",
-    "尚",
-    "痛",
-    "楚",
-    "谢",
-    "奋",
-    "购",
-    "磨",
-    "君",
-    "池",
-    "旁",
-    "碎",
-    "骨",
-    "监",
-    "捕",
-    "弟",
-    "暴",
-    "割",
-    "贯",
-    "殊",
-    "释",
-    "词",
-    "亡",
-    "壁",
-    "顿",
-    "宝",
-    "午",
-    "尘",
-    "闻",
-    "揭",
-    "炮",
-    "残",
-    "冬",
-    "桥",
-    "妇",
-    "警",
-    "综",
-    "招",
-    "吴",
-    "付",
-    "浮",
-    "遭",
-    "徐",
-    "您",
-    "摇",
-    "谷",
-    "赞",
-    "箱",
-    "隔",
-    "订",
-    "男",
-    "吹",
-    "园",
-    "纷",
-    "唐",
-    "败",
-    "宋",
-    "玻",
-    "巨",
-    "耕",
-    "坦",
-    "荣",
-    "闭",
-    "湾",
-    "键",
-    "凡",
-    "驻",
-    "锅",
-    "救",
-    "恩",
-    "剥",
-    "凝",
-    "碱",
-    "齿",
-    "截",
-    "炼",
-    "麻",
-    "纺",
-    "禁",
-    "废",
-    "盛",
-    "版",
-    "缓",
-    "净",
-    "睛",
-    "昌",
-    "婚",
-    "涉",
-    "筒",
-    "嘴",
-    "插",
-    "岸",
-    "朗",
-    "庄",
-    "街",
-    "藏",
-    "姑",
-    "贸",
-    "腐",
-    "奴",
-    "啦",
-    "惯",
-    "乘",
-    "伙",
-    "恢",
-    "匀",
-    "纱",
-    "扎",
-    "辩",
-    "耳",
-    "彪",
-    "臣",
-    "亿",
-    "璃",
-    "抵",
-    "脉",
-    "秀",
-    "萨",
-    "俄",
-    "网",
-    "舞",
-    "店",
-    "喷",
-    "纵",
-    "寸",
-    "汗",
-    "挂",
-    "洪",
-    "贺",
-    "闪",
-    "柬",
-    "爆",
-    "烯",
-    "津",
-    "稻",
-    "墙",
-    "软",
-    "勇",
-    "像",
-    "滚",
-    "厘",
-    "蒙",
-    "芳",
-    "肯",
-    "坡",
-    "柱",
-    "荡",
-    "腿",
-    "仪",
-    "旅",
-    "尾",
-    "轧",
-    "冰",
-    "贡",
-    "登",
-    "黎",
-    "削",
-    "钻",
-    "勒",
-    "逃",
-    "障",
-    "氨",
-    "郭",
-    "峰",
-    "币",
-    "港",
-    "伏",
-    "轨",
-    "亩",
-    "毕",
-    "擦",
-    "莫",
-    "刺",
-    "浪",
-    "秘",
-    "援",
-    "株",
-    "健",
-    "售",
-    "股",
-    "岛",
-    "甘",
-    "泡",
-    "睡",
-    "童",
-    "铸",
-    "汤",
-    "阀",
-    "休",
-    "汇",
-    "舍",
-    "牧",
-    "绕",
-    "炸",
-    "哲",
-    "磷",
-    "绩",
-    "朋",
-    "淡",
-    "尖",
-    "启",
-    "陷",
-    "柴",
-    "呈",
-    "徒",
-    "颜",
-    "泪",
-    "稍",
-    "忘",
-    "泵",
-    "蓝",
-    "拖",
-    "洞",
-    "授",
-    "镜",
-    "辛",
-    "壮",
-    "锋",
-    "贫",
-    "虚",
-    "弯",
-    "摩",
-    "泰",
-    "幼",
-    "廷",
-    "尊",
-    "窗",
-    "纲",
-    "弄",
-    "隶",
-    "疑",
-    "氏",
-    "宫",
-    "姐",
-    "震",
-    "瑞",
-    "怪",
-    "尤",
-    "琴",
-    "循",
-    "描",
-    "膜",
-    "违",
-    "夹",
-    "腰",
-    "缘",
-    "珠",
-    "穷",
-    "森",
-    "枝",
-    "竹",
-    "沟",
-    "催",
-    "绳",
-    "忆",
-    "邦",
-    "剩",
-    "幸",
-    "浆",
-    "栏",
-    "拥",
-    "牙",
-    "贮",
-    "礼",
-    "滤",
-    "钠",
-    "纹",
-    "罢",
-    "拍",
-    "咱",
-    "喊",
-    "袖",
-    "埃",
-    "勤",
-    "罚",
-    "焦",
-    "潜",
-    "伍",
-    "墨",
-    "欲",
-    "缝",
-    "姓",
-    "刊",
-    "饱",
-    "仿",
-    "奖",
-    "铝",
-    "鬼",
-    "丽",
-    "跨",
-    "默",
-    "挖",
-    "链",
-    "扫",
-    "喝",
-    "袋",
-    "炭",
-    "污",
-    "幕",
-    "诸",
-    "弧",
-    "励",
-    "梅",
-    "奶",
-    "洁",
-    "灾",
-    "舟",
-    "鉴",
-    "苯",
-    "讼",
-    "抱",
-    "毁",
-    "懂",
-    "寒",
-    "智",
-    "埔",
-    "寄",
-    "届",
-    "跃",
-    "渡",
-    "挑",
-    "丹",
-    "艰",
-    "贝",
-    "碰",
-    "拔",
-    "爹",
-    "戴",
-    "码",
-    "梦",
-    "芽",
-    "熔",
-    "赤",
-    "渔",
-    "哭",
-    "敬",
-    "颗",
-    "奔",
-    "铅",
-    "仲",
-    "虎",
-    "稀",
-    "妹",
-    "乏",
-    "珍",
-    "申",
-    "桌",
-    "遵",
-    "允",
-    "隆",
-    "螺",
-    "仓",
-    "魏",
-    "锐",
-    "晓",
-    "氮",
-    "兼",
-    "隐",
-    "碍",
-    "赫",
-    "拨",
-    "忠",
-    "肃",
-    "缸",
-    "牵",
-    "抢",
-    "博",
-    "巧",
-    "壳",
-    "兄",
-    "杜",
-    "讯",
-    "诚",
-    "碧",
-    "祥",
-    "柯",
-    "页",
-    "巡",
-    "矩",
-    "悲",
-    "灌",
-    "龄",
-    "伦",
-    "票",
-    "寻",
-    "桂",
-    "铺",
-    "圣",
-    "恐",
-    "恰",
-    "郑",
-    "趣",
-    "抬",
-    "荒",
-    "腾",
-    "贴",
-    "柔",
-    "滴",
-    "猛",
-    "阔",
-    "辆",
-    "妻",
-    "填",
-    "撤",
-    "储",
-    "签",
-    "闹",
-    "扰",
-    "紫",
-    "砂",
-    "递",
-    "戏",
-    "吊",
-    "陶",
-    "伐",
-    "喂",
-    "疗",
-    "瓶",
-    "婆",
-    "抚",
-    "臂",
-    "摸",
-    "忍",
-    "虾",
-    "蜡",
-    "邻",
-    "胸",
-    "巩",
-    "挤",
-    "偶",
-    "弃",
-    "槽",
-    "劲",
-    "乳",
-    "邓",
-    "吉",
-    "仁",
-    "烂",
-    "砖",
-    "租",
-    "乌",
-    "舰",
-    "伴",
-    "瓜",
-    "浅",
-    "丙",
-    "暂",
-    "燥",
-    "橡",
-    "柳",
-    "迷",
-    "暖",
-    "牌",
-    "秧",
-    "胆",
-    "详",
-    "簧",
-    "踏",
-    "瓷",
-    "谱",
-    "呆",
-    "宾",
-    "糊",
-    "洛",
-    "辉",
-    "愤",
-    "竞",
-    "隙",
-    "怒",
-    "粘",
-    "乃",
-    "绪",
-    "肩",
-    "籍",
-    "敏",
-    "涂",
-    "熙",
-    "皆",
-    "侦",
-    "悬",
-    "掘",
-    "享",
-    "纠",
-    "醒",
-    "狂",
-    "锁",
-    "淀",
-    "恨",
-    "牲",
-    "霸",
-    "爬",
-    "赏",
-    "逆",
-    "玩",
-    "陵",
-    "祝",
-    "秒",
-    "浙",
-    "貌",
-    "役",
-    "彼",
-    "悉",
-    "鸭",
-    "趋",
-    "凤",
-    "晨",
-    "畜",
-    "辈",
-    "秩",
-    "卵",
-    "署",
-    "梯",
-    "炎",
-    "滩",
-    "棋",
-    "驱",
-    "筛",
-    "峡",
-    "冒",
-    "啥",
-    "寿",
-    "译",
-    "浸",
-    "泉",
-    "帽",
-    "迟",
-    "硅",
-    "疆",
-    "贷",
-    "漏",
-    "稿",
-    "冠",
-    "嫩",
-    "胁",
-    "芯",
-    "牢",
-    "叛",
-    "蚀",
-    "奥",
-    "鸣",
-    "岭",
-    "羊",
-    "凭",
-    "串",
-    "塘",
-    "绘",
-    "酵",
-    "融",
-    "盆",
-    "锡",
-    "庙",
-    "筹",
-    "冻",
-    "辅",
-    "摄",
-    "袭",
-    "筋",
-    "拒",
-    "僚",
-    "旱",
-    "钾",
-    "鸟",
-    "漆",
-    "沈",
-    "眉",
-    "疏",
-    "添",
-    "棒",
-    "穗",
-    "硝",
-    "韩",
-    "逼",
-    "扭",
-    "侨",
-    "凉",
-    "挺",
-    "碗",
-    "栽",
-    "炒",
-    "杯",
-    "患",
-    "馏",
-    "劝",
-    "豪",
-    "辽",
-    "勃",
-    "鸿",
-    "旦",
-    "吏",
-    "拜",
-    "狗",
-    "埋",
-    "辊",
-    "掩",
-    "饮",
-    "搬",
-    "骂",
-    "辞",
-    "勾",
-    "扣",
-    "估",
-    "蒋",
-    "绒",
-    "雾",
-    "丈",
-    "朵",
-    "姆",
-    "拟",
-    "宇",
-    "辑",
-    "陕",
-    "雕",
-    "偿",
-    "蓄",
-    "崇",
-    "剪",
-    "倡",
-    "厅",
-    "咬",
-    "驶",
-    "薯",
-    "刷",
-    "斥",
-    "番",
-    "赋",
-    "奉",
-    "佛",
-    "浇",
-    "漫",
-    "曼",
-    "扇",
-    "钙",
-    "桃",
-    "扶",
-    "仔",
-    "返",
-    "俗",
-    "亏",
-    "腔",
-    "鞋",
-    "棱",
-    "覆",
-    "框",
-    "悄",
-    "叔",
-    "撞",
-    "骗",
-    "勘",
-    "旺",
-    "沸",
-    "孤",
-    "吐",
-    "孟",
-    "渠",
-    "屈",
-    "疾",
-    "妙",
-    "惜",
-    "仰",
-    "狠",
-    "胀",
-    "谐",
-    "抛",
-    "霉",
-    "桑",
-    "岗",
-    "嘛",
-    "衰",
-    "盗",
-    "渗",
-    "脏",
-    "赖",
-    "涌",
-    "甜",
-    "曹",
-    "阅",
-    "肌",
-    "哩",
-    "厉",
-    "烃",
-    "纬",
-    "毅",
-    "昨",
-    "伪",
-    "症",
-    "煮",
-    "叹",
-    "钉",
-    "搭",
-    "茎",
-    "笼",
-    "酷",
-    "偷",
-    "弓",
-    "锥",
-    "恒",
-    "杰",
-    "坑",
-    "鼻",
-    "翼",
-    "纶",
-    "叙",
-    "狱",
-    "逮",
-    "罐",
-    "络",
-    "棚",
-    "抑",
-    "膨",
-    "蔬",
-    "寺",
-    "骤",
-    "穆",
-    "冶",
-    "枯",
-    "册",
-    "尸",
-    "凸",
-    "绅",
-    "坯",
-    "牺",
-    "焰",
-    "轰",
-    "欣",
-    "晋",
-    "瘦",
-    "御",
-    "锭",
-    "锦",
-    "丧",
-    "旬",
-    "锻",
-    "垄",
-    "搜",
-    "扑",
-    "邀",
-    "亭",
-    "酯",
-    "迈",
-    "舒",
-    "脆",
-    "酶",
-    "闲",
-    "忧",
-    "酚",
-    "顽",
-    "羽",
-    "涨",
-    "卸",
-    "仗",
-    "陪",
-    "辟",
-    "惩",
-    "杭",
-    "姚",
-    "肚",
-    "捉",
-    "飘",
-    "漂",
-    "昆",
-    "欺",
-    "吾",
-    "郎",
-    "烷",
-    "汁",
-    "呵",
-    "饰",
-    "萧",
-    "雅",
-    "邮",
-    "迁",
-    "燕",
-    "撒",
-    "姻",
-    "赴",
-    "宴",
-    "烦",
-    "债",
-    "帐",
-    "斑",
-    "铃",
-    "旨",
-    "醇",
-    "董",
-    "饼",
-    "雏",
-    "姿",
-    "拌",
-    "傅",
-    "腹",
-    "妥",
-    "揉",
-    "贤",
-    "拆",
-    "歪",
-    "葡",
-    "胺",
-    "丢",
-    "浩",
-    "徽",
-    "昂",
-    "垫",
-    "挡",
-    "览",
-    "贪",
-    "慰",
-    "缴",
-    "汪",
-    "慌",
-    "冯",
-    "诺",
-    "姜",
-    "谊",
-    "凶",
-    "劣",
-    "诬",
-    "耀",
-    "昏",
-    "躺",
-    "盈",
-    "骑",
-    "乔",
-    "溪",
-    "丛",
-    "卢",
-    "抹",
-    "闷",
-    "咨",
-    "刮",
-    "驾",
-    "缆",
-    "悟",
-    "摘",
-    "铒",
-    "掷",
-    "颇",
-    "幻",
-    "柄",
-    "惠",
-    "惨",
-    "佳",
-    "仇",
-    "腊",
-    "窝",
-    "涤",
-    "剑",
-    "瞧",
-    "堡",
-    "泼",
-    "葱",
-    "罩",
-    "霍",
-    "捞",
-    "胎",
-    "苍",
-    "滨",
-    "俩",
-    "捅",
-    "湘",
-    "砍",
-    "霞",
-    "邵",
-    "萄",
-    "疯",
-    "淮",
-    "遂",
-    "熊",
-    "粪",
-    "烘",
-    "宿",
-    "档",
-    "戈",
-    "驳",
-    "嫂",
-    "裕",
-    "徙",
-    "箭",
-    "捐",
-    "肠",
-    "撑",
-    "晒",
-    "辨",
-    "殿",
-    "莲",
-    "摊",
-    "搅",
-    "酱",
-    "屏",
-    "疫",
-    "哀",
-    "蔡",
-    "堵",
-    "沫",
-    "皱",
-    "畅",
-    "叠",
-    "阁",
-    "莱",
-    "敲",
-    "辖",
-    "钩",
-    "痕",
-    "坝",
-    "巷",
-    "饿",
-    "祸",
-    "丘",
-    "玄",
-    "溜",
-    "曰",
-    "逻",
-    "彭",
-    "尝",
-    "卿",
-    "妨",
-    "艇",
-    "吞",
-    "韦",
-    "怨",
-    "矮",
-    "歇"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/polyseed/src/words/zh_traditional.rs b/networks/monero/wallet/polyseed/src/words/zh_traditional.rs
deleted file mode 100644
index 3847f6e6..00000000
--- a/networks/monero/wallet/polyseed/src/words/zh_traditional.rs
+++ /dev/null
@@ -1,2050 +0,0 @@
-&[
-    "的",
-    "一",
-    "是",
-    "在",
-    "不",
-    "了",
-    "有",
-    "和",
-    "人",
-    "這",
-    "中",
-    "大",
-    "為",
-    "上",
-    "個",
-    "國",
-    "我",
-    "以",
-    "要",
-    "他",
-    "時",
-    "來",
-    "用",
-    "們",
-    "生",
-    "到",
-    "作",
-    "地",
-    "於",
-    "出",
-    "就",
-    "分",
-    "對",
-    "成",
-    "會",
-    "可",
-    "主",
-    "發",
-    "年",
-    "動",
-    "同",
-    "工",
-    "也",
-    "能",
-    "下",
-    "過",
-    "子",
-    "說",
-    "產",
-    "種",
-    "面",
-    "而",
-    "方",
-    "後",
-    "多",
-    "定",
-    "行",
-    "學",
-    "法",
-    "所",
-    "民",
-    "得",
-    "經",
-    "十",
-    "三",
-    "之",
-    "進",
-    "著",
-    "等",
-    "部",
-    "度",
-    "家",
-    "電",
-    "力",
-    "裡",
-    "如",
-    "水",
-    "化",
-    "高",
-    "自",
-    "二",
-    "理",
-    "起",
-    "小",
-    "物",
-    "現",
-    "實",
-    "加",
-    "量",
-    "都",
-    "兩",
-    "體",
-    "制",
-    "機",
-    "當",
-    "使",
-    "點",
-    "從",
-    "業",
-    "本",
-    "去",
-    "把",
-    "性",
-    "好",
-    "應",
-    "開",
-    "它",
-    "合",
-    "還",
-    "因",
-    "由",
-    "其",
-    "些",
-    "然",
-    "前",
-    "外",
-    "天",
-    "政",
-    "四",
-    "日",
-    "那",
-    "社",
-    "義",
-    "事",
-    "平",
-    "形",
-    "相",
-    "全",
-    "表",
-    "間",
-    "樣",
-    "與",
-    "關",
-    "各",
-    "重",
-    "新",
-    "線",
-    "內",
-    "數",
-    "正",
-    "心",
-    "反",
-    "你",
-    "明",
-    "看",
-    "原",
-    "又",
-    "麼",
-    "利",
-    "比",
-    "或",
-    "但",
-    "質",
-    "氣",
-    "第",
-    "向",
-    "道",
-    "命",
-    "此",
-    "變",
-    "條",
-    "只",
-    "沒",
-    "結",
-    "解",
-    "問",
-    "意",
-    "建",
-    "月",
-    "公",
-    "無",
-    "系",
-    "軍",
-    "很",
-    "情",
-    "者",
-    "最",
-    "立",
-    "代",
-    "想",
-    "已",
-    "通",
-    "並",
-    "提",
-    "直",
-    "題",
-    "黨",
-    "程",
-    "展",
-    "五",
-    "果",
-    "料",
-    "象",
-    "員",
-    "革",
-    "位",
-    "入",
-    "常",
-    "文",
-    "總",
-    "次",
-    "品",
-    "式",
-    "活",
-    "設",
-    "及",
-    "管",
-    "特",
-    "件",
-    "長",
-    "求",
-    "老",
-    "頭",
-    "基",
-    "資",
-    "邊",
-    "流",
-    "路",
-    "級",
-    "少",
-    "圖",
-    "山",
-    "統",
-    "接",
-    "知",
-    "較",
-    "將",
-    "組",
-    "見",
-    "計",
-    "別",
-    "她",
-    "手",
-    "角",
-    "期",
-    "根",
-    "論",
-    "運",
-    "農",
-    "指",
-    "幾",
-    "九",
-    "區",
-    "強",
-    "放",
-    "決",
-    "西",
-    "被",
-    "幹",
-    "做",
-    "必",
-    "戰",
-    "先",
-    "回",
-    "則",
-    "任",
-    "取",
-    "據",
-    "處",
-    "隊",
-    "南",
-    "給",
-    "色",
-    "光",
-    "門",
-    "即",
-    "保",
-    "治",
-    "北",
-    "造",
-    "百",
-    "規",
-    "熱",
-    "領",
-    "七",
-    "海",
-    "口",
-    "東",
-    "導",
-    "器",
-    "壓",
-    "志",
-    "世",
-    "金",
-    "增",
-    "爭",
-    "濟",
-    "階",
-    "油",
-    "思",
-    "術",
-    "極",
-    "交",
-    "受",
-    "聯",
-    "什",
-    "認",
-    "六",
-    "共",
-    "權",
-    "收",
-    "證",
-    "改",
-    "清",
-    "美",
-    "再",
-    "採",
-    "轉",
-    "更",
-    "單",
-    "風",
-    "切",
-    "打",
-    "白",
-    "教",
-    "速",
-    "花",
-    "帶",
-    "安",
-    "場",
-    "身",
-    "車",
-    "例",
-    "真",
-    "務",
-    "具",
-    "萬",
-    "每",
-    "目",
-    "至",
-    "達",
-    "走",
-    "積",
-    "示",
-    "議",
-    "聲",
-    "報",
-    "鬥",
-    "完",
-    "類",
-    "八",
-    "離",
-    "華",
-    "名",
-    "確",
-    "才",
-    "科",
-    "張",
-    "信",
-    "馬",
-    "節",
-    "話",
-    "米",
-    "整",
-    "空",
-    "元",
-    "況",
-    "今",
-    "集",
-    "溫",
-    "傳",
-    "土",
-    "許",
-    "步",
-    "群",
-    "廣",
-    "石",
-    "記",
-    "需",
-    "段",
-    "研",
-    "界",
-    "拉",
-    "林",
-    "律",
-    "叫",
-    "且",
-    "究",
-    "觀",
-    "越",
-    "織",
-    "裝",
-    "影",
-    "算",
-    "低",
-    "持",
-    "音",
-    "眾",
-    "書",
-    "布",
-    "复",
-    "容",
-    "兒",
-    "須",
-    "際",
-    "商",
-    "非",
-    "驗",
-    "連",
-    "斷",
-    "深",
-    "難",
-    "近",
-    "礦",
-    "千",
-    "週",
-    "委",
-    "素",
-    "技",
-    "備",
-    "半",
-    "辦",
-    "青",
-    "省",
-    "列",
-    "習",
-    "響",
-    "約",
-    "支",
-    "般",
-    "史",
-    "感",
-    "勞",
-    "便",
-    "團",
-    "往",
-    "酸",
-    "歷",
-    "市",
-    "克",
-    "何",
-    "除",
-    "消",
-    "構",
-    "府",
-    "稱",
-    "太",
-    "準",
-    "精",
-    "值",
-    "號",
-    "率",
-    "族",
-    "維",
-    "劃",
-    "選",
-    "標",
-    "寫",
-    "存",
-    "候",
-    "毛",
-    "親",
-    "快",
-    "效",
-    "斯",
-    "院",
-    "查",
-    "江",
-    "型",
-    "眼",
-    "王",
-    "按",
-    "格",
-    "養",
-    "易",
-    "置",
-    "派",
-    "層",
-    "片",
-    "始",
-    "卻",
-    "專",
-    "狀",
-    "育",
-    "廠",
-    "京",
-    "識",
-    "適",
-    "屬",
-    "圓",
-    "包",
-    "火",
-    "住",
-    "調",
-    "滿",
-    "縣",
-    "局",
-    "照",
-    "參",
-    "紅",
-    "細",
-    "引",
-    "聽",
-    "該",
-    "鐵",
-    "價",
-    "嚴",
-    "首",
-    "底",
-    "液",
-    "官",
-    "德",
-    "隨",
-    "病",
-    "蘇",
-    "失",
-    "爾",
-    "死",
-    "講",
-    "配",
-    "女",
-    "黃",
-    "推",
-    "顯",
-    "談",
-    "罪",
-    "神",
-    "藝",
-    "呢",
-    "席",
-    "含",
-    "企",
-    "望",
-    "密",
-    "批",
-    "營",
-    "項",
-    "防",
-    "舉",
-    "球",
-    "英",
-    "氧",
-    "勢",
-    "告",
-    "李",
-    "台",
-    "落",
-    "木",
-    "幫",
-    "輪",
-    "破",
-    "亞",
-    "師",
-    "圍",
-    "注",
-    "遠",
-    "字",
-    "材",
-    "排",
-    "供",
-    "河",
-    "態",
-    "封",
-    "另",
-    "施",
-    "減",
-    "樹",
-    "溶",
-    "怎",
-    "止",
-    "案",
-    "言",
-    "士",
-    "均",
-    "武",
-    "固",
-    "葉",
-    "魚",
-    "波",
-    "視",
-    "僅",
-    "費",
-    "緊",
-    "愛",
-    "左",
-    "章",
-    "早",
-    "朝",
-    "害",
-    "續",
-    "輕",
-    "服",
-    "試",
-    "食",
-    "充",
-    "兵",
-    "源",
-    "判",
-    "護",
-    "司",
-    "足",
-    "某",
-    "練",
-    "差",
-    "致",
-    "板",
-    "田",
-    "降",
-    "黑",
-    "犯",
-    "負",
-    "擊",
-    "范",
-    "繼",
-    "興",
-    "似",
-    "餘",
-    "堅",
-    "曲",
-    "輸",
-    "修",
-    "故",
-    "城",
-    "夫",
-    "夠",
-    "送",
-    "筆",
-    "船",
-    "佔",
-    "右",
-    "財",
-    "吃",
-    "富",
-    "春",
-    "職",
-    "覺",
-    "漢",
-    "畫",
-    "功",
-    "巴",
-    "跟",
-    "雖",
-    "雜",
-    "飛",
-    "檢",
-    "吸",
-    "助",
-    "昇",
-    "陽",
-    "互",
-    "初",
-    "創",
-    "抗",
-    "考",
-    "投",
-    "壞",
-    "策",
-    "古",
-    "徑",
-    "換",
-    "未",
-    "跑",
-    "留",
-    "鋼",
-    "曾",
-    "端",
-    "責",
-    "站",
-    "簡",
-    "述",
-    "錢",
-    "副",
-    "盡",
-    "帝",
-    "射",
-    "草",
-    "衝",
-    "承",
-    "獨",
-    "令",
-    "限",
-    "阿",
-    "宣",
-    "環",
-    "雙",
-    "請",
-    "超",
-    "微",
-    "讓",
-    "控",
-    "州",
-    "良",
-    "軸",
-    "找",
-    "否",
-    "紀",
-    "益",
-    "依",
-    "優",
-    "頂",
-    "礎",
-    "載",
-    "倒",
-    "房",
-    "突",
-    "坐",
-    "粉",
-    "敵",
-    "略",
-    "客",
-    "袁",
-    "冷",
-    "勝",
-    "絕",
-    "析",
-    "塊",
-    "劑",
-    "測",
-    "絲",
-    "協",
-    "訴",
-    "念",
-    "陳",
-    "仍",
-    "羅",
-    "鹽",
-    "友",
-    "洋",
-    "錯",
-    "苦",
-    "夜",
-    "刑",
-    "移",
-    "頻",
-    "逐",
-    "靠",
-    "混",
-    "母",
-    "短",
-    "皮",
-    "終",
-    "聚",
-    "汽",
-    "村",
-    "雲",
-    "哪",
-    "既",
-    "距",
-    "衛",
-    "停",
-    "烈",
-    "央",
-    "察",
-    "燒",
-    "迅",
-    "境",
-    "若",
-    "印",
-    "洲",
-    "刻",
-    "括",
-    "激",
-    "孔",
-    "搞",
-    "甚",
-    "室",
-    "待",
-    "核",
-    "校",
-    "散",
-    "侵",
-    "吧",
-    "甲",
-    "遊",
-    "久",
-    "菜",
-    "味",
-    "舊",
-    "模",
-    "湖",
-    "貨",
-    "損",
-    "預",
-    "阻",
-    "毫",
-    "普",
-    "穩",
-    "乙",
-    "媽",
-    "植",
-    "息",
-    "擴",
-    "銀",
-    "語",
-    "揮",
-    "酒",
-    "守",
-    "拿",
-    "序",
-    "紙",
-    "醫",
-    "缺",
-    "雨",
-    "嗎",
-    "針",
-    "劉",
-    "啊",
-    "急",
-    "唱",
-    "誤",
-    "訓",
-    "願",
-    "審",
-    "附",
-    "獲",
-    "茶",
-    "鮮",
-    "糧",
-    "斤",
-    "孩",
-    "脫",
-    "硫",
-    "肥",
-    "善",
-    "龍",
-    "演",
-    "父",
-    "漸",
-    "血",
-    "歡",
-    "械",
-    "掌",
-    "歌",
-    "沙",
-    "剛",
-    "攻",
-    "謂",
-    "盾",
-    "討",
-    "晚",
-    "粒",
-    "亂",
-    "燃",
-    "矛",
-    "乎",
-    "殺",
-    "藥",
-    "寧",
-    "魯",
-    "貴",
-    "鐘",
-    "煤",
-    "讀",
-    "班",
-    "伯",
-    "香",
-    "介",
-    "迫",
-    "句",
-    "豐",
-    "培",
-    "握",
-    "蘭",
-    "擔",
-    "弦",
-    "蛋",
-    "沉",
-    "假",
-    "穿",
-    "執",
-    "答",
-    "樂",
-    "誰",
-    "順",
-    "煙",
-    "縮",
-    "徵",
-    "臉",
-    "喜",
-    "松",
-    "腳",
-    "困",
-    "異",
-    "免",
-    "背",
-    "星",
-    "福",
-    "買",
-    "染",
-    "井",
-    "概",
-    "慢",
-    "怕",
-    "磁",
-    "倍",
-    "祖",
-    "皇",
-    "促",
-    "靜",
-    "補",
-    "評",
-    "翻",
-    "肉",
-    "踐",
-    "尼",
-    "衣",
-    "寬",
-    "揚",
-    "棉",
-    "希",
-    "傷",
-    "操",
-    "垂",
-    "秋",
-    "宜",
-    "氫",
-    "套",
-    "督",
-    "振",
-    "架",
-    "亮",
-    "末",
-    "憲",
-    "慶",
-    "編",
-    "牛",
-    "觸",
-    "映",
-    "雷",
-    "銷",
-    "詩",
-    "座",
-    "居",
-    "抓",
-    "裂",
-    "胞",
-    "呼",
-    "娘",
-    "景",
-    "威",
-    "綠",
-    "晶",
-    "厚",
-    "盟",
-    "衡",
-    "雞",
-    "孫",
-    "延",
-    "危",
-    "膠",
-    "屋",
-    "鄉",
-    "臨",
-    "陸",
-    "顧",
-    "掉",
-    "呀",
-    "燈",
-    "歲",
-    "措",
-    "束",
-    "耐",
-    "劇",
-    "玉",
-    "趙",
-    "跳",
-    "哥",
-    "季",
-    "課",
-    "凱",
-    "胡",
-    "額",
-    "款",
-    "紹",
-    "卷",
-    "齊",
-    "偉",
-    "蒸",
-    "殖",
-    "永",
-    "宗",
-    "苗",
-    "川",
-    "爐",
-    "岩",
-    "弱",
-    "零",
-    "楊",
-    "奏",
-    "沿",
-    "露",
-    "桿",
-    "探",
-    "滑",
-    "鎮",
-    "飯",
-    "濃",
-    "航",
-    "懷",
-    "趕",
-    "庫",
-    "奪",
-    "伊",
-    "靈",
-    "稅",
-    "途",
-    "滅",
-    "賽",
-    "歸",
-    "召",
-    "鼓",
-    "播",
-    "盤",
-    "裁",
-    "險",
-    "康",
-    "唯",
-    "錄",
-    "菌",
-    "純",
-    "借",
-    "糖",
-    "蓋",
-    "橫",
-    "符",
-    "私",
-    "努",
-    "堂",
-    "域",
-    "槍",
-    "潤",
-    "幅",
-    "哈",
-    "竟",
-    "熟",
-    "蟲",
-    "澤",
-    "腦",
-    "壤",
-    "碳",
-    "歐",
-    "遍",
-    "側",
-    "寨",
-    "敢",
-    "徹",
-    "慮",
-    "斜",
-    "薄",
-    "庭",
-    "納",
-    "彈",
-    "飼",
-    "伸",
-    "折",
-    "麥",
-    "濕",
-    "暗",
-    "荷",
-    "瓦",
-    "塞",
-    "床",
-    "築",
-    "惡",
-    "戶",
-    "訪",
-    "塔",
-    "奇",
-    "透",
-    "梁",
-    "刀",
-    "旋",
-    "跡",
-    "卡",
-    "氯",
-    "遇",
-    "份",
-    "毒",
-    "泥",
-    "退",
-    "洗",
-    "擺",
-    "灰",
-    "彩",
-    "賣",
-    "耗",
-    "夏",
-    "擇",
-    "忙",
-    "銅",
-    "獻",
-    "硬",
-    "予",
-    "繁",
-    "圈",
-    "雪",
-    "函",
-    "亦",
-    "抽",
-    "篇",
-    "陣",
-    "陰",
-    "丁",
-    "尺",
-    "追",
-    "堆",
-    "雄",
-    "迎",
-    "泛",
-    "爸",
-    "樓",
-    "避",
-    "謀",
-    "噸",
-    "野",
-    "豬",
-    "旗",
-    "累",
-    "偏",
-    "典",
-    "館",
-    "索",
-    "秦",
-    "脂",
-    "潮",
-    "爺",
-    "豆",
-    "忽",
-    "托",
-    "驚",
-    "塑",
-    "遺",
-    "愈",
-    "朱",
-    "替",
-    "纖",
-    "粗",
-    "傾",
-    "尚",
-    "痛",
-    "楚",
-    "謝",
-    "奮",
-    "購",
-    "磨",
-    "君",
-    "池",
-    "旁",
-    "碎",
-    "骨",
-    "監",
-    "捕",
-    "弟",
-    "暴",
-    "割",
-    "貫",
-    "殊",
-    "釋",
-    "詞",
-    "亡",
-    "壁",
-    "頓",
-    "寶",
-    "午",
-    "塵",
-    "聞",
-    "揭",
-    "炮",
-    "殘",
-    "冬",
-    "橋",
-    "婦",
-    "警",
-    "綜",
-    "招",
-    "吳",
-    "付",
-    "浮",
-    "遭",
-    "徐",
-    "您",
-    "搖",
-    "谷",
-    "贊",
-    "箱",
-    "隔",
-    "訂",
-    "男",
-    "吹",
-    "園",
-    "紛",
-    "唐",
-    "敗",
-    "宋",
-    "玻",
-    "巨",
-    "耕",
-    "坦",
-    "榮",
-    "閉",
-    "灣",
-    "鍵",
-    "凡",
-    "駐",
-    "鍋",
-    "救",
-    "恩",
-    "剝",
-    "凝",
-    "鹼",
-    "齒",
-    "截",
-    "煉",
-    "麻",
-    "紡",
-    "禁",
-    "廢",
-    "盛",
-    "版",
-    "緩",
-    "淨",
-    "睛",
-    "昌",
-    "婚",
-    "涉",
-    "筒",
-    "嘴",
-    "插",
-    "岸",
-    "朗",
-    "莊",
-    "街",
-    "藏",
-    "姑",
-    "貿",
-    "腐",
-    "奴",
-    "啦",
-    "慣",
-    "乘",
-    "夥",
-    "恢",
-    "勻",
-    "紗",
-    "扎",
-    "辯",
-    "耳",
-    "彪",
-    "臣",
-    "億",
-    "璃",
-    "抵",
-    "脈",
-    "秀",
-    "薩",
-    "俄",
-    "網",
-    "舞",
-    "店",
-    "噴",
-    "縱",
-    "寸",
-    "汗",
-    "掛",
-    "洪",
-    "賀",
-    "閃",
-    "柬",
-    "爆",
-    "烯",
-    "津",
-    "稻",
-    "牆",
-    "軟",
-    "勇",
-    "像",
-    "滾",
-    "厘",
-    "蒙",
-    "芳",
-    "肯",
-    "坡",
-    "柱",
-    "盪",
-    "腿",
-    "儀",
-    "旅",
-    "尾",
-    "軋",
-    "冰",
-    "貢",
-    "登",
-    "黎",
-    "削",
-    "鑽",
-    "勒",
-    "逃",
-    "障",
-    "氨",
-    "郭",
-    "峰",
-    "幣",
-    "港",
-    "伏",
-    "軌",
-    "畝",
-    "畢",
-    "擦",
-    "莫",
-    "刺",
-    "浪",
-    "秘",
-    "援",
-    "株",
-    "健",
-    "售",
-    "股",
-    "島",
-    "甘",
-    "泡",
-    "睡",
-    "童",
-    "鑄",
-    "湯",
-    "閥",
-    "休",
-    "匯",
-    "舍",
-    "牧",
-    "繞",
-    "炸",
-    "哲",
-    "磷",
-    "績",
-    "朋",
-    "淡",
-    "尖",
-    "啟",
-    "陷",
-    "柴",
-    "呈",
-    "徒",
-    "顏",
-    "淚",
-    "稍",
-    "忘",
-    "泵",
-    "藍",
-    "拖",
-    "洞",
-    "授",
-    "鏡",
-    "辛",
-    "壯",
-    "鋒",
-    "貧",
-    "虛",
-    "彎",
-    "摩",
-    "泰",
-    "幼",
-    "廷",
-    "尊",
-    "窗",
-    "綱",
-    "弄",
-    "隸",
-    "疑",
-    "氏",
-    "宮",
-    "姐",
-    "震",
-    "瑞",
-    "怪",
-    "尤",
-    "琴",
-    "循",
-    "描",
-    "膜",
-    "違",
-    "夾",
-    "腰",
-    "緣",
-    "珠",
-    "窮",
-    "森",
-    "枝",
-    "竹",
-    "溝",
-    "催",
-    "繩",
-    "憶",
-    "邦",
-    "剩",
-    "幸",
-    "漿",
-    "欄",
-    "擁",
-    "牙",
-    "貯",
-    "禮",
-    "濾",
-    "鈉",
-    "紋",
-    "罷",
-    "拍",
-    "咱",
-    "喊",
-    "袖",
-    "埃",
-    "勤",
-    "罰",
-    "焦",
-    "潛",
-    "伍",
-    "墨",
-    "欲",
-    "縫",
-    "姓",
-    "刊",
-    "飽",
-    "仿",
-    "獎",
-    "鋁",
-    "鬼",
-    "麗",
-    "跨",
-    "默",
-    "挖",
-    "鏈",
-    "掃",
-    "喝",
-    "袋",
-    "炭",
-    "污",
-    "幕",
-    "諸",
-    "弧",
-    "勵",
-    "梅",
-    "奶",
-    "潔",
-    "災",
-    "舟",
-    "鑑",
-    "苯",
-    "訟",
-    "抱",
-    "毀",
-    "懂",
-    "寒",
-    "智",
-    "埔",
-    "寄",
-    "屆",
-    "躍",
-    "渡",
-    "挑",
-    "丹",
-    "艱",
-    "貝",
-    "碰",
-    "拔",
-    "爹",
-    "戴",
-    "碼",
-    "夢",
-    "芽",
-    "熔",
-    "赤",
-    "漁",
-    "哭",
-    "敬",
-    "顆",
-    "奔",
-    "鉛",
-    "仲",
-    "虎",
-    "稀",
-    "妹",
-    "乏",
-    "珍",
-    "申",
-    "桌",
-    "遵",
-    "允",
-    "隆",
-    "螺",
-    "倉",
-    "魏",
-    "銳",
-    "曉",
-    "氮",
-    "兼",
-    "隱",
-    "礙",
-    "赫",
-    "撥",
-    "忠",
-    "肅",
-    "缸",
-    "牽",
-    "搶",
-    "博",
-    "巧",
-    "殼",
-    "兄",
-    "杜",
-    "訊",
-    "誠",
-    "碧",
-    "祥",
-    "柯",
-    "頁",
-    "巡",
-    "矩",
-    "悲",
-    "灌",
-    "齡",
-    "倫",
-    "票",
-    "尋",
-    "桂",
-    "鋪",
-    "聖",
-    "恐",
-    "恰",
-    "鄭",
-    "趣",
-    "抬",
-    "荒",
-    "騰",
-    "貼",
-    "柔",
-    "滴",
-    "猛",
-    "闊",
-    "輛",
-    "妻",
-    "填",
-    "撤",
-    "儲",
-    "簽",
-    "鬧",
-    "擾",
-    "紫",
-    "砂",
-    "遞",
-    "戲",
-    "吊",
-    "陶",
-    "伐",
-    "餵",
-    "療",
-    "瓶",
-    "婆",
-    "撫",
-    "臂",
-    "摸",
-    "忍",
-    "蝦",
-    "蠟",
-    "鄰",
-    "胸",
-    "鞏",
-    "擠",
-    "偶",
-    "棄",
-    "槽",
-    "勁",
-    "乳",
-    "鄧",
-    "吉",
-    "仁",
-    "爛",
-    "磚",
-    "租",
-    "烏",
-    "艦",
-    "伴",
-    "瓜",
-    "淺",
-    "丙",
-    "暫",
-    "燥",
-    "橡",
-    "柳",
-    "迷",
-    "暖",
-    "牌",
-    "秧",
-    "膽",
-    "詳",
-    "簧",
-    "踏",
-    "瓷",
-    "譜",
-    "呆",
-    "賓",
-    "糊",
-    "洛",
-    "輝",
-    "憤",
-    "競",
-    "隙",
-    "怒",
-    "粘",
-    "乃",
-    "緒",
-    "肩",
-    "籍",
-    "敏",
-    "塗",
-    "熙",
-    "皆",
-    "偵",
-    "懸",
-    "掘",
-    "享",
-    "糾",
-    "醒",
-    "狂",
-    "鎖",
-    "淀",
-    "恨",
-    "牲",
-    "霸",
-    "爬",
-    "賞",
-    "逆",
-    "玩",
-    "陵",
-    "祝",
-    "秒",
-    "浙",
-    "貌",
-    "役",
-    "彼",
-    "悉",
-    "鴨",
-    "趨",
-    "鳳",
-    "晨",
-    "畜",
-    "輩",
-    "秩",
-    "卵",
-    "署",
-    "梯",
-    "炎",
-    "灘",
-    "棋",
-    "驅",
-    "篩",
-    "峽",
-    "冒",
-    "啥",
-    "壽",
-    "譯",
-    "浸",
-    "泉",
-    "帽",
-    "遲",
-    "矽",
-    "疆",
-    "貸",
-    "漏",
-    "稿",
-    "冠",
-    "嫩",
-    "脅",
-    "芯",
-    "牢",
-    "叛",
-    "蝕",
-    "奧",
-    "鳴",
-    "嶺",
-    "羊",
-    "憑",
-    "串",
-    "塘",
-    "繪",
-    "酵",
-    "融",
-    "盆",
-    "錫",
-    "廟",
-    "籌",
-    "凍",
-    "輔",
-    "攝",
-    "襲",
-    "筋",
-    "拒",
-    "僚",
-    "旱",
-    "鉀",
-    "鳥",
-    "漆",
-    "沈",
-    "眉",
-    "疏",
-    "添",
-    "棒",
-    "穗",
-    "硝",
-    "韓",
-    "逼",
-    "扭",
-    "僑",
-    "涼",
-    "挺",
-    "碗",
-    "栽",
-    "炒",
-    "杯",
-    "患",
-    "餾",
-    "勸",
-    "豪",
-    "遼",
-    "勃",
-    "鴻",
-    "旦",
-    "吏",
-    "拜",
-    "狗",
-    "埋",
-    "輥",
-    "掩",
-    "飲",
-    "搬",
-    "罵",
-    "辭",
-    "勾",
-    "扣",
-    "估",
-    "蔣",
-    "絨",
-    "霧",
-    "丈",
-    "朵",
-    "姆",
-    "擬",
-    "宇",
-    "輯",
-    "陝",
-    "雕",
-    "償",
-    "蓄",
-    "崇",
-    "剪",
-    "倡",
-    "廳",
-    "咬",
-    "駛",
-    "薯",
-    "刷",
-    "斥",
-    "番",
-    "賦",
-    "奉",
-    "佛",
-    "澆",
-    "漫",
-    "曼",
-    "扇",
-    "鈣",
-    "桃",
-    "扶",
-    "仔",
-    "返",
-    "俗",
-    "虧",
-    "腔",
-    "鞋",
-    "棱",
-    "覆",
-    "框",
-    "悄",
-    "叔",
-    "撞",
-    "騙",
-    "勘",
-    "旺",
-    "沸",
-    "孤",
-    "吐",
-    "孟",
-    "渠",
-    "屈",
-    "疾",
-    "妙",
-    "惜",
-    "仰",
-    "狠",
-    "脹",
-    "諧",
-    "拋",
-    "黴",
-    "桑",
-    "崗",
-    "嘛",
-    "衰",
-    "盜",
-    "滲",
-    "臟",
-    "賴",
-    "湧",
-    "甜",
-    "曹",
-    "閱",
-    "肌",
-    "哩",
-    "厲",
-    "烴",
-    "緯",
-    "毅",
-    "昨",
-    "偽",
-    "症",
-    "煮",
-    "嘆",
-    "釘",
-    "搭",
-    "莖",
-    "籠",
-    "酷",
-    "偷",
-    "弓",
-    "錐",
-    "恆",
-    "傑",
-    "坑",
-    "鼻",
-    "翼",
-    "綸",
-    "敘",
-    "獄",
-    "逮",
-    "罐",
-    "絡",
-    "棚",
-    "抑",
-    "膨",
-    "蔬",
-    "寺",
-    "驟",
-    "穆",
-    "冶",
-    "枯",
-    "冊",
-    "屍",
-    "凸",
-    "紳",
-    "坯",
-    "犧",
-    "焰",
-    "轟",
-    "欣",
-    "晉",
-    "瘦",
-    "禦",
-    "錠",
-    "錦",
-    "喪",
-    "旬",
-    "鍛",
-    "壟",
-    "搜",
-    "撲",
-    "邀",
-    "亭",
-    "酯",
-    "邁",
-    "舒",
-    "脆",
-    "酶",
-    "閒",
-    "憂",
-    "酚",
-    "頑",
-    "羽",
-    "漲",
-    "卸",
-    "仗",
-    "陪",
-    "闢",
-    "懲",
-    "杭",
-    "姚",
-    "肚",
-    "捉",
-    "飄",
-    "漂",
-    "昆",
-    "欺",
-    "吾",
-    "郎",
-    "烷",
-    "汁",
-    "呵",
-    "飾",
-    "蕭",
-    "雅",
-    "郵",
-    "遷",
-    "燕",
-    "撒",
-    "姻",
-    "赴",
-    "宴",
-    "煩",
-    "債",
-    "帳",
-    "斑",
-    "鈴",
-    "旨",
-    "醇",
-    "董",
-    "餅",
-    "雛",
-    "姿",
-    "拌",
-    "傅",
-    "腹",
-    "妥",
-    "揉",
-    "賢",
-    "拆",
-    "歪",
-    "葡",
-    "胺",
-    "丟",
-    "浩",
-    "徽",
-    "昂",
-    "墊",
-    "擋",
-    "覽",
-    "貪",
-    "慰",
-    "繳",
-    "汪",
-    "慌",
-    "馮",
-    "諾",
-    "姜",
-    "誼",
-    "兇",
-    "劣",
-    "誣",
-    "耀",
-    "昏",
-    "躺",
-    "盈",
-    "騎",
-    "喬",
-    "溪",
-    "叢",
-    "盧",
-    "抹",
-    "悶",
-    "諮",
-    "刮",
-    "駕",
-    "纜",
-    "悟",
-    "摘",
-    "鉺",
-    "擲",
-    "頗",
-    "幻",
-    "柄",
-    "惠",
-    "慘",
-    "佳",
-    "仇",
-    "臘",
-    "窩",
-    "滌",
-    "劍",
-    "瞧",
-    "堡",
-    "潑",
-    "蔥",
-    "罩",
-    "霍",
-    "撈",
-    "胎",
-    "蒼",
-    "濱",
-    "倆",
-    "捅",
-    "湘",
-    "砍",
-    "霞",
-    "邵",
-    "萄",
-    "瘋",
-    "淮",
-    "遂",
-    "熊",
-    "糞",
-    "烘",
-    "宿",
-    "檔",
-    "戈",
-    "駁",
-    "嫂",
-    "裕",
-    "徙",
-    "箭",
-    "捐",
-    "腸",
-    "撐",
-    "曬",
-    "辨",
-    "殿",
-    "蓮",
-    "攤",
-    "攪",
-    "醬",
-    "屏",
-    "疫",
-    "哀",
-    "蔡",
-    "堵",
-    "沫",
-    "皺",
-    "暢",
-    "疊",
-    "閣",
-    "萊",
-    "敲",
-    "轄",
-    "鉤",
-    "痕",
-    "壩",
-    "巷",
-    "餓",
-    "禍",
-    "丘",
-    "玄",
-    "溜",
-    "曰",
-    "邏",
-    "彭",
-    "嘗",
-    "卿",
-    "妨",
-    "艇",
-    "吞",
-    "韋",
-    "怨",
-    "矮",
-    "歇"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/Cargo.toml b/networks/monero/wallet/seed/Cargo.toml
deleted file mode 100644
index ba28ed0c..00000000
--- a/networks/monero/wallet/seed/Cargo.toml
+++ /dev/null
@@ -1,41 +0,0 @@
-[package]
-name = "monero-seed"
-version = "0.1.0"
-description = "Rust implementation of Monero's seed algorithm"
-license = "MIT"
-repository = "https://github.com/serai-dex/serai/tree/develop/networks/monero/wallet/seed"
-authors = ["Luke Parker <lukeparker5132@gmail.com>"]
-edition = "2021"
-rust-version = "1.80"
-
-[package.metadata.docs.rs]
-all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
-
-[lints]
-workspace = true
-
-[dependencies]
-std-shims = { path = "../../../../common/std-shims", version = "^0.1.1", default-features = false }
-
-thiserror = { version = "1", default-features = false, optional = true }
-
-zeroize = { version = "^1.5", default-features = false, features = ["zeroize_derive"] }
-rand_core = { version = "0.6", default-features = false }
-
-curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize"] }
-
-[dev-dependencies]
-hex = { version = "0.4", default-features = false, features = ["std"] }
-monero-primitives = { path = "../../primitives", default-features = false, features = ["std"] }
-
-[features]
-std = [
-  "std-shims/std",
-
-  "thiserror",
-
-  "zeroize/std",
-  "rand_core/std",
-]
-default = ["std"]
diff --git a/networks/monero/wallet/seed/LICENSE b/networks/monero/wallet/seed/LICENSE
deleted file mode 100644
index 91d893c1..00000000
--- a/networks/monero/wallet/seed/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022-2024 Luke Parker
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/networks/monero/wallet/seed/README.md b/networks/monero/wallet/seed/README.md
deleted file mode 100644
index dded4133..00000000
--- a/networks/monero/wallet/seed/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Monero Seeds
-
-Rust implementation of Monero's seed algorithm.
-
-This library is usable under no-std when the `std` feature (on by default) is
-disabled.
-
-### Cargo Features
-
-- `std` (on by default): Enables `std` (and with it, more efficient internal
-  implementations).
diff --git a/networks/monero/wallet/seed/src/lib.rs b/networks/monero/wallet/seed/src/lib.rs
deleted file mode 100644
index 1cbdffa8..00000000
--- a/networks/monero/wallet/seed/src/lib.rs
+++ /dev/null
@@ -1,353 +0,0 @@
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
-#![doc = include_str!("../README.md")]
-#![deny(missing_docs)]
-#![cfg_attr(not(feature = "std"), no_std)]
-
-use core::{ops::Deref, fmt};
-use std_shims::{
-  sync::LazyLock,
-  vec,
-  vec::Vec,
-  string::{String, ToString},
-  collections::HashMap,
-};
-
-use zeroize::{Zeroize, Zeroizing};
-use rand_core::{RngCore, CryptoRng};
-
-use curve25519_dalek::scalar::Scalar;
-
-#[cfg(test)]
-mod tests;
-
-// The amount of words in a seed without a checksum.
-const SEED_LENGTH: usize = 24;
-// The amount of words in a seed with a checksum.
-const SEED_LENGTH_WITH_CHECKSUM: usize = 25;
-
-/// An error when working with a seed.
-#[derive(Clone, Copy, PartialEq, Eq, Debug)]
-#[cfg_attr(feature = "std", derive(thiserror::Error))]
-pub enum SeedError {
-  #[cfg_attr(feature = "std", error("invalid seed"))]
-  /// The seed was invalid.
-  InvalidSeed,
-  /// The checksum did not match the data.
-  #[cfg_attr(feature = "std", error("invalid checksum"))]
-  InvalidChecksum,
-  /// The deprecated English language option was used with a checksum.
-  ///
-  /// The deprecated English language option did not include a checksum.
-  #[cfg_attr(feature = "std", error("deprecated English language option included a checksum"))]
-  DeprecatedEnglishWithChecksum,
-}
-
-/// Language options.
-#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, Zeroize)]
-pub enum Language {
-  /// Chinese language option.
-  Chinese,
-  /// English language option.
-  English,
-  /// Dutch language option.
-  Dutch,
-  /// French language option.
-  French,
-  /// Spanish language option.
-  Spanish,
-  /// German language option.
-  German,
-  /// Italian language option.
-  Italian,
-  /// Portuguese language option.
-  Portuguese,
-  /// Japanese language option.
-  Japanese,
-  /// Russian language option.
-  Russian,
-  /// Esperanto language option.
-  Esperanto,
-  /// Lojban language option.
-  Lojban,
-  /// The original, and deprecated, English language.
-  DeprecatedEnglish,
-}
-
-fn trim(word: &str, len: usize) -> Zeroizing<String> {
-  Zeroizing::new(word.chars().take(len).collect())
-}
-
-struct WordList {
-  word_list: &'static [&'static str],
-  word_map: HashMap<&'static str, usize>,
-  trimmed_word_map: HashMap<String, usize>,
-  unique_prefix_length: usize,
-}
-
-impl WordList {
-  fn new(word_list: &'static [&'static str], prefix_length: usize) -> WordList {
-    let mut lang = WordList {
-      word_list,
-      word_map: HashMap::new(),
-      trimmed_word_map: HashMap::new(),
-      unique_prefix_length: prefix_length,
-    };
-
-    for (i, word) in lang.word_list.iter().enumerate() {
-      lang.word_map.insert(word, i);
-      lang.trimmed_word_map.insert(trim(word, lang.unique_prefix_length).deref().clone(), i);
-    }
-
-    lang
-  }
-}
-
-static LANGUAGES: LazyLock<HashMap<Language, WordList>> = LazyLock::new(|| {
-  HashMap::from([
-    (Language::Chinese, WordList::new(include!("./words/zh.rs"), 1)),
-    (Language::English, WordList::new(include!("./words/en.rs"), 3)),
-    (Language::Dutch, WordList::new(include!("./words/nl.rs"), 4)),
-    (Language::French, WordList::new(include!("./words/fr.rs"), 4)),
-    (Language::Spanish, WordList::new(include!("./words/es.rs"), 4)),
-    (Language::German, WordList::new(include!("./words/de.rs"), 4)),
-    (Language::Italian, WordList::new(include!("./words/it.rs"), 4)),
-    (Language::Portuguese, WordList::new(include!("./words/pt.rs"), 4)),
-    (Language::Japanese, WordList::new(include!("./words/ja.rs"), 3)),
-    (Language::Russian, WordList::new(include!("./words/ru.rs"), 4)),
-    (Language::Esperanto, WordList::new(include!("./words/eo.rs"), 4)),
-    (Language::Lojban, WordList::new(include!("./words/jbo.rs"), 4)),
-    (Language::DeprecatedEnglish, WordList::new(include!("./words/ang.rs"), 4)),
-  ])
-});
-
-fn checksum_index(words: &[Zeroizing<String>], lang: &WordList) -> usize {
-  let mut trimmed_words = Zeroizing::new(String::new());
-  for w in words {
-    *trimmed_words += &trim(w, lang.unique_prefix_length);
-  }
-
-  const fn crc32_table() -> [u32; 256] {
-    let poly = 0xedb88320u32;
-
-    let mut res = [0; 256];
-    let mut i = 0;
-    while i < 256 {
-      let mut entry = i;
-      let mut b = 0;
-      while b < 8 {
-        let trigger = entry & 1;
-        entry >>= 1;
-        if trigger == 1 {
-          entry ^= poly;
-        }
-        b += 1;
-      }
-      res[i as usize] = entry;
-      i += 1;
-    }
-
-    res
-  }
-  const CRC32_TABLE: [u32; 256] = crc32_table();
-
-  let trimmed_words = trimmed_words.as_bytes();
-  let mut checksum = u32::MAX;
-  for i in 0 .. trimmed_words.len() {
-    checksum = CRC32_TABLE[usize::from(u8::try_from(checksum % 256).unwrap() ^ trimmed_words[i])] ^
-      (checksum >> 8);
-  }
-
-  usize::try_from(!checksum).unwrap() % words.len()
-}
-
-// Convert a private key to a seed
-#[allow(clippy::needless_pass_by_value)]
-fn key_to_seed(lang: Language, key: Zeroizing<Scalar>) -> Seed {
-  let bytes = Zeroizing::new(key.to_bytes());
-
-  // get the language words
-  let words = &LANGUAGES[&lang].word_list;
-  let list_len = u64::try_from(words.len()).unwrap();
-
-  // To store the found words & add the checksum word later.
-  let mut seed = Vec::with_capacity(25);
-
-  // convert to words
-  // 4 bytes -> 3 words. 8 digits base 16 -> 3 digits base 1626
-  let mut segment = [0; 4];
-  let mut indices = [0; 4];
-  for i in 0 .. 8 {
-    // convert first 4 byte to u32 & get the word indices
-    let start = i * 4;
-    // convert 4 byte to u32
-    segment.copy_from_slice(&bytes[start .. (start + 4)]);
-    // Actually convert to a u64 so we can add without overflowing
-    indices[0] = u64::from(u32::from_le_bytes(segment));
-    indices[1] = indices[0];
-    indices[0] /= list_len;
-    indices[2] = indices[0] + indices[1];
-    indices[0] /= list_len;
-    indices[3] = indices[0] + indices[2];
-
-    // append words to seed
-    for i in indices.iter().skip(1) {
-      let word = usize::try_from(i % list_len).unwrap();
-      seed.push(Zeroizing::new(words[word].to_string()));
-    }
-  }
-  segment.zeroize();
-  indices.zeroize();
-
-  // create a checksum word for all languages except old english
-  if lang != Language::DeprecatedEnglish {
-    let checksum = seed[checksum_index(&seed, &LANGUAGES[&lang])].clone();
-    seed.push(checksum);
-  }
-
-  let mut res = Zeroizing::new(String::new());
-  for (i, word) in seed.iter().enumerate() {
-    if i != 0 {
-      *res += " ";
-    }
-    *res += word;
-  }
-  Seed(lang, res)
-}
-
-// Convert a seed to bytes
-fn seed_to_bytes(lang: Language, words: &str) -> Result<Zeroizing<[u8; 32]>, SeedError> {
-  // get seed words
-  let words = words.split_whitespace().map(|w| Zeroizing::new(w.to_string())).collect::<Vec<_>>();
-  if (words.len() != SEED_LENGTH) && (words.len() != SEED_LENGTH_WITH_CHECKSUM) {
-    panic!("invalid seed passed to seed_to_bytes");
-  }
-
-  let has_checksum = words.len() == SEED_LENGTH_WITH_CHECKSUM;
-  if has_checksum && lang == Language::DeprecatedEnglish {
-    Err(SeedError::DeprecatedEnglishWithChecksum)?;
-  }
-
-  // Validate words are in the language word list
-  let lang_word_list: &WordList = &LANGUAGES[&lang];
-  let matched_indices = (|| {
-    let has_checksum = words.len() == SEED_LENGTH_WITH_CHECKSUM;
-    let mut matched_indices = Zeroizing::new(vec![]);
-
-    // Iterate through all the words and see if they're all present
-    for word in &words {
-      let trimmed = trim(word, lang_word_list.unique_prefix_length);
-      let word = if has_checksum { &trimmed } else { word };
-
-      if let Some(index) = if has_checksum {
-        lang_word_list.trimmed_word_map.get(word.deref())
-      } else {
-        lang_word_list.word_map.get(&word.as_str())
-      } {
-        matched_indices.push(*index);
-      } else {
-        Err(SeedError::InvalidSeed)?;
-      }
-    }
-
-    if has_checksum {
-      // exclude the last word when calculating a checksum.
-      let last_word = words.last().unwrap().clone();
-      let checksum = words[checksum_index(&words[.. words.len() - 1], lang_word_list)].clone();
-
-      // check the trimmed checksum and trimmed last word line up
-      if trim(&checksum, lang_word_list.unique_prefix_length) !=
-        trim(&last_word, lang_word_list.unique_prefix_length)
-      {
-        Err(SeedError::InvalidChecksum)?;
-      }
-    }
-
-    Ok(matched_indices)
-  })()?;
-
-  // convert to bytes
-  let mut res = Zeroizing::new([0; 32]);
-  let mut indices = Zeroizing::new([0; 4]);
-  for i in 0 .. 8 {
-    // read 3 indices at a time
-    let i3 = i * 3;
-    indices[1] = matched_indices[i3];
-    indices[2] = matched_indices[i3 + 1];
-    indices[3] = matched_indices[i3 + 2];
-
-    let inner = |i| {
-      let mut base = (lang_word_list.word_list.len() - indices[i] + indices[i + 1]) %
-        lang_word_list.word_list.len();
-      // Shift the index over
-      for _ in 0 .. i {
-        base *= lang_word_list.word_list.len();
-      }
-      base
-    };
-    // set the last index
-    indices[0] = indices[1] + inner(1) + inner(2);
-    if (indices[0] % lang_word_list.word_list.len()) != indices[1] {
-      Err(SeedError::InvalidSeed)?;
-    }
-
-    let pos = i * 4;
-    let mut bytes = u32::try_from(indices[0]).unwrap().to_le_bytes();
-    res[pos .. (pos + 4)].copy_from_slice(&bytes);
-    bytes.zeroize();
-  }
-
-  Ok(res)
-}
-
-/// A Monero seed.
-#[derive(Clone, PartialEq, Eq, Zeroize)]
-pub struct Seed(Language, Zeroizing<String>);
-
-impl fmt::Debug for Seed {
-  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-    f.debug_struct("Seed").finish_non_exhaustive()
-  }
-}
-
-impl Seed {
-  /// Create a new seed.
-  pub fn new<R: RngCore + CryptoRng>(rng: &mut R, lang: Language) -> Seed {
-    let mut scalar_bytes = Zeroizing::new([0; 64]);
-    rng.fill_bytes(scalar_bytes.as_mut());
-    key_to_seed(lang, Zeroizing::new(Scalar::from_bytes_mod_order_wide(scalar_bytes.deref())))
-  }
-
-  /// Parse a seed from a string.
-  #[allow(clippy::needless_pass_by_value)]
-  pub fn from_string(lang: Language, words: Zeroizing<String>) -> Result<Seed, SeedError> {
-    let entropy = seed_to_bytes(lang, &words)?;
-
-    // Make sure this is a valid scalar
-    let scalar = Scalar::from_canonical_bytes(*entropy);
-    if scalar.is_none().into() {
-      Err(SeedError::InvalidSeed)?;
-    }
-    let mut scalar = scalar.unwrap();
-    scalar.zeroize();
-
-    // Call from_entropy so a trimmed seed becomes a full seed
-    Ok(Self::from_entropy(lang, entropy).unwrap())
-  }
-
-  /// Create a seed from entropy.
-  #[allow(clippy::needless_pass_by_value)]
-  pub fn from_entropy(lang: Language, entropy: Zeroizing<[u8; 32]>) -> Option<Seed> {
-    Option::from(Scalar::from_canonical_bytes(*entropy))
-      .map(|scalar| key_to_seed(lang, Zeroizing::new(scalar)))
-  }
-
-  /// Convert a seed to a string.
-  pub fn to_string(&self) -> Zeroizing<String> {
-    self.1.clone()
-  }
-
-  /// Return the entropy underlying this seed.
-  pub fn entropy(&self) -> Zeroizing<[u8; 32]> {
-    seed_to_bytes(self.0, &self.1).unwrap()
-  }
-}
diff --git a/networks/monero/wallet/seed/src/tests.rs b/networks/monero/wallet/seed/src/tests.rs
deleted file mode 100644
index 59d6ea00..00000000
--- a/networks/monero/wallet/seed/src/tests.rs
+++ /dev/null
@@ -1,234 +0,0 @@
-use zeroize::Zeroizing;
-use rand_core::OsRng;
-
-use curve25519_dalek::scalar::Scalar;
-
-use monero_primitives::keccak256;
-
-use crate::*;
-
-#[test]
-fn test_original_seed() {
-  struct Vector {
-    language: Language,
-    seed: String,
-    spend: String,
-    view: String,
-  }
-
-  let vectors = [
-    Vector {
-      language: Language::Chinese,
-      seed: "摇 曲 艺 武 滴 然 效 似 赏 式 祥 歌 买 疑 小 碧 堆 博 键 房 鲜 悲 付 喷 武".into(),
-      spend: "a5e4fff1706ef9212993a69f246f5c95ad6d84371692d63e9bb0ea112a58340d".into(),
-      view: "1176c43ce541477ea2f3ef0b49b25112b084e26b8a843e1304ac4677b74cdf02".into(),
-    },
-    Vector {
-      language: Language::English,
-      seed: "washing thirsty occur lectures tuesday fainted toxic adapt \
-               abnormal memoir nylon mostly building shrugged online ember northern \
-               ruby woes dauntless boil family illness inroads northern"
-        .into(),
-      spend: "c0af65c0dd837e666b9d0dfed62745f4df35aed7ea619b2798a709f0fe545403".into(),
-      view: "513ba91c538a5a9069e0094de90e927c0cd147fa10428ce3ac1afd49f63e3b01".into(),
-    },
-    Vector {
-      language: Language::Dutch,
-      seed: "setwinst riphagen vimmetje extase blief tuitelig fuiven meifeest \
-               ponywagen zesmaal ripdeal matverf codetaal leut ivoor rotten \
-               wisgerhof winzucht typograaf atrium rein zilt traktaat verzaagd setwinst"
-        .into(),
-      spend: "e2d2873085c447c2bc7664222ac8f7d240df3aeac137f5ff2022eaa629e5b10a".into(),
-      view: "eac30b69477e3f68093d131c7fd961564458401b07f8c87ff8f6030c1a0c7301".into(),
-    },
-    Vector {
-      language: Language::French,
-      seed: "poids vaseux tarte bazar poivre effet entier nuance \
-               sensuel ennui pacte osselet poudre battre alibi mouton \
-               stade paquet pliage gibier type question position projet pliage"
-        .into(),
-      spend: "2dd39ff1a4628a94b5c2ec3e42fb3dfe15c2b2f010154dc3b3de6791e805b904".into(),
-      view: "6725b32230400a1032f31d622b44c3a227f88258939b14a7c72e00939e7bdf0e".into(),
-    },
-    Vector {
-      language: Language::Spanish,
-      seed: "minero ocupar mirar evadir octubre cal logro miope \
-               opaco disco ancla litio clase cuello nasal clase \
-               fiar avance deseo mente grumo negro cordón croqueta clase"
-        .into(),
-      spend: "ae2c9bebdddac067d73ec0180147fc92bdf9ac7337f1bcafbbe57dd13558eb02".into(),
-      view: "18deafb34d55b7a43cae2c1c1c206a3c80c12cc9d1f84640b484b95b7fec3e05".into(),
-    },
-    Vector {
-      language: Language::German,
-      seed: "Kaliber Gabelung Tapir Liveband Favorit Specht Enklave Nabel \
-               Jupiter Foliant Chronik nisten löten Vase Aussage Rekord \
-               Yeti Gesetz Eleganz Alraune Künstler Almweide Jahr Kastanie Almweide"
-        .into(),
-      spend: "79801b7a1b9796856e2397d862a113862e1fdc289a205e79d8d70995b276db06".into(),
-      view: "99f0ec556643bd9c038a4ed86edcb9c6c16032c4622ed2e000299d527a792701".into(),
-    },
-    Vector {
-      language: Language::Italian,
-      seed: "cavo pancetta auto fulmine alleanza filmato diavolo prato \
-               forzare meritare litigare lezione segreto evasione votare buio \
-               licenza cliente dorso natale crescere vento tutelare vetta evasione"
-        .into(),
-      spend: "5e7fd774eb00fa5877e2a8b4dc9c7ffe111008a3891220b56a6e49ac816d650a".into(),
-      view: "698a1dce6018aef5516e82ca0cb3e3ec7778d17dfb41a137567bfa2e55e63a03".into(),
-    },
-    Vector {
-      language: Language::Portuguese,
-      seed: "agito eventualidade onus itrio holograma sodomizar objetos dobro \
-               iugoslavo bcrepuscular odalisca abjeto iuane darwinista eczema acetona \
-               cibernetico hoquei gleba driver buffer azoto megera nogueira agito"
-        .into(),
-      spend: "13b3115f37e35c6aa1db97428b897e584698670c1b27854568d678e729200c0f".into(),
-      view: "ad1b4fd35270f5f36c4da7166672b347e75c3f4d41346ec2a06d1d0193632801".into(),
-    },
-    Vector {
-      language: Language::Japanese,
-      seed: "ぜんぶ どうぐ おたがい せんきょ おうじ そんちょう じゅしん いろえんぴつ \
-               かほう つかれる えらぶ にちじょう くのう にちようび ぬまえび さんきゃく \
-               おおや ちぬき うすめる いがく せつでん さうな すいえい せつだん おおや"
-        .into(),
-      spend: "c56e895cdb13007eda8399222974cdbab493640663804b93cbef3d8c3df80b0b".into(),
-      view: "6c3634a313ec2ee979d565c33888fd7c3502d696ce0134a8bc1a2698c7f2c508".into(),
-    },
-    Vector {
-      language: Language::Russian,
-      seed: "шатер икра нация ехать получать инерция доза реальный \
-               рыжий таможня лопата душа веселый клетка атлас лекция \
-               обгонять паек наивный лыжный дурак стать ежик задача паек"
-        .into(),
-      spend: "7cb5492df5eb2db4c84af20766391cd3e3662ab1a241c70fc881f3d02c381f05".into(),
-      view: "fcd53e41ec0df995ab43927f7c44bc3359c93523d5009fb3f5ba87431d545a03".into(),
-    },
-    Vector {
-      language: Language::Esperanto,
-      seed: "ukazo klini peco etikedo fabriko imitado onklino urino \
-               pudro incidento kumuluso ikono smirgi hirundo uretro krii \
-               sparkado super speciala pupo alpinisto cvana vokegi zombio fabriko"
-        .into(),
-      spend: "82ebf0336d3b152701964ed41df6b6e9a035e57fc98b84039ed0bd4611c58904".into(),
-      view: "cd4d120e1ea34360af528f6a3e6156063312d9cefc9aa6b5218d366c0ed6a201".into(),
-    },
-    Vector {
-      language: Language::Lojban,
-      seed: "jetnu vensa julne xrotu xamsi julne cutci dakli \
-               mlatu xedja muvgau palpi xindo sfubu ciste cinri \
-               blabi darno dembi janli blabi fenki bukpu burcu blabi"
-        .into(),
-      spend: "e4f8c6819ab6cf792cebb858caabac9307fd646901d72123e0367ebc0a79c200".into(),
-      view: "c806ce62bafaa7b2d597f1a1e2dbe4a2f96bfd804bf6f8420fc7f4a6bd700c00".into(),
-    },
-    Vector {
-      language: Language::DeprecatedEnglish,
-      seed: "glorious especially puff son moment add youth nowhere \
-               throw glide grip wrong rhythm consume very swear \
-               bitter heavy eventually begin reason flirt type unable"
-        .into(),
-      spend: "647f4765b66b636ff07170ab6280a9a6804dfbaf19db2ad37d23be024a18730b".into(),
-      view: "045da65316a906a8c30046053119c18020b07a7a3a6ef5c01ab2a8755416bd02".into(),
-    },
-    // The following seeds require the language specification in order to calculate
-    // a single valid checksum
-    Vector {
-      language: Language::Spanish,
-      seed: "pluma laico atraer pintor peor cerca balde buscar \
-               lancha batir nulo reloj resto gemelo nevera poder columna gol \
-               oveja latir amplio bolero feliz fuerza nevera"
-        .into(),
-      spend: "30303983fc8d215dd020cc6b8223793318d55c466a86e4390954f373fdc7200a".into(),
-      view: "97c649143f3c147ba59aa5506cc09c7992c5c219bb26964442142bf97980800e".into(),
-    },
-    Vector {
-      language: Language::Spanish,
-      seed: "pluma pluma pluma pluma pluma pluma pluma pluma \
-               pluma pluma pluma pluma pluma pluma pluma pluma \
-               pluma pluma pluma pluma pluma pluma pluma pluma pluma"
-        .into(),
-      spend: "b4050000b4050000b4050000b4050000b4050000b4050000b4050000b4050000".into(),
-      view: "d73534f7912b395eb70ef911791a2814eb6df7ce56528eaaa83ff2b72d9f5e0f".into(),
-    },
-    Vector {
-      language: Language::English,
-      seed: "plus plus plus plus plus plus plus plus \
-               plus plus plus plus plus plus plus plus \
-               plus plus plus plus plus plus plus plus plus"
-        .into(),
-      spend: "3b0400003b0400003b0400003b0400003b0400003b0400003b0400003b040000".into(),
-      view: "43a8a7715eed11eff145a2024ddcc39740255156da7bbd736ee66a0838053a02".into(),
-    },
-    Vector {
-      language: Language::Spanish,
-      seed: "audio audio audio audio audio audio audio audio \
-               audio audio audio audio audio audio audio audio \
-               audio audio audio audio audio audio audio audio audio"
-        .into(),
-      spend: "ba000000ba000000ba000000ba000000ba000000ba000000ba000000ba000000".into(),
-      view: "1437256da2c85d029b293d8c6b1d625d9374969301869b12f37186e3f906c708".into(),
-    },
-    Vector {
-      language: Language::English,
-      seed: "audio audio audio audio audio audio audio audio \
-               audio audio audio audio audio audio audio audio \
-               audio audio audio audio audio audio audio audio audio"
-        .into(),
-      spend: "7900000079000000790000007900000079000000790000007900000079000000".into(),
-      view: "20bec797ab96780ae6a045dd816676ca7ed1d7c6773f7022d03ad234b581d600".into(),
-    },
-  ];
-
-  for vector in vectors {
-    fn trim_by_lang(word: &str, lang: Language) -> String {
-      if lang != Language::DeprecatedEnglish {
-        word.chars().take(LANGUAGES[&lang].unique_prefix_length).collect()
-      } else {
-        word.to_string()
-      }
-    }
-
-    let trim_seed = |seed: &str| {
-      seed
-        .split_whitespace()
-        .map(|word| trim_by_lang(word, vector.language))
-        .collect::<Vec<_>>()
-        .join(" ")
-    };
-
-    // Test against Monero
-    {
-      println!("{}. language: {:?}, seed: {}", line!(), vector.language, vector.seed.clone());
-      let seed = Seed::from_string(vector.language, Zeroizing::new(vector.seed.clone())).unwrap();
-      let trim = trim_seed(&vector.seed);
-      assert_eq!(seed, Seed::from_string(vector.language, Zeroizing::new(trim)).unwrap());
-
-      let spend: [u8; 32] = hex::decode(vector.spend).unwrap().try_into().unwrap();
-      // For originalal seeds, Monero directly uses the entropy as a spend key
-      assert_eq!(
-        Option::<Scalar>::from(Scalar::from_canonical_bytes(*seed.entropy())),
-        Option::<Scalar>::from(Scalar::from_canonical_bytes(spend)),
-      );
-
-      let view: [u8; 32] = hex::decode(vector.view).unwrap().try_into().unwrap();
-      // Monero then derives the view key as H(spend)
-      assert_eq!(
-        Scalar::from_bytes_mod_order(keccak256(spend)),
-        Scalar::from_canonical_bytes(view).unwrap()
-      );
-
-      assert_eq!(Seed::from_entropy(vector.language, Zeroizing::new(spend)).unwrap(), seed);
-    }
-
-    // Test against ourselves
-    {
-      let seed = Seed::new(&mut OsRng, vector.language);
-      println!("{}. seed: {}", line!(), *seed.to_string());
-      let trim = trim_seed(&seed.to_string());
-      assert_eq!(seed, Seed::from_string(vector.language, Zeroizing::new(trim)).unwrap());
-      assert_eq!(seed, Seed::from_entropy(vector.language, seed.entropy()).unwrap());
-      assert_eq!(seed, Seed::from_string(vector.language, seed.to_string()).unwrap());
-    }
-  }
-}
diff --git a/networks/monero/wallet/seed/src/words/ang.rs b/networks/monero/wallet/seed/src/words/ang.rs
deleted file mode 100644
index 2800b1a9..00000000
--- a/networks/monero/wallet/seed/src/words/ang.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "like",
-  "just",
-  "love",
-  "know",
-  "never",
-  "want",
-  "time",
-  "out",
-  "there",
-  "make",
-  "look",
-  "eye",
-  "down",
-  "only",
-  "think",
-  "heart",
-  "back",
-  "then",
-  "into",
-  "about",
-  "more",
-  "away",
-  "still",
-  "them",
-  "take",
-  "thing",
-  "even",
-  "through",
-  "long",
-  "always",
-  "world",
-  "too",
-  "friend",
-  "tell",
-  "try",
-  "hand",
-  "thought",
-  "over",
-  "here",
-  "other",
-  "need",
-  "smile",
-  "again",
-  "much",
-  "cry",
-  "been",
-  "night",
-  "ever",
-  "little",
-  "said",
-  "end",
-  "some",
-  "those",
-  "around",
-  "mind",
-  "people",
-  "girl",
-  "leave",
-  "dream",
-  "left",
-  "turn",
-  "myself",
-  "give",
-  "nothing",
-  "really",
-  "off",
-  "before",
-  "something",
-  "find",
-  "walk",
-  "wish",
-  "good",
-  "once",
-  "place",
-  "ask",
-  "stop",
-  "keep",
-  "watch",
-  "seem",
-  "everything",
-  "wait",
-  "got",
-  "yet",
-  "made",
-  "remember",
-  "start",
-  "alone",
-  "run",
-  "hope",
-  "maybe",
-  "believe",
-  "body",
-  "hate",
-  "after",
-  "close",
-  "talk",
-  "stand",
-  "own",
-  "each",
-  "hurt",
-  "help",
-  "home",
-  "god",
-  "soul",
-  "new",
-  "many",
-  "two",
-  "inside",
-  "should",
-  "true",
-  "first",
-  "fear",
-  "mean",
-  "better",
-  "play",
-  "another",
-  "gone",
-  "change",
-  "use",
-  "wonder",
-  "someone",
-  "hair",
-  "cold",
-  "open",
-  "best",
-  "any",
-  "behind",
-  "happen",
-  "water",
-  "dark",
-  "laugh",
-  "stay",
-  "forever",
-  "name",
-  "work",
-  "show",
-  "sky",
-  "break",
-  "came",
-  "deep",
-  "door",
-  "put",
-  "black",
-  "together",
-  "upon",
-  "happy",
-  "such",
-  "great",
-  "white",
-  "matter",
-  "fill",
-  "past",
-  "please",
-  "burn",
-  "cause",
-  "enough",
-  "touch",
-  "moment",
-  "soon",
-  "voice",
-  "scream",
-  "anything",
-  "stare",
-  "sound",
-  "red",
-  "everyone",
-  "hide",
-  "kiss",
-  "truth",
-  "death",
-  "beautiful",
-  "mine",
-  "blood",
-  "broken",
-  "very",
-  "pass",
-  "next",
-  "forget",
-  "tree",
-  "wrong",
-  "air",
-  "mother",
-  "understand",
-  "lip",
-  "hit",
-  "wall",
-  "memory",
-  "sleep",
-  "free",
-  "high",
-  "realize",
-  "school",
-  "might",
-  "skin",
-  "sweet",
-  "perfect",
-  "blue",
-  "kill",
-  "breath",
-  "dance",
-  "against",
-  "fly",
-  "between",
-  "grow",
-  "strong",
-  "under",
-  "listen",
-  "bring",
-  "sometimes",
-  "speak",
-  "pull",
-  "person",
-  "become",
-  "family",
-  "begin",
-  "ground",
-  "real",
-  "small",
-  "father",
-  "sure",
-  "feet",
-  "rest",
-  "young",
-  "finally",
-  "land",
-  "across",
-  "today",
-  "different",
-  "guy",
-  "line",
-  "fire",
-  "reason",
-  "reach",
-  "second",
-  "slowly",
-  "write",
-  "eat",
-  "smell",
-  "mouth",
-  "step",
-  "learn",
-  "three",
-  "floor",
-  "promise",
-  "breathe",
-  "darkness",
-  "push",
-  "earth",
-  "guess",
-  "save",
-  "song",
-  "above",
-  "along",
-  "both",
-  "color",
-  "house",
-  "almost",
-  "sorry",
-  "anymore",
-  "brother",
-  "okay",
-  "dear",
-  "game",
-  "fade",
-  "already",
-  "apart",
-  "warm",
-  "beauty",
-  "heard",
-  "notice",
-  "question",
-  "shine",
-  "began",
-  "piece",
-  "whole",
-  "shadow",
-  "secret",
-  "street",
-  "within",
-  "finger",
-  "point",
-  "morning",
-  "whisper",
-  "child",
-  "moon",
-  "green",
-  "story",
-  "glass",
-  "kid",
-  "silence",
-  "since",
-  "soft",
-  "yourself",
-  "empty",
-  "shall",
-  "angel",
-  "answer",
-  "baby",
-  "bright",
-  "dad",
-  "path",
-  "worry",
-  "hour",
-  "drop",
-  "follow",
-  "power",
-  "war",
-  "half",
-  "flow",
-  "heaven",
-  "act",
-  "chance",
-  "fact",
-  "least",
-  "tired",
-  "children",
-  "near",
-  "quite",
-  "afraid",
-  "rise",
-  "sea",
-  "taste",
-  "window",
-  "cover",
-  "nice",
-  "trust",
-  "lot",
-  "sad",
-  "cool",
-  "force",
-  "peace",
-  "return",
-  "blind",
-  "easy",
-  "ready",
-  "roll",
-  "rose",
-  "drive",
-  "held",
-  "music",
-  "beneath",
-  "hang",
-  "mom",
-  "paint",
-  "emotion",
-  "quiet",
-  "clear",
-  "cloud",
-  "few",
-  "pretty",
-  "bird",
-  "outside",
-  "paper",
-  "picture",
-  "front",
-  "rock",
-  "simple",
-  "anyone",
-  "meant",
-  "reality",
-  "road",
-  "sense",
-  "waste",
-  "bit",
-  "leaf",
-  "thank",
-  "happiness",
-  "meet",
-  "men",
-  "smoke",
-  "truly",
-  "decide",
-  "self",
-  "age",
-  "book",
-  "form",
-  "alive",
-  "carry",
-  "escape",
-  "damn",
-  "instead",
-  "able",
-  "ice",
-  "minute",
-  "throw",
-  "catch",
-  "leg",
-  "ring",
-  "course",
-  "goodbye",
-  "lead",
-  "poem",
-  "sick",
-  "corner",
-  "desire",
-  "known",
-  "problem",
-  "remind",
-  "shoulder",
-  "suppose",
-  "toward",
-  "wave",
-  "drink",
-  "jump",
-  "woman",
-  "pretend",
-  "sister",
-  "week",
-  "human",
-  "joy",
-  "crack",
-  "grey",
-  "pray",
-  "surprise",
-  "dry",
-  "knee",
-  "less",
-  "search",
-  "bleed",
-  "caught",
-  "clean",
-  "embrace",
-  "future",
-  "king",
-  "son",
-  "sorrow",
-  "chest",
-  "hug",
-  "remain",
-  "sat",
-  "worth",
-  "blow",
-  "daddy",
-  "final",
-  "parent",
-  "tight",
-  "also",
-  "create",
-  "lonely",
-  "safe",
-  "cross",
-  "dress",
-  "evil",
-  "silent",
-  "bone",
-  "fate",
-  "perhaps",
-  "anger",
-  "class",
-  "scar",
-  "snow",
-  "tiny",
-  "tonight",
-  "continue",
-  "control",
-  "dog",
-  "edge",
-  "mirror",
-  "month",
-  "suddenly",
-  "comfort",
-  "given",
-  "loud",
-  "quickly",
-  "gaze",
-  "plan",
-  "rush",
-  "stone",
-  "town",
-  "battle",
-  "ignore",
-  "spirit",
-  "stood",
-  "stupid",
-  "yours",
-  "brown",
-  "build",
-  "dust",
-  "hey",
-  "kept",
-  "pay",
-  "phone",
-  "twist",
-  "although",
-  "ball",
-  "beyond",
-  "hidden",
-  "nose",
-  "taken",
-  "fail",
-  "float",
-  "pure",
-  "somehow",
-  "wash",
-  "wrap",
-  "angry",
-  "cheek",
-  "creature",
-  "forgotten",
-  "heat",
-  "rip",
-  "single",
-  "space",
-  "special",
-  "weak",
-  "whatever",
-  "yell",
-  "anyway",
-  "blame",
-  "job",
-  "choose",
-  "country",
-  "curse",
-  "drift",
-  "echo",
-  "figure",
-  "grew",
-  "laughter",
-  "neck",
-  "suffer",
-  "worse",
-  "yeah",
-  "disappear",
-  "foot",
-  "forward",
-  "knife",
-  "mess",
-  "somewhere",
-  "stomach",
-  "storm",
-  "beg",
-  "idea",
-  "lift",
-  "offer",
-  "breeze",
-  "field",
-  "five",
-  "often",
-  "simply",
-  "stuck",
-  "win",
-  "allow",
-  "confuse",
-  "enjoy",
-  "except",
-  "flower",
-  "seek",
-  "strength",
-  "calm",
-  "grin",
-  "gun",
-  "heavy",
-  "hill",
-  "large",
-  "ocean",
-  "shoe",
-  "sigh",
-  "straight",
-  "summer",
-  "tongue",
-  "accept",
-  "crazy",
-  "everyday",
-  "exist",
-  "grass",
-  "mistake",
-  "sent",
-  "shut",
-  "surround",
-  "table",
-  "ache",
-  "brain",
-  "destroy",
-  "heal",
-  "nature",
-  "shout",
-  "sign",
-  "stain",
-  "choice",
-  "doubt",
-  "glance",
-  "glow",
-  "mountain",
-  "queen",
-  "stranger",
-  "throat",
-  "tomorrow",
-  "city",
-  "either",
-  "fish",
-  "flame",
-  "rather",
-  "shape",
-  "spin",
-  "spread",
-  "ash",
-  "distance",
-  "finish",
-  "image",
-  "imagine",
-  "important",
-  "nobody",
-  "shatter",
-  "warmth",
-  "became",
-  "feed",
-  "flesh",
-  "funny",
-  "lust",
-  "shirt",
-  "trouble",
-  "yellow",
-  "attention",
-  "bare",
-  "bite",
-  "money",
-  "protect",
-  "amaze",
-  "appear",
-  "born",
-  "choke",
-  "completely",
-  "daughter",
-  "fresh",
-  "friendship",
-  "gentle",
-  "probably",
-  "six",
-  "deserve",
-  "expect",
-  "grab",
-  "middle",
-  "nightmare",
-  "river",
-  "thousand",
-  "weight",
-  "worst",
-  "wound",
-  "barely",
-  "bottle",
-  "cream",
-  "regret",
-  "relationship",
-  "stick",
-  "test",
-  "crush",
-  "endless",
-  "fault",
-  "itself",
-  "rule",
-  "spill",
-  "art",
-  "circle",
-  "join",
-  "kick",
-  "mask",
-  "master",
-  "passion",
-  "quick",
-  "raise",
-  "smooth",
-  "unless",
-  "wander",
-  "actually",
-  "broke",
-  "chair",
-  "deal",
-  "favorite",
-  "gift",
-  "note",
-  "number",
-  "sweat",
-  "box",
-  "chill",
-  "clothes",
-  "lady",
-  "mark",
-  "park",
-  "poor",
-  "sadness",
-  "tie",
-  "animal",
-  "belong",
-  "brush",
-  "consume",
-  "dawn",
-  "forest",
-  "innocent",
-  "pen",
-  "pride",
-  "stream",
-  "thick",
-  "clay",
-  "complete",
-  "count",
-  "draw",
-  "faith",
-  "press",
-  "silver",
-  "struggle",
-  "surface",
-  "taught",
-  "teach",
-  "wet",
-  "bless",
-  "chase",
-  "climb",
-  "enter",
-  "letter",
-  "melt",
-  "metal",
-  "movie",
-  "stretch",
-  "swing",
-  "vision",
-  "wife",
-  "beside",
-  "crash",
-  "forgot",
-  "guide",
-  "haunt",
-  "joke",
-  "knock",
-  "plant",
-  "pour",
-  "prove",
-  "reveal",
-  "steal",
-  "stuff",
-  "trip",
-  "wood",
-  "wrist",
-  "bother",
-  "bottom",
-  "crawl",
-  "crowd",
-  "fix",
-  "forgive",
-  "frown",
-  "grace",
-  "loose",
-  "lucky",
-  "party",
-  "release",
-  "surely",
-  "survive",
-  "teacher",
-  "gently",
-  "grip",
-  "speed",
-  "suicide",
-  "travel",
-  "treat",
-  "vein",
-  "written",
-  "cage",
-  "chain",
-  "conversation",
-  "date",
-  "enemy",
-  "however",
-  "interest",
-  "million",
-  "page",
-  "pink",
-  "proud",
-  "sway",
-  "themselves",
-  "winter",
-  "church",
-  "cruel",
-  "cup",
-  "demon",
-  "experience",
-  "freedom",
-  "pair",
-  "pop",
-  "purpose",
-  "respect",
-  "shoot",
-  "softly",
-  "state",
-  "strange",
-  "bar",
-  "birth",
-  "curl",
-  "dirt",
-  "excuse",
-  "lord",
-  "lovely",
-  "monster",
-  "order",
-  "pack",
-  "pants",
-  "pool",
-  "scene",
-  "seven",
-  "shame",
-  "slide",
-  "ugly",
-  "among",
-  "blade",
-  "blonde",
-  "closet",
-  "creek",
-  "deny",
-  "drug",
-  "eternity",
-  "gain",
-  "grade",
-  "handle",
-  "key",
-  "linger",
-  "pale",
-  "prepare",
-  "swallow",
-  "swim",
-  "tremble",
-  "wheel",
-  "won",
-  "cast",
-  "cigarette",
-  "claim",
-  "college",
-  "direction",
-  "dirty",
-  "gather",
-  "ghost",
-  "hundred",
-  "loss",
-  "lung",
-  "orange",
-  "present",
-  "swear",
-  "swirl",
-  "twice",
-  "wild",
-  "bitter",
-  "blanket",
-  "doctor",
-  "everywhere",
-  "flash",
-  "grown",
-  "knowledge",
-  "numb",
-  "pressure",
-  "radio",
-  "repeat",
-  "ruin",
-  "spend",
-  "unknown",
-  "buy",
-  "clock",
-  "devil",
-  "early",
-  "false",
-  "fantasy",
-  "pound",
-  "precious",
-  "refuse",
-  "sheet",
-  "teeth",
-  "welcome",
-  "add",
-  "ahead",
-  "block",
-  "bury",
-  "caress",
-  "content",
-  "depth",
-  "despite",
-  "distant",
-  "marry",
-  "purple",
-  "threw",
-  "whenever",
-  "bomb",
-  "dull",
-  "easily",
-  "grasp",
-  "hospital",
-  "innocence",
-  "normal",
-  "receive",
-  "reply",
-  "rhyme",
-  "shade",
-  "someday",
-  "sword",
-  "toe",
-  "visit",
-  "asleep",
-  "bought",
-  "center",
-  "consider",
-  "flat",
-  "hero",
-  "history",
-  "ink",
-  "insane",
-  "muscle",
-  "mystery",
-  "pocket",
-  "reflection",
-  "shove",
-  "silently",
-  "smart",
-  "soldier",
-  "spot",
-  "stress",
-  "train",
-  "type",
-  "view",
-  "whether",
-  "bus",
-  "energy",
-  "explain",
-  "holy",
-  "hunger",
-  "inch",
-  "magic",
-  "mix",
-  "noise",
-  "nowhere",
-  "prayer",
-  "presence",
-  "shock",
-  "snap",
-  "spider",
-  "study",
-  "thunder",
-  "trail",
-  "admit",
-  "agree",
-  "bag",
-  "bang",
-  "bound",
-  "butterfly",
-  "cute",
-  "exactly",
-  "explode",
-  "familiar",
-  "fold",
-  "further",
-  "pierce",
-  "reflect",
-  "scent",
-  "selfish",
-  "sharp",
-  "sink",
-  "spring",
-  "stumble",
-  "universe",
-  "weep",
-  "women",
-  "wonderful",
-  "action",
-  "ancient",
-  "attempt",
-  "avoid",
-  "birthday",
-  "branch",
-  "chocolate",
-  "core",
-  "depress",
-  "drunk",
-  "especially",
-  "focus",
-  "fruit",
-  "honest",
-  "match",
-  "palm",
-  "perfectly",
-  "pillow",
-  "pity",
-  "poison",
-  "roar",
-  "shift",
-  "slightly",
-  "thump",
-  "truck",
-  "tune",
-  "twenty",
-  "unable",
-  "wipe",
-  "wrote",
-  "coat",
-  "constant",
-  "dinner",
-  "drove",
-  "egg",
-  "eternal",
-  "flight",
-  "flood",
-  "frame",
-  "freak",
-  "gasp",
-  "glad",
-  "hollow",
-  "motion",
-  "peer",
-  "plastic",
-  "root",
-  "screen",
-  "season",
-  "sting",
-  "strike",
-  "team",
-  "unlike",
-  "victim",
-  "volume",
-  "warn",
-  "weird",
-  "attack",
-  "await",
-  "awake",
-  "built",
-  "charm",
-  "crave",
-  "despair",
-  "fought",
-  "grant",
-  "grief",
-  "horse",
-  "limit",
-  "message",
-  "ripple",
-  "sanity",
-  "scatter",
-  "serve",
-  "split",
-  "string",
-  "trick",
-  "annoy",
-  "blur",
-  "boat",
-  "brave",
-  "clearly",
-  "cling",
-  "connect",
-  "fist",
-  "forth",
-  "imagination",
-  "iron",
-  "jock",
-  "judge",
-  "lesson",
-  "milk",
-  "misery",
-  "nail",
-  "naked",
-  "ourselves",
-  "poet",
-  "possible",
-  "princess",
-  "sail",
-  "size",
-  "snake",
-  "society",
-  "stroke",
-  "torture",
-  "toss",
-  "trace",
-  "wise",
-  "bloom",
-  "bullet",
-  "cell",
-  "check",
-  "cost",
-  "darling",
-  "during",
-  "footstep",
-  "fragile",
-  "hallway",
-  "hardly",
-  "horizon",
-  "invisible",
-  "journey",
-  "midnight",
-  "mud",
-  "nod",
-  "pause",
-  "relax",
-  "shiver",
-  "sudden",
-  "value",
-  "youth",
-  "abuse",
-  "admire",
-  "blink",
-  "breast",
-  "bruise",
-  "constantly",
-  "couple",
-  "creep",
-  "curve",
-  "difference",
-  "dumb",
-  "emptiness",
-  "gotta",
-  "honor",
-  "plain",
-  "planet",
-  "recall",
-  "rub",
-  "ship",
-  "slam",
-  "soar",
-  "somebody",
-  "tightly",
-  "weather",
-  "adore",
-  "approach",
-  "bond",
-  "bread",
-  "burst",
-  "candle",
-  "coffee",
-  "cousin",
-  "crime",
-  "desert",
-  "flutter",
-  "frozen",
-  "grand",
-  "heel",
-  "hello",
-  "language",
-  "level",
-  "movement",
-  "pleasure",
-  "powerful",
-  "random",
-  "rhythm",
-  "settle",
-  "silly",
-  "slap",
-  "sort",
-  "spoken",
-  "steel",
-  "threaten",
-  "tumble",
-  "upset",
-  "aside",
-  "awkward",
-  "bee",
-  "blank",
-  "board",
-  "button",
-  "card",
-  "carefully",
-  "complain",
-  "crap",
-  "deeply",
-  "discover",
-  "drag",
-  "dread",
-  "effort",
-  "entire",
-  "fairy",
-  "giant",
-  "gotten",
-  "greet",
-  "illusion",
-  "jeans",
-  "leap",
-  "liquid",
-  "march",
-  "mend",
-  "nervous",
-  "nine",
-  "replace",
-  "rope",
-  "spine",
-  "stole",
-  "terror",
-  "accident",
-  "apple",
-  "balance",
-  "boom",
-  "childhood",
-  "collect",
-  "demand",
-  "depression",
-  "eventually",
-  "faint",
-  "glare",
-  "goal",
-  "group",
-  "honey",
-  "kitchen",
-  "laid",
-  "limb",
-  "machine",
-  "mere",
-  "mold",
-  "murder",
-  "nerve",
-  "painful",
-  "poetry",
-  "prince",
-  "rabbit",
-  "shelter",
-  "shore",
-  "shower",
-  "soothe",
-  "stair",
-  "steady",
-  "sunlight",
-  "tangle",
-  "tease",
-  "treasure",
-  "uncle",
-  "begun",
-  "bliss",
-  "canvas",
-  "cheer",
-  "claw",
-  "clutch",
-  "commit",
-  "crimson",
-  "crystal",
-  "delight",
-  "doll",
-  "existence",
-  "express",
-  "fog",
-  "football",
-  "gay",
-  "goose",
-  "guard",
-  "hatred",
-  "illuminate",
-  "mass",
-  "math",
-  "mourn",
-  "rich",
-  "rough",
-  "skip",
-  "stir",
-  "student",
-  "style",
-  "support",
-  "thorn",
-  "tough",
-  "yard",
-  "yearn",
-  "yesterday",
-  "advice",
-  "appreciate",
-  "autumn",
-  "bank",
-  "beam",
-  "bowl",
-  "capture",
-  "carve",
-  "collapse",
-  "confusion",
-  "creation",
-  "dove",
-  "feather",
-  "girlfriend",
-  "glory",
-  "government",
-  "harsh",
-  "hop",
-  "inner",
-  "loser",
-  "moonlight",
-  "neighbor",
-  "neither",
-  "peach",
-  "pig",
-  "praise",
-  "screw",
-  "shield",
-  "shimmer",
-  "sneak",
-  "stab",
-  "subject",
-  "throughout",
-  "thrown",
-  "tower",
-  "twirl",
-  "wow",
-  "army",
-  "arrive",
-  "bathroom",
-  "bump",
-  "cease",
-  "cookie",
-  "couch",
-  "courage",
-  "dim",
-  "guilt",
-  "howl",
-  "hum",
-  "husband",
-  "insult",
-  "led",
-  "lunch",
-  "mock",
-  "mostly",
-  "natural",
-  "nearly",
-  "needle",
-  "nerd",
-  "peaceful",
-  "perfection",
-  "pile",
-  "price",
-  "remove",
-  "roam",
-  "sanctuary",
-  "serious",
-  "shiny",
-  "shook",
-  "sob",
-  "stolen",
-  "tap",
-  "vain",
-  "void",
-  "warrior",
-  "wrinkle",
-  "affection",
-  "apologize",
-  "blossom",
-  "bounce",
-  "bridge",
-  "cheap",
-  "crumble",
-  "decision",
-  "descend",
-  "desperately",
-  "dig",
-  "dot",
-  "flip",
-  "frighten",
-  "heartbeat",
-  "huge",
-  "lazy",
-  "lick",
-  "odd",
-  "opinion",
-  "process",
-  "puzzle",
-  "quietly",
-  "retreat",
-  "score",
-  "sentence",
-  "separate",
-  "situation",
-  "skill",
-  "soak",
-  "square",
-  "stray",
-  "taint",
-  "task",
-  "tide",
-  "underneath",
-  "veil",
-  "whistle",
-  "anywhere",
-  "bedroom",
-  "bid",
-  "bloody",
-  "burden",
-  "careful",
-  "compare",
-  "concern",
-  "curtain",
-  "decay",
-  "defeat",
-  "describe",
-  "double",
-  "dreamer",
-  "driver",
-  "dwell",
-  "evening",
-  "flare",
-  "flicker",
-  "grandma",
-  "guitar",
-  "harm",
-  "horrible",
-  "hungry",
-  "indeed",
-  "lace",
-  "melody",
-  "monkey",
-  "nation",
-  "object",
-  "obviously",
-  "rainbow",
-  "salt",
-  "scratch",
-  "shown",
-  "shy",
-  "stage",
-  "stun",
-  "third",
-  "tickle",
-  "useless",
-  "weakness",
-  "worship",
-  "worthless",
-  "afternoon",
-  "beard",
-  "boyfriend",
-  "bubble",
-  "busy",
-  "certain",
-  "chin",
-  "concrete",
-  "desk",
-  "diamond",
-  "doom",
-  "drawn",
-  "due",
-  "felicity",
-  "freeze",
-  "frost",
-  "garden",
-  "glide",
-  "harmony",
-  "hopefully",
-  "hunt",
-  "jealous",
-  "lightning",
-  "mama",
-  "mercy",
-  "peel",
-  "physical",
-  "position",
-  "pulse",
-  "punch",
-  "quit",
-  "rant",
-  "respond",
-  "salty",
-  "sane",
-  "satisfy",
-  "savior",
-  "sheep",
-  "slept",
-  "social",
-  "sport",
-  "tuck",
-  "utter",
-  "valley",
-  "wolf",
-  "aim",
-  "alas",
-  "alter",
-  "arrow",
-  "awaken",
-  "beaten",
-  "belief",
-  "brand",
-  "ceiling",
-  "cheese",
-  "clue",
-  "confidence",
-  "connection",
-  "daily",
-  "disguise",
-  "eager",
-  "erase",
-  "essence",
-  "everytime",
-  "expression",
-  "fan",
-  "flag",
-  "flirt",
-  "foul",
-  "fur",
-  "giggle",
-  "glorious",
-  "ignorance",
-  "law",
-  "lifeless",
-  "measure",
-  "mighty",
-  "muse",
-  "north",
-  "opposite",
-  "paradise",
-  "patience",
-  "patient",
-  "pencil",
-  "petal",
-  "plate",
-  "ponder",
-  "possibly",
-  "practice",
-  "slice",
-  "spell",
-  "stock",
-  "strife",
-  "strip",
-  "suffocate",
-  "suit",
-  "tender",
-  "tool",
-  "trade",
-  "velvet",
-  "verse",
-  "waist",
-  "witch",
-  "aunt",
-  "bench",
-  "bold",
-  "cap",
-  "certainly",
-  "click",
-  "companion",
-  "creator",
-  "dart",
-  "delicate",
-  "determine",
-  "dish",
-  "dragon",
-  "drama",
-  "drum",
-  "dude",
-  "everybody",
-  "feast",
-  "forehead",
-  "former",
-  "fright",
-  "fully",
-  "gas",
-  "hook",
-  "hurl",
-  "invite",
-  "juice",
-  "manage",
-  "moral",
-  "possess",
-  "raw",
-  "rebel",
-  "royal",
-  "scale",
-  "scary",
-  "several",
-  "slight",
-  "stubborn",
-  "swell",
-  "talent",
-  "tea",
-  "terrible",
-  "thread",
-  "torment",
-  "trickle",
-  "usually",
-  "vast",
-  "violence",
-  "weave",
-  "acid",
-  "agony",
-  "ashamed",
-  "awe",
-  "belly",
-  "blend",
-  "blush",
-  "character",
-  "cheat",
-  "common",
-  "company",
-  "coward",
-  "creak",
-  "danger",
-  "deadly",
-  "defense",
-  "define",
-  "depend",
-  "desperate",
-  "destination",
-  "dew",
-  "duck",
-  "dusty",
-  "embarrass",
-  "engine",
-  "example",
-  "explore",
-  "foe",
-  "freely",
-  "frustrate",
-  "generation",
-  "glove",
-  "guilty",
-  "health",
-  "hurry",
-  "idiot",
-  "impossible",
-  "inhale",
-  "jaw",
-  "kingdom",
-  "mention",
-  "mist",
-  "moan",
-  "mumble",
-  "mutter",
-  "observe",
-  "ode",
-  "pathetic",
-  "pattern",
-  "pie",
-  "prefer",
-  "puff",
-  "rape",
-  "rare",
-  "revenge",
-  "rude",
-  "scrape",
-  "spiral",
-  "squeeze",
-  "strain",
-  "sunset",
-  "suspend",
-  "sympathy",
-  "thigh",
-  "throne",
-  "total",
-  "unseen",
-  "weapon",
-  "weary"
-]
diff --git a/networks/monero/wallet/seed/src/words/de.rs b/networks/monero/wallet/seed/src/words/de.rs
deleted file mode 100644
index 85dee081..00000000
--- a/networks/monero/wallet/seed/src/words/de.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "Abakus",
-  "Abart",
-  "abbilden",
-  "Abbruch",
-  "Abdrift",
-  "Abendrot",
-  "Abfahrt",
-  "abfeuern",
-  "Abflug",
-  "abfragen",
-  "Abglanz",
-  "abhärten",
-  "abheben",
-  "Abhilfe",
-  "Abitur",
-  "Abkehr",
-  "Ablauf",
-  "ablecken",
-  "Ablösung",
-  "Abnehmer",
-  "abnutzen",
-  "Abonnent",
-  "Abrasion",
-  "Abrede",
-  "abrüsten",
-  "Absicht",
-  "Absprung",
-  "Abstand",
-  "absuchen",
-  "Abteil",
-  "Abundanz",
-  "abwarten",
-  "Abwurf",
-  "Abzug",
-  "Achse",
-  "Achtung",
-  "Acker",
-  "Aderlass",
-  "Adler",
-  "Admiral",
-  "Adresse",
-  "Affe",
-  "Affront",
-  "Afrika",
-  "Aggregat",
-  "Agilität",
-  "ähneln",
-  "Ahnung",
-  "Ahorn",
-  "Akazie",
-  "Akkord",
-  "Akrobat",
-  "Aktfoto",
-  "Aktivist",
-  "Albatros",
-  "Alchimie",
-  "Alemanne",
-  "Alibi",
-  "Alkohol",
-  "Allee",
-  "Allüre",
-  "Almosen",
-  "Almweide",
-  "Aloe",
-  "Alpaka",
-  "Alpental",
-  "Alphabet",
-  "Alpinist",
-  "Alraune",
-  "Altbier",
-  "Alter",
-  "Altflöte",
-  "Altruist",
-  "Alublech",
-  "Aludose",
-  "Amateur",
-  "Amazonas",
-  "Ameise",
-  "Amnesie",
-  "Amok",
-  "Ampel",
-  "Amphibie",
-  "Ampulle",
-  "Amsel",
-  "Amulett",
-  "Anakonda",
-  "Analogie",
-  "Ananas",
-  "Anarchie",
-  "Anatomie",
-  "Anbau",
-  "Anbeginn",
-  "anbieten",
-  "Anblick",
-  "ändern",
-  "andocken",
-  "Andrang",
-  "anecken",
-  "Anflug",
-  "Anfrage",
-  "Anführer",
-  "Angebot",
-  "Angler",
-  "Anhalter",
-  "Anhöhe",
-  "Animator",
-  "Anis",
-  "Anker",
-  "ankleben",
-  "Ankunft",
-  "Anlage",
-  "anlocken",
-  "Anmut",
-  "Annahme",
-  "Anomalie",
-  "Anonymus",
-  "Anorak",
-  "anpeilen",
-  "Anrecht",
-  "Anruf",
-  "Ansage",
-  "Anschein",
-  "Ansicht",
-  "Ansporn",
-  "Anteil",
-  "Antlitz",
-  "Antrag",
-  "Antwort",
-  "Anwohner",
-  "Aorta",
-  "Apfel",
-  "Appetit",
-  "Applaus",
-  "Aquarium",
-  "Arbeit",
-  "Arche",
-  "Argument",
-  "Arktis",
-  "Armband",
-  "Aroma",
-  "Asche",
-  "Askese",
-  "Asphalt",
-  "Asteroid",
-  "Ästhetik",
-  "Astronom",
-  "Atelier",
-  "Athlet",
-  "Atlantik",
-  "Atmung",
-  "Audienz",
-  "aufatmen",
-  "Auffahrt",
-  "aufholen",
-  "aufregen",
-  "Aufsatz",
-  "Auftritt",
-  "Aufwand",
-  "Augapfel",
-  "Auktion",
-  "Ausbruch",
-  "Ausflug",
-  "Ausgabe",
-  "Aushilfe",
-  "Ausland",
-  "Ausnahme",
-  "Aussage",
-  "Autobahn",
-  "Avocado",
-  "Axthieb",
-  "Bach",
-  "backen",
-  "Badesee",
-  "Bahnhof",
-  "Balance",
-  "Balkon",
-  "Ballett",
-  "Balsam",
-  "Banane",
-  "Bandage",
-  "Bankett",
-  "Barbar",
-  "Barde",
-  "Barett",
-  "Bargeld",
-  "Barkasse",
-  "Barriere",
-  "Bart",
-  "Bass",
-  "Bastler",
-  "Batterie",
-  "Bauch",
-  "Bauer",
-  "Bauholz",
-  "Baujahr",
-  "Baum",
-  "Baustahl",
-  "Bauteil",
-  "Bauweise",
-  "Bazar",
-  "beachten",
-  "Beatmung",
-  "beben",
-  "Becher",
-  "Becken",
-  "bedanken",
-  "beeilen",
-  "beenden",
-  "Beere",
-  "befinden",
-  "Befreier",
-  "Begabung",
-  "Begierde",
-  "begrüßen",
-  "Beiboot",
-  "Beichte",
-  "Beifall",
-  "Beigabe",
-  "Beil",
-  "Beispiel",
-  "Beitrag",
-  "beizen",
-  "bekommen",
-  "beladen",
-  "Beleg",
-  "bellen",
-  "belohnen",
-  "Bemalung",
-  "Bengel",
-  "Benutzer",
-  "Benzin",
-  "beraten",
-  "Bereich",
-  "Bergluft",
-  "Bericht",
-  "Bescheid",
-  "Besitz",
-  "besorgen",
-  "Bestand",
-  "Besuch",
-  "betanken",
-  "beten",
-  "betören",
-  "Bett",
-  "Beule",
-  "Beute",
-  "Bewegung",
-  "bewirken",
-  "Bewohner",
-  "bezahlen",
-  "Bezug",
-  "biegen",
-  "Biene",
-  "Bierzelt",
-  "bieten",
-  "Bikini",
-  "Bildung",
-  "Billard",
-  "binden",
-  "Biobauer",
-  "Biologe",
-  "Bionik",
-  "Biotop",
-  "Birke",
-  "Bison",
-  "Bitte",
-  "Biwak",
-  "Bizeps",
-  "blasen",
-  "Blatt",
-  "Blauwal",
-  "Blende",
-  "Blick",
-  "Blitz",
-  "Blockade",
-  "Blödelei",
-  "Blondine",
-  "Blues",
-  "Blume",
-  "Blut",
-  "Bodensee",
-  "Bogen",
-  "Boje",
-  "Bollwerk",
-  "Bonbon",
-  "Bonus",
-  "Boot",
-  "Bordarzt",
-  "Börse",
-  "Böschung",
-  "Boudoir",
-  "Boxkampf",
-  "Boykott",
-  "Brahms",
-  "Brandung",
-  "Brauerei",
-  "Brecher",
-  "Breitaxt",
-  "Bremse",
-  "brennen",
-  "Brett",
-  "Brief",
-  "Brigade",
-  "Brillanz",
-  "bringen",
-  "brodeln",
-  "Brosche",
-  "Brötchen",
-  "Brücke",
-  "Brunnen",
-  "Brüste",
-  "Brutofen",
-  "Buch",
-  "Büffel",
-  "Bugwelle",
-  "Bühne",
-  "Buletten",
-  "Bullauge",
-  "Bumerang",
-  "bummeln",
-  "Buntglas",
-  "Bürde",
-  "Burgherr",
-  "Bursche",
-  "Busen",
-  "Buslinie",
-  "Bussard",
-  "Butangas",
-  "Butter",
-  "Cabrio",
-  "campen",
-  "Captain",
-  "Cartoon",
-  "Cello",
-  "Chalet",
-  "Charisma",
-  "Chefarzt",
-  "Chiffon",
-  "Chipsatz",
-  "Chirurg",
-  "Chor",
-  "Chronik",
-  "Chuzpe",
-  "Clubhaus",
-  "Cockpit",
-  "Codewort",
-  "Cognac",
-  "Coladose",
-  "Computer",
-  "Coupon",
-  "Cousin",
-  "Cracking",
-  "Crash",
-  "Curry",
-  "Dach",
-  "Dackel",
-  "daddeln",
-  "daliegen",
-  "Dame",
-  "Dammbau",
-  "Dämon",
-  "Dampflok",
-  "Dank",
-  "Darm",
-  "Datei",
-  "Datsche",
-  "Datteln",
-  "Datum",
-  "Dauer",
-  "Daunen",
-  "Deckel",
-  "Decoder",
-  "Defekt",
-  "Degen",
-  "Dehnung",
-  "Deiche",
-  "Dekade",
-  "Dekor",
-  "Delfin",
-  "Demut",
-  "denken",
-  "Deponie",
-  "Design",
-  "Desktop",
-  "Dessert",
-  "Detail",
-  "Detektiv",
-  "Dezibel",
-  "Diadem",
-  "Diagnose",
-  "Dialekt",
-  "Diamant",
-  "Dichter",
-  "Dickicht",
-  "Diesel",
-  "Diktat",
-  "Diplom",
-  "Direktor",
-  "Dirne",
-  "Diskurs",
-  "Distanz",
-  "Docht",
-  "Dohle",
-  "Dolch",
-  "Domäne",
-  "Donner",
-  "Dorade",
-  "Dorf",
-  "Dörrobst",
-  "Dorsch",
-  "Dossier",
-  "Dozent",
-  "Drachen",
-  "Draht",
-  "Drama",
-  "Drang",
-  "Drehbuch",
-  "Dreieck",
-  "Dressur",
-  "Drittel",
-  "Drossel",
-  "Druck",
-  "Duell",
-  "Duft",
-  "Düne",
-  "Dünung",
-  "dürfen",
-  "Duschbad",
-  "Düsenjet",
-  "Dynamik",
-  "Ebbe",
-  "Echolot",
-  "Echse",
-  "Eckball",
-  "Edding",
-  "Edelweiß",
-  "Eden",
-  "Edition",
-  "Efeu",
-  "Effekte",
-  "Egoismus",
-  "Ehre",
-  "Eiablage",
-  "Eiche",
-  "Eidechse",
-  "Eidotter",
-  "Eierkopf",
-  "Eigelb",
-  "Eiland",
-  "Eilbote",
-  "Eimer",
-  "einatmen",
-  "Einband",
-  "Eindruck",
-  "Einfall",
-  "Eingang",
-  "Einkauf",
-  "einladen",
-  "Einöde",
-  "Einrad",
-  "Eintopf",
-  "Einwurf",
-  "Einzug",
-  "Eisbär",
-  "Eisen",
-  "Eishöhle",
-  "Eismeer",
-  "Eiweiß",
-  "Ekstase",
-  "Elan",
-  "Elch",
-  "Elefant",
-  "Eleganz",
-  "Element",
-  "Elfe",
-  "Elite",
-  "Elixier",
-  "Ellbogen",
-  "Eloquenz",
-  "Emigrant",
-  "Emission",
-  "Emotion",
-  "Empathie",
-  "Empfang",
-  "Endzeit",
-  "Energie",
-  "Engpass",
-  "Enkel",
-  "Enklave",
-  "Ente",
-  "entheben",
-  "Entität",
-  "entladen",
-  "Entwurf",
-  "Episode",
-  "Epoche",
-  "erachten",
-  "Erbauer",
-  "erblühen",
-  "Erdbeere",
-  "Erde",
-  "Erdgas",
-  "Erdkunde",
-  "Erdnuss",
-  "Erdöl",
-  "Erdteil",
-  "Ereignis",
-  "Eremit",
-  "erfahren",
-  "Erfolg",
-  "erfreuen",
-  "erfüllen",
-  "Ergebnis",
-  "erhitzen",
-  "erkalten",
-  "erkennen",
-  "erleben",
-  "Erlösung",
-  "ernähren",
-  "erneuern",
-  "Ernte",
-  "Eroberer",
-  "eröffnen",
-  "Erosion",
-  "Erotik",
-  "Erpel",
-  "erraten",
-  "Erreger",
-  "erröten",
-  "Ersatz",
-  "Erstflug",
-  "Ertrag",
-  "Eruption",
-  "erwarten",
-  "erwidern",
-  "Erzbau",
-  "Erzeuger",
-  "erziehen",
-  "Esel",
-  "Eskimo",
-  "Eskorte",
-  "Espe",
-  "Espresso",
-  "essen",
-  "Etage",
-  "Etappe",
-  "Etat",
-  "Ethik",
-  "Etikett",
-  "Etüde",
-  "Eule",
-  "Euphorie",
-  "Europa",
-  "Everest",
-  "Examen",
-  "Exil",
-  "Exodus",
-  "Extrakt",
-  "Fabel",
-  "Fabrik",
-  "Fachmann",
-  "Fackel",
-  "Faden",
-  "Fagott",
-  "Fahne",
-  "Faible",
-  "Fairness",
-  "Fakt",
-  "Fakultät",
-  "Falke",
-  "Fallobst",
-  "Fälscher",
-  "Faltboot",
-  "Familie",
-  "Fanclub",
-  "Fanfare",
-  "Fangarm",
-  "Fantasie",
-  "Farbe",
-  "Farmhaus",
-  "Farn",
-  "Fasan",
-  "Faser",
-  "Fassung",
-  "fasten",
-  "Faulheit",
-  "Fauna",
-  "Faust",
-  "Favorit",
-  "Faxgerät",
-  "Fazit",
-  "fechten",
-  "Federboa",
-  "Fehler",
-  "Feier",
-  "Feige",
-  "feilen",
-  "Feinripp",
-  "Feldbett",
-  "Felge",
-  "Fellpony",
-  "Felswand",
-  "Ferien",
-  "Ferkel",
-  "Fernweh",
-  "Ferse",
-  "Fest",
-  "Fettnapf",
-  "Feuer",
-  "Fiasko",
-  "Fichte",
-  "Fiktion",
-  "Film",
-  "Filter",
-  "Filz",
-  "Finanzen",
-  "Findling",
-  "Finger",
-  "Fink",
-  "Finnwal",
-  "Fisch",
-  "Fitness",
-  "Fixpunkt",
-  "Fixstern",
-  "Fjord",
-  "Flachbau",
-  "Flagge",
-  "Flamenco",
-  "Flanke",
-  "Flasche",
-  "Flaute",
-  "Fleck",
-  "Flegel",
-  "flehen",
-  "Fleisch",
-  "fliegen",
-  "Flinte",
-  "Flirt",
-  "Flocke",
-  "Floh",
-  "Floskel",
-  "Floß",
-  "Flöte",
-  "Flugzeug",
-  "Flunder",
-  "Flusstal",
-  "Flutung",
-  "Fockmast",
-  "Fohlen",
-  "Föhnlage",
-  "Fokus",
-  "folgen",
-  "Foliant",
-  "Folklore",
-  "Fontäne",
-  "Förde",
-  "Forelle",
-  "Format",
-  "Forscher",
-  "Fortgang",
-  "Forum",
-  "Fotograf",
-  "Frachter",
-  "Fragment",
-  "Fraktion",
-  "fräsen",
-  "Frauenpo",
-  "Freak",
-  "Fregatte",
-  "Freiheit",
-  "Freude",
-  "Frieden",
-  "Frohsinn",
-  "Frosch",
-  "Frucht",
-  "Frühjahr",
-  "Fuchs",
-  "Fügung",
-  "fühlen",
-  "Füller",
-  "Fundbüro",
-  "Funkboje",
-  "Funzel",
-  "Furnier",
-  "Fürsorge",
-  "Fusel",
-  "Fußbad",
-  "Futteral",
-  "Gabelung",
-  "gackern",
-  "Gage",
-  "gähnen",
-  "Galaxie",
-  "Galeere",
-  "Galopp",
-  "Gameboy",
-  "Gamsbart",
-  "Gandhi",
-  "Gang",
-  "Garage",
-  "Gardine",
-  "Garküche",
-  "Garten",
-  "Gasthaus",
-  "Gattung",
-  "gaukeln",
-  "Gazelle",
-  "Gebäck",
-  "Gebirge",
-  "Gebräu",
-  "Geburt",
-  "Gedanke",
-  "Gedeck",
-  "Gedicht",
-  "Gefahr",
-  "Gefieder",
-  "Geflügel",
-  "Gefühl",
-  "Gegend",
-  "Gehirn",
-  "Gehöft",
-  "Gehweg",
-  "Geige",
-  "Geist",
-  "Gelage",
-  "Geld",
-  "Gelenk",
-  "Gelübde",
-  "Gemälde",
-  "Gemeinde",
-  "Gemüse",
-  "genesen",
-  "Genuss",
-  "Gepäck",
-  "Geranie",
-  "Gericht",
-  "Germane",
-  "Geruch",
-  "Gesang",
-  "Geschenk",
-  "Gesetz",
-  "Gesindel",
-  "Gesöff",
-  "Gespan",
-  "Gestade",
-  "Gesuch",
-  "Getier",
-  "Getränk",
-  "Getümmel",
-  "Gewand",
-  "Geweih",
-  "Gewitter",
-  "Gewölbe",
-  "Geysir",
-  "Giftzahn",
-  "Gipfel",
-  "Giraffe",
-  "Gitarre",
-  "glänzen",
-  "Glasauge",
-  "Glatze",
-  "Gleis",
-  "Globus",
-  "Glück",
-  "glühen",
-  "Glutofen",
-  "Goldzahn",
-  "Gondel",
-  "gönnen",
-  "Gottheit",
-  "graben",
-  "Grafik",
-  "Grashalm",
-  "Graugans",
-  "greifen",
-  "Grenze",
-  "grillen",
-  "Groschen",
-  "Grotte",
-  "Grube",
-  "Grünalge",
-  "Gruppe",
-  "gruseln",
-  "Gulasch",
-  "Gummibär",
-  "Gurgel",
-  "Gürtel",
-  "Güterzug",
-  "Haarband",
-  "Habicht",
-  "hacken",
-  "hadern",
-  "Hafen",
-  "Hagel",
-  "Hähnchen",
-  "Haifisch",
-  "Haken",
-  "Halbaffe",
-  "Halsader",
-  "halten",
-  "Halunke",
-  "Handbuch",
-  "Hanf",
-  "Harfe",
-  "Harnisch",
-  "härten",
-  "Harz",
-  "Hasenohr",
-  "Haube",
-  "hauchen",
-  "Haupt",
-  "Haut",
-  "Havarie",
-  "Hebamme",
-  "hecheln",
-  "Heck",
-  "Hedonist",
-  "Heiler",
-  "Heimat",
-  "Heizung",
-  "Hektik",
-  "Held",
-  "helfen",
-  "Helium",
-  "Hemd",
-  "hemmen",
-  "Hengst",
-  "Herd",
-  "Hering",
-  "Herkunft",
-  "Hermelin",
-  "Herrchen",
-  "Herzdame",
-  "Heulboje",
-  "Hexe",
-  "Hilfe",
-  "Himbeere",
-  "Himmel",
-  "Hingabe",
-  "hinhören",
-  "Hinweis",
-  "Hirsch",
-  "Hirte",
-  "Hitzkopf",
-  "Hobel",
-  "Hochform",
-  "Hocker",
-  "hoffen",
-  "Hofhund",
-  "Hofnarr",
-  "Höhenzug",
-  "Hohlraum",
-  "Hölle",
-  "Holzboot",
-  "Honig",
-  "Honorar",
-  "horchen",
-  "Hörprobe",
-  "Höschen",
-  "Hotel",
-  "Hubraum",
-  "Hufeisen",
-  "Hügel",
-  "huldigen",
-  "Hülle",
-  "Humbug",
-  "Hummer",
-  "Humor",
-  "Hund",
-  "Hunger",
-  "Hupe",
-  "Hürde",
-  "Hurrikan",
-  "Hydrant",
-  "Hypnose",
-  "Ibis",
-  "Idee",
-  "Idiot",
-  "Igel",
-  "Illusion",
-  "Imitat",
-  "impfen",
-  "Import",
-  "Inferno",
-  "Ingwer",
-  "Inhalte",
-  "Inland",
-  "Insekt",
-  "Ironie",
-  "Irrfahrt",
-  "Irrtum",
-  "Isolator",
-  "Istwert",
-  "Jacke",
-  "Jade",
-  "Jagdhund",
-  "Jäger",
-  "Jaguar",
-  "Jahr",
-  "Jähzorn",
-  "Jazzfest",
-  "Jetpilot",
-  "jobben",
-  "Jochbein",
-  "jodeln",
-  "Jodsalz",
-  "Jolle",
-  "Journal",
-  "Jubel",
-  "Junge",
-  "Junimond",
-  "Jupiter",
-  "Jutesack",
-  "Juwel",
-  "Kabarett",
-  "Kabine",
-  "Kabuff",
-  "Käfer",
-  "Kaffee",
-  "Kahlkopf",
-  "Kaimauer",
-  "Kajüte",
-  "Kaktus",
-  "Kaliber",
-  "Kaltluft",
-  "Kamel",
-  "kämmen",
-  "Kampagne",
-  "Kanal",
-  "Känguru",
-  "Kanister",
-  "Kanone",
-  "Kante",
-  "Kanu",
-  "kapern",
-  "Kapitän",
-  "Kapuze",
-  "Karneval",
-  "Karotte",
-  "Käsebrot",
-  "Kasper",
-  "Kastanie",
-  "Katalog",
-  "Kathode",
-  "Katze",
-  "kaufen",
-  "Kaugummi",
-  "Kauz",
-  "Kehle",
-  "Keilerei",
-  "Keksdose",
-  "Kellner",
-  "Keramik",
-  "Kerze",
-  "Kessel",
-  "Kette",
-  "keuchen",
-  "kichern",
-  "Kielboot",
-  "Kindheit",
-  "Kinnbart",
-  "Kinosaal",
-  "Kiosk",
-  "Kissen",
-  "Klammer",
-  "Klang",
-  "Klapprad",
-  "Klartext",
-  "kleben",
-  "Klee",
-  "Kleinod",
-  "Klima",
-  "Klingel",
-  "Klippe",
-  "Klischee",
-  "Kloster",
-  "Klugheit",
-  "Klüngel",
-  "kneten",
-  "Knie",
-  "Knöchel",
-  "knüpfen",
-  "Kobold",
-  "Kochbuch",
-  "Kohlrabi",
-  "Koje",
-  "Kokosöl",
-  "Kolibri",
-  "Kolumne",
-  "Kombüse",
-  "Komiker",
-  "kommen",
-  "Konto",
-  "Konzept",
-  "Kopfkino",
-  "Kordhose",
-  "Korken",
-  "Korsett",
-  "Kosename",
-  "Krabbe",
-  "Krach",
-  "Kraft",
-  "Krähe",
-  "Kralle",
-  "Krapfen",
-  "Krater",
-  "kraulen",
-  "Kreuz",
-  "Krokodil",
-  "Kröte",
-  "Kugel",
-  "Kuhhirt",
-  "Kühnheit",
-  "Künstler",
-  "Kurort",
-  "Kurve",
-  "Kurzfilm",
-  "kuscheln",
-  "küssen",
-  "Kutter",
-  "Labor",
-  "lachen",
-  "Lackaffe",
-  "Ladeluke",
-  "Lagune",
-  "Laib",
-  "Lakritze",
-  "Lammfell",
-  "Land",
-  "Langmut",
-  "Lappalie",
-  "Last",
-  "Laterne",
-  "Latzhose",
-  "Laubsäge",
-  "laufen",
-  "Laune",
-  "Lausbub",
-  "Lavasee",
-  "Leben",
-  "Leder",
-  "Leerlauf",
-  "Lehm",
-  "Lehrer",
-  "leihen",
-  "Lektüre",
-  "Lenker",
-  "Lerche",
-  "Leseecke",
-  "Leuchter",
-  "Lexikon",
-  "Libelle",
-  "Libido",
-  "Licht",
-  "Liebe",
-  "liefern",
-  "Liftboy",
-  "Limonade",
-  "Lineal",
-  "Linoleum",
-  "List",
-  "Liveband",
-  "Lobrede",
-  "locken",
-  "Löffel",
-  "Logbuch",
-  "Logik",
-  "Lohn",
-  "Loipe",
-  "Lokal",
-  "Lorbeer",
-  "Lösung",
-  "löten",
-  "Lottofee",
-  "Löwe",
-  "Luchs",
-  "Luder",
-  "Luftpost",
-  "Luke",
-  "Lümmel",
-  "Lunge",
-  "lutschen",
-  "Luxus",
-  "Macht",
-  "Magazin",
-  "Magier",
-  "Magnet",
-  "mähen",
-  "Mahlzeit",
-  "Mahnmal",
-  "Maibaum",
-  "Maisbrei",
-  "Makel",
-  "malen",
-  "Mammut",
-  "Maniküre",
-  "Mantel",
-  "Marathon",
-  "Marder",
-  "Marine",
-  "Marke",
-  "Marmor",
-  "Märzluft",
-  "Maske",
-  "Maßanzug",
-  "Maßkrug",
-  "Mastkorb",
-  "Material",
-  "Matratze",
-  "Mauerbau",
-  "Maulkorb",
-  "Mäuschen",
-  "Mäzen",
-  "Medium",
-  "Meinung",
-  "melden",
-  "Melodie",
-  "Mensch",
-  "Merkmal",
-  "Messe",
-  "Metall",
-  "Meteor",
-  "Methode",
-  "Metzger",
-  "Mieze",
-  "Milchkuh",
-  "Mimose",
-  "Minirock",
-  "Minute",
-  "mischen",
-  "Missetat",
-  "mitgehen",
-  "Mittag",
-  "Mixtape",
-  "Möbel",
-  "Modul",
-  "mögen",
-  "Möhre",
-  "Molch",
-  "Moment",
-  "Monat",
-  "Mondflug",
-  "Monitor",
-  "Monokini",
-  "Monster",
-  "Monument",
-  "Moorhuhn",
-  "Moos",
-  "Möpse",
-  "Moral",
-  "Mörtel",
-  "Motiv",
-  "Motorrad",
-  "Möwe",
-  "Mühe",
-  "Mulatte",
-  "Müller",
-  "Mumie",
-  "Mund",
-  "Münze",
-  "Muschel",
-  "Muster",
-  "Mythos",
-  "Nabel",
-  "Nachtzug",
-  "Nackedei",
-  "Nagel",
-  "Nähe",
-  "Nähnadel",
-  "Namen",
-  "Narbe",
-  "Narwal",
-  "Nasenbär",
-  "Natur",
-  "Nebel",
-  "necken",
-  "Neffe",
-  "Neigung",
-  "Nektar",
-  "Nenner",
-  "Neptun",
-  "Nerz",
-  "Nessel",
-  "Nestbau",
-  "Netz",
-  "Neubau",
-  "Neuerung",
-  "Neugier",
-  "nicken",
-  "Niere",
-  "Nilpferd",
-  "nisten",
-  "Nocke",
-  "Nomade",
-  "Nordmeer",
-  "Notdurft",
-  "Notstand",
-  "Notwehr",
-  "Nudismus",
-  "Nuss",
-  "Nutzhanf",
-  "Oase",
-  "Obdach",
-  "Oberarzt",
-  "Objekt",
-  "Oboe",
-  "Obsthain",
-  "Ochse",
-  "Odyssee",
-  "Ofenholz",
-  "öffnen",
-  "Ohnmacht",
-  "Ohrfeige",
-  "Ohrwurm",
-  "Ökologie",
-  "Oktave",
-  "Ölberg",
-  "Olive",
-  "Ölkrise",
-  "Omelett",
-  "Onkel",
-  "Oper",
-  "Optiker",
-  "Orange",
-  "Orchidee",
-  "ordnen",
-  "Orgasmus",
-  "Orkan",
-  "Ortskern",
-  "Ortung",
-  "Ostasien",
-  "Ozean",
-  "Paarlauf",
-  "Packeis",
-  "paddeln",
-  "Paket",
-  "Palast",
-  "Pandabär",
-  "Panik",
-  "Panorama",
-  "Panther",
-  "Papagei",
-  "Papier",
-  "Paprika",
-  "Paradies",
-  "Parka",
-  "Parodie",
-  "Partner",
-  "Passant",
-  "Patent",
-  "Patzer",
-  "Pause",
-  "Pavian",
-  "Pedal",
-  "Pegel",
-  "peilen",
-  "Perle",
-  "Person",
-  "Pfad",
-  "Pfau",
-  "Pferd",
-  "Pfleger",
-  "Physik",
-  "Pier",
-  "Pilotwal",
-  "Pinzette",
-  "Piste",
-  "Plakat",
-  "Plankton",
-  "Platin",
-  "Plombe",
-  "plündern",
-  "Pobacke",
-  "Pokal",
-  "polieren",
-  "Popmusik",
-  "Porträt",
-  "Posaune",
-  "Postamt",
-  "Pottwal",
-  "Pracht",
-  "Pranke",
-  "Preis",
-  "Primat",
-  "Prinzip",
-  "Protest",
-  "Proviant",
-  "Prüfung",
-  "Pubertät",
-  "Pudding",
-  "Pullover",
-  "Pulsader",
-  "Punkt",
-  "Pute",
-  "Putsch",
-  "Puzzle",
-  "Python",
-  "quaken",
-  "Qualle",
-  "Quark",
-  "Quellsee",
-  "Querkopf",
-  "Quitte",
-  "Quote",
-  "Rabauke",
-  "Rache",
-  "Radclub",
-  "Radhose",
-  "Radio",
-  "Radtour",
-  "Rahmen",
-  "Rampe",
-  "Randlage",
-  "Ranzen",
-  "Rapsöl",
-  "Raserei",
-  "rasten",
-  "Rasur",
-  "Rätsel",
-  "Raubtier",
-  "Raumzeit",
-  "Rausch",
-  "Reaktor",
-  "Realität",
-  "Rebell",
-  "Rede",
-  "Reetdach",
-  "Regatta",
-  "Regen",
-  "Rehkitz",
-  "Reifen",
-  "Reim",
-  "Reise",
-  "Reizung",
-  "Rekord",
-  "Relevanz",
-  "Rennboot",
-  "Respekt",
-  "Restmüll",
-  "retten",
-  "Reue",
-  "Revolte",
-  "Rhetorik",
-  "Rhythmus",
-  "Richtung",
-  "Riegel",
-  "Rindvieh",
-  "Rippchen",
-  "Ritter",
-  "Robbe",
-  "Roboter",
-  "Rockband",
-  "Rohdaten",
-  "Roller",
-  "Roman",
-  "röntgen",
-  "Rose",
-  "Rosskur",
-  "Rost",
-  "Rotahorn",
-  "Rotglut",
-  "Rotznase",
-  "Rubrik",
-  "Rückweg",
-  "Rufmord",
-  "Ruhe",
-  "Ruine",
-  "Rumpf",
-  "Runde",
-  "Rüstung",
-  "rütteln",
-  "Saaltür",
-  "Saatguts",
-  "Säbel",
-  "Sachbuch",
-  "Sack",
-  "Saft",
-  "sagen",
-  "Sahneeis",
-  "Salat",
-  "Salbe",
-  "Salz",
-  "Sammlung",
-  "Samt",
-  "Sandbank",
-  "Sanftmut",
-  "Sardine",
-  "Satire",
-  "Sattel",
-  "Satzbau",
-  "Sauerei",
-  "Saum",
-  "Säure",
-  "Schall",
-  "Scheitel",
-  "Schiff",
-  "Schlager",
-  "Schmied",
-  "Schnee",
-  "Scholle",
-  "Schrank",
-  "Schulbus",
-  "Schwan",
-  "Seeadler",
-  "Seefahrt",
-  "Seehund",
-  "Seeufer",
-  "segeln",
-  "Sehnerv",
-  "Seide",
-  "Seilzug",
-  "Senf",
-  "Sessel",
-  "Seufzer",
-  "Sexgott",
-  "Sichtung",
-  "Signal",
-  "Silber",
-  "singen",
-  "Sinn",
-  "Sirup",
-  "Sitzbank",
-  "Skandal",
-  "Skikurs",
-  "Skipper",
-  "Skizze",
-  "Smaragd",
-  "Socke",
-  "Sohn",
-  "Sommer",
-  "Songtext",
-  "Sorte",
-  "Spagat",
-  "Spannung",
-  "Spargel",
-  "Specht",
-  "Speiseöl",
-  "Spiegel",
-  "Sport",
-  "spülen",
-  "Stadtbus",
-  "Stall",
-  "Stärke",
-  "Stativ",
-  "staunen",
-  "Stern",
-  "Stiftung",
-  "Stollen",
-  "Strömung",
-  "Sturm",
-  "Substanz",
-  "Südalpen",
-  "Sumpf",
-  "surfen",
-  "Tabak",
-  "Tafel",
-  "Tagebau",
-  "takeln",
-  "Taktung",
-  "Talsohle",
-  "Tand",
-  "Tanzbär",
-  "Tapir",
-  "Tarantel",
-  "Tarnname",
-  "Tasse",
-  "Tatnacht",
-  "Tatsache",
-  "Tatze",
-  "Taube",
-  "tauchen",
-  "Taufpate",
-  "Taumel",
-  "Teelicht",
-  "Teich",
-  "teilen",
-  "Tempo",
-  "Tenor",
-  "Terrasse",
-  "Testflug",
-  "Theater",
-  "Thermik",
-  "ticken",
-  "Tiefflug",
-  "Tierart",
-  "Tigerhai",
-  "Tinte",
-  "Tischler",
-  "toben",
-  "Toleranz",
-  "Tölpel",
-  "Tonband",
-  "Topf",
-  "Topmodel",
-  "Torbogen",
-  "Torlinie",
-  "Torte",
-  "Tourist",
-  "Tragesel",
-  "trampeln",
-  "Trapez",
-  "Traum",
-  "treffen",
-  "Trennung",
-  "Treue",
-  "Trick",
-  "trimmen",
-  "Trödel",
-  "Trost",
-  "Trumpf",
-  "tüfteln",
-  "Turban",
-  "Turm",
-  "Übermut",
-  "Ufer",
-  "Uhrwerk",
-  "umarmen",
-  "Umbau",
-  "Umfeld",
-  "Umgang",
-  "Umsturz",
-  "Unart",
-  "Unfug",
-  "Unimog",
-  "Unruhe",
-  "Unwucht",
-  "Uranerz",
-  "Urlaub",
-  "Urmensch",
-  "Utopie",
-  "Vakuum",
-  "Valuta",
-  "Vandale",
-  "Vase",
-  "Vektor",
-  "Ventil",
-  "Verb",
-  "Verdeck",
-  "Verfall",
-  "Vergaser",
-  "verhexen",
-  "Verlag",
-  "Vers",
-  "Vesper",
-  "Vieh",
-  "Viereck",
-  "Vinyl",
-  "Virus",
-  "Vitrine",
-  "Vollblut",
-  "Vorbote",
-  "Vorrat",
-  "Vorsicht",
-  "Vulkan",
-  "Wachstum",
-  "Wade",
-  "Wagemut",
-  "Wahlen",
-  "Wahrheit",
-  "Wald",
-  "Walhai",
-  "Wallach",
-  "Walnuss",
-  "Walzer",
-  "wandeln",
-  "Wanze",
-  "wärmen",
-  "Warnruf",
-  "Wäsche",
-  "Wasser",
-  "Weberei",
-  "wechseln",
-  "Wegegeld",
-  "wehren",
-  "Weiher",
-  "Weinglas",
-  "Weißbier",
-  "Weitwurf",
-  "Welle",
-  "Weltall",
-  "Werkbank",
-  "Werwolf",
-  "Wetter",
-  "wiehern",
-  "Wildgans",
-  "Wind",
-  "Wohl",
-  "Wohnort",
-  "Wolf",
-  "Wollust",
-  "Wortlaut",
-  "Wrack",
-  "Wunder",
-  "Wurfaxt",
-  "Wurst",
-  "Yacht",
-  "Yeti",
-  "Zacke",
-  "Zahl",
-  "zähmen",
-  "Zahnfee",
-  "Zäpfchen",
-  "Zaster",
-  "Zaumzeug",
-  "Zebra",
-  "zeigen",
-  "Zeitlupe",
-  "Zellkern",
-  "Zeltdach",
-  "Zensor",
-  "Zerfall",
-  "Zeug",
-  "Ziege",
-  "Zielfoto",
-  "Zimteis",
-  "Zobel",
-  "Zollhund",
-  "Zombie",
-  "Zöpfe",
-  "Zucht",
-  "Zufahrt",
-  "Zugfahrt",
-  "Zugvogel",
-  "Zündung",
-  "Zweck",
-  "Zyklop"
-]
diff --git a/networks/monero/wallet/seed/src/words/en.rs b/networks/monero/wallet/seed/src/words/en.rs
deleted file mode 100644
index c6f9a454..00000000
--- a/networks/monero/wallet/seed/src/words/en.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "abbey",
-  "abducts",
-  "ability",
-  "ablaze",
-  "abnormal",
-  "abort",
-  "abrasive",
-  "absorb",
-  "abyss",
-  "academy",
-  "aces",
-  "aching",
-  "acidic",
-  "acoustic",
-  "acquire",
-  "across",
-  "actress",
-  "acumen",
-  "adapt",
-  "addicted",
-  "adept",
-  "adhesive",
-  "adjust",
-  "adopt",
-  "adrenalin",
-  "adult",
-  "adventure",
-  "aerial",
-  "afar",
-  "affair",
-  "afield",
-  "afloat",
-  "afoot",
-  "afraid",
-  "after",
-  "against",
-  "agenda",
-  "aggravate",
-  "agile",
-  "aglow",
-  "agnostic",
-  "agony",
-  "agreed",
-  "ahead",
-  "aided",
-  "ailments",
-  "aimless",
-  "airport",
-  "aisle",
-  "ajar",
-  "akin",
-  "alarms",
-  "album",
-  "alchemy",
-  "alerts",
-  "algebra",
-  "alkaline",
-  "alley",
-  "almost",
-  "aloof",
-  "alpine",
-  "already",
-  "also",
-  "altitude",
-  "alumni",
-  "always",
-  "amaze",
-  "ambush",
-  "amended",
-  "amidst",
-  "ammo",
-  "amnesty",
-  "among",
-  "amply",
-  "amused",
-  "anchor",
-  "android",
-  "anecdote",
-  "angled",
-  "ankle",
-  "annoyed",
-  "answers",
-  "antics",
-  "anvil",
-  "anxiety",
-  "anybody",
-  "apart",
-  "apex",
-  "aphid",
-  "aplomb",
-  "apology",
-  "apply",
-  "apricot",
-  "aptitude",
-  "aquarium",
-  "arbitrary",
-  "archer",
-  "ardent",
-  "arena",
-  "argue",
-  "arises",
-  "army",
-  "around",
-  "arrow",
-  "arsenic",
-  "artistic",
-  "ascend",
-  "ashtray",
-  "aside",
-  "asked",
-  "asleep",
-  "aspire",
-  "assorted",
-  "asylum",
-  "athlete",
-  "atlas",
-  "atom",
-  "atrium",
-  "attire",
-  "auburn",
-  "auctions",
-  "audio",
-  "august",
-  "aunt",
-  "austere",
-  "autumn",
-  "avatar",
-  "avidly",
-  "avoid",
-  "awakened",
-  "awesome",
-  "awful",
-  "awkward",
-  "awning",
-  "awoken",
-  "axes",
-  "axis",
-  "axle",
-  "aztec",
-  "azure",
-  "baby",
-  "bacon",
-  "badge",
-  "baffles",
-  "bagpipe",
-  "bailed",
-  "bakery",
-  "balding",
-  "bamboo",
-  "banjo",
-  "baptism",
-  "basin",
-  "batch",
-  "bawled",
-  "bays",
-  "because",
-  "beer",
-  "befit",
-  "begun",
-  "behind",
-  "being",
-  "below",
-  "bemused",
-  "benches",
-  "berries",
-  "bested",
-  "betting",
-  "bevel",
-  "beware",
-  "beyond",
-  "bias",
-  "bicycle",
-  "bids",
-  "bifocals",
-  "biggest",
-  "bikini",
-  "bimonthly",
-  "binocular",
-  "biology",
-  "biplane",
-  "birth",
-  "biscuit",
-  "bite",
-  "biweekly",
-  "blender",
-  "blip",
-  "bluntly",
-  "boat",
-  "bobsled",
-  "bodies",
-  "bogeys",
-  "boil",
-  "boldly",
-  "bomb",
-  "border",
-  "boss",
-  "both",
-  "bounced",
-  "bovine",
-  "bowling",
-  "boxes",
-  "boyfriend",
-  "broken",
-  "brunt",
-  "bubble",
-  "buckets",
-  "budget",
-  "buffet",
-  "bugs",
-  "building",
-  "bulb",
-  "bumper",
-  "bunch",
-  "business",
-  "butter",
-  "buying",
-  "buzzer",
-  "bygones",
-  "byline",
-  "bypass",
-  "cabin",
-  "cactus",
-  "cadets",
-  "cafe",
-  "cage",
-  "cajun",
-  "cake",
-  "calamity",
-  "camp",
-  "candy",
-  "casket",
-  "catch",
-  "cause",
-  "cavernous",
-  "cease",
-  "cedar",
-  "ceiling",
-  "cell",
-  "cement",
-  "cent",
-  "certain",
-  "chlorine",
-  "chrome",
-  "cider",
-  "cigar",
-  "cinema",
-  "circle",
-  "cistern",
-  "citadel",
-  "civilian",
-  "claim",
-  "click",
-  "clue",
-  "coal",
-  "cobra",
-  "cocoa",
-  "code",
-  "coexist",
-  "coffee",
-  "cogs",
-  "cohesive",
-  "coils",
-  "colony",
-  "comb",
-  "cool",
-  "copy",
-  "corrode",
-  "costume",
-  "cottage",
-  "cousin",
-  "cowl",
-  "criminal",
-  "cube",
-  "cucumber",
-  "cuddled",
-  "cuffs",
-  "cuisine",
-  "cunning",
-  "cupcake",
-  "custom",
-  "cycling",
-  "cylinder",
-  "cynical",
-  "dabbing",
-  "dads",
-  "daft",
-  "dagger",
-  "daily",
-  "damp",
-  "dangerous",
-  "dapper",
-  "darted",
-  "dash",
-  "dating",
-  "dauntless",
-  "dawn",
-  "daytime",
-  "dazed",
-  "debut",
-  "decay",
-  "dedicated",
-  "deepest",
-  "deftly",
-  "degrees",
-  "dehydrate",
-  "deity",
-  "dejected",
-  "delayed",
-  "demonstrate",
-  "dented",
-  "deodorant",
-  "depth",
-  "desk",
-  "devoid",
-  "dewdrop",
-  "dexterity",
-  "dialect",
-  "dice",
-  "diet",
-  "different",
-  "digit",
-  "dilute",
-  "dime",
-  "dinner",
-  "diode",
-  "diplomat",
-  "directed",
-  "distance",
-  "ditch",
-  "divers",
-  "dizzy",
-  "doctor",
-  "dodge",
-  "does",
-  "dogs",
-  "doing",
-  "dolphin",
-  "domestic",
-  "donuts",
-  "doorway",
-  "dormant",
-  "dosage",
-  "dotted",
-  "double",
-  "dove",
-  "down",
-  "dozen",
-  "dreams",
-  "drinks",
-  "drowning",
-  "drunk",
-  "drying",
-  "dual",
-  "dubbed",
-  "duckling",
-  "dude",
-  "duets",
-  "duke",
-  "dullness",
-  "dummy",
-  "dunes",
-  "duplex",
-  "duration",
-  "dusted",
-  "duties",
-  "dwarf",
-  "dwelt",
-  "dwindling",
-  "dying",
-  "dynamite",
-  "dyslexic",
-  "each",
-  "eagle",
-  "earth",
-  "easy",
-  "eating",
-  "eavesdrop",
-  "eccentric",
-  "echo",
-  "eclipse",
-  "economics",
-  "ecstatic",
-  "eden",
-  "edgy",
-  "edited",
-  "educated",
-  "eels",
-  "efficient",
-  "eggs",
-  "egotistic",
-  "eight",
-  "either",
-  "eject",
-  "elapse",
-  "elbow",
-  "eldest",
-  "eleven",
-  "elite",
-  "elope",
-  "else",
-  "eluded",
-  "emails",
-  "ember",
-  "emerge",
-  "emit",
-  "emotion",
-  "empty",
-  "emulate",
-  "energy",
-  "enforce",
-  "enhanced",
-  "enigma",
-  "enjoy",
-  "enlist",
-  "enmity",
-  "enough",
-  "enraged",
-  "ensign",
-  "entrance",
-  "envy",
-  "epoxy",
-  "equip",
-  "erase",
-  "erected",
-  "erosion",
-  "error",
-  "eskimos",
-  "espionage",
-  "essential",
-  "estate",
-  "etched",
-  "eternal",
-  "ethics",
-  "etiquette",
-  "evaluate",
-  "evenings",
-  "evicted",
-  "evolved",
-  "examine",
-  "excess",
-  "exhale",
-  "exit",
-  "exotic",
-  "exquisite",
-  "extra",
-  "exult",
-  "fabrics",
-  "factual",
-  "fading",
-  "fainted",
-  "faked",
-  "fall",
-  "family",
-  "fancy",
-  "farming",
-  "fatal",
-  "faulty",
-  "fawns",
-  "faxed",
-  "fazed",
-  "feast",
-  "february",
-  "federal",
-  "feel",
-  "feline",
-  "females",
-  "fences",
-  "ferry",
-  "festival",
-  "fetches",
-  "fever",
-  "fewest",
-  "fiat",
-  "fibula",
-  "fictional",
-  "fidget",
-  "fierce",
-  "fifteen",
-  "fight",
-  "films",
-  "firm",
-  "fishing",
-  "fitting",
-  "five",
-  "fixate",
-  "fizzle",
-  "fleet",
-  "flippant",
-  "flying",
-  "foamy",
-  "focus",
-  "foes",
-  "foggy",
-  "foiled",
-  "folding",
-  "fonts",
-  "foolish",
-  "fossil",
-  "fountain",
-  "fowls",
-  "foxes",
-  "foyer",
-  "framed",
-  "friendly",
-  "frown",
-  "fruit",
-  "frying",
-  "fudge",
-  "fuel",
-  "fugitive",
-  "fully",
-  "fuming",
-  "fungal",
-  "furnished",
-  "fuselage",
-  "future",
-  "fuzzy",
-  "gables",
-  "gadget",
-  "gags",
-  "gained",
-  "galaxy",
-  "gambit",
-  "gang",
-  "gasp",
-  "gather",
-  "gauze",
-  "gave",
-  "gawk",
-  "gaze",
-  "gearbox",
-  "gecko",
-  "geek",
-  "gels",
-  "gemstone",
-  "general",
-  "geometry",
-  "germs",
-  "gesture",
-  "getting",
-  "geyser",
-  "ghetto",
-  "ghost",
-  "giant",
-  "giddy",
-  "gifts",
-  "gigantic",
-  "gills",
-  "gimmick",
-  "ginger",
-  "girth",
-  "giving",
-  "glass",
-  "gleeful",
-  "glide",
-  "gnaw",
-  "gnome",
-  "goat",
-  "goblet",
-  "godfather",
-  "goes",
-  "goggles",
-  "going",
-  "goldfish",
-  "gone",
-  "goodbye",
-  "gopher",
-  "gorilla",
-  "gossip",
-  "gotten",
-  "gourmet",
-  "governing",
-  "gown",
-  "greater",
-  "grunt",
-  "guarded",
-  "guest",
-  "guide",
-  "gulp",
-  "gumball",
-  "guru",
-  "gusts",
-  "gutter",
-  "guys",
-  "gymnast",
-  "gypsy",
-  "gyrate",
-  "habitat",
-  "hacksaw",
-  "haggled",
-  "hairy",
-  "hamburger",
-  "happens",
-  "hashing",
-  "hatchet",
-  "haunted",
-  "having",
-  "hawk",
-  "haystack",
-  "hazard",
-  "hectare",
-  "hedgehog",
-  "heels",
-  "hefty",
-  "height",
-  "hemlock",
-  "hence",
-  "heron",
-  "hesitate",
-  "hexagon",
-  "hickory",
-  "hiding",
-  "highway",
-  "hijack",
-  "hiker",
-  "hills",
-  "himself",
-  "hinder",
-  "hippo",
-  "hire",
-  "history",
-  "hitched",
-  "hive",
-  "hoax",
-  "hobby",
-  "hockey",
-  "hoisting",
-  "hold",
-  "honked",
-  "hookup",
-  "hope",
-  "hornet",
-  "hospital",
-  "hotel",
-  "hounded",
-  "hover",
-  "howls",
-  "hubcaps",
-  "huddle",
-  "huge",
-  "hull",
-  "humid",
-  "hunter",
-  "hurried",
-  "husband",
-  "huts",
-  "hybrid",
-  "hydrogen",
-  "hyper",
-  "iceberg",
-  "icing",
-  "icon",
-  "identity",
-  "idiom",
-  "idled",
-  "idols",
-  "igloo",
-  "ignore",
-  "iguana",
-  "illness",
-  "imagine",
-  "imbalance",
-  "imitate",
-  "impel",
-  "inactive",
-  "inbound",
-  "incur",
-  "industrial",
-  "inexact",
-  "inflamed",
-  "ingested",
-  "initiate",
-  "injury",
-  "inkling",
-  "inline",
-  "inmate",
-  "innocent",
-  "inorganic",
-  "input",
-  "inquest",
-  "inroads",
-  "insult",
-  "intended",
-  "inundate",
-  "invoke",
-  "inwardly",
-  "ionic",
-  "irate",
-  "iris",
-  "irony",
-  "irritate",
-  "island",
-  "isolated",
-  "issued",
-  "italics",
-  "itches",
-  "items",
-  "itinerary",
-  "itself",
-  "ivory",
-  "jabbed",
-  "jackets",
-  "jaded",
-  "jagged",
-  "jailed",
-  "jamming",
-  "january",
-  "jargon",
-  "jaunt",
-  "javelin",
-  "jaws",
-  "jazz",
-  "jeans",
-  "jeers",
-  "jellyfish",
-  "jeopardy",
-  "jerseys",
-  "jester",
-  "jetting",
-  "jewels",
-  "jigsaw",
-  "jingle",
-  "jittery",
-  "jive",
-  "jobs",
-  "jockey",
-  "jogger",
-  "joining",
-  "joking",
-  "jolted",
-  "jostle",
-  "journal",
-  "joyous",
-  "jubilee",
-  "judge",
-  "juggled",
-  "juicy",
-  "jukebox",
-  "july",
-  "jump",
-  "junk",
-  "jury",
-  "justice",
-  "juvenile",
-  "kangaroo",
-  "karate",
-  "keep",
-  "kennel",
-  "kept",
-  "kernels",
-  "kettle",
-  "keyboard",
-  "kickoff",
-  "kidneys",
-  "king",
-  "kiosk",
-  "kisses",
-  "kitchens",
-  "kiwi",
-  "knapsack",
-  "knee",
-  "knife",
-  "knowledge",
-  "knuckle",
-  "koala",
-  "laboratory",
-  "ladder",
-  "lagoon",
-  "lair",
-  "lakes",
-  "lamb",
-  "language",
-  "laptop",
-  "large",
-  "last",
-  "later",
-  "launching",
-  "lava",
-  "lawsuit",
-  "layout",
-  "lazy",
-  "lectures",
-  "ledge",
-  "leech",
-  "left",
-  "legion",
-  "leisure",
-  "lemon",
-  "lending",
-  "leopard",
-  "lesson",
-  "lettuce",
-  "lexicon",
-  "liar",
-  "library",
-  "licks",
-  "lids",
-  "lied",
-  "lifestyle",
-  "light",
-  "likewise",
-  "lilac",
-  "limits",
-  "linen",
-  "lion",
-  "lipstick",
-  "liquid",
-  "listen",
-  "lively",
-  "loaded",
-  "lobster",
-  "locker",
-  "lodge",
-  "lofty",
-  "logic",
-  "loincloth",
-  "long",
-  "looking",
-  "lopped",
-  "lordship",
-  "losing",
-  "lottery",
-  "loudly",
-  "love",
-  "lower",
-  "loyal",
-  "lucky",
-  "luggage",
-  "lukewarm",
-  "lullaby",
-  "lumber",
-  "lunar",
-  "lurk",
-  "lush",
-  "luxury",
-  "lymph",
-  "lynx",
-  "lyrics",
-  "macro",
-  "madness",
-  "magically",
-  "mailed",
-  "major",
-  "makeup",
-  "malady",
-  "mammal",
-  "maps",
-  "masterful",
-  "match",
-  "maul",
-  "maverick",
-  "maximum",
-  "mayor",
-  "maze",
-  "meant",
-  "mechanic",
-  "medicate",
-  "meeting",
-  "megabyte",
-  "melting",
-  "memoir",
-  "menu",
-  "merger",
-  "mesh",
-  "metro",
-  "mews",
-  "mice",
-  "midst",
-  "mighty",
-  "mime",
-  "mirror",
-  "misery",
-  "mittens",
-  "mixture",
-  "moat",
-  "mobile",
-  "mocked",
-  "mohawk",
-  "moisture",
-  "molten",
-  "moment",
-  "money",
-  "moon",
-  "mops",
-  "morsel",
-  "mostly",
-  "motherly",
-  "mouth",
-  "movement",
-  "mowing",
-  "much",
-  "muddy",
-  "muffin",
-  "mugged",
-  "mullet",
-  "mumble",
-  "mundane",
-  "muppet",
-  "mural",
-  "musical",
-  "muzzle",
-  "myriad",
-  "mystery",
-  "myth",
-  "nabbing",
-  "nagged",
-  "nail",
-  "names",
-  "nanny",
-  "napkin",
-  "narrate",
-  "nasty",
-  "natural",
-  "nautical",
-  "navy",
-  "nearby",
-  "necklace",
-  "needed",
-  "negative",
-  "neither",
-  "neon",
-  "nephew",
-  "nerves",
-  "nestle",
-  "network",
-  "neutral",
-  "never",
-  "newt",
-  "nexus",
-  "nibs",
-  "niche",
-  "niece",
-  "nifty",
-  "nightly",
-  "nimbly",
-  "nineteen",
-  "nirvana",
-  "nitrogen",
-  "nobody",
-  "nocturnal",
-  "nodes",
-  "noises",
-  "nomad",
-  "noodles",
-  "northern",
-  "nostril",
-  "noted",
-  "nouns",
-  "novelty",
-  "nowhere",
-  "nozzle",
-  "nuance",
-  "nucleus",
-  "nudged",
-  "nugget",
-  "nuisance",
-  "null",
-  "number",
-  "nuns",
-  "nurse",
-  "nutshell",
-  "nylon",
-  "oaks",
-  "oars",
-  "oasis",
-  "oatmeal",
-  "obedient",
-  "object",
-  "obliged",
-  "obnoxious",
-  "observant",
-  "obtains",
-  "obvious",
-  "occur",
-  "ocean",
-  "october",
-  "odds",
-  "odometer",
-  "offend",
-  "often",
-  "oilfield",
-  "ointment",
-  "okay",
-  "older",
-  "olive",
-  "olympics",
-  "omega",
-  "omission",
-  "omnibus",
-  "onboard",
-  "oncoming",
-  "oneself",
-  "ongoing",
-  "onion",
-  "online",
-  "onslaught",
-  "onto",
-  "onward",
-  "oozed",
-  "opacity",
-  "opened",
-  "opposite",
-  "optical",
-  "opus",
-  "orange",
-  "orbit",
-  "orchid",
-  "orders",
-  "organs",
-  "origin",
-  "ornament",
-  "orphans",
-  "oscar",
-  "ostrich",
-  "otherwise",
-  "otter",
-  "ouch",
-  "ought",
-  "ounce",
-  "ourselves",
-  "oust",
-  "outbreak",
-  "oval",
-  "oven",
-  "owed",
-  "owls",
-  "owner",
-  "oxidant",
-  "oxygen",
-  "oyster",
-  "ozone",
-  "pact",
-  "paddles",
-  "pager",
-  "pairing",
-  "palace",
-  "pamphlet",
-  "pancakes",
-  "paper",
-  "paradise",
-  "pastry",
-  "patio",
-  "pause",
-  "pavements",
-  "pawnshop",
-  "payment",
-  "peaches",
-  "pebbles",
-  "peculiar",
-  "pedantic",
-  "peeled",
-  "pegs",
-  "pelican",
-  "pencil",
-  "people",
-  "pepper",
-  "perfect",
-  "pests",
-  "petals",
-  "phase",
-  "pheasants",
-  "phone",
-  "phrases",
-  "physics",
-  "piano",
-  "picked",
-  "pierce",
-  "pigment",
-  "piloted",
-  "pimple",
-  "pinched",
-  "pioneer",
-  "pipeline",
-  "pirate",
-  "pistons",
-  "pitched",
-  "pivot",
-  "pixels",
-  "pizza",
-  "playful",
-  "pledge",
-  "pliers",
-  "plotting",
-  "plus",
-  "plywood",
-  "poaching",
-  "pockets",
-  "podcast",
-  "poetry",
-  "point",
-  "poker",
-  "polar",
-  "ponies",
-  "pool",
-  "popular",
-  "portents",
-  "possible",
-  "potato",
-  "pouch",
-  "poverty",
-  "powder",
-  "pram",
-  "present",
-  "pride",
-  "problems",
-  "pruned",
-  "prying",
-  "psychic",
-  "public",
-  "puck",
-  "puddle",
-  "puffin",
-  "pulp",
-  "pumpkins",
-  "punch",
-  "puppy",
-  "purged",
-  "push",
-  "putty",
-  "puzzled",
-  "pylons",
-  "pyramid",
-  "python",
-  "queen",
-  "quick",
-  "quote",
-  "rabbits",
-  "racetrack",
-  "radar",
-  "rafts",
-  "rage",
-  "railway",
-  "raking",
-  "rally",
-  "ramped",
-  "randomly",
-  "rapid",
-  "rarest",
-  "rash",
-  "rated",
-  "ravine",
-  "rays",
-  "razor",
-  "react",
-  "rebel",
-  "recipe",
-  "reduce",
-  "reef",
-  "refer",
-  "regular",
-  "reheat",
-  "reinvest",
-  "rejoices",
-  "rekindle",
-  "relic",
-  "remedy",
-  "renting",
-  "reorder",
-  "repent",
-  "request",
-  "reruns",
-  "rest",
-  "return",
-  "reunion",
-  "revamp",
-  "rewind",
-  "rhino",
-  "rhythm",
-  "ribbon",
-  "richly",
-  "ridges",
-  "rift",
-  "rigid",
-  "rims",
-  "ringing",
-  "riots",
-  "ripped",
-  "rising",
-  "ritual",
-  "river",
-  "roared",
-  "robot",
-  "rockets",
-  "rodent",
-  "rogue",
-  "roles",
-  "romance",
-  "roomy",
-  "roped",
-  "roster",
-  "rotate",
-  "rounded",
-  "rover",
-  "rowboat",
-  "royal",
-  "ruby",
-  "rudely",
-  "ruffled",
-  "rugged",
-  "ruined",
-  "ruling",
-  "rumble",
-  "runway",
-  "rural",
-  "rustled",
-  "ruthless",
-  "sabotage",
-  "sack",
-  "sadness",
-  "safety",
-  "saga",
-  "sailor",
-  "sake",
-  "salads",
-  "sample",
-  "sanity",
-  "sapling",
-  "sarcasm",
-  "sash",
-  "satin",
-  "saucepan",
-  "saved",
-  "sawmill",
-  "saxophone",
-  "sayings",
-  "scamper",
-  "scenic",
-  "school",
-  "science",
-  "scoop",
-  "scrub",
-  "scuba",
-  "seasons",
-  "second",
-  "sedan",
-  "seeded",
-  "segments",
-  "seismic",
-  "selfish",
-  "semifinal",
-  "sensible",
-  "september",
-  "sequence",
-  "serving",
-  "session",
-  "setup",
-  "seventh",
-  "sewage",
-  "shackles",
-  "shelter",
-  "shipped",
-  "shocking",
-  "shrugged",
-  "shuffled",
-  "shyness",
-  "siblings",
-  "sickness",
-  "sidekick",
-  "sieve",
-  "sifting",
-  "sighting",
-  "silk",
-  "simplest",
-  "sincerely",
-  "sipped",
-  "siren",
-  "situated",
-  "sixteen",
-  "sizes",
-  "skater",
-  "skew",
-  "skirting",
-  "skulls",
-  "skydive",
-  "slackens",
-  "sleepless",
-  "slid",
-  "slower",
-  "slug",
-  "smash",
-  "smelting",
-  "smidgen",
-  "smog",
-  "smuggled",
-  "snake",
-  "sneeze",
-  "sniff",
-  "snout",
-  "snug",
-  "soapy",
-  "sober",
-  "soccer",
-  "soda",
-  "software",
-  "soggy",
-  "soil",
-  "solved",
-  "somewhere",
-  "sonic",
-  "soothe",
-  "soprano",
-  "sorry",
-  "southern",
-  "sovereign",
-  "sowed",
-  "soya",
-  "space",
-  "speedy",
-  "sphere",
-  "spiders",
-  "splendid",
-  "spout",
-  "sprig",
-  "spud",
-  "spying",
-  "square",
-  "stacking",
-  "stellar",
-  "stick",
-  "stockpile",
-  "strained",
-  "stunning",
-  "stylishly",
-  "subtly",
-  "succeed",
-  "suddenly",
-  "suede",
-  "suffice",
-  "sugar",
-  "suitcase",
-  "sulking",
-  "summon",
-  "sunken",
-  "superior",
-  "surfer",
-  "sushi",
-  "suture",
-  "swagger",
-  "swept",
-  "swiftly",
-  "sword",
-  "swung",
-  "syllabus",
-  "symptoms",
-  "syndrome",
-  "syringe",
-  "system",
-  "taboo",
-  "tacit",
-  "tadpoles",
-  "tagged",
-  "tail",
-  "taken",
-  "talent",
-  "tamper",
-  "tanks",
-  "tapestry",
-  "tarnished",
-  "tasked",
-  "tattoo",
-  "taunts",
-  "tavern",
-  "tawny",
-  "taxi",
-  "teardrop",
-  "technical",
-  "tedious",
-  "teeming",
-  "tell",
-  "template",
-  "tender",
-  "tepid",
-  "tequila",
-  "terminal",
-  "testing",
-  "tether",
-  "textbook",
-  "thaw",
-  "theatrics",
-  "thirsty",
-  "thorn",
-  "threaten",
-  "thumbs",
-  "thwart",
-  "ticket",
-  "tidy",
-  "tiers",
-  "tiger",
-  "tilt",
-  "timber",
-  "tinted",
-  "tipsy",
-  "tirade",
-  "tissue",
-  "titans",
-  "toaster",
-  "tobacco",
-  "today",
-  "toenail",
-  "toffee",
-  "together",
-  "toilet",
-  "token",
-  "tolerant",
-  "tomorrow",
-  "tonic",
-  "toolbox",
-  "topic",
-  "torch",
-  "tossed",
-  "total",
-  "touchy",
-  "towel",
-  "toxic",
-  "toyed",
-  "trash",
-  "trendy",
-  "tribal",
-  "trolling",
-  "truth",
-  "trying",
-  "tsunami",
-  "tubes",
-  "tucks",
-  "tudor",
-  "tuesday",
-  "tufts",
-  "tugs",
-  "tuition",
-  "tulips",
-  "tumbling",
-  "tunnel",
-  "turnip",
-  "tusks",
-  "tutor",
-  "tuxedo",
-  "twang",
-  "tweezers",
-  "twice",
-  "twofold",
-  "tycoon",
-  "typist",
-  "tyrant",
-  "ugly",
-  "ulcers",
-  "ultimate",
-  "umbrella",
-  "umpire",
-  "unafraid",
-  "unbending",
-  "uncle",
-  "under",
-  "uneven",
-  "unfit",
-  "ungainly",
-  "unhappy",
-  "union",
-  "unjustly",
-  "unknown",
-  "unlikely",
-  "unmask",
-  "unnoticed",
-  "unopened",
-  "unplugs",
-  "unquoted",
-  "unrest",
-  "unsafe",
-  "until",
-  "unusual",
-  "unveil",
-  "unwind",
-  "unzip",
-  "upbeat",
-  "upcoming",
-  "update",
-  "upgrade",
-  "uphill",
-  "upkeep",
-  "upload",
-  "upon",
-  "upper",
-  "upright",
-  "upstairs",
-  "uptight",
-  "upwards",
-  "urban",
-  "urchins",
-  "urgent",
-  "usage",
-  "useful",
-  "usher",
-  "using",
-  "usual",
-  "utensils",
-  "utility",
-  "utmost",
-  "utopia",
-  "uttered",
-  "vacation",
-  "vague",
-  "vain",
-  "value",
-  "vampire",
-  "vane",
-  "vapidly",
-  "vary",
-  "vastness",
-  "vats",
-  "vaults",
-  "vector",
-  "veered",
-  "vegan",
-  "vehicle",
-  "vein",
-  "velvet",
-  "venomous",
-  "verification",
-  "vessel",
-  "veteran",
-  "vexed",
-  "vials",
-  "vibrate",
-  "victim",
-  "video",
-  "viewpoint",
-  "vigilant",
-  "viking",
-  "village",
-  "vinegar",
-  "violin",
-  "vipers",
-  "virtual",
-  "visited",
-  "vitals",
-  "vivid",
-  "vixen",
-  "vocal",
-  "vogue",
-  "voice",
-  "volcano",
-  "vortex",
-  "voted",
-  "voucher",
-  "vowels",
-  "voyage",
-  "vulture",
-  "wade",
-  "waffle",
-  "wagtail",
-  "waist",
-  "waking",
-  "wallets",
-  "wanted",
-  "warped",
-  "washing",
-  "water",
-  "waveform",
-  "waxing",
-  "wayside",
-  "weavers",
-  "website",
-  "wedge",
-  "weekday",
-  "weird",
-  "welders",
-  "went",
-  "wept",
-  "were",
-  "western",
-  "wetsuit",
-  "whale",
-  "when",
-  "whipped",
-  "whole",
-  "wickets",
-  "width",
-  "wield",
-  "wife",
-  "wiggle",
-  "wildly",
-  "winter",
-  "wipeout",
-  "wiring",
-  "wise",
-  "withdrawn",
-  "wives",
-  "wizard",
-  "wobbly",
-  "woes",
-  "woken",
-  "wolf",
-  "womanly",
-  "wonders",
-  "woozy",
-  "worry",
-  "wounded",
-  "woven",
-  "wrap",
-  "wrist",
-  "wrong",
-  "yacht",
-  "yahoo",
-  "yanks",
-  "yard",
-  "yawning",
-  "yearbook",
-  "yellow",
-  "yesterday",
-  "yeti",
-  "yields",
-  "yodel",
-  "yoga",
-  "younger",
-  "yoyo",
-  "zapped",
-  "zeal",
-  "zebra",
-  "zero",
-  "zesty",
-  "zigzags",
-  "zinger",
-  "zippers",
-  "zodiac",
-  "zombie",
-  "zones",
-  "zoom"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/eo.rs b/networks/monero/wallet/seed/src/words/eo.rs
deleted file mode 100644
index d9d6ff40..00000000
--- a/networks/monero/wallet/seed/src/words/eo.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "abako",
-  "abdiki",
-  "abelo",
-  "abituriento",
-  "ablativo",
-  "abnorma",
-  "abonantoj",
-  "abrikoto",
-  "absoluta",
-  "abunda",
-  "acetono",
-  "acida",
-  "adapti",
-  "adekvata",
-  "adheri",
-  "adicii",
-  "adjektivo",
-  "administri",
-  "adolesko",
-  "adreso",
-  "adstringa",
-  "adulto",
-  "advokato",
-  "adzo",
-  "aeroplano",
-  "aferulo",
-  "afgana",
-  "afiksi",
-  "aflaba",
-  "aforismo",
-  "afranki",
-  "aftozo",
-  "afusto",
-  "agavo",
-  "agento",
-  "agiti",
-  "aglo",
-  "agmaniero",
-  "agnoski",
-  "agordo",
-  "agrabla",
-  "agtipo",
-  "agutio",
-  "aikido",
-  "ailanto",
-  "aina",
-  "ajatolo",
-  "ajgenvaloro",
-  "ajlobulbo",
-  "ajnlitera",
-  "ajuto",
-  "ajzi",
-  "akademio",
-  "akcepti",
-  "akeo",
-  "akiri",
-  "aklamado",
-  "akmeo",
-  "akno",
-  "akompani",
-  "akrobato",
-  "akselo",
-  "aktiva",
-  "akurata",
-  "akvofalo",
-  "alarmo",
-  "albumo",
-  "alcedo",
-  "aldoni",
-  "aleo",
-  "alfabeto",
-  "algo",
-  "alhasti",
-  "aligatoro",
-  "alkoholo",
-  "almozo",
-  "alnomo",
-  "alojo",
-  "alpinisto",
-  "alrigardi",
-  "alskribi",
-  "alta",
-  "alumeto",
-  "alveni",
-  "alzaca",
-  "amaso",
-  "ambasado",
-  "amdeklaro",
-  "amebo",
-  "amfibio",
-  "amhara",
-  "amiko",
-  "amkanto",
-  "amletero",
-  "amnestio",
-  "amoranto",
-  "amplekso",
-  "amrakonto",
-  "amsterdama",
-  "amuzi",
-  "ananaso",
-  "androido",
-  "anekdoto",
-  "anfrakto",
-  "angulo",
-  "anheli",
-  "animo",
-  "anjono",
-  "ankro",
-  "anonci",
-  "anpriskribo",
-  "ansero",
-  "antikva",
-  "anuitato",
-  "aorto",
-  "aparta",
-  "aperti",
-  "apika",
-  "aplikado",
-  "apneo",
-  "apogi",
-  "aprobi",
-  "apsido",
-  "apterigo",
-  "apudesto",
-  "araneo",
-  "arbo",
-  "ardeco",
-  "aresti",
-  "argilo",
-  "aristokrato",
-  "arko",
-  "arlekeno",
-  "armi",
-  "arniko",
-  "aromo",
-  "arpio",
-  "arsenalo",
-  "artisto",
-  "aruba",
-  "arvorto",
-  "asaio",
-  "asbesto",
-  "ascendi",
-  "asekuri",
-  "asfalto",
-  "asisti",
-  "askalono",
-  "asocio",
-  "aspekti",
-  "astro",
-  "asulo",
-  "atakonto",
-  "atendi",
-  "atingi",
-  "atleto",
-  "atmosfero",
-  "atomo",
-  "atropino",
-  "atuto",
-  "avataro",
-  "aventuro",
-  "aviadilo",
-  "avokado",
-  "azaleo",
-  "azbuko",
-  "azenino",
-  "azilpetanto",
-  "azoto",
-  "azteka",
-  "babili",
-  "bacilo",
-  "badmintono",
-  "bagatelo",
-  "bahama",
-  "bajoneto",
-  "baki",
-  "balai",
-  "bambuo",
-  "bani",
-  "baobabo",
-  "bapti",
-  "baro",
-  "bastono",
-  "batilo",
-  "bavara",
-  "bazalto",
-  "beata",
-  "bebofono",
-  "bedo",
-  "begonio",
-  "behaviorismo",
-  "bejlo",
-  "bekero",
-  "belarto",
-  "bemolo",
-  "benko",
-  "bereto",
-  "besto",
-  "betulo",
-  "bevelo",
-  "bezoni",
-  "biaso",
-  "biblioteko",
-  "biciklo",
-  "bidaro",
-  "bieno",
-  "bifsteko",
-  "bigamiulo",
-  "bijekcio",
-  "bikino",
-  "bildo",
-  "bimetalismo",
-  "bindi",
-  "biografio",
-  "birdo",
-  "biskvito",
-  "bitlibro",
-  "bivako",
-  "bizara",
-  "bjalistoka",
-  "blanka",
-  "bleki",
-  "blinda",
-  "blovi",
-  "blua",
-  "boato",
-  "bobsledo",
-  "bocvanano",
-  "bodisatvo",
-  "bofratino",
-  "bogefratoj",
-  "bohema",
-  "boji",
-  "bokalo",
-  "boli",
-  "bombono",
-  "bona",
-  "bopatrino",
-  "bordo",
-  "bosko",
-  "botelo",
-  "bovido",
-  "brakpleno",
-  "bretaro",
-  "brikmuro",
-  "broso",
-  "brulema",
-  "bubalo",
-  "buctrapi",
-  "budo",
-  "bufedo",
-  "bugio",
-  "bujabeso",
-  "buklo",
-  "buldozo",
-  "bumerango",
-  "bunta",
-  "burokrataro",
-  "busbileto",
-  "butero",
-  "buzuko",
-  "caro",
-  "cebo",
-  "ceceo",
-  "cedro",
-  "cefalo",
-  "cejana",
-  "cekumo",
-  "celebri",
-  "cemento",
-  "cent",
-  "cepo",
-  "certa",
-  "cetera",
-  "cezio",
-  "ciano",
-  "cibeto",
-  "cico",
-  "cidro",
-  "cifero",
-  "cigaredo",
-  "ciklo",
-  "cilindro",
-  "cimbalo",
-  "cinamo",
-  "cipreso",
-  "cirkonstanco",
-  "cisterno",
-  "citrono",
-  "ciumi",
-  "civilizado",
-  "colo",
-  "congo",
-  "cunamo",
-  "cvana",
-  "dabi",
-  "daco",
-  "dadaismo",
-  "dafodilo",
-  "dago",
-  "daimio",
-  "dajmono",
-  "daktilo",
-  "dalio",
-  "damo",
-  "danki",
-  "darmo",
-  "datumoj",
-  "dazipo",
-  "deadmoni",
-  "debeto",
-  "decidi",
-  "dedukti",
-  "deerigi",
-  "defendi",
-  "degeli",
-  "dehaki",
-  "deirpunkto",
-  "deklaracio",
-  "delikata",
-  "demandi",
-  "dento",
-  "dependi",
-  "derivi",
-  "desegni",
-  "detrui",
-  "devi",
-  "deziri",
-  "dialogo",
-  "dicentro",
-  "didaktika",
-  "dieto",
-  "diferenci",
-  "digesti",
-  "diino",
-  "dikfingro",
-  "diligenta",
-  "dimensio",
-  "dinamo",
-  "diodo",
-  "diplomo",
-  "direkte",
-  "diskuti",
-  "diurno",
-  "diversa",
-  "dizajno",
-  "dobrogitaro",
-  "docento",
-  "dogano",
-  "dojeno",
-  "doktoro",
-  "dolori",
-  "domego",
-  "donaci",
-  "dopado",
-  "dormi",
-  "dosierujo",
-  "dotita",
-  "dozeno",
-  "drato",
-  "dresi",
-  "drinki",
-  "droni",
-  "druido",
-  "duaranga",
-  "dubi",
-  "ducent",
-  "dudek",
-  "duelo",
-  "dufoje",
-  "dugongo",
-  "duhufa",
-  "duilo",
-  "dujare",
-  "dukato",
-  "duloka",
-  "dumtempe",
-  "dungi",
-  "duobla",
-  "dupiedulo",
-  "dura",
-  "dusenca",
-  "dutaga",
-  "duuma",
-  "duvalvuloj",
-  "duzo",
-  "ebena",
-  "eblecoj",
-  "ebono",
-  "ebria",
-  "eburo",
-  "ecaro",
-  "ecigi",
-  "ecoj",
-  "edelvejso",
-  "editoro",
-  "edro",
-  "eduki",
-  "edzino",
-  "efektiva",
-  "efiki",
-  "efloreski",
-  "egala",
-  "egeco",
-  "egiptologo",
-  "eglefino",
-  "egoista",
-  "egreto",
-  "ejakuli",
-  "ejlo",
-  "ekarto",
-  "ekbruligi",
-  "ekceli",
-  "ekde",
-  "ekesti",
-  "ekfirmao",
-  "ekgliti",
-  "ekhavi",
-  "ekipi",
-  "ekkapti",
-  "eklezio",
-  "ekmalsati",
-  "ekonomio",
-  "ekpluvi",
-  "ekrano",
-  "ekster",
-  "ektiri",
-  "ekumeno",
-  "ekvilibro",
-  "ekzemplo",
-  "elasta",
-  "elbalai",
-  "elcento",
-  "eldoni",
-  "elektro",
-  "elfari",
-  "elgliti",
-  "elhaki",
-  "elipso",
-  "elkovi",
-  "ellasi",
-  "elmeti",
-  "elnutri",
-  "elokventa",
-  "elparoli",
-  "elrevigi",
-  "elstari",
-  "elteni",
-  "eluzita",
-  "elvoki",
-  "elzasa",
-  "emajlo",
-  "embaraso",
-  "emerito",
-  "emfazo",
-  "eminenta",
-  "emocio",
-  "empiria",
-  "emulsio",
-  "enarkivigi",
-  "enboteligi",
-  "enciklopedio",
-  "endorfino",
-  "energio",
-  "enfermi",
-  "engluti",
-  "enhavo",
-  "enigmo",
-  "enjekcio",
-  "enketi",
-  "enlanda",
-  "enmeti",
-  "enorma",
-  "enplanti",
-  "enradiki",
-  "enspezo",
-  "entrepreni",
-  "enui",
-  "envolvi",
-  "enzimo",
-  "eono",
-  "eosto",
-  "epitafo",
-  "epoko",
-  "epriskribebla",
-  "epsilono",
-  "erari",
-  "erbio",
-  "erco",
-  "erekti",
-  "ergonomia",
-  "erikejo",
-  "ermito",
-  "erotika",
-  "erpilo",
-  "erupcio",
-  "esameno",
-  "escepti",
-  "esenco",
-  "eskapi",
-  "esotera",
-  "esperi",
-  "estonto",
-  "etapo",
-  "etendi",
-  "etfingro",
-  "etikedo",
-  "etlitero",
-  "etmakleristo",
-  "etnika",
-  "etoso",
-  "etradio",
-  "etskala",
-  "etullernejo",
-  "evakui",
-  "evento",
-  "eviti",
-  "evolui",
-  "ezoko",
-  "fabriko",
-  "facila",
-  "fadeno",
-  "fagoto",
-  "fajro",
-  "fakto",
-  "fali",
-  "familio",
-  "fanatiko",
-  "farbo",
-  "fasko",
-  "fatala",
-  "favora",
-  "fazeolo",
-  "febro",
-  "federacio",
-  "feino",
-  "fekunda",
-  "felo",
-  "femuro",
-  "fenestro",
-  "fermi",
-  "festi",
-  "fetora",
-  "fezo",
-  "fiasko",
-  "fibro",
-  "fidela",
-  "fiera",
-  "fifama",
-  "figuro",
-  "fiherbo",
-  "fiinsekto",
-  "fiksa",
-  "filmo",
-  "fimensa",
-  "finalo",
-  "fiolo",
-  "fiparoli",
-  "firmao",
-  "fisko",
-  "fitingo",
-  "fiuzanto",
-  "fivorto",
-  "fiziko",
-  "fjordo",
-  "flago",
-  "flegi",
-  "flirti",
-  "floro",
-  "flugi",
-  "fobio",
-  "foceno",
-  "foirejo",
-  "fojfoje",
-  "fokuso",
-  "folio",
-  "fomenti",
-  "fonto",
-  "formulo",
-  "fosforo",
-  "fotografi",
-  "fratino",
-  "fremda",
-  "friti",
-  "frosto",
-  "frua",
-  "ftizo",
-  "fuelo",
-  "fugo",
-  "fuksia",
-  "fulmilo",
-  "fumanto",
-  "fundamento",
-  "fuorto",
-  "furioza",
-  "fusilo",
-  "futbalo",
-  "fuzio",
-  "gabardino",
-  "gado",
-  "gaela",
-  "gafo",
-  "gagato",
-  "gaja",
-  "gaki",
-  "galanta",
-  "gamao",
-  "ganto",
-  "gapulo",
-  "gardi",
-  "gasto",
-  "gavio",
-  "gazeto",
-  "geamantoj",
-  "gebani",
-  "geedzeco",
-  "gefratoj",
-  "geheno",
-  "gejsero",
-  "geko",
-  "gelateno",
-  "gemisto",
-  "geniulo",
-  "geografio",
-  "gepardo",
-  "geranio",
-  "gestolingvo",
-  "geto",
-  "geumo",
-  "gibono",
-  "giganta",
-  "gildo",
-  "gimnastiko",
-  "ginekologo",
-  "gipsi",
-  "girlando",
-  "gistfungo",
-  "gitaro",
-  "glazuro",
-  "glebo",
-  "gliti",
-  "globo",
-  "gluti",
-  "gnafalio",
-  "gnejso",
-  "gnomo",
-  "gnuo",
-  "gobio",
-  "godetio",
-  "goeleto",
-  "gojo",
-  "golfludejo",
-  "gombo",
-  "gondolo",
-  "gorilo",
-  "gospelo",
-  "gotika",
-  "granda",
-  "greno",
-  "griza",
-  "groto",
-  "grupo",
-  "guano",
-  "gubernatoro",
-  "gudrotuko",
-  "gufo",
-  "gujavo",
-  "guldeno",
-  "gumi",
-  "gupio",
-  "guruo",
-  "gusto",
-  "guto",
-  "guvernistino",
-  "gvardio",
-  "gverilo",
-  "gvidanto",
-  "habitato",
-  "hadito",
-  "hafnio",
-  "hagiografio",
-  "haitiano",
-  "hajlo",
-  "hakbloko",
-  "halti",
-  "hamstro",
-  "hangaro",
-  "hapalo",
-  "haro",
-  "hasta",
-  "hati",
-  "havebla",
-  "hazardo",
-  "hebrea",
-  "hedero",
-  "hegemonio",
-  "hejmo",
-  "hektaro",
-  "helpi",
-  "hemisfero",
-  "heni",
-  "hepato",
-  "herbo",
-  "hesa",
-  "heterogena",
-  "heziti",
-  "hiacinto",
-  "hibrida",
-  "hidrogeno",
-  "hieroglifo",
-  "higieno",
-  "hihii",
-  "hilumo",
-  "himno",
-  "hindino",
-  "hiperteksto",
-  "hirundo",
-  "historio",
-  "hobio",
-  "hojli",
-  "hokeo",
-  "hologramo",
-  "homido",
-  "honesta",
-  "hopi",
-  "horizonto",
-  "hospitalo",
-  "hotelo",
-  "huadi",
-  "hubo",
-  "hufumo",
-  "hugenoto",
-  "hukero",
-  "huligano",
-  "humana",
-  "hundo",
-  "huoj",
-  "hupilo",
-  "hurai",
-  "husaro",
-  "hutuo",
-  "huzo",
-  "iafoje",
-  "iagrade",
-  "iamaniere",
-  "iarelate",
-  "iaspeca",
-  "ibekso",
-  "ibiso",
-  "idaro",
-  "ideala",
-  "idiomo",
-  "idolo",
-  "iele",
-  "igluo",
-  "ignori",
-  "iguamo",
-  "igvano",
-  "ikono",
-  "iksodo",
-  "ikto",
-  "iliaflanke",
-  "ilkomputilo",
-  "ilobreto",
-  "ilremedo",
-  "ilumini",
-  "imagi",
-  "imitado",
-  "imperio",
-  "imuna",
-  "incidento",
-  "industrio",
-  "inerta",
-  "infano",
-  "ingenra",
-  "inhali",
-  "iniciati",
-  "injekti",
-  "inklino",
-  "inokuli",
-  "insekto",
-  "inteligenta",
-  "inundi",
-  "inviti",
-  "ioma",
-  "ionosfero",
-  "iperito",
-  "ipomeo",
-  "irana",
-  "irejo",
-  "irigacio",
-  "ironio",
-  "isato",
-  "islamo",
-  "istempo",
-  "itinero",
-  "itrio",
-  "iuloke",
-  "iumaniere",
-  "iutempe",
-  "izolita",
-  "jado",
-  "jaguaro",
-  "jakto",
-  "jama",
-  "januaro",
-  "japano",
-  "jarringo",
-  "jazo",
-  "jenoj",
-  "jesulo",
-  "jetavio",
-  "jezuito",
-  "jodli",
-  "joviala",
-  "juano",
-  "jubileo",
-  "judismo",
-  "jufto",
-  "juki",
-  "julio",
-  "juneca",
-  "jupo",
-  "juristo",
-  "juste",
-  "juvelo",
-  "kabineto",
-  "kadrato",
-  "kafo",
-  "kahelo",
-  "kajako",
-  "kakao",
-  "kalkuli",
-  "kampo",
-  "kanti",
-  "kapitalo",
-  "karaktero",
-  "kaserolo",
-  "katapulto",
-  "kaverna",
-  "kazino",
-  "kebabo",
-  "kefiro",
-  "keglo",
-  "kejlo",
-  "kekso",
-  "kelka",
-  "kemio",
-  "kerno",
-  "kesto",
-  "kiamaniere",
-  "kibuco",
-  "kidnapi",
-  "kielo",
-  "kikero",
-  "kilogramo",
-  "kimono",
-  "kinejo",
-  "kiosko",
-  "kirurgo",
-  "kisi",
-  "kitelo",
-  "kivio",
-  "klavaro",
-  "klerulo",
-  "klini",
-  "klopodi",
-  "klubo",
-  "knabo",
-  "knedi",
-  "koalo",
-  "kobalto",
-  "kodigi",
-  "kofro",
-  "kohera",
-  "koincidi",
-  "kojoto",
-  "kokoso",
-  "koloro",
-  "komenci",
-  "kontrakto",
-  "kopio",
-  "korekte",
-  "kosti",
-  "kotono",
-  "kovri",
-  "krajono",
-  "kredi",
-  "krii",
-  "krom",
-  "kruco",
-  "ksantino",
-  "ksenono",
-  "ksilofono",
-  "ksosa",
-  "kubuto",
-  "kudri",
-  "kuglo",
-  "kuiri",
-  "kuko",
-  "kulero",
-  "kumuluso",
-  "kuneco",
-  "kupro",
-  "kuri",
-  "kuseno",
-  "kutimo",
-  "kuvo",
-  "kuzino",
-  "kvalito",
-  "kverko",
-  "kvin",
-  "kvoto",
-  "labori",
-  "laculo",
-  "ladbotelo",
-  "lafo",
-  "laguno",
-  "laikino",
-  "laktobovino",
-  "lampolumo",
-  "landkarto",
-  "laosa",
-  "lapono",
-  "larmoguto",
-  "lastjare",
-  "latitudo",
-  "lavejo",
-  "lazanjo",
-  "leciono",
-  "ledosako",
-  "leganto",
-  "lekcio",
-  "lemura",
-  "lentuga",
-  "leopardo",
-  "leporo",
-  "lerni",
-  "lesivo",
-  "letero",
-  "levilo",
-  "lezi",
-  "liano",
-  "libera",
-  "liceo",
-  "lieno",
-  "lifto",
-  "ligilo",
-  "likvoro",
-  "lila",
-  "limono",
-  "lingvo",
-  "lipo",
-  "lirika",
-  "listo",
-  "literatura",
-  "liveri",
-  "lobio",
-  "logika",
-  "lojala",
-  "lokalo",
-  "longa",
-  "lordo",
-  "lotado",
-  "loza",
-  "luanto",
-  "lubriki",
-  "lucida",
-  "ludema",
-  "luigi",
-  "lukso",
-  "luli",
-  "lumbilda",
-  "lunde",
-  "lupago",
-  "lustro",
-  "lutilo",
-  "luzerno",
-  "maato",
-  "maceri",
-  "madono",
-  "mafiano",
-  "magazeno",
-  "mahometano",
-  "maizo",
-  "majstro",
-  "maketo",
-  "malgranda",
-  "mamo",
-  "mandareno",
-  "maorio",
-  "mapigi",
-  "marini",
-  "masko",
-  "mateno",
-  "mazuto",
-  "meandro",
-  "meblo",
-  "mecenato",
-  "medialo",
-  "mefito",
-  "megafono",
-  "mejlo",
-  "mekanika",
-  "melodia",
-  "membro",
-  "mendi",
-  "mergi",
-  "mespilo",
-  "metoda",
-  "mevo",
-  "mezuri",
-  "miaflanke",
-  "micelio",
-  "mielo",
-  "migdalo",
-  "mikrofilmo",
-  "militi",
-  "mimiko",
-  "mineralo",
-  "miopa",
-  "miri",
-  "mistera",
-  "mitralo",
-  "mizeri",
-  "mjelo",
-  "mnemoniko",
-  "mobilizi",
-  "mocio",
-  "moderna",
-  "mohajro",
-  "mokadi",
-  "molaro",
-  "momento",
-  "monero",
-  "mopso",
-  "mordi",
-  "moskito",
-  "motoro",
-  "movimento",
-  "mozaiko",
-  "mueli",
-  "mukozo",
-  "muldi",
-  "mumio",
-  "munti",
-  "muro",
-  "muskolo",
-  "mutacio",
-  "muzikisto",
-  "nabo",
-  "nacio",
-  "nadlo",
-  "nafto",
-  "naiva",
-  "najbaro",
-  "nanometro",
-  "napo",
-  "narciso",
-  "naski",
-  "naturo",
-  "navigi",
-  "naztruo",
-  "neatendite",
-  "nebulo",
-  "necesa",
-  "nedankinde",
-  "neebla",
-  "nefari",
-  "negoco",
-  "nehavi",
-  "neimagebla",
-  "nektaro",
-  "nelonga",
-  "nematura",
-  "nenia",
-  "neordinara",
-  "nepra",
-  "nervuro",
-  "nesto",
-  "nete",
-  "neulo",
-  "nevino",
-  "nifo",
-  "nigra",
-  "nihilisto",
-  "nikotino",
-  "nilono",
-  "nimfeo",
-  "nitrogeno",
-  "nivelo",
-  "nobla",
-  "nocio",
-  "nodozo",
-  "nokto",
-  "nomkarto",
-  "norda",
-  "nostalgio",
-  "notbloko",
-  "novico",
-  "nuanco",
-  "nuboza",
-  "nuda",
-  "nugato",
-  "nuklea",
-  "nuligi",
-  "numero",
-  "nuntempe",
-  "nupto",
-  "nura",
-  "nutri",
-  "oazo",
-  "obei",
-  "objekto",
-  "oblikva",
-  "obolo",
-  "observi",
-  "obtuza",
-  "obuso",
-  "oceano",
-  "odekolono",
-  "odori",
-  "oferti",
-  "oficiala",
-  "ofsajdo",
-  "ofte",
-  "ogivo",
-  "ogro",
-  "ojstredoj",
-  "okaze",
-  "okcidenta",
-  "okro",
-  "oksido",
-  "oktobro",
-  "okulo",
-  "oldulo",
-  "oleo",
-  "olivo",
-  "omaro",
-  "ombro",
-  "omego",
-  "omikrono",
-  "omleto",
-  "omnibuso",
-  "onagro",
-  "ondo",
-  "oneco",
-  "onidire",
-  "onklino",
-  "onlajna",
-  "onomatopeo",
-  "ontologio",
-  "opaka",
-  "operacii",
-  "opinii",
-  "oportuna",
-  "opresi",
-  "optimisto",
-  "oratoro",
-  "orbito",
-  "ordinara",
-  "orelo",
-  "orfino",
-  "organizi",
-  "orienta",
-  "orkestro",
-  "orlo",
-  "orminejo",
-  "ornami",
-  "ortangulo",
-  "orumi",
-  "oscedi",
-  "osmozo",
-  "ostocerbo",
-  "ovalo",
-  "ovingo",
-  "ovoblanko",
-  "ovri",
-  "ovulado",
-  "ozono",
-  "pacama",
-  "padeli",
-  "pafilo",
-  "pagigi",
-  "pajlo",
-  "paketo",
-  "palaco",
-  "pampelmo",
-  "pantalono",
-  "papero",
-  "paroli",
-  "pasejo",
-  "patro",
-  "pavimo",
-  "peco",
-  "pedalo",
-  "peklita",
-  "pelikano",
-  "pensiono",
-  "peplomo",
-  "pesilo",
-  "petanto",
-  "pezoforto",
-  "piano",
-  "picejo",
-  "piede",
-  "pigmento",
-  "pikema",
-  "pilkoludo",
-  "pimento",
-  "pinglo",
-  "pioniro",
-  "pipromento",
-  "pirato",
-  "pistolo",
-  "pitoreska",
-  "piulo",
-  "pivoti",
-  "pizango",
-  "planko",
-  "plektita",
-  "plibonigi",
-  "ploradi",
-  "plurlingva",
-  "pobo",
-  "podio",
-  "poeto",
-  "pogranda",
-  "pohora",
-  "pokalo",
-  "politekniko",
-  "pomarbo",
-  "ponevosto",
-  "populara",
-  "porcelana",
-  "postkompreno",
-  "poteto",
-  "poviga",
-  "pozitiva",
-  "prapatroj",
-  "precize",
-  "pridemandi",
-  "probable",
-  "pruntanto",
-  "psalmo",
-  "psikologio",
-  "psoriazo",
-  "pterido",
-  "publiko",
-  "pudro",
-  "pufo",
-  "pugnobato",
-  "pulovero",
-  "pumpi",
-  "punkto",
-  "pupo",
-  "pureo",
-  "puso",
-  "putrema",
-  "puzlo",
-  "rabate",
-  "racionala",
-  "radiko",
-  "rafinado",
-  "raguo",
-  "rajto",
-  "rakonti",
-  "ralio",
-  "rampi",
-  "rando",
-  "rapida",
-  "rastruma",
-  "ratifiki",
-  "raviolo",
-  "razeno",
-  "reakcio",
-  "rebildo",
-  "recepto",
-  "redakti",
-  "reenigi",
-  "reformi",
-  "regiono",
-  "rehavi",
-  "reinspekti",
-  "rejesi",
-  "reklamo",
-  "relativa",
-  "rememori",
-  "renkonti",
-  "reorganizado",
-  "reprezenti",
-  "respondi",
-  "retumilo",
-  "reuzebla",
-  "revidi",
-  "rezulti",
-  "rialo",
-  "ribeli",
-  "ricevi",
-  "ridiga",
-  "rifuginto",
-  "rigardi",
-  "rikolti",
-  "rilati",
-  "rimarki",
-  "rinocero",
-  "ripozi",
-  "riski",
-  "ritmo",
-  "rivero",
-  "rizokampo",
-  "roboto",
-  "rododendro",
-  "rojo",
-  "rokmuziko",
-  "rolvorto",
-  "romantika",
-  "ronroni",
-  "rosino",
-  "rotondo",
-  "rovero",
-  "rozeto",
-  "rubando",
-  "rudimenta",
-  "rufa",
-  "rugbeo",
-  "ruino",
-  "ruleto",
-  "rumoro",
-  "runo",
-  "rupio",
-  "rura",
-  "rustimuna",
-  "ruzulo",
-  "sabato",
-  "sadismo",
-  "safario",
-  "sagaca",
-  "sakfluto",
-  "salti",
-  "samtage",
-  "sandalo",
-  "sapejo",
-  "sarongo",
-  "satelito",
-  "savano",
-  "sbiro",
-  "sciado",
-  "seanco",
-  "sebo",
-  "sedativo",
-  "segligno",
-  "sekretario",
-  "selektiva",
-  "semajno",
-  "senpeza",
-  "separeo",
-  "servilo",
-  "sesangulo",
-  "setli",
-  "seurigi",
-  "severa",
-  "sezono",
-  "sfagno",
-  "sfero",
-  "sfinkso",
-  "siatempe",
-  "siblado",
-  "sidejo",
-  "siesto",
-  "sifono",
-  "signalo",
-  "siklo",
-  "silenti",
-  "simpla",
-  "sinjoro",
-  "siropo",
-  "sistemo",
-  "situacio",
-  "siverto",
-  "sizifa",
-  "skatolo",
-  "skemo",
-  "skianto",
-  "sklavo",
-  "skorpio",
-  "skribisto",
-  "skulpti",
-  "skvamo",
-  "slango",
-  "sledeto",
-  "sliparo",
-  "smeraldo",
-  "smirgi",
-  "smokingo",
-  "smuto",
-  "snoba",
-  "snufegi",
-  "sobra",
-  "sociano",
-  "sodakvo",
-  "sofo",
-  "soifi",
-  "sojlo",
-  "soklo",
-  "soldato",
-  "somero",
-  "sonilo",
-  "sopiri",
-  "sorto",
-  "soulo",
-  "soveto",
-  "sparkado",
-  "speciala",
-  "spiri",
-  "splito",
-  "sporto",
-  "sprita",
-  "spuro",
-  "stabila",
-  "stelfiguro",
-  "stimulo",
-  "stomako",
-  "strato",
-  "studanto",
-  "subgrupo",
-  "suden",
-  "suferanta",
-  "sugesti",
-  "suito",
-  "sukero",
-  "sulko",
-  "sume",
-  "sunlumo",
-  "super",
-  "surskribeto",
-  "suspekti",
-  "suturo",
-  "svati",
-  "svenfali",
-  "svingi",
-  "svopo",
-  "tabako",
-  "taglumo",
-  "tajloro",
-  "taksimetro",
-  "talento",
-  "tamen",
-  "tanko",
-  "taoismo",
-  "tapioko",
-  "tarifo",
-  "tasko",
-  "tatui",
-  "taverno",
-  "teatro",
-  "tedlaboro",
-  "tegmento",
-  "tehoro",
-  "teknika",
-  "telefono",
-  "tempo",
-  "tenisejo",
-  "teorie",
-  "teraso",
-  "testudo",
-  "tetablo",
-  "teujo",
-  "tezo",
-  "tialo",
-  "tibio",
-  "tielnomata",
-  "tifono",
-  "tigro",
-  "tikli",
-  "timida",
-  "tinkturo",
-  "tiom",
-  "tiparo",
-  "tirkesto",
-  "titolo",
-  "tiutempe",
-  "tizano",
-  "tobogano",
-  "tofeo",
-  "togo",
-  "toksa",
-  "tolerema",
-  "tombolo",
-  "tondri",
-  "topografio",
-  "tordeti",
-  "tosti",
-  "totalo",
-  "traduko",
-  "tredi",
-  "triangulo",
-  "tropika",
-  "trumpeto",
-  "tualeto",
-  "tubisto",
-  "tufgrebo",
-  "tuja",
-  "tukano",
-  "tulipo",
-  "tumulto",
-  "tunelo",
-  "turisto",
-  "tusi",
-  "tutmonda",
-  "tvisto",
-  "udono",
-  "uesto",
-  "ukazo",
-  "ukelelo",
-  "ulcero",
-  "ulmo",
-  "ultimato",
-  "ululi",
-  "umbiliko",
-  "unco",
-  "ungego",
-  "uniformo",
-  "unkti",
-  "unukolora",
-  "uragano",
-  "urbano",
-  "uretro",
-  "urino",
-  "ursido",
-  "uskleco",
-  "usonigi",
-  "utero",
-  "utila",
-  "utopia",
-  "uverturo",
-  "uzadi",
-  "uzeblo",
-  "uzino",
-  "uzkutimo",
-  "uzofini",
-  "uzurpi",
-  "uzvaloro",
-  "vadejo",
-  "vafleto",
-  "vagono",
-  "vahabismo",
-  "vajco",
-  "vakcino",
-  "valoro",
-  "vampiro",
-  "vangharoj",
-  "vaporo",
-  "varma",
-  "vasta",
-  "vato",
-  "vazaro",
-  "veaspekta",
-  "vedismo",
-  "vegetalo",
-  "vehiklo",
-  "vejno",
-  "vekita",
-  "velstango",
-  "vemieno",
-  "vendi",
-  "vepro",
-  "verando",
-  "vespero",
-  "veturi",
-  "veziko",
-  "viando",
-  "vibri",
-  "vico",
-  "videbla",
-  "vifio",
-  "vigla",
-  "viktimo",
-  "vila",
-  "vimeno",
-  "vintro",
-  "violo",
-  "vippuno",
-  "virtuala",
-  "viskoza",
-  "vitro",
-  "viveca",
-  "viziti",
-  "vobli",
-  "vodko",
-  "vojeto",
-  "vokegi",
-  "volbo",
-  "vomema",
-  "vono",
-  "vortaro",
-  "vosto",
-  "voti",
-  "vrako",
-  "vringi",
-  "vualo",
-  "vulkano",
-  "vundo",
-  "vuvuzelo",
-  "zamenhofa",
-  "zapi",
-  "zebro",
-  "zefiro",
-  "zeloto",
-  "zenismo",
-  "zeolito",
-  "zepelino",
-  "zeto",
-  "zigzagi",
-  "zinko",
-  "zipo",
-  "zirkonio",
-  "zodiako",
-  "zoeto",
-  "zombio",
-  "zono",
-  "zoologio",
-  "zorgi",
-  "zukino",
-  "zumilo"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/es.rs b/networks/monero/wallet/seed/src/words/es.rs
deleted file mode 100644
index 09fb346d..00000000
--- a/networks/monero/wallet/seed/src/words/es.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "ábaco",
-  "abdomen",
-  "abeja",
-  "abierto",
-  "abogado",
-  "abono",
-  "aborto",
-  "abrazo",
-  "abrir",
-  "abuelo",
-  "abuso",
-  "acabar",
-  "academia",
-  "acceso",
-  "acción",
-  "aceite",
-  "acelga",
-  "acento",
-  "aceptar",
-  "ácido",
-  "aclarar",
-  "acné",
-  "acoger",
-  "acoso",
-  "activo",
-  "acto",
-  "actriz",
-  "actuar",
-  "acudir",
-  "acuerdo",
-  "acusar",
-  "adicto",
-  "admitir",
-  "adoptar",
-  "adorno",
-  "aduana",
-  "adulto",
-  "aéreo",
-  "afectar",
-  "afición",
-  "afinar",
-  "afirmar",
-  "ágil",
-  "agitar",
-  "agonía",
-  "agosto",
-  "agotar",
-  "agregar",
-  "agrio",
-  "agua",
-  "agudo",
-  "águila",
-  "aguja",
-  "ahogo",
-  "ahorro",
-  "aire",
-  "aislar",
-  "ajedrez",
-  "ajeno",
-  "ajuste",
-  "alacrán",
-  "alambre",
-  "alarma",
-  "alba",
-  "álbum",
-  "alcalde",
-  "aldea",
-  "alegre",
-  "alejar",
-  "alerta",
-  "aleta",
-  "alfiler",
-  "alga",
-  "algodón",
-  "aliado",
-  "aliento",
-  "alivio",
-  "alma",
-  "almeja",
-  "almíbar",
-  "altar",
-  "alteza",
-  "altivo",
-  "alto",
-  "altura",
-  "alumno",
-  "alzar",
-  "amable",
-  "amante",
-  "amapola",
-  "amargo",
-  "amasar",
-  "ámbar",
-  "ámbito",
-  "ameno",
-  "amigo",
-  "amistad",
-  "amor",
-  "amparo",
-  "amplio",
-  "ancho",
-  "anciano",
-  "ancla",
-  "andar",
-  "andén",
-  "anemia",
-  "ángulo",
-  "anillo",
-  "ánimo",
-  "anís",
-  "anotar",
-  "antena",
-  "antiguo",
-  "antojo",
-  "anual",
-  "anular",
-  "anuncio",
-  "añadir",
-  "añejo",
-  "año",
-  "apagar",
-  "aparato",
-  "apetito",
-  "apio",
-  "aplicar",
-  "apodo",
-  "aporte",
-  "apoyo",
-  "aprender",
-  "aprobar",
-  "apuesta",
-  "apuro",
-  "arado",
-  "araña",
-  "arar",
-  "árbitro",
-  "árbol",
-  "arbusto",
-  "archivo",
-  "arco",
-  "arder",
-  "ardilla",
-  "arduo",
-  "área",
-  "árido",
-  "aries",
-  "armonía",
-  "arnés",
-  "aroma",
-  "arpa",
-  "arpón",
-  "arreglo",
-  "arroz",
-  "arruga",
-  "arte",
-  "artista",
-  "asa",
-  "asado",
-  "asalto",
-  "ascenso",
-  "asegurar",
-  "aseo",
-  "asesor",
-  "asiento",
-  "asilo",
-  "asistir",
-  "asno",
-  "asombro",
-  "áspero",
-  "astilla",
-  "astro",
-  "astuto",
-  "asumir",
-  "asunto",
-  "atajo",
-  "ataque",
-  "atar",
-  "atento",
-  "ateo",
-  "ático",
-  "atleta",
-  "átomo",
-  "atraer",
-  "atroz",
-  "atún",
-  "audaz",
-  "audio",
-  "auge",
-  "aula",
-  "aumento",
-  "ausente",
-  "autor",
-  "aval",
-  "avance",
-  "avaro",
-  "ave",
-  "avellana",
-  "avena",
-  "avestruz",
-  "avión",
-  "aviso",
-  "ayer",
-  "ayuda",
-  "ayuno",
-  "azafrán",
-  "azar",
-  "azote",
-  "azúcar",
-  "azufre",
-  "azul",
-  "baba",
-  "babor",
-  "bache",
-  "bahía",
-  "baile",
-  "bajar",
-  "balanza",
-  "balcón",
-  "balde",
-  "bambú",
-  "banco",
-  "banda",
-  "baño",
-  "barba",
-  "barco",
-  "barniz",
-  "barro",
-  "báscula",
-  "bastón",
-  "basura",
-  "batalla",
-  "batería",
-  "batir",
-  "batuta",
-  "baúl",
-  "bazar",
-  "bebé",
-  "bebida",
-  "bello",
-  "besar",
-  "beso",
-  "bestia",
-  "bicho",
-  "bien",
-  "bingo",
-  "blanco",
-  "bloque",
-  "blusa",
-  "boa",
-  "bobina",
-  "bobo",
-  "boca",
-  "bocina",
-  "boda",
-  "bodega",
-  "boina",
-  "bola",
-  "bolero",
-  "bolsa",
-  "bomba",
-  "bondad",
-  "bonito",
-  "bono",
-  "bonsái",
-  "borde",
-  "borrar",
-  "bosque",
-  "bote",
-  "botín",
-  "bóveda",
-  "bozal",
-  "bravo",
-  "brazo",
-  "brecha",
-  "breve",
-  "brillo",
-  "brinco",
-  "brisa",
-  "broca",
-  "broma",
-  "bronce",
-  "brote",
-  "bruja",
-  "brusco",
-  "bruto",
-  "buceo",
-  "bucle",
-  "bueno",
-  "buey",
-  "bufanda",
-  "bufón",
-  "búho",
-  "buitre",
-  "bulto",
-  "burbuja",
-  "burla",
-  "burro",
-  "buscar",
-  "butaca",
-  "buzón",
-  "caballo",
-  "cabeza",
-  "cabina",
-  "cabra",
-  "cacao",
-  "cadáver",
-  "cadena",
-  "caer",
-  "café",
-  "caída",
-  "caimán",
-  "caja",
-  "cajón",
-  "cal",
-  "calamar",
-  "calcio",
-  "caldo",
-  "calidad",
-  "calle",
-  "calma",
-  "calor",
-  "calvo",
-  "cama",
-  "cambio",
-  "camello",
-  "camino",
-  "campo",
-  "cáncer",
-  "candil",
-  "canela",
-  "canguro",
-  "canica",
-  "canto",
-  "caña",
-  "cañón",
-  "caoba",
-  "caos",
-  "capaz",
-  "capitán",
-  "capote",
-  "captar",
-  "capucha",
-  "cara",
-  "carbón",
-  "cárcel",
-  "careta",
-  "carga",
-  "cariño",
-  "carne",
-  "carpeta",
-  "carro",
-  "carta",
-  "casa",
-  "casco",
-  "casero",
-  "caspa",
-  "castor",
-  "catorce",
-  "catre",
-  "caudal",
-  "causa",
-  "cazo",
-  "cebolla",
-  "ceder",
-  "cedro",
-  "celda",
-  "célebre",
-  "celoso",
-  "célula",
-  "cemento",
-  "ceniza",
-  "centro",
-  "cerca",
-  "cerdo",
-  "cereza",
-  "cero",
-  "cerrar",
-  "certeza",
-  "césped",
-  "cetro",
-  "chacal",
-  "chaleco",
-  "champú",
-  "chancla",
-  "chapa",
-  "charla",
-  "chico",
-  "chiste",
-  "chivo",
-  "choque",
-  "choza",
-  "chuleta",
-  "chupar",
-  "ciclón",
-  "ciego",
-  "cielo",
-  "cien",
-  "cierto",
-  "cifra",
-  "cigarro",
-  "cima",
-  "cinco",
-  "cine",
-  "cinta",
-  "ciprés",
-  "circo",
-  "ciruela",
-  "cisne",
-  "cita",
-  "ciudad",
-  "clamor",
-  "clan",
-  "claro",
-  "clase",
-  "clave",
-  "cliente",
-  "clima",
-  "clínica",
-  "cobre",
-  "cocción",
-  "cochino",
-  "cocina",
-  "coco",
-  "código",
-  "codo",
-  "cofre",
-  "coger",
-  "cohete",
-  "cojín",
-  "cojo",
-  "cola",
-  "colcha",
-  "colegio",
-  "colgar",
-  "colina",
-  "collar",
-  "colmo",
-  "columna",
-  "combate",
-  "comer",
-  "comida",
-  "cómodo",
-  "compra",
-  "conde",
-  "conejo",
-  "conga",
-  "conocer",
-  "consejo",
-  "contar",
-  "copa",
-  "copia",
-  "corazón",
-  "corbata",
-  "corcho",
-  "cordón",
-  "corona",
-  "correr",
-  "coser",
-  "cosmos",
-  "costa",
-  "cráneo",
-  "cráter",
-  "crear",
-  "crecer",
-  "creído",
-  "crema",
-  "cría",
-  "crimen",
-  "cripta",
-  "crisis",
-  "cromo",
-  "crónica",
-  "croqueta",
-  "crudo",
-  "cruz",
-  "cuadro",
-  "cuarto",
-  "cuatro",
-  "cubo",
-  "cubrir",
-  "cuchara",
-  "cuello",
-  "cuento",
-  "cuerda",
-  "cuesta",
-  "cueva",
-  "cuidar",
-  "culebra",
-  "culpa",
-  "culto",
-  "cumbre",
-  "cumplir",
-  "cuna",
-  "cuneta",
-  "cuota",
-  "cupón",
-  "cúpula",
-  "curar",
-  "curioso",
-  "curso",
-  "curva",
-  "cutis",
-  "dama",
-  "danza",
-  "dar",
-  "dardo",
-  "dátil",
-  "deber",
-  "débil",
-  "década",
-  "decir",
-  "dedo",
-  "defensa",
-  "definir",
-  "dejar",
-  "delfín",
-  "delgado",
-  "delito",
-  "demora",
-  "denso",
-  "dental",
-  "deporte",
-  "derecho",
-  "derrota",
-  "desayuno",
-  "deseo",
-  "desfile",
-  "desnudo",
-  "destino",
-  "desvío",
-  "detalle",
-  "detener",
-  "deuda",
-  "día",
-  "diablo",
-  "diadema",
-  "diamante",
-  "diana",
-  "diario",
-  "dibujo",
-  "dictar",
-  "diente",
-  "dieta",
-  "diez",
-  "difícil",
-  "digno",
-  "dilema",
-  "diluir",
-  "dinero",
-  "directo",
-  "dirigir",
-  "disco",
-  "diseño",
-  "disfraz",
-  "diva",
-  "divino",
-  "doble",
-  "doce",
-  "dolor",
-  "domingo",
-  "don",
-  "donar",
-  "dorado",
-  "dormir",
-  "dorso",
-  "dos",
-  "dosis",
-  "dragón",
-  "droga",
-  "ducha",
-  "duda",
-  "duelo",
-  "dueño",
-  "dulce",
-  "dúo",
-  "duque",
-  "durar",
-  "dureza",
-  "duro",
-  "ébano",
-  "ebrio",
-  "echar",
-  "eco",
-  "ecuador",
-  "edad",
-  "edición",
-  "edificio",
-  "editor",
-  "educar",
-  "efecto",
-  "eficaz",
-  "eje",
-  "ejemplo",
-  "elefante",
-  "elegir",
-  "elemento",
-  "elevar",
-  "elipse",
-  "élite",
-  "elixir",
-  "elogio",
-  "eludir",
-  "embudo",
-  "emitir",
-  "emoción",
-  "empate",
-  "empeño",
-  "empleo",
-  "empresa",
-  "enano",
-  "encargo",
-  "enchufe",
-  "encía",
-  "enemigo",
-  "enero",
-  "enfado",
-  "enfermo",
-  "engaño",
-  "enigma",
-  "enlace",
-  "enorme",
-  "enredo",
-  "ensayo",
-  "enseñar",
-  "entero",
-  "entrar",
-  "envase",
-  "envío",
-  "época",
-  "equipo",
-  "erizo",
-  "escala",
-  "escena",
-  "escolar",
-  "escribir",
-  "escudo",
-  "esencia",
-  "esfera",
-  "esfuerzo",
-  "espada",
-  "espejo",
-  "espía",
-  "esposa",
-  "espuma",
-  "esquí",
-  "estar",
-  "este",
-  "estilo",
-  "estufa",
-  "etapa",
-  "eterno",
-  "ética",
-  "etnia",
-  "evadir",
-  "evaluar",
-  "evento",
-  "evitar",
-  "exacto",
-  "examen",
-  "exceso",
-  "excusa",
-  "exento",
-  "exigir",
-  "exilio",
-  "existir",
-  "éxito",
-  "experto",
-  "explicar",
-  "exponer",
-  "extremo",
-  "fábrica",
-  "fábula",
-  "fachada",
-  "fácil",
-  "factor",
-  "faena",
-  "faja",
-  "falda",
-  "fallo",
-  "falso",
-  "faltar",
-  "fama",
-  "familia",
-  "famoso",
-  "faraón",
-  "farmacia",
-  "farol",
-  "farsa",
-  "fase",
-  "fatiga",
-  "fauna",
-  "favor",
-  "fax",
-  "febrero",
-  "fecha",
-  "feliz",
-  "feo",
-  "feria",
-  "feroz",
-  "fértil",
-  "fervor",
-  "festín",
-  "fiable",
-  "fianza",
-  "fiar",
-  "fibra",
-  "ficción",
-  "ficha",
-  "fideo",
-  "fiebre",
-  "fiel",
-  "fiera",
-  "fiesta",
-  "figura",
-  "fijar",
-  "fijo",
-  "fila",
-  "filete",
-  "filial",
-  "filtro",
-  "fin",
-  "finca",
-  "fingir",
-  "finito",
-  "firma",
-  "flaco",
-  "flauta",
-  "flecha",
-  "flor",
-  "flota",
-  "fluir",
-  "flujo",
-  "flúor",
-  "fobia",
-  "foca",
-  "fogata",
-  "fogón",
-  "folio",
-  "folleto",
-  "fondo",
-  "forma",
-  "forro",
-  "fortuna",
-  "forzar",
-  "fosa",
-  "foto",
-  "fracaso",
-  "frágil",
-  "franja",
-  "frase",
-  "fraude",
-  "freír",
-  "freno",
-  "fresa",
-  "frío",
-  "frito",
-  "fruta",
-  "fuego",
-  "fuente",
-  "fuerza",
-  "fuga",
-  "fumar",
-  "función",
-  "funda",
-  "furgón",
-  "furia",
-  "fusil",
-  "fútbol",
-  "futuro",
-  "gacela",
-  "gafas",
-  "gaita",
-  "gajo",
-  "gala",
-  "galería",
-  "gallo",
-  "gamba",
-  "ganar",
-  "gancho",
-  "ganga",
-  "ganso",
-  "garaje",
-  "garza",
-  "gasolina",
-  "gastar",
-  "gato",
-  "gavilán",
-  "gemelo",
-  "gemir",
-  "gen",
-  "género",
-  "genio",
-  "gente",
-  "geranio",
-  "gerente",
-  "germen",
-  "gesto",
-  "gigante",
-  "gimnasio",
-  "girar",
-  "giro",
-  "glaciar",
-  "globo",
-  "gloria",
-  "gol",
-  "golfo",
-  "goloso",
-  "golpe",
-  "goma",
-  "gordo",
-  "gorila",
-  "gorra",
-  "gota",
-  "goteo",
-  "gozar",
-  "grada",
-  "gráfico",
-  "grano",
-  "grasa",
-  "gratis",
-  "grave",
-  "grieta",
-  "grillo",
-  "gripe",
-  "gris",
-  "grito",
-  "grosor",
-  "grúa",
-  "grueso",
-  "grumo",
-  "grupo",
-  "guante",
-  "guapo",
-  "guardia",
-  "guerra",
-  "guía",
-  "guiño",
-  "guion",
-  "guiso",
-  "guitarra",
-  "gusano",
-  "gustar",
-  "haber",
-  "hábil",
-  "hablar",
-  "hacer",
-  "hacha",
-  "hada",
-  "hallar",
-  "hamaca",
-  "harina",
-  "haz",
-  "hazaña",
-  "hebilla",
-  "hebra",
-  "hecho",
-  "helado",
-  "helio",
-  "hembra",
-  "herir",
-  "hermano",
-  "héroe",
-  "hervir",
-  "hielo",
-  "hierro",
-  "hígado",
-  "higiene",
-  "hijo",
-  "himno",
-  "historia",
-  "hocico",
-  "hogar",
-  "hoguera",
-  "hoja",
-  "hombre",
-  "hongo",
-  "honor",
-  "honra",
-  "hora",
-  "hormiga",
-  "horno",
-  "hostil",
-  "hoyo",
-  "hueco",
-  "huelga",
-  "huerta",
-  "hueso",
-  "huevo",
-  "huida",
-  "huir",
-  "humano",
-  "húmedo",
-  "humilde",
-  "humo",
-  "hundir",
-  "huracán",
-  "hurto",
-  "icono",
-  "ideal",
-  "idioma",
-  "ídolo",
-  "iglesia",
-  "iglú",
-  "igual",
-  "ilegal",
-  "ilusión",
-  "imagen",
-  "imán",
-  "imitar",
-  "impar",
-  "imperio",
-  "imponer",
-  "impulso",
-  "incapaz",
-  "índice",
-  "inerte",
-  "infiel",
-  "informe",
-  "ingenio",
-  "inicio",
-  "inmenso",
-  "inmune",
-  "innato",
-  "insecto",
-  "instante",
-  "interés",
-  "íntimo",
-  "intuir",
-  "inútil",
-  "invierno",
-  "ira",
-  "iris",
-  "ironía",
-  "isla",
-  "islote",
-  "jabalí",
-  "jabón",
-  "jamón",
-  "jarabe",
-  "jardín",
-  "jarra",
-  "jaula",
-  "jazmín",
-  "jefe",
-  "jeringa",
-  "jinete",
-  "jornada",
-  "joroba",
-  "joven",
-  "joya",
-  "juerga",
-  "jueves",
-  "juez",
-  "jugador",
-  "jugo",
-  "juguete",
-  "juicio",
-  "junco",
-  "jungla",
-  "junio",
-  "juntar",
-  "júpiter",
-  "jurar",
-  "justo",
-  "juvenil",
-  "juzgar",
-  "kilo",
-  "koala",
-  "labio",
-  "lacio",
-  "lacra",
-  "lado",
-  "ladrón",
-  "lagarto",
-  "lágrima",
-  "laguna",
-  "laico",
-  "lamer",
-  "lámina",
-  "lámpara",
-  "lana",
-  "lancha",
-  "langosta",
-  "lanza",
-  "lápiz",
-  "largo",
-  "larva",
-  "lástima",
-  "lata",
-  "látex",
-  "latir",
-  "laurel",
-  "lavar",
-  "lazo",
-  "leal",
-  "lección",
-  "leche",
-  "lector",
-  "leer",
-  "legión",
-  "legumbre",
-  "lejano",
-  "lengua",
-  "lento",
-  "leña",
-  "león",
-  "leopardo",
-  "lesión",
-  "letal",
-  "letra",
-  "leve",
-  "leyenda",
-  "libertad",
-  "libro",
-  "licor",
-  "líder",
-  "lidiar",
-  "lienzo",
-  "liga",
-  "ligero",
-  "lima",
-  "límite",
-  "limón",
-  "limpio",
-  "lince",
-  "lindo",
-  "línea",
-  "lingote",
-  "lino",
-  "linterna",
-  "líquido",
-  "liso",
-  "lista",
-  "litera",
-  "litio",
-  "litro",
-  "llaga",
-  "llama",
-  "llanto",
-  "llave",
-  "llegar",
-  "llenar",
-  "llevar",
-  "llorar",
-  "llover",
-  "lluvia",
-  "lobo",
-  "loción",
-  "loco",
-  "locura",
-  "lógica",
-  "logro",
-  "lombriz",
-  "lomo",
-  "lonja",
-  "lote",
-  "lucha",
-  "lucir",
-  "lugar",
-  "lujo",
-  "luna",
-  "lunes",
-  "lupa",
-  "lustro",
-  "luto",
-  "luz",
-  "maceta",
-  "macho",
-  "madera",
-  "madre",
-  "maduro",
-  "maestro",
-  "mafia",
-  "magia",
-  "mago",
-  "maíz",
-  "maldad",
-  "maleta",
-  "malla",
-  "malo",
-  "mamá",
-  "mambo",
-  "mamut",
-  "manco",
-  "mando",
-  "manejar",
-  "manga",
-  "maniquí",
-  "manjar",
-  "mano",
-  "manso",
-  "manta",
-  "mañana",
-  "mapa",
-  "máquina",
-  "mar",
-  "marco",
-  "marea",
-  "marfil",
-  "margen",
-  "marido",
-  "mármol",
-  "marrón",
-  "martes",
-  "marzo",
-  "masa",
-  "máscara",
-  "masivo",
-  "matar",
-  "materia",
-  "matiz",
-  "matriz",
-  "máximo",
-  "mayor",
-  "mazorca",
-  "mecha",
-  "medalla",
-  "medio",
-  "médula",
-  "mejilla",
-  "mejor",
-  "melena",
-  "melón",
-  "memoria",
-  "menor",
-  "mensaje",
-  "mente",
-  "menú",
-  "mercado",
-  "merengue",
-  "mérito",
-  "mes",
-  "mesón",
-  "meta",
-  "meter",
-  "método",
-  "metro",
-  "mezcla",
-  "miedo",
-  "miel",
-  "miembro",
-  "miga",
-  "mil",
-  "milagro",
-  "militar",
-  "millón",
-  "mimo",
-  "mina",
-  "minero",
-  "mínimo",
-  "minuto",
-  "miope",
-  "mirar",
-  "misa",
-  "miseria",
-  "misil",
-  "mismo",
-  "mitad",
-  "mito",
-  "mochila",
-  "moción",
-  "moda",
-  "modelo",
-  "moho",
-  "mojar",
-  "molde",
-  "moler",
-  "molino",
-  "momento",
-  "momia",
-  "monarca",
-  "moneda",
-  "monja",
-  "monto",
-  "moño",
-  "morada",
-  "morder",
-  "moreno",
-  "morir",
-  "morro",
-  "morsa",
-  "mortal",
-  "mosca",
-  "mostrar",
-  "motivo",
-  "mover",
-  "móvil",
-  "mozo",
-  "mucho",
-  "mudar",
-  "mueble",
-  "muela",
-  "muerte",
-  "muestra",
-  "mugre",
-  "mujer",
-  "mula",
-  "muleta",
-  "multa",
-  "mundo",
-  "muñeca",
-  "mural",
-  "muro",
-  "músculo",
-  "museo",
-  "musgo",
-  "música",
-  "muslo",
-  "nácar",
-  "nación",
-  "nadar",
-  "naipe",
-  "naranja",
-  "nariz",
-  "narrar",
-  "nasal",
-  "natal",
-  "nativo",
-  "natural",
-  "náusea",
-  "naval",
-  "nave",
-  "navidad",
-  "necio",
-  "néctar",
-  "negar",
-  "negocio",
-  "negro",
-  "neón",
-  "nervio",
-  "neto",
-  "neutro",
-  "nevar",
-  "nevera",
-  "nicho",
-  "nido",
-  "niebla",
-  "nieto",
-  "niñez",
-  "niño",
-  "nítido",
-  "nivel",
-  "nobleza",
-  "noche",
-  "nómina",
-  "noria",
-  "norma",
-  "norte",
-  "nota",
-  "noticia",
-  "novato",
-  "novela",
-  "novio",
-  "nube",
-  "nuca",
-  "núcleo",
-  "nudillo",
-  "nudo",
-  "nuera",
-  "nueve",
-  "nuez",
-  "nulo",
-  "número",
-  "nutria",
-  "oasis",
-  "obeso",
-  "obispo",
-  "objeto",
-  "obra",
-  "obrero",
-  "observar",
-  "obtener",
-  "obvio",
-  "oca",
-  "ocaso",
-  "océano",
-  "ochenta",
-  "ocho",
-  "ocio",
-  "ocre",
-  "octavo",
-  "octubre",
-  "oculto",
-  "ocupar",
-  "ocurrir",
-  "odiar",
-  "odio",
-  "odisea",
-  "oeste",
-  "ofensa",
-  "oferta",
-  "oficio",
-  "ofrecer",
-  "ogro",
-  "oído",
-  "oír",
-  "ojo",
-  "ola",
-  "oleada",
-  "olfato",
-  "olivo",
-  "olla",
-  "olmo",
-  "olor",
-  "olvido",
-  "ombligo",
-  "onda",
-  "onza",
-  "opaco",
-  "opción",
-  "ópera",
-  "opinar",
-  "oponer",
-  "optar",
-  "óptica",
-  "opuesto",
-  "oración",
-  "orador",
-  "oral",
-  "órbita",
-  "orca",
-  "orden",
-  "oreja",
-  "órgano",
-  "orgía",
-  "orgullo",
-  "oriente",
-  "origen",
-  "orilla",
-  "oro",
-  "orquesta",
-  "oruga",
-  "osadía",
-  "oscuro",
-  "osezno",
-  "oso",
-  "ostra",
-  "otoño",
-  "otro",
-  "oveja",
-  "óvulo",
-  "óxido",
-  "oxígeno",
-  "oyente",
-  "ozono",
-  "pacto",
-  "padre",
-  "paella",
-  "página",
-  "pago",
-  "país",
-  "pájaro",
-  "palabra",
-  "palco",
-  "paleta",
-  "pálido",
-  "palma",
-  "paloma",
-  "palpar",
-  "pan",
-  "panal",
-  "pánico",
-  "pantera",
-  "pañuelo",
-  "papá",
-  "papel",
-  "papilla",
-  "paquete",
-  "parar",
-  "parcela",
-  "pared",
-  "parir",
-  "paro",
-  "párpado",
-  "parque",
-  "párrafo",
-  "parte",
-  "pasar",
-  "paseo",
-  "pasión",
-  "paso",
-  "pasta",
-  "pata",
-  "patio",
-  "patria",
-  "pausa",
-  "pauta",
-  "pavo",
-  "payaso",
-  "peatón",
-  "pecado",
-  "pecera",
-  "pecho",
-  "pedal",
-  "pedir",
-  "pegar",
-  "peine",
-  "pelar",
-  "peldaño",
-  "pelea",
-  "peligro",
-  "pellejo",
-  "pelo",
-  "peluca",
-  "pena",
-  "pensar",
-  "peñón",
-  "peón",
-  "peor",
-  "pepino",
-  "pequeño",
-  "pera",
-  "percha",
-  "perder",
-  "pereza",
-  "perfil",
-  "perico",
-  "perla",
-  "permiso",
-  "perro",
-  "persona",
-  "pesa",
-  "pesca",
-  "pésimo",
-  "pestaña",
-  "pétalo",
-  "petróleo",
-  "pez",
-  "pezuña",
-  "picar",
-  "pichón",
-  "pie",
-  "piedra",
-  "pierna",
-  "pieza",
-  "pijama",
-  "pilar",
-  "piloto",
-  "pimienta",
-  "pino",
-  "pintor",
-  "pinza",
-  "piña",
-  "piojo",
-  "pipa",
-  "pirata",
-  "pisar",
-  "piscina",
-  "piso",
-  "pista",
-  "pitón",
-  "pizca",
-  "placa",
-  "plan",
-  "plata",
-  "playa",
-  "plaza",
-  "pleito",
-  "pleno",
-  "plomo",
-  "pluma",
-  "plural",
-  "pobre",
-  "poco",
-  "poder",
-  "podio",
-  "poema",
-  "poesía",
-  "poeta",
-  "polen",
-  "policía",
-  "pollo",
-  "polvo",
-  "pomada",
-  "pomelo",
-  "pomo",
-  "pompa",
-  "poner",
-  "porción",
-  "portal",
-  "posada",
-  "poseer",
-  "posible",
-  "poste",
-  "potencia",
-  "potro",
-  "pozo",
-  "prado",
-  "precoz",
-  "pregunta",
-  "premio",
-  "prensa",
-  "preso",
-  "previo",
-  "primo",
-  "príncipe",
-  "prisión",
-  "privar",
-  "proa",
-  "probar",
-  "proceso",
-  "producto",
-  "proeza",
-  "profesor",
-  "programa",
-  "prole",
-  "promesa",
-  "pronto",
-  "propio",
-  "próximo",
-  "prueba",
-  "público",
-  "puchero",
-  "pudor",
-  "pueblo",
-  "puerta",
-  "puesto",
-  "pulga",
-  "pulir",
-  "pulmón",
-  "pulpo",
-  "pulso",
-  "puma",
-  "punto",
-  "puñal",
-  "puño",
-  "pupa",
-  "pupila",
-  "puré",
-  "quedar",
-  "queja",
-  "quemar",
-  "querer",
-  "queso",
-  "quieto",
-  "química",
-  "quince",
-  "quitar",
-  "rábano",
-  "rabia",
-  "rabo",
-  "ración",
-  "radical",
-  "raíz",
-  "rama",
-  "rampa",
-  "rancho",
-  "rango",
-  "rapaz",
-  "rápido",
-  "rapto",
-  "rasgo",
-  "raspa",
-  "rato",
-  "rayo",
-  "raza",
-  "razón",
-  "reacción",
-  "realidad",
-  "rebaño",
-  "rebote",
-  "recaer",
-  "receta",
-  "rechazo",
-  "recoger",
-  "recreo",
-  "recto",
-  "recurso",
-  "red",
-  "redondo",
-  "reducir",
-  "reflejo",
-  "reforma",
-  "refrán",
-  "refugio",
-  "regalo",
-  "regir",
-  "regla",
-  "regreso",
-  "rehén",
-  "reino",
-  "reír",
-  "reja",
-  "relato",
-  "relevo",
-  "relieve",
-  "relleno",
-  "reloj",
-  "remar",
-  "remedio",
-  "remo",
-  "rencor",
-  "rendir",
-  "renta",
-  "reparto",
-  "repetir",
-  "reposo",
-  "reptil",
-  "res",
-  "rescate",
-  "resina",
-  "respeto",
-  "resto",
-  "resumen",
-  "retiro",
-  "retorno",
-  "retrato",
-  "reunir",
-  "revés",
-  "revista",
-  "rey",
-  "rezar",
-  "rico",
-  "riego",
-  "rienda",
-  "riesgo",
-  "rifa",
-  "rígido",
-  "rigor",
-  "rincón",
-  "riñón",
-  "río",
-  "riqueza",
-  "risa",
-  "ritmo",
-  "rito"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/fr.rs b/networks/monero/wallet/seed/src/words/fr.rs
deleted file mode 100644
index 338eeb38..00000000
--- a/networks/monero/wallet/seed/src/words/fr.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "abandon",
-  "abattre",
-  "aboi",
-  "abolir",
-  "aborder",
-  "abri",
-  "absence",
-  "absolu",
-  "abuser",
-  "acacia",
-  "acajou",
-  "accent",
-  "accord",
-  "accrocher",
-  "accuser",
-  "acerbe",
-  "achat",
-  "acheter",
-  "acide",
-  "acier",
-  "acquis",
-  "acte",
-  "action",
-  "adage",
-  "adepte",
-  "adieu",
-  "admettre",
-  "admis",
-  "adorer",
-  "adresser",
-  "aduler",
-  "affaire",
-  "affirmer",
-  "afin",
-  "agacer",
-  "agent",
-  "agir",
-  "agiter",
-  "agonie",
-  "agrafe",
-  "agrume",
-  "aider",
-  "aigle",
-  "aigre",
-  "aile",
-  "ailleurs",
-  "aimant",
-  "aimer",
-  "ainsi",
-  "aise",
-  "ajouter",
-  "alarme",
-  "album",
-  "alcool",
-  "alerte",
-  "algue",
-  "alibi",
-  "aller",
-  "allumer",
-  "alors",
-  "amande",
-  "amener",
-  "amie",
-  "amorcer",
-  "amour",
-  "ample",
-  "amuser",
-  "ananas",
-  "ancien",
-  "anglais",
-  "angoisse",
-  "animal",
-  "anneau",
-  "annoncer",
-  "apercevoir",
-  "apparence",
-  "appel",
-  "apporter",
-  "apprendre",
-  "appuyer",
-  "arbre",
-  "arcade",
-  "arceau",
-  "arche",
-  "ardeur",
-  "argent",
-  "argile",
-  "aride",
-  "arme",
-  "armure",
-  "arracher",
-  "arriver",
-  "article",
-  "asile",
-  "aspect",
-  "assaut",
-  "assez",
-  "assister",
-  "assurer",
-  "astre",
-  "astuce",
-  "atlas",
-  "atroce",
-  "attacher",
-  "attente",
-  "attirer",
-  "aube",
-  "aucun",
-  "audace",
-  "auparavant",
-  "auquel",
-  "aurore",
-  "aussi",
-  "autant",
-  "auteur",
-  "autoroute",
-  "autre",
-  "aval",
-  "avant",
-  "avec",
-  "avenir",
-  "averse",
-  "aveu",
-  "avide",
-  "avion",
-  "avis",
-  "avoir",
-  "avouer",
-  "avril",
-  "azote",
-  "azur",
-  "badge",
-  "bagage",
-  "bague",
-  "bain",
-  "baisser",
-  "balai",
-  "balcon",
-  "balise",
-  "balle",
-  "bambou",
-  "banane",
-  "banc",
-  "bandage",
-  "banjo",
-  "banlieue",
-  "bannir",
-  "banque",
-  "baobab",
-  "barbe",
-  "barque",
-  "barrer",
-  "bassine",
-  "bataille",
-  "bateau",
-  "battre",
-  "baver",
-  "bavoir",
-  "bazar",
-  "beau",
-  "beige",
-  "berger",
-  "besoin",
-  "beurre",
-  "biais",
-  "biceps",
-  "bidule",
-  "bien",
-  "bijou",
-  "bilan",
-  "billet",
-  "blanc",
-  "blason",
-  "bleu",
-  "bloc",
-  "blond",
-  "bocal",
-  "boire",
-  "boiserie",
-  "boiter",
-  "bonbon",
-  "bondir",
-  "bonheur",
-  "bordure",
-  "borgne",
-  "borner",
-  "bosse",
-  "bouche",
-  "bouder",
-  "bouger",
-  "boule",
-  "bourse",
-  "bout",
-  "boxe",
-  "brader",
-  "braise",
-  "branche",
-  "braquer",
-  "bras",
-  "brave",
-  "brebis",
-  "brevet",
-  "brider",
-  "briller",
-  "brin",
-  "brique",
-  "briser",
-  "broche",
-  "broder",
-  "bronze",
-  "brosser",
-  "brouter",
-  "bruit",
-  "brute",
-  "budget",
-  "buffet",
-  "bulle",
-  "bureau",
-  "buriner",
-  "buste",
-  "buter",
-  "butiner",
-  "cabas",
-  "cabinet",
-  "cabri",
-  "cacao",
-  "cacher",
-  "cadeau",
-  "cadre",
-  "cage",
-  "caisse",
-  "caler",
-  "calme",
-  "camarade",
-  "camion",
-  "campagne",
-  "canal",
-  "canif",
-  "capable",
-  "capot",
-  "carat",
-  "caresser",
-  "carie",
-  "carpe",
-  "cartel",
-  "casier",
-  "casque",
-  "casserole",
-  "cause",
-  "cavale",
-  "cave",
-  "ceci",
-  "cela",
-  "celui",
-  "cendre",
-  "cent",
-  "cependant",
-  "cercle",
-  "cerise",
-  "cerner",
-  "certes",
-  "cerveau",
-  "cesser",
-  "chacun",
-  "chair",
-  "chaleur",
-  "chamois",
-  "chanson",
-  "chaque",
-  "charge",
-  "chasse",
-  "chat",
-  "chaud",
-  "chef",
-  "chemin",
-  "cheveu",
-  "chez",
-  "chicane",
-  "chien",
-  "chiffre",
-  "chiner",
-  "chiot",
-  "chlore",
-  "choc",
-  "choix",
-  "chose",
-  "chou",
-  "chute",
-  "cibler",
-  "cidre",
-  "ciel",
-  "cigale",
-  "cinq",
-  "cintre",
-  "cirage",
-  "cirque",
-  "ciseau",
-  "citation",
-  "citer",
-  "citron",
-  "civet",
-  "clairon",
-  "clan",
-  "classe",
-  "clavier",
-  "clef",
-  "climat",
-  "cloche",
-  "cloner",
-  "clore",
-  "clos",
-  "clou",
-  "club",
-  "cobra",
-  "cocon",
-  "coiffer",
-  "coin",
-  "colline",
-  "colon",
-  "combat",
-  "comme",
-  "compte",
-  "conclure",
-  "conduire",
-  "confier",
-  "connu",
-  "conseil",
-  "contre",
-  "convenir",
-  "copier",
-  "cordial",
-  "cornet",
-  "corps",
-  "cosmos",
-  "coton",
-  "couche",
-  "coude",
-  "couler",
-  "coupure",
-  "cour",
-  "couteau",
-  "couvrir",
-  "crabe",
-  "crainte",
-  "crampe",
-  "cran",
-  "creuser",
-  "crever",
-  "crier",
-  "crime",
-  "crin",
-  "crise",
-  "crochet",
-  "croix",
-  "cruel",
-  "cuisine",
-  "cuite",
-  "culot",
-  "culte",
-  "cumul",
-  "cure",
-  "curieux",
-  "cuve",
-  "dame",
-  "danger",
-  "dans",
-  "davantage",
-  "debout",
-  "dedans",
-  "dehors",
-  "delta",
-  "demain",
-  "demeurer",
-  "demi",
-  "dense",
-  "dent",
-  "depuis",
-  "dernier",
-  "descendre",
-  "dessus",
-  "destin",
-  "dette",
-  "deuil",
-  "deux",
-  "devant",
-  "devenir",
-  "devin",
-  "devoir",
-  "dicton",
-  "dieu",
-  "difficile",
-  "digestion",
-  "digue",
-  "diluer",
-  "dimanche",
-  "dinde",
-  "diode",
-  "dire",
-  "diriger",
-  "discours",
-  "disposer",
-  "distance",
-  "divan",
-  "divers",
-  "docile",
-  "docteur",
-  "dodu",
-  "dogme",
-  "doigt",
-  "dominer",
-  "donation",
-  "donjon",
-  "donner",
-  "dopage",
-  "dorer",
-  "dormir",
-  "doseur",
-  "douane",
-  "double",
-  "douche",
-  "douleur",
-  "doute",
-  "doux",
-  "douzaine",
-  "draguer",
-  "drame",
-  "drap",
-  "dresser",
-  "droit",
-  "duel",
-  "dune",
-  "duper",
-  "durant",
-  "durcir",
-  "durer",
-  "eaux",
-  "effacer",
-  "effet",
-  "effort",
-  "effrayant",
-  "elle",
-  "embrasser",
-  "emmener",
-  "emparer",
-  "empire",
-  "employer",
-  "emporter",
-  "enclos",
-  "encore",
-  "endive",
-  "endormir",
-  "endroit",
-  "enduit",
-  "enfant",
-  "enfermer",
-  "enfin",
-  "enfler",
-  "enfoncer",
-  "enfuir",
-  "engager",
-  "engin",
-  "enjeu",
-  "enlever",
-  "ennemi",
-  "ennui",
-  "ensemble",
-  "ensuite",
-  "entamer",
-  "entendre",
-  "entier",
-  "entourer",
-  "entre",
-  "envelopper",
-  "envie",
-  "envoyer",
-  "erreur",
-  "escalier",
-  "espace",
-  "espoir",
-  "esprit",
-  "essai",
-  "essor",
-  "essuyer",
-  "estimer",
-  "exact",
-  "examiner",
-  "excuse",
-  "exemple",
-  "exiger",
-  "exil",
-  "exister",
-  "exode",
-  "expliquer",
-  "exposer",
-  "exprimer",
-  "extase",
-  "fable",
-  "facette",
-  "facile",
-  "fade",
-  "faible",
-  "faim",
-  "faire",
-  "fait",
-  "falloir",
-  "famille",
-  "faner",
-  "farce",
-  "farine",
-  "fatigue",
-  "faucon",
-  "faune",
-  "faute",
-  "faux",
-  "faveur",
-  "favori",
-  "faxer",
-  "feinter",
-  "femme",
-  "fendre",
-  "fente",
-  "ferme",
-  "festin",
-  "feuille",
-  "feutre",
-  "fiable",
-  "fibre",
-  "ficher",
-  "fier",
-  "figer",
-  "figure",
-  "filet",
-  "fille",
-  "filmer",
-  "fils",
-  "filtre",
-  "final",
-  "finesse",
-  "finir",
-  "fiole",
-  "firme",
-  "fixe",
-  "flacon",
-  "flair",
-  "flamme",
-  "flan",
-  "flaque",
-  "fleur",
-  "flocon",
-  "flore",
-  "flot",
-  "flou",
-  "fluide",
-  "fluor",
-  "flux",
-  "focus",
-  "foin",
-  "foire",
-  "foison",
-  "folie",
-  "fonction",
-  "fondre",
-  "fonte",
-  "force",
-  "forer",
-  "forger",
-  "forme",
-  "fort",
-  "fosse",
-  "fouet",
-  "fouine",
-  "foule",
-  "four",
-  "foyer",
-  "frais",
-  "franc",
-  "frapper",
-  "freiner",
-  "frimer",
-  "friser",
-  "frite",
-  "froid",
-  "froncer",
-  "fruit",
-  "fugue",
-  "fuir",
-  "fuite",
-  "fumer",
-  "fureur",
-  "furieux",
-  "fuser",
-  "fusil",
-  "futile",
-  "futur",
-  "gagner",
-  "gain",
-  "gala",
-  "galet",
-  "galop",
-  "gamme",
-  "gant",
-  "garage",
-  "garde",
-  "garer",
-  "gauche",
-  "gaufre",
-  "gaule",
-  "gaver",
-  "gazon",
-  "geler",
-  "genou",
-  "genre",
-  "gens",
-  "gercer",
-  "germer",
-  "geste",
-  "gibier",
-  "gicler",
-  "gilet",
-  "girafe",
-  "givre",
-  "glace",
-  "glisser",
-  "globe",
-  "gloire",
-  "gluant",
-  "gober",
-  "golf",
-  "gommer",
-  "gorge",
-  "gosier",
-  "goutte",
-  "grain",
-  "gramme",
-  "grand",
-  "gras",
-  "grave",
-  "gredin",
-  "griffure",
-  "griller",
-  "gris",
-  "gronder",
-  "gros",
-  "grotte",
-  "groupe",
-  "grue",
-  "guerrier",
-  "guetter",
-  "guider",
-  "guise",
-  "habiter",
-  "hache",
-  "haie",
-  "haine",
-  "halte",
-  "hamac",
-  "hanche",
-  "hangar",
-  "hanter",
-  "haras",
-  "hareng",
-  "harpe",
-  "hasard",
-  "hausse",
-  "haut",
-  "havre",
-  "herbe",
-  "heure",
-  "hibou",
-  "hier",
-  "histoire",
-  "hiver",
-  "hochet",
-  "homme",
-  "honneur",
-  "honte",
-  "horde",
-  "horizon",
-  "hormone",
-  "houle",
-  "housse",
-  "hublot",
-  "huile",
-  "huit",
-  "humain",
-  "humble",
-  "humide",
-  "humour",
-  "hurler",
-  "idole",
-  "igloo",
-  "ignorer",
-  "illusion",
-  "image",
-  "immense",
-  "immobile",
-  "imposer",
-  "impression",
-  "incapable",
-  "inconnu",
-  "index",
-  "indiquer",
-  "infime",
-  "injure",
-  "inox",
-  "inspirer",
-  "instant",
-  "intention",
-  "intime",
-  "inutile",
-  "inventer",
-  "inviter",
-  "iode",
-  "iris",
-  "issue",
-  "ivre",
-  "jade",
-  "jadis",
-  "jamais",
-  "jambe",
-  "janvier",
-  "jardin",
-  "jauge",
-  "jaunisse",
-  "jeter",
-  "jeton",
-  "jeudi",
-  "jeune",
-  "joie",
-  "joindre",
-  "joli",
-  "joueur",
-  "journal",
-  "judo",
-  "juge",
-  "juillet",
-  "juin",
-  "jument",
-  "jungle",
-  "jupe",
-  "jupon",
-  "jurer",
-  "juron",
-  "jury",
-  "jusque",
-  "juste",
-  "kayak",
-  "ketchup",
-  "kilo",
-  "kiwi",
-  "koala",
-  "label",
-  "lacet",
-  "lacune",
-  "laine",
-  "laisse",
-  "lait",
-  "lame",
-  "lancer",
-  "lande",
-  "laque",
-  "lard",
-  "largeur",
-  "larme",
-  "larve",
-  "lasso",
-  "laver",
-  "lendemain",
-  "lentement",
-  "lequel",
-  "lettre",
-  "leur",
-  "lever",
-  "levure",
-  "liane",
-  "libre",
-  "lien",
-  "lier",
-  "lieutenant",
-  "ligne",
-  "ligoter",
-  "liguer",
-  "limace",
-  "limer",
-  "limite",
-  "lingot",
-  "lion",
-  "lire",
-  "lisser",
-  "litre",
-  "livre",
-  "lobe",
-  "local",
-  "logis",
-  "loin",
-  "loisir",
-  "long",
-  "loque",
-  "lors",
-  "lotus",
-  "louer",
-  "loup",
-  "lourd",
-  "louve",
-  "loyer",
-  "lubie",
-  "lucide",
-  "lueur",
-  "luge",
-  "luire",
-  "lundi",
-  "lune",
-  "lustre",
-  "lutin",
-  "lutte",
-  "luxe",
-  "machine",
-  "madame",
-  "magie",
-  "magnifique",
-  "magot",
-  "maigre",
-  "main",
-  "mairie",
-  "maison",
-  "malade",
-  "malheur",
-  "malin",
-  "manche",
-  "manger",
-  "manier",
-  "manoir",
-  "manquer",
-  "marche",
-  "mardi",
-  "marge",
-  "mariage",
-  "marquer",
-  "mars",
-  "masque",
-  "masse",
-  "matin",
-  "mauvais",
-  "meilleur",
-  "melon",
-  "membre",
-  "menacer",
-  "mener",
-  "mensonge",
-  "mentir",
-  "menu",
-  "merci",
-  "merlu",
-  "mesure",
-  "mettre",
-  "meuble",
-  "meunier",
-  "meute",
-  "miche",
-  "micro",
-  "midi",
-  "miel",
-  "miette",
-  "mieux",
-  "milieu",
-  "mille",
-  "mimer",
-  "mince",
-  "mineur",
-  "ministre",
-  "minute",
-  "mirage",
-  "miroir",
-  "miser",
-  "mite",
-  "mixte",
-  "mobile",
-  "mode",
-  "module",
-  "moins",
-  "mois",
-  "moment",
-  "momie",
-  "monde",
-  "monsieur",
-  "monter",
-  "moquer",
-  "moral",
-  "morceau",
-  "mordre",
-  "morose",
-  "morse",
-  "mortier",
-  "morue",
-  "motif",
-  "motte",
-  "moudre",
-  "moule",
-  "mourir",
-  "mousse",
-  "mouton",
-  "mouvement",
-  "moyen",
-  "muer",
-  "muette",
-  "mugir",
-  "muguet",
-  "mulot",
-  "multiple",
-  "munir",
-  "muret",
-  "muse",
-  "musique",
-  "muter",
-  "nacre",
-  "nager",
-  "nain",
-  "naissance",
-  "narine",
-  "narrer",
-  "naseau",
-  "nasse",
-  "nation",
-  "nature",
-  "naval",
-  "navet",
-  "naviguer",
-  "navrer",
-  "neige",
-  "nerf",
-  "nerveux",
-  "neuf",
-  "neutre",
-  "neuve",
-  "neveu",
-  "niche",
-  "nier",
-  "niveau",
-  "noble",
-  "noce",
-  "nocif",
-  "noir",
-  "nomade",
-  "nombre",
-  "nommer",
-  "nord",
-  "norme",
-  "notaire",
-  "notice",
-  "notre",
-  "nouer",
-  "nougat",
-  "nourrir",
-  "nous",
-  "nouveau",
-  "novice",
-  "noyade",
-  "noyer",
-  "nuage",
-  "nuance",
-  "nuire",
-  "nuit",
-  "nulle",
-  "nuque",
-  "oasis",
-  "objet",
-  "obliger",
-  "obscur",
-  "observer",
-  "obtenir",
-  "obus",
-  "occasion",
-  "occuper",
-  "ocre",
-  "octet",
-  "odeur",
-  "odorat",
-  "offense",
-  "officier",
-  "offrir",
-  "ogive",
-  "oiseau",
-  "olive",
-  "ombre",
-  "onctueux",
-  "onduler",
-  "ongle",
-  "onze",
-  "opter",
-  "option",
-  "orageux",
-  "oral",
-  "orange",
-  "orbite",
-  "ordinaire",
-  "ordre",
-  "oreille",
-  "organe",
-  "orgie",
-  "orgueil",
-  "orient",
-  "origan",
-  "orner",
-  "orteil",
-  "ortie",
-  "oser",
-  "osselet",
-  "otage",
-  "otarie",
-  "ouate",
-  "oublier",
-  "ouest",
-  "ours",
-  "outil",
-  "outre",
-  "ouvert",
-  "ouvrir",
-  "ovale",
-  "ozone",
-  "pacte",
-  "page",
-  "paille",
-  "pain",
-  "paire",
-  "paix",
-  "palace",
-  "palissade",
-  "palmier",
-  "palpiter",
-  "panda",
-  "panneau",
-  "papa",
-  "papier",
-  "paquet",
-  "parc",
-  "pardi",
-  "parfois",
-  "parler",
-  "parmi",
-  "parole",
-  "partir",
-  "parvenir",
-  "passer",
-  "pastel",
-  "patin",
-  "patron",
-  "paume",
-  "pause",
-  "pauvre",
-  "paver",
-  "pavot",
-  "payer",
-  "pays",
-  "peau",
-  "peigne",
-  "peinture",
-  "pelage",
-  "pelote",
-  "pencher",
-  "pendre",
-  "penser",
-  "pente",
-  "percer",
-  "perdu",
-  "perle",
-  "permettre",
-  "personne",
-  "perte",
-  "peser",
-  "pesticide",
-  "petit",
-  "peuple",
-  "peur",
-  "phase",
-  "photo",
-  "phrase",
-  "piano",
-  "pied",
-  "pierre",
-  "pieu",
-  "pile",
-  "pilier",
-  "pilote",
-  "pilule",
-  "piment",
-  "pincer",
-  "pinson",
-  "pinte",
-  "pion",
-  "piquer",
-  "pirate",
-  "pire",
-  "piste",
-  "piton",
-  "pitre",
-  "pivot",
-  "pizza",
-  "placer",
-  "plage",
-  "plaire",
-  "plan",
-  "plaque",
-  "plat",
-  "plein",
-  "pleurer",
-  "pliage",
-  "plier",
-  "plonger",
-  "plot",
-  "pluie",
-  "plume",
-  "plus",
-  "pneu",
-  "poche",
-  "podium",
-  "poids",
-  "poil",
-  "point",
-  "poire",
-  "poison",
-  "poitrine",
-  "poivre",
-  "police",
-  "pollen",
-  "pomme",
-  "pompier",
-  "poncer",
-  "pondre",
-  "pont",
-  "portion",
-  "poser",
-  "position",
-  "possible",
-  "poste",
-  "potage",
-  "potin",
-  "pouce",
-  "poudre",
-  "poulet",
-  "poumon",
-  "poupe",
-  "pour",
-  "pousser",
-  "poutre",
-  "pouvoir",
-  "prairie",
-  "premier",
-  "prendre",
-  "presque",
-  "preuve",
-  "prier",
-  "primeur",
-  "prince",
-  "prison",
-  "priver",
-  "prix",
-  "prochain",
-  "produire",
-  "profond",
-  "proie",
-  "projet",
-  "promener",
-  "prononcer",
-  "propre",
-  "prose",
-  "prouver",
-  "prune",
-  "public",
-  "puce",
-  "pudeur",
-  "puiser",
-  "pull",
-  "pulpe",
-  "puma",
-  "punir",
-  "purge",
-  "putois",
-  "quand",
-  "quartier",
-  "quasi",
-  "quatre",
-  "quel",
-  "question",
-  "queue",
-  "quiche",
-  "quille",
-  "quinze",
-  "quitter",
-  "quoi",
-  "rabais",
-  "raboter",
-  "race",
-  "racheter",
-  "racine",
-  "racler",
-  "raconter",
-  "radar",
-  "radio",
-  "rafale",
-  "rage",
-  "ragot",
-  "raideur",
-  "raie",
-  "rail",
-  "raison",
-  "ramasser",
-  "ramener",
-  "rampe",
-  "rance",
-  "rang",
-  "rapace",
-  "rapide",
-  "rapport",
-  "rarement",
-  "rasage",
-  "raser",
-  "rasoir",
-  "rassurer",
-  "rater",
-  "ratio",
-  "rature",
-  "ravage",
-  "ravir",
-  "rayer",
-  "rayon",
-  "rebond",
-  "recevoir",
-  "recherche",
-  "record",
-  "reculer",
-  "redevenir",
-  "refuser",
-  "regard",
-  "regretter",
-  "rein",
-  "rejeter",
-  "rejoindre",
-  "relation",
-  "relever",
-  "religion",
-  "remarquer",
-  "remettre",
-  "remise",
-  "remonter",
-  "remplir",
-  "remuer",
-  "rencontre",
-  "rendre",
-  "renier",
-  "renoncer",
-  "rentrer",
-  "renverser",
-  "repas",
-  "repli",
-  "reposer",
-  "reproche",
-  "requin",
-  "respect",
-  "ressembler",
-  "reste",
-  "retard",
-  "retenir",
-  "retirer",
-  "retour",
-  "retrouver",
-  "revenir",
-  "revoir",
-  "revue",
-  "rhume",
-  "ricaner",
-  "riche",
-  "rideau",
-  "ridicule",
-  "rien",
-  "rigide",
-  "rincer",
-  "rire",
-  "risquer",
-  "rituel",
-  "rivage",
-  "rive",
-  "robe",
-  "robot",
-  "robuste",
-  "rocade",
-  "roche",
-  "rodeur",
-  "rogner",
-  "roman",
-  "rompre",
-  "ronce",
-  "rondeur",
-  "ronger",
-  "roque",
-  "rose",
-  "rosir",
-  "rotation",
-  "rotule",
-  "roue",
-  "rouge",
-  "rouler",
-  "route",
-  "ruban",
-  "rubis",
-  "ruche",
-  "rude",
-  "ruelle",
-  "ruer",
-  "rugby",
-  "rugir",
-  "ruine",
-  "rumeur",
-  "rural",
-  "ruse",
-  "rustre",
-  "sable",
-  "sabot",
-  "sabre",
-  "sacre",
-  "sage",
-  "saint",
-  "saisir",
-  "salade",
-  "salive",
-  "salle",
-  "salon",
-  "salto",
-  "salut",
-  "salve",
-  "samba",
-  "sandale",
-  "sanguin",
-  "sapin",
-  "sarcasme",
-  "satisfaire",
-  "sauce",
-  "sauf",
-  "sauge",
-  "saule",
-  "sauna",
-  "sauter",
-  "sauver",
-  "savoir",
-  "science",
-  "scoop",
-  "score",
-  "second",
-  "secret",
-  "secte",
-  "seigneur",
-  "sein",
-  "seize",
-  "selle",
-  "selon",
-  "semaine",
-  "sembler",
-  "semer",
-  "semis",
-  "sensuel",
-  "sentir",
-  "sept",
-  "serpe",
-  "serrer",
-  "sertir",
-  "service",
-  "seuil",
-  "seulement",
-  "short",
-  "sien",
-  "sigle",
-  "signal",
-  "silence",
-  "silo",
-  "simple",
-  "singe",
-  "sinon",
-  "sinus",
-  "sioux",
-  "sirop",
-  "site",
-  "situation",
-  "skier",
-  "snob",
-  "sobre",
-  "social",
-  "socle",
-  "sodium",
-  "soigner",
-  "soir",
-  "soixante",
-  "soja",
-  "solaire",
-  "soldat",
-  "soleil",
-  "solide",
-  "solo",
-  "solvant",
-  "sombre",
-  "somme",
-  "somnoler",
-  "sondage",
-  "songeur",
-  "sonner",
-  "sorte",
-  "sosie",
-  "sottise",
-  "souci",
-  "soudain",
-  "souffrir",
-  "souhaiter",
-  "soulever",
-  "soumettre",
-  "soupe",
-  "sourd",
-  "soustraire",
-  "soutenir",
-  "souvent",
-  "soyeux",
-  "spectacle",
-  "sport",
-  "stade",
-  "stagiaire",
-  "stand",
-  "star",
-  "statue",
-  "stock",
-  "stop",
-  "store",
-  "style",
-  "suave",
-  "subir",
-  "sucre",
-  "suer",
-  "suffire",
-  "suie",
-  "suite",
-  "suivre",
-  "sujet",
-  "sulfite",
-  "supposer",
-  "surf",
-  "surprendre",
-  "surtout",
-  "surveiller",
-  "tabac",
-  "table",
-  "tabou",
-  "tache",
-  "tacler",
-  "tacot",
-  "tact",
-  "taie",
-  "taille",
-  "taire",
-  "talon",
-  "talus",
-  "tandis",
-  "tango",
-  "tanin",
-  "tant",
-  "taper",
-  "tapis",
-  "tard",
-  "tarif",
-  "tarot",
-  "tarte",
-  "tasse",
-  "taureau",
-  "taux",
-  "taverne",
-  "taxer",
-  "taxi",
-  "tellement",
-  "temple",
-  "tendre",
-  "tenir",
-  "tenter",
-  "tenu",
-  "terme",
-  "ternir",
-  "terre",
-  "test",
-  "texte",
-  "thym",
-  "tibia",
-  "tiers",
-  "tige",
-  "tipi",
-  "tique",
-  "tirer",
-  "tissu",
-  "titre",
-  "toast",
-  "toge",
-  "toile",
-  "toiser",
-  "toiture",
-  "tomber",
-  "tome",
-  "tonne",
-  "tonte",
-  "toque",
-  "torse",
-  "tortue",
-  "totem",
-  "toucher",
-  "toujours",
-  "tour",
-  "tousser",
-  "tout",
-  "toux",
-  "trace",
-  "train",
-  "trame",
-  "tranquille",
-  "travail",
-  "trembler",
-  "trente",
-  "tribu",
-  "trier",
-  "trio",
-  "tripe",
-  "triste",
-  "troc",
-  "trois",
-  "tromper",
-  "tronc",
-  "trop",
-  "trotter",
-  "trouer",
-  "truc",
-  "truite",
-  "tuba",
-  "tuer",
-  "tuile",
-  "turbo",
-  "tutu",
-  "tuyau",
-  "type",
-  "union",
-  "unique",
-  "unir",
-  "unisson",
-  "untel",
-  "urne",
-  "usage",
-  "user",
-  "usiner",
-  "usure",
-  "utile",
-  "vache",
-  "vague",
-  "vaincre",
-  "valeur",
-  "valoir",
-  "valser",
-  "valve",
-  "vampire",
-  "vaseux",
-  "vaste",
-  "veau",
-  "veille",
-  "veine",
-  "velours",
-  "velu",
-  "vendre",
-  "venir",
-  "vent",
-  "venue",
-  "verbe",
-  "verdict",
-  "version",
-  "vertige",
-  "verve",
-  "veste",
-  "veto",
-  "vexer",
-  "vice",
-  "victime",
-  "vide",
-  "vieil",
-  "vieux",
-  "vigie",
-  "vigne",
-  "ville",
-  "vingt",
-  "violent",
-  "virer",
-  "virus",
-  "visage",
-  "viser",
-  "visite",
-  "visuel",
-  "vitamine",
-  "vitrine",
-  "vivant",
-  "vivre",
-  "vocal",
-  "vodka",
-  "vogue",
-  "voici",
-  "voile",
-  "voir",
-  "voisin",
-  "voiture",
-  "volaille",
-  "volcan",
-  "voler",
-  "volt",
-  "votant",
-  "votre",
-  "vouer",
-  "vouloir",
-  "vous",
-  "voyage",
-  "voyou",
-  "vrac",
-  "vrai",
-  "yacht",
-  "yeti",
-  "yeux",
-  "yoga",
-  "zeste",
-  "zinc",
-  "zone",
-  "zoom"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/it.rs b/networks/monero/wallet/seed/src/words/it.rs
deleted file mode 100644
index 343984e6..00000000
--- a/networks/monero/wallet/seed/src/words/it.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "abbinare",
-  "abbonato",
-  "abisso",
-  "abitare",
-  "abominio",
-  "accadere",
-  "accesso",
-  "acciaio",
-  "accordo",
-  "accumulo",
-  "acido",
-  "acqua",
-  "acrobata",
-  "acustico",
-  "adattare",
-  "addetto",
-  "addio",
-  "addome",
-  "adeguato",
-  "aderire",
-  "adorare",
-  "adottare",
-  "adozione",
-  "adulto",
-  "aereo",
-  "aerobica",
-  "affare",
-  "affetto",
-  "affidare",
-  "affogato",
-  "affronto",
-  "africano",
-  "afrodite",
-  "agenzia",
-  "aggancio",
-  "aggeggio",
-  "aggiunta",
-  "agio",
-  "agire",
-  "agitare",
-  "aglio",
-  "agnello",
-  "agosto",
-  "aiutare",
-  "albero",
-  "albo",
-  "alce",
-  "alchimia",
-  "alcool",
-  "alfabeto",
-  "algebra",
-  "alimento",
-  "allarme",
-  "alleanza",
-  "allievo",
-  "alloggio",
-  "alluce",
-  "alpi",
-  "alterare",
-  "altro",
-  "aluminio",
-  "amante",
-  "amarezza",
-  "ambiente",
-  "ambrosia",
-  "america",
-  "amico",
-  "ammalare",
-  "ammirare",
-  "amnesia",
-  "amnistia",
-  "amore",
-  "ampliare",
-  "amputare",
-  "analisi",
-  "anamnesi",
-  "ananas",
-  "anarchia",
-  "anatra",
-  "anca",
-  "ancorato",
-  "andare",
-  "androide",
-  "aneddoto",
-  "anello",
-  "angelo",
-  "angolino",
-  "anguilla",
-  "anidride",
-  "anima",
-  "annegare",
-  "anno",
-  "annuncio",
-  "anomalia",
-  "antenna",
-  "anticipo",
-  "aperto",
-  "apostolo",
-  "appalto",
-  "appello",
-  "appiglio",
-  "applauso",
-  "appoggio",
-  "appurare",
-  "aprile",
-  "aquila",
-  "arabo",
-  "arachidi",
-  "aragosta",
-  "arancia",
-  "arbitrio",
-  "archivio",
-  "arco",
-  "argento",
-  "argilla",
-  "aria",
-  "ariete",
-  "arma",
-  "armonia",
-  "aroma",
-  "arrivare",
-  "arrosto",
-  "arsenale",
-  "arte",
-  "artiglio",
-  "asfalto",
-  "asfissia",
-  "asino",
-  "asparagi",
-  "aspirina",
-  "assalire",
-  "assegno",
-  "assolto",
-  "assurdo",
-  "asta",
-  "astratto",
-  "atlante",
-  "atletica",
-  "atomo",
-  "atropina",
-  "attacco",
-  "attesa",
-  "attico",
-  "atto",
-  "attrarre",
-  "auguri",
-  "aula",
-  "aumento",
-  "aurora",
-  "auspicio",
-  "autista",
-  "auto",
-  "autunno",
-  "avanzare",
-  "avarizia",
-  "avere",
-  "aviatore",
-  "avido",
-  "avorio",
-  "avvenire",
-  "avviso",
-  "avvocato",
-  "azienda",
-  "azione",
-  "azzardo",
-  "azzurro",
-  "babbuino",
-  "bacio",
-  "badante",
-  "baffi",
-  "bagaglio",
-  "bagliore",
-  "bagno",
-  "balcone",
-  "balena",
-  "ballare",
-  "balordo",
-  "balsamo",
-  "bambola",
-  "bancomat",
-  "banda",
-  "barato",
-  "barba",
-  "barista",
-  "barriera",
-  "basette",
-  "basilico",
-  "bassista",
-  "bastare",
-  "battello",
-  "bavaglio",
-  "beccare",
-  "beduino",
-  "bellezza",
-  "bene",
-  "benzina",
-  "berretto",
-  "bestia",
-  "bevitore",
-  "bianco",
-  "bibbia",
-  "biberon",
-  "bibita",
-  "bici",
-  "bidone",
-  "bilancia",
-  "biliardo",
-  "binario",
-  "binocolo",
-  "biologia",
-  "biondina",
-  "biopsia",
-  "biossido",
-  "birbante",
-  "birra",
-  "biscotto",
-  "bisogno",
-  "bistecca",
-  "bivio",
-  "blindare",
-  "bloccare",
-  "bocca",
-  "bollire",
-  "bombola",
-  "bonifico",
-  "borghese",
-  "borsa",
-  "bottino",
-  "botulino",
-  "braccio",
-  "bradipo",
-  "branco",
-  "bravo",
-  "bresaola",
-  "bretelle",
-  "brevetto",
-  "briciola",
-  "brigante",
-  "brillare",
-  "brindare",
-  "brivido",
-  "broccoli",
-  "brontolo",
-  "bruciare",
-  "brufolo",
-  "bucare",
-  "buddista",
-  "budino",
-  "bufera",
-  "buffo",
-  "bugiardo",
-  "buio",
-  "buono",
-  "burrone",
-  "bussola",
-  "bustina",
-  "buttare",
-  "cabernet",
-  "cabina",
-  "cacao",
-  "cacciare",
-  "cactus",
-  "cadavere",
-  "caffe",
-  "calamari",
-  "calcio",
-  "caldaia",
-  "calmare",
-  "calunnia",
-  "calvario",
-  "calzone",
-  "cambiare",
-  "camera",
-  "camion",
-  "cammello",
-  "campana",
-  "canarino",
-  "cancello",
-  "candore",
-  "cane",
-  "canguro",
-  "cannone",
-  "canoa",
-  "cantare",
-  "canzone",
-  "caos",
-  "capanna",
-  "capello",
-  "capire",
-  "capo",
-  "capperi",
-  "capra",
-  "capsula",
-  "caraffa",
-  "carbone",
-  "carciofo",
-  "cardigan",
-  "carenza",
-  "caricare",
-  "carota",
-  "carrello",
-  "carta",
-  "casa",
-  "cascare",
-  "caserma",
-  "cashmere",
-  "casino",
-  "cassetta",
-  "castello",
-  "catalogo",
-  "catena",
-  "catorcio",
-  "cattivo",
-  "causa",
-  "cauzione",
-  "cavallo",
-  "caverna",
-  "caviglia",
-  "cavo",
-  "cazzotto",
-  "celibato",
-  "cemento",
-  "cenare",
-  "centrale",
-  "ceramica",
-  "cercare",
-  "ceretta",
-  "cerniera",
-  "certezza",
-  "cervello",
-  "cessione",
-  "cestino",
-  "cetriolo",
-  "chiave",
-  "chiedere",
-  "chilo",
-  "chimera",
-  "chiodo",
-  "chirurgo",
-  "chitarra",
-  "chiudere",
-  "ciabatta",
-  "ciao",
-  "cibo",
-  "ciccia",
-  "cicerone",
-  "ciclone",
-  "cicogna",
-  "cielo",
-  "cifra",
-  "cigno",
-  "ciliegia",
-  "cimitero",
-  "cinema",
-  "cinque",
-  "cintura",
-  "ciondolo",
-  "ciotola",
-  "cipolla",
-  "cippato",
-  "circuito",
-  "cisterna",
-  "citofono",
-  "ciuccio",
-  "civetta",
-  "civico",
-  "clausola",
-  "cliente",
-  "clima",
-  "clinica",
-  "cobra",
-  "coccole",
-  "cocktail",
-  "cocomero",
-  "codice",
-  "coesione",
-  "cogliere",
-  "cognome",
-  "colla",
-  "colomba",
-  "colpire",
-  "coltello",
-  "comando",
-  "comitato",
-  "commedia",
-  "comodino",
-  "compagna",
-  "comune",
-  "concerto",
-  "condotto",
-  "conforto",
-  "congiura",
-  "coniglio",
-  "consegna",
-  "conto",
-  "convegno",
-  "coperta",
-  "copia",
-  "coprire",
-  "corazza",
-  "corda",
-  "corleone",
-  "cornice",
-  "corona",
-  "corpo",
-  "corrente",
-  "corsa",
-  "cortesia",
-  "corvo",
-  "coso",
-  "costume",
-  "cotone",
-  "cottura",
-  "cozza",
-  "crampo",
-  "cratere",
-  "cravatta",
-  "creare",
-  "credere",
-  "crema",
-  "crescere",
-  "crimine",
-  "criterio",
-  "croce",
-  "crollare",
-  "cronaca",
-  "crostata",
-  "croupier",
-  "cubetto",
-  "cucciolo",
-  "cucina",
-  "cultura",
-  "cuoco",
-  "cuore",
-  "cupido",
-  "cupola",
-  "cura",
-  "curva",
-  "cuscino",
-  "custode",
-  "danzare",
-  "data",
-  "decennio",
-  "decidere",
-  "decollo",
-  "dedicare",
-  "dedurre",
-  "definire",
-  "delegare",
-  "delfino",
-  "delitto",
-  "demone",
-  "dentista",
-  "denuncia",
-  "deposito",
-  "derivare",
-  "deserto",
-  "designer",
-  "destino",
-  "detonare",
-  "dettagli",
-  "diagnosi",
-  "dialogo",
-  "diamante",
-  "diario",
-  "diavolo",
-  "dicembre",
-  "difesa",
-  "digerire",
-  "digitare",
-  "diluvio",
-  "dinamica",
-  "dipinto",
-  "diploma",
-  "diramare",
-  "dire",
-  "dirigere",
-  "dirupo",
-  "discesa",
-  "disdetta",
-  "disegno",
-  "disporre",
-  "dissenso",
-  "distacco",
-  "dito",
-  "ditta",
-  "diva",
-  "divenire",
-  "dividere",
-  "divorare",
-  "docente",
-  "dolcetto",
-  "dolore",
-  "domatore",
-  "domenica",
-  "dominare",
-  "donatore",
-  "donna",
-  "dorato",
-  "dormire",
-  "dorso",
-  "dosaggio",
-  "dottore",
-  "dovere",
-  "download",
-  "dragone",
-  "dramma",
-  "dubbio",
-  "dubitare",
-  "duetto",
-  "durata",
-  "ebbrezza",
-  "eccesso",
-  "eccitare",
-  "eclissi",
-  "economia",
-  "edera",
-  "edificio",
-  "editore",
-  "edizione",
-  "educare",
-  "effetto",
-  "egitto",
-  "egiziano",
-  "elastico",
-  "elefante",
-  "eleggere",
-  "elemento",
-  "elenco",
-  "elezione",
-  "elmetto",
-  "elogio",
-  "embrione",
-  "emergere",
-  "emettere",
-  "eminenza",
-  "emisfero",
-  "emozione",
-  "empatia",
-  "energia",
-  "enfasi",
-  "enigma",
-  "entrare",
-  "enzima",
-  "epidemia",
-  "epilogo",
-  "episodio",
-  "epoca",
-  "equivoco",
-  "erba",
-  "erede",
-  "eroe",
-  "erotico",
-  "errore",
-  "eruzione",
-  "esaltare",
-  "esame",
-  "esaudire",
-  "eseguire",
-  "esempio",
-  "esigere",
-  "esistere",
-  "esito",
-  "esperto",
-  "espresso",
-  "essere",
-  "estasi",
-  "esterno",
-  "estrarre",
-  "eterno",
-  "etica",
-  "euforico",
-  "europa",
-  "evacuare",
-  "evasione",
-  "evento",
-  "evidenza",
-  "evitare",
-  "evolvere",
-  "fabbrica",
-  "facciata",
-  "fagiano",
-  "fagotto",
-  "falco",
-  "fame",
-  "famiglia",
-  "fanale",
-  "fango",
-  "fantasia",
-  "farfalla",
-  "farmacia",
-  "faro",
-  "fase",
-  "fastidio",
-  "faticare",
-  "fatto",
-  "favola",
-  "febbre",
-  "femmina",
-  "femore",
-  "fenomeno",
-  "fermata",
-  "feromoni",
-  "ferrari",
-  "fessura",
-  "festa",
-  "fiaba",
-  "fiamma",
-  "fianco",
-  "fiat",
-  "fibbia",
-  "fidare",
-  "fieno",
-  "figa",
-  "figlio",
-  "figura",
-  "filetto",
-  "filmato",
-  "filosofo",
-  "filtrare",
-  "finanza",
-  "finestra",
-  "fingere",
-  "finire",
-  "finta",
-  "finzione",
-  "fiocco",
-  "fioraio",
-  "firewall",
-  "firmare",
-  "fisico",
-  "fissare",
-  "fittizio",
-  "fiume",
-  "flacone",
-  "flagello",
-  "flirtare",
-  "flusso",
-  "focaccia",
-  "foglio",
-  "fognario",
-  "follia",
-  "fonderia",
-  "fontana",
-  "forbici",
-  "forcella",
-  "foresta",
-  "forgiare",
-  "formare",
-  "fornace",
-  "foro",
-  "fortuna",
-  "forzare",
-  "fosforo",
-  "fotoni",
-  "fracasso",
-  "fragola",
-  "frantumi",
-  "fratello",
-  "frazione",
-  "freccia",
-  "freddo",
-  "frenare",
-  "fresco",
-  "friggere",
-  "frittata",
-  "frivolo",
-  "frizione",
-  "fronte",
-  "frullato",
-  "frumento",
-  "frusta",
-  "frutto",
-  "fucile",
-  "fuggire",
-  "fulmine",
-  "fumare",
-  "funzione",
-  "fuoco",
-  "furbizia",
-  "furgone",
-  "furia",
-  "furore",
-  "fusibile",
-  "fuso",
-  "futuro",
-  "gabbiano",
-  "galassia",
-  "gallina",
-  "gamba",
-  "gancio",
-  "garanzia",
-  "garofano",
-  "gasolio",
-  "gatto",
-  "gazebo",
-  "gazzetta",
-  "gelato",
-  "gemelli",
-  "generare",
-  "genitori",
-  "gennaio",
-  "geologia",
-  "germania",
-  "gestire",
-  "gettare",
-  "ghepardo",
-  "ghiaccio",
-  "giaccone",
-  "giaguaro",
-  "giallo",
-  "giappone",
-  "giardino",
-  "gigante",
-  "gioco",
-  "gioiello",
-  "giorno",
-  "giovane",
-  "giraffa",
-  "giudizio",
-  "giurare",
-  "giusto",
-  "globo",
-  "gloria",
-  "glucosio",
-  "gnocca",
-  "gocciola",
-  "godere",
-  "gomito",
-  "gomma",
-  "gonfiare",
-  "gorilla",
-  "governo",
-  "gradire",
-  "graffiti",
-  "granchio",
-  "grappolo",
-  "grasso",
-  "grattare",
-  "gridare",
-  "grissino",
-  "grondaia",
-  "grugnito",
-  "gruppo",
-  "guadagno",
-  "guaio",
-  "guancia",
-  "guardare",
-  "gufo",
-  "guidare",
-  "guscio",
-  "gusto",
-  "icona",
-  "idea",
-  "identico",
-  "idolo",
-  "idoneo",
-  "idrante",
-  "idrogeno",
-  "igiene",
-  "ignoto",
-  "imbarco",
-  "immagine",
-  "immobile",
-  "imparare",
-  "impedire",
-  "impianto",
-  "importo",
-  "impresa",
-  "impulso",
-  "incanto",
-  "incendio",
-  "incidere",
-  "incontro",
-  "incrocia",
-  "incubo",
-  "indagare",
-  "indice",
-  "indotto",
-  "infanzia",
-  "inferno",
-  "infinito",
-  "infranto",
-  "ingerire",
-  "inglese",
-  "ingoiare",
-  "ingresso",
-  "iniziare",
-  "innesco",
-  "insalata",
-  "inserire",
-  "insicuro",
-  "insonnia",
-  "insulto",
-  "interno",
-  "introiti",
-  "invasori",
-  "inverno",
-  "invito",
-  "invocare",
-  "ipnosi",
-  "ipocrita",
-  "ipotesi",
-  "ironia",
-  "irrigare",
-  "iscritto",
-  "isola",
-  "ispirare",
-  "isterico",
-  "istinto",
-  "istruire",
-  "italiano",
-  "jazz",
-  "labbra",
-  "labrador",
-  "ladro",
-  "lago",
-  "lamento",
-  "lampone",
-  "lancetta",
-  "lanterna",
-  "lapide",
-  "larva",
-  "lasagne",
-  "lasciare",
-  "lastra",
-  "latte",
-  "laurea",
-  "lavagna",
-  "lavorare",
-  "leccare",
-  "legare",
-  "leggere",
-  "lenzuolo",
-  "leone",
-  "lepre",
-  "letargo",
-  "lettera",
-  "levare",
-  "levitare",
-  "lezione",
-  "liberare",
-  "libidine",
-  "libro",
-  "licenza",
-  "lievito",
-  "limite",
-  "lince",
-  "lingua",
-  "liquore",
-  "lire",
-  "listino",
-  "litigare",
-  "litro",
-  "locale",
-  "lottare",
-  "lucciola",
-  "lucidare",
-  "luglio",
-  "luna",
-  "macchina",
-  "madama",
-  "madre",
-  "maestro",
-  "maggio",
-  "magico",
-  "maglione",
-  "magnolia",
-  "mago",
-  "maialino",
-  "maionese",
-  "malattia",
-  "male",
-  "malloppo",
-  "mancare",
-  "mandorla",
-  "mangiare",
-  "manico",
-  "manopola",
-  "mansarda",
-  "mantello",
-  "manubrio",
-  "manzo",
-  "mappa",
-  "mare",
-  "margine",
-  "marinaio",
-  "marmotta",
-  "marocco",
-  "martello",
-  "marzo",
-  "maschera",
-  "matrice",
-  "maturare",
-  "mazzetta",
-  "meandri",
-  "medaglia",
-  "medico",
-  "medusa",
-  "megafono",
-  "melone",
-  "membrana",
-  "menta",
-  "mercato",
-  "meritare",
-  "merluzzo",
-  "mese",
-  "mestiere",
-  "metafora",
-  "meteo",
-  "metodo",
-  "mettere",
-  "miele",
-  "miglio",
-  "miliardo",
-  "mimetica",
-  "minatore",
-  "minuto",
-  "miracolo",
-  "mirtillo",
-  "missile",
-  "mistero",
-  "misura",
-  "mito",
-  "mobile",
-  "moda",
-  "moderare",
-  "moglie",
-  "molecola",
-  "molle",
-  "momento",
-  "moneta",
-  "mongolia",
-  "monologo",
-  "montagna",
-  "morale",
-  "morbillo",
-  "mordere",
-  "mosaico",
-  "mosca",
-  "mostro",
-  "motivare",
-  "moto",
-  "mulino",
-  "mulo",
-  "muovere",
-  "muraglia",
-  "muscolo",
-  "museo",
-  "musica",
-  "mutande",
-  "nascere",
-  "nastro",
-  "natale",
-  "natura",
-  "nave",
-  "navigare",
-  "negare",
-  "negozio",
-  "nemico",
-  "nero",
-  "nervo",
-  "nessuno",
-  "nettare",
-  "neutroni",
-  "neve",
-  "nevicare",
-  "nicotina",
-  "nido",
-  "nipote",
-  "nocciola",
-  "noleggio",
-  "nome",
-  "nonno",
-  "norvegia",
-  "notare",
-  "notizia",
-  "nove",
-  "nucleo",
-  "nuda",
-  "nuotare",
-  "nutrire",
-  "obbligo",
-  "occhio",
-  "occupare",
-  "oceano",
-  "odissea",
-  "odore",
-  "offerta",
-  "officina",
-  "offrire",
-  "oggetto",
-  "oggi",
-  "olfatto",
-  "olio",
-  "oliva",
-  "ombelico",
-  "ombrello",
-  "omuncolo",
-  "ondata",
-  "onore",
-  "opera",
-  "opinione",
-  "opuscolo",
-  "opzione",
-  "orario",
-  "orbita",
-  "orchidea",
-  "ordine",
-  "orecchio",
-  "orgasmo",
-  "orgoglio",
-  "origine",
-  "orologio",
-  "oroscopo",
-  "orso",
-  "oscurare",
-  "ospedale",
-  "ospite",
-  "ossigeno",
-  "ostacolo",
-  "ostriche",
-  "ottenere",
-  "ottimo",
-  "ottobre",
-  "ovest",
-  "pacco",
-  "pace",
-  "pacifico",
-  "padella",
-  "pagare",
-  "pagina",
-  "pagnotta",
-  "palazzo",
-  "palestra",
-  "palpebre",
-  "pancetta",
-  "panfilo",
-  "panino",
-  "pannello",
-  "panorama",
-  "papa",
-  "paperino",
-  "paradiso",
-  "parcella",
-  "parente",
-  "parlare",
-  "parodia",
-  "parrucca",
-  "partire",
-  "passare",
-  "pasta",
-  "patata",
-  "patente",
-  "patogeno",
-  "patriota",
-  "pausa",
-  "pazienza",
-  "peccare",
-  "pecora",
-  "pedalare",
-  "pelare",
-  "pena",
-  "pendenza",
-  "penisola",
-  "pennello",
-  "pensare",
-  "pentirsi",
-  "percorso",
-  "perdono",
-  "perfetto",
-  "perizoma",
-  "perla",
-  "permesso",
-  "persona",
-  "pesare",
-  "pesce",
-  "peso",
-  "petardo",
-  "petrolio",
-  "pezzo",
-  "piacere",
-  "pianeta",
-  "piastra",
-  "piatto",
-  "piazza",
-  "piccolo",
-  "piede",
-  "piegare",
-  "pietra",
-  "pigiama",
-  "pigliare",
-  "pigrizia",
-  "pilastro",
-  "pilota",
-  "pinguino",
-  "pioggia",
-  "piombo",
-  "pionieri",
-  "piovra",
-  "pipa",
-  "pirata",
-  "pirolisi",
-  "piscina",
-  "pisolino",
-  "pista",
-  "pitone",
-  "piumino",
-  "pizza",
-  "plastica",
-  "platino",
-  "poesia",
-  "poiana",
-  "polaroid",
-  "polenta",
-  "polimero",
-  "pollo",
-  "polmone",
-  "polpetta",
-  "poltrona",
-  "pomodoro",
-  "pompa",
-  "popolo",
-  "porco",
-  "porta",
-  "porzione",
-  "possesso",
-  "postino",
-  "potassio",
-  "potere",
-  "poverino",
-  "pranzo",
-  "prato",
-  "prefisso",
-  "prelievo",
-  "premio",
-  "prendere",
-  "prestare",
-  "pretesa",
-  "prezzo",
-  "primario",
-  "privacy",
-  "problema",
-  "processo",
-  "prodotto",
-  "profeta",
-  "progetto",
-  "promessa",
-  "pronto",
-  "proposta",
-  "proroga",
-  "prossimo",
-  "proteina",
-  "prova",
-  "prudenza",
-  "pubblico",
-  "pudore",
-  "pugilato",
-  "pulire",
-  "pulsante",
-  "puntare",
-  "pupazzo",
-  "puzzle",
-  "quaderno",
-  "qualcuno",
-  "quarzo",
-  "quercia",
-  "quintale",
-  "rabbia",
-  "racconto",
-  "radice",
-  "raffica",
-  "ragazza",
-  "ragione",
-  "rammento",
-  "ramo",
-  "rana",
-  "randagio",
-  "rapace",
-  "rapinare",
-  "rapporto",
-  "rasatura",
-  "ravioli",
-  "reagire",
-  "realista",
-  "reattore",
-  "reazione",
-  "recitare",
-  "recluso",
-  "record",
-  "recupero",
-  "redigere",
-  "regalare",
-  "regina",
-  "regola",
-  "relatore",
-  "reliquia",
-  "remare",
-  "rendere",
-  "reparto",
-  "resina",
-  "resto",
-  "rete",
-  "retorica",
-  "rettile",
-  "revocare",
-  "riaprire",
-  "ribadire",
-  "ribelle",
-  "ricambio",
-  "ricetta",
-  "richiamo",
-  "ricordo",
-  "ridurre",
-  "riempire",
-  "riferire",
-  "riflesso",
-  "righello",
-  "rilancio",
-  "rilevare",
-  "rilievo",
-  "rimanere",
-  "rimborso",
-  "rinforzo",
-  "rinuncia",
-  "riparo",
-  "ripetere",
-  "riposare",
-  "ripulire",
-  "risalita",
-  "riscatto",
-  "riserva",
-  "riso",
-  "rispetto",
-  "ritaglio",
-  "ritmo",
-  "ritorno",
-  "ritratto",
-  "rituale",
-  "riunione",
-  "riuscire",
-  "riva",
-  "robotica",
-  "rondine",
-  "rosa",
-  "rospo",
-  "rosso",
-  "rotonda",
-  "rotta",
-  "roulotte",
-  "rubare",
-  "rubrica",
-  "ruffiano",
-  "rumore",
-  "ruota",
-  "ruscello",
-  "sabbia",
-  "sacco",
-  "saggio",
-  "sale",
-  "salire",
-  "salmone",
-  "salto",
-  "salutare",
-  "salvia",
-  "sangue",
-  "sanzioni",
-  "sapere",
-  "sapienza",
-  "sarcasmo",
-  "sardine",
-  "sartoria",
-  "sbalzo",
-  "sbarcare",
-  "sberla",
-  "sborsare",
-  "scadenza",
-  "scafo",
-  "scala",
-  "scambio",
-  "scappare",
-  "scarpa",
-  "scatola",
-  "scelta",
-  "scena",
-  "sceriffo",
-  "scheggia",
-  "schiuma",
-  "sciarpa",
-  "scienza",
-  "scimmia",
-  "sciopero",
-  "scivolo",
-  "sclerare",
-  "scolpire",
-  "sconto",
-  "scopa",
-  "scordare",
-  "scossa",
-  "scrivere",
-  "scrupolo",
-  "scuderia",
-  "scultore",
-  "scuola",
-  "scusare",
-  "sdraiare",
-  "secolo",
-  "sedativo",
-  "sedere",
-  "sedia",
-  "segare",
-  "segreto",
-  "seguire",
-  "semaforo",
-  "seme",
-  "senape",
-  "seno",
-  "sentiero",
-  "separare",
-  "sepolcro",
-  "sequenza",
-  "serata",
-  "serpente",
-  "servizio",
-  "sesso",
-  "seta",
-  "settore",
-  "sfamare",
-  "sfera",
-  "sfidare",
-  "sfiorare",
-  "sfogare",
-  "sgabello",
-  "sicuro",
-  "siepe",
-  "sigaro",
-  "silenzio",
-  "silicone",
-  "simbiosi",
-  "simpatia",
-  "simulare",
-  "sinapsi",
-  "sindrome",
-  "sinergia",
-  "sinonimo",
-  "sintonia",
-  "sirena",
-  "siringa",
-  "sistema",
-  "sito",
-  "smalto",
-  "smentire",
-  "smontare",
-  "soccorso",
-  "socio",
-  "soffitto",
-  "software",
-  "soggetto",
-  "sogliola",
-  "sognare",
-  "soldi",
-  "sole",
-  "sollievo",
-  "solo",
-  "sommario",
-  "sondare",
-  "sonno",
-  "sorpresa",
-  "sorriso",
-  "sospiro",
-  "sostegno",
-  "sovrano",
-  "spaccare",
-  "spada",
-  "spagnolo",
-  "spalla",
-  "sparire",
-  "spavento",
-  "spazio",
-  "specchio",
-  "spedire",
-  "spegnere",
-  "spendere",
-  "speranza",
-  "spessore",
-  "spezzare",
-  "spiaggia",
-  "spiccare",
-  "spiegare",
-  "spiffero",
-  "spingere",
-  "sponda",
-  "sporcare",
-  "spostare",
-  "spremuta",
-  "spugna",
-  "spumante",
-  "spuntare",
-  "squadra",
-  "squillo",
-  "staccare",
-  "stadio",
-  "stagione",
-  "stallone",
-  "stampa",
-  "stancare",
-  "starnuto",
-  "statura",
-  "stella",
-  "stendere",
-  "sterzo",
-  "stilista",
-  "stimolo",
-  "stinco",
-  "stiva",
-  "stoffa",
-  "storia",
-  "strada",
-  "stregone",
-  "striscia",
-  "studiare",
-  "stufa",
-  "stupendo",
-  "subire",
-  "successo",
-  "sudare",
-  "suono",
-  "superare",
-  "supporto",
-  "surfista",
-  "sussurro",
-  "svelto",
-  "svenire",
-  "sviluppo",
-  "svolta",
-  "svuotare",
-  "tabacco",
-  "tabella",
-  "tabu",
-  "tacchino",
-  "tacere",
-  "taglio",
-  "talento",
-  "tangente",
-  "tappeto",
-  "tartufo",
-  "tassello",
-  "tastiera",
-  "tavolo",
-  "tazza",
-  "teatro",
-  "tedesco",
-  "telaio",
-  "telefono",
-  "tema",
-  "temere",
-  "tempo",
-  "tendenza",
-  "tenebre",
-  "tensione",
-  "tentare",
-  "teologia",
-  "teorema",
-  "termica",
-  "terrazzo",
-  "teschio",
-  "tesi",
-  "tesoro",
-  "tessera",
-  "testa",
-  "thriller",
-  "tifoso",
-  "tigre",
-  "timbrare",
-  "timido",
-  "tinta",
-  "tirare",
-  "tisana",
-  "titano",
-  "titolo",
-  "toccare",
-  "togliere",
-  "topolino",
-  "torcia",
-  "torrente",
-  "tovaglia",
-  "traffico",
-  "tragitto",
-  "training",
-  "tramonto",
-  "transito",
-  "trapezio",
-  "trasloco",
-  "trattore",
-  "trazione",
-  "treccia",
-  "tregua",
-  "treno",
-  "triciclo",
-  "tridente",
-  "trilogia",
-  "tromba",
-  "troncare",
-  "trota",
-  "trovare",
-  "trucco",
-  "tubo",
-  "tulipano",
-  "tumulto",
-  "tunisia",
-  "tuono",
-  "turista",
-  "tuta",
-  "tutelare",
-  "tutore",
-  "ubriaco",
-  "uccello",
-  "udienza",
-  "udito",
-  "uffa",
-  "umanoide",
-  "umore",
-  "unghia",
-  "unguento",
-  "unicorno",
-  "unione",
-  "universo",
-  "uomo",
-  "uragano",
-  "uranio",
-  "urlare",
-  "uscire",
-  "utente",
-  "utilizzo",
-  "vacanza",
-  "vacca",
-  "vaglio",
-  "vagonata",
-  "valle",
-  "valore",
-  "valutare",
-  "valvola",
-  "vampiro",
-  "vaniglia",
-  "vanto",
-  "vapore",
-  "variante",
-  "vasca",
-  "vaselina",
-  "vassoio",
-  "vedere",
-  "vegetale",
-  "veglia",
-  "veicolo",
-  "vela",
-  "veleno",
-  "velivolo",
-  "velluto",
-  "vendere",
-  "venerare",
-  "venire",
-  "vento",
-  "veranda",
-  "verbo",
-  "verdura",
-  "vergine",
-  "verifica",
-  "vernice",
-  "vero",
-  "verruca",
-  "versare",
-  "vertebra",
-  "vescica",
-  "vespaio",
-  "vestito",
-  "vesuvio",
-  "veterano",
-  "vetro",
-  "vetta",
-  "viadotto",
-  "viaggio",
-  "vibrare",
-  "vicenda",
-  "vichingo",
-  "vietare",
-  "vigilare",
-  "vigneto",
-  "villa",
-  "vincere",
-  "violino",
-  "vipera",
-  "virgola",
-  "virtuoso",
-  "visita",
-  "vita",
-  "vitello",
-  "vittima",
-  "vivavoce",
-  "vivere",
-  "viziato",
-  "voglia",
-  "volare",
-  "volpe",
-  "volto",
-  "volume",
-  "vongole",
-  "voragine",
-  "vortice",
-  "votare",
-  "vulcano",
-  "vuotare",
-  "zabaione",
-  "zaffiro",
-  "zainetto",
-  "zampa",
-  "zanzara",
-  "zattera",
-  "zavorra",
-  "zenzero",
-  "zero",
-  "zingaro",
-  "zittire",
-  "zoccolo",
-  "zolfo",
-  "zombie",
-  "zucchero"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/ja.rs b/networks/monero/wallet/seed/src/words/ja.rs
deleted file mode 100644
index da2d9fb6..00000000
--- a/networks/monero/wallet/seed/src/words/ja.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "あいこくしん",
-  "あいさつ",
-  "あいだ",
-  "あおぞら",
-  "あかちゃん",
-  "あきる",
-  "あけがた",
-  "あける",
-  "あこがれる",
-  "あさい",
-  "あさひ",
-  "あしあと",
-  "あじわう",
-  "あずかる",
-  "あずき",
-  "あそぶ",
-  "あたえる",
-  "あたためる",
-  "あたりまえ",
-  "あたる",
-  "あつい",
-  "あつかう",
-  "あっしゅく",
-  "あつまり",
-  "あつめる",
-  "あてな",
-  "あてはまる",
-  "あひる",
-  "あぶら",
-  "あぶる",
-  "あふれる",
-  "あまい",
-  "あまど",
-  "あまやかす",
-  "あまり",
-  "あみもの",
-  "あめりか",
-  "あやまる",
-  "あゆむ",
-  "あらいぐま",
-  "あらし",
-  "あらすじ",
-  "あらためる",
-  "あらゆる",
-  "あらわす",
-  "ありがとう",
-  "あわせる",
-  "あわてる",
-  "あんい",
-  "あんがい",
-  "あんこ",
-  "あんぜん",
-  "あんてい",
-  "あんない",
-  "あんまり",
-  "いいだす",
-  "いおん",
-  "いがい",
-  "いがく",
-  "いきおい",
-  "いきなり",
-  "いきもの",
-  "いきる",
-  "いくじ",
-  "いくぶん",
-  "いけばな",
-  "いけん",
-  "いこう",
-  "いこく",
-  "いこつ",
-  "いさましい",
-  "いさん",
-  "いしき",
-  "いじゅう",
-  "いじょう",
-  "いじわる",
-  "いずみ",
-  "いずれ",
-  "いせい",
-  "いせえび",
-  "いせかい",
-  "いせき",
-  "いぜん",
-  "いそうろう",
-  "いそがしい",
-  "いだい",
-  "いだく",
-  "いたずら",
-  "いたみ",
-  "いたりあ",
-  "いちおう",
-  "いちじ",
-  "いちど",
-  "いちば",
-  "いちぶ",
-  "いちりゅう",
-  "いつか",
-  "いっしゅん",
-  "いっせい",
-  "いっそう",
-  "いったん",
-  "いっち",
-  "いってい",
-  "いっぽう",
-  "いてざ",
-  "いてん",
-  "いどう",
-  "いとこ",
-  "いない",
-  "いなか",
-  "いねむり",
-  "いのち",
-  "いのる",
-  "いはつ",
-  "いばる",
-  "いはん",
-  "いびき",
-  "いひん",
-  "いふく",
-  "いへん",
-  "いほう",
-  "いみん",
-  "いもうと",
-  "いもたれ",
-  "いもり",
-  "いやがる",
-  "いやす",
-  "いよかん",
-  "いよく",
-  "いらい",
-  "いらすと",
-  "いりぐち",
-  "いりょう",
-  "いれい",
-  "いれもの",
-  "いれる",
-  "いろえんぴつ",
-  "いわい",
-  "いわう",
-  "いわかん",
-  "いわば",
-  "いわゆる",
-  "いんげんまめ",
-  "いんさつ",
-  "いんしょう",
-  "いんよう",
-  "うえき",
-  "うえる",
-  "うおざ",
-  "うがい",
-  "うかぶ",
-  "うかべる",
-  "うきわ",
-  "うくらいな",
-  "うくれれ",
-  "うけたまわる",
-  "うけつけ",
-  "うけとる",
-  "うけもつ",
-  "うける",
-  "うごかす",
-  "うごく",
-  "うこん",
-  "うさぎ",
-  "うしなう",
-  "うしろがみ",
-  "うすい",
-  "うすぎ",
-  "うすぐらい",
-  "うすめる",
-  "うせつ",
-  "うちあわせ",
-  "うちがわ",
-  "うちき",
-  "うちゅう",
-  "うっかり",
-  "うつくしい",
-  "うったえる",
-  "うつる",
-  "うどん",
-  "うなぎ",
-  "うなじ",
-  "うなずく",
-  "うなる",
-  "うねる",
-  "うのう",
-  "うぶげ",
-  "うぶごえ",
-  "うまれる",
-  "うめる",
-  "うもう",
-  "うやまう",
-  "うよく",
-  "うらがえす",
-  "うらぐち",
-  "うらない",
-  "うりあげ",
-  "うりきれ",
-  "うるさい",
-  "うれしい",
-  "うれゆき",
-  "うれる",
-  "うろこ",
-  "うわき",
-  "うわさ",
-  "うんこう",
-  "うんちん",
-  "うんてん",
-  "うんどう",
-  "えいえん",
-  "えいが",
-  "えいきょう",
-  "えいご",
-  "えいせい",
-  "えいぶん",
-  "えいよう",
-  "えいわ",
-  "えおり",
-  "えがお",
-  "えがく",
-  "えきたい",
-  "えくせる",
-  "えしゃく",
-  "えすて",
-  "えつらん",
-  "えのぐ",
-  "えほうまき",
-  "えほん",
-  "えまき",
-  "えもじ",
-  "えもの",
-  "えらい",
-  "えらぶ",
-  "えりあ",
-  "えんえん",
-  "えんかい",
-  "えんぎ",
-  "えんげき",
-  "えんしゅう",
-  "えんぜつ",
-  "えんそく",
-  "えんちょう",
-  "えんとつ",
-  "おいかける",
-  "おいこす",
-  "おいしい",
-  "おいつく",
-  "おうえん",
-  "おうさま",
-  "おうじ",
-  "おうせつ",
-  "おうたい",
-  "おうふく",
-  "おうべい",
-  "おうよう",
-  "おえる",
-  "おおい",
-  "おおう",
-  "おおどおり",
-  "おおや",
-  "おおよそ",
-  "おかえり",
-  "おかず",
-  "おがむ",
-  "おかわり",
-  "おぎなう",
-  "おきる",
-  "おくさま",
-  "おくじょう",
-  "おくりがな",
-  "おくる",
-  "おくれる",
-  "おこす",
-  "おこなう",
-  "おこる",
-  "おさえる",
-  "おさない",
-  "おさめる",
-  "おしいれ",
-  "おしえる",
-  "おじぎ",
-  "おじさん",
-  "おしゃれ",
-  "おそらく",
-  "おそわる",
-  "おたがい",
-  "おたく",
-  "おだやか",
-  "おちつく",
-  "おっと",
-  "おつり",
-  "おでかけ",
-  "おとしもの",
-  "おとなしい",
-  "おどり",
-  "おどろかす",
-  "おばさん",
-  "おまいり",
-  "おめでとう",
-  "おもいで",
-  "おもう",
-  "おもたい",
-  "おもちゃ",
-  "おやつ",
-  "おやゆび",
-  "およぼす",
-  "おらんだ",
-  "おろす",
-  "おんがく",
-  "おんけい",
-  "おんしゃ",
-  "おんせん",
-  "おんだん",
-  "おんちゅう",
-  "おんどけい",
-  "かあつ",
-  "かいが",
-  "がいき",
-  "がいけん",
-  "がいこう",
-  "かいさつ",
-  "かいしゃ",
-  "かいすいよく",
-  "かいぜん",
-  "かいぞうど",
-  "かいつう",
-  "かいてん",
-  "かいとう",
-  "かいふく",
-  "がいへき",
-  "かいほう",
-  "かいよう",
-  "がいらい",
-  "かいわ",
-  "かえる",
-  "かおり",
-  "かかえる",
-  "かがく",
-  "かがし",
-  "かがみ",
-  "かくご",
-  "かくとく",
-  "かざる",
-  "がぞう",
-  "かたい",
-  "かたち",
-  "がちょう",
-  "がっきゅう",
-  "がっこう",
-  "がっさん",
-  "がっしょう",
-  "かなざわし",
-  "かのう",
-  "がはく",
-  "かぶか",
-  "かほう",
-  "かほご",
-  "かまう",
-  "かまぼこ",
-  "かめれおん",
-  "かゆい",
-  "かようび",
-  "からい",
-  "かるい",
-  "かろう",
-  "かわく",
-  "かわら",
-  "がんか",
-  "かんけい",
-  "かんこう",
-  "かんしゃ",
-  "かんそう",
-  "かんたん",
-  "かんち",
-  "がんばる",
-  "きあい",
-  "きあつ",
-  "きいろ",
-  "ぎいん",
-  "きうい",
-  "きうん",
-  "きえる",
-  "きおう",
-  "きおく",
-  "きおち",
-  "きおん",
-  "きかい",
-  "きかく",
-  "きかんしゃ",
-  "ききて",
-  "きくばり",
-  "きくらげ",
-  "きけんせい",
-  "きこう",
-  "きこえる",
-  "きこく",
-  "きさい",
-  "きさく",
-  "きさま",
-  "きさらぎ",
-  "ぎじかがく",
-  "ぎしき",
-  "ぎじたいけん",
-  "ぎじにってい",
-  "ぎじゅつしゃ",
-  "きすう",
-  "きせい",
-  "きせき",
-  "きせつ",
-  "きそう",
-  "きぞく",
-  "きぞん",
-  "きたえる",
-  "きちょう",
-  "きつえん",
-  "ぎっちり",
-  "きつつき",
-  "きつね",
-  "きてい",
-  "きどう",
-  "きどく",
-  "きない",
-  "きなが",
-  "きなこ",
-  "きぬごし",
-  "きねん",
-  "きのう",
-  "きのした",
-  "きはく",
-  "きびしい",
-  "きひん",
-  "きふく",
-  "きぶん",
-  "きぼう",
-  "きほん",
-  "きまる",
-  "きみつ",
-  "きむずかしい",
-  "きめる",
-  "きもだめし",
-  "きもち",
-  "きもの",
-  "きゃく",
-  "きやく",
-  "ぎゅうにく",
-  "きよう",
-  "きょうりゅう",
-  "きらい",
-  "きらく",
-  "きりん",
-  "きれい",
-  "きれつ",
-  "きろく",
-  "ぎろん",
-  "きわめる",
-  "ぎんいろ",
-  "きんかくじ",
-  "きんじょ",
-  "きんようび",
-  "ぐあい",
-  "くいず",
-  "くうかん",
-  "くうき",
-  "くうぐん",
-  "くうこう",
-  "ぐうせい",
-  "くうそう",
-  "ぐうたら",
-  "くうふく",
-  "くうぼ",
-  "くかん",
-  "くきょう",
-  "くげん",
-  "ぐこう",
-  "くさい",
-  "くさき",
-  "くさばな",
-  "くさる",
-  "くしゃみ",
-  "くしょう",
-  "くすのき",
-  "くすりゆび",
-  "くせげ",
-  "くせん",
-  "ぐたいてき",
-  "くださる",
-  "くたびれる",
-  "くちこみ",
-  "くちさき",
-  "くつした",
-  "ぐっすり",
-  "くつろぐ",
-  "くとうてん",
-  "くどく",
-  "くなん",
-  "くねくね",
-  "くのう",
-  "くふう",
-  "くみあわせ",
-  "くみたてる",
-  "くめる",
-  "くやくしょ",
-  "くらす",
-  "くらべる",
-  "くるま",
-  "くれる",
-  "くろう",
-  "くわしい",
-  "ぐんかん",
-  "ぐんしょく",
-  "ぐんたい",
-  "ぐんて",
-  "けあな",
-  "けいかく",
-  "けいけん",
-  "けいこ",
-  "けいさつ",
-  "げいじゅつ",
-  "けいたい",
-  "げいのうじん",
-  "けいれき",
-  "けいろ",
-  "けおとす",
-  "けおりもの",
-  "げきか",
-  "げきげん",
-  "げきだん",
-  "げきちん",
-  "げきとつ",
-  "げきは",
-  "げきやく",
-  "げこう",
-  "げこくじょう",
-  "げざい",
-  "けさき",
-  "げざん",
-  "けしき",
-  "けしごむ",
-  "けしょう",
-  "げすと",
-  "けたば",
-  "けちゃっぷ",
-  "けちらす",
-  "けつあつ",
-  "けつい",
-  "けつえき",
-  "けっこん",
-  "けつじょ",
-  "けっせき",
-  "けってい",
-  "けつまつ",
-  "げつようび",
-  "げつれい",
-  "けつろん",
-  "げどく",
-  "けとばす",
-  "けとる",
-  "けなげ",
-  "けなす",
-  "けなみ",
-  "けぬき",
-  "げねつ",
-  "けねん",
-  "けはい",
-  "げひん",
-  "けぶかい",
-  "げぼく",
-  "けまり",
-  "けみかる",
-  "けむし",
-  "けむり",
-  "けもの",
-  "けらい",
-  "けろけろ",
-  "けわしい",
-  "けんい",
-  "けんえつ",
-  "けんお",
-  "けんか",
-  "げんき",
-  "けんげん",
-  "けんこう",
-  "けんさく",
-  "けんしゅう",
-  "けんすう",
-  "げんそう",
-  "けんちく",
-  "けんてい",
-  "けんとう",
-  "けんない",
-  "けんにん",
-  "げんぶつ",
-  "けんま",
-  "けんみん",
-  "けんめい",
-  "けんらん",
-  "けんり",
-  "こあくま",
-  "こいぬ",
-  "こいびと",
-  "ごうい",
-  "こうえん",
-  "こうおん",
-  "こうかん",
-  "ごうきゅう",
-  "ごうけい",
-  "こうこう",
-  "こうさい",
-  "こうじ",
-  "こうすい",
-  "ごうせい",
-  "こうそく",
-  "こうたい",
-  "こうちゃ",
-  "こうつう",
-  "こうてい",
-  "こうどう",
-  "こうない",
-  "こうはい",
-  "ごうほう",
-  "ごうまん",
-  "こうもく",
-  "こうりつ",
-  "こえる",
-  "こおり",
-  "ごかい",
-  "ごがつ",
-  "ごかん",
-  "こくご",
-  "こくさい",
-  "こくとう",
-  "こくない",
-  "こくはく",
-  "こぐま",
-  "こけい",
-  "こける",
-  "ここのか",
-  "こころ",
-  "こさめ",
-  "こしつ",
-  "こすう",
-  "こせい",
-  "こせき",
-  "こぜん",
-  "こそだて",
-  "こたい",
-  "こたえる",
-  "こたつ",
-  "こちょう",
-  "こっか",
-  "こつこつ",
-  "こつばん",
-  "こつぶ",
-  "こてい",
-  "こてん",
-  "ことがら",
-  "ことし",
-  "ことば",
-  "ことり",
-  "こなごな",
-  "こねこね",
-  "このまま",
-  "このみ",
-  "このよ",
-  "ごはん",
-  "こひつじ",
-  "こふう",
-  "こふん",
-  "こぼれる",
-  "ごまあぶら",
-  "こまかい",
-  "ごますり",
-  "こまつな",
-  "こまる",
-  "こむぎこ",
-  "こもじ",
-  "こもち",
-  "こもの",
-  "こもん",
-  "こやく",
-  "こやま",
-  "こゆう",
-  "こゆび",
-  "こよい",
-  "こよう",
-  "こりる",
-  "これくしょん",
-  "ころっけ",
-  "こわもて",
-  "こわれる",
-  "こんいん",
-  "こんかい",
-  "こんき",
-  "こんしゅう",
-  "こんすい",
-  "こんだて",
-  "こんとん",
-  "こんなん",
-  "こんびに",
-  "こんぽん",
-  "こんまけ",
-  "こんや",
-  "こんれい",
-  "こんわく",
-  "ざいえき",
-  "さいかい",
-  "さいきん",
-  "ざいげん",
-  "ざいこ",
-  "さいしょ",
-  "さいせい",
-  "ざいたく",
-  "ざいちゅう",
-  "さいてき",
-  "ざいりょう",
-  "さうな",
-  "さかいし",
-  "さがす",
-  "さかな",
-  "さかみち",
-  "さがる",
-  "さぎょう",
-  "さくし",
-  "さくひん",
-  "さくら",
-  "さこく",
-  "さこつ",
-  "さずかる",
-  "ざせき",
-  "さたん",
-  "さつえい",
-  "ざつおん",
-  "ざっか",
-  "ざつがく",
-  "さっきょく",
-  "ざっし",
-  "さつじん",
-  "ざっそう",
-  "さつたば",
-  "さつまいも",
-  "さてい",
-  "さといも",
-  "さとう",
-  "さとおや",
-  "さとし",
-  "さとる",
-  "さのう",
-  "さばく",
-  "さびしい",
-  "さべつ",
-  "さほう",
-  "さほど",
-  "さます",
-  "さみしい",
-  "さみだれ",
-  "さむけ",
-  "さめる",
-  "さやえんどう",
-  "さゆう",
-  "さよう",
-  "さよく",
-  "さらだ",
-  "ざるそば",
-  "さわやか",
-  "さわる",
-  "さんいん",
-  "さんか",
-  "さんきゃく",
-  "さんこう",
-  "さんさい",
-  "ざんしょ",
-  "さんすう",
-  "さんせい",
-  "さんそ",
-  "さんち",
-  "さんま",
-  "さんみ",
-  "さんらん",
-  "しあい",
-  "しあげ",
-  "しあさって",
-  "しあわせ",
-  "しいく",
-  "しいん",
-  "しうち",
-  "しえい",
-  "しおけ",
-  "しかい",
-  "しかく",
-  "じかん",
-  "しごと",
-  "しすう",
-  "じだい",
-  "したうけ",
-  "したぎ",
-  "したて",
-  "したみ",
-  "しちょう",
-  "しちりん",
-  "しっかり",
-  "しつじ",
-  "しつもん",
-  "してい",
-  "してき",
-  "してつ",
-  "じてん",
-  "じどう",
-  "しなぎれ",
-  "しなもの",
-  "しなん",
-  "しねま",
-  "しねん",
-  "しのぐ",
-  "しのぶ",
-  "しはい",
-  "しばかり",
-  "しはつ",
-  "しはらい",
-  "しはん",
-  "しひょう",
-  "しふく",
-  "じぶん",
-  "しへい",
-  "しほう",
-  "しほん",
-  "しまう",
-  "しまる",
-  "しみん",
-  "しむける",
-  "じむしょ",
-  "しめい",
-  "しめる",
-  "しもん",
-  "しゃいん",
-  "しゃうん",
-  "しゃおん",
-  "じゃがいも",
-  "しやくしょ",
-  "しゃくほう",
-  "しゃけん",
-  "しゃこ",
-  "しゃざい",
-  "しゃしん",
-  "しゃせん",
-  "しゃそう",
-  "しゃたい",
-  "しゃちょう",
-  "しゃっきん",
-  "じゃま",
-  "しゃりん",
-  "しゃれい",
-  "じゆう",
-  "じゅうしょ",
-  "しゅくはく",
-  "じゅしん",
-  "しゅっせき",
-  "しゅみ",
-  "しゅらば",
-  "じゅんばん",
-  "しょうかい",
-  "しょくたく",
-  "しょっけん",
-  "しょどう",
-  "しょもつ",
-  "しらせる",
-  "しらべる",
-  "しんか",
-  "しんこう",
-  "じんじゃ",
-  "しんせいじ",
-  "しんちく",
-  "しんりん",
-  "すあげ",
-  "すあし",
-  "すあな",
-  "ずあん",
-  "すいえい",
-  "すいか",
-  "すいとう",
-  "ずいぶん",
-  "すいようび",
-  "すうがく",
-  "すうじつ",
-  "すうせん",
-  "すおどり",
-  "すきま",
-  "すくう",
-  "すくない",
-  "すける",
-  "すごい",
-  "すこし",
-  "ずさん",
-  "すずしい",
-  "すすむ",
-  "すすめる",
-  "すっかり",
-  "ずっしり",
-  "ずっと",
-  "すてき",
-  "すてる",
-  "すねる",
-  "すのこ",
-  "すはだ",
-  "すばらしい",
-  "ずひょう",
-  "ずぶぬれ",
-  "すぶり",
-  "すふれ",
-  "すべて",
-  "すべる",
-  "ずほう",
-  "すぼん",
-  "すまい",
-  "すめし",
-  "すもう",
-  "すやき",
-  "すらすら",
-  "するめ",
-  "すれちがう",
-  "すろっと",
-  "すわる",
-  "すんぜん",
-  "すんぽう",
-  "せあぶら",
-  "せいかつ",
-  "せいげん",
-  "せいじ",
-  "せいよう",
-  "せおう",
-  "せかいかん",
-  "せきにん",
-  "せきむ",
-  "せきゆ",
-  "せきらんうん",
-  "せけん",
-  "せこう",
-  "せすじ",
-  "せたい",
-  "せたけ",
-  "せっかく",
-  "せっきゃく",
-  "ぜっく",
-  "せっけん",
-  "せっこつ",
-  "せっさたくま",
-  "せつぞく",
-  "せつだん",
-  "せつでん",
-  "せっぱん",
-  "せつび",
-  "せつぶん",
-  "せつめい",
-  "せつりつ",
-  "せなか",
-  "せのび",
-  "せはば",
-  "せびろ",
-  "せぼね",
-  "せまい",
-  "せまる",
-  "せめる",
-  "せもたれ",
-  "せりふ",
-  "ぜんあく",
-  "せんい",
-  "せんえい",
-  "せんか",
-  "せんきょ",
-  "せんく",
-  "せんげん",
-  "ぜんご",
-  "せんさい",
-  "せんしゅ",
-  "せんすい",
-  "せんせい",
-  "せんぞ",
-  "せんたく",
-  "せんちょう",
-  "せんてい",
-  "せんとう",
-  "せんぬき",
-  "せんねん",
-  "せんぱい",
-  "ぜんぶ",
-  "ぜんぽう",
-  "せんむ",
-  "せんめんじょ",
-  "せんもん",
-  "せんやく",
-  "せんゆう",
-  "せんよう",
-  "ぜんら",
-  "ぜんりゃく",
-  "せんれい",
-  "せんろ",
-  "そあく",
-  "そいとげる",
-  "そいね",
-  "そうがんきょう",
-  "そうき",
-  "そうご",
-  "そうしん",
-  "そうだん",
-  "そうなん",
-  "そうび",
-  "そうめん",
-  "そうり",
-  "そえもの",
-  "そえん",
-  "そがい",
-  "そげき",
-  "そこう",
-  "そこそこ",
-  "そざい",
-  "そしな",
-  "そせい",
-  "そせん",
-  "そそぐ",
-  "そだてる",
-  "そつう",
-  "そつえん",
-  "そっかん",
-  "そつぎょう",
-  "そっけつ",
-  "そっこう",
-  "そっせん",
-  "そっと",
-  "そとがわ",
-  "そとづら",
-  "そなえる",
-  "そなた",
-  "そふぼ",
-  "そぼく",
-  "そぼろ",
-  "そまつ",
-  "そまる",
-  "そむく",
-  "そむりえ",
-  "そめる",
-  "そもそも",
-  "そよかぜ",
-  "そらまめ",
-  "そろう",
-  "そんかい",
-  "そんけい",
-  "そんざい",
-  "そんしつ",
-  "そんぞく",
-  "そんちょう",
-  "ぞんび",
-  "ぞんぶん",
-  "そんみん",
-  "たあい",
-  "たいいん",
-  "たいうん",
-  "たいえき",
-  "たいおう",
-  "だいがく",
-  "たいき",
-  "たいぐう",
-  "たいけん",
-  "たいこ",
-  "たいざい",
-  "だいじょうぶ",
-  "だいすき",
-  "たいせつ",
-  "たいそう",
-  "だいたい",
-  "たいちょう",
-  "たいてい",
-  "だいどころ",
-  "たいない",
-  "たいねつ",
-  "たいのう",
-  "たいはん",
-  "だいひょう",
-  "たいふう",
-  "たいへん",
-  "たいほ",
-  "たいまつばな",
-  "たいみんぐ",
-  "たいむ",
-  "たいめん",
-  "たいやき",
-  "たいよう",
-  "たいら",
-  "たいりょく",
-  "たいる",
-  "たいわん",
-  "たうえ",
-  "たえる",
-  "たおす",
-  "たおる",
-  "たおれる",
-  "たかい",
-  "たかね",
-  "たきび",
-  "たくさん",
-  "たこく",
-  "たこやき",
-  "たさい",
-  "たしざん",
-  "だじゃれ",
-  "たすける",
-  "たずさわる",
-  "たそがれ",
-  "たたかう",
-  "たたく",
-  "ただしい",
-  "たたみ",
-  "たちばな",
-  "だっかい",
-  "だっきゃく",
-  "だっこ",
-  "だっしゅつ",
-  "だったい",
-  "たてる",
-  "たとえる",
-  "たなばた",
-  "たにん",
-  "たぬき",
-  "たのしみ",
-  "たはつ",
-  "たぶん",
-  "たべる",
-  "たぼう",
-  "たまご",
-  "たまる",
-  "だむる",
-  "ためいき",
-  "ためす",
-  "ためる",
-  "たもつ",
-  "たやすい",
-  "たよる",
-  "たらす",
-  "たりきほんがん",
-  "たりょう",
-  "たりる",
-  "たると",
-  "たれる",
-  "たれんと",
-  "たろっと",
-  "たわむれる",
-  "だんあつ",
-  "たんい",
-  "たんおん",
-  "たんか",
-  "たんき",
-  "たんけん",
-  "たんご",
-  "たんさん",
-  "たんじょうび",
-  "だんせい",
-  "たんそく",
-  "たんたい",
-  "だんち",
-  "たんてい",
-  "たんとう",
-  "だんな",
-  "たんにん",
-  "だんねつ",
-  "たんのう",
-  "たんぴん",
-  "だんぼう",
-  "たんまつ",
-  "たんめい",
-  "だんれつ",
-  "だんろ",
-  "だんわ",
-  "ちあい",
-  "ちあん",
-  "ちいき",
-  "ちいさい",
-  "ちえん",
-  "ちかい",
-  "ちから",
-  "ちきゅう",
-  "ちきん",
-  "ちけいず",
-  "ちけん",
-  "ちこく",
-  "ちさい",
-  "ちしき",
-  "ちしりょう",
-  "ちせい",
-  "ちそう",
-  "ちたい",
-  "ちたん",
-  "ちちおや",
-  "ちつじょ",
-  "ちてき",
-  "ちてん",
-  "ちぬき",
-  "ちぬり",
-  "ちのう",
-  "ちひょう",
-  "ちへいせん",
-  "ちほう",
-  "ちまた",
-  "ちみつ",
-  "ちみどろ",
-  "ちめいど",
-  "ちゃんこなべ",
-  "ちゅうい",
-  "ちゆりょく",
-  "ちょうし",
-  "ちょさくけん",
-  "ちらし",
-  "ちらみ",
-  "ちりがみ",
-  "ちりょう",
-  "ちるど",
-  "ちわわ",
-  "ちんたい",
-  "ちんもく",
-  "ついか",
-  "ついたち",
-  "つうか",
-  "つうじょう",
-  "つうはん",
-  "つうわ",
-  "つかう",
-  "つかれる",
-  "つくね",
-  "つくる",
-  "つけね",
-  "つける",
-  "つごう",
-  "つたえる",
-  "つづく",
-  "つつじ",
-  "つつむ",
-  "つとめる",
-  "つながる",
-  "つなみ",
-  "つねづね",
-  "つのる",
-  "つぶす",
-  "つまらない",
-  "つまる",
-  "つみき",
-  "つめたい",
-  "つもり",
-  "つもる",
-  "つよい",
-  "つるぼ",
-  "つるみく",
-  "つわもの",
-  "つわり",
-  "てあし",
-  "てあて",
-  "てあみ",
-  "ていおん",
-  "ていか",
-  "ていき",
-  "ていけい",
-  "ていこく",
-  "ていさつ",
-  "ていし",
-  "ていせい",
-  "ていたい",
-  "ていど",
-  "ていねい",
-  "ていひょう",
-  "ていへん",
-  "ていぼう",
-  "てうち",
-  "ておくれ",
-  "てきとう",
-  "てくび",
-  "でこぼこ",
-  "てさぎょう",
-  "てさげ",
-  "てすり",
-  "てそう",
-  "てちがい",
-  "てちょう",
-  "てつがく",
-  "てつづき",
-  "でっぱ",
-  "てつぼう",
-  "てつや",
-  "でぬかえ",
-  "てぬき",
-  "てぬぐい",
-  "てのひら",
-  "てはい",
-  "てぶくろ",
-  "てふだ",
-  "てほどき",
-  "てほん",
-  "てまえ",
-  "てまきずし",
-  "てみじか",
-  "てみやげ",
-  "てらす",
-  "てれび",
-  "てわけ",
-  "てわたし",
-  "でんあつ",
-  "てんいん",
-  "てんかい",
-  "てんき",
-  "てんぐ",
-  "てんけん",
-  "てんごく",
-  "てんさい",
-  "てんし",
-  "てんすう",
-  "でんち",
-  "てんてき",
-  "てんとう",
-  "てんない",
-  "てんぷら",
-  "てんぼうだい",
-  "てんめつ",
-  "てんらんかい",
-  "でんりょく",
-  "でんわ",
-  "どあい",
-  "といれ",
-  "どうかん",
-  "とうきゅう",
-  "どうぐ",
-  "とうし",
-  "とうむぎ",
-  "とおい",
-  "とおか",
-  "とおく",
-  "とおす",
-  "とおる",
-  "とかい",
-  "とかす",
-  "ときおり",
-  "ときどき",
-  "とくい",
-  "とくしゅう",
-  "とくてん",
-  "とくに",
-  "とくべつ",
-  "とけい",
-  "とける",
-  "とこや",
-  "とさか",
-  "としょかん",
-  "とそう",
-  "とたん",
-  "とちゅう",
-  "とっきゅう",
-  "とっくん",
-  "とつぜん",
-  "とつにゅう",
-  "とどける",
-  "ととのえる",
-  "とない",
-  "となえる",
-  "となり",
-  "とのさま",
-  "とばす",
-  "どぶがわ",
-  "とほう",
-  "とまる",
-  "とめる",
-  "ともだち",
-  "ともる",
-  "どようび",
-  "とらえる",
-  "とんかつ",
-  "どんぶり",
-  "ないかく",
-  "ないこう",
-  "ないしょ",
-  "ないす",
-  "ないせん",
-  "ないそう",
-  "なおす",
-  "ながい",
-  "なくす",
-  "なげる",
-  "なこうど",
-  "なさけ",
-  "なたでここ",
-  "なっとう",
-  "なつやすみ",
-  "ななおし",
-  "なにごと",
-  "なにもの",
-  "なにわ",
-  "なのか",
-  "なふだ",
-  "なまいき",
-  "なまえ",
-  "なまみ",
-  "なみだ",
-  "なめらか",
-  "なめる",
-  "なやむ",
-  "ならう",
-  "ならび",
-  "ならぶ",
-  "なれる",
-  "なわとび",
-  "なわばり",
-  "にあう",
-  "にいがた",
-  "にうけ",
-  "におい",
-  "にかい",
-  "にがて",
-  "にきび",
-  "にくしみ",
-  "にくまん",
-  "にげる",
-  "にさんかたんそ",
-  "にしき",
-  "にせもの",
-  "にちじょう",
-  "にちようび",
-  "にっか",
-  "にっき",
-  "にっけい",
-  "にっこう",
-  "にっさん",
-  "にっしょく",
-  "にっすう",
-  "にっせき",
-  "にってい",
-  "になう",
-  "にほん",
-  "にまめ",
-  "にもつ",
-  "にやり",
-  "にゅういん",
-  "にりんしゃ",
-  "にわとり",
-  "にんい",
-  "にんか",
-  "にんき",
-  "にんげん",
-  "にんしき",
-  "にんずう",
-  "にんそう",
-  "にんたい",
-  "にんち",
-  "にんてい",
-  "にんにく",
-  "にんぷ",
-  "にんまり",
-  "にんむ",
-  "にんめい",
-  "にんよう",
-  "ぬいくぎ",
-  "ぬかす",
-  "ぬぐいとる",
-  "ぬぐう",
-  "ぬくもり",
-  "ぬすむ",
-  "ぬまえび",
-  "ぬめり",
-  "ぬらす",
-  "ぬんちゃく",
-  "ねあげ",
-  "ねいき",
-  "ねいる",
-  "ねいろ",
-  "ねぐせ",
-  "ねくたい",
-  "ねくら",
-  "ねこぜ",
-  "ねこむ",
-  "ねさげ",
-  "ねすごす",
-  "ねそべる",
-  "ねだん",
-  "ねつい",
-  "ねっしん",
-  "ねつぞう",
-  "ねったいぎょ",
-  "ねぶそく",
-  "ねふだ",
-  "ねぼう",
-  "ねほりはほり",
-  "ねまき",
-  "ねまわし",
-  "ねみみ",
-  "ねむい",
-  "ねむたい",
-  "ねもと",
-  "ねらう",
-  "ねわざ",
-  "ねんいり",
-  "ねんおし",
-  "ねんかん",
-  "ねんきん",
-  "ねんぐ",
-  "ねんざ",
-  "ねんし",
-  "ねんちゃく",
-  "ねんど",
-  "ねんぴ",
-  "ねんぶつ",
-  "ねんまつ",
-  "ねんりょう",
-  "ねんれい",
-  "のいず",
-  "のおづま",
-  "のがす",
-  "のきなみ",
-  "のこぎり",
-  "のこす",
-  "のこる",
-  "のせる",
-  "のぞく",
-  "のぞむ",
-  "のたまう",
-  "のちほど",
-  "のっく",
-  "のばす",
-  "のはら",
-  "のべる",
-  "のぼる",
-  "のみもの",
-  "のやま",
-  "のらいぬ",
-  "のらねこ",
-  "のりもの",
-  "のりゆき",
-  "のれん",
-  "のんき",
-  "ばあい",
-  "はあく",
-  "ばあさん",
-  "ばいか",
-  "ばいく",
-  "はいけん",
-  "はいご",
-  "はいしん",
-  "はいすい",
-  "はいせん",
-  "はいそう",
-  "はいち",
-  "ばいばい",
-  "はいれつ",
-  "はえる",
-  "はおる",
-  "はかい",
-  "ばかり",
-  "はかる",
-  "はくしゅ",
-  "はけん",
-  "はこぶ",
-  "はさみ",
-  "はさん",
-  "はしご",
-  "ばしょ",
-  "はしる",
-  "はせる",
-  "ぱそこん",
-  "はそん",
-  "はたん",
-  "はちみつ",
-  "はつおん",
-  "はっかく",
-  "はづき",
-  "はっきり",
-  "はっくつ",
-  "はっけん",
-  "はっこう",
-  "はっさん",
-  "はっしん",
-  "はったつ",
-  "はっちゅう",
-  "はってん",
-  "はっぴょう",
-  "はっぽう",
-  "はなす",
-  "はなび",
-  "はにかむ",
-  "はぶらし",
-  "はみがき",
-  "はむかう",
-  "はめつ",
-  "はやい",
-  "はやし",
-  "はらう",
-  "はろうぃん",
-  "はわい",
-  "はんい",
-  "はんえい",
-  "はんおん",
-  "はんかく",
-  "はんきょう",
-  "ばんぐみ",
-  "はんこ",
-  "はんしゃ",
-  "はんすう",
-  "はんだん",
-  "ぱんち",
-  "ぱんつ",
-  "はんてい",
-  "はんとし",
-  "はんのう",
-  "はんぱ",
-  "はんぶん",
-  "はんぺん",
-  "はんぼうき",
-  "はんめい",
-  "はんらん",
-  "はんろん",
-  "ひいき",
-  "ひうん",
-  "ひえる",
-  "ひかく",
-  "ひかり",
-  "ひかる",
-  "ひかん",
-  "ひくい",
-  "ひけつ",
-  "ひこうき",
-  "ひこく",
-  "ひさい",
-  "ひさしぶり",
-  "ひさん",
-  "びじゅつかん",
-  "ひしょ"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/jbo.rs b/networks/monero/wallet/seed/src/words/jbo.rs
deleted file mode 100644
index a58f8d11..00000000
--- a/networks/monero/wallet/seed/src/words/jbo.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "backi",
-  "bacru",
-  "badna",
-  "badri",
-  "bajra",
-  "bakfu",
-  "bakni",
-  "bakri",
-  "baktu",
-  "balji",
-  "balni",
-  "balre",
-  "balvi",
-  "bambu",
-  "bancu",
-  "bandu",
-  "banfi",
-  "bangu",
-  "banli",
-  "banro",
-  "banxa",
-  "banzu",
-  "bapli",
-  "barda",
-  "bargu",
-  "barja",
-  "barna",
-  "bartu",
-  "basfa",
-  "basna",
-  "basti",
-  "batci",
-  "batke",
-  "bavmi",
-  "baxso",
-  "bebna",
-  "bekpi",
-  "bemro",
-  "bende",
-  "bengo",
-  "benji",
-  "benre",
-  "benzo",
-  "bergu",
-  "bersa",
-  "berti",
-  "besna",
-  "besto",
-  "betfu",
-  "betri",
-  "bevri",
-  "bidju",
-  "bifce",
-  "bikla",
-  "bilga",
-  "bilma",
-  "bilni",
-  "bindo",
-  "binra",
-  "binxo",
-  "birje",
-  "birka",
-  "birti",
-  "bisli",
-  "bitmu",
-  "bitni",
-  "blabi",
-  "blaci",
-  "blanu",
-  "bliku",
-  "bloti",
-  "bolci",
-  "bongu",
-  "boske",
-  "botpi",
-  "boxfo",
-  "boxna",
-  "bradi",
-  "brano",
-  "bratu",
-  "brazo",
-  "bredi",
-  "bridi",
-  "brife",
-  "briju",
-  "brito",
-  "brivo",
-  "broda",
-  "bruna",
-  "budjo",
-  "bukpu",
-  "bumru",
-  "bunda",
-  "bunre",
-  "burcu",
-  "burna",
-  "cabna",
-  "cabra",
-  "cacra",
-  "cadga",
-  "cadzu",
-  "cafne",
-  "cagna",
-  "cakla",
-  "calku",
-  "calse",
-  "canci",
-  "cando",
-  "cange",
-  "canja",
-  "canko",
-  "canlu",
-  "canpa",
-  "canre",
-  "canti",
-  "carce",
-  "carfu",
-  "carmi",
-  "carna",
-  "cartu",
-  "carvi",
-  "casnu",
-  "catke",
-  "catlu",
-  "catni",
-  "catra",
-  "caxno",
-  "cecla",
-  "cecmu",
-  "cedra",
-  "cenba",
-  "censa",
-  "centi",
-  "cerda",
-  "cerni",
-  "certu",
-  "cevni",
-  "cfale",
-  "cfari",
-  "cfika",
-  "cfila",
-  "cfine",
-  "cfipu",
-  "ciblu",
-  "cicna",
-  "cidja",
-  "cidni",
-  "cidro",
-  "cifnu",
-  "cigla",
-  "cikna",
-  "cikre",
-  "ciksi",
-  "cilce",
-  "cilfu",
-  "cilmo",
-  "cilre",
-  "cilta",
-  "cimde",
-  "cimni",
-  "cinba",
-  "cindu",
-  "cinfo",
-  "cinje",
-  "cinki",
-  "cinla",
-  "cinmo",
-  "cinri",
-  "cinse",
-  "cinta",
-  "cinza",
-  "cipni",
-  "cipra",
-  "cirko",
-  "cirla",
-  "ciska",
-  "cisma",
-  "cisni",
-  "ciste",
-  "citka",
-  "citno",
-  "citri",
-  "citsi",
-  "civla",
-  "cizra",
-  "ckabu",
-  "ckafi",
-  "ckaji",
-  "ckana",
-  "ckape",
-  "ckasu",
-  "ckeji",
-  "ckiku",
-  "ckilu",
-  "ckini",
-  "ckire",
-  "ckule",
-  "ckunu",
-  "cladu",
-  "clani",
-  "claxu",
-  "cletu",
-  "clika",
-  "clinu",
-  "clira",
-  "clite",
-  "cliva",
-  "clupa",
-  "cmaci",
-  "cmalu",
-  "cmana",
-  "cmavo",
-  "cmene",
-  "cmeta",
-  "cmevo",
-  "cmila",
-  "cmima",
-  "cmoni",
-  "cnano",
-  "cnebo",
-  "cnemu",
-  "cnici",
-  "cnino",
-  "cnisa",
-  "cnita",
-  "cokcu",
-  "condi",
-  "conka",
-  "corci",
-  "cortu",
-  "cpacu",
-  "cpana",
-  "cpare",
-  "cpedu",
-  "cpina",
-  "cradi",
-  "crane",
-  "creka",
-  "crepu",
-  "cribe",
-  "crida",
-  "crino",
-  "cripu",
-  "crisa",
-  "critu",
-  "ctaru",
-  "ctebi",
-  "cteki",
-  "ctile",
-  "ctino",
-  "ctuca",
-  "cukla",
-  "cukre",
-  "cukta",
-  "culno",
-  "cumki",
-  "cumla",
-  "cunmi",
-  "cunso",
-  "cuntu",
-  "cupra",
-  "curmi",
-  "curnu",
-  "curve",
-  "cusku",
-  "cusna",
-  "cutci",
-  "cutne",
-  "cuxna",
-  "dacru",
-  "dacti",
-  "dadjo",
-  "dakfu",
-  "dakli",
-  "damba",
-  "damri",
-  "dandu",
-  "danfu",
-  "danlu",
-  "danmo",
-  "danre",
-  "dansu",
-  "danti",
-  "daplu",
-  "dapma",
-  "darca",
-  "dargu",
-  "darlu",
-  "darno",
-  "darsi",
-  "darxi",
-  "daski",
-  "dasni",
-  "daspo",
-  "dasri",
-  "datka",
-  "datni",
-  "datro",
-  "decti",
-  "degji",
-  "dejni",
-  "dekpu",
-  "dekto",
-  "delno",
-  "dembi",
-  "denci",
-  "denmi",
-  "denpa",
-  "dertu",
-  "derxi",
-  "desku",
-  "detri",
-  "dicma",
-  "dicra",
-  "didni",
-  "digno",
-  "dikca",
-  "diklo",
-  "dikni",
-  "dilcu",
-  "dilma",
-  "dilnu",
-  "dimna",
-  "dindi",
-  "dinju",
-  "dinko",
-  "dinso",
-  "dirba",
-  "dirce",
-  "dirgo",
-  "disko",
-  "ditcu",
-  "divzi",
-  "dizlo",
-  "djacu",
-  "djedi",
-  "djica",
-  "djine",
-  "djuno",
-  "donri",
-  "dotco",
-  "draci",
-  "drani",
-  "drata",
-  "drudi",
-  "dugri",
-  "dukse",
-  "dukti",
-  "dunda",
-  "dunja",
-  "dunku",
-  "dunli",
-  "dunra",
-  "dutso",
-  "dzena",
-  "dzipo",
-  "facki",
-  "fadni",
-  "fagri",
-  "falnu",
-  "famti",
-  "fancu",
-  "fange",
-  "fanmo",
-  "fanri",
-  "fanta",
-  "fanva",
-  "fanza",
-  "fapro",
-  "farka",
-  "farlu",
-  "farna",
-  "farvi",
-  "fasnu",
-  "fatci",
-  "fatne",
-  "fatri",
-  "febvi",
-  "fegli",
-  "femti",
-  "fendi",
-  "fengu",
-  "fenki",
-  "fenra",
-  "fenso",
-  "fepni",
-  "fepri",
-  "ferti",
-  "festi",
-  "fetsi",
-  "figre",
-  "filso",
-  "finpe",
-  "finti",
-  "firca",
-  "fisli",
-  "fizbu",
-  "flaci",
-  "flalu",
-  "flani",
-  "flecu",
-  "flese",
-  "fliba",
-  "flira",
-  "foldi",
-  "fonmo",
-  "fonxa",
-  "forca",
-  "forse",
-  "fraso",
-  "frati",
-  "fraxu",
-  "frica",
-  "friko",
-  "frili",
-  "frinu",
-  "friti",
-  "frumu",
-  "fukpi",
-  "fulta",
-  "funca",
-  "fusra",
-  "fuzme",
-  "gacri",
-  "gadri",
-  "galfi",
-  "galtu",
-  "galxe",
-  "ganlo",
-  "ganra",
-  "ganse",
-  "ganti",
-  "ganxo",
-  "ganzu",
-  "gapci",
-  "gapru",
-  "garna",
-  "gasnu",
-  "gaspo",
-  "gasta",
-  "genja",
-  "gento",
-  "genxu",
-  "gerku",
-  "gerna",
-  "gidva",
-  "gigdo",
-  "ginka",
-  "girzu",
-  "gismu",
-  "glare",
-  "gleki",
-  "gletu",
-  "glico",
-  "glife",
-  "glosa",
-  "gluta",
-  "gocti",
-  "gomsi",
-  "gotro",
-  "gradu",
-  "grafu",
-  "grake",
-  "grana",
-  "grasu",
-  "grava",
-  "greku",
-  "grusi",
-  "grute",
-  "gubni",
-  "gugde",
-  "gugle",
-  "gumri",
-  "gundi",
-  "gunka",
-  "gunma",
-  "gunro",
-  "gunse",
-  "gunta",
-  "gurni",
-  "guska",
-  "gusni",
-  "gusta",
-  "gutci",
-  "gutra",
-  "guzme",
-  "jabre",
-  "jadni",
-  "jakne",
-  "jalge",
-  "jalna",
-  "jalra",
-  "jamfu",
-  "jamna",
-  "janbe",
-  "janco",
-  "janli",
-  "jansu",
-  "janta",
-  "jarbu",
-  "jarco",
-  "jarki",
-  "jaspu",
-  "jatna",
-  "javni",
-  "jbama",
-  "jbari",
-  "jbena",
-  "jbera",
-  "jbini",
-  "jdari",
-  "jdice",
-  "jdika",
-  "jdima",
-  "jdini",
-  "jduli",
-  "jecta",
-  "jeftu",
-  "jegvo",
-  "jelca",
-  "jemna",
-  "jenca",
-  "jendu",
-  "jenmi",
-  "jensi",
-  "jerna",
-  "jersi",
-  "jerxo",
-  "jesni",
-  "jetce",
-  "jetnu",
-  "jgalu",
-  "jganu",
-  "jgari",
-  "jgena",
-  "jgina",
-  "jgira",
-  "jgita",
-  "jibni",
-  "jibri",
-  "jicla",
-  "jicmu",
-  "jijnu",
-  "jikca",
-  "jikfi",
-  "jikni",
-  "jikru",
-  "jilka",
-  "jilra",
-  "jimca",
-  "jimpe",
-  "jimte",
-  "jinci",
-  "jinda",
-  "jinga",
-  "jinku",
-  "jinme",
-  "jinru",
-  "jinsa",
-  "jinto",
-  "jinvi",
-  "jinzi",
-  "jipci",
-  "jipno",
-  "jirna",
-  "jisra",
-  "jitfa",
-  "jitro",
-  "jivbu",
-  "jivna",
-  "jmaji",
-  "jmifa",
-  "jmina",
-  "jmive",
-  "jonse",
-  "jordo",
-  "jorne",
-  "jubme",
-  "judri",
-  "jufra",
-  "jukni",
-  "jukpa",
-  "julne",
-  "julro",
-  "jundi",
-  "jungo",
-  "junla",
-  "junri",
-  "junta",
-  "jurme",
-  "jursa",
-  "jutsi",
-  "juxre",
-  "jvinu",
-  "jviso",
-  "kabri",
-  "kacma",
-  "kadno",
-  "kafke",
-  "kagni",
-  "kajde",
-  "kajna",
-  "kakne",
-  "kakpa",
-  "kalci",
-  "kalri",
-  "kalsa",
-  "kalte",
-  "kamju",
-  "kamni",
-  "kampu",
-  "kamre",
-  "kanba",
-  "kancu",
-  "kandi",
-  "kanji",
-  "kanla",
-  "kanpe",
-  "kanro",
-  "kansa",
-  "kantu",
-  "kanxe",
-  "karbi",
-  "karce",
-  "karda",
-  "kargu",
-  "karli",
-  "karni",
-  "katci",
-  "katna",
-  "kavbu",
-  "kazra",
-  "kecti",
-  "kekli",
-  "kelci",
-  "kelvo",
-  "kenka",
-  "kenra",
-  "kensa",
-  "kerfa",
-  "kerlo",
-  "kesri",
-  "ketco",
-  "ketsu",
-  "kevna",
-  "kibro",
-  "kicne",
-  "kijno",
-  "kilto",
-  "kinda",
-  "kinli",
-  "kisto",
-  "klaji",
-  "klaku",
-  "klama",
-  "klani",
-  "klesi",
-  "kliki",
-  "klina",
-  "kliru",
-  "kliti",
-  "klupe",
-  "kluza",
-  "kobli",
-  "kogno",
-  "kojna",
-  "kokso",
-  "kolme",
-  "komcu",
-  "konju",
-  "korbi",
-  "korcu",
-  "korka",
-  "korvo",
-  "kosmu",
-  "kosta",
-  "krali",
-  "kramu",
-  "krasi",
-  "krati",
-  "krefu",
-  "krici",
-  "krili",
-  "krinu",
-  "krixa",
-  "kruca",
-  "kruji",
-  "kruvi",
-  "kubli",
-  "kucli",
-  "kufra",
-  "kukte",
-  "kulnu",
-  "kumfa",
-  "kumte",
-  "kunra",
-  "kunti",
-  "kurfa",
-  "kurji",
-  "kurki",
-  "kuspe",
-  "kusru",
-  "labno",
-  "lacni",
-  "lacpu",
-  "lacri",
-  "ladru",
-  "lafti",
-  "lakne",
-  "lakse",
-  "laldo",
-  "lalxu",
-  "lamji",
-  "lanbi",
-  "lanci",
-  "landa",
-  "lanka",
-  "lanli",
-  "lanme",
-  "lante",
-  "lanxe",
-  "lanzu",
-  "larcu",
-  "larva",
-  "lasna",
-  "lastu",
-  "latmo",
-  "latna",
-  "lazni",
-  "lebna",
-  "lelxe",
-  "lenga",
-  "lenjo",
-  "lenku",
-  "lerci",
-  "lerfu",
-  "libjo",
-  "lidne",
-  "lifri",
-  "lijda",
-  "limfa",
-  "limna",
-  "lince",
-  "lindi",
-  "linga",
-  "linji",
-  "linsi",
-  "linto",
-  "lisri",
-  "liste",
-  "litce",
-  "litki",
-  "litru",
-  "livga",
-  "livla",
-  "logji",
-  "loglo",
-  "lojbo",
-  "loldi",
-  "lorxu",
-  "lubno",
-  "lujvo",
-  "luksi",
-  "lumci",
-  "lunbe",
-  "lunra",
-  "lunsa",
-  "luska",
-  "lusto",
-  "mabla",
-  "mabru",
-  "macnu",
-  "majga",
-  "makcu",
-  "makfa",
-  "maksi",
-  "malsi",
-  "mamta",
-  "manci",
-  "manfo",
-  "mango",
-  "manku",
-  "manri",
-  "mansa",
-  "manti",
-  "mapku",
-  "mapni",
-  "mapra",
-  "mapti",
-  "marbi",
-  "marce",
-  "marde",
-  "margu",
-  "marji",
-  "marna",
-  "marxa",
-  "masno",
-  "masti",
-  "matci",
-  "matli",
-  "matne",
-  "matra",
-  "mavji",
-  "maxri",
-  "mebri",
-  "megdo",
-  "mekso",
-  "melbi",
-  "meljo",
-  "melmi",
-  "menli",
-  "menre",
-  "mensi",
-  "mentu",
-  "merko",
-  "merli",
-  "metfo",
-  "mexno",
-  "midju",
-  "mifra",
-  "mikce",
-  "mikri",
-  "milti",
-  "milxe",
-  "minde",
-  "minji",
-  "minli",
-  "minra",
-  "mintu",
-  "mipri",
-  "mirli",
-  "misno",
-  "misro",
-  "mitre",
-  "mixre",
-  "mlana",
-  "mlatu",
-  "mleca",
-  "mledi",
-  "mluni",
-  "mogle",
-  "mokca",
-  "moklu",
-  "molki",
-  "molro",
-  "morji",
-  "morko",
-  "morna",
-  "morsi",
-  "mosra",
-  "mraji",
-  "mrilu",
-  "mruli",
-  "mucti",
-  "mudri",
-  "mugle",
-  "mukti",
-  "mulno",
-  "munje",
-  "mupli",
-  "murse",
-  "murta",
-  "muslo",
-  "mutce",
-  "muvdu",
-  "muzga",
-  "nabmi",
-  "nakni",
-  "nalci",
-  "namcu",
-  "nanba",
-  "nanca",
-  "nandu",
-  "nanla",
-  "nanmu",
-  "nanvi",
-  "narge",
-  "narju",
-  "natfe",
-  "natmi",
-  "natsi",
-  "navni",
-  "naxle",
-  "nazbi",
-  "nejni",
-  "nelci",
-  "nenri",
-  "nerde",
-  "nibli",
-  "nicfa",
-  "nicte",
-  "nikle",
-  "nilce",
-  "nimre",
-  "ninja",
-  "ninmu",
-  "nirna",
-  "nitcu",
-  "nivji",
-  "nixli",
-  "nobli",
-  "norgo",
-  "notci",
-  "nudle",
-  "nukni",
-  "nunmu",
-  "nupre",
-  "nurma",
-  "nusna",
-  "nutka",
-  "nutli",
-  "nuzba",
-  "nuzlo",
-  "pacna",
-  "pagbu",
-  "pagre",
-  "pajni",
-  "palci",
-  "palku",
-  "palma",
-  "palne",
-  "palpi",
-  "palta",
-  "pambe",
-  "pamga",
-  "panci",
-  "pandi",
-  "panje",
-  "panka",
-  "panlo",
-  "panpi",
-  "panra",
-  "pante",
-  "panzi",
-  "papri",
-  "parbi",
-  "pardu",
-  "parji",
-  "pastu",
-  "patfu",
-  "patlu",
-  "patxu",
-  "paznu",
-  "pelji",
-  "pelxu",
-  "pemci",
-  "penbi",
-  "pencu",
-  "pendo",
-  "penmi",
-  "pensi",
-  "pentu",
-  "perli",
-  "pesxu",
-  "petso",
-  "pevna",
-  "pezli",
-  "picti",
-  "pijne",
-  "pikci",
-  "pikta",
-  "pilda",
-  "pilji",
-  "pilka",
-  "pilno",
-  "pimlu",
-  "pinca",
-  "pindi",
-  "pinfu",
-  "pinji",
-  "pinka",
-  "pinsi",
-  "pinta",
-  "pinxe",
-  "pipno",
-  "pixra",
-  "plana",
-  "platu",
-  "pleji",
-  "plibu",
-  "plini",
-  "plipe",
-  "plise",
-  "plita",
-  "plixa",
-  "pluja",
-  "pluka",
-  "pluta",
-  "pocli",
-  "polje",
-  "polno",
-  "ponjo",
-  "ponse",
-  "poplu",
-  "porpi",
-  "porsi",
-  "porto",
-  "prali",
-  "prami",
-  "prane",
-  "preja",
-  "prenu",
-  "preri",
-  "preti",
-  "prije",
-  "prina",
-  "pritu",
-  "proga",
-  "prosa",
-  "pruce",
-  "pruni",
-  "pruri",
-  "pruxi",
-  "pulce",
-  "pulji",
-  "pulni",
-  "punji",
-  "punli",
-  "pupsu",
-  "purci",
-  "purdi",
-  "purmo",
-  "racli",
-  "ractu",
-  "radno",
-  "rafsi",
-  "ragbi",
-  "ragve",
-  "rakle",
-  "rakso",
-  "raktu",
-  "ralci",
-  "ralju",
-  "ralte",
-  "randa",
-  "rango",
-  "ranji",
-  "ranmi",
-  "ransu",
-  "ranti",
-  "ranxi",
-  "rapli",
-  "rarna",
-  "ratcu",
-  "ratni",
-  "rebla",
-  "rectu",
-  "rekto",
-  "remna",
-  "renro",
-  "renvi",
-  "respa",
-  "rexsa",
-  "ricfu",
-  "rigni",
-  "rijno",
-  "rilti",
-  "rimni",
-  "rinci",
-  "rindo",
-  "rinju",
-  "rinka",
-  "rinsa",
-  "rirci",
-  "rirni",
-  "rirxe",
-  "rismi",
-  "risna",
-  "ritli",
-  "rivbi",
-  "rokci",
-  "romge",
-  "romlo",
-  "ronte",
-  "ropno",
-  "rorci",
-  "rotsu",
-  "rozgu",
-  "ruble",
-  "rufsu",
-  "runme",
-  "runta",
-  "rupnu",
-  "rusko",
-  "rutni",
-  "sabji",
-  "sabnu",
-  "sacki",
-  "saclu",
-  "sadjo",
-  "sakci",
-  "sakli",
-  "sakta",
-  "salci",
-  "salpo",
-  "salri",
-  "salta",
-  "samcu",
-  "sampu",
-  "sanbu",
-  "sance",
-  "sanga",
-  "sanji",
-  "sanli",
-  "sanmi",
-  "sanso",
-  "santa",
-  "sarcu",
-  "sarji",
-  "sarlu",
-  "sarni",
-  "sarxe",
-  "saske",
-  "satci",
-  "satre",
-  "savru",
-  "sazri",
-  "sefsi",
-  "sefta",
-  "sekre",
-  "selci",
-  "selfu",
-  "semto",
-  "senci",
-  "sengi",
-  "senpi",
-  "senta",
-  "senva",
-  "sepli",
-  "serti",
-  "sesre",
-  "setca",
-  "sevzi",
-  "sfani",
-  "sfasa",
-  "sfofa",
-  "sfubu",
-  "sibli",
-  "siclu",
-  "sicni",
-  "sicpi",
-  "sidbo",
-  "sidju",
-  "sigja",
-  "sigma",
-  "sikta",
-  "silka",
-  "silna",
-  "simlu",
-  "simsa",
-  "simxu",
-  "since",
-  "sinma",
-  "sinso",
-  "sinxa",
-  "sipna",
-  "sirji",
-  "sirxo",
-  "sisku",
-  "sisti",
-  "sitna",
-  "sivni",
-  "skaci",
-  "skami",
-  "skapi",
-  "skari",
-  "skicu",
-  "skiji",
-  "skina",
-  "skori",
-  "skoto",
-  "skuba",
-  "skuro",
-  "slabu",
-  "slaka",
-  "slami",
-  "slanu",
-  "slari",
-  "slasi",
-  "sligu",
-  "slilu",
-  "sliri",
-  "slovo",
-  "sluji",
-  "sluni",
-  "smacu",
-  "smadi",
-  "smaji",
-  "smaka",
-  "smani",
-  "smela",
-  "smoka",
-  "smuci",
-  "smuni",
-  "smusu",
-  "snada",
-  "snanu",
-  "snidu",
-  "snime",
-  "snipa",
-  "snuji",
-  "snura",
-  "snuti",
-  "sobde",
-  "sodna",
-  "sodva",
-  "softo",
-  "solji",
-  "solri",
-  "sombo",
-  "sonci",
-  "sorcu",
-  "sorgu",
-  "sorni",
-  "sorta",
-  "sovda",
-  "spaji",
-  "spali",
-  "spano",
-  "spati",
-  "speni",
-  "spero",
-  "spisa",
-  "spita",
-  "spofu",
-  "spoja",
-  "spuda",
-  "sputu",
-  "sraji",
-  "sraku",
-  "sralo",
-  "srana",
-  "srasu",
-  "srera",
-  "srito",
-  "sruma",
-  "sruri",
-  "stace",
-  "stagi",
-  "staku",
-  "stali",
-  "stani",
-  "stapa",
-  "stasu",
-  "stati",
-  "steba",
-  "steci",
-  "stedu",
-  "stela",
-  "stero",
-  "stici",
-  "stidi",
-  "stika",
-  "stizu",
-  "stodi",
-  "stuna",
-  "stura",
-  "stuzi",
-  "sucta",
-  "sudga",
-  "sufti",
-  "suksa",
-  "sumji",
-  "sumne",
-  "sumti",
-  "sunga",
-  "sunla",
-  "surla",
-  "sutra",
-  "tabno",
-  "tabra",
-  "tadji",
-  "tadni",
-  "tagji",
-  "taksi",
-  "talsa",
-  "tamca",
-  "tamji",
-  "tamne",
-  "tanbo",
-  "tance",
-  "tanjo",
-  "tanko",
-  "tanru",
-  "tansi",
-  "tanxe",
-  "tapla",
-  "tarbi",
-  "tarci",
-  "tarla",
-  "tarmi",
-  "tarti",
-  "taske",
-  "tasmi",
-  "tasta",
-  "tatpi",
-  "tatru",
-  "tavla",
-  "taxfu",
-  "tcaci",
-  "tcadu",
-  "tcana",
-  "tcati",
-  "tcaxe",
-  "tcena",
-  "tcese",
-  "tcica",
-  "tcidu",
-  "tcika",
-  "tcila",
-  "tcima",
-  "tcini",
-  "tcita",
-  "temci",
-  "temse",
-  "tende",
-  "tenfa",
-  "tengu",
-  "terdi",
-  "terpa",
-  "terto",
-  "tifri",
-  "tigni",
-  "tigra",
-  "tikpa",
-  "tilju",
-  "tinbe",
-  "tinci",
-  "tinsa",
-  "tirna",
-  "tirse",
-  "tirxu",
-  "tisna",
-  "titla",
-  "tivni",
-  "tixnu",
-  "toknu",
-  "toldi",
-  "tonga",
-  "tordu",
-  "torni",
-  "torso",
-  "traji",
-  "trano",
-  "trati",
-  "trene",
-  "tricu",
-  "trina",
-  "trixe",
-  "troci",
-  "tsaba",
-  "tsali",
-  "tsani",
-  "tsapi",
-  "tsiju",
-  "tsina",
-  "tsuku",
-  "tubnu",
-  "tubra",
-  "tugni",
-  "tujli",
-  "tumla",
-  "tunba",
-  "tunka",
-  "tunlo",
-  "tunta",
-  "tuple",
-  "turko",
-  "turni",
-  "tutci",
-  "tutle",
-  "tutra",
-  "vacri",
-  "vajni",
-  "valsi",
-  "vamji",
-  "vamtu",
-  "vanbi",
-  "vanci",
-  "vanju",
-  "vasru",
-  "vasxu",
-  "vecnu",
-  "vedli",
-  "venfu",
-  "vensa",
-  "vente",
-  "vepre",
-  "verba",
-  "vibna",
-  "vidni",
-  "vidru",
-  "vifne",
-  "vikmi",
-  "viknu",
-  "vimcu",
-  "vindu",
-  "vinji",
-  "vinta",
-  "vipsi",
-  "virnu",
-  "viska",
-  "vitci",
-  "vitke",
-  "vitno",
-  "vlagi",
-  "vlile",
-  "vlina",
-  "vlipa",
-  "vofli",
-  "voksa",
-  "volve",
-  "vorme",
-  "vraga",
-  "vreji",
-  "vreta",
-  "vrici",
-  "vrude",
-  "vrusi",
-  "vubla",
-  "vujnu",
-  "vukna",
-  "vukro",
-  "xabju",
-  "xadba",
-  "xadji",
-  "xadni",
-  "xagji",
-  "xagri",
-  "xajmi",
-  "xaksu",
-  "xalbo",
-  "xalka",
-  "xalni",
-  "xamgu",
-  "xampo",
-  "xamsi",
-  "xance",
-  "xango",
-  "xanka",
-  "xanri",
-  "xansa",
-  "xanto",
-  "xarci",
-  "xarju",
-  "xarnu",
-  "xasli",
-  "xasne",
-  "xatra",
-  "xatsi",
-  "xazdo",
-  "xebni",
-  "xebro",
-  "xecto",
-  "xedja",
-  "xekri",
-  "xelso",
-  "xendo",
-  "xenru",
-  "xexso",
-  "xigzo",
-  "xindo",
-  "xinmo",
-  "xirma",
-  "xislu",
-  "xispo",
-  "xlali",
-  "xlura",
-  "xorbo",
-  "xorlo",
-  "xotli",
-  "xrabo",
-  "xrani",
-  "xriso",
-  "xrotu",
-  "xruba",
-  "xruki",
-  "xrula",
-  "xruti",
-  "xukmi",
-  "xulta",
-  "xunre",
-  "xurdo",
-  "xusra",
-  "xutla",
-  "zabna",
-  "zajba",
-  "zalvi",
-  "zanru",
-  "zarci",
-  "zargu",
-  "zasni",
-  "zasti",
-  "zbabu",
-  "zbani",
-  "zbasu",
-  "zbepi",
-  "zdani",
-  "zdile",
-  "zekri",
-  "zenba",
-  "zepti",
-  "zetro",
-  "zevla",
-  "zgadi",
-  "zgana",
-  "zgike",
-  "zifre",
-  "zinki",
-  "zirpu",
-  "zivle",
-  "zmadu",
-  "zmiku",
-  "zucna",
-  "zukte",
-  "zumri",
-  "zungi",
-  "zunle",
-  "zunti",
-  "zutse",
-  "zvati",
-  "zviki",
-  "jbobau",
-  "jbopre",
-  "karsna",
-  "cabdei",
-  "zunsna",
-  "gendra",
-  "glibau",
-  "nintadni",
-  "pavyseljirna",
-  "vlaste",
-  "selbri",
-  "latro'a",
-  "zdakemkulgu'a",
-  "mriste",
-  "selsku",
-  "fu'ivla",
-  "tolmo'i",
-  "snavei",
-  "xagmau",
-  "retsku",
-  "ckupau",
-  "skudji",
-  "smudra",
-  "prulamdei",
-  "vokta'a",
-  "tinju'i",
-  "jefyfa'o",
-  "bavlamdei",
-  "kinzga",
-  "jbocre",
-  "jbovla",
-  "xauzma",
-  "selkei",
-  "xuncku",
-  "spusku",
-  "jbogu'e",
-  "pampe'o",
-  "bripre",
-  "jbosnu",
-  "zi'evla",
-  "gimste",
-  "tolzdi",
-  "velski",
-  "samselpla",
-  "cnegau",
-  "velcki",
-  "selja'e",
-  "fasybau",
-  "zanfri",
-  "reisku",
-  "favgau",
-  "jbota'a",
-  "rejgau",
-  "malgli",
-  "zilkai",
-  "keidji",
-  "tersu'i",
-  "jbofi'e",
-  "cnima'o",
-  "mulgau",
-  "ningau",
-  "ponbau",
-  "mrobi'o",
-  "rarbau",
-  "zmanei",
-  "famyma'o",
-  "vacysai",
-  "jetmlu",
-  "jbonunsla",
-  "nunpe'i",
-  "fa'orma'o",
-  "crezenzu'e",
-  "jbojbe",
-  "cmicu'a",
-  "zilcmi",
-  "tolcando",
-  "zukcfu",
-  "depybu'i",
-  "mencre",
-  "matmau",
-  "nunctu",
-  "selma'o",
-  "titnanba",
-  "naldra",
-  "jvajvo",
-  "nunsnu",
-  "nerkla",
-  "cimjvo",
-  "muvgau",
-  "zipcpi",
-  "runbau",
-  "faumlu",
-  "terbri",
-  "balcu'e",
-  "dragau",
-  "smuvelcki",
-  "piksku",
-  "selpli",
-  "bregau",
-  "zvafa'i",
-  "ci'izra",
-  "noltruti'u",
-  "samtci",
-  "snaxa'a"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/nl.rs b/networks/monero/wallet/seed/src/words/nl.rs
deleted file mode 100644
index 0c191e7f..00000000
--- a/networks/monero/wallet/seed/src/words/nl.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "aalglad",
-  "aalscholver",
-  "aambeeld",
-  "aangeef",
-  "aanlandig",
-  "aanvaard",
-  "aanwakker",
-  "aapmens",
-  "aarten",
-  "abdicatie",
-  "abnormaal",
-  "abrikoos",
-  "accu",
-  "acuut",
-  "adjudant",
-  "admiraal",
-  "advies",
-  "afbidding",
-  "afdracht",
-  "affaire",
-  "affiche",
-  "afgang",
-  "afkick",
-  "afknap",
-  "aflees",
-  "afmijner",
-  "afname",
-  "afpreekt",
-  "afrader",
-  "afspeel",
-  "aftocht",
-  "aftrek",
-  "afzijdig",
-  "ahornboom",
-  "aktetas",
-  "akzo",
-  "alchemist",
-  "alcohol",
-  "aldaar",
-  "alexander",
-  "alfabet",
-  "alfredo",
-  "alice",
-  "alikruik",
-  "allrisk",
-  "altsax",
-  "alufolie",
-  "alziend",
-  "amai",
-  "ambacht",
-  "ambieer",
-  "amina",
-  "amnestie",
-  "amok",
-  "ampul",
-  "amuzikaal",
-  "angela",
-  "aniek",
-  "antje",
-  "antwerpen",
-  "anya",
-  "aorta",
-  "apache",
-  "apekool",
-  "appelaar",
-  "arganolie",
-  "argeloos",
-  "armoede",
-  "arrenslee",
-  "artritis",
-  "arubaan",
-  "asbak",
-  "ascii",
-  "asgrauw",
-  "asjes",
-  "asml",
-  "aspunt",
-  "asurn",
-  "asveld",
-  "aterling",
-  "atomair",
-  "atrium",
-  "atsma",
-  "atypisch",
-  "auping",
-  "aura",
-  "avifauna",
-  "axiaal",
-  "azoriaan",
-  "azteek",
-  "azuur",
-  "bachelor",
-  "badderen",
-  "badhotel",
-  "badmantel",
-  "badsteden",
-  "balie",
-  "ballans",
-  "balvers",
-  "bamibal",
-  "banneling",
-  "barracuda",
-  "basaal",
-  "batelaan",
-  "batje",
-  "beambte",
-  "bedlamp",
-  "bedwelmd",
-  "befaamd",
-  "begierd",
-  "begraaf",
-  "behield",
-  "beijaard",
-  "bejaagd",
-  "bekaaid",
-  "beks",
-  "bektas",
-  "belaad",
-  "belboei",
-  "belderbos",
-  "beloerd",
-  "beluchten",
-  "bemiddeld",
-  "benadeeld",
-  "benijd",
-  "berechten",
-  "beroemd",
-  "besef",
-  "besseling",
-  "best",
-  "betichten",
-  "bevind",
-  "bevochten",
-  "bevraagd",
-  "bewust",
-  "bidplaats",
-  "biefstuk",
-  "biemans",
-  "biezen",
-  "bijbaan",
-  "bijeenkom",
-  "bijfiguur",
-  "bijkaart",
-  "bijlage",
-  "bijpaard",
-  "bijtgaar",
-  "bijweg",
-  "bimmel",
-  "binck",
-  "bint",
-  "biobak",
-  "biotisch",
-  "biseks",
-  "bistro",
-  "bitter",
-  "bitumen",
-  "bizar",
-  "blad",
-  "bleken",
-  "blender",
-  "bleu",
-  "blief",
-  "blijven",
-  "blozen",
-  "bock",
-  "boef",
-  "boei",
-  "boks",
-  "bolder",
-  "bolus",
-  "bolvormig",
-  "bomaanval",
-  "bombarde",
-  "bomma",
-  "bomtapijt",
-  "bookmaker",
-  "boos",
-  "borg",
-  "bosbes",
-  "boshuizen",
-  "bosloop",
-  "botanicus",
-  "bougie",
-  "bovag",
-  "boxspring",
-  "braad",
-  "brasem",
-  "brevet",
-  "brigade",
-  "brinckman",
-  "bruid",
-  "budget",
-  "buffel",
-  "buks",
-  "bulgaar",
-  "buma",
-  "butaan",
-  "butler",
-  "buuf",
-  "cactus",
-  "cafeetje",
-  "camcorder",
-  "cannabis",
-  "canyon",
-  "capoeira",
-  "capsule",
-  "carkit",
-  "casanova",
-  "catalaan",
-  "ceintuur",
-  "celdeling",
-  "celplasma",
-  "cement",
-  "censeren",
-  "ceramisch",
-  "cerberus",
-  "cerebraal",
-  "cesium",
-  "cirkel",
-  "citeer",
-  "civiel",
-  "claxon",
-  "clenbuterol",
-  "clicheren",
-  "clijsen",
-  "coalitie",
-  "coassistentschap",
-  "coaxiaal",
-  "codetaal",
-  "cofinanciering",
-  "cognac",
-  "coltrui",
-  "comfort",
-  "commandant",
-  "condensaat",
-  "confectie",
-  "conifeer",
-  "convector",
-  "copier",
-  "corfu",
-  "correct",
-  "coup",
-  "couvert",
-  "creatie",
-  "credit",
-  "crematie",
-  "cricket",
-  "croupier",
-  "cruciaal",
-  "cruijff",
-  "cuisine",
-  "culemborg",
-  "culinair",
-  "curve",
-  "cyrano",
-  "dactylus",
-  "dading",
-  "dagblind",
-  "dagje",
-  "daglicht",
-  "dagprijs",
-  "dagranden",
-  "dakdekker",
-  "dakpark",
-  "dakterras",
-  "dalgrond",
-  "dambord",
-  "damkat",
-  "damlengte",
-  "damman",
-  "danenberg",
-  "debbie",
-  "decibel",
-  "defect",
-  "deformeer",
-  "degelijk",
-  "degradant",
-  "dejonghe",
-  "dekken",
-  "deppen",
-  "derek",
-  "derf",
-  "derhalve",
-  "detineren",
-  "devalueer",
-  "diaken",
-  "dicht",
-  "dictaat",
-  "dief",
-  "digitaal",
-  "dijbreuk",
-  "dijkmans",
-  "dimbaar",
-  "dinsdag",
-  "diode",
-  "dirigeer",
-  "disbalans",
-  "dobermann",
-  "doenbaar",
-  "doerak",
-  "dogma",
-  "dokhaven",
-  "dokwerker",
-  "doling",
-  "dolphijn",
-  "dolven",
-  "dombo",
-  "dooraderd",
-  "dopeling",
-  "doping",
-  "draderig",
-  "drama",
-  "drenkbak",
-  "dreumes",
-  "drol",
-  "drug",
-  "duaal",
-  "dublin",
-  "duplicaat",
-  "durven",
-  "dusdanig",
-  "dutchbat",
-  "dutje",
-  "dutten",
-  "duur",
-  "duwwerk",
-  "dwaal",
-  "dweil",
-  "dwing",
-  "dyslexie",
-  "ecostroom",
-  "ecotaks",
-  "educatie",
-  "eeckhout",
-  "eede",
-  "eemland",
-  "eencellig",
-  "eeneiig",
-  "eenruiter",
-  "eenwinter",
-  "eerenberg",
-  "eerrover",
-  "eersel",
-  "eetmaal",
-  "efteling",
-  "egaal",
-  "egtberts",
-  "eickhoff",
-  "eidooier",
-  "eiland",
-  "eind",
-  "eisden",
-  "ekster",
-  "elburg",
-  "elevatie",
-  "elfkoppig",
-  "elfrink",
-  "elftal",
-  "elimineer",
-  "elleboog",
-  "elma",
-  "elodie",
-  "elsa",
-  "embleem",
-  "embolie",
-  "emoe",
-  "emonds",
-  "emplooi",
-  "enduro",
-  "enfin",
-  "engageer",
-  "entourage",
-  "entstof",
-  "epileer",
-  "episch",
-  "eppo",
-  "erasmus",
-  "erboven",
-  "erebaan",
-  "erelijst",
-  "ereronden",
-  "ereteken",
-  "erfhuis",
-  "erfwet",
-  "erger",
-  "erica",
-  "ermitage",
-  "erna",
-  "ernie",
-  "erts",
-  "ertussen",
-  "eruitzien",
-  "ervaar",
-  "erven",
-  "erwt",
-  "esbeek",
-  "escort",
-  "esdoorn",
-  "essing",
-  "etage",
-  "eter",
-  "ethanol",
-  "ethicus",
-  "etholoog",
-  "eufonisch",
-  "eurocent",
-  "evacuatie",
-  "exact",
-  "examen",
-  "executant",
-  "exen",
-  "exit",
-  "exogeen",
-  "exotherm",
-  "expeditie",
-  "expletief",
-  "expres",
-  "extase",
-  "extinctie",
-  "faal",
-  "faam",
-  "fabel",
-  "facultair",
-  "fakir",
-  "fakkel",
-  "faliekant",
-  "fallisch",
-  "famke",
-  "fanclub",
-  "fase",
-  "fatsoen",
-  "fauna",
-  "federaal",
-  "feedback",
-  "feest",
-  "feilbaar",
-  "feitelijk",
-  "felblauw",
-  "figurante",
-  "fiod",
-  "fitheid",
-  "fixeer",
-  "flap",
-  "fleece",
-  "fleur",
-  "flexibel",
-  "flits",
-  "flos",
-  "flow",
-  "fluweel",
-  "foezelen",
-  "fokkelman",
-  "fokpaard",
-  "fokvee",
-  "folder",
-  "follikel",
-  "folmer",
-  "folteraar",
-  "fooi",
-  "foolen",
-  "forfait",
-  "forint",
-  "formule",
-  "fornuis",
-  "fosfaat",
-  "foxtrot",
-  "foyer",
-  "fragiel",
-  "frater",
-  "freak",
-  "freddie",
-  "fregat",
-  "freon",
-  "frijnen",
-  "fructose",
-  "frunniken",
-  "fuiven",
-  "funshop",
-  "furieus",
-  "fysica",
-  "gadget",
-  "galder",
-  "galei",
-  "galg",
-  "galvlieg",
-  "galzuur",
-  "ganesh",
-  "gaswet",
-  "gaza",
-  "gazelle",
-  "geaaid",
-  "gebiecht",
-  "gebufferd",
-  "gedijd",
-  "geef",
-  "geflanst",
-  "gefreesd",
-  "gegaan",
-  "gegijzeld",
-  "gegniffel",
-  "gegraaid",
-  "gehikt",
-  "gehobbeld",
-  "gehucht",
-  "geiser",
-  "geiten",
-  "gekaakt",
-  "gekheid",
-  "gekijf",
-  "gekmakend",
-  "gekocht",
-  "gekskap",
-  "gekte",
-  "gelubberd",
-  "gemiddeld",
-  "geordend",
-  "gepoederd",
-  "gepuft",
-  "gerda",
-  "gerijpt",
-  "geseald",
-  "geshockt",
-  "gesierd",
-  "geslaagd",
-  "gesnaaid",
-  "getracht",
-  "getwijfel",
-  "geuit",
-  "gevecht",
-  "gevlagd",
-  "gewicht",
-  "gezaagd",
-  "gezocht",
-  "ghanees",
-  "giebelen",
-  "giechel",
-  "giepmans",
-  "gips",
-  "giraal",
-  "gistachtig",
-  "gitaar",
-  "glaasje",
-  "gletsjer",
-  "gleuf",
-  "glibberen",
-  "glijbaan",
-  "gloren",
-  "gluipen",
-  "gluren",
-  "gluur",
-  "gnoe",
-  "goddelijk",
-  "godgans",
-  "godschalk",
-  "godzalig",
-  "goeierd",
-  "gogme",
-  "goklustig",
-  "gokwereld",
-  "gonggrijp",
-  "gonje",
-  "goor",
-  "grabbel",
-  "graf",
-  "graveer",
-  "grif",
-  "grolleman",
-  "grom",
-  "groosman",
-  "grubben",
-  "gruijs",
-  "grut",
-  "guacamole",
-  "guido",
-  "guppy",
-  "haazen",
-  "hachelijk",
-  "haex",
-  "haiku",
-  "hakhout",
-  "hakken",
-  "hanegem",
-  "hans",
-  "hanteer",
-  "harrie",
-  "hazebroek",
-  "hedonist",
-  "heil",
-  "heineken",
-  "hekhuis",
-  "hekman",
-  "helbig",
-  "helga",
-  "helwegen",
-  "hengelaar",
-  "herkansen",
-  "hermafrodiet",
-  "hertaald",
-  "hiaat",
-  "hikspoors",
-  "hitachi",
-  "hitparade",
-  "hobo",
-  "hoeve",
-  "holocaust",
-  "hond",
-  "honnepon",
-  "hoogacht",
-  "hotelbed",
-  "hufter",
-  "hugo",
-  "huilbier",
-  "hulk",
-  "humus",
-  "huwbaar",
-  "huwelijk",
-  "hype",
-  "iconisch",
-  "idema",
-  "ideogram",
-  "idolaat",
-  "ietje",
-  "ijker",
-  "ijkheid",
-  "ijklijn",
-  "ijkmaat",
-  "ijkwezen",
-  "ijmuiden",
-  "ijsbox",
-  "ijsdag",
-  "ijselijk",
-  "ijskoud",
-  "ilse",
-  "immuun",
-  "impliceer",
-  "impuls",
-  "inbijten",
-  "inbuigen",
-  "indijken",
-  "induceer",
-  "indy",
-  "infecteer",
-  "inhaak",
-  "inkijk",
-  "inluiden",
-  "inmijnen",
-  "inoefenen",
-  "inpolder",
-  "inrijden",
-  "inslaan",
-  "invitatie",
-  "inwaaien",
-  "ionisch",
-  "isaac",
-  "isolatie",
-  "isotherm",
-  "isra",
-  "italiaan",
-  "ivoor",
-  "jacobs",
-  "jakob",
-  "jammen",
-  "jampot",
-  "jarig",
-  "jehova",
-  "jenever",
-  "jezus",
-  "joana",
-  "jobdienst",
-  "josua",
-  "joule",
-  "juich",
-  "jurk",
-  "juut",
-  "kaas",
-  "kabelaar",
-  "kabinet",
-  "kagenaar",
-  "kajuit",
-  "kalebas",
-  "kalm",
-  "kanjer",
-  "kapucijn",
-  "karregat",
-  "kart",
-  "katvanger",
-  "katwijk",
-  "kegelaar",
-  "keiachtig",
-  "keizer",
-  "kenletter",
-  "kerdijk",
-  "keus",
-  "kevlar",
-  "kezen",
-  "kickback",
-  "kieviet",
-  "kijken",
-  "kikvors",
-  "kilheid",
-  "kilobit",
-  "kilsdonk",
-  "kipschnitzel",
-  "kissebis",
-  "klad",
-  "klagelijk",
-  "klak",
-  "klapbaar",
-  "klaver",
-  "klene",
-  "klets",
-  "klijnhout",
-  "klit",
-  "klok",
-  "klonen",
-  "klotefilm",
-  "kluif",
-  "klumper",
-  "klus",
-  "knabbel",
-  "knagen",
-  "knaven",
-  "kneedbaar",
-  "knmi",
-  "knul",
-  "knus",
-  "kokhals",
-  "komiek",
-  "komkommer",
-  "kompaan",
-  "komrij",
-  "komvormig",
-  "koning",
-  "kopbal",
-  "kopklep",
-  "kopnagel",
-  "koppejan",
-  "koptekst",
-  "kopwand",
-  "koraal",
-  "kosmisch",
-  "kostbaar",
-  "kram",
-  "kraneveld",
-  "kras",
-  "kreling",
-  "krengen",
-  "kribbe",
-  "krik",
-  "kruid",
-  "krulbol",
-  "kuijper",
-  "kuipbank",
-  "kuit",
-  "kuiven",
-  "kutsmoes",
-  "kuub",
-  "kwak",
-  "kwatong",
-  "kwetsbaar",
-  "kwezelaar",
-  "kwijnen",
-  "kwik",
-  "kwinkslag",
-  "kwitantie",
-  "lading",
-  "lakbeits",
-  "lakken",
-  "laklaag",
-  "lakmoes",
-  "lakwijk",
-  "lamheid",
-  "lamp",
-  "lamsbout",
-  "lapmiddel",
-  "larve",
-  "laser",
-  "latijn",
-  "latuw",
-  "lawaai",
-  "laxeerpil",
-  "lebberen",
-  "ledeboer",
-  "leefbaar",
-  "leeman",
-  "lefdoekje",
-  "lefhebber",
-  "legboor",
-  "legsel",
-  "leguaan",
-  "leiplaat",
-  "lekdicht",
-  "lekrijden",
-  "leksteen",
-  "lenen",
-  "leraar",
-  "lesbienne",
-  "leugenaar",
-  "leut",
-  "lexicaal",
-  "lezing",
-  "lieten",
-  "liggeld",
-  "lijdzaam",
-  "lijk",
-  "lijmstang",
-  "lijnschip",
-  "likdoorn",
-  "likken",
-  "liksteen",
-  "limburg",
-  "link",
-  "linoleum",
-  "lipbloem",
-  "lipman",
-  "lispelen",
-  "lissabon",
-  "litanie",
-  "liturgie",
-  "lochem",
-  "loempia",
-  "loesje",
-  "logheid",
-  "lonen",
-  "lonneke",
-  "loom",
-  "loos",
-  "losbaar",
-  "loslaten",
-  "losplaats",
-  "loting",
-  "lotnummer",
-  "lots",
-  "louie",
-  "lourdes",
-  "louter",
-  "lowbudget",
-  "luijten",
-  "luikenaar",
-  "luilak",
-  "luipaard",
-  "luizenbos",
-  "lulkoek",
-  "lumen",
-  "lunzen",
-  "lurven",
-  "lutjeboer",
-  "luttel",
-  "lutz",
-  "luuk",
-  "luwte",
-  "luyendijk",
-  "lyceum",
-  "lynx",
-  "maakbaar",
-  "magdalena",
-  "malheid",
-  "manchet",
-  "manfred",
-  "manhaftig",
-  "mank",
-  "mantel",
-  "marion",
-  "marxist",
-  "masmeijer",
-  "massaal",
-  "matsen",
-  "matverf",
-  "matze",
-  "maude",
-  "mayonaise",
-  "mechanica",
-  "meifeest",
-  "melodie",
-  "meppelink",
-  "midvoor",
-  "midweeks",
-  "midzomer",
-  "miezel",
-  "mijnraad",
-  "minus",
-  "mirck",
-  "mirte",
-  "mispakken",
-  "misraden",
-  "miswassen",
-  "mitella",
-  "moker",
-  "molecule",
-  "mombakkes",
-  "moonen",
-  "mopperaar",
-  "moraal",
-  "morgana",
-  "mormel",
-  "mosselaar",
-  "motregen",
-  "mouw",
-  "mufheid",
-  "mutueel",
-  "muzelman",
-  "naaidoos",
-  "naald",
-  "nadeel",
-  "nadruk",
-  "nagy",
-  "nahon",
-  "naima",
-  "nairobi",
-  "napalm",
-  "napels",
-  "napijn",
-  "napoleon",
-  "narigheid",
-  "narratief",
-  "naseizoen",
-  "nasibal",
-  "navigatie",
-  "nawijn",
-  "negatief",
-  "nekletsel",
-  "nekwervel",
-  "neolatijn",
-  "neonataal",
-  "neptunus",
-  "nerd",
-  "nest",
-  "neuzelaar",
-  "nihiliste",
-  "nijenhuis",
-  "nijging",
-  "nijhoff",
-  "nijl",
-  "nijptang",
-  "nippel",
-  "nokkenas",
-  "noordam",
-  "noren",
-  "normaal",
-  "nottelman",
-  "notulant",
-  "nout",
-  "nuance",
-  "nuchter",
-  "nudorp",
-  "nulde",
-  "nullijn",
-  "nulmeting",
-  "nunspeet",
-  "nylon",
-  "obelisk",
-  "object",
-  "oblie",
-  "obsceen",
-  "occlusie",
-  "oceaan",
-  "ochtend",
-  "ockhuizen",
-  "oerdom",
-  "oergezond",
-  "oerlaag",
-  "oester",
-  "okhuijsen",
-  "olifant",
-  "olijfboer",
-  "omaans",
-  "ombudsman",
-  "omdat",
-  "omdijken",
-  "omdoen",
-  "omgebouwd",
-  "omkeer",
-  "omkomen",
-  "ommegaand",
-  "ommuren",
-  "omroep",
-  "omruil",
-  "omslaan",
-  "omsmeden",
-  "omvaar",
-  "onaardig",
-  "onedel",
-  "onenig",
-  "onheilig",
-  "onrecht",
-  "onroerend",
-  "ontcijfer",
-  "onthaal",
-  "ontvallen",
-  "ontzadeld",
-  "onzacht",
-  "onzin",
-  "onzuiver",
-  "oogappel",
-  "ooibos",
-  "ooievaar",
-  "ooit",
-  "oorarts",
-  "oorhanger",
-  "oorijzer",
-  "oorklep",
-  "oorschelp",
-  "oorworm",
-  "oorzaak",
-  "opdagen",
-  "opdien",
-  "opdweilen",
-  "opel",
-  "opgebaard",
-  "opinie",
-  "opjutten",
-  "opkijken",
-  "opklaar",
-  "opkuisen",
-  "opkwam",
-  "opnaaien",
-  "opossum",
-  "opsieren",
-  "opsmeer",
-  "optreden",
-  "opvijzel",
-  "opvlammen",
-  "opwind",
-  "oraal",
-  "orchidee",
-  "orkest",
-  "ossuarium",
-  "ostendorf",
-  "oublie",
-  "oudachtig",
-  "oudbakken",
-  "oudnoors",
-  "oudshoorn",
-  "oudtante",
-  "oven",
-  "over",
-  "oxidant",
-  "pablo",
-  "pacht",
-  "paktafel",
-  "pakzadel",
-  "paljas",
-  "panharing",
-  "papfles",
-  "paprika",
-  "parochie",
-  "paus",
-  "pauze",
-  "paviljoen",
-  "peek",
-  "pegel",
-  "peigeren",
-  "pekela",
-  "pendant",
-  "penibel",
-  "pepmiddel",
-  "peptalk",
-  "periferie",
-  "perron",
-  "pessarium",
-  "peter",
-  "petfles",
-  "petgat",
-  "peuk",
-  "pfeifer",
-  "picknick",
-  "pief",
-  "pieneman",
-  "pijlkruid",
-  "pijnacker",
-  "pijpelink",
-  "pikdonker",
-  "pikeer",
-  "pilaar",
-  "pionier",
-  "pipet",
-  "piscine",
-  "pissebed",
-  "pitchen",
-  "pixel",
-  "plamuren",
-  "plan",
-  "plausibel",
-  "plegen",
-  "plempen",
-  "pleonasme",
-  "plezant",
-  "podoloog",
-  "pofmouw",
-  "pokdalig",
-  "ponywagen",
-  "popachtig",
-  "popidool",
-  "porren",
-  "positie",
-  "potten",
-  "pralen",
-  "prezen",
-  "prijzen",
-  "privaat",
-  "proef",
-  "prooi",
-  "prozawerk",
-  "pruik",
-  "prul",
-  "publiceer",
-  "puck",
-  "puilen",
-  "pukkelig",
-  "pulveren",
-  "pupil",
-  "puppy",
-  "purmerend",
-  "pustjens",
-  "putemmer",
-  "puzzelaar",
-  "queenie",
-  "quiche",
-  "raam",
-  "raar",
-  "raat",
-  "raes",
-  "ralf",
-  "rally",
-  "ramona",
-  "ramselaar",
-  "ranonkel",
-  "rapen",
-  "rapunzel",
-  "rarekiek",
-  "rarigheid",
-  "rattenhol",
-  "ravage",
-  "reactie",
-  "recreant",
-  "redacteur",
-  "redster",
-  "reewild",
-  "regie",
-  "reijnders",
-  "rein",
-  "replica",
-  "revanche",
-  "rigide",
-  "rijbaan",
-  "rijdansen",
-  "rijgen",
-  "rijkdom",
-  "rijles",
-  "rijnwijn",
-  "rijpma",
-  "rijstafel",
-  "rijtaak",
-  "rijzwepen",
-  "rioleer",
-  "ripdeal",
-  "riphagen",
-  "riskant",
-  "rits",
-  "rivaal",
-  "robbedoes",
-  "robot",
-  "rockact",
-  "rodijk",
-  "rogier",
-  "rohypnol",
-  "rollaag",
-  "rolpaal",
-  "roltafel",
-  "roof",
-  "roon",
-  "roppen",
-  "rosbief",
-  "rosharig",
-  "rosielle",
-  "rotan",
-  "rotleven",
-  "rotten",
-  "rotvaart",
-  "royaal",
-  "royeer",
-  "rubato",
-  "ruby",
-  "ruche",
-  "rudge",
-  "ruggetje",
-  "rugnummer",
-  "rugpijn",
-  "rugtitel",
-  "rugzak",
-  "ruilbaar",
-  "ruis",
-  "ruit",
-  "rukwind",
-  "rulijs",
-  "rumoeren",
-  "rumsdorp",
-  "rumtaart",
-  "runnen",
-  "russchen",
-  "ruwkruid",
-  "saboteer",
-  "saksisch",
-  "salade",
-  "salpeter",
-  "sambabal",
-  "samsam",
-  "satelliet",
-  "satineer",
-  "saus",
-  "scampi",
-  "scarabee",
-  "scenario",
-  "schobben",
-  "schubben",
-  "scout",
-  "secessie",
-  "secondair",
-  "seculair",
-  "sediment",
-  "seeland",
-  "settelen",
-  "setwinst",
-  "sheriff",
-  "shiatsu",
-  "siciliaan",
-  "sidderaal",
-  "sigma",
-  "sijben",
-  "silvana",
-  "simkaart",
-  "sinds",
-  "situatie",
-  "sjaak",
-  "sjardijn",
-  "sjezen",
-  "sjor",
-  "skinhead",
-  "skylab",
-  "slamixen",
-  "sleijpen",
-  "slijkerig",
-  "slordig",
-  "slowaak",
-  "sluieren",
-  "smadelijk",
-  "smiecht",
-  "smoel",
-  "smos",
-  "smukken",
-  "snackcar",
-  "snavel",
-  "sneaker",
-  "sneu",
-  "snijdbaar",
-  "snit",
-  "snorder",
-  "soapbox",
-  "soetekouw",
-  "soigneren",
-  "sojaboon",
-  "solo",
-  "solvabel",
-  "somber",
-  "sommatie",
-  "soort",
-  "soppen",
-  "sopraan",
-  "soundbar",
-  "spanen",
-  "spawater",
-  "spijgat",
-  "spinaal",
-  "spionage",
-  "spiraal",
-  "spleet",
-  "splijt",
-  "spoed",
-  "sporen",
-  "spul",
-  "spuug",
-  "spuw",
-  "stalen",
-  "standaard",
-  "star",
-  "stefan",
-  "stencil",
-  "stijf",
-  "stil",
-  "stip",
-  "stopdas",
-  "stoten",
-  "stoven",
-  "straat",
-  "strobbe",
-  "strubbel",
-  "stucadoor",
-  "stuif",
-  "stukadoor",
-  "subhoofd",
-  "subregent",
-  "sudoku",
-  "sukade",
-  "sulfaat",
-  "surinaams",
-  "suus",
-  "syfilis",
-  "symboliek",
-  "sympathie",
-  "synagoge",
-  "synchroon",
-  "synergie",
-  "systeem",
-  "taanderij",
-  "tabak",
-  "tachtig",
-  "tackelen",
-  "taiwanees",
-  "talman",
-  "tamheid",
-  "tangaslip",
-  "taps",
-  "tarkan",
-  "tarwe",
-  "tasman",
-  "tatjana",
-  "taxameter",
-  "teil",
-  "teisman",
-  "telbaar",
-  "telco",
-  "telganger",
-  "telstar",
-  "tenant",
-  "tepel",
-  "terzet",
-  "testament",
-  "ticket",
-  "tiesinga",
-  "tijdelijk",
-  "tika",
-  "tiksel",
-  "tilleman",
-  "timbaal",
-  "tinsteen",
-  "tiplijn",
-  "tippelaar",
-  "tjirpen",
-  "toezeggen",
-  "tolbaas",
-  "tolgeld",
-  "tolhek",
-  "tolo",
-  "tolpoort",
-  "toltarief",
-  "tolvrij",
-  "tomaat",
-  "tondeuse",
-  "toog",
-  "tooi",
-  "toonbaar",
-  "toos",
-  "topclub",
-  "toppen",
-  "toptalent",
-  "topvrouw",
-  "toque",
-  "torment",
-  "tornado",
-  "tosti",
-  "totdat",
-  "toucheer",
-  "toulouse",
-  "tournedos",
-  "tout",
-  "trabant",
-  "tragedie",
-  "trailer",
-  "traject",
-  "traktaat",
-  "trauma",
-  "tray",
-  "trechter",
-  "tred",
-  "tref",
-  "treur",
-  "troebel",
-  "tros",
-  "trucage",
-  "truffel",
-  "tsaar",
-  "tucht",
-  "tuenter",
-  "tuitelig",
-  "tukje",
-  "tuktuk",
-  "tulp",
-  "tuma",
-  "tureluurs",
-  "twijfel",
-  "twitteren",
-  "tyfoon",
-  "typograaf",
-  "ugandees",
-  "uiachtig",
-  "uier",
-  "uisnipper",
-  "ultiem",
-  "unitair",
-  "uranium",
-  "urbaan",
-  "urendag",
-  "ursula",
-  "uurcirkel",
-  "uurglas",
-  "uzelf",
-  "vaat",
-  "vakantie",
-  "vakleraar",
-  "valbijl",
-  "valpartij",
-  "valreep",
-  "valuatie",
-  "vanmiddag",
-  "vanonder",
-  "varaan",
-  "varken",
-  "vaten",
-  "veenbes",
-  "veeteler",
-  "velgrem",
-  "vellekoop",
-  "velvet",
-  "veneberg",
-  "venlo",
-  "vent",
-  "venusberg",
-  "venw",
-  "veredeld",
-  "verf",
-  "verhaaf",
-  "vermaak",
-  "vernaaid",
-  "verraad",
-  "vers",
-  "veruit",
-  "verzaagd",
-  "vetachtig",
-  "vetlok",
-  "vetmesten",
-  "veto",
-  "vetrek",
-  "vetstaart",
-  "vetten",
-  "veurink",
-  "viaduct",
-  "vibrafoon",
-  "vicariaat",
-  "vieux",
-  "vieveen",
-  "vijfvoud",
-  "villa",
-  "vilt",
-  "vimmetje",
-  "vindbaar",
-  "vips",
-  "virtueel",
-  "visdieven",
-  "visee",
-  "visie",
-  "vlaag",
-  "vleugel",
-  "vmbo",
-  "vocht",
-  "voesenek",
-  "voicemail",
-  "voip",
-  "volg",
-  "vork",
-  "vorselaar",
-  "voyeur",
-  "vracht",
-  "vrekkig",
-  "vreten",
-  "vrije",
-  "vrozen",
-  "vrucht",
-  "vucht",
-  "vugt",
-  "vulkaan",
-  "vulmiddel",
-  "vulva",
-  "vuren",
-  "waas",
-  "wacht",
-  "wadvogel",
-  "wafel",
-  "waffel",
-  "walhalla",
-  "walnoot",
-  "walraven",
-  "wals",
-  "walvis",
-  "wandaad",
-  "wanen",
-  "wanmolen",
-  "want",
-  "warklomp",
-  "warm",
-  "wasachtig",
-  "wasteil",
-  "watt",
-  "webhandel",
-  "weblog",
-  "webpagina",
-  "webzine",
-  "wedereis",
-  "wedstrijd",
-  "weeda",
-  "weert",
-  "wegmaaien",
-  "wegscheer",
-  "wekelijks",
-  "wekken",
-  "wekroep",
-  "wektoon",
-  "weldaad",
-  "welwater",
-  "wendbaar",
-  "wenkbrauw",
-  "wens",
-  "wentelaar",
-  "wervel",
-  "wesseling",
-  "wetboek",
-  "wetmatig",
-  "whirlpool",
-  "wijbrands",
-  "wijdbeens",
-  "wijk",
-  "wijnbes",
-  "wijting",
-  "wild",
-  "wimpelen",
-  "wingebied",
-  "winplaats",
-  "winter",
-  "winzucht",
-  "wipstaart",
-  "wisgerhof",
-  "withaar",
-  "witmaker",
-  "wokkel",
-  "wolf",
-  "wonenden",
-  "woning",
-  "worden",
-  "worp",
-  "wortel",
-  "wrat",
-  "wrijf",
-  "wringen",
-  "yoghurt",
-  "ypsilon",
-  "zaaijer",
-  "zaak",
-  "zacharias",
-  "zakelijk",
-  "zakkam",
-  "zakwater",
-  "zalf",
-  "zalig",
-  "zaniken",
-  "zebracode",
-  "zeeblauw",
-  "zeef",
-  "zeegaand",
-  "zeeuw",
-  "zege",
-  "zegje",
-  "zeil",
-  "zesbaans",
-  "zesenhalf",
-  "zeskantig",
-  "zesmaal",
-  "zetbaas",
-  "zetpil",
-  "zeulen",
-  "ziezo",
-  "zigzag",
-  "zijaltaar",
-  "zijbeuk",
-  "zijlijn",
-  "zijmuur",
-  "zijn",
-  "zijwaarts",
-  "zijzelf",
-  "zilt",
-  "zimmerman",
-  "zinledig",
-  "zinnelijk",
-  "zionist",
-  "zitdag",
-  "zitruimte",
-  "zitzak",
-  "zoal",
-  "zodoende",
-  "zoekbots",
-  "zoem",
-  "zoiets",
-  "zojuist",
-  "zondaar",
-  "zotskap",
-  "zottebol",
-  "zucht",
-  "zuivel",
-  "zulk",
-  "zult",
-  "zuster",
-  "zuur",
-  "zweedijk",
-  "zwendel",
-  "zwepen",
-  "zwiep",
-  "zwijmel",
-  "zworen"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/pt.rs b/networks/monero/wallet/seed/src/words/pt.rs
deleted file mode 100644
index cede0ac5..00000000
--- a/networks/monero/wallet/seed/src/words/pt.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "abaular",
-  "abdominal",
-  "abeto",
-  "abissinio",
-  "abjeto",
-  "ablucao",
-  "abnegar",
-  "abotoar",
-  "abrutalhar",
-  "absurdo",
-  "abutre",
-  "acautelar",
-  "accessorios",
-  "acetona",
-  "achocolatado",
-  "acirrar",
-  "acne",
-  "acovardar",
-  "acrostico",
-  "actinomicete",
-  "acustico",
-  "adaptavel",
-  "adeus",
-  "adivinho",
-  "adjunto",
-  "admoestar",
-  "adnominal",
-  "adotivo",
-  "adquirir",
-  "adriatico",
-  "adsorcao",
-  "adutora",
-  "advogar",
-  "aerossol",
-  "afazeres",
-  "afetuoso",
-  "afixo",
-  "afluir",
-  "afortunar",
-  "afrouxar",
-  "aftosa",
-  "afunilar",
-  "agentes",
-  "agito",
-  "aglutinar",
-  "aiatola",
-  "aimore",
-  "aino",
-  "aipo",
-  "airoso",
-  "ajeitar",
-  "ajoelhar",
-  "ajudante",
-  "ajuste",
-  "alazao",
-  "albumina",
-  "alcunha",
-  "alegria",
-  "alexandre",
-  "alforriar",
-  "alguns",
-  "alhures",
-  "alivio",
-  "almoxarife",
-  "alotropico",
-  "alpiste",
-  "alquimista",
-  "alsaciano",
-  "altura",
-  "aluviao",
-  "alvura",
-  "amazonico",
-  "ambulatorio",
-  "ametodico",
-  "amizades",
-  "amniotico",
-  "amovivel",
-  "amurada",
-  "anatomico",
-  "ancorar",
-  "anexo",
-  "anfora",
-  "aniversario",
-  "anjo",
-  "anotar",
-  "ansioso",
-  "anturio",
-  "anuviar",
-  "anverso",
-  "anzol",
-  "aonde",
-  "apaziguar",
-  "apito",
-  "aplicavel",
-  "apoteotico",
-  "aprimorar",
-  "aprumo",
-  "apto",
-  "apuros",
-  "aquoso",
-  "arauto",
-  "arbusto",
-  "arduo",
-  "aresta",
-  "arfar",
-  "arguto",
-  "aritmetico",
-  "arlequim",
-  "armisticio",
-  "aromatizar",
-  "arpoar",
-  "arquivo",
-  "arrumar",
-  "arsenio",
-  "arturiano",
-  "aruaque",
-  "arvores",
-  "asbesto",
-  "ascorbico",
-  "aspirina",
-  "asqueroso",
-  "assustar",
-  "astuto",
-  "atazanar",
-  "ativo",
-  "atletismo",
-  "atmosferico",
-  "atormentar",
-  "atroz",
-  "aturdir",
-  "audivel",
-  "auferir",
-  "augusto",
-  "aula",
-  "aumento",
-  "aurora",
-  "autuar",
-  "avatar",
-  "avexar",
-  "avizinhar",
-  "avolumar",
-  "avulso",
-  "axiomatico",
-  "azerbaijano",
-  "azimute",
-  "azoto",
-  "azulejo",
-  "bacteriologista",
-  "badulaque",
-  "baforada",
-  "baixote",
-  "bajular",
-  "balzaquiana",
-  "bambuzal",
-  "banzo",
-  "baoba",
-  "baqueta",
-  "barulho",
-  "bastonete",
-  "batuta",
-  "bauxita",
-  "bavaro",
-  "bazuca",
-  "bcrepuscular",
-  "beato",
-  "beduino",
-  "begonia",
-  "behaviorista",
-  "beisebol",
-  "belzebu",
-  "bemol",
-  "benzido",
-  "beocio",
-  "bequer",
-  "berro",
-  "besuntar",
-  "betume",
-  "bexiga",
-  "bezerro",
-  "biatlon",
-  "biboca",
-  "bicuspide",
-  "bidirecional",
-  "bienio",
-  "bifurcar",
-  "bigorna",
-  "bijuteria",
-  "bimotor",
-  "binormal",
-  "bioxido",
-  "bipolarizacao",
-  "biquini",
-  "birutice",
-  "bisturi",
-  "bituca",
-  "biunivoco",
-  "bivalve",
-  "bizarro",
-  "blasfemo",
-  "blenorreia",
-  "blindar",
-  "bloqueio",
-  "blusao",
-  "boazuda",
-  "bofete",
-  "bojudo",
-  "bolso",
-  "bombordo",
-  "bonzo",
-  "botina",
-  "boquiaberto",
-  "bostoniano",
-  "botulismo",
-  "bourbon",
-  "bovino",
-  "boximane",
-  "bravura",
-  "brevidade",
-  "britar",
-  "broxar",
-  "bruno",
-  "bruxuleio",
-  "bubonico",
-  "bucolico",
-  "buda",
-  "budista",
-  "bueiro",
-  "buffer",
-  "bugre",
-  "bujao",
-  "bumerangue",
-  "burundines",
-  "busto",
-  "butique",
-  "buzios",
-  "caatinga",
-  "cabuqui",
-  "cacunda",
-  "cafuzo",
-  "cajueiro",
-  "camurca",
-  "canudo",
-  "caquizeiro",
-  "carvoeiro",
-  "casulo",
-  "catuaba",
-  "cauterizar",
-  "cebolinha",
-  "cedula",
-  "ceifeiro",
-  "celulose",
-  "cerzir",
-  "cesto",
-  "cetro",
-  "ceus",
-  "cevar",
-  "chavena",
-  "cheroqui",
-  "chita",
-  "chovido",
-  "chuvoso",
-  "ciatico",
-  "cibernetico",
-  "cicuta",
-  "cidreira",
-  "cientistas",
-  "cifrar",
-  "cigarro",
-  "cilio",
-  "cimo",
-  "cinzento",
-  "cioso",
-  "cipriota",
-  "cirurgico",
-  "cisto",
-  "citrico",
-  "ciumento",
-  "civismo",
-  "clavicula",
-  "clero",
-  "clitoris",
-  "cluster",
-  "coaxial",
-  "cobrir",
-  "cocota",
-  "codorniz",
-  "coexistir",
-  "cogumelo",
-  "coito",
-  "colusao",
-  "compaixao",
-  "comutativo",
-  "contentamento",
-  "convulsivo",
-  "coordenativa",
-  "coquetel",
-  "correto",
-  "corvo",
-  "costureiro",
-  "cotovia",
-  "covil",
-  "cozinheiro",
-  "cretino",
-  "cristo",
-  "crivo",
-  "crotalo",
-  "cruzes",
-  "cubo",
-  "cucuia",
-  "cueiro",
-  "cuidar",
-  "cujo",
-  "cultural",
-  "cunilingua",
-  "cupula",
-  "curvo",
-  "custoso",
-  "cutucar",
-  "czarismo",
-  "dablio",
-  "dacota",
-  "dados",
-  "daguerreotipo",
-  "daiquiri",
-  "daltonismo",
-  "damista",
-  "dantesco",
-  "daquilo",
-  "darwinista",
-  "dasein",
-  "dativo",
-  "deao",
-  "debutantes",
-  "decurso",
-  "deduzir",
-  "defunto",
-  "degustar",
-  "dejeto",
-  "deltoide",
-  "demover",
-  "denunciar",
-  "deputado",
-  "deque",
-  "dervixe",
-  "desvirtuar",
-  "deturpar",
-  "deuteronomio",
-  "devoto",
-  "dextrose",
-  "dezoito",
-  "diatribe",
-  "dicotomico",
-  "didatico",
-  "dietista",
-  "difuso",
-  "digressao",
-  "diluvio",
-  "diminuto",
-  "dinheiro",
-  "dinossauro",
-  "dioxido",
-  "diplomatico",
-  "dique",
-  "dirimivel",
-  "disturbio",
-  "diurno",
-  "divulgar",
-  "dizivel",
-  "doar",
-  "dobro",
-  "docura",
-  "dodoi",
-  "doer",
-  "dogue",
-  "doloso",
-  "domo",
-  "donzela",
-  "doping",
-  "dorsal",
-  "dossie",
-  "dote",
-  "doutro",
-  "doze",
-  "dravidico",
-  "dreno",
-  "driver",
-  "dropes",
-  "druso",
-  "dubnio",
-  "ducto",
-  "dueto",
-  "dulija",
-  "dundum",
-  "duodeno",
-  "duquesa",
-  "durou",
-  "duvidoso",
-  "duzia",
-  "ebano",
-  "ebrio",
-  "eburneo",
-  "echarpe",
-  "eclusa",
-  "ecossistema",
-  "ectoplasma",
-  "ecumenismo",
-  "eczema",
-  "eden",
-  "editorial",
-  "edredom",
-  "edulcorar",
-  "efetuar",
-  "efigie",
-  "efluvio",
-  "egiptologo",
-  "egresso",
-  "egua",
-  "einsteiniano",
-  "eira",
-  "eivar",
-  "eixos",
-  "ejetar",
-  "elastomero",
-  "eldorado",
-  "elixir",
-  "elmo",
-  "eloquente",
-  "elucidativo",
-  "emaranhar",
-  "embutir",
-  "emerito",
-  "emfa",
-  "emitir",
-  "emotivo",
-  "empuxo",
-  "emulsao",
-  "enamorar",
-  "encurvar",
-  "enduro",
-  "enevoar",
-  "enfurnar",
-  "enguico",
-  "enho",
-  "enigmista",
-  "enlutar",
-  "enormidade",
-  "enpreendimento",
-  "enquanto",
-  "enriquecer",
-  "enrugar",
-  "entusiastico",
-  "enunciar",
-  "envolvimento",
-  "enxuto",
-  "enzimatico",
-  "eolico",
-  "epiteto",
-  "epoxi",
-  "epura",
-  "equivoco",
-  "erario",
-  "erbio",
-  "ereto",
-  "erguido",
-  "erisipela",
-  "ermo",
-  "erotizar",
-  "erros",
-  "erupcao",
-  "ervilha",
-  "esburacar",
-  "escutar",
-  "esfuziante",
-  "esguio",
-  "esloveno",
-  "esmurrar",
-  "esoterismo",
-  "esperanca",
-  "espirito",
-  "espurio",
-  "essencialmente",
-  "esturricar",
-  "esvoacar",
-  "etario",
-  "eterno",
-  "etiquetar",
-  "etnologo",
-  "etos",
-  "etrusco",
-  "euclidiano",
-  "euforico",
-  "eugenico",
-  "eunuco",
-  "europio",
-  "eustaquio",
-  "eutanasia",
-  "evasivo",
-  "eventualidade",
-  "evitavel",
-  "evoluir",
-  "exaustor",
-  "excursionista",
-  "exercito",
-  "exfoliado",
-  "exito",
-  "exotico",
-  "expurgo",
-  "exsudar",
-  "extrusora",
-  "exumar",
-  "fabuloso",
-  "facultativo",
-  "fado",
-  "fagulha",
-  "faixas",
-  "fajuto",
-  "faltoso",
-  "famoso",
-  "fanzine",
-  "fapesp",
-  "faquir",
-  "fartura",
-  "fastio",
-  "faturista",
-  "fausto",
-  "favorito",
-  "faxineira",
-  "fazer",
-  "fealdade",
-  "febril",
-  "fecundo",
-  "fedorento",
-  "feerico",
-  "feixe",
-  "felicidade",
-  "felpudo",
-  "feltro",
-  "femur",
-  "fenotipo",
-  "fervura",
-  "festivo",
-  "feto",
-  "feudo",
-  "fevereiro",
-  "fezinha",
-  "fiasco",
-  "fibra",
-  "ficticio",
-  "fiduciario",
-  "fiesp",
-  "fifa",
-  "figurino",
-  "fijiano",
-  "filtro",
-  "finura",
-  "fiorde",
-  "fiquei",
-  "firula",
-  "fissurar",
-  "fitoteca",
-  "fivela",
-  "fixo",
-  "flavio",
-  "flexor",
-  "flibusteiro",
-  "flotilha",
-  "fluxograma",
-  "fobos",
-  "foco",
-  "fofura",
-  "foguista",
-  "foie",
-  "foliculo",
-  "fominha",
-  "fonte",
-  "forum",
-  "fosso",
-  "fotossintese",
-  "foxtrote",
-  "fraudulento",
-  "frevo",
-  "frivolo",
-  "frouxo",
-  "frutose",
-  "fuba",
-  "fucsia",
-  "fugitivo",
-  "fuinha",
-  "fujao",
-  "fulustreco",
-  "fumo",
-  "funileiro",
-  "furunculo",
-  "fustigar",
-  "futurologo",
-  "fuxico",
-  "fuzue",
-  "gabriel",
-  "gado",
-  "gaelico",
-  "gafieira",
-  "gaguejo",
-  "gaivota",
-  "gajo",
-  "galvanoplastico",
-  "gamo",
-  "ganso",
-  "garrucha",
-  "gastronomo",
-  "gatuno",
-  "gaussiano",
-  "gaviao",
-  "gaxeta",
-  "gazeteiro",
-  "gear",
-  "geiser",
-  "geminiano",
-  "generoso",
-  "genuino",
-  "geossinclinal",
-  "gerundio",
-  "gestual",
-  "getulista",
-  "gibi",
-  "gigolo",
-  "gilete",
-  "ginseng",
-  "giroscopio",
-  "glaucio",
-  "glacial",
-  "gleba",
-  "glifo",
-  "glote",
-  "glutonia",
-  "gnostico",
-  "goela",
-  "gogo",
-  "goitaca",
-  "golpista",
-  "gomo",
-  "gonzo",
-  "gorro",
-  "gostou",
-  "goticula",
-  "gourmet",
-  "governo",
-  "gozo",
-  "graxo",
-  "grevista",
-  "grito",
-  "grotesco",
-  "gruta",
-  "guaxinim",
-  "gude",
-  "gueto",
-  "guizo",
-  "guloso",
-  "gume",
-  "guru",
-  "gustativo",
-  "grelhado",
-  "gutural",
-  "habitue",
-  "haitiano",
-  "halterofilista",
-  "hamburguer",
-  "hanseniase",
-  "happening",
-  "harpista",
-  "hastear",
-  "haveres",
-  "hebreu",
-  "hectometro",
-  "hedonista",
-  "hegira",
-  "helena",
-  "helminto",
-  "hemorroidas",
-  "henrique",
-  "heptassilabo",
-  "hertziano",
-  "hesitar",
-  "heterossexual",
-  "heuristico",
-  "hexagono",
-  "hiato",
-  "hibrido",
-  "hidrostatico",
-  "hieroglifo",
-  "hifenizar",
-  "higienizar",
-  "hilario",
-  "himen",
-  "hino",
-  "hippie",
-  "hirsuto",
-  "historiografia",
-  "hitlerista",
-  "hodometro",
-  "hoje",
-  "holograma",
-  "homus",
-  "honroso",
-  "hoquei",
-  "horto",
-  "hostilizar",
-  "hotentote",
-  "huguenote",
-  "humilde",
-  "huno",
-  "hurra",
-  "hutu",
-  "iaia",
-  "ialorixa",
-  "iambico",
-  "iansa",
-  "iaque",
-  "iara",
-  "iatista",
-  "iberico",
-  "ibis",
-  "icar",
-  "iceberg",
-  "icosagono",
-  "idade",
-  "ideologo",
-  "idiotice",
-  "idoso",
-  "iemenita",
-  "iene",
-  "igarape",
-  "iglu",
-  "ignorar",
-  "igreja",
-  "iguaria",
-  "iidiche",
-  "ilativo",
-  "iletrado",
-  "ilharga",
-  "ilimitado",
-  "ilogismo",
-  "ilustrissimo",
-  "imaturo",
-  "imbuzeiro",
-  "imerso",
-  "imitavel",
-  "imovel",
-  "imputar",
-  "imutavel",
-  "inaveriguavel",
-  "incutir",
-  "induzir",
-  "inextricavel",
-  "infusao",
-  "ingua",
-  "inhame",
-  "iniquo",
-  "injusto",
-  "inning",
-  "inoxidavel",
-  "inquisitorial",
-  "insustentavel",
-  "intumescimento",
-  "inutilizavel",
-  "invulneravel",
-  "inzoneiro",
-  "iodo",
-  "iogurte",
-  "ioio",
-  "ionosfera",
-  "ioruba",
-  "iota",
-  "ipsilon",
-  "irascivel",
-  "iris",
-  "irlandes",
-  "irmaos",
-  "iroques",
-  "irrupcao",
-  "isca",
-  "isento",
-  "islandes",
-  "isotopo",
-  "isqueiro",
-  "israelita",
-  "isso",
-  "isto",
-  "iterbio",
-  "itinerario",
-  "itrio",
-  "iuane",
-  "iugoslavo",
-  "jabuticabeira",
-  "jacutinga",
-  "jade",
-  "jagunco",
-  "jainista",
-  "jaleco",
-  "jambo",
-  "jantarada",
-  "japones",
-  "jaqueta",
-  "jarro",
-  "jasmim",
-  "jato",
-  "jaula",
-  "javel",
-  "jazz",
-  "jegue",
-  "jeitoso",
-  "jejum",
-  "jenipapo",
-  "jeova",
-  "jequitiba",
-  "jersei",
-  "jesus",
-  "jetom",
-  "jiboia",
-  "jihad",
-  "jilo",
-  "jingle",
-  "jipe",
-  "jocoso",
-  "joelho",
-  "joguete",
-  "joio",
-  "jojoba",
-  "jorro",
-  "jota",
-  "joule",
-  "joviano",
-  "jubiloso",
-  "judoca",
-  "jugular",
-  "juizo",
-  "jujuba",
-  "juliano",
-  "jumento",
-  "junto",
-  "jururu",
-  "justo",
-  "juta",
-  "juventude",
-  "labutar",
-  "laguna",
-  "laico",
-  "lajota",
-  "lanterninha",
-  "lapso",
-  "laquear",
-  "lastro",
-  "lauto",
-  "lavrar",
-  "laxativo",
-  "lazer",
-  "leasing",
-  "lebre",
-  "lecionar",
-  "ledo",
-  "leguminoso",
-  "leitura",
-  "lele",
-  "lemure",
-  "lento",
-  "leonardo",
-  "leopardo",
-  "lepton",
-  "leque",
-  "leste",
-  "letreiro",
-  "leucocito",
-  "levitico",
-  "lexicologo",
-  "lhama",
-  "lhufas",
-  "liame",
-  "licoroso",
-  "lidocaina",
-  "liliputiano",
-  "limusine",
-  "linotipo",
-  "lipoproteina",
-  "liquidos",
-  "lirismo",
-  "lisura",
-  "liturgico",
-  "livros",
-  "lixo",
-  "lobulo",
-  "locutor",
-  "lodo",
-  "logro",
-  "lojista",
-  "lombriga",
-  "lontra",
-  "loop",
-  "loquaz",
-  "lorota",
-  "losango",
-  "lotus",
-  "louvor",
-  "luar",
-  "lubrificavel",
-  "lucros",
-  "lugubre",
-  "luis",
-  "luminoso",
-  "luneta",
-  "lustroso",
-  "luto",
-  "luvas",
-  "luxuriante",
-  "luzeiro",
-  "maduro",
-  "maestro",
-  "mafioso",
-  "magro",
-  "maiuscula",
-  "majoritario",
-  "malvisto",
-  "mamute",
-  "manutencao",
-  "mapoteca",
-  "maquinista",
-  "marzipa",
-  "masturbar",
-  "matuto",
-  "mausoleu",
-  "mavioso",
-  "maxixe",
-  "mazurca",
-  "meandro",
-  "mecha",
-  "medusa",
-  "mefistofelico",
-  "megera",
-  "meirinho",
-  "melro",
-  "memorizar",
-  "menu",
-  "mequetrefe",
-  "mertiolate",
-  "mestria",
-  "metroviario",
-  "mexilhao",
-  "mezanino",
-  "miau",
-  "microssegundo",
-  "midia",
-  "migratorio",
-  "mimosa",
-  "minuto",
-  "miosotis",
-  "mirtilo",
-  "misturar",
-  "mitzvah",
-  "miudos",
-  "mixuruca",
-  "mnemonico",
-  "moagem",
-  "mobilizar",
-  "modulo",
-  "moer",
-  "mofo",
-  "mogno",
-  "moita",
-  "molusco",
-  "monumento",
-  "moqueca",
-  "morubixaba",
-  "mostruario",
-  "motriz",
-  "mouse",
-  "movivel",
-  "mozarela",
-  "muarra",
-  "muculmano",
-  "mudo",
-  "mugir",
-  "muitos",
-  "mumunha",
-  "munir",
-  "muon",
-  "muquira",
-  "murros",
-  "musselina",
-  "nacoes",
-  "nado",
-  "naftalina",
-  "nago",
-  "naipe",
-  "naja",
-  "nalgum",
-  "namoro",
-  "nanquim",
-  "napolitano",
-  "naquilo",
-  "nascimento",
-  "nautilo",
-  "navios",
-  "nazista",
-  "nebuloso",
-  "nectarina",
-  "nefrologo",
-  "negus",
-  "nelore",
-  "nenufar",
-  "nepotismo",
-  "nervura",
-  "neste",
-  "netuno",
-  "neutron",
-  "nevoeiro",
-  "newtoniano",
-  "nexo",
-  "nhenhenhem",
-  "nhoque",
-  "nigeriano",
-  "niilista",
-  "ninho",
-  "niobio",
-  "niponico",
-  "niquelar",
-  "nirvana",
-  "nisto",
-  "nitroglicerina",
-  "nivoso",
-  "nobreza",
-  "nocivo",
-  "noel",
-  "nogueira",
-  "noivo",
-  "nojo",
-  "nominativo",
-  "nonuplo",
-  "noruegues",
-  "nostalgico",
-  "noturno",
-  "nouveau",
-  "nuanca",
-  "nublar",
-  "nucleotideo",
-  "nudista",
-  "nulo",
-  "numismatico",
-  "nunquinha",
-  "nupcias",
-  "nutritivo",
-  "nuvens",
-  "oasis",
-  "obcecar",
-  "obeso",
-  "obituario",
-  "objetos",
-  "oblongo",
-  "obnoxio",
-  "obrigatorio",
-  "obstruir",
-  "obtuso",
-  "obus",
-  "obvio",
-  "ocaso",
-  "occipital",
-  "oceanografo",
-  "ocioso",
-  "oclusivo",
-  "ocorrer",
-  "ocre",
-  "octogono",
-  "odalisca",
-  "odisseia",
-  "odorifico",
-  "oersted",
-  "oeste",
-  "ofertar",
-  "ofidio",
-  "oftalmologo",
-  "ogiva",
-  "ogum",
-  "oigale",
-  "oitavo",
-  "oitocentos",
-  "ojeriza",
-  "olaria",
-  "oleoso",
-  "olfato",
-  "olhos",
-  "oliveira",
-  "olmo",
-  "olor",
-  "olvidavel",
-  "ombudsman",
-  "omeleteira",
-  "omitir",
-  "omoplata",
-  "onanismo",
-  "ondular",
-  "oneroso",
-  "onomatopeico",
-  "ontologico",
-  "onus",
-  "onze",
-  "opalescente",
-  "opcional",
-  "operistico",
-  "opio",
-  "oposto",
-  "oprobrio",
-  "optometrista",
-  "opusculo",
-  "oratorio",
-  "orbital",
-  "orcar",
-  "orfao",
-  "orixa",
-  "orla",
-  "ornitologo",
-  "orquidea",
-  "ortorrombico",
-  "orvalho",
-  "osculo",
-  "osmotico",
-  "ossudo",
-  "ostrogodo",
-  "otario",
-  "otite",
-  "ouro",
-  "ousar",
-  "outubro",
-  "ouvir",
-  "ovario",
-  "overnight",
-  "oviparo",
-  "ovni",
-  "ovoviviparo",
-  "ovulo",
-  "oxala",
-  "oxente",
-  "oxiuro",
-  "oxossi",
-  "ozonizar",
-  "paciente",
-  "pactuar",
-  "padronizar",
-  "paete",
-  "pagodeiro",
-  "paixao",
-  "pajem",
-  "paludismo",
-  "pampas",
-  "panturrilha",
-  "papudo",
-  "paquistanes",
-  "pastoso",
-  "patua",
-  "paulo",
-  "pauzinhos",
-  "pavoroso",
-  "paxa",
-  "pazes",
-  "peao",
-  "pecuniario",
-  "pedunculo",
-  "pegaso",
-  "peixinho",
-  "pejorativo",
-  "pelvis",
-  "penuria",
-  "pequno",
-  "petunia",
-  "pezada",
-  "piauiense",
-  "pictorico",
-  "pierro",
-  "pigmeu",
-  "pijama",
-  "pilulas",
-  "pimpolho",
-  "pintura",
-  "piorar",
-  "pipocar",
-  "piqueteiro",
-  "pirulito",
-  "pistoleiro",
-  "pituitaria",
-  "pivotar",
-  "pixote",
-  "pizzaria",
-  "plistoceno",
-  "plotar",
-  "pluviometrico",
-  "pneumonico",
-  "poco",
-  "podridao",
-  "poetisa",
-  "pogrom",
-  "pois",
-  "polvorosa",
-  "pomposo",
-  "ponderado",
-  "pontudo",
-  "populoso",
-  "poquer",
-  "porvir",
-  "posudo",
-  "potro",
-  "pouso",
-  "povoar",
-  "prazo",
-  "prezar",
-  "privilegios",
-  "proximo",
-  "prussiano",
-  "pseudopode",
-  "psoriase",
-  "pterossauros",
-  "ptialina",
-  "ptolemaico",
-  "pudor",
-  "pueril",
-  "pufe",
-  "pugilista",
-  "puir",
-  "pujante",
-  "pulverizar",
-  "pumba",
-  "punk",
-  "purulento",
-  "pustula",
-  "putsch",
-  "puxe",
-  "quatrocentos",
-  "quetzal",
-  "quixotesco",
-  "quotizavel",
-  "rabujice",
-  "racista",
-  "radonio",
-  "rafia",
-  "ragu",
-  "rajado",
-  "ralo",
-  "rampeiro",
-  "ranzinza",
-  "raptor",
-  "raquitismo",
-  "raro",
-  "rasurar",
-  "ratoeira",
-  "ravioli",
-  "razoavel",
-  "reavivar",
-  "rebuscar",
-  "recusavel",
-  "reduzivel",
-  "reexposicao",
-  "refutavel",
-  "regurgitar",
-  "reivindicavel",
-  "rejuvenescimento",
-  "relva",
-  "remuneravel",
-  "renunciar",
-  "reorientar",
-  "repuxo",
-  "requisito",
-  "resumo",
-  "returno",
-  "reutilizar",
-  "revolvido",
-  "rezonear",
-  "riacho",
-  "ribossomo",
-  "ricota",
-  "ridiculo",
-  "rifle",
-  "rigoroso",
-  "rijo",
-  "rimel",
-  "rins",
-  "rios",
-  "riqueza",
-  "respeito",
-  "rissole",
-  "ritualistico",
-  "rivalizar",
-  "rixa",
-  "robusto",
-  "rococo",
-  "rodoviario",
-  "roer",
-  "rogo",
-  "rojao",
-  "rolo",
-  "rompimento",
-  "ronronar",
-  "roqueiro",
-  "rorqual",
-  "rosto",
-  "rotundo",
-  "rouxinol",
-  "roxo",
-  "royal",
-  "ruas",
-  "rucula",
-  "rudimentos",
-  "ruela",
-  "rufo",
-  "rugoso",
-  "ruivo",
-  "rule",
-  "rumoroso",
-  "runico",
-  "ruptura",
-  "rural",
-  "rustico",
-  "rutilar",
-  "saariano",
-  "sabujo",
-  "sacudir",
-  "sadomasoquista",
-  "safra",
-  "sagui",
-  "sais",
-  "samurai",
-  "santuario",
-  "sapo",
-  "saquear",
-  "sartriano",
-  "saturno",
-  "saude",
-  "sauva",
-  "saveiro",
-  "saxofonista",
-  "sazonal",
-  "scherzo",
-  "script",
-  "seara",
-  "seborreia",
-  "secura",
-  "seduzir",
-  "sefardim",
-  "seguro",
-  "seja",
-  "selvas",
-  "sempre",
-  "senzala",
-  "sepultura",
-  "sequoia",
-  "sestercio",
-  "setuplo",
-  "seus",
-  "seviciar",
-  "sezonismo",
-  "shalom",
-  "siames",
-  "sibilante",
-  "sicrano",
-  "sidra",
-  "sifilitico",
-  "signos",
-  "silvo",
-  "simultaneo",
-  "sinusite",
-  "sionista",
-  "sirio",
-  "sisudo",
-  "situar",
-  "sivan",
-  "slide",
-  "slogan",
-  "soar",
-  "sobrio",
-  "socratico",
-  "sodomizar",
-  "soerguer",
-  "software",
-  "sogro",
-  "soja",
-  "solver",
-  "somente",
-  "sonso",
-  "sopro",
-  "soquete",
-  "sorveteiro",
-  "sossego",
-  "soturno",
-  "sousafone",
-  "sovinice",
-  "sozinho",
-  "suavizar",
-  "subverter",
-  "sucursal",
-  "sudoriparo",
-  "sufragio",
-  "sugestoes",
-  "suite",
-  "sujo",
-  "sultao",
-  "sumula",
-  "suntuoso",
-  "suor",
-  "supurar",
-  "suruba",
-  "susto",
-  "suturar",
-  "suvenir",
-  "tabuleta",
-  "taco",
-  "tadjique",
-  "tafeta",
-  "tagarelice",
-  "taitiano",
-  "talvez",
-  "tampouco",
-  "tanzaniano",
-  "taoista",
-  "tapume",
-  "taquion",
-  "tarugo",
-  "tascar",
-  "tatuar",
-  "tautologico",
-  "tavola",
-  "taxionomista",
-  "tchecoslovaco",
-  "teatrologo",
-  "tectonismo",
-  "tedioso",
-  "teflon",
-  "tegumento",
-  "teixo",
-  "telurio",
-  "temporas",
-  "tenue",
-  "teosofico",
-  "tepido",
-  "tequila",
-  "terrorista",
-  "testosterona",
-  "tetrico",
-  "teutonico",
-  "teve",
-  "texugo",
-  "tiara",
-  "tibia",
-  "tiete",
-  "tifoide",
-  "tigresa",
-  "tijolo",
-  "tilintar",
-  "timpano",
-  "tintureiro",
-  "tiquete",
-  "tiroteio",
-  "tisico",
-  "titulos",
-  "tive",
-  "toar",
-  "toboga",
-  "tofu",
-  "togoles",
-  "toicinho",
-  "tolueno",
-  "tomografo",
-  "tontura",
-  "toponimo",
-  "toquio",
-  "torvelinho",
-  "tostar",
-  "toto",
-  "touro",
-  "toxina",
-  "trazer",
-  "trezentos",
-  "trivialidade",
-  "trovoar",
-  "truta",
-  "tuaregue",
-  "tubular",
-  "tucano",
-  "tudo",
-  "tufo",
-  "tuiste",
-  "tulipa",
-  "tumultuoso",
-  "tunisino",
-  "tupiniquim",
-  "turvo",
-  "tutu",
-  "ucraniano",
-  "udenista",
-  "ufanista",
-  "ufologo",
-  "ugaritico",
-  "uiste",
-  "uivo",
-  "ulceroso",
-  "ulema",
-  "ultravioleta",
-  "umbilical",
-  "umero",
-  "umido",
-  "umlaut",
-  "unanimidade",
-  "unesco",
-  "ungulado",
-  "unheiro",
-  "univoco",
-  "untuoso",
-  "urano",
-  "urbano",
-  "urdir",
-  "uretra",
-  "urgente",
-  "urinol",
-  "urna",
-  "urologo",
-  "urro",
-  "ursulina",
-  "urtiga",
-  "urupe",
-  "usavel",
-  "usbeque",
-  "usei",
-  "usineiro",
-  "usurpar",
-  "utero",
-  "utilizar",
-  "utopico",
-  "uvular",
-  "uxoricidio",
-  "vacuo",
-  "vadio",
-  "vaguear",
-  "vaivem",
-  "valvula",
-  "vampiro",
-  "vantajoso",
-  "vaporoso",
-  "vaquinha",
-  "varziano",
-  "vasto",
-  "vaticinio",
-  "vaudeville",
-  "vazio",
-  "veado",
-  "vedico",
-  "veemente",
-  "vegetativo",
-  "veio",
-  "veja",
-  "veludo",
-  "venusiano",
-  "verdade",
-  "verve",
-  "vestuario",
-  "vetusto",
-  "vexatorio",
-  "vezes",
-  "viavel",
-  "vibratorio",
-  "victor",
-  "vicunha",
-  "vidros",
-  "vietnamita",
-  "vigoroso",
-  "vilipendiar",
-  "vime",
-  "vintem",
-  "violoncelo",
-  "viquingue",
-  "virus",
-  "visualizar",
-  "vituperio",
-  "viuvo",
-  "vivo",
-  "vizir",
-  "voar",
-  "vociferar",
-  "vodu",
-  "vogar",
-  "voile",
-  "volver",
-  "vomito",
-  "vontade",
-  "vortice",
-  "vosso",
-  "voto",
-  "vovozinha",
-  "voyeuse",
-  "vozes",
-  "vulva",
-  "vupt",
-  "western",
-  "xadrez",
-  "xale",
-  "xampu",
-  "xango",
-  "xarope",
-  "xaual",
-  "xavante",
-  "xaxim",
-  "xenonio",
-  "xepa",
-  "xerox",
-  "xicara",
-  "xifopago",
-  "xiita",
-  "xilogravura",
-  "xinxim",
-  "xistoso",
-  "xixi",
-  "xodo",
-  "xogum",
-  "xucro",
-  "zabumba",
-  "zagueiro",
-  "zambiano",
-  "zanzar",
-  "zarpar",
-  "zebu",
-  "zefiro",
-  "zeloso",
-  "zenite",
-  "zumbi"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/ru.rs b/networks/monero/wallet/seed/src/words/ru.rs
deleted file mode 100644
index 609fa4cb..00000000
--- a/networks/monero/wallet/seed/src/words/ru.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "абажур",
-  "абзац",
-  "абонент",
-  "абрикос",
-  "абсурд",
-  "авангард",
-  "август",
-  "авиация",
-  "авоська",
-  "автор",
-  "агат",
-  "агент",
-  "агитатор",
-  "агнец",
-  "агония",
-  "агрегат",
-  "адвокат",
-  "адмирал",
-  "адрес",
-  "ажиотаж",
-  "азарт",
-  "азбука",
-  "азот",
-  "аист",
-  "айсберг",
-  "академия",
-  "аквариум",
-  "аккорд",
-  "акробат",
-  "аксиома",
-  "актер",
-  "акула",
-  "акция",
-  "алгоритм",
-  "алебарда",
-  "аллея",
-  "алмаз",
-  "алтарь",
-  "алфавит",
-  "алхимик",
-  "алый",
-  "альбом",
-  "алюминий",
-  "амбар",
-  "аметист",
-  "амнезия",
-  "ампула",
-  "амфора",
-  "анализ",
-  "ангел",
-  "анекдот",
-  "анимация",
-  "анкета",
-  "аномалия",
-  "ансамбль",
-  "антенна",
-  "апатия",
-  "апельсин",
-  "апофеоз",
-  "аппарат",
-  "апрель",
-  "аптека",
-  "арабский",
-  "арбуз",
-  "аргумент",
-  "арест",
-  "ария",
-  "арка",
-  "армия",
-  "аромат",
-  "арсенал",
-  "артист",
-  "архив",
-  "аршин",
-  "асбест",
-  "аскетизм",
-  "аспект",
-  "ассорти",
-  "астроном",
-  "асфальт",
-  "атака",
-  "ателье",
-  "атлас",
-  "атом",
-  "атрибут",
-  "аудитор",
-  "аукцион",
-  "аура",
-  "афера",
-  "афиша",
-  "ахинея",
-  "ацетон",
-  "аэропорт",
-  "бабушка",
-  "багаж",
-  "бадья",
-  "база",
-  "баклажан",
-  "балкон",
-  "бампер",
-  "банк",
-  "барон",
-  "бассейн",
-  "батарея",
-  "бахрома",
-  "башня",
-  "баян",
-  "бегство",
-  "бедро",
-  "бездна",
-  "бекон",
-  "белый",
-  "бензин",
-  "берег",
-  "беседа",
-  "бетонный",
-  "биатлон",
-  "библия",
-  "бивень",
-  "бигуди",
-  "бидон",
-  "бизнес",
-  "бикини",
-  "билет",
-  "бинокль",
-  "биология",
-  "биржа",
-  "бисер",
-  "битва",
-  "бицепс",
-  "благо",
-  "бледный",
-  "близкий",
-  "блок",
-  "блуждать",
-  "блюдо",
-  "бляха",
-  "бобер",
-  "богатый",
-  "бодрый",
-  "боевой",
-  "бокал",
-  "большой",
-  "борьба",
-  "босой",
-  "ботинок",
-  "боцман",
-  "бочка",
-  "боярин",
-  "брать",
-  "бревно",
-  "бригада",
-  "бросать",
-  "брызги",
-  "брюки",
-  "бублик",
-  "бугор",
-  "будущее",
-  "буква",
-  "бульвар",
-  "бумага",
-  "бунт",
-  "бурный",
-  "бусы",
-  "бутылка",
-  "буфет",
-  "бухта",
-  "бушлат",
-  "бывалый",
-  "быль",
-  "быстрый",
-  "быть",
-  "бюджет",
-  "бюро",
-  "бюст",
-  "вагон",
-  "важный",
-  "ваза",
-  "вакцина",
-  "валюта",
-  "вампир",
-  "ванная",
-  "вариант",
-  "вассал",
-  "вата",
-  "вафля",
-  "вахта",
-  "вдова",
-  "вдыхать",
-  "ведущий",
-  "веер",
-  "вежливый",
-  "везти",
-  "веко",
-  "великий",
-  "вена",
-  "верить",
-  "веселый",
-  "ветер",
-  "вечер",
-  "вешать",
-  "вещь",
-  "веяние",
-  "взаимный",
-  "взбучка",
-  "взвод",
-  "взгляд",
-  "вздыхать",
-  "взлетать",
-  "взмах",
-  "взнос",
-  "взор",
-  "взрыв",
-  "взывать",
-  "взятка",
-  "вибрация",
-  "визит",
-  "вилка",
-  "вино",
-  "вирус",
-  "висеть",
-  "витрина",
-  "вихрь",
-  "вишневый",
-  "включать",
-  "вкус",
-  "власть",
-  "влечь",
-  "влияние",
-  "влюблять",
-  "внешний",
-  "внимание",
-  "внук",
-  "внятный",
-  "вода",
-  "воевать",
-  "вождь",
-  "воздух",
-  "войти",
-  "вокзал",
-  "волос",
-  "вопрос",
-  "ворота",
-  "восток",
-  "впадать",
-  "впускать",
-  "врач",
-  "время",
-  "вручать",
-  "всадник",
-  "всеобщий",
-  "вспышка",
-  "встреча",
-  "вторник",
-  "вулкан",
-  "вурдалак",
-  "входить",
-  "въезд",
-  "выбор",
-  "вывод",
-  "выгодный",
-  "выделять",
-  "выезжать",
-  "выживать",
-  "вызывать",
-  "выигрыш",
-  "вылезать",
-  "выносить",
-  "выпивать",
-  "высокий",
-  "выходить",
-  "вычет",
-  "вышка",
-  "выяснять",
-  "вязать",
-  "вялый",
-  "гавань",
-  "гадать",
-  "газета",
-  "гаишник",
-  "галстук",
-  "гамма",
-  "гарантия",
-  "гастроли",
-  "гвардия",
-  "гвоздь",
-  "гектар",
-  "гель",
-  "генерал",
-  "геолог",
-  "герой",
-  "гешефт",
-  "гибель",
-  "гигант",
-  "гильза",
-  "гимн",
-  "гипотеза",
-  "гитара",
-  "глаз",
-  "глина",
-  "глоток",
-  "глубокий",
-  "глыба",
-  "глядеть",
-  "гнать",
-  "гнев",
-  "гнить",
-  "гном",
-  "гнуть",
-  "говорить",
-  "годовой",
-  "голова",
-  "гонка",
-  "город",
-  "гость",
-  "готовый",
-  "граница",
-  "грех",
-  "гриб",
-  "громкий",
-  "группа",
-  "грызть",
-  "грязный",
-  "губа",
-  "гудеть",
-  "гулять",
-  "гуманный",
-  "густой",
-  "гуща",
-  "давать",
-  "далекий",
-  "дама",
-  "данные",
-  "дарить",
-  "дать",
-  "дача",
-  "дверь",
-  "движение",
-  "двор",
-  "дебют",
-  "девушка",
-  "дедушка",
-  "дежурный",
-  "дезертир",
-  "действие",
-  "декабрь",
-  "дело",
-  "демократ",
-  "день",
-  "депутат",
-  "держать",
-  "десяток",
-  "детский",
-  "дефицит",
-  "дешевый",
-  "деятель",
-  "джаз",
-  "джинсы",
-  "джунгли",
-  "диалог",
-  "диван",
-  "диета",
-  "дизайн",
-  "дикий",
-  "динамика",
-  "диплом",
-  "директор",
-  "диск",
-  "дитя",
-  "дичь",
-  "длинный",
-  "дневник",
-  "добрый",
-  "доверие",
-  "договор",
-  "дождь",
-  "доза",
-  "документ",
-  "должен",
-  "домашний",
-  "допрос",
-  "дорога",
-  "доход",
-  "доцент",
-  "дочь",
-  "дощатый",
-  "драка",
-  "древний",
-  "дрожать",
-  "друг",
-  "дрянь",
-  "дубовый",
-  "дуга",
-  "дудка",
-  "дукат",
-  "дуло",
-  "думать",
-  "дупло",
-  "дурак",
-  "дуть",
-  "духи",
-  "душа",
-  "дуэт",
-  "дымить",
-  "дыня",
-  "дыра",
-  "дыханье",
-  "дышать",
-  "дьявол",
-  "дюжина",
-  "дюйм",
-  "дюна",
-  "дядя",
-  "дятел",
-  "егерь",
-  "единый",
-  "едкий",
-  "ежевика",
-  "ежик",
-  "езда",
-  "елка",
-  "емкость",
-  "ерунда",
-  "ехать",
-  "жадный",
-  "жажда",
-  "жалеть",
-  "жанр",
-  "жара",
-  "жать",
-  "жгучий",
-  "ждать",
-  "жевать",
-  "желание",
-  "жемчуг",
-  "женщина",
-  "жертва",
-  "жесткий",
-  "жечь",
-  "живой",
-  "жидкость",
-  "жизнь",
-  "жилье",
-  "жирный",
-  "житель",
-  "журнал",
-  "жюри",
-  "забывать",
-  "завод",
-  "загадка",
-  "задача",
-  "зажечь",
-  "зайти",
-  "закон",
-  "замечать",
-  "занимать",
-  "западный",
-  "зарплата",
-  "засыпать",
-  "затрата",
-  "захват",
-  "зацепка",
-  "зачет",
-  "защита",
-  "заявка",
-  "звать",
-  "звезда",
-  "звонить",
-  "звук",
-  "здание",
-  "здешний",
-  "здоровье",
-  "зебра",
-  "зевать",
-  "зеленый",
-  "земля",
-  "зенит",
-  "зеркало",
-  "зефир",
-  "зигзаг",
-  "зима",
-  "зиять",
-  "злак",
-  "злой",
-  "змея",
-  "знать",
-  "зной",
-  "зодчий",
-  "золотой",
-  "зомби",
-  "зона",
-  "зоопарк",
-  "зоркий",
-  "зрачок",
-  "зрение",
-  "зритель",
-  "зубной",
-  "зыбкий",
-  "зять",
-  "игла",
-  "иголка",
-  "играть",
-  "идея",
-  "идиот",
-  "идол",
-  "идти",
-  "иерархия",
-  "избрать",
-  "известие",
-  "изгонять",
-  "издание",
-  "излагать",
-  "изменять",
-  "износ",
-  "изоляция",
-  "изрядный",
-  "изучать",
-  "изымать",
-  "изящный",
-  "икона",
-  "икра",
-  "иллюзия",
-  "имбирь",
-  "иметь",
-  "имидж",
-  "иммунный",
-  "империя",
-  "инвестор",
-  "индивид",
-  "инерция",
-  "инженер",
-  "иномарка",
-  "институт",
-  "интерес",
-  "инфекция",
-  "инцидент",
-  "ипподром",
-  "ирис",
-  "ирония",
-  "искать",
-  "история",
-  "исходить",
-  "исчезать",
-  "итог",
-  "июль",
-  "июнь",
-  "кабинет",
-  "кавалер",
-  "кадр",
-  "казарма",
-  "кайф",
-  "кактус",
-  "калитка",
-  "камень",
-  "канал",
-  "капитан",
-  "картина",
-  "касса",
-  "катер",
-  "кафе",
-  "качество",
-  "каша",
-  "каюта",
-  "квартира",
-  "квинтет",
-  "квота",
-  "кедр",
-  "кекс",
-  "кенгуру",
-  "кепка",
-  "керосин",
-  "кетчуп",
-  "кефир",
-  "кибитка",
-  "кивнуть",
-  "кидать",
-  "километр",
-  "кино",
-  "киоск",
-  "кипеть",
-  "кирпич",
-  "кисть",
-  "китаец",
-  "класс",
-  "клетка",
-  "клиент",
-  "клоун",
-  "клуб",
-  "клык",
-  "ключ",
-  "клятва",
-  "книга",
-  "кнопка",
-  "кнут",
-  "князь",
-  "кобура",
-  "ковер",
-  "коготь",
-  "кодекс",
-  "кожа",
-  "козел",
-  "койка",
-  "коктейль",
-  "колено",
-  "компания",
-  "конец",
-  "копейка",
-  "короткий",
-  "костюм",
-  "котел",
-  "кофе",
-  "кошка",
-  "красный",
-  "кресло",
-  "кричать",
-  "кровь",
-  "крупный",
-  "крыша",
-  "крючок",
-  "кубок",
-  "кувшин",
-  "кудрявый",
-  "кузов",
-  "кукла",
-  "культура",
-  "кумир",
-  "купить",
-  "курс",
-  "кусок",
-  "кухня",
-  "куча",
-  "кушать",
-  "кювет",
-  "лабиринт",
-  "лавка",
-  "лагерь",
-  "ладонь",
-  "лазерный",
-  "лайнер",
-  "лакей",
-  "лампа",
-  "ландшафт",
-  "лапа",
-  "ларек",
-  "ласковый",
-  "лауреат",
-  "лачуга",
-  "лаять",
-  "лгать",
-  "лебедь",
-  "левый",
-  "легкий",
-  "ледяной",
-  "лежать",
-  "лекция",
-  "лента",
-  "лепесток",
-  "лесной",
-  "лето",
-  "лечь",
-  "леший",
-  "лживый",
-  "либерал",
-  "ливень",
-  "лига",
-  "лидер",
-  "ликовать",
-  "лиловый",
-  "лимон",
-  "линия",
-  "липа",
-  "лирика",
-  "лист",
-  "литр",
-  "лифт",
-  "лихой",
-  "лицо",
-  "личный",
-  "лишний",
-  "лобовой",
-  "ловить",
-  "логика",
-  "лодка",
-  "ложка",
-  "лозунг",
-  "локоть",
-  "ломать",
-  "лоно",
-  "лопата",
-  "лорд",
-  "лось",
-  "лоток",
-  "лохматый",
-  "лошадь",
-  "лужа",
-  "лукавый",
-  "луна",
-  "лупить",
-  "лучший",
-  "лыжный",
-  "лысый",
-  "львиный",
-  "льгота",
-  "льдина",
-  "любить",
-  "людской",
-  "люстра",
-  "лютый",
-  "лягушка",
-  "магазин",
-  "мадам",
-  "мазать",
-  "майор",
-  "максимум",
-  "мальчик",
-  "манера",
-  "март",
-  "масса",
-  "мать",
-  "мафия",
-  "махать",
-  "мачта",
-  "машина",
-  "маэстро",
-  "маяк",
-  "мгла",
-  "мебель",
-  "медведь",
-  "мелкий",
-  "мемуары",
-  "менять",
-  "мера",
-  "место",
-  "метод",
-  "механизм",
-  "мечтать",
-  "мешать",
-  "миграция",
-  "мизинец",
-  "микрофон",
-  "миллион",
-  "минута",
-  "мировой",
-  "миссия",
-  "митинг",
-  "мишень",
-  "младший",
-  "мнение",
-  "мнимый",
-  "могила",
-  "модель",
-  "мозг",
-  "мойка",
-  "мокрый",
-  "молодой",
-  "момент",
-  "монах",
-  "море",
-  "мост",
-  "мотор",
-  "мохнатый",
-  "мочь",
-  "мошенник",
-  "мощный",
-  "мрачный",
-  "мстить",
-  "мудрый",
-  "мужчина",
-  "музыка",
-  "мука",
-  "мумия",
-  "мундир",
-  "муравей",
-  "мусор",
-  "мутный",
-  "муфта",
-  "муха",
-  "мучить",
-  "мушкетер",
-  "мыло",
-  "мысль",
-  "мыть",
-  "мычать",
-  "мышь",
-  "мэтр",
-  "мюзикл",
-  "мягкий",
-  "мякиш",
-  "мясо",
-  "мятый",
-  "мячик",
-  "набор",
-  "навык",
-  "нагрузка",
-  "надежда",
-  "наемный",
-  "нажать",
-  "называть",
-  "наивный",
-  "накрыть",
-  "налог",
-  "намерен",
-  "наносить",
-  "написать",
-  "народ",
-  "натура",
-  "наука",
-  "нация",
-  "начать",
-  "небо",
-  "невеста",
-  "негодяй",
-  "неделя",
-  "нежный",
-  "незнание",
-  "нелепый",
-  "немалый",
-  "неправда",
-  "нервный",
-  "нести",
-  "нефть",
-  "нехватка",
-  "нечистый",
-  "неясный",
-  "нива",
-  "нижний",
-  "низкий",
-  "никель",
-  "нирвана",
-  "нить",
-  "ничья",
-  "ниша",
-  "нищий",
-  "новый",
-  "нога",
-  "ножницы",
-  "ноздря",
-  "ноль",
-  "номер",
-  "норма",
-  "нота",
-  "ночь",
-  "ноша",
-  "ноябрь",
-  "нрав",
-  "нужный",
-  "нутро",
-  "нынешний",
-  "нырнуть",
-  "ныть",
-  "нюанс",
-  "нюхать",
-  "няня",
-  "оазис",
-  "обаяние",
-  "обвинять",
-  "обгонять",
-  "обещать",
-  "обжигать",
-  "обзор",
-  "обида",
-  "область",
-  "обмен",
-  "обнимать",
-  "оборона",
-  "образ",
-  "обучение",
-  "обходить",
-  "обширный",
-  "общий",
-  "объект",
-  "обычный",
-  "обязать",
-  "овальный",
-  "овес",
-  "овощи",
-  "овраг",
-  "овца",
-  "овчарка",
-  "огненный",
-  "огонь",
-  "огромный",
-  "огурец",
-  "одежда",
-  "одинокий",
-  "одобрить",
-  "ожидать",
-  "ожог",
-  "озарение",
-  "озеро",
-  "означать",
-  "оказать",
-  "океан",
-  "оклад",
-  "окно",
-  "округ",
-  "октябрь",
-  "окурок",
-  "олень",
-  "опасный",
-  "операция",
-  "описать",
-  "оплата",
-  "опора",
-  "оппонент",
-  "опрос",
-  "оптимизм",
-  "опускать",
-  "опыт",
-  "орать",
-  "орбита",
-  "орган",
-  "орден",
-  "орел",
-  "оригинал",
-  "оркестр",
-  "орнамент",
-  "оружие",
-  "осадок",
-  "освещать",
-  "осень",
-  "осина",
-  "осколок",
-  "осмотр",
-  "основной",
-  "особый",
-  "осуждать",
-  "отбор",
-  "отвечать",
-  "отдать",
-  "отец",
-  "отзыв",
-  "открытие",
-  "отмечать",
-  "относить",
-  "отпуск",
-  "отрасль",
-  "отставка",
-  "оттенок",
-  "отходить",
-  "отчет",
-  "отъезд",
-  "офицер",
-  "охапка",
-  "охота",
-  "охрана",
-  "оценка",
-  "очаг",
-  "очередь",
-  "очищать",
-  "очки",
-  "ошейник",
-  "ошибка",
-  "ощущение",
-  "павильон",
-  "падать",
-  "паек",
-  "пакет",
-  "палец",
-  "память",
-  "панель",
-  "папка",
-  "партия",
-  "паспорт",
-  "патрон",
-  "пауза",
-  "пафос",
-  "пахнуть",
-  "пациент",
-  "пачка",
-  "пашня",
-  "певец",
-  "педагог",
-  "пейзаж",
-  "пельмень",
-  "пенсия",
-  "пепел",
-  "период",
-  "песня",
-  "петля",
-  "пехота",
-  "печать",
-  "пешеход",
-  "пещера",
-  "пианист",
-  "пиво",
-  "пиджак",
-  "пиковый",
-  "пилот",
-  "пионер",
-  "пирог",
-  "писать",
-  "пить",
-  "пицца",
-  "пишущий",
-  "пища",
-  "план",
-  "плечо",
-  "плита",
-  "плохой",
-  "плыть",
-  "плюс",
-  "пляж",
-  "победа",
-  "повод",
-  "погода",
-  "подумать",
-  "поехать",
-  "пожимать",
-  "позиция",
-  "поиск",
-  "покой",
-  "получать",
-  "помнить",
-  "пони",
-  "поощрять",
-  "попадать",
-  "порядок",
-  "пост",
-  "поток",
-  "похожий",
-  "поцелуй",
-  "почва",
-  "пощечина",
-  "поэт",
-  "пояснить",
-  "право",
-  "предмет",
-  "проблема",
-  "пруд",
-  "прыгать",
-  "прямой",
-  "психолог",
-  "птица",
-  "публика",
-  "пугать",
-  "пудра",
-  "пузырь",
-  "пуля",
-  "пункт",
-  "пурга",
-  "пустой",
-  "путь",
-  "пухлый",
-  "пучок",
-  "пушистый",
-  "пчела",
-  "пшеница",
-  "пыль",
-  "пытка",
-  "пыхтеть",
-  "пышный",
-  "пьеса",
-  "пьяный",
-  "пятно",
-  "работа",
-  "равный",
-  "радость",
-  "развитие",
-  "район",
-  "ракета",
-  "рамка",
-  "ранний",
-  "рапорт",
-  "рассказ",
-  "раунд",
-  "рация",
-  "рвать",
-  "реальный",
-  "ребенок",
-  "реветь",
-  "регион",
-  "редакция",
-  "реестр",
-  "режим",
-  "резкий",
-  "рейтинг",
-  "река",
-  "религия",
-  "ремонт",
-  "рента",
-  "реплика",
-  "ресурс",
-  "реформа",
-  "рецепт",
-  "речь",
-  "решение",
-  "ржавый",
-  "рисунок",
-  "ритм",
-  "рифма",
-  "робкий",
-  "ровный",
-  "рогатый",
-  "родитель",
-  "рождение",
-  "розовый",
-  "роковой",
-  "роль",
-  "роман",
-  "ронять",
-  "рост",
-  "рота",
-  "роща",
-  "рояль",
-  "рубль",
-  "ругать",
-  "руда",
-  "ружье",
-  "руины",
-  "рука",
-  "руль",
-  "румяный",
-  "русский",
-  "ручка",
-  "рыба",
-  "рывок",
-  "рыдать",
-  "рыжий",
-  "рынок",
-  "рысь",
-  "рыть",
-  "рыхлый",
-  "рыцарь",
-  "рычаг",
-  "рюкзак",
-  "рюмка",
-  "рябой",
-  "рядовой",
-  "сабля",
-  "садовый",
-  "сажать",
-  "салон",
-  "самолет",
-  "сани",
-  "сапог",
-  "сарай",
-  "сатира",
-  "сауна",
-  "сахар",
-  "сбегать",
-  "сбивать",
-  "сбор",
-  "сбыт",
-  "свадьба",
-  "свет",
-  "свидание",
-  "свобода",
-  "связь",
-  "сгорать",
-  "сдвигать",
-  "сеанс",
-  "северный",
-  "сегмент",
-  "седой",
-  "сезон",
-  "сейф",
-  "секунда",
-  "сельский",
-  "семья",
-  "сентябрь",
-  "сердце",
-  "сеть",
-  "сечение",
-  "сеять",
-  "сигнал",
-  "сидеть",
-  "сизый",
-  "сила",
-  "символ",
-  "синий",
-  "сирота",
-  "система",
-  "ситуация",
-  "сиять",
-  "сказать",
-  "скважина",
-  "скелет",
-  "скидка",
-  "склад",
-  "скорый",
-  "скрывать",
-  "скучный",
-  "слава",
-  "слеза",
-  "слияние",
-  "слово",
-  "случай",
-  "слышать",
-  "слюна",
-  "смех",
-  "смирение",
-  "смотреть",
-  "смутный",
-  "смысл",
-  "смятение",
-  "снаряд",
-  "снег",
-  "снижение",
-  "сносить",
-  "снять",
-  "событие",
-  "совет",
-  "согласие",
-  "сожалеть",
-  "сойти",
-  "сокол",
-  "солнце",
-  "сомнение",
-  "сонный",
-  "сообщать",
-  "соперник",
-  "сорт",
-  "состав",
-  "сотня",
-  "соус",
-  "социолог",
-  "сочинять",
-  "союз",
-  "спать",
-  "спешить",
-  "спина",
-  "сплошной",
-  "способ",
-  "спутник",
-  "средство",
-  "срок",
-  "срывать",
-  "стать",
-  "ствол",
-  "стена",
-  "стихи",
-  "сторона",
-  "страна",
-  "студент",
-  "стыд",
-  "субъект",
-  "сувенир",
-  "сугроб",
-  "судьба",
-  "суета",
-  "суждение",
-  "сукно",
-  "сулить",
-  "сумма",
-  "сунуть",
-  "супруг",
-  "суровый",
-  "сустав",
-  "суть",
-  "сухой",
-  "суша",
-  "существо",
-  "сфера",
-  "схема",
-  "сцена",
-  "счастье",
-  "счет",
-  "считать",
-  "сшивать",
-  "съезд",
-  "сынок",
-  "сыпать",
-  "сырье",
-  "сытый",
-  "сыщик",
-  "сюжет",
-  "сюрприз",
-  "таблица",
-  "таежный",
-  "таинство",
-  "тайна",
-  "такси",
-  "талант",
-  "таможня",
-  "танец",
-  "тарелка",
-  "таскать",
-  "тахта",
-  "тачка",
-  "таять",
-  "тварь",
-  "твердый",
-  "творить",
-  "театр",
-  "тезис",
-  "текст",
-  "тело",
-  "тема",
-  "тень",
-  "теория",
-  "теплый",
-  "терять",
-  "тесный",
-  "тетя",
-  "техника",
-  "течение",
-  "тигр",
-  "типичный",
-  "тираж",
-  "титул",
-  "тихий",
-  "тишина",
-  "ткань",
-  "товарищ",
-  "толпа",
-  "тонкий",
-  "топливо",
-  "торговля",
-  "тоска",
-  "точка",
-  "тощий",
-  "традиция",
-  "тревога",
-  "трибуна",
-  "трогать",
-  "труд",
-  "трюк",
-  "тряпка",
-  "туалет",
-  "тугой",
-  "туловище",
-  "туман",
-  "тундра",
-  "тупой",
-  "турнир",
-  "тусклый",
-  "туфля",
-  "туча",
-  "туша",
-  "тыкать",
-  "тысяча",
-  "тьма",
-  "тюльпан",
-  "тюрьма",
-  "тяга",
-  "тяжелый",
-  "тянуть",
-  "убеждать",
-  "убирать",
-  "убогий",
-  "убыток",
-  "уважение",
-  "уверять",
-  "увлекать",
-  "угнать",
-  "угол",
-  "угроза",
-  "удар",
-  "удивлять",
-  "удобный",
-  "уезд",
-  "ужас",
-  "ужин",
-  "узел",
-  "узкий",
-  "узнавать",
-  "узор",
-  "уйма",
-  "уклон",
-  "укол",
-  "уксус",
-  "улетать",
-  "улица",
-  "улучшать",
-  "улыбка",
-  "уметь",
-  "умиление",
-  "умный",
-  "умолять",
-  "умысел",
-  "унижать",
-  "уносить",
-  "уныние",
-  "упасть",
-  "уплата",
-  "упор",
-  "упрекать",
-  "упускать",
-  "уран",
-  "урна",
-  "уровень",
-  "усадьба",
-  "усердие",
-  "усилие",
-  "ускорять",
-  "условие",
-  "усмешка",
-  "уснуть",
-  "успеть",
-  "усыпать",
-  "утешать",
-  "утка",
-  "уточнять",
-  "утро",
-  "утюг",
-  "уходить",
-  "уцелеть",
-  "участие",
-  "ученый",
-  "учитель",
-  "ушко",
-  "ущерб",
-  "уютный",
-  "уяснять",
-  "фабрика",
-  "фаворит",
-  "фаза",
-  "файл",
-  "факт",
-  "фамилия",
-  "фантазия",
-  "фара",
-  "фасад",
-  "февраль",
-  "фельдшер",
-  "феномен",
-  "ферма",
-  "фигура",
-  "физика",
-  "фильм",
-  "финал",
-  "фирма",
-  "фишка",
-  "флаг",
-  "флейта",
-  "флот",
-  "фокус",
-  "фольклор",
-  "фонд",
-  "форма",
-  "фото",
-  "фраза",
-  "фреска",
-  "фронт",
-  "фрукт",
-  "функция",
-  "фуражка",
-  "футбол",
-  "фыркать",
-  "халат",
-  "хамство",
-  "хаос",
-  "характер",
-  "хата",
-  "хватать",
-  "хвост",
-  "хижина",
-  "хилый",
-  "химия",
-  "хирург",
-  "хитрый",
-  "хищник",
-  "хлам",
-  "хлеб",
-  "хлопать",
-  "хмурый",
-  "ходить",
-  "хозяин",
-  "хоккей",
-  "холодный",
-  "хороший",
-  "хотеть",
-  "хохотать",
-  "храм",
-  "хрен",
-  "хриплый",
-  "хроника",
-  "хрупкий",
-  "художник",
-  "хулиган",
-  "хутор",
-  "царь",
-  "цвет",
-  "цель",
-  "цемент",
-  "центр",
-  "цепь",
-  "церковь",
-  "цикл",
-  "цилиндр",
-  "циничный",
-  "цирк",
-  "цистерна",
-  "цитата",
-  "цифра",
-  "цыпленок",
-  "чадо",
-  "чайник",
-  "часть",
-  "чашка",
-  "человек",
-  "чемодан",
-  "чепуха",
-  "черный",
-  "честь",
-  "четкий",
-  "чехол",
-  "чиновник",
-  "число",
-  "читать",
-  "членство",
-  "чреватый",
-  "чтение",
-  "чувство",
-  "чугунный",
-  "чудо",
-  "чужой",
-  "чукча",
-  "чулок",
-  "чума",
-  "чуткий",
-  "чучело",
-  "чушь",
-  "шаблон",
-  "шагать",
-  "шайка",
-  "шакал",
-  "шалаш",
-  "шампунь",
-  "шанс",
-  "шапка",
-  "шарик",
-  "шасси",
-  "шатер",
-  "шахта",
-  "шашлык",
-  "швейный",
-  "швырять",
-  "шевелить",
-  "шедевр",
-  "шейка",
-  "шелковый",
-  "шептать",
-  "шерсть",
-  "шестерка",
-  "шикарный",
-  "шинель",
-  "шипеть",
-  "широкий",
-  "шить",
-  "шишка",
-  "шкаф",
-  "школа",
-  "шкура",
-  "шланг",
-  "шлем",
-  "шлюпка",
-  "шляпа",
-  "шнур",
-  "шоколад",
-  "шорох",
-  "шоссе",
-  "шофер",
-  "шпага",
-  "шпион",
-  "шприц",
-  "шрам",
-  "шрифт",
-  "штаб",
-  "штора",
-  "штраф",
-  "штука",
-  "штык",
-  "шуба",
-  "шуметь",
-  "шуршать",
-  "шутка",
-  "щадить",
-  "щедрый",
-  "щека",
-  "щель",
-  "щенок",
-  "щепка",
-  "щетка",
-  "щука",
-  "эволюция",
-  "эгоизм",
-  "экзамен",
-  "экипаж",
-  "экономия",
-  "экран",
-  "эксперт",
-  "элемент",
-  "элита",
-  "эмблема",
-  "эмигрант",
-  "эмоция",
-  "энергия",
-  "эпизод",
-  "эпоха",
-  "эскиз",
-  "эссе",
-  "эстрада",
-  "этап",
-  "этика",
-  "этюд",
-  "эфир",
-  "эффект",
-  "эшелон",
-  "юбилей",
-  "юбка",
-  "южный",
-  "юмор",
-  "юноша",
-  "юрист",
-  "яблоко",
-  "явление",
-  "ягода",
-  "ядерный",
-  "ядовитый",
-  "ядро",
-  "язва",
-  "язык",
-  "яйцо",
-  "якорь",
-  "январь",
-  "японец",
-  "яркий",
-  "ярмарка",
-  "ярость",
-  "ярус",
-  "ясный",
-  "яхта",
-  "ячейка",
-  "ящик"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/seed/src/words/zh.rs b/networks/monero/wallet/seed/src/words/zh.rs
deleted file mode 100644
index 42f05b4a..00000000
--- a/networks/monero/wallet/seed/src/words/zh.rs
+++ /dev/null
@@ -1,1628 +0,0 @@
-&[
-  "的",
-  "一",
-  "是",
-  "在",
-  "不",
-  "了",
-  "有",
-  "和",
-  "人",
-  "这",
-  "中",
-  "大",
-  "为",
-  "上",
-  "个",
-  "国",
-  "我",
-  "以",
-  "要",
-  "他",
-  "时",
-  "来",
-  "用",
-  "们",
-  "生",
-  "到",
-  "作",
-  "地",
-  "于",
-  "出",
-  "就",
-  "分",
-  "对",
-  "成",
-  "会",
-  "可",
-  "主",
-  "发",
-  "年",
-  "动",
-  "同",
-  "工",
-  "也",
-  "能",
-  "下",
-  "过",
-  "子",
-  "说",
-  "产",
-  "种",
-  "面",
-  "而",
-  "方",
-  "后",
-  "多",
-  "定",
-  "行",
-  "学",
-  "法",
-  "所",
-  "民",
-  "得",
-  "经",
-  "十",
-  "三",
-  "之",
-  "进",
-  "着",
-  "等",
-  "部",
-  "度",
-  "家",
-  "电",
-  "力",
-  "里",
-  "如",
-  "水",
-  "化",
-  "高",
-  "自",
-  "二",
-  "理",
-  "起",
-  "小",
-  "物",
-  "现",
-  "实",
-  "加",
-  "量",
-  "都",
-  "两",
-  "体",
-  "制",
-  "机",
-  "当",
-  "使",
-  "点",
-  "从",
-  "业",
-  "本",
-  "去",
-  "把",
-  "性",
-  "好",
-  "应",
-  "开",
-  "它",
-  "合",
-  "还",
-  "因",
-  "由",
-  "其",
-  "些",
-  "然",
-  "前",
-  "外",
-  "天",
-  "政",
-  "四",
-  "日",
-  "那",
-  "社",
-  "义",
-  "事",
-  "平",
-  "形",
-  "相",
-  "全",
-  "表",
-  "间",
-  "样",
-  "与",
-  "关",
-  "各",
-  "重",
-  "新",
-  "线",
-  "内",
-  "数",
-  "正",
-  "心",
-  "反",
-  "你",
-  "明",
-  "看",
-  "原",
-  "又",
-  "么",
-  "利",
-  "比",
-  "或",
-  "但",
-  "质",
-  "气",
-  "第",
-  "向",
-  "道",
-  "命",
-  "此",
-  "变",
-  "条",
-  "只",
-  "没",
-  "结",
-  "解",
-  "问",
-  "意",
-  "建",
-  "月",
-  "公",
-  "无",
-  "系",
-  "军",
-  "很",
-  "情",
-  "者",
-  "最",
-  "立",
-  "代",
-  "想",
-  "已",
-  "通",
-  "并",
-  "提",
-  "直",
-  "题",
-  "党",
-  "程",
-  "展",
-  "五",
-  "果",
-  "料",
-  "象",
-  "员",
-  "革",
-  "位",
-  "入",
-  "常",
-  "文",
-  "总",
-  "次",
-  "品",
-  "式",
-  "活",
-  "设",
-  "及",
-  "管",
-  "特",
-  "件",
-  "长",
-  "求",
-  "老",
-  "头",
-  "基",
-  "资",
-  "边",
-  "流",
-  "路",
-  "级",
-  "少",
-  "图",
-  "山",
-  "统",
-  "接",
-  "知",
-  "较",
-  "将",
-  "组",
-  "见",
-  "计",
-  "别",
-  "她",
-  "手",
-  "角",
-  "期",
-  "根",
-  "论",
-  "运",
-  "农",
-  "指",
-  "几",
-  "九",
-  "区",
-  "强",
-  "放",
-  "决",
-  "西",
-  "被",
-  "干",
-  "做",
-  "必",
-  "战",
-  "先",
-  "回",
-  "则",
-  "任",
-  "取",
-  "据",
-  "处",
-  "队",
-  "南",
-  "给",
-  "色",
-  "光",
-  "门",
-  "即",
-  "保",
-  "治",
-  "北",
-  "造",
-  "百",
-  "规",
-  "热",
-  "领",
-  "七",
-  "海",
-  "口",
-  "东",
-  "导",
-  "器",
-  "压",
-  "志",
-  "世",
-  "金",
-  "增",
-  "争",
-  "济",
-  "阶",
-  "油",
-  "思",
-  "术",
-  "极",
-  "交",
-  "受",
-  "联",
-  "什",
-  "认",
-  "六",
-  "共",
-  "权",
-  "收",
-  "证",
-  "改",
-  "清",
-  "美",
-  "再",
-  "采",
-  "转",
-  "更",
-  "单",
-  "风",
-  "切",
-  "打",
-  "白",
-  "教",
-  "速",
-  "花",
-  "带",
-  "安",
-  "场",
-  "身",
-  "车",
-  "例",
-  "真",
-  "务",
-  "具",
-  "万",
-  "每",
-  "目",
-  "至",
-  "达",
-  "走",
-  "积",
-  "示",
-  "议",
-  "声",
-  "报",
-  "斗",
-  "完",
-  "类",
-  "八",
-  "离",
-  "华",
-  "名",
-  "确",
-  "才",
-  "科",
-  "张",
-  "信",
-  "马",
-  "节",
-  "话",
-  "米",
-  "整",
-  "空",
-  "元",
-  "况",
-  "今",
-  "集",
-  "温",
-  "传",
-  "土",
-  "许",
-  "步",
-  "群",
-  "广",
-  "石",
-  "记",
-  "需",
-  "段",
-  "研",
-  "界",
-  "拉",
-  "林",
-  "律",
-  "叫",
-  "且",
-  "究",
-  "观",
-  "越",
-  "织",
-  "装",
-  "影",
-  "算",
-  "低",
-  "持",
-  "音",
-  "众",
-  "书",
-  "布",
-  "复",
-  "容",
-  "儿",
-  "须",
-  "际",
-  "商",
-  "非",
-  "验",
-  "连",
-  "断",
-  "深",
-  "难",
-  "近",
-  "矿",
-  "千",
-  "周",
-  "委",
-  "素",
-  "技",
-  "备",
-  "半",
-  "办",
-  "青",
-  "省",
-  "列",
-  "习",
-  "响",
-  "约",
-  "支",
-  "般",
-  "史",
-  "感",
-  "劳",
-  "便",
-  "团",
-  "往",
-  "酸",
-  "历",
-  "市",
-  "克",
-  "何",
-  "除",
-  "消",
-  "构",
-  "府",
-  "称",
-  "太",
-  "准",
-  "精",
-  "值",
-  "号",
-  "率",
-  "族",
-  "维",
-  "划",
-  "选",
-  "标",
-  "写",
-  "存",
-  "候",
-  "毛",
-  "亲",
-  "快",
-  "效",
-  "斯",
-  "院",
-  "查",
-  "江",
-  "型",
-  "眼",
-  "王",
-  "按",
-  "格",
-  "养",
-  "易",
-  "置",
-  "派",
-  "层",
-  "片",
-  "始",
-  "却",
-  "专",
-  "状",
-  "育",
-  "厂",
-  "京",
-  "识",
-  "适",
-  "属",
-  "圆",
-  "包",
-  "火",
-  "住",
-  "调",
-  "满",
-  "县",
-  "局",
-  "照",
-  "参",
-  "红",
-  "细",
-  "引",
-  "听",
-  "该",
-  "铁",
-  "价",
-  "严",
-  "首",
-  "底",
-  "液",
-  "官",
-  "德",
-  "随",
-  "病",
-  "苏",
-  "失",
-  "尔",
-  "死",
-  "讲",
-  "配",
-  "女",
-  "黄",
-  "推",
-  "显",
-  "谈",
-  "罪",
-  "神",
-  "艺",
-  "呢",
-  "席",
-  "含",
-  "企",
-  "望",
-  "密",
-  "批",
-  "营",
-  "项",
-  "防",
-  "举",
-  "球",
-  "英",
-  "氧",
-  "势",
-  "告",
-  "李",
-  "台",
-  "落",
-  "木",
-  "帮",
-  "轮",
-  "破",
-  "亚",
-  "师",
-  "围",
-  "注",
-  "远",
-  "字",
-  "材",
-  "排",
-  "供",
-  "河",
-  "态",
-  "封",
-  "另",
-  "施",
-  "减",
-  "树",
-  "溶",
-  "怎",
-  "止",
-  "案",
-  "言",
-  "士",
-  "均",
-  "武",
-  "固",
-  "叶",
-  "鱼",
-  "波",
-  "视",
-  "仅",
-  "费",
-  "紧",
-  "爱",
-  "左",
-  "章",
-  "早",
-  "朝",
-  "害",
-  "续",
-  "轻",
-  "服",
-  "试",
-  "食",
-  "充",
-  "兵",
-  "源",
-  "判",
-  "护",
-  "司",
-  "足",
-  "某",
-  "练",
-  "差",
-  "致",
-  "板",
-  "田",
-  "降",
-  "黑",
-  "犯",
-  "负",
-  "击",
-  "范",
-  "继",
-  "兴",
-  "似",
-  "余",
-  "坚",
-  "曲",
-  "输",
-  "修",
-  "故",
-  "城",
-  "夫",
-  "够",
-  "送",
-  "笔",
-  "船",
-  "占",
-  "右",
-  "财",
-  "吃",
-  "富",
-  "春",
-  "职",
-  "觉",
-  "汉",
-  "画",
-  "功",
-  "巴",
-  "跟",
-  "虽",
-  "杂",
-  "飞",
-  "检",
-  "吸",
-  "助",
-  "升",
-  "阳",
-  "互",
-  "初",
-  "创",
-  "抗",
-  "考",
-  "投",
-  "坏",
-  "策",
-  "古",
-  "径",
-  "换",
-  "未",
-  "跑",
-  "留",
-  "钢",
-  "曾",
-  "端",
-  "责",
-  "站",
-  "简",
-  "述",
-  "钱",
-  "副",
-  "尽",
-  "帝",
-  "射",
-  "草",
-  "冲",
-  "承",
-  "独",
-  "令",
-  "限",
-  "阿",
-  "宣",
-  "环",
-  "双",
-  "请",
-  "超",
-  "微",
-  "让",
-  "控",
-  "州",
-  "良",
-  "轴",
-  "找",
-  "否",
-  "纪",
-  "益",
-  "依",
-  "优",
-  "顶",
-  "础",
-  "载",
-  "倒",
-  "房",
-  "突",
-  "坐",
-  "粉",
-  "敌",
-  "略",
-  "客",
-  "袁",
-  "冷",
-  "胜",
-  "绝",
-  "析",
-  "块",
-  "剂",
-  "测",
-  "丝",
-  "协",
-  "诉",
-  "念",
-  "陈",
-  "仍",
-  "罗",
-  "盐",
-  "友",
-  "洋",
-  "错",
-  "苦",
-  "夜",
-  "刑",
-  "移",
-  "频",
-  "逐",
-  "靠",
-  "混",
-  "母",
-  "短",
-  "皮",
-  "终",
-  "聚",
-  "汽",
-  "村",
-  "云",
-  "哪",
-  "既",
-  "距",
-  "卫",
-  "停",
-  "烈",
-  "央",
-  "察",
-  "烧",
-  "迅",
-  "境",
-  "若",
-  "印",
-  "洲",
-  "刻",
-  "括",
-  "激",
-  "孔",
-  "搞",
-  "甚",
-  "室",
-  "待",
-  "核",
-  "校",
-  "散",
-  "侵",
-  "吧",
-  "甲",
-  "游",
-  "久",
-  "菜",
-  "味",
-  "旧",
-  "模",
-  "湖",
-  "货",
-  "损",
-  "预",
-  "阻",
-  "毫",
-  "普",
-  "稳",
-  "乙",
-  "妈",
-  "植",
-  "息",
-  "扩",
-  "银",
-  "语",
-  "挥",
-  "酒",
-  "守",
-  "拿",
-  "序",
-  "纸",
-  "医",
-  "缺",
-  "雨",
-  "吗",
-  "针",
-  "刘",
-  "啊",
-  "急",
-  "唱",
-  "误",
-  "训",
-  "愿",
-  "审",
-  "附",
-  "获",
-  "茶",
-  "鲜",
-  "粮",
-  "斤",
-  "孩",
-  "脱",
-  "硫",
-  "肥",
-  "善",
-  "龙",
-  "演",
-  "父",
-  "渐",
-  "血",
-  "欢",
-  "械",
-  "掌",
-  "歌",
-  "沙",
-  "刚",
-  "攻",
-  "谓",
-  "盾",
-  "讨",
-  "晚",
-  "粒",
-  "乱",
-  "燃",
-  "矛",
-  "乎",
-  "杀",
-  "药",
-  "宁",
-  "鲁",
-  "贵",
-  "钟",
-  "煤",
-  "读",
-  "班",
-  "伯",
-  "香",
-  "介",
-  "迫",
-  "句",
-  "丰",
-  "培",
-  "握",
-  "兰",
-  "担",
-  "弦",
-  "蛋",
-  "沉",
-  "假",
-  "穿",
-  "执",
-  "答",
-  "乐",
-  "谁",
-  "顺",
-  "烟",
-  "缩",
-  "征",
-  "脸",
-  "喜",
-  "松",
-  "脚",
-  "困",
-  "异",
-  "免",
-  "背",
-  "星",
-  "福",
-  "买",
-  "染",
-  "井",
-  "概",
-  "慢",
-  "怕",
-  "磁",
-  "倍",
-  "祖",
-  "皇",
-  "促",
-  "静",
-  "补",
-  "评",
-  "翻",
-  "肉",
-  "践",
-  "尼",
-  "衣",
-  "宽",
-  "扬",
-  "棉",
-  "希",
-  "伤",
-  "操",
-  "垂",
-  "秋",
-  "宜",
-  "氢",
-  "套",
-  "督",
-  "振",
-  "架",
-  "亮",
-  "末",
-  "宪",
-  "庆",
-  "编",
-  "牛",
-  "触",
-  "映",
-  "雷",
-  "销",
-  "诗",
-  "座",
-  "居",
-  "抓",
-  "裂",
-  "胞",
-  "呼",
-  "娘",
-  "景",
-  "威",
-  "绿",
-  "晶",
-  "厚",
-  "盟",
-  "衡",
-  "鸡",
-  "孙",
-  "延",
-  "危",
-  "胶",
-  "屋",
-  "乡",
-  "临",
-  "陆",
-  "顾",
-  "掉",
-  "呀",
-  "灯",
-  "岁",
-  "措",
-  "束",
-  "耐",
-  "剧",
-  "玉",
-  "赵",
-  "跳",
-  "哥",
-  "季",
-  "课",
-  "凯",
-  "胡",
-  "额",
-  "款",
-  "绍",
-  "卷",
-  "齐",
-  "伟",
-  "蒸",
-  "殖",
-  "永",
-  "宗",
-  "苗",
-  "川",
-  "炉",
-  "岩",
-  "弱",
-  "零",
-  "杨",
-  "奏",
-  "沿",
-  "露",
-  "杆",
-  "探",
-  "滑",
-  "镇",
-  "饭",
-  "浓",
-  "航",
-  "怀",
-  "赶",
-  "库",
-  "夺",
-  "伊",
-  "灵",
-  "税",
-  "途",
-  "灭",
-  "赛",
-  "归",
-  "召",
-  "鼓",
-  "播",
-  "盘",
-  "裁",
-  "险",
-  "康",
-  "唯",
-  "录",
-  "菌",
-  "纯",
-  "借",
-  "糖",
-  "盖",
-  "横",
-  "符",
-  "私",
-  "努",
-  "堂",
-  "域",
-  "枪",
-  "润",
-  "幅",
-  "哈",
-  "竟",
-  "熟",
-  "虫",
-  "泽",
-  "脑",
-  "壤",
-  "碳",
-  "欧",
-  "遍",
-  "侧",
-  "寨",
-  "敢",
-  "彻",
-  "虑",
-  "斜",
-  "薄",
-  "庭",
-  "纳",
-  "弹",
-  "饲",
-  "伸",
-  "折",
-  "麦",
-  "湿",
-  "暗",
-  "荷",
-  "瓦",
-  "塞",
-  "床",
-  "筑",
-  "恶",
-  "户",
-  "访",
-  "塔",
-  "奇",
-  "透",
-  "梁",
-  "刀",
-  "旋",
-  "迹",
-  "卡",
-  "氯",
-  "遇",
-  "份",
-  "毒",
-  "泥",
-  "退",
-  "洗",
-  "摆",
-  "灰",
-  "彩",
-  "卖",
-  "耗",
-  "夏",
-  "择",
-  "忙",
-  "铜",
-  "献",
-  "硬",
-  "予",
-  "繁",
-  "圈",
-  "雪",
-  "函",
-  "亦",
-  "抽",
-  "篇",
-  "阵",
-  "阴",
-  "丁",
-  "尺",
-  "追",
-  "堆",
-  "雄",
-  "迎",
-  "泛",
-  "爸",
-  "楼",
-  "避",
-  "谋",
-  "吨",
-  "野",
-  "猪",
-  "旗",
-  "累",
-  "偏",
-  "典",
-  "馆",
-  "索",
-  "秦",
-  "脂",
-  "潮",
-  "爷",
-  "豆",
-  "忽",
-  "托",
-  "惊",
-  "塑",
-  "遗",
-  "愈",
-  "朱",
-  "替",
-  "纤",
-  "粗",
-  "倾",
-  "尚",
-  "痛",
-  "楚",
-  "谢",
-  "奋",
-  "购",
-  "磨",
-  "君",
-  "池",
-  "旁",
-  "碎",
-  "骨",
-  "监",
-  "捕",
-  "弟",
-  "暴",
-  "割",
-  "贯",
-  "殊",
-  "释",
-  "词",
-  "亡",
-  "壁",
-  "顿",
-  "宝",
-  "午",
-  "尘",
-  "闻",
-  "揭",
-  "炮",
-  "残",
-  "冬",
-  "桥",
-  "妇",
-  "警",
-  "综",
-  "招",
-  "吴",
-  "付",
-  "浮",
-  "遭",
-  "徐",
-  "您",
-  "摇",
-  "谷",
-  "赞",
-  "箱",
-  "隔",
-  "订",
-  "男",
-  "吹",
-  "园",
-  "纷",
-  "唐",
-  "败",
-  "宋",
-  "玻",
-  "巨",
-  "耕",
-  "坦",
-  "荣",
-  "闭",
-  "湾",
-  "键",
-  "凡",
-  "驻",
-  "锅",
-  "救",
-  "恩",
-  "剥",
-  "凝",
-  "碱",
-  "齿",
-  "截",
-  "炼",
-  "麻",
-  "纺",
-  "禁",
-  "废",
-  "盛",
-  "版",
-  "缓",
-  "净",
-  "睛",
-  "昌",
-  "婚",
-  "涉",
-  "筒",
-  "嘴",
-  "插",
-  "岸",
-  "朗",
-  "庄",
-  "街",
-  "藏",
-  "姑",
-  "贸",
-  "腐",
-  "奴",
-  "啦",
-  "惯",
-  "乘",
-  "伙",
-  "恢",
-  "匀",
-  "纱",
-  "扎",
-  "辩",
-  "耳",
-  "彪",
-  "臣",
-  "亿",
-  "璃",
-  "抵",
-  "脉",
-  "秀",
-  "萨",
-  "俄",
-  "网",
-  "舞",
-  "店",
-  "喷",
-  "纵",
-  "寸",
-  "汗",
-  "挂",
-  "洪",
-  "贺",
-  "闪",
-  "柬",
-  "爆",
-  "烯",
-  "津",
-  "稻",
-  "墙",
-  "软",
-  "勇",
-  "像",
-  "滚",
-  "厘",
-  "蒙",
-  "芳",
-  "肯",
-  "坡",
-  "柱",
-  "荡",
-  "腿",
-  "仪",
-  "旅",
-  "尾",
-  "轧",
-  "冰",
-  "贡",
-  "登",
-  "黎",
-  "削",
-  "钻",
-  "勒",
-  "逃",
-  "障",
-  "氨",
-  "郭",
-  "峰",
-  "币",
-  "港",
-  "伏",
-  "轨",
-  "亩",
-  "毕",
-  "擦",
-  "莫",
-  "刺",
-  "浪",
-  "秘",
-  "援",
-  "株",
-  "健",
-  "售",
-  "股",
-  "岛",
-  "甘",
-  "泡",
-  "睡",
-  "童",
-  "铸",
-  "汤",
-  "阀",
-  "休",
-  "汇",
-  "舍",
-  "牧",
-  "绕",
-  "炸",
-  "哲",
-  "磷",
-  "绩",
-  "朋",
-  "淡",
-  "尖",
-  "启",
-  "陷",
-  "柴",
-  "呈",
-  "徒",
-  "颜",
-  "泪",
-  "稍",
-  "忘",
-  "泵",
-  "蓝",
-  "拖",
-  "洞",
-  "授",
-  "镜",
-  "辛",
-  "壮",
-  "锋",
-  "贫",
-  "虚",
-  "弯",
-  "摩",
-  "泰",
-  "幼",
-  "廷",
-  "尊",
-  "窗",
-  "纲",
-  "弄",
-  "隶",
-  "疑",
-  "氏",
-  "宫",
-  "姐",
-  "震",
-  "瑞",
-  "怪",
-  "尤",
-  "琴",
-  "循",
-  "描",
-  "膜",
-  "违",
-  "夹",
-  "腰",
-  "缘",
-  "珠",
-  "穷",
-  "森",
-  "枝",
-  "竹",
-  "沟",
-  "催",
-  "绳",
-  "忆",
-  "邦",
-  "剩",
-  "幸",
-  "浆",
-  "栏",
-  "拥",
-  "牙",
-  "贮",
-  "礼",
-  "滤",
-  "钠",
-  "纹",
-  "罢",
-  "拍",
-  "咱",
-  "喊",
-  "袖",
-  "埃",
-  "勤",
-  "罚",
-  "焦",
-  "潜",
-  "伍",
-  "墨",
-  "欲",
-  "缝",
-  "姓",
-  "刊",
-  "饱",
-  "仿",
-  "奖",
-  "铝",
-  "鬼",
-  "丽",
-  "跨",
-  "默",
-  "挖",
-  "链",
-  "扫",
-  "喝",
-  "袋",
-  "炭",
-  "污",
-  "幕",
-  "诸",
-  "弧",
-  "励",
-  "梅",
-  "奶",
-  "洁",
-  "灾",
-  "舟",
-  "鉴",
-  "苯",
-  "讼",
-  "抱",
-  "毁",
-  "懂",
-  "寒",
-  "智",
-  "埔",
-  "寄",
-  "届",
-  "跃",
-  "渡",
-  "挑",
-  "丹",
-  "艰",
-  "贝",
-  "碰",
-  "拔",
-  "爹",
-  "戴",
-  "码",
-  "梦",
-  "芽",
-  "熔",
-  "赤",
-  "渔",
-  "哭",
-  "敬",
-  "颗",
-  "奔",
-  "铅",
-  "仲",
-  "虎",
-  "稀",
-  "妹",
-  "乏",
-  "珍",
-  "申",
-  "桌",
-  "遵",
-  "允",
-  "隆",
-  "螺",
-  "仓",
-  "魏",
-  "锐",
-  "晓",
-  "氮",
-  "兼",
-  "隐",
-  "碍",
-  "赫",
-  "拨",
-  "忠",
-  "肃",
-  "缸",
-  "牵",
-  "抢",
-  "博",
-  "巧",
-  "壳",
-  "兄",
-  "杜",
-  "讯",
-  "诚",
-  "碧",
-  "祥",
-  "柯",
-  "页",
-  "巡",
-  "矩",
-  "悲",
-  "灌",
-  "龄",
-  "伦",
-  "票",
-  "寻",
-  "桂",
-  "铺",
-  "圣",
-  "恐",
-  "恰",
-  "郑",
-  "趣",
-  "抬",
-  "荒",
-  "腾",
-  "贴",
-  "柔",
-  "滴",
-  "猛",
-  "阔",
-  "辆",
-  "妻",
-  "填",
-  "撤",
-  "储",
-  "签",
-  "闹",
-  "扰",
-  "紫",
-  "砂",
-  "递",
-  "戏",
-  "吊",
-  "陶",
-  "伐",
-  "喂",
-  "疗",
-  "瓶",
-  "婆",
-  "抚",
-  "臂",
-  "摸",
-  "忍",
-  "虾",
-  "蜡",
-  "邻",
-  "胸",
-  "巩",
-  "挤",
-  "偶",
-  "弃",
-  "槽",
-  "劲",
-  "乳",
-  "邓",
-  "吉",
-  "仁",
-  "烂",
-  "砖",
-  "租",
-  "乌",
-  "舰",
-  "伴",
-  "瓜",
-  "浅",
-  "丙",
-  "暂",
-  "燥",
-  "橡",
-  "柳",
-  "迷",
-  "暖",
-  "牌",
-  "秧",
-  "胆",
-  "详",
-  "簧",
-  "踏",
-  "瓷",
-  "谱",
-  "呆",
-  "宾",
-  "糊",
-  "洛",
-  "辉",
-  "愤",
-  "竞",
-  "隙",
-  "怒",
-  "粘",
-  "乃",
-  "绪",
-  "肩",
-  "籍",
-  "敏",
-  "涂",
-  "熙",
-  "皆",
-  "侦",
-  "悬",
-  "掘",
-  "享",
-  "纠",
-  "醒",
-  "狂",
-  "锁",
-  "淀",
-  "恨",
-  "牲",
-  "霸",
-  "爬",
-  "赏",
-  "逆",
-  "玩",
-  "陵",
-  "祝",
-  "秒",
-  "浙",
-  "貌"
-]
\ No newline at end of file
diff --git a/networks/monero/wallet/src/extra.rs b/networks/monero/wallet/src/extra.rs
index 521d69ae..537e595a 100644
--- a/networks/monero/wallet/src/extra.rs
+++ b/networks/monero/wallet/src/extra.rs
@@ -302,7 +302,8 @@ impl Extra {
     // `fill_buf` returns the current buffer, filled if empty, only empty if the reader is
     // exhausted
     while !r.fill_buf()?.is_empty() {
-      res.0.push(ExtraField::read(r)?);
+      let Ok(field) = ExtraField::read(r) else { break };
+      res.0.push(field);
     }
     Ok(res)
   }
diff --git a/networks/monero/wallet/src/lib.rs b/networks/monero/wallet/src/lib.rs
index 63f7488a..035c4036 100644
--- a/networks/monero/wallet/src/lib.rs
+++ b/networks/monero/wallet/src/lib.rs
@@ -33,7 +33,7 @@ pub(crate) mod output;
 pub use output::WalletOutput;
 
 mod scan;
-pub use scan::{ScanError, Scanner, GuaranteedScanner};
+pub use scan::{Timelocked, ScanError, Scanner, GuaranteedScanner};
 
 mod decoys;
 pub use decoys::OutputWithDecoys;
@@ -137,15 +137,13 @@ impl SharedKeyDerivations {
 
   fn decrypt(&self, enc_amount: &EncryptedAmount) -> Commitment {
     match enc_amount {
-      // TODO: Add a test vector for this
       EncryptedAmount::Original { mask, amount } => {
-        let mask_shared_sec = keccak256(self.shared_key.as_bytes());
-        let mask =
-          Scalar::from_bytes_mod_order(*mask) - Scalar::from_bytes_mod_order(mask_shared_sec);
+        let mask_shared_sec_scalar = keccak256_to_scalar(self.shared_key.as_bytes());
+        let amount_shared_sec_scalar = keccak256_to_scalar(mask_shared_sec_scalar.as_bytes());
+
+        let mask = Scalar::from_bytes_mod_order(*mask) - mask_shared_sec_scalar;
+        let amount_scalar = Scalar::from_bytes_mod_order(*amount) - amount_shared_sec_scalar;
 
-        let amount_shared_sec = keccak256(mask_shared_sec);
-        let amount_scalar =
-          Scalar::from_bytes_mod_order(*amount) - Scalar::from_bytes_mod_order(amount_shared_sec);
         // d2b from rctTypes.cpp
         let amount = u64::from_le_bytes(amount_scalar.to_bytes()[0 .. 8].try_into().unwrap());
 
diff --git a/networks/monero/wallet/src/scan.rs b/networks/monero/wallet/src/scan.rs
index 0de35f35..19f4d50f 100644
--- a/networks/monero/wallet/src/scan.rs
+++ b/networks/monero/wallet/src/scan.rs
@@ -41,9 +41,9 @@ impl Timelocked {
   ///
   /// `block` is the block number of the block the additional timelock must be satsified by.
   ///
-  /// `time` is represented in seconds since the epoch. Please note Monero uses an on-chain
-  /// deterministic clock for time which is subject to variance from the real world time. This time
-  /// argument will be evaluated against Monero's clock, not the local system's clock.
+  /// `time` is represented in seconds since the epoch and is in terms of Monero's on-chain clock.
+  /// That means outputs whose additional timelocks are statisfied by `Instant::now()` (the time
+  /// according to the local system clock) may still be locked due to variance with Monero's clock.
   #[must_use]
   pub fn additional_timelock_satisfied_by(self, block: usize, time: u64) -> Vec<WalletOutput> {
     let mut res = vec![];
diff --git a/networks/monero/wallet/src/send/mod.rs b/networks/monero/wallet/src/send/mod.rs
index 87d98d69..ca92961f 100644
--- a/networks/monero/wallet/src/send/mod.rs
+++ b/networks/monero/wallet/src/send/mod.rs
@@ -29,6 +29,7 @@ use crate::{
 };
 
 mod tx_keys;
+pub use tx_keys::TransactionKeys;
 mod tx;
 mod eventuality;
 pub use eventuality::Eventuality;
@@ -100,10 +101,11 @@ impl Change {
   ///
   /// 1) The change in the TX is shunted to the fee (making it fingerprintable).
   ///
-  /// 2) If there are two outputs in the TX, Monero would create a payment ID for the non-change
-  ///    output so an observer can't tell apart TXs with a payment ID from TXs without a payment
-  ///    ID. monero-wallet will simply not create a payment ID in this case, revealing it's a
-  ///    monero-wallet TX without change.
+  /// 2) In two-output transactions, where the payment address doesn't have a payment ID, wallet2
+  ///    includes an encrypted dummy payment ID for the non-change output in order to not allow
+  ///    differentiating if transactions send to addresses with payment IDs or not. monero-wallet
+  ///    includes a dummy payment ID which at least one recipient will identify as not the expected
+  ///    dummy payment ID, revealing to the recipient(s) the sender is using non-wallet2 software.
   pub fn fingerprintable(address: Option<MoneroAddress>) -> Change {
     if let Some(address) = address {
       Change(Some(ChangeEnum::AddressOnly(address)))
diff --git a/networks/monero/wallet/src/send/tx.rs b/networks/monero/wallet/src/send/tx.rs
index 65962211..0ebd47f1 100644
--- a/networks/monero/wallet/src/send/tx.rs
+++ b/networks/monero/wallet/src/send/tx.rs
@@ -76,10 +76,18 @@ impl SignableTransaction {
       PaymentId::Encrypted(id).write(&mut id_vec).unwrap();
       extra.push_nonce(id_vec);
     } else {
-      // If there's no payment ID, we push a dummy (as wallet2 does) if there's only one payment
-      if (self.payments.len() == 2) &&
-        self.payments.iter().any(|payment| matches!(payment, InternalPayment::Change(_)))
-      {
+      /*
+        If there's no payment ID, we push a dummy (as wallet2 does) to the first payment.
+
+        This does cause a random payment ID for the other recipient (a documented fingerprint).
+        Functionally, random payment IDs should be fine as wallet2 will trigger this same behavior
+        (a random payment ID being seen by the recipient) with a batch send if one of the recipient
+        addresses has a payment ID.
+
+        The alternative would be to not include any payment ID, fingerprinting to the entire
+        blockchain this is non-standard wallet software (instead of just a single recipient).
+      */
+      if self.payments.len() == 2 {
         let (_, payment_id_xor) = self
           .payments
           .iter()
diff --git a/networks/monero/wallet/src/send/tx_keys.rs b/networks/monero/wallet/src/send/tx_keys.rs
index 7edc9ffd..52db422a 100644
--- a/networks/monero/wallet/src/send/tx_keys.rs
+++ b/networks/monero/wallet/src/send/tx_keys.rs
@@ -1,7 +1,7 @@
 use core::ops::Deref;
 use std_shims::{vec, vec::Vec};
 
-use zeroize::Zeroizing;
+use zeroize::{Zeroize, Zeroizing};
 
 use rand_core::SeedableRng;
 use rand_chacha::ChaCha20Rng;
@@ -15,28 +15,61 @@ use crate::{
   send::{ChangeEnum, InternalPayment, SignableTransaction, key_image_sort},
 };
 
+fn seeded_rng(
+  dst: &'static [u8],
+  outgoing_view_key: &[u8; 32],
+  mut input_keys: Vec<EdwardsPoint>,
+) -> ChaCha20Rng {
+  // Apply the DST
+  let mut transcript = Zeroizing::new(vec![u8::try_from(dst.len()).unwrap()]);
+  transcript.extend(dst);
+
+  // Bind to the outgoing view key to prevent foreign entities from rebuilding the transcript
+  transcript.extend(outgoing_view_key);
+
+  // We sort the inputs here to ensure a consistent order
+  // We use the key image sort as it's applicable and well-defined, not because these are key
+  // images
+  input_keys.sort_by(key_image_sort);
+
+  // Ensure uniqueness across transactions by binding to a use-once object
+  // The keys for the inputs is binding to their key images, making them use-once
+  for key in input_keys {
+    transcript.extend(key.compress().to_bytes());
+  }
+
+  let res = ChaCha20Rng::from_seed(keccak256(&transcript));
+  transcript.zeroize();
+  res
+}
+
+/// An iterator yielding an endless amount of ephemeral keys to use within a transaction.
+///
+/// This is used when sending and can be used after sending to re-derive the keys used, as
+/// necessary for payment proofs.
+pub struct TransactionKeys(ChaCha20Rng);
+impl TransactionKeys {
+  /// Construct a new `TransactionKeys`.
+  ///
+  /// `input_keys` is the list of keys from the outputs spent within this transaction.
+  pub fn new(outgoing_view_key: &Zeroizing<[u8; 32]>, input_keys: Vec<EdwardsPoint>) -> Self {
+    Self(seeded_rng(b"transaction_keys", outgoing_view_key, input_keys))
+  }
+}
+impl Iterator for TransactionKeys {
+  type Item = Zeroizing<Scalar>;
+  fn next(&mut self) -> Option<Self::Item> {
+    Some(Zeroizing::new(Scalar::random(&mut self.0)))
+  }
+}
+
 impl SignableTransaction {
+  fn input_keys(&self) -> Vec<EdwardsPoint> {
+    self.inputs.iter().map(OutputWithDecoys::key).collect()
+  }
+
   pub(crate) fn seeded_rng(&self, dst: &'static [u8]) -> ChaCha20Rng {
-    // Apply the DST
-    let mut transcript = Zeroizing::new(vec![u8::try_from(dst.len()).unwrap()]);
-    transcript.extend(dst);
-
-    // Bind to the outgoing view key to prevent foreign entities from rebuilding the transcript
-    transcript.extend(self.outgoing_view_key.as_slice());
-
-    // Ensure uniqueness across transactions by binding to a use-once object
-    // The keys for the inputs is binding to their key images, making them use-once
-    let mut input_keys = self.inputs.iter().map(OutputWithDecoys::key).collect::<Vec<_>>();
-    // We sort the inputs mid-way through TX construction, so apply our own sort to ensure a
-    // consistent order
-    // We use the key image sort as it's applicable and well-defined, not because these are key
-    // images
-    input_keys.sort_by(key_image_sort);
-    for key in input_keys {
-      transcript.extend(key.compress().to_bytes());
-    }
-
-    ChaCha20Rng::from_seed(keccak256(&transcript))
+    seeded_rng(dst, &self.outgoing_view_key, self.input_keys())
   }
 
   fn has_payments_to_subaddresses(&self) -> bool {
@@ -81,14 +114,14 @@ impl SignableTransaction {
 
   // Calculate the transaction keys used as randomness.
   fn transaction_keys(&self) -> (Zeroizing<Scalar>, Vec<Zeroizing<Scalar>>) {
-    let mut rng = self.seeded_rng(b"transaction_keys");
+    let mut tx_keys = TransactionKeys::new(&self.outgoing_view_key, self.input_keys());
 
-    let tx_key = Zeroizing::new(Scalar::random(&mut rng));
+    let tx_key = tx_keys.next().unwrap();
 
     let mut additional_keys = vec![];
     if self.should_use_additional_keys() {
       for _ in 0 .. self.payments.len() {
-        additional_keys.push(Zeroizing::new(Scalar::random(&mut rng)));
+        additional_keys.push(tx_keys.next().unwrap());
       }
     }
     (tx_key, additional_keys)
diff --git a/networks/monero/wallet/src/tests/extra.rs b/networks/monero/wallet/src/tests/extra.rs
index 2f331e61..497602ce 100644
--- a/networks/monero/wallet/src/tests/extra.rs
+++ b/networks/monero/wallet/src/tests/extra.rs
@@ -8,7 +8,7 @@ use crate::{
 // Tests derived from
 // https://github.com/monero-project/monero/blob/ac02af92867590ca80b2779a7bbeafa99ff94dcb/
 //   tests/unit_tests/test_tx_utils.cpp
-// which is licensed
+// which is licensed as follows:
 #[rustfmt::skip]
 /*
 Copyright (c) 2014-2022, The Monero Project
@@ -105,13 +105,15 @@ fn padding_only_max_size() {
 #[test]
 fn padding_only_exceed_max_size() {
   let buf: Vec<u8> = vec![0; MAX_TX_EXTRA_PADDING_COUNT + 1];
-  Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap_err();
+  let extra = Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap();
+  assert!(extra.0.is_empty());
 }
 
 #[test]
 fn invalid_padding_only() {
   let buf: Vec<u8> = vec![0, 42];
-  Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap_err();
+  let extra = Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap();
+  assert!(extra.0.is_empty());
 }
 
 #[test]
@@ -135,7 +137,8 @@ fn extra_nonce_only_wrong_size() {
   let mut buf: Vec<u8> = vec![0; 20];
   buf[0] = 2;
   buf[1] = 255;
-  Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap_err();
+  let extra = Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap();
+  assert!(extra.0.is_empty());
 }
 
 #[test]
@@ -155,7 +158,8 @@ fn pub_key_and_padding() {
 fn pub_key_and_invalid_padding() {
   let mut buf: Vec<u8> = PUB_KEY_BYTES.to_vec();
   buf.extend([0, 1]);
-  Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap_err();
+  let extra = Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap();
+  assert_eq!(extra.0, vec![ExtraField::PublicKey(pub_key())]);
 }
 
 #[test]
@@ -181,7 +185,8 @@ fn extra_mysterious_minergate_only_wrong_size() {
   let mut buf: Vec<u8> = vec![0; 20];
   buf[0] = 222;
   buf[1] = 255;
-  Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap_err();
+  let extra = Extra::read::<&[u8]>(&mut buf.as_ref()).unwrap();
+  assert!(extra.0.is_empty());
 }
 
 #[test]
diff --git a/networks/monero/wallet/src/tests/mod.rs b/networks/monero/wallet/src/tests/mod.rs
index d8fa7cb0..9f151598 100644
--- a/networks/monero/wallet/src/tests/mod.rs
+++ b/networks/monero/wallet/src/tests/mod.rs
@@ -1 +1,2 @@
 mod extra;
+mod scan;
diff --git a/networks/monero/wallet/src/tests/scan.rs b/networks/monero/wallet/src/tests/scan.rs
new file mode 100644
index 00000000..4f4da239
--- /dev/null
+++ b/networks/monero/wallet/src/tests/scan.rs
@@ -0,0 +1,168 @@
+use monero_rpc::ScannableBlock;
+use crate::{
+  transaction::{Pruned, Transaction},
+  block::Block,
+  ViewPair, Scanner, WalletOutput,
+  output::{AbsoluteId, RelativeId, OutputData, Metadata},
+  Commitment,
+  PaymentId::Encrypted,
+  transaction::Timelock,
+  ringct::EncryptedAmount,
+};
+use zeroize::Zeroizing;
+use curve25519_dalek::{Scalar, constants::ED25519_BASEPOINT_TABLE, edwards::CompressedEdwardsY};
+
+const SPEND_KEY: &str = "ccf0ea10e1ea64354f42fa710c2b318e581969cf49046d809d1f0aadb3fc7a02";
+const VIEW_KEY: &str = "a28b4b2085592881df94ee95da332c16b5bb773eb8bb74730208cbb236c73806";
+
+#[rustfmt::skip]
+const PRUNED_TX_WITH_LONG_ENCRYPTED_AMOUNT: &str = "020001020003060101cf60390bb71aa15eb24037772012d59dc68cb4b6211e1c93206db09a6c346261020002ee8ca293511571c0005e1c144e49d09b8ff03046dbafb3e064a34cb9fc1994b600029e2e5cd08c8681dbcf2ce66071467e835f7e86613fbfed3c4fb170127b94e1072c01d3ce2a622c6e06ed465f81017dd6188c3a6e3d8e65a846f9c98416da0e150a82020901c553d35e54111bd001e0bbcbf289d701ce90e309ead2b487ec1d4d8af5d649543eb99a7620f6b54e532898527be29704f050e6f06de61e5967b2ddd506b4d6d36546065d6aae156ac7bec18c99580c07867fb98cb29853edbafec91af2df605c12f9aaa81a9165625afb6649f5a652012c5ba6612351140e1fb4a8463cc765d0a9bb7d999ba35750f365c5285d77230b76c7a612784f4845812a2899f2ca6a304fee61362db59b263115c27d2ce78af6b1d9e939c1f4036c7707851f41abe6458cf1c748353e593469ebf43536a939f7";
+
+#[rustfmt::skip]
+const BLOCK: &str = "0202e8e28efe04db09e2fc4d57854786220bd33e0169ff692440d27ae3932b9219df9ab1d7260b00000000014101ff050580d0acf30e02704972eb1878e94686b62fa4c0202f3e7e3a263073bd6edd751990ea769494ee80c0fc82aa0202edac72ab7c5745d4acaa95f76a3b76e238a55743cd51efb586f968e09821788d80d0dbc3f40202f9b4cf3141aac4203a1aaed01f09326615544997d1b68964928d9aafd07e38e580a0e5b9c29101023405e3aa75b1b7adf04e8c7faa3c3d45616ae740a8b11fb7cc1555dd8b9e4c9180c0dfda8ee90602d2b78accfe1c2ae57bed4fe3385f7735a988f160ef3bbc1f9d7a0c911c26ffd92101d2d55b5066d247a97696be4a84bf70873e4f149687f57e606eb6682f11650e1701b74773bbea995079805398052da9b69244bda034b089b50e4d9151dedb59a12f";
+
+const OUTPUT_INDEX_FOR_FIRST_RINGCT_OUTPUT: u64 = 0; // note the miner tx is a v1 tx
+
+fn wallet_output0() -> WalletOutput {
+  WalletOutput {
+    absolute_id: AbsoluteId {
+      transaction: hex::decode("b74773bbea995079805398052da9b69244bda034b089b50e4d9151dedb59a12f")
+        .unwrap()
+        .try_into()
+        .unwrap(),
+      index_in_transaction: 0,
+    },
+    relative_id: RelativeId { index_on_blockchain: OUTPUT_INDEX_FOR_FIRST_RINGCT_OUTPUT },
+    data: OutputData {
+      key: CompressedEdwardsY(
+        hex::decode("ee8ca293511571c0005e1c144e49d09b8ff03046dbafb3e064a34cb9fc1994b6")
+          .unwrap()
+          .try_into()
+          .unwrap(),
+      )
+      .decompress()
+      .unwrap(),
+      key_offset: Scalar::from_canonical_bytes(
+        hex::decode("f1d21a76ea0bb228fbc5f0dece0597a8ffb59de7a04b29f70b7c0310446ea905")
+          .unwrap()
+          .try_into()
+          .unwrap(),
+      )
+      .unwrap(),
+      commitment: Commitment {
+        amount: 10000,
+        mask: Scalar::from_canonical_bytes(
+          hex::decode("05c2f142aaf3054cbff0a022f6c7cb75403fd92af0f9441c072ade3f273f7706")
+            .unwrap()
+            .try_into()
+            .unwrap(),
+        )
+        .unwrap(),
+      },
+    },
+    metadata: Metadata {
+      additional_timelock: Timelock::None,
+      subaddress: None,
+      payment_id: Some(Encrypted([0, 0, 0, 0, 0, 0, 0, 0])),
+      arbitrary_data: [].to_vec(),
+    },
+  }
+}
+
+fn wallet_output1() -> WalletOutput {
+  WalletOutput {
+    absolute_id: AbsoluteId {
+      transaction: hex::decode("b74773bbea995079805398052da9b69244bda034b089b50e4d9151dedb59a12f")
+        .unwrap()
+        .try_into()
+        .unwrap(),
+      index_in_transaction: 1,
+    },
+    relative_id: RelativeId { index_on_blockchain: OUTPUT_INDEX_FOR_FIRST_RINGCT_OUTPUT + 1 },
+    data: OutputData {
+      key: CompressedEdwardsY(
+        hex::decode("9e2e5cd08c8681dbcf2ce66071467e835f7e86613fbfed3c4fb170127b94e107")
+          .unwrap()
+          .try_into()
+          .unwrap(),
+      )
+      .decompress()
+      .unwrap(),
+      key_offset: Scalar::from_canonical_bytes(
+        hex::decode("c5189738c1cb40e68d464f1a1848a85f6ab2c09652a31849213dc0fefd212806")
+          .unwrap()
+          .try_into()
+          .unwrap(),
+      )
+      .unwrap(),
+      commitment: Commitment {
+        amount: 10000,
+        mask: Scalar::from_canonical_bytes(
+          hex::decode("c8922ce32cb2bf454a6b77bc91423ba7a18412b71fa39a97a2a743c1fe0bad04")
+            .unwrap()
+            .try_into()
+            .unwrap(),
+        )
+        .unwrap(),
+      },
+    },
+    metadata: Metadata {
+      additional_timelock: Timelock::None,
+      subaddress: None,
+      payment_id: Some(Encrypted([0, 0, 0, 0, 0, 0, 0, 0])),
+      arbitrary_data: [].to_vec(),
+    },
+  }
+}
+
+#[test]
+fn scan_long_encrypted_amount() {
+  // Parse strings
+  let spend_key_buf = hex::decode(SPEND_KEY).unwrap();
+  let spend_key =
+    Zeroizing::new(Scalar::from_canonical_bytes(spend_key_buf.try_into().unwrap()).unwrap());
+
+  let view_key_buf = hex::decode(VIEW_KEY).unwrap();
+  let view_key =
+    Zeroizing::new(Scalar::from_canonical_bytes(view_key_buf.try_into().unwrap()).unwrap());
+
+  let tx_buf = hex::decode(PRUNED_TX_WITH_LONG_ENCRYPTED_AMOUNT).unwrap();
+  let tx = Transaction::<Pruned>::read::<&[u8]>(&mut tx_buf.as_ref()).unwrap();
+
+  let block_buf = hex::decode(BLOCK).unwrap();
+  let block = Block::read::<&[u8]>(&mut block_buf.as_ref()).unwrap();
+
+  // Confirm tx has long form encrypted amounts
+  match &tx {
+    Transaction::V2 { prefix: _, proofs } => {
+      let proofs = proofs.clone().unwrap();
+      assert_eq!(proofs.base.encrypted_amounts.len(), 2);
+      assert!(proofs
+        .base
+        .encrypted_amounts
+        .iter()
+        .all(|o| matches!(o, EncryptedAmount::Original { .. })));
+    }
+    _ => panic!("Unexpected tx version"),
+  };
+
+  // Prepare scanner
+  let spend_pub = &*spend_key * ED25519_BASEPOINT_TABLE;
+  let view: ViewPair = ViewPair::new(spend_pub, view_key).unwrap();
+  let mut scanner = Scanner::new(view);
+
+  // Prepare scannable block
+  let txs: Vec<Transaction<Pruned>> = vec![tx];
+  let scannable_block = ScannableBlock {
+    block,
+    transactions: txs,
+    output_index_for_first_ringct_output: Some(OUTPUT_INDEX_FOR_FIRST_RINGCT_OUTPUT),
+  };
+
+  // Scan the block
+  let outputs = scanner.scan(scannable_block).unwrap().not_additionally_locked();
+
+  assert_eq!(outputs.len(), 2);
+  assert_eq!(outputs[0], wallet_output0());
+  assert_eq!(outputs[1], wallet_output1());
+}
diff --git a/networks/monero/wallet/util/Cargo.toml b/networks/monero/wallet/util/Cargo.toml
deleted file mode 100644
index 39dfe3a6..00000000
--- a/networks/monero/wallet/util/Cargo.toml
+++ /dev/null
@@ -1,51 +0,0 @@
-[package]
-name = "monero-wallet-util"
-version = "0.1.0"
-description = "Additional utility functions for monero-wallet"
-license = "MIT"
-repository = "https://github.com/serai-dex/serai/tree/develop/networks/monero/wallet/util"
-authors = ["Luke Parker <lukeparker5132@gmail.com>"]
-edition = "2021"
-rust-version = "1.80"
-
-[package.metadata.docs.rs]
-all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
-
-[lints]
-workspace = true
-
-[dependencies]
-std-shims = { path = "../../../../common/std-shims", version = "^0.1.1", default-features = false }
-
-thiserror = { version = "1", default-features = false, optional = true }
-
-zeroize = { version = "^1.5", default-features = false, features = ["zeroize_derive"] }
-rand_core = { version = "0.6", default-features = false }
-
-monero-wallet = { path = "..", default-features = false }
-
-monero-seed = { path = "../seed", default-features = false }
-polyseed = { path = "../polyseed", default-features = false }
-
-[dev-dependencies]
-hex = { version = "0.4", default-features = false, features = ["std"] }
-curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize"] }
-
-[features]
-std = [
-  "std-shims/std",
-
-  "thiserror",
-
-  "zeroize/std",
-  "rand_core/std",
-
-  "monero-wallet/std",
-
-  "monero-seed/std",
-  "polyseed/std",
-]
-compile-time-generators = ["monero-wallet/compile-time-generators"]
-multisig = ["monero-wallet/multisig", "std"]
-default = ["std", "compile-time-generators"]
diff --git a/networks/monero/wallet/util/LICENSE b/networks/monero/wallet/util/LICENSE
deleted file mode 100644
index 91d893c1..00000000
--- a/networks/monero/wallet/util/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022-2024 Luke Parker
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/networks/monero/wallet/util/README.md b/networks/monero/wallet/util/README.md
deleted file mode 100644
index 15d7c80c..00000000
--- a/networks/monero/wallet/util/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Monero Wallet Utilities
-
-Additional utility functions for monero-wallet.
-
-This library is isolated as it adds a notable amount of dependencies to the
-tree, and to be a subject to a distinct versioning policy. This library may
-more frequently undergo breaking API changes.
-
-This library is usable under no-std when the `std` feature (on by default) is
-disabled.
-
-### Features
-
-- Support for Monero's seed algorithm
-- Support for Polyseed
-
-### Cargo Features
-
-- `std` (on by default): Enables `std` (and with it, more efficient internal
-  implementations).
-- `compile-time-generators` (on by default): Derives the generators at
-  compile-time so they don't need to be derived at runtime. This is recommended
-  if program size doesn't need to be kept minimal.
-- `multisig`: Adds support for creation of transactions using a threshold
-  multisignature wallet.
diff --git a/networks/monero/wallet/util/src/lib.rs b/networks/monero/wallet/util/src/lib.rs
deleted file mode 100644
index e2aaa696..00000000
--- a/networks/monero/wallet/util/src/lib.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
-#![doc = include_str!("../README.md")]
-#![deny(missing_docs)]
-#![cfg_attr(not(feature = "std"), no_std)]
-
-pub use monero_wallet::*;
-
-/// Seed creation and parsing functionality.
-pub mod seed;
diff --git a/networks/monero/wallet/util/src/seed.rs b/networks/monero/wallet/util/src/seed.rs
deleted file mode 100644
index 77ca3358..00000000
--- a/networks/monero/wallet/util/src/seed.rs
+++ /dev/null
@@ -1,150 +0,0 @@
-use core::fmt;
-use std_shims::string::String;
-
-use zeroize::{Zeroize, ZeroizeOnDrop, Zeroizing};
-use rand_core::{RngCore, CryptoRng};
-
-pub use monero_seed as original;
-pub use polyseed;
-
-use original::{SeedError as OriginalSeedError, Seed as OriginalSeed};
-use polyseed::{PolyseedError, Polyseed};
-
-/// An error from working with seeds.
-#[derive(Clone, Copy, PartialEq, Eq, Debug)]
-#[cfg_attr(feature = "std", derive(thiserror::Error))]
-pub enum SeedError {
-  /// The seed was invalid.
-  #[cfg_attr(feature = "std", error("invalid seed"))]
-  InvalidSeed,
-  /// The entropy was invalid.
-  #[cfg_attr(feature = "std", error("invalid entropy"))]
-  InvalidEntropy,
-  /// The checksum did not match the data.
-  #[cfg_attr(feature = "std", error("invalid checksum"))]
-  InvalidChecksum,
-  /// Unsupported features were enabled.
-  #[cfg_attr(feature = "std", error("unsupported features"))]
-  UnsupportedFeatures,
-}
-
-impl From<OriginalSeedError> for SeedError {
-  fn from(error: OriginalSeedError) -> SeedError {
-    match error {
-      OriginalSeedError::DeprecatedEnglishWithChecksum | OriginalSeedError::InvalidChecksum => {
-        SeedError::InvalidChecksum
-      }
-      OriginalSeedError::InvalidSeed => SeedError::InvalidSeed,
-    }
-  }
-}
-
-impl From<PolyseedError> for SeedError {
-  fn from(error: PolyseedError) -> SeedError {
-    match error {
-      PolyseedError::UnsupportedFeatures => SeedError::UnsupportedFeatures,
-      PolyseedError::InvalidEntropy => SeedError::InvalidEntropy,
-      PolyseedError::InvalidSeed => SeedError::InvalidSeed,
-      PolyseedError::InvalidChecksum => SeedError::InvalidChecksum,
-    }
-  }
-}
-
-/// The type of the seed.
-#[derive(Clone, Copy, PartialEq, Eq, Debug)]
-pub enum SeedType {
-  /// The seed format originally used by Monero,
-  Original(monero_seed::Language),
-  /// Polyseed.
-  Polyseed(polyseed::Language),
-}
-
-/// A seed, internally either the original format or a Polyseed.
-#[derive(Clone, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]
-pub enum Seed {
-  /// The originally formatted seed.
-  Original(OriginalSeed),
-  /// A Polyseed.
-  Polyseed(Polyseed),
-}
-
-impl fmt::Debug for Seed {
-  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-    match self {
-      Seed::Original(_) => f.debug_struct("Seed::Original").finish_non_exhaustive(),
-      Seed::Polyseed(_) => f.debug_struct("Seed::Polyseed").finish_non_exhaustive(),
-    }
-  }
-}
-
-impl Seed {
-  /// Create a new seed.
-  pub fn new<R: RngCore + CryptoRng>(rng: &mut R, seed_type: SeedType) -> Seed {
-    match seed_type {
-      SeedType::Original(lang) => Seed::Original(OriginalSeed::new(rng, lang)),
-      SeedType::Polyseed(lang) => Seed::Polyseed(Polyseed::new(rng, lang)),
-    }
-  }
-
-  /// Parse a seed from a string.
-  pub fn from_string(seed_type: SeedType, words: Zeroizing<String>) -> Result<Seed, SeedError> {
-    match seed_type {
-      SeedType::Original(lang) => Ok(OriginalSeed::from_string(lang, words).map(Seed::Original)?),
-      SeedType::Polyseed(lang) => Ok(Polyseed::from_string(lang, words).map(Seed::Polyseed)?),
-    }
-  }
-
-  /// Create a seed from entropy.
-  ///
-  /// A birthday may be optionally provided, denoted in seconds since the epoch. For
-  /// SeedType::Original, it will be ignored. For SeedType::Polyseed, it'll be embedded into the
-  /// seed.
-  ///
-  /// For SeedType::Polyseed, the last 13 bytes of `entropy` must be 0.
-  // TODO: Return Result, not Option
-  pub fn from_entropy(
-    seed_type: SeedType,
-    entropy: Zeroizing<[u8; 32]>,
-    birthday: Option<u64>,
-  ) -> Option<Seed> {
-    match seed_type {
-      SeedType::Original(lang) => OriginalSeed::from_entropy(lang, entropy).map(Seed::Original),
-      SeedType::Polyseed(lang) => {
-        Polyseed::from(lang, 0, birthday.unwrap_or(0), entropy).ok().map(Seed::Polyseed)
-      }
-    }
-  }
-
-  /// Converts the seed to a string.
-  pub fn to_string(&self) -> Zeroizing<String> {
-    match self {
-      Seed::Original(seed) => seed.to_string(),
-      Seed::Polyseed(seed) => seed.to_string(),
-    }
-  }
-
-  /// Get the entropy for this seed.
-  pub fn entropy(&self) -> Zeroizing<[u8; 32]> {
-    match self {
-      Seed::Original(seed) => seed.entropy(),
-      Seed::Polyseed(seed) => seed.entropy().clone(),
-    }
-  }
-
-  /// Get the key derived from this seed.
-  pub fn key(&self) -> Zeroizing<[u8; 32]> {
-    match self {
-      // Original does not differentiate between its entropy and its key
-      Seed::Original(seed) => seed.entropy(),
-      Seed::Polyseed(seed) => seed.key(),
-    }
-  }
-
-  /// Get the birthday of this seed, denoted in seconds since the epoch.
-  pub fn birthday(&self) -> u64 {
-    match self {
-      Seed::Original(_) => 0,
-      Seed::Polyseed(seed) => seed.birthday(),
-    }
-  }
-}
diff --git a/networks/monero/wallet/util/tests/tests.rs b/networks/monero/wallet/util/tests/tests.rs
deleted file mode 100644
index 7b6656f2..00000000
--- a/networks/monero/wallet/util/tests/tests.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-// TODO
-#[test]
-fn test() {}
diff --git a/processor/src/batch_signer.rs b/processor/src/batch_signer.rs
index 41f50322..64cbb8a0 100644
--- a/processor/src/batch_signer.rs
+++ b/processor/src/batch_signer.rs
@@ -17,7 +17,7 @@ use frost_schnorrkel::Schnorrkel;
 use log::{info, debug, warn};
 
 use serai_client::{
-  primitives::{NetworkId, BlockHash},
+  primitives::{ExternalNetworkId, BlockHash},
   in_instructions::primitives::{Batch, SignedBatch, batch_message},
   validator_sets::primitives::Session,
 };
@@ -41,7 +41,7 @@ type SignatureShare = <AlgorithmSignMachine<Ristretto, Schnorrkel> as SignMachin
 pub struct BatchSigner<D: Db> {
   db: PhantomData<D>,
 
-  network: NetworkId,
+  network: ExternalNetworkId,
   session: Session,
   keys: Vec<ThresholdKeys<Ristretto>>,
 
@@ -65,7 +65,7 @@ impl<D: Db> fmt::Debug for BatchSigner<D> {
 
 impl<D: Db> BatchSigner<D> {
   pub fn new(
-    network: NetworkId,
+    network: ExternalNetworkId,
     session: Session,
     keys: Vec<ThresholdKeys<Ristretto>>,
   ) -> BatchSigner<D> {
diff --git a/processor/src/main.rs b/processor/src/main.rs
index e0d97aa6..98b09a06 100644
--- a/processor/src/main.rs
+++ b/processor/src/main.rs
@@ -9,7 +9,7 @@ use log::{info, warn};
 use tokio::time::sleep;
 
 use serai_client::{
-  primitives::{BlockHash, NetworkId},
+  primitives::{BlockHash, ExternalNetworkId},
   validator_sets::primitives::{Session, KeyPair},
 };
 
@@ -736,19 +736,23 @@ async fn main() {
     "http://".to_string() + &login + "@" + &hostname + ":" + &port
   };
   let network_id = match env::var("NETWORK").expect("network wasn't specified").as_str() {
-    "bitcoin" => NetworkId::Bitcoin,
-    "ethereum" => NetworkId::Ethereum,
-    "monero" => NetworkId::Monero,
+    "bitcoin" => ExternalNetworkId::Bitcoin,
+    "ethereum" => ExternalNetworkId::Ethereum,
+    "monero" => ExternalNetworkId::Monero,
     _ => panic!("unrecognized network"),
   };
 
   let coordinator = MessageQueue::from_env(Service::Processor(network_id));
 
+  // This allow is necessary since each configuration deletes the other networks from the following
+  // match arms. So we match all cases but since all cases already there according to the compiler
+  // we put this to allow clippy to get pass this.
+  #[allow(unreachable_patterns)]
   match network_id {
     #[cfg(feature = "bitcoin")]
-    NetworkId::Bitcoin => run(db, Bitcoin::new(url).await, coordinator).await,
+    ExternalNetworkId::Bitcoin => run(db, Bitcoin::new(url).await, coordinator).await,
     #[cfg(feature = "ethereum")]
-    NetworkId::Ethereum => {
+    ExternalNetworkId::Ethereum => {
       let relayer_hostname = env::var("ETHEREUM_RELAYER_HOSTNAME")
         .expect("ethereum relayer hostname wasn't specified")
         .to_string();
@@ -758,7 +762,7 @@ async fn main() {
       run(db.clone(), Ethereum::new(db, url, relayer_url).await, coordinator).await
     }
     #[cfg(feature = "monero")]
-    NetworkId::Monero => run(db, Monero::new(url).await, coordinator).await,
+    ExternalNetworkId::Monero => run(db, Monero::new(url).await, coordinator).await,
     _ => panic!("spawning a processor for an unsupported network"),
   }
 }
diff --git a/processor/src/multisigs/db.rs b/processor/src/multisigs/db.rs
index 3d1d13bd..f5e05f68 100644
--- a/processor/src/multisigs/db.rs
+++ b/processor/src/multisigs/db.rs
@@ -4,7 +4,11 @@ use ciphersuite::Ciphersuite;
 pub use serai_db::*;
 
 use scale::{Encode, Decode};
-use serai_client::{primitives::Balance, in_instructions::primitives::InInstructionWithBalance};
+#[rustfmt::skip]
+use serai_client::{
+  in_instructions::primitives::InInstructionWithBalance,
+  primitives::ExternalBalance
+};
 
 use crate::{
   Get, Plan,
@@ -69,7 +73,7 @@ create_db!(
     OperatingCostsDb: () -> u64,
     ResolvedDb: (tx: &[u8]) -> [u8; 32],
     SigningDb: (key: &[u8]) -> Vec<u8>,
-    ForwardedOutputDb: (balance: Balance) -> Vec<u8>,
+    ForwardedOutputDb: (balance: ExternalBalance) -> Vec<u8>,
     DelayedOutputDb: () -> Vec<u8>
   }
 );
@@ -224,7 +228,7 @@ impl ForwardedOutputDb {
 
   pub fn take_forwarded_output(
     txn: &mut impl DbTxn,
-    balance: Balance,
+    balance: ExternalBalance,
   ) -> Option<InInstructionWithBalance> {
     let outputs = Self::get(txn, balance)?;
     let mut outputs_ref = outputs.as_slice();
diff --git a/processor/src/multisigs/scheduler/mod.rs b/processor/src/multisigs/scheduler/mod.rs
index 26c940fe..b34e2f3e 100644
--- a/processor/src/multisigs/scheduler/mod.rs
+++ b/processor/src/multisigs/scheduler/mod.rs
@@ -3,7 +3,7 @@ use std::io;
 
 use ciphersuite::Ciphersuite;
 
-use serai_client::primitives::{NetworkId, Balance};
+use serai_client::primitives::{ExternalBalance, ExternalNetworkId};
 
 use crate::{networks::Network, Db, Payment, Plan};
 
@@ -34,18 +34,18 @@ pub trait Scheduler<N: Network>: Sized + Clone + PartialEq + Debug {
   fn new<D: Db>(
     txn: &mut D::Transaction<'_>,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Self;
 
   /// Load a Scheduler from the DB.
   fn from_db<D: Db>(
     db: &D,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> io::Result<Self>;
 
   /// Check if a branch is usable.
-  fn can_use_branch(&self, balance: Balance) -> bool;
+  fn can_use_branch(&self, balance: ExternalBalance) -> bool;
 
   /// Schedule a series of outputs/payments.
   fn schedule<D: Db>(
diff --git a/processor/src/multisigs/scheduler/smart_contract.rs b/processor/src/multisigs/scheduler/smart_contract.rs
index 3da8acf4..a6bbbdaf 100644
--- a/processor/src/multisigs/scheduler/smart_contract.rs
+++ b/processor/src/multisigs/scheduler/smart_contract.rs
@@ -2,7 +2,7 @@ use std::{io, collections::HashSet};
 
 use ciphersuite::{group::GroupEncoding, Ciphersuite};
 
-use serai_client::primitives::{NetworkId, Coin, Balance};
+use serai_client::primitives::{ExternalBalance, ExternalCoin, ExternalNetworkId};
 
 use crate::{
   Get, DbTxn, Db, Payment, Plan, create_db,
@@ -13,7 +13,7 @@ use crate::{
 #[derive(Clone, PartialEq, Eq, Debug)]
 pub struct Scheduler<N: Network> {
   key: <N::Curve as Ciphersuite>::G,
-  coins: HashSet<Coin>,
+  coins: HashSet<ExternalCoin>,
   rotated: bool,
 }
 
@@ -78,7 +78,7 @@ impl<N: Network<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
   fn new<D: Db>(
     _txn: &mut D::Transaction<'_>,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Self {
     assert!(N::branch_address(key).is_none());
     assert!(N::change_address(key).is_none());
@@ -91,7 +91,7 @@ impl<N: Network<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
   fn from_db<D: Db>(
     db: &D,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> io::Result<Self> {
     Ok(Scheduler {
       key,
@@ -100,7 +100,7 @@ impl<N: Network<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
     })
   }
 
-  fn can_use_branch(&self, _balance: Balance) -> bool {
+  fn can_use_branch(&self, _balance: ExternalBalance) -> bool {
     false
   }
 
diff --git a/processor/src/multisigs/scheduler/utxo.rs b/processor/src/multisigs/scheduler/utxo.rs
index 1865cab9..3758e54c 100644
--- a/processor/src/multisigs/scheduler/utxo.rs
+++ b/processor/src/multisigs/scheduler/utxo.rs
@@ -5,7 +5,7 @@ use std::{
 
 use ciphersuite::{group::GroupEncoding, Ciphersuite};
 
-use serai_client::primitives::{NetworkId, Coin, Amount, Balance};
+use serai_client::primitives::{ExternalNetworkId, ExternalCoin, Amount, ExternalBalance};
 
 use crate::{
   DbTxn, Db, Payment, Plan,
@@ -17,7 +17,7 @@ use crate::{
 #[derive(Clone, PartialEq, Eq, Debug)]
 pub struct Scheduler<N: UtxoNetwork> {
   key: <N::Curve as Ciphersuite>::G,
-  coin: Coin,
+  coin: ExternalCoin,
 
   // Serai, when it has more outputs expected than it can handle in a single transaction, will
   // schedule the outputs to be handled later. Immediately, it just creates additional outputs
@@ -57,7 +57,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> Scheduler<N> {
 
   fn read<R: Read>(
     key: <N::Curve as Ciphersuite>::G,
-    coin: Coin,
+    coin: ExternalCoin,
     reader: &mut R,
   ) -> io::Result<Self> {
     let mut read_plans = || -> io::Result<_> {
@@ -145,7 +145,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> Scheduler<N> {
   pub fn new<D: Db>(
     txn: &mut D::Transaction<'_>,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Self {
     assert!(N::branch_address(key).is_some());
     assert!(N::change_address(key).is_some());
@@ -173,7 +173,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> Scheduler<N> {
   pub fn from_db<D: Db>(
     db: &D,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> io::Result<Self> {
     let coin = {
       let coins = network.coins();
@@ -190,7 +190,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> Scheduler<N> {
     Self::read(key, coin, reader)
   }
 
-  pub fn can_use_branch(&self, balance: Balance) -> bool {
+  pub fn can_use_branch(&self, balance: ExternalBalance) -> bool {
     assert_eq!(balance.coin, self.coin);
     self.plans.contains_key(&balance.amount.0)
   }
@@ -249,7 +249,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> Scheduler<N> {
         Payment {
           address: branch_address.clone(),
           data: None,
-          balance: Balance { coin: self.coin, amount: Amount(amount) },
+          balance: ExternalBalance { coin: self.coin, amount: Amount(amount) },
         },
       );
     }
@@ -536,7 +536,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
   fn new<D: Db>(
     txn: &mut D::Transaction<'_>,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Self {
     Scheduler::new::<D>(txn, key, network)
   }
@@ -545,13 +545,13 @@ impl<N: UtxoNetwork<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
   fn from_db<D: Db>(
     db: &D,
     key: <N::Curve as Ciphersuite>::G,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> io::Result<Self> {
     Scheduler::from_db::<D>(db, key, network)
   }
 
   /// Check if a branch is usable.
-  fn can_use_branch(&self, balance: Balance) -> bool {
+  fn can_use_branch(&self, balance: ExternalBalance) -> bool {
     Scheduler::can_use_branch(self, balance)
   }
 
@@ -574,7 +574,7 @@ impl<N: UtxoNetwork<Scheduler = Self>> SchedulerTrait<N> for Scheduler<N> {
 
   /// Note a branch output as having been created, with the amount it was actually created with,
   /// or not having been created due to being too small.
-  // TODO: Move this to Balance.
+  // TODO: Move this to ExternalBalance.
   fn created_output<D: Db>(
     &mut self,
     txn: &mut D::Transaction<'_>,
diff --git a/processor/src/networks/bitcoin.rs b/processor/src/networks/bitcoin.rs
index ae62f4c8..5702f5ed 100644
--- a/processor/src/networks/bitcoin.rs
+++ b/processor/src/networks/bitcoin.rs
@@ -4,7 +4,6 @@ use async_trait::async_trait;
 
 use scale::{Encode, Decode};
 
-use transcript::{Transcript, RecommendedTranscript};
 use ciphersuite::group::ff::PrimeField;
 use k256::{ProjectivePoint, Scalar};
 use frost::{
@@ -43,7 +42,7 @@ use bitcoin_serai::bitcoin::{
 };
 
 use serai_client::{
-  primitives::{MAX_DATA_LEN, Coin, NetworkId, Amount, Balance},
+  primitives::{MAX_DATA_LEN, ExternalCoin, ExternalNetworkId, Amount, ExternalBalance},
   networks::bitcoin::Address,
 };
 
@@ -126,8 +125,8 @@ impl OutputTrait<Bitcoin> for Output {
     self.presumed_origin.clone()
   }
 
-  fn balance(&self) -> Balance {
-    Balance { coin: Coin::Bitcoin, amount: Amount(self.output.value()) }
+  fn balance(&self) -> ExternalBalance {
+    ExternalBalance { coin: ExternalCoin::Bitcoin, amount: Amount(self.output.value()) }
   }
 
   fn data(&self) -> &[u8] {
@@ -249,7 +248,6 @@ impl EventualityTrait for Eventuality {
 
 #[derive(Clone, Debug)]
 pub struct SignableTransaction {
-  transcript: RecommendedTranscript,
   actual: BSignableTransaction,
 }
 impl PartialEq for SignableTransaction {
@@ -425,7 +423,7 @@ impl Bitcoin {
     calculating_fee: bool,
   ) -> Result<Option<BSignableTransaction>, NetworkError> {
     for payment in payments {
-      assert_eq!(payment.balance.coin, Coin::Bitcoin);
+      assert_eq!(payment.balance.coin, ExternalCoin::Bitcoin);
     }
 
     // TODO2: Use an fee representative of several blocks, cached inside Self
@@ -457,7 +455,7 @@ impl Bitcoin {
         panic!("trying to create a bitcoin transaction without inputs")
       }
       // No outputs left and the change isn't worth enough/not even enough funds to pay the fee
-      Err(TransactionError::NoOutputs | TransactionError::NotEnoughFunds) => Ok(None),
+      Err(TransactionError::NoOutputs | TransactionError::NotEnoughFunds { .. }) => Ok(None),
       // amortize_fee removes payments which fall below the dust threshold
       Err(TransactionError::DustPayment) => panic!("dust payment despite removing dust"),
       Err(TransactionError::TooMuchData) => {
@@ -600,7 +598,7 @@ impl Network for Bitcoin {
 
   type Address = Address;
 
-  const NETWORK: NetworkId = NetworkId::Bitcoin;
+  const NETWORK: ExternalNetworkId = ExternalNetworkId::Bitcoin;
   const ID: &'static str = "Bitcoin";
   const ESTIMATED_BLOCK_TIME_IN_SECONDS: usize = 600;
   const CONFIRMATIONS: usize = 6;
@@ -820,7 +818,7 @@ impl Network for Bitcoin {
   async fn signable_transaction(
     &self,
     block_number: usize,
-    plan_id: &[u8; 32],
+    _plan_id: &[u8; 32],
     _key: ProjectivePoint,
     inputs: &[Output],
     payments: &[Payment<Self>],
@@ -829,12 +827,8 @@ impl Network for Bitcoin {
   ) -> Result<Option<(Self::SignableTransaction, Self::Eventuality)>, NetworkError> {
     Ok(self.make_signable_transaction(block_number, inputs, payments, change, false).await?.map(
       |signable| {
-        let mut transcript =
-          RecommendedTranscript::new(b"Serai Processor Bitcoin Transaction Transcript");
-        transcript.append_message(b"plan", plan_id);
-
         let eventuality = Eventuality(signable.txid());
-        (SignableTransaction { transcript, actual: signable }, eventuality)
+        (SignableTransaction { actual: signable }, eventuality)
       },
     ))
   }
@@ -844,13 +838,7 @@ impl Network for Bitcoin {
     keys: ThresholdKeys<Self::Curve>,
     transaction: Self::SignableTransaction,
   ) -> Result<Self::TransactionMachine, NetworkError> {
-    Ok(
-      transaction
-        .actual
-        .clone()
-        .multisig(&keys, transaction.transcript)
-        .expect("used the wrong keys"),
-    )
+    Ok(transaction.actual.clone().multisig(&keys).expect("used the wrong keys"))
   }
 
   async fn publish_completion(&self, tx: &Transaction) -> Result<(), NetworkError> {
diff --git a/processor/src/networks/ethereum.rs b/processor/src/networks/ethereum.rs
index 3545f34a..49c4bc61 100644
--- a/processor/src/networks/ethereum.rs
+++ b/processor/src/networks/ethereum.rs
@@ -38,7 +38,7 @@ use tokio::{
 };
 
 use serai_client::{
-  primitives::{Coin, Amount, Balance, NetworkId},
+  primitives::{ExternalCoin, Amount, ExternalBalance, ExternalNetworkId},
   validator_sets::primitives::Session,
 };
 
@@ -68,20 +68,20 @@ const DAI: [u8; 20] =
     Err(_) => panic!("invalid test DAI hex address"),
   };
 
-fn coin_to_serai_coin(coin: &EthereumCoin) -> Option<Coin> {
+fn coin_to_serai_coin(coin: &EthereumCoin) -> Option<ExternalCoin> {
   match coin {
-    EthereumCoin::Ether => Some(Coin::Ether),
+    EthereumCoin::Ether => Some(ExternalCoin::Ether),
     EthereumCoin::Erc20(token) => {
       if *token == DAI {
-        return Some(Coin::Dai);
+        return Some(ExternalCoin::Dai);
       }
       None
     }
   }
 }
 
-fn amount_to_serai_amount(coin: Coin, amount: U256) -> Amount {
-  assert_eq!(coin.network(), NetworkId::Ethereum);
+fn amount_to_serai_amount(coin: ExternalCoin, amount: U256) -> Amount {
+  assert_eq!(coin.network(), ExternalNetworkId::Ethereum);
   assert_eq!(coin.decimals(), 8);
   // Remove 10 decimals so we go from 18 decimals to 8 decimals
   let divisor = U256::from(10_000_000_000u64);
@@ -89,8 +89,8 @@ fn amount_to_serai_amount(coin: Coin, amount: U256) -> Amount {
   Amount(u64::try_from(amount / divisor).unwrap())
 }
 
-fn balance_to_ethereum_amount(balance: Balance) -> U256 {
-  assert_eq!(balance.coin.network(), NetworkId::Ethereum);
+fn balance_to_ethereum_amount(balance: ExternalBalance) -> U256 {
+  assert_eq!(balance.coin.network(), ExternalNetworkId::Ethereum);
   assert_eq!(balance.coin.decimals(), 8);
   // Restore 10 decimals so we go from 8 decimals to 18 decimals
   let factor = U256::from(10_000_000_000u64);
@@ -201,14 +201,14 @@ impl<D: Db> Output<Ethereum<D>> for EthereumInInstruction {
     Some(Address(self.from))
   }
 
-  fn balance(&self) -> Balance {
+  fn balance(&self) -> ExternalBalance {
     let coin = coin_to_serai_coin(&self.coin).unwrap_or_else(|| {
       panic!(
         "requesting coin for an EthereumInInstruction with a coin {}",
         "we don't handle. this never should have been yielded"
       )
     });
-    Balance { coin, amount: amount_to_serai_amount(coin, self.amount) }
+    ExternalBalance { coin, amount: amount_to_serai_amount(coin, self.amount) }
   }
   fn data(&self) -> &[u8] {
     &self.data
@@ -394,7 +394,7 @@ impl<D: Db> Network for Ethereum<D> {
 
   type Address = Address;
 
-  const NETWORK: NetworkId = NetworkId::Ethereum;
+  const NETWORK: ExternalNetworkId = ExternalNetworkId::Ethereum;
   const ID: &'static str = "Ethereum";
   const ESTIMATED_BLOCK_TIME_IN_SECONDS: usize = 32 * 12;
   const CONFIRMATIONS: usize = 1;
@@ -681,7 +681,7 @@ impl<D: Db> Network for Ethereum<D> {
                 OutInstructionTarget::Direct(payment.address.0)
               },
               value: {
-                assert_eq!(payment.balance.coin, Coin::Ether); // TODO
+                assert_eq!(payment.balance.coin, ExternalCoin::Ether); // TODO
                 balance_to_ethereum_amount(payment.balance)
               },
             })
diff --git a/processor/src/networks/mod.rs b/processor/src/networks/mod.rs
index ee3cd24a..9cfeff89 100644
--- a/processor/src/networks/mod.rs
+++ b/processor/src/networks/mod.rs
@@ -10,7 +10,7 @@ use frost::{
   sign::PreprocessMachine,
 };
 
-use serai_client::primitives::{NetworkId, Balance};
+use serai_client::primitives::{ExternalBalance, ExternalNetworkId};
 
 use log::error;
 
@@ -115,7 +115,7 @@ pub trait Output<N: Network>: Send + Sync + Sized + Clone + PartialEq + Eq + Deb
 
   fn presumed_origin(&self) -> Option<N::Address>;
 
-  fn balance(&self) -> Balance;
+  fn balance(&self) -> ExternalBalance;
   fn data(&self) -> &[u8];
 
   fn write<W: io::Write>(&self, writer: &mut W) -> io::Result<()>;
@@ -126,13 +126,13 @@ pub trait Output<N: Network>: Send + Sync + Sized + Clone + PartialEq + Eq + Deb
 pub trait Transaction<N: Network>: Send + Sync + Sized + Clone + PartialEq + Debug {
   type Id: 'static + Id;
   fn id(&self) -> Self::Id;
-  // TODO: Move to Balance
+  // TODO: Move to ExternalBalance
   #[cfg(test)]
   async fn fee(&self, network: &N) -> u64;
 }
 
 pub trait SignableTransaction: Send + Sync + Clone + Debug {
-  // TODO: Move to Balance
+  // TODO: Move to ExternalBalance
   fn fee(&self) -> u64;
 }
 
@@ -280,7 +280,7 @@ pub trait Network: 'static + Send + Sync + Clone + PartialEq + Debug {
     + TryFrom<Vec<u8>>;
 
   /// Network ID for this network.
-  const NETWORK: NetworkId;
+  const NETWORK: ExternalNetworkId;
   /// String ID for this network.
   const ID: &'static str;
   /// The estimated amount of time a block will take.
@@ -297,7 +297,7 @@ pub trait Network: 'static + Send + Sync + Clone + PartialEq + Debug {
   /// For any received output, there's the cost to spend the output. This value MUST exceed the
   /// cost to spend said output, and should by a notable margin (not just 2x, yet an order of
   /// magnitude).
-  // TODO: Dust needs to be diversified per Coin
+  // TODO: Dust needs to be diversified per ExternalCoin
   const DUST: u64;
 
   /// The cost to perform input aggregation with a 2-input 1-output TX.
diff --git a/processor/src/networks/monero.rs b/processor/src/networks/monero.rs
index 154702fe..4e70c002 100644
--- a/processor/src/networks/monero.rs
+++ b/processor/src/networks/monero.rs
@@ -31,7 +31,7 @@ use monero_wallet::Scanner;
 use tokio::time::sleep;
 
 pub use serai_client::{
-  primitives::{MAX_DATA_LEN, Coin, NetworkId, Amount, Balance},
+  primitives::{MAX_DATA_LEN, ExternalCoin, ExternalNetworkId, Amount, ExternalBalance},
   networks::monero::Address,
 };
 
@@ -85,8 +85,8 @@ impl OutputTrait<Monero> for Output {
     None
   }
 
-  fn balance(&self) -> Balance {
-    Balance { coin: Coin::Monero, amount: Amount(self.0.commitment().amount) }
+  fn balance(&self) -> ExternalBalance {
+    ExternalBalance { coin: ExternalCoin::Monero, amount: Amount(self.0.commitment().amount) }
   }
 
   fn data(&self) -> &[u8] {
@@ -308,7 +308,7 @@ impl Monero {
     calculating_fee: bool,
   ) -> Result<Option<MakeSignableTransactionResult>, NetworkError> {
     for payment in payments {
-      assert_eq!(payment.balance.coin, Coin::Monero);
+      assert_eq!(payment.balance.coin, ExternalCoin::Monero);
     }
 
     // TODO2: Use an fee representative of several blocks, cached inside Self
@@ -363,7 +363,7 @@ impl Monero {
             .legacy_address(MoneroNetwork::Mainnet),
         )
         .unwrap(),
-        balance: Balance { coin: Coin::Monero, amount: Amount(0) },
+        balance: ExternalBalance { coin: ExternalCoin::Monero, amount: Amount(0) },
         data: None,
       });
     }
@@ -470,7 +470,7 @@ impl Network for Monero {
 
   type Address = Address;
 
-  const NETWORK: NetworkId = NetworkId::Monero;
+  const NETWORK: ExternalNetworkId = ExternalNetworkId::Monero;
   const ID: &'static str = "Monero";
   const ESTIMATED_BLOCK_TIME_IN_SECONDS: usize = 120;
   const CONFIRMATIONS: usize = 10;
diff --git a/processor/src/plan.rs b/processor/src/plan.rs
index 58a8a5e1..caadef5a 100644
--- a/processor/src/plan.rs
+++ b/processor/src/plan.rs
@@ -6,7 +6,7 @@ use transcript::{Transcript, RecommendedTranscript};
 use ciphersuite::group::GroupEncoding;
 use frost::curve::Ciphersuite;
 
-use serai_client::primitives::Balance;
+use serai_client::primitives::ExternalBalance;
 
 use crate::{
   networks::{Output, Network},
@@ -17,7 +17,7 @@ use crate::{
 pub struct Payment<N: Network> {
   pub address: N::Address,
   pub data: Option<Vec<u8>>,
-  pub balance: Balance,
+  pub balance: ExternalBalance,
 }
 
 impl<N: Network> Payment<N> {
@@ -69,7 +69,7 @@ impl<N: Network> Payment<N> {
       None
     };
 
-    let balance = Balance::decode(&mut scale::IoReader(reader))
+    let balance = ExternalBalance::decode(&mut scale::IoReader(reader))
       .map_err(|_| io::Error::other("invalid balance"))?;
 
     Ok(Payment { address, data, balance })
diff --git a/processor/src/slash_report_signer.rs b/processor/src/slash_report_signer.rs
index b7b2d55c..056055f7 100644
--- a/processor/src/slash_report_signer.rs
+++ b/processor/src/slash_report_signer.rs
@@ -17,9 +17,9 @@ use frost_schnorrkel::Schnorrkel;
 use log::{info, warn};
 
 use serai_client::{
+  primitives::ExternalNetworkId,
+  validator_sets::primitives::{report_slashes_message, ExternalValidatorSet, Session},
   Public,
-  primitives::NetworkId,
-  validator_sets::primitives::{Session, ValidatorSet, report_slashes_message},
 };
 
 use messages::coordinator::*;
@@ -38,7 +38,7 @@ type SignatureShare = <AlgorithmSignMachine<Ristretto, Schnorrkel> as SignMachin
 >>::SignatureShare;
 
 pub struct SlashReportSigner {
-  network: NetworkId,
+  network: ExternalNetworkId,
   session: Session,
   keys: Vec<ThresholdKeys<Ristretto>>,
   report: Vec<([u8; 32], u32)>,
@@ -66,7 +66,7 @@ impl fmt::Debug for SlashReportSigner {
 impl SlashReportSigner {
   pub fn new(
     txn: &mut impl DbTxn,
-    network: NetworkId,
+    network: ExternalNetworkId,
     session: Session,
     keys: Vec<ThresholdKeys<Ristretto>>,
     report: Vec<([u8; 32], u32)>,
@@ -178,7 +178,7 @@ impl SlashReportSigner {
           let (machine, share) = match machine.sign(
             preprocesses,
             &report_slashes_message(
-              &ValidatorSet { network: self.network, session: self.session },
+              &ExternalValidatorSet { network: self.network, session: self.session },
               &self
                 .report
                 .clone()
diff --git a/processor/src/tests/batch_signer.rs b/processor/src/tests/batch_signer.rs
index dc45ff31..8da67ef1 100644
--- a/processor/src/tests/batch_signer.rs
+++ b/processor/src/tests/batch_signer.rs
@@ -33,17 +33,17 @@ fn test_batch_signer() {
   let block = BlockHash([0xaa; 32]);
 
   let batch = Batch {
-    network: NetworkId::Monero,
+    network: ExternalNetworkId::Monero,
     id,
     block,
     instructions: vec![
       InInstructionWithBalance {
         instruction: InInstruction::Transfer(SeraiAddress([0xbb; 32])),
-        balance: Balance { coin: Coin::Bitcoin, amount: Amount(1000) },
+        balance: ExternalBalance { coin: ExternalCoin::Bitcoin, amount: Amount(1000) },
       },
       InInstructionWithBalance {
         instruction: InInstruction::Dex(DexCall::SwapAndAddLiquidity(SeraiAddress([0xbb; 32]))),
-        balance: Balance { coin: Coin::Monero, amount: Amount(9999999999999999) },
+        balance: ExternalBalance { coin: ExternalCoin::Monero, amount: Amount(9999999999999999) },
       },
     ],
   };
@@ -70,7 +70,7 @@ fn test_batch_signer() {
     let i = Participant::new(u16::try_from(i).unwrap()).unwrap();
     let keys = keys.get(&i).unwrap().clone();
 
-    let mut signer = BatchSigner::<MemDb>::new(NetworkId::Monero, Session(0), vec![keys]);
+    let mut signer = BatchSigner::<MemDb>::new(ExternalNetworkId::Monero, Session(0), vec![keys]);
     let mut db = MemDb::new();
 
     let mut txn = db.txn();
diff --git a/processor/src/tests/signer.rs b/processor/src/tests/signer.rs
index 77307ef2..26b26b35 100644
--- a/processor/src/tests/signer.rs
+++ b/processor/src/tests/signer.rs
@@ -12,7 +12,7 @@ use frost::{
 use serai_db::{DbTxn, Db, MemDb};
 
 use serai_client::{
-  primitives::{NetworkId, Coin, Amount, Balance},
+  primitives::{ExternalNetworkId, ExternalCoin, Amount, ExternalBalance},
   validator_sets::primitives::Session,
 };
 
@@ -185,12 +185,11 @@ pub async fn test_signer<N: Network>(
     let payments = vec![Payment {
       address: N::external_address(&network, key).await,
       data: None,
-      balance: Balance {
+      balance: ExternalBalance {
         coin: match N::NETWORK {
-          NetworkId::Serai => panic!("test_signer called with Serai"),
-          NetworkId::Bitcoin => Coin::Bitcoin,
-          NetworkId::Ethereum => Coin::Ether,
-          NetworkId::Monero => Coin::Monero,
+          ExternalNetworkId::Bitcoin => ExternalCoin::Bitcoin,
+          ExternalNetworkId::Ethereum => ExternalCoin::Ether,
+          ExternalNetworkId::Monero => ExternalCoin::Monero,
         },
         amount: Amount(amount),
       },
@@ -224,7 +223,7 @@ pub async fn test_signer<N: Network>(
     .await;
   // Don't run if Ethereum as the received output will revert by the contract
   // (and therefore not actually exist)
-  if N::NETWORK != NetworkId::Ethereum {
+  if N::NETWORK != ExternalNetworkId::Ethereum {
     assert_eq!(outputs.len(), 1 + usize::from(u8::from(plan.change.is_some())));
     // Adjust the amount for the fees
     let amount = amount - tx.fee(&network).await;
diff --git a/processor/src/tests/wallet.rs b/processor/src/tests/wallet.rs
index 86a27349..74d7ccc0 100644
--- a/processor/src/tests/wallet.rs
+++ b/processor/src/tests/wallet.rs
@@ -11,7 +11,7 @@ use tokio::time::timeout;
 use serai_db::{DbTxn, Db, MemDb};
 
 use serai_client::{
-  primitives::{NetworkId, Coin, Amount, Balance},
+  primitives::{ExternalNetworkId, ExternalCoin, Amount, ExternalBalance},
   validator_sets::primitives::Session,
 };
 
@@ -89,12 +89,11 @@ pub async fn test_wallet<N: Network>(
     vec![Payment {
       address: N::external_address(&network, key).await,
       data: None,
-      balance: Balance {
+      balance: ExternalBalance {
         coin: match N::NETWORK {
-          NetworkId::Serai => panic!("test_wallet called with Serai"),
-          NetworkId::Bitcoin => Coin::Bitcoin,
-          NetworkId::Ethereum => Coin::Ether,
-          NetworkId::Monero => Coin::Monero,
+          ExternalNetworkId::Bitcoin => ExternalCoin::Bitcoin,
+          ExternalNetworkId::Ethereum => ExternalCoin::Ether,
+          ExternalNetworkId::Monero => ExternalCoin::Monero,
         },
         amount: Amount(amount),
       },
@@ -117,12 +116,11 @@ pub async fn test_wallet<N: Network>(
     vec![Payment {
       address: N::external_address(&network, key).await,
       data: None,
-      balance: Balance {
+      balance: ExternalBalance {
         coin: match N::NETWORK {
-          NetworkId::Serai => panic!("test_wallet called with Serai"),
-          NetworkId::Bitcoin => Coin::Bitcoin,
-          NetworkId::Ethereum => Coin::Ether,
-          NetworkId::Monero => Coin::Monero,
+          ExternalNetworkId::Bitcoin => ExternalCoin::Bitcoin,
+          ExternalNetworkId::Ethereum => ExternalCoin::Ether,
+          ExternalNetworkId::Monero => ExternalCoin::Monero,
         },
         amount: Amount(amount),
       }
@@ -160,7 +158,7 @@ pub async fn test_wallet<N: Network>(
 
   // Don't run if Ethereum as the received output will revert by the contract
   // (and therefore not actually exist)
-  if N::NETWORK != NetworkId::Ethereum {
+  if N::NETWORK != ExternalNetworkId::Ethereum {
     assert_eq!(outputs.len(), 1 + usize::from(u8::from(plans[0].change.is_some())));
     // Adjust the amount for the fees
     let amount = amount - tx.fee(&network).await;
@@ -183,7 +181,7 @@ pub async fn test_wallet<N: Network>(
     network.mine_block().await;
   }
 
-  if N::NETWORK != NetworkId::Ethereum {
+  if N::NETWORK != ExternalNetworkId::Ethereum {
     match timeout(Duration::from_secs(30), scanner.events.recv()).await.unwrap().unwrap() {
       ScannerEvent::Block { is_retirement_block, block: block_id, outputs: these_outputs } => {
         scanner.multisig_completed.send(false).unwrap();
diff --git a/spec/integrations/Instructions.md b/spec/integrations/Instructions.md
index f509ca71..3ba1e23e 100644
--- a/spec/integrations/Instructions.md
+++ b/spec/integrations/Instructions.md
@@ -23,7 +23,7 @@ instructed to act on invalid data, it will drop the entire instruction.
 
 ### Serialization
 
-Instructions are SCALE encoded.
+Instructions are [SCALE](https://docs.substrate.io/reference/scale-codec/) encoded.
 
 ### In Instruction
 
diff --git a/substrate/abi/src/dex.rs b/substrate/abi/src/dex.rs
index 2daa62f0..d85dace3 100644
--- a/substrate/abi/src/dex.rs
+++ b/substrate/abi/src/dex.rs
@@ -2,7 +2,7 @@ use sp_runtime::BoundedVec;
 
 use serai_primitives::*;
 
-type PoolId = Coin;
+type PoolId = ExternalCoin;
 type MaxSwapPathLength = sp_core::ConstU32<3>;
 
 #[derive(Clone, PartialEq, Eq, Debug, scale::Encode, scale::Decode, scale_info::TypeInfo)]
@@ -10,7 +10,7 @@ type MaxSwapPathLength = sp_core::ConstU32<3>;
 #[cfg_attr(all(feature = "std", feature = "serde"), derive(serde::Deserialize))]
 pub enum Call {
   add_liquidity {
-    coin: Coin,
+    coin: ExternalCoin,
     coin_desired: SubstrateAmount,
     sri_desired: SubstrateAmount,
     coin_min: SubstrateAmount,
@@ -18,7 +18,7 @@ pub enum Call {
     mint_to: SeraiAddress,
   },
   remove_liquidity {
-    coin: Coin,
+    coin: ExternalCoin,
     lp_token_burn: SubstrateAmount,
     coin_min_receive: SubstrateAmount,
     sri_min_receive: SubstrateAmount,
diff --git a/substrate/abi/src/economic_security.rs b/substrate/abi/src/economic_security.rs
index fc548def..2899e090 100644
--- a/substrate/abi/src/economic_security.rs
+++ b/substrate/abi/src/economic_security.rs
@@ -1,8 +1,8 @@
-use serai_primitives::NetworkId;
+use serai_primitives::ExternalNetworkId;
 
 #[derive(Clone, PartialEq, Eq, Debug, scale::Encode, scale::Decode, scale_info::TypeInfo)]
 #[cfg_attr(feature = "borsh", derive(borsh::BorshSerialize, borsh::BorshDeserialize))]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum Event {
-  EconomicSecurityReached { network: NetworkId },
+  EconomicSecurityReached { network: ExternalNetworkId },
 }
diff --git a/substrate/abi/src/genesis_liquidity.rs b/substrate/abi/src/genesis_liquidity.rs
index 46128414..7660b3ab 100644
--- a/substrate/abi/src/genesis_liquidity.rs
+++ b/substrate/abi/src/genesis_liquidity.rs
@@ -6,7 +6,7 @@ use primitives::*;
 #[derive(Clone, PartialEq, Eq, Debug, scale::Encode, scale::Decode, scale_info::TypeInfo)]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum Call {
-  remove_coin_liquidity { balance: Balance },
+  remove_coin_liquidity { balance: ExternalBalance },
   oraclize_values { values: Values, signature: Signature },
 }
 
@@ -14,8 +14,7 @@ pub enum Call {
 #[cfg_attr(feature = "borsh", derive(borsh::BorshSerialize, borsh::BorshDeserialize))]
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum Event {
-  GenesisLiquidityAdded { by: SeraiAddress, balance: Balance },
-  GenesisLiquidityRemoved { by: SeraiAddress, balance: Balance },
-  GenesisLiquidityAddedToPool { coin1: Balance, coin2: Balance },
-  EconomicSecurityReached { network: NetworkId },
+  GenesisLiquidityAdded { by: SeraiAddress, balance: ExternalBalance },
+  GenesisLiquidityRemoved { by: SeraiAddress, balance: ExternalBalance },
+  GenesisLiquidityAddedToPool { coin: ExternalBalance, sri: Amount },
 }
diff --git a/substrate/abi/src/in_instructions.rs b/substrate/abi/src/in_instructions.rs
index d3ab5ca3..765a5053 100644
--- a/substrate/abi/src/in_instructions.rs
+++ b/substrate/abi/src/in_instructions.rs
@@ -16,7 +16,7 @@ pub enum Call {
 #[cfg_attr(feature = "serde", derive(serde::Serialize))]
 #[cfg_attr(all(feature = "std", feature = "serde"), derive(serde::Deserialize))]
 pub enum Event {
-  Batch { network: NetworkId, id: u32, block: BlockHash, instructions_hash: [u8; 32] },
-  InstructionFailure { network: NetworkId, id: u32, index: u32 },
-  Halt { network: NetworkId },
+  Batch { network: ExternalNetworkId, id: u32, block: BlockHash, instructions_hash: [u8; 32] },
+  InstructionFailure { network: ExternalNetworkId, id: u32, index: u32 },
+  Halt { network: ExternalNetworkId },
 }
diff --git a/substrate/abi/src/validator_sets.rs b/substrate/abi/src/validator_sets.rs
index 1e1e3359..8e7d2e1e 100644
--- a/substrate/abi/src/validator_sets.rs
+++ b/substrate/abi/src/validator_sets.rs
@@ -10,13 +10,13 @@ use serai_validator_sets_primitives::*;
 #[cfg_attr(all(feature = "std", feature = "serde"), derive(serde::Deserialize))]
 pub enum Call {
   set_keys {
-    network: NetworkId,
+    network: ExternalNetworkId,
     removed_participants: BoundedVec<SeraiAddress, ConstU32<{ MAX_KEY_SHARES_PER_SET / 3 }>>,
     key_pair: KeyPair,
     signature: Signature,
   },
   report_slashes {
-    network: NetworkId,
+    network: ExternalNetworkId,
     slashes: BoundedVec<(SeraiAddress, u32), ConstU32<{ MAX_KEY_SHARES_PER_SET / 3 }>>,
     signature: Signature,
   },
@@ -47,7 +47,7 @@ pub enum Event {
     removed: SeraiAddress,
   },
   KeyGen {
-    set: ValidatorSet,
+    set: ExternalValidatorSet,
     key_pair: KeyPair,
   },
   AcceptedHandover {
diff --git a/substrate/client/src/serai/dex.rs b/substrate/client/src/serai/dex.rs
index ea76e625..1c44107f 100644
--- a/substrate/client/src/serai/dex.rs
+++ b/substrate/client/src/serai/dex.rs
@@ -1,5 +1,5 @@
 use sp_core::bounded_vec::BoundedVec;
-use serai_abi::primitives::{SeraiAddress, Amount, Coin};
+use serai_abi::primitives::{Amount, Coin, ExternalCoin, SeraiAddress};
 
 use crate::{SeraiError, TemporalSerai};
 
@@ -20,7 +20,7 @@ impl<'a> SeraiDex<'a> {
   }
 
   pub fn add_liquidity(
-    coin: Coin,
+    coin: ExternalCoin,
     coin_amount: Amount,
     sri_amount: Amount,
     min_coin_amount: Amount,
@@ -61,11 +61,14 @@ impl<'a> SeraiDex<'a> {
   }
 
   /// Returns the reserves of `coin:SRI` pool.
-  pub async fn get_reserves(&self, coin: Coin) -> Result<Option<(Amount, Amount)>, SeraiError> {
-    self.0.runtime_api("DexApi_get_reserves", (coin, Coin::Serai)).await
+  pub async fn get_reserves(
+    &self,
+    coin: ExternalCoin,
+  ) -> Result<Option<(Amount, Amount)>, SeraiError> {
+    self.0.runtime_api("DexApi_get_reserves", (Coin::from(coin), Coin::Serai)).await
   }
 
-  pub async fn oracle_value(&self, coin: Coin) -> Result<Option<Amount>, SeraiError> {
+  pub async fn oracle_value(&self, coin: ExternalCoin) -> Result<Option<Amount>, SeraiError> {
     self.0.storage(PALLET, "SecurityOracleValue", coin).await
   }
 }
diff --git a/substrate/client/src/serai/genesis_liquidity.rs b/substrate/client/src/serai/genesis_liquidity.rs
index 187844be..e8a152fa 100644
--- a/substrate/client/src/serai/genesis_liquidity.rs
+++ b/substrate/client/src/serai/genesis_liquidity.rs
@@ -35,7 +35,7 @@ impl<'a> SeraiGenesisLiquidity<'a> {
     ))
   }
 
-  pub fn remove_coin_liquidity(balance: Balance) -> serai_abi::Call {
+  pub fn remove_coin_liquidity(balance: ExternalBalance) -> serai_abi::Call {
     serai_abi::Call::GenesisLiquidity(serai_abi::genesis_liquidity::Call::remove_coin_liquidity {
       balance,
     })
@@ -44,7 +44,7 @@ impl<'a> SeraiGenesisLiquidity<'a> {
   pub async fn liquidity(
     &self,
     address: &SeraiAddress,
-    coin: Coin,
+    coin: ExternalCoin,
   ) -> Result<LiquidityAmount, SeraiError> {
     Ok(
       self
@@ -59,7 +59,7 @@ impl<'a> SeraiGenesisLiquidity<'a> {
     )
   }
 
-  pub async fn supply(&self, coin: Coin) -> Result<LiquidityAmount, SeraiError> {
+  pub async fn supply(&self, coin: ExternalCoin) -> Result<LiquidityAmount, SeraiError> {
     Ok(self.0.storage(PALLET, "Supply", coin).await?.unwrap_or(LiquidityAmount::zero()))
   }
 
diff --git a/substrate/client/src/serai/in_instructions.rs b/substrate/client/src/serai/in_instructions.rs
index a8b47bfc..d27ce695 100644
--- a/substrate/client/src/serai/in_instructions.rs
+++ b/substrate/client/src/serai/in_instructions.rs
@@ -2,7 +2,7 @@ pub use serai_abi::in_instructions::primitives;
 use primitives::SignedBatch;
 
 use crate::{
-  primitives::{BlockHash, NetworkId},
+  primitives::{BlockHash, ExternalNetworkId},
   Transaction, SeraiError, Serai, TemporalSerai,
 };
 
@@ -15,14 +15,14 @@ pub struct SeraiInInstructions<'a>(pub(crate) &'a TemporalSerai<'a>);
 impl<'a> SeraiInInstructions<'a> {
   pub async fn latest_block_for_network(
     &self,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Result<Option<BlockHash>, SeraiError> {
     self.0.storage(PALLET, "LatestNetworkBlock", network).await
   }
 
   pub async fn last_batch_for_network(
     &self,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Result<Option<u32>, SeraiError> {
     self.0.storage(PALLET, "LastBatch", network).await
   }
diff --git a/substrate/client/src/serai/liquidity_tokens.rs b/substrate/client/src/serai/liquidity_tokens.rs
index 3e9052b2..c7ec93cf 100644
--- a/substrate/client/src/serai/liquidity_tokens.rs
+++ b/substrate/client/src/serai/liquidity_tokens.rs
@@ -1,6 +1,6 @@
 use scale::Encode;
 
-use serai_abi::primitives::{SeraiAddress, Amount, Coin, Balance};
+use serai_abi::primitives::{Amount, ExternalBalance, ExternalCoin, SeraiAddress};
 
 use crate::{TemporalSerai, SeraiError};
 
@@ -9,13 +9,13 @@ const PALLET: &str = "LiquidityTokens";
 #[derive(Clone, Copy)]
 pub struct SeraiLiquidityTokens<'a>(pub(crate) &'a TemporalSerai<'a>);
 impl<'a> SeraiLiquidityTokens<'a> {
-  pub async fn token_supply(&self, coin: Coin) -> Result<Amount, SeraiError> {
+  pub async fn token_supply(&self, coin: ExternalCoin) -> Result<Amount, SeraiError> {
     Ok(self.0.storage(PALLET, "Supply", coin).await?.unwrap_or(Amount(0)))
   }
 
   pub async fn token_balance(
     &self,
-    coin: Coin,
+    coin: ExternalCoin,
     address: SeraiAddress,
   ) -> Result<Amount, SeraiError> {
     Ok(
@@ -31,11 +31,16 @@ impl<'a> SeraiLiquidityTokens<'a> {
     )
   }
 
-  pub fn transfer(to: SeraiAddress, balance: Balance) -> serai_abi::Call {
-    serai_abi::Call::LiquidityTokens(serai_abi::liquidity_tokens::Call::transfer { to, balance })
+  pub fn transfer(to: SeraiAddress, balance: ExternalBalance) -> serai_abi::Call {
+    serai_abi::Call::LiquidityTokens(serai_abi::liquidity_tokens::Call::transfer {
+      to,
+      balance: balance.into(),
+    })
   }
 
-  pub fn burn(balance: Balance) -> serai_abi::Call {
-    serai_abi::Call::LiquidityTokens(serai_abi::liquidity_tokens::Call::burn { balance })
+  pub fn burn(balance: ExternalBalance) -> serai_abi::Call {
+    serai_abi::Call::LiquidityTokens(serai_abi::liquidity_tokens::Call::burn {
+      balance: balance.into(),
+    })
   }
 }
diff --git a/substrate/client/src/serai/validator_sets.rs b/substrate/client/src/serai/validator_sets.rs
index ec67bae0..5bfb3ed5 100644
--- a/substrate/client/src/serai/validator_sets.rs
+++ b/substrate/client/src/serai/validator_sets.rs
@@ -2,12 +2,12 @@ use scale::Encode;
 
 use sp_core::sr25519::{Public, Signature};
 
-use serai_abi::primitives::Amount;
+use serai_abi::{primitives::Amount, validator_sets::primitives::ExternalValidatorSet};
 pub use serai_abi::validator_sets::primitives;
-use primitives::{Session, ValidatorSet, KeyPair};
+use primitives::{Session, KeyPair};
 
 use crate::{
-  primitives::{NetworkId, SeraiAddress},
+  primitives::{NetworkId, ExternalNetworkId, SeraiAddress},
   Transaction, Serai, TemporalSerai, SeraiError,
 };
 
@@ -167,13 +167,13 @@ impl<'a> SeraiValidatorSets<'a> {
   }
 
   // TODO: Store these separately since we almost never need both at once?
-  pub async fn keys(&self, set: ValidatorSet) -> Result<Option<KeyPair>, SeraiError> {
+  pub async fn keys(&self, set: ExternalValidatorSet) -> Result<Option<KeyPair>, SeraiError> {
     self.0.storage(PALLET, "Keys", (sp_core::hashing::twox_64(&set.encode()), set)).await
   }
 
   pub async fn key_pending_slash_report(
     &self,
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Result<Option<Public>, SeraiError> {
     self.0.storage(PALLET, "PendingSlashReport", network).await
   }
@@ -187,7 +187,7 @@ impl<'a> SeraiValidatorSets<'a> {
   }
 
   pub fn set_keys(
-    network: NetworkId,
+    network: ExternalNetworkId,
     removed_participants: sp_runtime::BoundedVec<
       SeraiAddress,
       sp_core::ConstU32<{ primitives::MAX_KEY_SHARES_PER_SET / 3 }>,
@@ -212,7 +212,7 @@ impl<'a> SeraiValidatorSets<'a> {
   }
 
   pub fn report_slashes(
-    network: NetworkId,
+    network: ExternalNetworkId,
     slashes: sp_runtime::BoundedVec<
       (SeraiAddress, u32),
       sp_core::ConstU32<{ primitives::MAX_KEY_SHARES_PER_SET / 3 }>,
diff --git a/substrate/client/tests/batch.rs b/substrate/client/tests/batch.rs
index 17e4d374..1a5b3866 100644
--- a/substrate/client/tests/batch.rs
+++ b/substrate/client/tests/batch.rs
@@ -8,7 +8,7 @@ use blake2::{
 use scale::Encode;
 
 use serai_client::{
-  primitives::{Amount, NetworkId, Coin, Balance, BlockHash, SeraiAddress},
+  primitives::{Amount, BlockHash, ExternalBalance, ExternalCoin, SeraiAddress},
   in_instructions::{
     primitives::{InInstruction, InInstructionWithBalance, Batch},
     InInstructionsEvent,
@@ -22,18 +22,17 @@ use common::in_instructions::provide_batch;
 
 serai_test!(
   publish_batch: (|serai: Serai| async move {
-    let network = NetworkId::Bitcoin;
     let id = 0;
-
     let mut block_hash = BlockHash([0; 32]);
     OsRng.fill_bytes(&mut block_hash.0);
 
     let mut address = SeraiAddress::new([0; 32]);
     OsRng.fill_bytes(&mut address.0);
 
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
+    let network = coin.network();
     let amount = Amount(OsRng.next_u64().saturating_add(1));
-    let balance = Balance { coin, amount };
+    let balance = ExternalBalance { coin, amount };
 
     let batch = Batch {
       network,
@@ -67,9 +66,9 @@ serai_test!(
     let serai = serai.coins();
     assert_eq!(
       serai.mint_events().await.unwrap(),
-      vec![CoinsEvent::Mint { to: address, balance }]
+      vec![CoinsEvent::Mint { to: address, balance: balance.into() }]
     );
-    assert_eq!(serai.coin_supply(coin).await.unwrap(), amount);
-    assert_eq!(serai.coin_balance(coin, address).await.unwrap(), amount);
+    assert_eq!(serai.coin_supply(coin.into()).await.unwrap(), amount);
+    assert_eq!(serai.coin_balance(coin.into(), address).await.unwrap(), amount);
   })
 );
diff --git a/substrate/client/tests/burn.rs b/substrate/client/tests/burn.rs
index a30dabec..3dc0c127 100644
--- a/substrate/client/tests/burn.rs
+++ b/substrate/client/tests/burn.rs
@@ -12,7 +12,7 @@ use sp_core::Pair;
 
 use serai_client::{
   primitives::{
-    Amount, NetworkId, Coin, Balance, BlockHash, SeraiAddress, Data, ExternalAddress,
+    Amount, ExternalCoin, ExternalBalance, BlockHash, SeraiAddress, Data, ExternalAddress,
     insecure_pair_from_name,
   },
   in_instructions::{
@@ -28,9 +28,7 @@ use common::{tx::publish_tx, in_instructions::provide_batch};
 
 serai_test!(
   burn: (|serai: Serai| async move {
-    let network = NetworkId::Bitcoin;
     let id = 0;
-
     let mut block_hash = BlockHash([0; 32]);
     OsRng.fill_bytes(&mut block_hash.0);
 
@@ -38,9 +36,10 @@ serai_test!(
     let public = pair.public();
     let address = SeraiAddress::from(public);
 
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
+    let network = coin.network();
     let amount = Amount(OsRng.next_u64().saturating_add(1));
-    let balance = Balance { coin, amount };
+    let balance = ExternalBalance { coin, amount };
 
     let batch = Batch {
       network,
@@ -69,10 +68,10 @@ serai_test!(
 
     assert_eq!(
       serai.coins().mint_events().await.unwrap(),
-      vec![CoinsEvent::Mint { to: address, balance }]
+      vec![CoinsEvent::Mint { to: address, balance: balance.into() }]
     );
-    assert_eq!(serai.coins().coin_supply(coin).await.unwrap(), amount);
-    assert_eq!(serai.coins().coin_balance(coin, address).await.unwrap(), amount);
+    assert_eq!(serai.coins().coin_supply(coin.into()).await.unwrap(), amount);
+    assert_eq!(serai.coins().coin_balance(coin.into(), address).await.unwrap(), amount);
 
     // Now burn it
     let mut rand_bytes = vec![0; 32];
@@ -99,7 +98,7 @@ serai_test!(
     let serai = serai.coins();
     let events = serai.burn_with_instruction_events().await.unwrap();
     assert_eq!(events, vec![CoinsEvent::BurnWithInstruction { from: address, instruction }]);
-    assert_eq!(serai.coin_supply(coin).await.unwrap(), Amount(0));
-    assert_eq!(serai.coin_balance(coin, address).await.unwrap(), Amount(0));
+    assert_eq!(serai.coin_supply(coin.into()).await.unwrap(), Amount(0));
+    assert_eq!(serai.coin_balance(coin.into(), address).await.unwrap(), Amount(0));
   })
 );
diff --git a/substrate/client/tests/common/dex.rs b/substrate/client/tests/common/dex.rs
index 86e53691..a5ea2518 100644
--- a/substrate/client/tests/common/dex.rs
+++ b/substrate/client/tests/common/dex.rs
@@ -1,4 +1,4 @@
-use serai_abi::primitives::{Coin, Amount};
+use serai_abi::primitives::{Amount, Coin, ExternalCoin};
 
 use serai_client::{Serai, SeraiDex};
 use sp_core::{sr25519::Pair, Pair as PairTrait};
@@ -8,7 +8,7 @@ use crate::common::tx::publish_tx;
 #[allow(dead_code)]
 pub async fn add_liquidity(
   serai: &Serai,
-  coin: Coin,
+  coin: ExternalCoin,
   coin_amount: Amount,
   sri_amount: Amount,
   nonce: u32,
diff --git a/substrate/client/tests/common/genesis_liquidity.rs b/substrate/client/tests/common/genesis_liquidity.rs
index 0c0cd269..55824d36 100644
--- a/substrate/client/tests/common/genesis_liquidity.rs
+++ b/substrate/client/tests/common/genesis_liquidity.rs
@@ -11,11 +11,12 @@ use sp_core::{sr25519::Signature, Pair as PairTrait};
 
 use serai_abi::{
   genesis_liquidity::primitives::{oraclize_values_message, Values},
-  validator_sets::primitives::{musig_context, Session, ValidatorSet},
-  in_instructions::primitives::{InInstruction, InInstructionWithBalance, Batch},
+  in_instructions::primitives::{Batch, InInstruction, InInstructionWithBalance},
   primitives::{
-    Amount, NetworkId, Coin, Balance, BlockHash, SeraiAddress, insecure_pair_from_name,
+    insecure_pair_from_name, Amount, ExternalBalance, BlockHash, ExternalCoin, ExternalNetworkId,
+    NetworkId, SeraiAddress, EXTERNAL_COINS,
   },
+  validator_sets::primitives::{musig_context, Session, ValidatorSet},
 };
 
 use serai_client::{Serai, SeraiGenesisLiquidity};
@@ -25,12 +26,11 @@ use crate::common::{in_instructions::provide_batch, tx::publish_tx};
 #[allow(dead_code)]
 pub async fn set_up_genesis(
   serai: &Serai,
-  coins: &[Coin],
-  values: &HashMap<Coin, u64>,
-) -> (HashMap<Coin, Vec<(SeraiAddress, Amount)>>, HashMap<NetworkId, u32>) {
+  values: &HashMap<ExternalCoin, u64>,
+) -> (HashMap<ExternalCoin, Vec<(SeraiAddress, Amount)>>, HashMap<ExternalNetworkId, u32>) {
   // make accounts with amounts
   let mut accounts = HashMap::new();
-  for coin in coins {
+  for coin in EXTERNAL_COINS {
     // make 5 accounts per coin
     let mut values = vec![];
     for _ in 0 .. 5 {
@@ -38,18 +38,18 @@ pub async fn set_up_genesis(
       OsRng.fill_bytes(&mut address.0);
       values.push((address, Amount(OsRng.next_u64() % 10u64.pow(coin.decimals()))));
     }
-    accounts.insert(*coin, values);
+    accounts.insert(coin, values);
   }
 
   // send a batch per coin
-  let mut batch_ids: HashMap<NetworkId, u32> = HashMap::new();
-  for coin in coins {
+  let mut batch_ids: HashMap<ExternalNetworkId, u32> = HashMap::new();
+  for coin in EXTERNAL_COINS {
     // set up instructions
-    let instructions = accounts[coin]
+    let instructions = accounts[&coin]
       .iter()
       .map(|(addr, amount)| InInstructionWithBalance {
         instruction: InInstruction::GenesisLiquidity(*addr),
-        balance: Balance { coin: *coin, amount: *amount },
+        balance: ExternalBalance { coin, amount: *amount },
       })
       .collect::<Vec<_>>();
 
@@ -73,8 +73,11 @@ pub async fn set_up_genesis(
   // set values relative to each other. We can do that without checking for genesis period blocks
   // since we are running in test(fast-epoch) mode.
   // TODO: Random values here
-  let values =
-    Values { monero: values[&Coin::Monero], ether: values[&Coin::Ether], dai: values[&Coin::Dai] };
+  let values = Values {
+    monero: values[&ExternalCoin::Monero],
+    ether: values[&ExternalCoin::Ether],
+    dai: values[&ExternalCoin::Dai],
+  };
   set_values(serai, &values).await;
 
   (accounts, batch_ids)
diff --git a/substrate/client/tests/common/in_instructions.rs b/substrate/client/tests/common/in_instructions.rs
index 103940ab..a87e3292 100644
--- a/substrate/client/tests/common/in_instructions.rs
+++ b/substrate/client/tests/common/in_instructions.rs
@@ -9,8 +9,8 @@ use scale::Encode;
 use sp_core::Pair;
 
 use serai_client::{
-  primitives::{insecure_pair_from_name, BlockHash, NetworkId, Balance, SeraiAddress},
-  validator_sets::primitives::{ValidatorSet, KeyPair},
+  primitives::{insecure_pair_from_name, BlockHash, ExternalBalance, SeraiAddress},
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair},
   in_instructions::{
     primitives::{Batch, SignedBatch, batch_message, InInstruction, InInstructionWithBalance},
     InInstructionsEvent,
@@ -23,8 +23,8 @@ use crate::common::{tx::publish_tx, validator_sets::set_keys};
 #[allow(dead_code)]
 pub async fn provide_batch(serai: &Serai, batch: Batch) -> [u8; 32] {
   let serai_latest = serai.as_of_latest_finalized_block().await.unwrap();
-  let session = serai_latest.validator_sets().session(batch.network).await.unwrap().unwrap();
-  let set = ValidatorSet { session, network: batch.network };
+  let session = serai_latest.validator_sets().session(batch.network.into()).await.unwrap().unwrap();
+  let set = ExternalValidatorSet { session, network: batch.network };
 
   let pair = insecure_pair_from_name(&format!("ValidatorSet {set:?}"));
   let keys = if let Some(keys) = serai_latest.validator_sets().keys(set).await.unwrap() {
@@ -65,8 +65,7 @@ pub async fn provide_batch(serai: &Serai, batch: Batch) -> [u8; 32] {
 #[allow(dead_code)]
 pub async fn mint_coin(
   serai: &Serai,
-  balance: Balance,
-  network: NetworkId,
+  balance: ExternalBalance,
   batch_id: u32,
   address: SeraiAddress,
 ) -> [u8; 32] {
@@ -74,7 +73,7 @@ pub async fn mint_coin(
   OsRng.fill_bytes(&mut block_hash.0);
 
   let batch = Batch {
-    network,
+    network: balance.coin.network(),
     id: batch_id,
     block: block_hash,
     instructions: vec![InInstructionWithBalance {
diff --git a/substrate/client/tests/common/validator_sets.rs b/substrate/client/tests/common/validator_sets.rs
index 3238501a..20f7e951 100644
--- a/substrate/client/tests/common/validator_sets.rs
+++ b/substrate/client/tests/common/validator_sets.rs
@@ -15,7 +15,7 @@ use schnorrkel::Schnorrkel;
 
 use serai_client::{
   validator_sets::{
-    primitives::{ValidatorSet, KeyPair, musig_context, set_keys_message},
+    primitives::{ExternalValidatorSet, KeyPair, musig_context, set_keys_message},
     ValidatorSetsEvent,
   },
   Amount, Serai, SeraiValidatorSets,
@@ -26,7 +26,7 @@ use crate::common::tx::publish_tx;
 #[allow(dead_code)]
 pub async fn set_keys(
   serai: &Serai,
-  set: ValidatorSet,
+  set: ExternalValidatorSet,
   key_pair: KeyPair,
   pairs: &[Pair],
 ) -> [u8; 32] {
@@ -46,7 +46,8 @@ pub async fn set_keys(
     assert_eq!(Ristretto::generator() * secret_key, pub_keys[i]);
 
     threshold_keys.push(
-      musig::<Ristretto>(&musig_context(set), &Zeroizing::new(secret_key), &pub_keys).unwrap(),
+      musig::<Ristretto>(&musig_context(set.into()), &Zeroizing::new(secret_key), &pub_keys)
+        .unwrap(),
     );
   }
 
diff --git a/substrate/client/tests/dex.rs b/substrate/client/tests/dex.rs
index d02d5260..f41eef6b 100644
--- a/substrate/client/tests/dex.rs
+++ b/substrate/client/tests/dex.rs
@@ -6,8 +6,8 @@ use serai_abi::in_instructions::primitives::DexCall;
 
 use serai_client::{
   primitives::{
-    Amount, NetworkId, Coin, Balance, BlockHash, insecure_pair_from_name, ExternalAddress,
-    SeraiAddress,
+    Amount, Coin, Balance, BlockHash, insecure_pair_from_name, ExternalAddress, SeraiAddress,
+    ExternalCoin, ExternalBalance,
   },
   in_instructions::primitives::{
     InInstruction, InInstructionWithBalance, Batch, IN_INSTRUCTION_EXECUTOR, OutAddress,
@@ -28,15 +28,14 @@ use common::{
 // TODO: Check Transfer events
 serai_test!(
   add_liquidity: (|serai: Serai| async move {
-    let coin = Coin::Monero;
+    let coin = ExternalCoin::Monero;
     let pair = insecure_pair_from_name("Ferdie");
 
     // mint sriXMR in the account so that we can add liq.
     // Ferdie account is already pre-funded with SRI.
     mint_coin(
       &serai,
-      Balance { coin, amount: Amount(100_000_000_000_000) },
-      NetworkId::Monero,
+      ExternalBalance { coin, amount: Amount(100_000_000_000_000) },
       0,
       pair.clone().public().into(),
     )
@@ -61,7 +60,7 @@ serai_test!(
       vec![DexEvent::LiquidityAdded {
         who: pair.public().into(),
         mint_to: pair.public().into(),
-        pool_id: Coin::Monero,
+        pool_id: coin,
         coin_amount: coin_amount.0,
         sri_amount: sri_amount.0,
         lp_token_minted: 49_999999990000
@@ -71,15 +70,14 @@ serai_test!(
 
   // Tests coin -> SRI and SRI -> coin swaps.
   swap_coin_to_sri: (|serai: Serai| async move {
-    let coin = Coin::Ether;
+    let coin = ExternalCoin::Ether;
     let pair = insecure_pair_from_name("Ferdie");
 
     // mint sriXMR in the account so that we can add liq.
     // Ferdie account is already pre-funded with SRI.
     mint_coin(
       &serai,
-      Balance { coin, amount: Amount(100_000_000_000_000) },
-      NetworkId::Ethereum,
+      ExternalBalance { coin, amount: Amount(100_000_000_000_000) },
       0,
       pair.clone().public().into(),
     )
@@ -96,14 +94,21 @@ serai_test!(
 
     // now that we have our liquid pool, swap some coin to SRI.
     let mut amount_in = Amount(25_000_000_000_000);
-    let mut block = common_swap(&serai, coin, Coin::Serai, amount_in, Amount(1), 1, pair.clone())
+    let mut block = common_swap(
+      &serai,
+      coin.into(),
+      Coin::Serai,
+      amount_in,
+      Amount(1),
+      1,
+      pair.clone())
       .await;
 
     // get only the swap events
     let mut events = serai.as_of(block).dex().events().await.unwrap();
     events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-    let mut path = BoundedVec::try_from(vec![coin, Coin::Serai]).unwrap();
+    let mut path = BoundedVec::try_from(vec![coin.into(), Coin::Serai]).unwrap();
     assert_eq!(
       events,
       vec![DexEvent::SwapExecuted {
@@ -117,13 +122,21 @@ serai_test!(
 
     // now swap some SRI to coin
     amount_in = Amount(10_000_000_000_000);
-    block = common_swap(&serai, Coin::Serai, coin, amount_in, Amount(1), 2, pair.clone()).await;
+    block = common_swap(
+      &serai,
+      Coin::Serai,
+      coin.into(),
+      amount_in,
+      Amount(1),
+      2,
+      pair.clone()
+    ).await;
 
     // get only the swap events
     let mut events = serai.as_of(block).dex().events().await.unwrap();
     events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-    path = BoundedVec::try_from(vec![Coin::Serai, coin]).unwrap();
+    path = BoundedVec::try_from(vec![Coin::Serai, coin.into()]).unwrap();
     assert_eq!(
       events,
       vec![DexEvent::SwapExecuted {
@@ -137,23 +150,21 @@ serai_test!(
   })
 
   swap_coin_to_coin: (|serai: Serai| async move {
-    let coin1 = Coin::Monero;
-    let coin2 = Coin::Dai;
+    let coin1 = ExternalCoin::Monero;
+    let coin2 = ExternalCoin::Dai;
     let pair = insecure_pair_from_name("Ferdie");
 
     // mint coins
     mint_coin(
       &serai,
-      Balance { coin: coin1, amount: Amount(100_000_000_000_000) },
-      NetworkId::Monero,
+      ExternalBalance { coin: coin1, amount: Amount(100_000_000_000_000) },
       0,
       pair.clone().public().into(),
     )
     .await;
     mint_coin(
       &serai,
-      Balance { coin: coin2, amount: Amount(100_000_000_000_000) },
-      NetworkId::Ethereum,
+      ExternalBalance { coin: coin2, amount: Amount(100_000_000_000_000) },
       0,
       pair.clone().public().into(),
     )
@@ -177,13 +188,21 @@ serai_test!(
 
     // swap coin1 -> coin2
     let amount_in = Amount(25_000_000_000_000);
-    let block = common_swap(&serai, coin1, coin2, amount_in, Amount(1), 2, pair.clone()).await;
+    let block = common_swap(
+      &serai,
+      coin1.into(),
+      coin2.into(),
+      amount_in,
+      Amount(1),
+      2,
+      pair.clone()
+    ).await;
 
     // get only the swap events
     let mut events = serai.as_of(block).dex().events().await.unwrap();
     events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-    let path = BoundedVec::try_from(vec![coin1, Coin::Serai, coin2]).unwrap();
+    let path = BoundedVec::try_from(vec![coin1.into(), Coin::Serai, coin2.into()]).unwrap();
     assert_eq!(
       events,
       vec![DexEvent::SwapExecuted {
@@ -197,7 +216,7 @@ serai_test!(
   })
 
   add_liquidity_in_instructions: (|serai: Serai| async move {
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
     let pair = insecure_pair_from_name("Ferdie");
     let mut batch_id = 0;
 
@@ -205,8 +224,7 @@ serai_test!(
     // Ferdie account is already pre-funded with SRI.
     mint_coin(
       &serai,
-      Balance { coin, amount: Amount(100_000_000_000_000) },
-      NetworkId::Bitcoin,
+      ExternalBalance { coin, amount: Amount(100_000_000_000_000) },
       batch_id,
       pair.clone().public().into(),
     )
@@ -227,12 +245,12 @@ serai_test!(
     let mut block_hash = BlockHash([0; 32]);
     OsRng.fill_bytes(&mut block_hash.0);
     let batch = Batch {
-      network: NetworkId::Bitcoin,
+      network: coin.network(),
       id: batch_id,
       block: block_hash,
       instructions: vec![InInstructionWithBalance {
         instruction: InInstruction::Dex(DexCall::SwapAndAddLiquidity(pair.public().into())),
-        balance: Balance { coin: Coin::Bitcoin, amount: Amount(20_000_000_000_000) },
+        balance: ExternalBalance { coin, amount: Amount(20_000_000_000_000) },
       }],
     };
 
@@ -244,7 +262,7 @@ serai_test!(
       vec![DexEvent::LiquidityAdded {
         who: IN_INSTRUCTION_EXECUTOR,
         mint_to: pair.public().into(),
-        pool_id: Coin::Bitcoin,
+        pool_id: coin,
         coin_amount: 10_000_000_000_000, // half of sent amount
         sri_amount: 111_333_778_668,
         lp_token_minted: 1_054_092_553_383
@@ -253,8 +271,8 @@ serai_test!(
   })
 
   swap_in_instructions: (|serai: Serai| async move {
-    let coin1 = Coin::Monero;
-    let coin2 = Coin::Ether;
+    let coin1 = ExternalCoin::Monero;
+    let coin2 = ExternalCoin::Ether;
     let pair = insecure_pair_from_name("Ferdie");
     let mut coin1_batch_id = 0;
     let mut coin2_batch_id = 0;
@@ -262,8 +280,7 @@ serai_test!(
     // mint coins
     mint_coin(
       &serai,
-      Balance { coin: coin1, amount: Amount(10_000_000_000_000_000) },
-      NetworkId::Monero,
+      ExternalBalance { coin: coin1, amount: Amount(10_000_000_000_000_000) },
       coin1_batch_id,
       pair.clone().public().into(),
     )
@@ -271,8 +288,7 @@ serai_test!(
     coin1_batch_id += 1;
     mint_coin(
       &serai,
-      Balance { coin: coin2, amount: Amount(100_000_000_000_000) },
-      NetworkId::Ethereum,
+      ExternalBalance { coin: coin2, amount: Amount(100_000_000_000_000) },
       coin2_batch_id,
       pair.clone().public().into(),
     )
@@ -305,18 +321,18 @@ serai_test!(
       let out_address = OutAddress::External(ExternalAddress::new(rand_bytes.clone()).unwrap());
 
       // amount is the min out amount
-      let out_balance = Balance { coin: coin2, amount: Amount(1) };
+      let out_balance = Balance { coin: coin2.into(), amount: Amount(1) };
 
       // now that we have our pools, we can try to swap
       let mut block_hash = BlockHash([0; 32]);
       OsRng.fill_bytes(&mut block_hash.0);
       let batch = Batch {
-        network: NetworkId::Monero,
+        network: coin1.network(),
         id: coin1_batch_id,
         block: block_hash,
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::Dex(DexCall::Swap(out_balance, out_address)),
-          balance: Balance { coin: coin1, amount: Amount(200_000_000_000_000) },
+          balance: ExternalBalance { coin: coin1, amount: Amount(200_000_000_000_000) },
         }],
       };
 
@@ -325,7 +341,7 @@ serai_test!(
       let mut events = serai.as_of(block).dex().events().await.unwrap();
       events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-      let path = BoundedVec::try_from(vec![coin1, Coin::Serai, coin2]).unwrap();
+      let path = BoundedVec::try_from(vec![coin1.into(), Coin::Serai, coin2.into()]).unwrap();
       assert_eq!(
         events,
         vec![DexEvent::SwapExecuted {
@@ -345,18 +361,18 @@ serai_test!(
         OutAddress::Serai(SeraiAddress::new(rand_bytes.clone().try_into().unwrap()));
 
       // amount is the min out amount
-      let out_balance = Balance { coin: coin1, amount: Amount(1) };
+      let out_balance = Balance { coin: coin1.into(), amount: Amount(1) };
 
       // now that we have our pools, we can try to swap
       let mut block_hash = BlockHash([0; 32]);
       OsRng.fill_bytes(&mut block_hash.0);
       let batch = Batch {
-        network: NetworkId::Ethereum,
+        network: coin2.network(),
         id: coin2_batch_id,
         block: block_hash,
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::Dex(DexCall::Swap(out_balance, out_address.clone())),
-          balance: Balance { coin: coin2, amount: Amount(200_000_000_000) },
+          balance: ExternalBalance { coin: coin2, amount: Amount(200_000_000_000) },
         }],
       };
 
@@ -364,7 +380,7 @@ serai_test!(
       let mut events = serai.as_of(block).dex().events().await.unwrap();
       events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-      let path = BoundedVec::try_from(vec![coin2, Coin::Serai, coin1]).unwrap();
+      let path = BoundedVec::try_from(vec![coin2.into(), Coin::Serai, coin1.into()]).unwrap();
       assert_eq!(
         events,
         vec![DexEvent::SwapExecuted {
@@ -389,12 +405,12 @@ serai_test!(
       let mut block_hash = BlockHash([0; 32]);
       OsRng.fill_bytes(&mut block_hash.0);
       let batch = Batch {
-        network: NetworkId::Monero,
+        network: coin1.network(),
         id: coin1_batch_id,
         block: block_hash,
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::Dex(DexCall::Swap(out_balance, out_address.clone())),
-          balance: Balance { coin: coin1, amount: Amount(100_000_000_000_000) },
+          balance: ExternalBalance { coin: coin1, amount: Amount(100_000_000_000_000) },
         }],
       };
 
@@ -402,7 +418,7 @@ serai_test!(
       let mut events = serai.as_of(block).dex().events().await.unwrap();
       events.retain(|e| matches!(e, DexEvent::SwapExecuted { .. }));
 
-      let path = BoundedVec::try_from(vec![coin1, Coin::Serai]).unwrap();
+      let path = BoundedVec::try_from(vec![coin1.into(), Coin::Serai]).unwrap();
       assert_eq!(
         events,
         vec![DexEvent::SwapExecuted {
diff --git a/substrate/client/tests/dht.rs b/substrate/client/tests/dht.rs
index 82450e46..0d27c91e 100644
--- a/substrate/client/tests/dht.rs
+++ b/substrate/client/tests/dht.rs
@@ -1,4 +1,4 @@
-use serai_client::{primitives::NetworkId, Serai};
+use serai_client::{primitives::ExternalNetworkId, Serai};
 
 #[tokio::test]
 async fn dht() {
@@ -44,7 +44,7 @@ async fn dht() {
       assert!(!Serai::new(serai_rpc.clone())
         .await
         .unwrap()
-        .p2p_validators(NetworkId::Bitcoin)
+        .p2p_validators(ExternalNetworkId::Bitcoin.into())
         .await
         .unwrap()
         .is_empty());
diff --git a/substrate/client/tests/emissions.rs b/substrate/client/tests/emissions.rs
index f510d486..3e2b46f2 100644
--- a/substrate/client/tests/emissions.rs
+++ b/substrate/client/tests/emissions.rs
@@ -7,16 +7,13 @@ use serai_abi::{
   emissions::primitives::{INITIAL_REWARD_PER_BLOCK, SECURE_BY},
   in_instructions::primitives::Batch,
   primitives::{
-    BlockHash, Coin, COINS, FAST_EPOCH_DURATION, FAST_EPOCH_INITIAL_PERIOD, NETWORKS,
-    TARGET_BLOCK_TIME,
+    BlockHash, ExternalBalance, ExternalCoin, ExternalNetworkId, EXTERNAL_NETWORKS,
+    FAST_EPOCH_DURATION, FAST_EPOCH_INITIAL_PERIOD, NETWORKS, TARGET_BLOCK_TIME, Amount, NetworkId,
   },
   validator_sets::primitives::Session,
 };
 
-use serai_client::{
-  primitives::{Amount, NetworkId, Balance},
-  Serai,
-};
+use serai_client::Serai;
 
 mod common;
 use common::{genesis_liquidity::set_up_genesis, in_instructions::provide_batch};
@@ -27,31 +24,32 @@ serai_test_fast_epoch!(
   })
 );
 
-async fn send_batches(serai: &Serai, ids: &mut HashMap<NetworkId, u32>) {
-  for network in NETWORKS {
-    if network != NetworkId::Serai {
-      // set up batch id
-      ids
-        .entry(network)
-        .and_modify(|v| {
-          *v += 1;
-        })
-        .or_insert(0);
+async fn send_batches(serai: &Serai, ids: &mut HashMap<ExternalNetworkId, u32>) {
+  for network in EXTERNAL_NETWORKS {
+    // set up batch id
+    ids
+      .entry(network)
+      .and_modify(|v| {
+        *v += 1;
+      })
+      .or_insert(0);
 
-      // set up block hash
-      let mut block = BlockHash([0; 32]);
-      OsRng.fill_bytes(&mut block.0);
+    // set up block hash
+    let mut block = BlockHash([0; 32]);
+    OsRng.fill_bytes(&mut block.0);
 
-      provide_batch(serai, Batch { network, id: ids[&network], block, instructions: vec![] }).await;
-    }
+    provide_batch(serai, Batch { network, id: ids[&network], block, instructions: vec![] }).await;
   }
 }
 
 async fn test_emissions(serai: Serai) {
   // set up the genesis
-  let coins = COINS.into_iter().filter(|c| *c != Coin::native()).collect::<Vec<_>>();
-  let values = HashMap::from([(Coin::Monero, 184100), (Coin::Ether, 4785000), (Coin::Dai, 1500)]);
-  let (_, mut batch_ids) = set_up_genesis(&serai, &coins, &values).await;
+  let values = HashMap::from([
+    (ExternalCoin::Monero, 184100),
+    (ExternalCoin::Ether, 4785000),
+    (ExternalCoin::Dai, 1500),
+  ]);
+  let (_, mut batch_ids) = set_up_genesis(&serai, &values).await;
 
   // wait until genesis is complete
   let mut genesis_complete_block = None;
@@ -144,7 +142,7 @@ async fn test_emissions(serai: Serai) {
 }
 
 /// Returns the required stake in terms SRI for a given `Balance`.
-async fn required_stake(serai: &TemporalSerai<'_>, balance: Balance) -> u64 {
+async fn required_stake(serai: &TemporalSerai<'_>, balance: ExternalBalance) -> u64 {
   // This is inclusive to an increase in accuracy
   let sri_per_coin = serai.dex().oracle_value(balance.coin).await.unwrap().unwrap_or(Amount(0));
 
@@ -208,18 +206,14 @@ async fn get_distances(
   // we can check the supply to see how much coin hence liability we have.
   let mut distances: HashMap<NetworkId, u64> = HashMap::new();
   let mut total_distance = 0;
-  for n in NETWORKS {
-    if n == NetworkId::Serai {
-      continue;
-    }
-
+  for n in EXTERNAL_NETWORKS {
     let mut required = 0;
     for c in n.coins() {
-      let amount = serai.coins().coin_supply(*c).await.unwrap();
-      required += required_stake(serai, Balance { coin: *c, amount }).await;
+      let amount = serai.coins().coin_supply(c.into()).await.unwrap();
+      required += required_stake(serai, ExternalBalance { coin: c, amount }).await;
     }
 
-    let mut current = *current_stake.get(&n).unwrap();
+    let mut current = *current_stake.get(&n.into()).unwrap();
     if current > required {
       current = required;
     }
@@ -227,7 +221,7 @@ async fn get_distances(
     let distance = required - current;
     total_distance += distance;
 
-    distances.insert(n, distance);
+    distances.insert(n.into(), distance);
   }
 
   // add serai network portion(20%)
diff --git a/substrate/client/tests/genesis_liquidity.rs b/substrate/client/tests/genesis_liquidity.rs
index 8b2b8d8f..e2a593cf 100644
--- a/substrate/client/tests/genesis_liquidity.rs
+++ b/substrate/client/tests/genesis_liquidity.rs
@@ -2,7 +2,7 @@ use std::{time::Duration, collections::HashMap};
 
 use serai_client::Serai;
 
-use serai_abi::primitives::{Coin, COINS, Amount, GENESIS_SRI};
+use serai_abi::primitives::{Amount, Coin, ExternalCoin, COINS, EXTERNAL_COINS, GENESIS_SRI};
 
 use serai_client::genesis_liquidity::primitives::{
   GENESIS_LIQUIDITY_ACCOUNT, INITIAL_GENESIS_LP_SHARES,
@@ -19,9 +19,12 @@ serai_test_fast_epoch!(
 
 pub async fn test_genesis_liquidity(serai: Serai) {
   // set up the genesis
-  let coins = COINS.into_iter().filter(|c| *c != Coin::native()).collect::<Vec<_>>();
-  let values = HashMap::from([(Coin::Monero, 184100), (Coin::Ether, 4785000), (Coin::Dai, 1500)]);
-  let (accounts, _) = set_up_genesis(&serai, &coins, &values).await;
+  let values = HashMap::from([
+    (ExternalCoin::Monero, 184100),
+    (ExternalCoin::Ether, 4785000),
+    (ExternalCoin::Dai, 1500),
+  ]);
+  let (accounts, _) = set_up_genesis(&serai, &values).await;
 
   // wait until genesis is complete
   while serai
@@ -55,9 +58,9 @@ pub async fn test_genesis_liquidity(serai: Serai) {
   // check pools has proper liquidity
   let mut pool_amounts = HashMap::new();
   let mut total_value = 0u128;
-  for coin in coins.clone() {
+  for coin in EXTERNAL_COINS {
     let total_coin = accounts[&coin].iter().fold(0u128, |acc, value| acc + u128::from(value.1 .0));
-    let value = if coin != Coin::Bitcoin {
+    let value = if coin != ExternalCoin::Bitcoin {
       (total_coin * u128::from(values[&coin])) / 10u128.pow(coin.decimals())
     } else {
       total_coin
@@ -69,8 +72,8 @@ pub async fn test_genesis_liquidity(serai: Serai) {
 
   // check distributed SRI per pool
   let mut total_sri_distributed = 0u128;
-  for coin in coins.clone() {
-    let sri = if coin == *COINS.last().unwrap() {
+  for coin in EXTERNAL_COINS {
+    let sri = if coin == *EXTERNAL_COINS.last().unwrap() {
       u128::from(GENESIS_SRI).checked_sub(total_sri_distributed).unwrap()
     } else {
       (pool_amounts[&coin].1 * u128::from(GENESIS_SRI)) / total_value
@@ -83,7 +86,7 @@ pub async fn test_genesis_liquidity(serai: Serai) {
   }
 
   // check each liquidity provider got liquidity tokens proportional to their value
-  for coin in coins {
+  for coin in EXTERNAL_COINS {
     let liq_supply = serai.genesis_liquidity().supply(coin).await.unwrap();
     for (acc, amount) in &accounts[&coin] {
       let acc_liq_shares = serai.genesis_liquidity().liquidity(acc, coin).await.unwrap().shares;
diff --git a/substrate/client/tests/validator_sets.rs b/substrate/client/tests/validator_sets.rs
index c2c6c509..dee2bb42 100644
--- a/substrate/client/tests/validator_sets.rs
+++ b/substrate/client/tests/validator_sets.rs
@@ -7,17 +7,18 @@ use sp_core::{
 
 use serai_client::{
   primitives::{
-    NETWORKS, NetworkId, BlockHash, insecure_pair_from_name, FAST_EPOCH_DURATION, TARGET_BLOCK_TIME,
+    NETWORKS, NetworkId, BlockHash, insecure_pair_from_name, FAST_EPOCH_DURATION,
+    TARGET_BLOCK_TIME, ExternalNetworkId, Amount,
   },
   validator_sets::{
-    primitives::{Session, ValidatorSet, KeyPair},
+    primitives::{Session, ValidatorSet, ExternalValidatorSet, KeyPair},
     ValidatorSetsEvent,
   },
   in_instructions::{
     primitives::{Batch, SignedBatch, batch_message},
     SeraiInInstructions,
   },
-  Amount, Serai,
+  Serai,
 };
 
 mod common;
@@ -58,8 +59,8 @@ async fn get_ordered_keys(serai: &Serai, network: NetworkId, accounts: &[Pair])
 
 serai_test!(
   set_keys_test: (|serai: Serai| async move {
-    let network = NetworkId::Bitcoin;
-    let set = ValidatorSet { session: Session(0), network };
+    let network = ExternalNetworkId::Bitcoin;
+    let set = ExternalValidatorSet { session: Session(0), network };
 
     let pair = insecure_pair_from_name("Alice");
     let public = pair.public();
@@ -89,7 +90,7 @@ serai_test!(
     {
       let vs_serai = serai.as_of_latest_finalized_block().await.unwrap();
       let vs_serai = vs_serai.validator_sets();
-      let participants = vs_serai.participants(set.network).await
+      let participants = vs_serai.participants(set.network.into()).await
         .unwrap()
         .unwrap()
         .into_iter()
@@ -197,9 +198,9 @@ async fn validator_set_rotation() {
       // amounts for single key share per network
       let key_shares = HashMap::from([
         (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-        (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-        (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-        (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
+        (NetworkId::External(ExternalNetworkId::Bitcoin), Amount(1_000_000 * 10_u64.pow(8))),
+        (NetworkId::External(ExternalNetworkId::Monero), Amount(100_000 * 10_u64.pow(8))),
+        (NetworkId::External(ExternalNetworkId::Ethereum), Amount(1_000_000 * 10_u64.pow(8))),
       ]);
 
       // genesis participants per network
@@ -208,9 +209,9 @@ async fn validator_set_rotation() {
         accounts[.. 4].to_vec().iter().map(|pair| pair.public()).collect::<Vec<_>>();
       let mut participants = HashMap::from([
         (NetworkId::Serai, default_participants.clone()),
-        (NetworkId::Bitcoin, default_participants.clone()),
-        (NetworkId::Monero, default_participants.clone()),
-        (NetworkId::Ethereum, default_participants),
+        (NetworkId::External(ExternalNetworkId::Bitcoin), default_participants.clone()),
+        (NetworkId::External(ExternalNetworkId::Monero), default_participants.clone()),
+        (NetworkId::External(ExternalNetworkId::Ethereum), default_participants),
       ]);
 
       // test the set rotation
@@ -237,7 +238,8 @@ async fn validator_set_rotation() {
 
         // set the keys if it is an external set
         if network != NetworkId::Serai {
-          let set = ValidatorSet { session: Session(0), network };
+          let set =
+            ExternalValidatorSet { session: Session(0), network: network.try_into().unwrap() };
           let key_pair = get_random_key_pair();
           let pairs = get_ordered_keys(&serai, network, &accounts).await;
           set_keys(&serai, set, key_pair, &pairs).await;
@@ -265,7 +267,8 @@ async fn validator_set_rotation() {
 
         if network != NetworkId::Serai {
           // set the keys if it is an external set
-          let set = ValidatorSet { session: Session(1), network };
+          let set =
+            ExternalValidatorSet { session: Session(1), network: network.try_into().unwrap() };
 
           // we need the whole substrate key pair to sign the batch
           let (substrate_pair, key_pair) = {
@@ -283,7 +286,12 @@ async fn validator_set_rotation() {
           // provide a batch to complete the handover and retire the previous set
           let mut block_hash = BlockHash([0; 32]);
           OsRng.fill_bytes(&mut block_hash.0);
-          let batch = Batch { network, id: 0, block: block_hash, instructions: vec![] };
+          let batch = Batch {
+            network: network.try_into().unwrap(),
+            id: 0,
+            block: block_hash,
+            instructions: vec![],
+          };
           publish_tx(
             &serai,
             &SeraiInInstructions::execute_batch(SignedBatch {
diff --git a/substrate/coins/pallet/src/lib.rs b/substrate/coins/pallet/src/lib.rs
index a633ed07..dd64b2b6 100644
--- a/substrate/coins/pallet/src/lib.rs
+++ b/substrate/coins/pallet/src/lib.rs
@@ -1,13 +1,13 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 
-use serai_primitives::{Coin, SubstrateAmount, Balance};
+use serai_primitives::{Balance, Coin, ExternalBalance, SubstrateAmount};
 
 pub trait AllowMint {
-  fn is_allowed(balance: &Balance) -> bool;
+  fn is_allowed(balance: &ExternalBalance) -> bool;
 }
 
 impl AllowMint for () {
-  fn is_allowed(_: &Balance) -> bool {
+  fn is_allowed(_: &ExternalBalance) -> bool {
     true
   }
 }
@@ -161,7 +161,10 @@ pub mod pallet {
     pub fn mint(to: Public, balance: Balance) -> Result<(), Error<T, I>> {
       // If the coin isn't Serai, which we're always allowed to mint, and the mint isn't explicitly
       // allowed, error
-      if (balance.coin != Coin::Serai) && (!T::AllowMint::is_allowed(&balance)) {
+      if !ExternalCoin::try_from(balance.coin)
+        .map(|coin| T::AllowMint::is_allowed(&ExternalBalance { coin, amount: balance.amount }))
+        .unwrap_or(true)
+      {
         Err(Error::<T, I>::MintNotAllowed)?;
       }
 
@@ -230,22 +233,18 @@ pub mod pallet {
     }
 
     /// Burn `balance` with `OutInstructionWithBalance` from the caller.
-    /// Errors if called for SRI or Instance1 instance of this pallet.
     #[pallet::call_index(2)]
     #[pallet::weight((0, DispatchClass::Normal))] // TODO
     pub fn burn_with_instruction(
       origin: OriginFor<T>,
       instruction: OutInstructionWithBalance,
     ) -> DispatchResult {
-      if instruction.balance.coin == Coin::Serai {
-        Err(Error::<T, I>::BurnWithInstructionNotAllowed)?;
-      }
       if TypeId::of::<I>() == TypeId::of::<LiquidityTokensInstance>() {
         Err(Error::<T, I>::BurnWithInstructionNotAllowed)?;
       }
 
       let from = ensure_signed(origin)?;
-      Self::burn_internal(from, instruction.balance)?;
+      Self::burn_internal(from, instruction.balance.into())?;
       Self::deposit_event(Event::BurnWithInstruction { from, instruction });
       Ok(())
     }
diff --git a/substrate/coins/primitives/src/lib.rs b/substrate/coins/primitives/src/lib.rs
index a7b45cf0..5aca029a 100644
--- a/substrate/coins/primitives/src/lib.rs
+++ b/substrate/coins/primitives/src/lib.rs
@@ -13,7 +13,7 @@ use serde::{Serialize, Deserialize};
 use scale::{Encode, Decode, MaxEncodedLen};
 use scale_info::TypeInfo;
 
-use serai_primitives::{Balance, SeraiAddress, ExternalAddress, Data, system_address};
+use serai_primitives::{system_address, Data, ExternalAddress, ExternalBalance, SeraiAddress};
 
 pub const FEE_ACCOUNT: SeraiAddress = system_address(b"Coins-fees");
 
@@ -32,7 +32,7 @@ pub struct OutInstruction {
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 pub struct OutInstructionWithBalance {
   pub instruction: OutInstruction,
-  pub balance: Balance,
+  pub balance: ExternalBalance,
 }
 
 #[derive(Clone, PartialEq, Eq, Debug, Encode, Decode, MaxEncodedLen, TypeInfo)]
diff --git a/substrate/dex/pallet/src/benchmarking.rs b/substrate/dex/pallet/src/benchmarking.rs
index fb23b12a..071411d7 100644
--- a/substrate/dex/pallet/src/benchmarking.rs
+++ b/substrate/dex/pallet/src/benchmarking.rs
@@ -38,7 +38,7 @@ type AccountIdLookupOf<T> = <<T as frame_system::Config>::Lookup as StaticLookup
 
 type LiquidityTokens<T> = coins_pallet::Pallet<T, coins_pallet::Instance1>;
 
-fn create_coin<T: Config>(coin: &Coin) -> (T::AccountId, AccountIdLookupOf<T>) {
+fn create_coin<T: Config>(coin: &ExternalCoin) -> (T::AccountId, AccountIdLookupOf<T>) {
   let caller: T::AccountId = whitelisted_caller();
   let caller_lookup = T::Lookup::unlookup(caller);
   assert_ok!(Coins::<T>::mint(
@@ -47,12 +47,14 @@ fn create_coin<T: Config>(coin: &Coin) -> (T::AccountId, AccountIdLookupOf<T>) {
   ));
   assert_ok!(Coins::<T>::mint(
     caller,
-    Balance { coin: *coin, amount: Amount(INITIAL_COIN_BALANCE) }
+    Balance { coin: (*coin).into(), amount: Amount(INITIAL_COIN_BALANCE) }
   ));
   (caller, caller_lookup)
 }
 
-fn create_coin_and_pool<T: Config>(coin: &Coin) -> (Coin, T::AccountId, AccountIdLookupOf<T>) {
+fn create_coin_and_pool<T: Config>(
+  coin: &ExternalCoin,
+) -> (ExternalCoin, T::AccountId, AccountIdLookupOf<T>) {
   let (caller, caller_lookup) = create_coin::<T>(coin);
   assert_ok!(Dex::<T>::create_pool(*coin));
 
@@ -62,7 +64,7 @@ fn create_coin_and_pool<T: Config>(coin: &Coin) -> (Coin, T::AccountId, AccountI
 benchmarks! {
   add_liquidity {
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
+    let coin2 = ExternalCoin::Bitcoin;
     let (lp_token, caller, _) = create_coin_and_pool::<T>(&coin2);
     let add_amount: u64 = 1000;
   }: _(
@@ -75,13 +77,13 @@ benchmarks! {
     caller
   )
   verify {
-    let pool_id = Dex::<T>::get_pool_id(coin1, coin2).unwrap();
+    let pool_id = Dex::<T>::get_pool_id(coin1, coin2.into()).unwrap();
     let lp_minted = Dex::<T>::calc_lp_amount_for_zero_supply(
       add_amount,
       1000u64,
     ).unwrap();
     assert_eq!(
-      LiquidityTokens::<T>::balance(caller, lp_token).0,
+      LiquidityTokens::<T>::balance(caller, lp_token.into()).0,
       lp_minted
     );
     assert_eq!(
@@ -91,7 +93,7 @@ benchmarks! {
     assert_eq!(
       Coins::<T>::balance(
         Dex::<T>::get_pool_account(pool_id),
-        Coin::Bitcoin,
+        ExternalCoin::Bitcoin.into(),
       ).0,
       1000
     );
@@ -99,7 +101,7 @@ benchmarks! {
 
   remove_liquidity {
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = ExternalCoin::Monero;
     let (lp_token, caller, _) = create_coin_and_pool::<T>(&coin2);
     let add_amount: u64 = 100;
     let lp_minted = Dex::<T>::calc_lp_amount_for_zero_supply(
@@ -117,7 +119,7 @@ benchmarks! {
       0u64,
       caller,
     )?;
-    let total_supply = LiquidityTokens::<T>::supply(lp_token);
+    let total_supply = LiquidityTokens::<T>::supply(Coin::from(lp_token));
   }: _(
     SystemOrigin::Signed(caller),
     coin2,
@@ -127,7 +129,7 @@ benchmarks! {
     caller
   )
   verify {
-    let new_total_supply =  LiquidityTokens::<T>::supply(lp_token);
+    let new_total_supply =  LiquidityTokens::<T>::supply(Coin::from(lp_token));
     assert_eq!(
       new_total_supply,
       total_supply - remove_lp_amount
@@ -136,8 +138,8 @@ benchmarks! {
 
   swap_exact_tokens_for_tokens {
     let native = Coin::native();
-    let coin1 = Coin::Bitcoin;
-    let coin2 = Coin::Ether;
+    let coin1 = ExternalCoin::Bitcoin;
+    let coin2 = ExternalCoin::Ether;
     let (_, caller, _) = create_coin_and_pool::<T>(&coin1);
     let (_, _) = create_coin::<T>(&coin2);
 
@@ -168,21 +170,21 @@ benchmarks! {
       caller,
     )?;
 
-    let path = vec![coin1, native, coin2];
+    let path = vec![Coin::from(coin1), native, Coin::from(coin2)];
     let path = BoundedVec::<_, T::MaxSwapPathLength>::try_from(path).unwrap();
     let native_balance = Coins::<T>::balance(caller, native).0;
-    let coin1_balance = Coins::<T>::balance(caller, Coin::Bitcoin).0;
+    let coin1_balance = Coins::<T>::balance(caller, ExternalCoin::Bitcoin.into()).0;
   }: _(SystemOrigin::Signed(caller), path, swap_amount, 1u64, caller)
   verify {
     let ed_bump = 2u64;
-    let new_coin1_balance = Coins::<T>::balance(caller, Coin::Bitcoin).0;
+    let new_coin1_balance = Coins::<T>::balance(caller, ExternalCoin::Bitcoin.into()).0;
     assert_eq!(new_coin1_balance, coin1_balance - 100u64);
   }
 
   swap_tokens_for_exact_tokens {
     let native = Coin::native();
-    let coin1 = Coin::Bitcoin;
-    let coin2 = Coin::Ether;
+    let coin1 = ExternalCoin::Bitcoin;
+    let coin2 = ExternalCoin::Ether;
     let (_, caller, _) = create_coin_and_pool::<T>(&coin1);
     let (_, _) = create_coin::<T>(&coin2);
 
@@ -208,10 +210,10 @@ benchmarks! {
       0u64,
       caller,
     )?;
-    let path = vec![coin1, native, coin2];
+    let path = vec![Coin::from(coin1), native, Coin::from(coin2)];
 
     let path: BoundedVec<_, T::MaxSwapPathLength> = BoundedVec::try_from(path).unwrap();
-    let coin2_balance = Coins::<T>::balance(caller, Coin::Ether).0;
+    let coin2_balance = Coins::<T>::balance(caller, ExternalCoin::Ether.into()).0;
   }: _(
     SystemOrigin::Signed(caller),
     path.clone(),
@@ -220,7 +222,7 @@ benchmarks! {
     caller
   )
   verify {
-    let new_coin2_balance = Coins::<T>::balance(caller, Coin::Ether).0;
+    let new_coin2_balance = Coins::<T>::balance(caller, ExternalCoin::Ether.into()).0;
     assert_eq!(new_coin2_balance, coin2_balance + 100u64);
   }
 
diff --git a/substrate/dex/pallet/src/lib.rs b/substrate/dex/pallet/src/lib.rs
index 60a38926..8da63a7b 100644
--- a/substrate/dex/pallet/src/lib.rs
+++ b/substrate/dex/pallet/src/lib.rs
@@ -78,7 +78,7 @@ mod tests;
 #[cfg(test)]
 mod mock;
 
-use frame_support::ensure;
+use frame_support::{ensure, pallet_prelude::*, BoundedBTreeSet};
 use frame_system::{
   pallet_prelude::{BlockNumberFor, OriginFor},
   ensure_signed,
@@ -86,9 +86,12 @@ use frame_system::{
 
 pub use pallet::*;
 
-use sp_runtime::{traits::TrailingZeroInput, DispatchError};
+use sp_runtime::{
+  traits::{TrailingZeroInput, IntegerSquareRoot},
+  DispatchError,
+};
 
-use serai_primitives::{NetworkId, Coin, SubstrateAmount};
+use serai_primitives::*;
 
 use sp_std::prelude::*;
 pub use types::*;
@@ -103,20 +106,16 @@ pub use weights::WeightInfo;
 #[frame_support::pallet]
 pub mod pallet {
   use super::*;
-  use frame_support::{pallet_prelude::*, BoundedBTreeSet};
 
   use sp_core::sr25519::Public;
-  use sp_runtime::traits::IntegerSquareRoot;
 
   use coins_pallet::{Pallet as CoinsPallet, Config as CoinsConfig};
 
-  use serai_primitives::{Coin, Amount, Balance, SubstrateAmount, reverse_lexicographic_order};
-
   /// Pool ID.
   ///
   /// The pool's `AccountId` is derived from this type. Any changes to the type may necessitate a
   /// migration.
-  pub type PoolId = Coin;
+  pub type PoolId = ExternalCoin;
 
   /// LiquidityTokens Pallet as an instance of coins pallet.
   pub type LiquidityTokens<T> = coins_pallet::Pallet<T, coins_pallet::Instance1>;
@@ -164,7 +163,7 @@ pub mod pallet {
   #[pallet::storage]
   #[pallet::getter(fn spot_price_for_block)]
   pub type SpotPriceForBlock<T: Config> =
-    StorageDoubleMap<_, Identity, BlockNumberFor<T>, Identity, Coin, Amount, OptionQuery>;
+    StorageDoubleMap<_, Identity, BlockNumberFor<T>, Identity, ExternalCoin, Amount, OptionQuery>;
 
   /// Moving window of prices from each block.
   ///
@@ -173,30 +172,32 @@ pub mod pallet {
   /// low to high.
   #[pallet::storage]
   pub type SpotPrices<T: Config> =
-    StorageDoubleMap<_, Identity, Coin, Identity, [u8; 8], u16, OptionQuery>;
+    StorageDoubleMap<_, Identity, ExternalCoin, Identity, [u8; 8], u16, OptionQuery>;
 
   // SpotPrices, yet with keys stored in reverse lexicographic order.
   #[pallet::storage]
   pub type ReverseSpotPrices<T: Config> =
-    StorageDoubleMap<_, Identity, Coin, Identity, [u8; 8], (), OptionQuery>;
+    StorageDoubleMap<_, Identity, ExternalCoin, Identity, [u8; 8], (), OptionQuery>;
 
   /// Current length of the `SpotPrices` map.
   #[pallet::storage]
-  pub type SpotPricesLength<T: Config> = StorageMap<_, Identity, Coin, u16, OptionQuery>;
+  pub type SpotPricesLength<T: Config> = StorageMap<_, Identity, ExternalCoin, u16, OptionQuery>;
 
   /// Current position of the median within the `SpotPrices` map;
   #[pallet::storage]
-  pub type CurrentMedianPosition<T: Config> = StorageMap<_, Identity, Coin, u16, OptionQuery>;
+  pub type CurrentMedianPosition<T: Config> =
+    StorageMap<_, Identity, ExternalCoin, u16, OptionQuery>;
 
   /// Current median price of the prices in the `SpotPrices` map at any given time.
   #[pallet::storage]
   #[pallet::getter(fn median_price)]
-  pub type MedianPrice<T: Config> = StorageMap<_, Identity, Coin, Amount, OptionQuery>;
+  pub type MedianPrice<T: Config> = StorageMap<_, Identity, ExternalCoin, Amount, OptionQuery>;
 
   /// The price used for evaluating economic security, which is the highest observed median price.
   #[pallet::storage]
   #[pallet::getter(fn security_oracle_value)]
-  pub type SecurityOracleValue<T: Config> = StorageMap<_, Identity, Coin, Amount, OptionQuery>;
+  pub type SecurityOracleValue<T: Config> =
+    StorageMap<_, Identity, ExternalCoin, Amount, OptionQuery>;
 
   /// Total swap volume of a given pool in terms of SRI.
   #[pallet::storage]
@@ -205,7 +206,7 @@ pub mod pallet {
 
   impl<T: Config> Pallet<T> {
     fn restore_median(
-      coin: Coin,
+      coin: ExternalCoin,
       mut current_median_pos: u16,
       mut current_median: Amount,
       length: u16,
@@ -256,7 +257,7 @@ pub mod pallet {
       MedianPrice::<T>::set(coin, Some(current_median));
     }
 
-    pub(crate) fn insert_into_median(coin: Coin, amount: Amount) {
+    pub(crate) fn insert_into_median(coin: ExternalCoin, amount: Amount) {
       let new_quantity_of_presences =
         SpotPrices::<T>::get(coin, amount.0.to_be_bytes()).unwrap_or(0) + 1;
       SpotPrices::<T>::set(coin, amount.0.to_be_bytes(), Some(new_quantity_of_presences));
@@ -286,7 +287,7 @@ pub mod pallet {
       Self::restore_median(coin, current_median_pos, current_median, new_length);
     }
 
-    pub(crate) fn remove_from_median(coin: Coin, amount: Amount) {
+    pub(crate) fn remove_from_median(coin: ExternalCoin, amount: Amount) {
       let mut current_median = MedianPrice::<T>::get(coin).unwrap();
 
       let mut current_median_pos = CurrentMedianPosition::<T>::get(coin).unwrap();
@@ -451,7 +452,7 @@ pub mod pallet {
         // insert the new price to our oracle window
         // The spot price for 1 coin, in atomic units, to SRI is used
         let sri_per_coin =
-          if let Ok((sri_balance, coin_balance)) = Self::get_reserves(&Coin::native(), &coin) {
+          if let Ok((sri_balance, coin_balance)) = Self::get_reserves(&Coin::Serai, &coin.into()) {
             // We use 1 coin to handle rounding errors which may occur with atomic units
             // If we used atomic units, any coin whose atomic unit is worth less than SRI's atomic
             // unit would cause a 'price' of 0
@@ -493,9 +494,9 @@ pub mod pallet {
     /// (the id of which is returned in the `Event::PoolCreated` event).
     ///
     /// Once a pool is created, someone may [`Pallet::add_liquidity`] to it.
-    pub(crate) fn create_pool(coin: Coin) -> DispatchResult {
+    pub(crate) fn create_pool(coin: ExternalCoin) -> DispatchResult {
       // get pool_id
-      let pool_id = Self::get_pool_id(coin, Coin::Serai)?;
+      let pool_id = Self::get_pool_id(coin.into(), Coin::native())?;
       ensure!(!Pools::<T>::contains_key(pool_id), Error::<T>::PoolExists);
 
       let pool_account = Self::get_pool_account(pool_id);
@@ -508,9 +509,11 @@ pub mod pallet {
 
     /// A hook to be called whenever a network's session is rotated.
     pub fn on_new_session(network: NetworkId) {
-      // reset the oracle value
-      for coin in network.coins() {
-        SecurityOracleValue::<T>::set(*coin, Self::median_price(coin));
+      // Only track the price for non-SRI coins as this is SRI denominated
+      if let NetworkId::External(n) = network {
+        for coin in n.coins() {
+          SecurityOracleValue::<T>::set(coin, Self::median_price(coin));
+        }
       }
     }
   }
@@ -532,7 +535,7 @@ pub mod pallet {
     #[allow(clippy::too_many_arguments)]
     pub fn add_liquidity(
       origin: OriginFor<T>,
-      coin: Coin,
+      coin: ExternalCoin,
       coin_desired: SubstrateAmount,
       sri_desired: SubstrateAmount,
       coin_min: SubstrateAmount,
@@ -542,7 +545,7 @@ pub mod pallet {
       let sender = ensure_signed(origin)?;
       ensure!((sri_desired > 0) && (coin_desired > 0), Error::<T>::WrongDesiredAmount);
 
-      let pool_id = Self::get_pool_id(coin, Coin::Serai)?;
+      let pool_id = Self::get_pool_id(coin.into(), Coin::native())?;
 
       // create the pool if it doesn't exist. We can just attempt to do that because our checks
       // far enough to allow that.
@@ -552,7 +555,7 @@ pub mod pallet {
       let pool_account = Self::get_pool_account(pool_id);
 
       let sri_reserve = Self::get_balance(&pool_account, Coin::Serai);
-      let coin_reserve = Self::get_balance(&pool_account, coin);
+      let coin_reserve = Self::get_balance(&pool_account, coin.into());
 
       let sri_amount: SubstrateAmount;
       let coin_amount: SubstrateAmount;
@@ -583,16 +586,20 @@ pub mod pallet {
         &pool_account,
         Balance { coin: Coin::Serai, amount: Amount(sri_amount) },
       )?;
-      Self::transfer(&sender, &pool_account, Balance { coin, amount: Amount(coin_amount) })?;
+      Self::transfer(
+        &sender,
+        &pool_account,
+        Balance { coin: coin.into(), amount: Amount(coin_amount) },
+      )?;
 
-      let total_supply = LiquidityTokens::<T>::supply(coin);
+      let total_supply = LiquidityTokens::<T>::supply(Coin::from(coin));
 
       let lp_token_amount: SubstrateAmount;
       if total_supply == 0 {
         lp_token_amount = Self::calc_lp_amount_for_zero_supply(sri_amount, coin_amount)?;
         LiquidityTokens::<T>::mint(
           pool_account,
-          Balance { coin, amount: Amount(T::MintMinLiquidity::get()) },
+          Balance { coin: coin.into(), amount: Amount(T::MintMinLiquidity::get()) },
         )?;
       } else {
         let side1 = Self::mul_div(sri_amount, total_supply, sri_reserve)?;
@@ -605,7 +612,10 @@ pub mod pallet {
         Error::<T>::InsufficientLiquidityMinted
       );
 
-      LiquidityTokens::<T>::mint(mint_to, Balance { coin, amount: Amount(lp_token_amount) })?;
+      LiquidityTokens::<T>::mint(
+        mint_to,
+        Balance { coin: coin.into(), amount: Amount(lp_token_amount) },
+      )?;
 
       Self::deposit_event(Event::LiquidityAdded {
         who: sender,
@@ -626,25 +636,24 @@ pub mod pallet {
     #[pallet::weight(T::WeightInfo::remove_liquidity())]
     pub fn remove_liquidity(
       origin: OriginFor<T>,
-      coin: Coin,
+      coin: ExternalCoin,
       lp_token_burn: SubstrateAmount,
       coin_min_receive: SubstrateAmount,
       sri_min_receive: SubstrateAmount,
       withdraw_to: T::AccountId,
     ) -> DispatchResult {
       let sender = ensure_signed(origin.clone())?;
-      ensure!(coin != Coin::Serai, Error::<T>::EqualCoins);
 
-      let pool_id = Self::get_pool_id(coin, Coin::Serai).unwrap();
+      let pool_id = Self::get_pool_id(coin.into(), Coin::native()).unwrap();
       ensure!(lp_token_burn > 0, Error::<T>::ZeroLiquidity);
 
       Pools::<T>::get(pool_id).as_ref().ok_or(Error::<T>::PoolNotFound)?;
 
       let pool_account = Self::get_pool_account(pool_id);
       let sri_reserve = Self::get_balance(&pool_account, Coin::Serai);
-      let coin_reserve = Self::get_balance(&pool_account, coin);
+      let coin_reserve = Self::get_balance(&pool_account, coin.into());
 
-      let total_supply = LiquidityTokens::<T>::supply(coin);
+      let total_supply = LiquidityTokens::<T>::supply(Coin::from(coin));
       let lp_redeem_amount = lp_token_burn;
 
       let sri_amount = Self::mul_div(lp_redeem_amount, sri_reserve, total_supply)?;
@@ -665,14 +674,21 @@ pub mod pallet {
       ensure!(coin_reserve_left >= 1, Error::<T>::ReserveLeftLessThanMinimum);
 
       // burn the provided lp token amount that includes the fee
-      LiquidityTokens::<T>::burn(origin, Balance { coin, amount: Amount(lp_token_burn) })?;
+      LiquidityTokens::<T>::burn(
+        origin,
+        Balance { coin: coin.into(), amount: Amount(lp_token_burn) },
+      )?;
 
       Self::transfer(
         &pool_account,
         &withdraw_to,
         Balance { coin: Coin::Serai, amount: Amount(sri_amount) },
       )?;
-      Self::transfer(&pool_account, &withdraw_to, Balance { coin, amount: Amount(coin_amount) })?;
+      Self::transfer(
+        &pool_account,
+        &withdraw_to,
+        Balance { coin: coin.into(), amount: Amount(coin_amount) },
+      )?;
 
       Self::deposit_event(Event::LiquidityRemoved {
         who: sender,
@@ -920,11 +936,9 @@ pub mod pallet {
     pub fn get_pool_id(coin1: Coin, coin2: Coin) -> Result<PoolId, Error<T>> {
       ensure!((coin1 == Coin::Serai) || (coin2 == Coin::Serai), Error::<T>::PoolNotFound);
       ensure!(coin1 != coin2, Error::<T>::EqualCoins);
-      if coin1 == Coin::Serai {
-        Ok(coin2)
-      } else {
-        Ok(coin1)
-      }
+      ExternalCoin::try_from(coin1)
+        .or_else(|()| ExternalCoin::try_from(coin2))
+        .map_err(|()| Error::<T>::PoolNotFound)
     }
 
     /// Returns the balance of each coin in the pool.
diff --git a/substrate/dex/pallet/src/tests.rs b/substrate/dex/pallet/src/tests.rs
index ee714471..8770b517 100644
--- a/substrate/dex/pallet/src/tests.rs
+++ b/substrate/dex/pallet/src/tests.rs
@@ -18,7 +18,10 @@
 // It has been forked into a crate distributed under the AGPL 3.0.
 // Please check the current distribution for up-to-date copyright and licensing information.
 
-use crate::{mock::*, *};
+use crate::{
+  mock::{*, MEDIAN_PRICE_WINDOW_LENGTH},
+  *,
+};
 use frame_support::{assert_noop, assert_ok};
 
 pub use coins_pallet as coins;
@@ -72,11 +75,13 @@ fn check_pool_accounts_dont_collide() {
   let mut map = HashSet::new();
 
   for coin in coins() {
-    let account = Dex::get_pool_account(coin);
-    if map.contains(&account) {
-      panic!("Collision at {coin:?}");
+    if let Coin::External(c) = coin {
+      let account = Dex::get_pool_account(c);
+      if map.contains(&account) {
+        panic!("Collision at {c:?}");
+      }
+      map.insert(account);
     }
-    map.insert(account);
   }
 }
 
@@ -98,11 +103,11 @@ fn can_create_pool() {
     let coin_account_deposit: u64 = 0;
     let user: PublicKey = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Monero);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(1000) }));
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_eq!(balance(user, coin1), 1000 - coin_account_deposit);
 
@@ -111,15 +116,13 @@ fn can_create_pool() {
       [Event::<Test>::PoolCreated { pool_id, pool_account: Dex::get_pool_account(pool_id) }]
     );
     assert_eq!(pools(), vec![pool_id]);
-
-    assert_noop!(Dex::create_pool(coin1), Error::<Test>::EqualCoins);
   });
 }
 
 #[test]
 fn create_same_pool_twice_should_fail() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Dai;
+    let coin = ExternalCoin::Dai;
     assert_ok!(Dex::create_pool(coin));
     assert_noop!(Dex::create_pool(coin), Error::<Test>::PoolExists);
   });
@@ -129,13 +132,13 @@ fn create_same_pool_twice_should_fail() {
 fn different_pools_should_have_different_lp_tokens() {
   new_test_ext().execute_with(|| {
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
-    let coin3 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Bitcoin);
+    let coin3 = Coin::External(ExternalCoin::Ether);
     let pool_id_1_2 = Dex::get_pool_id(coin1, coin2).unwrap();
     let pool_id_1_3 = Dex::get_pool_id(coin1, coin3).unwrap();
 
     let lp_token2_1 = coin2;
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
     let lp_token3_1 = coin3;
 
     assert_eq!(
@@ -146,7 +149,7 @@ fn different_pools_should_have_different_lp_tokens() {
       }]
     );
 
-    assert_ok!(Dex::create_pool(coin3));
+    assert_ok!(Dex::create_pool(coin3.try_into().unwrap()));
     assert_eq!(
       events(),
       [Event::<Test>::PoolCreated {
@@ -164,13 +167,13 @@ fn can_add_liquidity() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Dai;
-    let coin3 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Dai);
+    let coin3 = Coin::External(ExternalCoin::Monero);
 
     let lp_token1 = coin2;
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
     let lp_token2 = coin3;
-    assert_ok!(Dex::create_pool(coin3));
+    assert_ok!(Dex::create_pool(coin3.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(
       user,
@@ -179,7 +182,15 @@ fn can_add_liquidity() {
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin3, amount: Amount(1000) }));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 10, 10000, 10, 10000, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      10,
+      10000,
+      10,
+      10000,
+      user,
+    ));
 
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
     assert!(events().contains(&Event::<Test>::LiquidityAdded {
@@ -198,7 +209,15 @@ fn can_add_liquidity() {
     assert_eq!(pool_balance(user, lp_token1), 216);
 
     // try to pass the non-native - native coins, the result should be the same
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin3, 10, 10000, 10, 10000, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin3.try_into().unwrap(),
+      10,
+      10000,
+      10,
+      10000,
+      user,
+    ));
 
     let pool_id = Dex::get_pool_id(coin1, coin3).unwrap();
     assert!(events().contains(&Event::<Test>::LiquidityAdded {
@@ -223,12 +242,15 @@ fn add_tiny_liquidity_leads_to_insufficient_liquidity_minted_error() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
+    let coin2 = ExternalCoin::Bitcoin;
 
     assert_ok!(Dex::create_pool(coin2));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(1000) }));
-    assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
+    assert_ok!(CoinsPallet::<Test>::mint(
+      user,
+      Balance { coin: coin2.into(), amount: Amount(1000) }
+    ));
 
     assert_noop!(
       Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 1, 1, 1, 1, user),
@@ -242,11 +264,11 @@ fn add_tiny_liquidity_directly_to_pool_address() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
-    let coin3 = Coin::Dai;
+    let coin2 = Coin::External(ExternalCoin::Ether);
+    let coin3 = Coin::External(ExternalCoin::Dai);
 
-    assert_ok!(Dex::create_pool(coin2));
-    assert_ok!(Dex::create_pool(coin3));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
+    assert_ok!(Dex::create_pool(coin3.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(10000 * 2) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(10000) }));
@@ -259,7 +281,15 @@ fn add_tiny_liquidity_directly_to_pool_address() {
       Balance { coin: coin1, amount: Amount(1000) }
     ));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 10, 10000, 10, 10000, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      10,
+      10000,
+      10,
+      10000,
+      user,
+    ));
 
     // check the same but for coin3 (non-native token)
     let pallet_account = Dex::get_pool_account(Dex::get_pool_id(coin1, coin3).unwrap());
@@ -267,7 +297,15 @@ fn add_tiny_liquidity_directly_to_pool_address() {
       pallet_account,
       Balance { coin: coin2, amount: Amount(1) }
     ));
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin3, 10, 10000, 10, 10000, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin3.try_into().unwrap(),
+      10,
+      10000,
+      10,
+      10000,
+      user,
+    ));
   });
 }
 
@@ -276,11 +314,11 @@ fn can_remove_liquidity() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Monero);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
 
     let lp_token = coin2;
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(
       user,
@@ -290,7 +328,7 @@ fn can_remove_liquidity() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       100000,
       1000000000,
       100000,
@@ -302,7 +340,7 @@ fn can_remove_liquidity() {
 
     assert_ok!(Dex::remove_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       total_lp_received,
       0,
       0,
@@ -334,15 +372,23 @@ fn can_not_redeem_more_lp_tokens_than_were_minted() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Dai;
+    let coin2 = Coin::External(ExternalCoin::Dai);
     let lp_token = coin2;
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(10000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 10, 10000, 10, 10000, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      10,
+      10000,
+      10,
+      10000,
+      user,
+    ));
 
     // Only 216 lp_tokens_minted
     assert_eq!(pool_balance(user, lp_token), 216);
@@ -350,7 +396,7 @@ fn can_not_redeem_more_lp_tokens_than_were_minted() {
     assert_noop!(
       Dex::remove_liquidity(
         RuntimeOrigin::signed(user),
-        coin2,
+        coin2.try_into().unwrap(),
         216 + 1, // Try and redeem 10 lp tokens while only 9 minted.
         0,
         0,
@@ -366,14 +412,22 @@ fn can_quote_price() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Ether);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(100000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 200, 10000, 1, 1, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      200,
+      10000,
+      1,
+      1,
+      user,
+    ));
 
     assert_eq!(
       Dex::quote_price_exact_tokens_for_tokens(Coin::native(), coin2, 3000, false,),
@@ -481,14 +535,22 @@ fn quote_price_exact_tokens_for_tokens_matches_execution() {
     let user = system_address(b"user1").into();
     let user2 = system_address(b"user2").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
+    let coin2 = Coin::External(ExternalCoin::Bitcoin);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(100000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 200, 10000, 1, 1, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      200,
+      10000,
+      1,
+      1,
+      user,
+    ));
 
     let amount = 1;
     let quoted_price = 49;
@@ -518,14 +580,22 @@ fn quote_price_tokens_for_exact_tokens_matches_execution() {
     let user = system_address(b"user1").into();
     let user2 = system_address(b"user2").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Monero);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(100000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
 
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 200, 10000, 1, 1, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      200,
+      10000,
+      1,
+      1,
+      user,
+    ));
 
     let amount = 49;
     let quoted_price = 1;
@@ -557,10 +627,10 @@ fn can_swap_with_native() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Ether);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(10000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
@@ -570,7 +640,7 @@ fn can_swap_with_native() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -602,8 +672,8 @@ fn can_swap_with_realistic_values() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let sri = Coin::native();
-    let dai = Coin::Dai;
-    assert_ok!(Dex::create_pool(dai));
+    let dai = Coin::External(ExternalCoin::Dai);
+    assert_ok!(Dex::create_pool(dai.try_into().unwrap()));
 
     const UNIT: u64 = 1_000_000_000;
 
@@ -620,7 +690,7 @@ fn can_swap_with_realistic_values() {
     let liquidity_dai = 1_000_000 * UNIT;
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      dai,
+      dai.try_into().unwrap(),
       liquidity_dai,
       liquidity_sri,
       1,
@@ -653,9 +723,9 @@ fn can_not_swap_in_pool_with_no_liquidity_added_yet() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Monero);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     // Check can't swap an empty pool
     assert_noop!(
@@ -676,11 +746,11 @@ fn check_no_panic_when_try_swap_close_to_empty_pool() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
+    let coin2 = Coin::External(ExternalCoin::Bitcoin);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
     let lp_token = coin2;
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(10000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
@@ -690,7 +760,7 @@ fn check_no_panic_when_try_swap_close_to_empty_pool() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -714,7 +784,7 @@ fn check_no_panic_when_try_swap_close_to_empty_pool() {
 
     assert_ok!(Dex::remove_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       lp_token_minted,
       1,
       1,
@@ -787,9 +857,9 @@ fn swap_should_not_work_if_too_much_slippage() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Ether);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(10000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
@@ -799,7 +869,7 @@ fn swap_should_not_work_if_too_much_slippage() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -827,10 +897,10 @@ fn can_swap_tokens_for_exact_tokens() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Dai;
+    let coin2 = Coin::External(ExternalCoin::Dai);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(20000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
@@ -844,7 +914,7 @@ fn can_swap_tokens_for_exact_tokens() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -882,11 +952,11 @@ fn can_swap_tokens_for_exact_tokens_when_not_liquidity_provider() {
     let user = system_address(b"user1").into();
     let user2 = system_address(b"user2").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Monero);
     let pool_id = Dex::get_pool_id(coin1, coin2).unwrap();
     let lp_token = coin2;
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     let base1 = 10000;
     let base2 = 1000;
@@ -903,7 +973,7 @@ fn can_swap_tokens_for_exact_tokens_when_not_liquidity_provider() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user2),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -947,7 +1017,7 @@ fn can_swap_tokens_for_exact_tokens_when_not_liquidity_provider() {
 
     assert_ok!(Dex::remove_liquidity(
       RuntimeOrigin::signed(user2),
-      coin2,
+      coin2.try_into().unwrap(),
       lp_token_minted,
       0,
       0,
@@ -961,9 +1031,9 @@ fn swap_tokens_for_exact_tokens_should_not_work_if_too_much_slippage() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Ether);
 
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(20000) }));
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin2, amount: Amount(1000) }));
@@ -973,7 +1043,7 @@ fn swap_tokens_for_exact_tokens_should_not_work_if_too_much_slippage() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -1001,11 +1071,11 @@ fn swap_exact_tokens_for_tokens_in_multi_hops() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Dai;
-    let coin3 = Coin::Monero;
+    let coin2 = Coin::External(ExternalCoin::Dai);
+    let coin3 = Coin::External(ExternalCoin::Monero);
 
-    assert_ok!(Dex::create_pool(coin2));
-    assert_ok!(Dex::create_pool(coin3));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
+    assert_ok!(Dex::create_pool(coin3.try_into().unwrap()));
 
     let base1 = 10000;
     let base2 = 10000;
@@ -1019,7 +1089,7 @@ fn swap_exact_tokens_for_tokens_in_multi_hops() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -1028,7 +1098,7 @@ fn swap_exact_tokens_for_tokens_in_multi_hops() {
     ));
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin3,
+      coin3.try_into().unwrap(),
       liquidity3,
       liquidity1,
       1,
@@ -1089,11 +1159,11 @@ fn swap_tokens_for_exact_tokens_in_multi_hops() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
     let coin1 = Coin::native();
-    let coin2 = Coin::Bitcoin;
-    let coin3 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Bitcoin);
+    let coin3 = Coin::External(ExternalCoin::Ether);
 
-    assert_ok!(Dex::create_pool(coin2));
-    assert_ok!(Dex::create_pool(coin3));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
+    assert_ok!(Dex::create_pool(coin3.try_into().unwrap()));
 
     let base1 = 10000;
     let base2 = 10000;
@@ -1107,7 +1177,7 @@ fn swap_tokens_for_exact_tokens_in_multi_hops() {
 
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin2,
+      coin2.try_into().unwrap(),
       liquidity2,
       liquidity1,
       1,
@@ -1116,7 +1186,7 @@ fn swap_tokens_for_exact_tokens_in_multi_hops() {
     ));
     assert_ok!(Dex::add_liquidity(
       RuntimeOrigin::signed(user),
-      coin3,
+      coin3.try_into().unwrap(),
       liquidity3,
       liquidity1,
       1,
@@ -1154,7 +1224,7 @@ fn swap_tokens_for_exact_tokens_in_multi_hops() {
 fn can_not_swap_same_coin() {
   new_test_ext().execute_with(|| {
     let user = system_address(b"user1").into();
-    let coin1 = Coin::Dai;
+    let coin1 = Coin::External(ExternalCoin::Dai);
     assert_ok!(CoinsPallet::<Test>::mint(user, Balance { coin: coin1, amount: Amount(1000) }));
 
     let exchange_amount = 10;
@@ -1188,10 +1258,10 @@ fn validate_pool_id_sorting() {
     // Serai < Bitcoin < Ether < Dai < Monero.
     // coin1 <= coin2 for this test to pass.
     let native = Coin::native();
-    let coin1 = Coin::Bitcoin;
-    let coin2 = Coin::Monero;
-    assert_eq!(Dex::get_pool_id(native, coin2).unwrap(), coin2);
-    assert_eq!(Dex::get_pool_id(coin2, native).unwrap(), coin2);
+    let coin1 = Coin::External(ExternalCoin::Bitcoin);
+    let coin2 = Coin::External(ExternalCoin::Monero);
+    assert_eq!(Dex::get_pool_id(native, coin2).unwrap(), coin2.try_into().unwrap());
+    assert_eq!(Dex::get_pool_id(coin2, native).unwrap(), coin2.try_into().unwrap());
     assert!(matches!(Dex::get_pool_id(native, native), Err(Error::<Test>::EqualCoins)));
     assert!(matches!(Dex::get_pool_id(coin2, coin1), Err(Error::<Test>::PoolNotFound)));
     assert!(coin2 > coin1);
@@ -1216,7 +1286,7 @@ fn cannot_block_pool_creation() {
 
     // The target pool the user wants to create is Native <=> Coin(2)
     let coin1 = Coin::native();
-    let coin2 = Coin::Ether;
+    let coin2 = Coin::External(ExternalCoin::Ether);
 
     // Attacker computes the still non-existing pool account for the target pair
     let pool_account = Dex::get_pool_account(Dex::get_pool_id(coin2, coin1).unwrap());
@@ -1238,7 +1308,7 @@ fn cannot_block_pool_creation() {
     }
 
     // User can still create the pool
-    assert_ok!(Dex::create_pool(coin2));
+    assert_ok!(Dex::create_pool(coin2.try_into().unwrap()));
 
     // User has to transfer one Coin(2) token to the pool account (otherwise add_liquidity will
     // fail with `CoinTwoDepositDidNotMeetMinimum`), also transfer native token for the same error.
@@ -1256,7 +1326,15 @@ fn cannot_block_pool_creation() {
     ));
 
     // add_liquidity shouldn't fail because of the number of consumers
-    assert_ok!(Dex::add_liquidity(RuntimeOrigin::signed(user), coin2, 100, 9900, 10, 9900, user,));
+    assert_ok!(Dex::add_liquidity(
+      RuntimeOrigin::signed(user),
+      coin2.try_into().unwrap(),
+      100,
+      9900,
+      10,
+      9900,
+      user,
+    ));
   });
 }
 
@@ -1281,7 +1359,7 @@ fn test_median_price() {
         prices.push(OsRng.next_u64());
       }
     }
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
 
     assert!(prices.len() >= (2 * usize::from(MEDIAN_PRICE_WINDOW_LENGTH)));
     for i in 0 .. prices.len() {
diff --git a/substrate/economic-security/pallet/src/lib.rs b/substrate/economic-security/pallet/src/lib.rs
index 65b82794..045297f4 100644
--- a/substrate/economic-security/pallet/src/lib.rs
+++ b/substrate/economic-security/pallet/src/lib.rs
@@ -24,7 +24,7 @@ pub mod pallet {
   #[pallet::event]
   #[pallet::generate_deposit(fn deposit_event)]
   pub enum Event<T: Config> {
-    EconomicSecurityReached { network: NetworkId },
+    EconomicSecurityReached { network: ExternalNetworkId },
   }
 
   #[pallet::pallet]
@@ -33,17 +33,19 @@ pub mod pallet {
   #[pallet::storage]
   #[pallet::getter(fn economic_security_block)]
   pub(crate) type EconomicSecurityBlock<T: Config> =
-    StorageMap<_, Identity, NetworkId, BlockNumberFor<T>, OptionQuery>;
+    StorageMap<_, Identity, ExternalNetworkId, BlockNumberFor<T>, OptionQuery>;
 
   #[pallet::hooks]
   impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
     fn on_initialize(n: BlockNumberFor<T>) -> Weight {
       // we accept we reached economic security once we can mint smallest amount of a network's coin
-      for coin in COINS {
+      for coin in EXTERNAL_COINS {
         let existing = EconomicSecurityBlock::<T>::get(coin.network());
+        // TODO: we don't need to check for oracle value if is_allowed returns false when there is
+        // no coin value
         if existing.is_none() &&
           Dex::<T>::security_oracle_value(coin).is_some() &&
-          <T as CoinsConfig>::AllowMint::is_allowed(&Balance { coin, amount: Amount(1) })
+          <T as CoinsConfig>::AllowMint::is_allowed(&ExternalBalance { coin, amount: Amount(1) })
         {
           EconomicSecurityBlock::<T>::set(coin.network(), Some(n));
           Self::deposit_event(Event::EconomicSecurityReached { network: coin.network() });
diff --git a/substrate/emissions/pallet/src/lib.rs b/substrate/emissions/pallet/src/lib.rs
index 78ba9377..702d67a5 100644
--- a/substrate/emissions/pallet/src/lib.rs
+++ b/substrate/emissions/pallet/src/lib.rs
@@ -85,7 +85,8 @@ pub mod pallet {
   pub type CurrentSession<T: Config> = StorageMap<_, Identity, NetworkId, u32, ValueQuery>;
 
   #[pallet::storage]
-  pub(crate) type LastSwapVolume<T: Config> = StorageMap<_, Identity, Coin, u64, OptionQuery>;
+  pub(crate) type LastSwapVolume<T: Config> =
+    StorageMap<_, Identity, ExternalCoin, u64, OptionQuery>;
 
   #[pallet::genesis_build]
   impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
@@ -137,19 +138,16 @@ pub mod pallet {
       let mut total_distance: u64 = 0;
       let reward_this_epoch = if pre_ec_security {
         // calculate distance to economic security per network
-        for n in NETWORKS {
-          if n == NetworkId::Serai {
-            continue;
-          }
-
+        for n in EXTERNAL_NETWORKS {
           let required = ValidatorSets::<T>::required_stake_for_network(n);
-          let mut current = ValidatorSets::<T>::total_allocated_stake(n).unwrap_or(Amount(0)).0;
+          let mut current =
+            ValidatorSets::<T>::total_allocated_stake(NetworkId::from(n)).unwrap_or(Amount(0)).0;
           if current > required {
             current = required;
           }
 
           let distance = required - current;
-          distances.insert(n, distance);
+          distances.insert(NetworkId::from(n), distance);
           total_distance = total_distance.saturating_add(distance);
         }
 
@@ -193,9 +191,8 @@ pub mod pallet {
         )
       } else {
         // get swap volumes
-        let mut volume_per_coin: BTreeMap<Coin, u64> = BTreeMap::new();
-        for c in COINS {
-          // this should return 0 for SRI and so it shouldn't affect the total volume.
+        let mut volume_per_coin: BTreeMap<ExternalCoin, u64> = BTreeMap::new();
+        for c in EXTERNAL_COINS {
           let current_volume = Dex::<T>::swap_volume(c).unwrap_or(0);
           let last_volume = LastSwapVolume::<T>::get(c).unwrap_or(0);
           let vol_this_epoch = current_volume.saturating_sub(last_volume);
@@ -210,11 +207,13 @@ pub mod pallet {
         let mut volume_per_network: BTreeMap<NetworkId, u64> = BTreeMap::new();
         for (c, vol) in &volume_per_coin {
           volume_per_network.insert(
-            c.network(),
-            (*volume_per_network.get(&c.network()).unwrap_or(&0)).saturating_add(*vol),
+            c.network().into(),
+            (*volume_per_network.get(&c.network().into()).unwrap_or(&0)).saturating_add(*vol),
           );
           total_volume = total_volume.saturating_add(*vol);
         }
+        // we add the serai network now
+        volume_per_network.insert(NetworkId::Serai, 0);
 
         (
           volume_per_network
@@ -246,12 +245,13 @@ pub mod pallet {
 
       // distribute the rewards within the network
       for (n, reward) in rewards_per_network {
-        let (validators_reward, network_pool_reward) = if n == NetworkId::Serai {
-          (reward, 0)
-        } else {
+        let validators_reward = if let NetworkId::External(external_network) = n {
           // calculate pool vs validator share
-          let capacity = ValidatorSets::<T>::total_allocated_stake(n).unwrap_or(Amount(0)).0;
-          let required = ValidatorSets::<T>::required_stake_for_network(n);
+          let capacity =
+            ValidatorSets::<T>::total_allocated_stake(NetworkId::from(external_network))
+              .unwrap_or(Amount(0))
+              .0;
+          let required = ValidatorSets::<T>::required_stake_for_network(external_network);
           let unused_capacity = capacity.saturating_sub(required);
 
           let distribution = unused_capacity.saturating_mul(ACCURACY_MULTIPLIER) / capacity;
@@ -259,41 +259,44 @@ pub mod pallet {
 
           let validators_reward = DESIRED_DISTRIBUTION.saturating_mul(reward) / total;
           let network_pool_reward = reward.saturating_sub(validators_reward);
-          (validators_reward, network_pool_reward)
+
+          // send the rest to the pool
+          if network_pool_reward != 0 {
+            // these should be available to unwrap if we have a network_pool_reward. Because that
+            // means we had an unused capacity hence in a post-ec era.
+            let vpn = volume_per_network.as_ref().unwrap();
+            let vpc = volume_per_coin.as_ref().unwrap();
+            for c in external_network.coins() {
+              let pool_reward = u64::try_from(
+                u128::from(network_pool_reward).saturating_mul(u128::from(vpc[&c])) /
+                  u128::from(vpn[&n]),
+              )
+              .unwrap();
+
+              if Coins::<T>::mint(
+                Dex::<T>::get_pool_account(c),
+                Balance { coin: Coin::Serai, amount: Amount(pool_reward) },
+              )
+              .is_err()
+              {
+                // TODO: log the failure
+                continue;
+              }
+            }
+          }
+
+          validators_reward
+        } else {
+          reward
         };
 
         // distribute validators rewards
         Self::distribute_to_validators(n, validators_reward);
-
-        // send the rest to the pool
-        if network_pool_reward != 0 {
-          // these should be available to unwrap if we have a network_pool_reward. Because that
-          // means we had an unused capacity hence in a post-ec era.
-          let vpn = volume_per_network.as_ref().unwrap();
-          let vpc = volume_per_coin.as_ref().unwrap();
-          for c in n.coins() {
-            let pool_reward = u64::try_from(
-              u128::from(network_pool_reward).saturating_mul(u128::from(vpc[c])) /
-                u128::from(vpn[&n]),
-            )
-            .unwrap();
-
-            if Coins::<T>::mint(
-              Dex::<T>::get_pool_account(*c),
-              Balance { coin: Coin::Serai, amount: Amount(pool_reward) },
-            )
-            .is_err()
-            {
-              // TODO: log the failure
-              continue;
-            }
-          }
-        }
       }
 
       // TODO: we have the past session participants here in the emissions pallet so that we can
       // distribute rewards to them in the next session. Ideally we should be able to fetch this
-      // information from valiadtor sets pallet.
+      // information from validator sets pallet.
       Self::update_participants();
       Weight::zero() // TODO
     }
@@ -319,11 +322,7 @@ pub mod pallet {
 
     /// Returns true if any of the external networks haven't reached economic security yet.
     fn pre_ec_security() -> bool {
-      for n in NETWORKS {
-        if n == NetworkId::Serai {
-          continue;
-        }
-
+      for n in EXTERNAL_NETWORKS {
         if EconomicSecurity::<T>::economic_security_block(n).is_none() {
           return true;
         }
@@ -363,16 +362,30 @@ pub mod pallet {
     pub fn swap_to_staked_sri(
       to: PublicKey,
       network: NetworkId,
-      balance: Balance,
+      balance: ExternalBalance,
     ) -> DispatchResult {
       // check the network didn't reach the economic security yet
-      if EconomicSecurity::<T>::economic_security_block(network).is_some() {
-        Err(Error::<T>::NetworkHasEconomicSecurity)?;
+      if let NetworkId::External(n) = network {
+        if EconomicSecurity::<T>::economic_security_block(n).is_some() {
+          Err(Error::<T>::NetworkHasEconomicSecurity)?;
+        }
+      } else {
+        // we target 20% of the network's stake to be behind the Serai network
+        let mut total_stake = 0;
+        for n in NETWORKS {
+          total_stake += ValidatorSets::<T>::total_allocated_stake(n).unwrap_or(Amount(0)).0;
+        }
+
+        let stake = ValidatorSets::<T>::total_allocated_stake(network).unwrap_or(Amount(0)).0;
+        let desired_stake = total_stake / (100 / SERAI_VALIDATORS_DESIRED_PERCENTAGE);
+        if stake >= desired_stake {
+          Err(Error::<T>::NetworkHasEconomicSecurity)?;
+        }
       }
 
       // swap half of the liquidity for SRI to form PoL.
       let half = balance.amount.0 / 2;
-      let path = BoundedVec::try_from(vec![balance.coin, Coin::Serai]).unwrap();
+      let path = BoundedVec::try_from(vec![balance.coin.into(), Coin::Serai]).unwrap();
       let origin = RawOrigin::Signed(POL_ACCOUNT.into());
       Dex::<T>::swap_exact_tokens_for_tokens(
         origin.clone().into(),
diff --git a/substrate/genesis-liquidity/pallet/src/lib.rs b/substrate/genesis-liquidity/pallet/src/lib.rs
index e5662d55..2fd24589 100644
--- a/substrate/genesis-liquidity/pallet/src/lib.rs
+++ b/substrate/genesis-liquidity/pallet/src/lib.rs
@@ -54,9 +54,9 @@ pub mod pallet {
   #[pallet::event]
   #[pallet::generate_deposit(fn deposit_event)]
   pub enum Event<T: Config> {
-    GenesisLiquidityAdded { by: SeraiAddress, balance: Balance },
-    GenesisLiquidityRemoved { by: SeraiAddress, balance: Balance },
-    GenesisLiquidityAddedToPool { coin1: Balance, sri: Amount },
+    GenesisLiquidityAdded { by: SeraiAddress, balance: ExternalBalance },
+    GenesisLiquidityRemoved { by: SeraiAddress, balance: ExternalBalance },
+    GenesisLiquidityAddedToPool { coin: ExternalBalance, sri: Amount },
   }
 
   #[pallet::pallet]
@@ -65,16 +65,24 @@ pub mod pallet {
   /// Keeps shares and the amount of coins per account.
   #[pallet::storage]
   #[pallet::getter(fn liquidity)]
-  pub(crate) type Liquidity<T: Config> =
-    StorageDoubleMap<_, Identity, Coin, Blake2_128Concat, PublicKey, LiquidityAmount, OptionQuery>;
+  pub(crate) type Liquidity<T: Config> = StorageDoubleMap<
+    _,
+    Identity,
+    ExternalCoin,
+    Blake2_128Concat,
+    PublicKey,
+    LiquidityAmount,
+    OptionQuery,
+  >;
 
   /// Keeps the total shares and the total amount of coins per coin.
   #[pallet::storage]
   #[pallet::getter(fn supply)]
-  pub(crate) type Supply<T: Config> = StorageMap<_, Identity, Coin, LiquidityAmount, OptionQuery>;
+  pub(crate) type Supply<T: Config> =
+    StorageMap<_, Identity, ExternalCoin, LiquidityAmount, OptionQuery>;
 
   #[pallet::storage]
-  pub(crate) type Oracle<T: Config> = StorageMap<_, Identity, Coin, u64, OptionQuery>;
+  pub(crate) type Oracle<T: Config> = StorageMap<_, Identity, ExternalCoin, u64, OptionQuery>;
 
   #[pallet::storage]
   #[pallet::getter(fn genesis_complete_block)]
@@ -104,11 +112,7 @@ pub mod pallet {
         // get pool & total values
         let mut pool_values = vec![];
         let mut total_value: u128 = 0;
-        for coin in COINS {
-          if coin == Coin::Serai {
-            continue;
-          }
-
+        for coin in EXTERNAL_COINS {
           // initial coin value in terms of btc
           let Some(value) = Oracle::<T>::get(coin) else {
             continue;
@@ -160,7 +164,7 @@ pub mod pallet {
 
           // let everyone know about the event
           Self::deposit_event(Event::GenesisLiquidityAddedToPool {
-            coin1: Balance { coin, amount: Amount(u64::try_from(pool_amount).unwrap()) },
+            coin: ExternalBalance { coin, amount: Amount(u64::try_from(pool_amount).unwrap()) },
             sri: Amount(sri_amount),
           });
         }
@@ -182,7 +186,7 @@ pub mod pallet {
   impl<T: Config> Pallet<T> {
     /// Add genesis liquidity for the given account. All accounts that provide liquidity
     /// will receive the genesis SRI according to their liquidity ratio.
-    pub fn add_coin_liquidity(account: PublicKey, balance: Balance) -> DispatchResult {
+    pub fn add_coin_liquidity(account: PublicKey, balance: ExternalBalance) -> DispatchResult {
       // check we are still in genesis period
       if Self::genesis_ended() {
         Err(Error::<T>::GenesisPeriodEnded)?;
@@ -229,7 +233,7 @@ pub mod pallet {
     /// If networks is yet to be reached that threshold, None is returned.
     fn blocks_since_ec_security() -> Option<u64> {
       let mut min = u64::MAX;
-      for n in NETWORKS {
+      for n in EXTERNAL_NETWORKS {
         let ec_security_block =
           EconomicSecurity::<T>::economic_security_block(n)?.saturated_into::<u64>();
         let current = <frame_system::Pallet<T>>::block_number().saturated_into::<u64>();
@@ -245,11 +249,7 @@ pub mod pallet {
     }
 
     fn oraclization_is_done() -> bool {
-      for c in COINS {
-        if c == Coin::Serai {
-          continue;
-        }
-
+      for c in EXTERNAL_COINS {
         if Oracle::<T>::get(c).is_none() {
           return false;
         }
@@ -278,7 +278,7 @@ pub mod pallet {
     /// Remove the provided genesis liquidity for an account.
     #[pallet::call_index(0)]
     #[pallet::weight((0, DispatchClass::Operational))] // TODO
-    pub fn remove_coin_liquidity(origin: OriginFor<T>, balance: Balance) -> DispatchResult {
+    pub fn remove_coin_liquidity(origin: OriginFor<T>, balance: ExternalBalance) -> DispatchResult {
       let account = ensure_signed(origin)?;
       let origin = RawOrigin::Signed(GENESIS_LIQUIDITY_ACCOUNT.into());
       let supply = Supply::<T>::get(balance.coin).ok_or(Error::<T>::NotEnoughLiquidity)?;
@@ -299,7 +299,7 @@ pub mod pallet {
 
         // remove liquidity from pool
         let prev_sri = Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), Coin::Serai);
-        let prev_coin = Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), balance.coin);
+        let prev_coin = Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), balance.coin.into());
         Dex::<T>::remove_liquidity(
           origin.clone().into(),
           balance.coin,
@@ -309,7 +309,8 @@ pub mod pallet {
           GENESIS_LIQUIDITY_ACCOUNT.into(),
         )?;
         let current_sri = Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), Coin::Serai);
-        let current_coin = Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), balance.coin);
+        let current_coin =
+          Coins::<T>::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), balance.coin.into());
 
         // burn the SRI if necessary
         // TODO: take into consideration movement between pools.
@@ -335,7 +336,7 @@ pub mod pallet {
         Coins::<T>::transfer(
           origin.clone().into(),
           account,
-          Balance { coin: balance.coin, amount: Amount(coin_out) },
+          Balance { coin: balance.coin.into(), amount: Amount(coin_out) },
         )?;
         Coins::<T>::transfer(
           origin.into(),
@@ -368,7 +369,7 @@ pub mod pallet {
         Coins::<T>::transfer(
           origin.into(),
           account,
-          Balance { coin: balance.coin, amount: Amount(existing.coins) },
+          Balance { coin: balance.coin.into(), amount: Amount(existing.coins) },
         )?;
 
         (
@@ -406,10 +407,10 @@ pub mod pallet {
       ensure_none(origin)?;
 
       // set their relative values
-      Oracle::<T>::set(Coin::Bitcoin, Some(10u64.pow(Coin::Bitcoin.decimals())));
-      Oracle::<T>::set(Coin::Monero, Some(values.monero));
-      Oracle::<T>::set(Coin::Ether, Some(values.ether));
-      Oracle::<T>::set(Coin::Dai, Some(values.dai));
+      Oracle::<T>::set(ExternalCoin::Bitcoin, Some(10u64.pow(ExternalCoin::Bitcoin.decimals())));
+      Oracle::<T>::set(ExternalCoin::Monero, Some(values.monero));
+      Oracle::<T>::set(ExternalCoin::Ether, Some(values.ether));
+      Oracle::<T>::set(ExternalCoin::Dai, Some(values.dai));
       Ok(())
     }
   }
diff --git a/substrate/in-instructions/pallet/src/lib.rs b/substrate/in-instructions/pallet/src/lib.rs
index 6fddbcbe..09fe8944 100644
--- a/substrate/in-instructions/pallet/src/lib.rs
+++ b/substrate/in-instructions/pallet/src/lib.rs
@@ -4,7 +4,7 @@
 
 use sp_io::hashing::blake2_256;
 
-use serai_primitives::{BlockHash, NetworkId};
+use serai_primitives::*;
 
 pub use in_instructions_primitives as primitives;
 use primitives::*;
@@ -29,8 +29,6 @@ pub mod pallet {
   use sp_runtime::traits::Zero;
   use sp_core::sr25519::Public;
 
-  use serai_primitives::{Coin, Amount, Balance};
-
   use frame_support::pallet_prelude::*;
   use frame_system::{pallet_prelude::*, RawOrigin};
 
@@ -40,7 +38,7 @@ pub mod pallet {
   };
   use dex_pallet::{Config as DexConfig, Pallet as Dex};
   use validator_sets_pallet::{
-    primitives::{Session, ValidatorSet},
+    primitives::{Session, ValidatorSet, ExternalValidatorSet},
     Config as ValidatorSetsConfig, Pallet as ValidatorSets,
   };
 
@@ -66,9 +64,9 @@ pub mod pallet {
   #[pallet::event]
   #[pallet::generate_deposit(fn deposit_event)]
   pub enum Event<T: Config> {
-    Batch { network: NetworkId, id: u32, block: BlockHash, instructions_hash: [u8; 32] },
-    InstructionFailure { network: NetworkId, id: u32, index: u32 },
-    Halt { network: NetworkId },
+    Batch { network: ExternalNetworkId, id: u32, block: BlockHash, instructions_hash: [u8; 32] },
+    InstructionFailure { network: ExternalNetworkId, id: u32, index: u32 },
+    Halt { network: ExternalNetworkId },
   }
 
   #[pallet::error]
@@ -83,23 +81,24 @@ pub mod pallet {
   // The ID of the last executed Batch for a network.
   #[pallet::storage]
   #[pallet::getter(fn batches)]
-  pub(crate) type LastBatch<T: Config> = StorageMap<_, Identity, NetworkId, u32, OptionQuery>;
+  pub(crate) type LastBatch<T: Config> =
+    StorageMap<_, Identity, ExternalNetworkId, u32, OptionQuery>;
 
   // The last Serai block in which this validator set included a batch
   #[pallet::storage]
   #[pallet::getter(fn last_batch_block)]
   pub(crate) type LastBatchBlock<T: Config> =
-    StorageMap<_, Identity, NetworkId, BlockNumberFor<T>, OptionQuery>;
+    StorageMap<_, Identity, ExternalNetworkId, BlockNumberFor<T>, OptionQuery>;
 
   // Halted networks.
   #[pallet::storage]
-  pub(crate) type Halted<T: Config> = StorageMap<_, Identity, NetworkId, (), OptionQuery>;
+  pub(crate) type Halted<T: Config> = StorageMap<_, Identity, ExternalNetworkId, (), OptionQuery>;
 
   // The latest block a network has acknowledged as finalized
   #[pallet::storage]
   #[pallet::getter(fn latest_network_block)]
   pub(crate) type LatestNetworkBlock<T: Config> =
-    StorageMap<_, Identity, NetworkId, BlockHash, OptionQuery>;
+    StorageMap<_, Identity, ExternalNetworkId, BlockHash, OptionQuery>;
 
   impl<T: Config> Pallet<T> {
     // Use a dedicated transaction layer when executing this InInstruction
@@ -108,7 +107,7 @@ pub mod pallet {
     fn execute(instruction: InInstructionWithBalance) -> Result<(), DispatchError> {
       match instruction.instruction {
         InInstruction::Transfer(address) => {
-          Coins::<T>::mint(address.into(), instruction.balance)?;
+          Coins::<T>::mint(address.into(), instruction.balance.into())?;
         }
         InInstruction::Dex(call) => {
           // This will only be initiated by external chain transactions. That is why we only need
@@ -120,11 +119,11 @@ pub mod pallet {
               let coin = instruction.balance.coin;
 
               // mint the given coin on the account
-              Coins::<T>::mint(IN_INSTRUCTION_EXECUTOR.into(), instruction.balance)?;
+              Coins::<T>::mint(IN_INSTRUCTION_EXECUTOR.into(), instruction.balance.into())?;
 
               // swap half of it for SRI
               let half = instruction.balance.amount.0 / 2;
-              let path = BoundedVec::try_from(vec![coin, Coin::Serai]).unwrap();
+              let path = BoundedVec::try_from(vec![coin.into(), Coin::Serai]).unwrap();
               Dex::<T>::swap_exact_tokens_for_tokens(
                 origin.clone().into(),
                 path,
@@ -150,13 +149,13 @@ pub mod pallet {
               // TODO: minimums are set to 1 above to guarantee successful adding liq call.
               // Ideally we either get this info from user or send the leftovers back to user.
               // Let's send the leftovers back to user for now.
-              let coin_balance = Coins::<T>::balance(IN_INSTRUCTION_EXECUTOR.into(), coin);
+              let coin_balance = Coins::<T>::balance(IN_INSTRUCTION_EXECUTOR.into(), coin.into());
               let sri_balance = Coins::<T>::balance(IN_INSTRUCTION_EXECUTOR.into(), Coin::Serai);
               if coin_balance != Amount(0) {
                 Coins::<T>::transfer_internal(
                   IN_INSTRUCTION_EXECUTOR.into(),
                   address.into(),
-                  Balance { coin, amount: coin_balance },
+                  Balance { coin: coin.into(), amount: coin_balance },
                 )?;
               }
               if sri_balance != Amount(0) {
@@ -177,10 +176,10 @@ pub mod pallet {
               }
 
               // mint the given coin on our account
-              Coins::<T>::mint(IN_INSTRUCTION_EXECUTOR.into(), instruction.balance)?;
+              Coins::<T>::mint(IN_INSTRUCTION_EXECUTOR.into(), instruction.balance.into())?;
 
               // get the path
-              let mut path = vec![instruction.balance.coin, Coin::Serai];
+              let mut path = vec![instruction.balance.coin.into(), Coin::Serai];
               if !native_coin {
                 path.push(out_balance.coin);
               }
@@ -216,7 +215,10 @@ pub mod pallet {
                     // TODO: Properly pass data. Replace address with an OutInstruction entirely?
                     data: None,
                   },
-                  balance: Balance { coin: out_balance.coin, amount: coin_balance },
+                  balance: ExternalBalance {
+                    coin: out_balance.coin.try_into().unwrap(),
+                    amount: coin_balance,
+                  },
                 };
                 Coins::<T>::burn_with_instruction(origin.into(), instruction)?;
               }
@@ -224,18 +226,18 @@ pub mod pallet {
           }
         }
         InInstruction::GenesisLiquidity(address) => {
-          Coins::<T>::mint(GENESIS_LIQUIDITY_ACCOUNT.into(), instruction.balance)?;
+          Coins::<T>::mint(GENESIS_LIQUIDITY_ACCOUNT.into(), instruction.balance.into())?;
           GenesisLiq::<T>::add_coin_liquidity(address.into(), instruction.balance)?;
         }
         InInstruction::SwapToStakedSRI(address, network) => {
-          Coins::<T>::mint(POL_ACCOUNT.into(), instruction.balance)?;
+          Coins::<T>::mint(POL_ACCOUNT.into(), instruction.balance.into())?;
           Emissions::<T>::swap_to_staked_sri(address.into(), network, instruction.balance)?;
         }
       }
       Ok(())
     }
 
-    pub fn halt(network: NetworkId) -> Result<(), DispatchError> {
+    pub fn halt(network: ExternalNetworkId) -> Result<(), DispatchError> {
       Halted::<T>::set(network, Some(()));
       Self::deposit_event(Event::Halt { network });
       Ok(())
@@ -243,13 +245,13 @@ pub mod pallet {
   }
 
   fn keys_for_network<T: Config>(
-    network: NetworkId,
+    network: ExternalNetworkId,
   ) -> Result<(Session, Option<Public>, Option<Public>), InvalidTransaction> {
     // If there's no session set, and therefore no keys set, then this must be an invalid signature
-    let Some(session) = ValidatorSets::<T>::session(network) else {
+    let Some(session) = ValidatorSets::<T>::session(NetworkId::from(network)) else {
       Err(InvalidTransaction::BadProof)?
     };
-    let mut set = ValidatorSet { session, network };
+    let mut set = ExternalValidatorSet { network, session };
     let latest = ValidatorSets::<T>::keys(set).map(|keys| keys.0);
     let prior = if set.session.0 != 0 {
       set.session.0 -= 1;
@@ -309,12 +311,7 @@ pub mod pallet {
       if batch.batch.encode().len() > MAX_BATCH_SIZE {
         Err(InvalidTransaction::ExhaustsResources)?;
       }
-
       let network = batch.batch.network;
-      // Don't allow the Serai set to publish `Batch`s as-if Serai itself was an external network
-      if network == NetworkId::Serai {
-        Err(InvalidTransaction::Custom(0))?;
-      }
 
       // verify the signature
       let (current_session, prior, current) = keys_for_network::<T>(network)?;
@@ -342,7 +339,7 @@ pub mod pallet {
       // `Batch`s published by the prior key, meaning they are accepting the hand-over.
       if prior.is_some() && (!valid_by_prior) {
         ValidatorSets::<T>::retire_set(ValidatorSet {
-          network,
+          network: network.into(),
           session: Session(current_session.0 - 1),
         });
       }
diff --git a/substrate/in-instructions/pallet/src/mock.rs b/substrate/in-instructions/pallet/src/mock.rs
index 93c17d87..65013eb4 100644
--- a/substrate/in-instructions/pallet/src/mock.rs
+++ b/substrate/in-instructions/pallet/src/mock.rs
@@ -2,6 +2,8 @@
 
 use super::*;
 
+use std::collections::HashMap;
+
 use frame_support::{
   construct_runtime,
   traits::{ConstU16, ConstU32, ConstU64},
@@ -13,7 +15,6 @@ use sp_runtime::{
   BuildStorage,
 };
 
-use serai_primitives::*;
 use validator_sets::{primitives::MAX_KEY_SHARES_PER_SET, MembershipProof};
 
 pub use crate as in_instructions;
@@ -153,8 +154,19 @@ impl Config for Test {
   type RuntimeEvent = RuntimeEvent;
 }
 
+// Amounts for single key share per network
+pub fn key_shares() -> HashMap<NetworkId, Amount> {
+  HashMap::from([
+    (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
+    (NetworkId::External(ExternalNetworkId::Bitcoin), Amount(1_000_000 * 10_u64.pow(8))),
+    (NetworkId::External(ExternalNetworkId::Ethereum), Amount(1_000_000 * 10_u64.pow(8))),
+    (NetworkId::External(ExternalNetworkId::Monero), Amount(100_000 * 10_u64.pow(8))),
+  ])
+}
+
 pub(crate) fn new_test_ext() -> sp_io::TestExternalities {
   let mut t = frame_system::GenesisConfig::<Test>::default().build_storage().unwrap();
+  let networks: Vec<(NetworkId, Amount)> = key_shares().into_iter().collect::<Vec<_>>();
 
   let accounts: Vec<Public> = vec![
     insecure_pair_from_name("Alice").public(),
@@ -166,16 +178,6 @@ pub(crate) fn new_test_ext() -> sp_io::TestExternalities {
   ];
   let validators = accounts.clone();
 
-  let networks = NETWORKS
-    .iter()
-    .map(|network| match network {
-      NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-      NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-      NetworkId::Ethereum => (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
-      NetworkId::Monero => (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-    })
-    .collect::<Vec<_>>();
-
   coins::GenesisConfig::<Test> {
     accounts: accounts
       .into_iter()
diff --git a/substrate/in-instructions/pallet/src/tests.rs b/substrate/in-instructions/pallet/src/tests.rs
index ca627441..43a5b025 100644
--- a/substrate/in-instructions/pallet/src/tests.rs
+++ b/substrate/in-instructions/pallet/src/tests.rs
@@ -15,14 +15,8 @@ use validator_sets::{Pallet as ValidatorSets, primitives::KeyPair};
 use coins::primitives::{OutInstruction, OutInstructionWithBalance};
 use genesis_liquidity::primitives::GENESIS_LIQUIDITY_ACCOUNT;
 
-use serai_primitives::*;
-
 fn set_keys_for_session(key: Public) {
-  for n in NETWORKS {
-    if n == NetworkId::Serai {
-      continue;
-    }
-
+  for n in EXTERNAL_NETWORKS {
     ValidatorSets::<Test>::set_keys(
       RawOrigin::None.into(),
       n,
@@ -50,10 +44,10 @@ fn get_events() -> Vec<Event<Test>> {
   events
 }
 
-fn make_liquid_pool(coin: Coin, amount: u64) {
+fn make_liquid_pool(coin: ExternalCoin, amount: u64) {
   // mint coins so that we can add liquidity
   let account = insecure_pair_from_name("make-pool-account").public();
-  Coins::mint(account, Balance { coin, amount: Amount(amount) }).unwrap();
+  Coins::mint(account, ExternalBalance { coin, amount: Amount(amount) }.into()).unwrap();
   Coins::mint(account, Balance { coin: Coin::Serai, amount: Amount(amount) }).unwrap();
 
   // make some liquid pool
@@ -68,14 +62,18 @@ fn validate_batch() {
     set_keys_for_session(pair.public());
 
     let mut batch_size = 0;
-    let mut batch =
-      Batch { network: NetworkId::Serai, id: 1, block: BlockHash([0u8; 32]), instructions: vec![] };
+    let mut batch = Batch {
+      network: ExternalNetworkId::Monero,
+      id: 1,
+      block: BlockHash([0u8; 32]),
+      instructions: vec![],
+    };
 
     // batch size bigger than MAX_BATCH_SIZE should fail
     while batch_size <= MAX_BATCH_SIZE + 1000 {
       batch.instructions.push(InInstructionWithBalance {
         instruction: InInstruction::Transfer(SeraiAddress::new([0u8; 32])),
-        balance: Balance { coin: Coin::Serai, amount: Amount(1) },
+        balance: ExternalBalance { coin: ExternalCoin::Monero, amount: Amount(1) },
       });
       batch_size = batch.encode().len();
     }
@@ -94,18 +92,6 @@ fn validate_batch() {
       batch_size = batch.encode().len();
     }
 
-    // serai network can't submit batches
-    let call = pallet::Call::<Test>::execute_batch {
-      batch: SignedBatch { batch: batch.clone(), signature: Signature([0u8; 64]) },
-    };
-    assert_eq!(
-      InInstructions::validate_unsigned(TransactionSource::External, &call),
-      InvalidTransaction::Custom(0).into() // network is serai error
-    );
-
-    // change the network to an external network
-    batch.network = NetworkId::Monero;
-
     // 0 signature should be invalid
     let call = pallet::Call::<Test>::execute_batch {
       batch: SignedBatch { batch: batch.clone(), signature: Signature([0u8; 64]) },
@@ -119,7 +105,7 @@ fn validate_batch() {
     let signature = pair.sign(&batch_message(&batch));
 
     // network shouldn't be halted
-    InInstructions::halt(NetworkId::Monero).unwrap();
+    InInstructions::halt(ExternalNetworkId::Monero).unwrap();
     let call = pallet::Call::<Test>::execute_batch {
       batch: SignedBatch { batch: batch.clone(), signature },
     };
@@ -129,7 +115,7 @@ fn validate_batch() {
     );
 
     // submit from an un-halted network
-    batch.network = NetworkId::Bitcoin;
+    batch.network = ExternalNetworkId::Bitcoin;
     let signature = pair.sign(&batch_message(&batch));
 
     // can't submit in the first block(Block 0)
@@ -181,7 +167,7 @@ fn validate_batch() {
     // update block number & batch
     System::set_block_number(3);
     for ins in &mut batch.instructions {
-      ins.balance.coin = Coin::Bitcoin
+      ins.balance.coin = ExternalCoin::Bitcoin;
     }
     let signature = pair.sign(&batch_message(&batch));
 
@@ -224,7 +210,7 @@ fn validate_batch() {
 #[test]
 fn transfer_instruction() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
     let amount = Amount(2 * 10u64.pow(coin.decimals()));
     let account = insecure_pair_from_name("random1").public();
     let batch = SignedBatch {
@@ -234,7 +220,7 @@ fn transfer_instruction() {
         block: BlockHash([0u8; 32]),
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::Transfer(account.into()),
-          balance: Balance { coin, amount },
+          balance: ExternalBalance { coin, amount },
         }],
       },
       signature: Signature([0u8; 64]),
@@ -242,14 +228,14 @@ fn transfer_instruction() {
     InInstructions::execute_batch(RawOrigin::None.into(), batch).unwrap();
 
     // check that account has the coins
-    assert_eq!(Coins::balance(account, coin), amount);
+    assert_eq!(Coins::balance(account, coin.into()), amount);
   })
 }
 
 #[test]
 fn dex_instruction_add_liquidity() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Ether;
+    let coin = ExternalCoin::Ether;
     let amount = Amount(2 * 10u64.pow(coin.decimals()));
     let account = insecure_pair_from_name("random1").public();
 
@@ -260,7 +246,7 @@ fn dex_instruction_add_liquidity() {
         block: BlockHash([0u8; 32]),
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::Dex(DexCall::SwapAndAddLiquidity(account.into())),
-          balance: Balance { coin, amount },
+          balance: ExternalBalance { coin, amount },
         }],
       },
       signature: Signature([0u8; 64]),
@@ -301,15 +287,15 @@ fn dex_instruction_add_liquidity() {
     // we can't know the actual SRI amount since we don't know the result of the swap.
     // Moreover, knowing exactly how much isn't the responsibility of InInstruction pallet,
     // it is responsibility of the Dex pallet.
-    let (coin_amount, _serai_amount) = Dex::get_reserves(&coin, &Coin::Serai).unwrap();
+    let (coin_amount, _serai_amount) = Dex::get_reserves(&coin.into(), &Coin::Serai).unwrap();
     assert_eq!(coin_amount, original_coin_amount + amount.0);
 
     // assert that the account got the liquidity tokens, again we don't how much and
     // it isn't this pallets responsibility.
-    assert!(LiquidityTokens::balance(account, coin).0 > 0);
+    assert!(LiquidityTokens::balance(account, coin.into()).0 > 0);
 
     // check that in ins account doesn't have the coins
-    assert_eq!(Coins::balance(IN_INSTRUCTION_EXECUTOR.into(), coin), Amount(0));
+    assert_eq!(Coins::balance(IN_INSTRUCTION_EXECUTOR.into(), coin.into()), Amount(0));
     assert_eq!(Coins::balance(IN_INSTRUCTION_EXECUTOR.into(), Coin::Serai), Amount(0));
   })
 }
@@ -317,7 +303,7 @@ fn dex_instruction_add_liquidity() {
 #[test]
 fn dex_instruction_swap() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
     let amount = Amount(2 * 10u64.pow(coin.decimals()));
     let account = insecure_pair_from_name("random1").public();
 
@@ -334,7 +320,7 @@ fn dex_instruction_swap() {
             Balance { coin: Coin::Serai, amount: Amount(1) },
             OutAddress::External(ExternalAddress::new([0u8; 64].to_vec()).unwrap()),
           )),
-          balance: Balance { coin, amount },
+          balance: ExternalBalance { coin, amount },
         }],
       },
       signature: Signature([0u8; 64]),
@@ -368,13 +354,13 @@ fn dex_instruction_swap() {
     assert!(Coins::balance(account, Coin::Serai).0 > 0);
 
     // make another pool for external coin
-    let coin2 = Coin::Monero;
+    let coin2 = ExternalCoin::Monero;
     make_liquid_pool(coin2, 5 * 10u64.pow(coin.decimals()));
 
     // update the batch
     let out_addr = ExternalAddress::new([0u8; 64].to_vec()).unwrap();
     batch.batch.instructions[0].instruction = InInstruction::Dex(DexCall::Swap(
-      Balance { coin: Coin::Monero, amount: Amount(1) },
+      Balance { coin: ExternalCoin::Monero.into(), amount: Amount(1) },
       OutAddress::External(out_addr.clone()),
     ));
     InInstructions::execute_batch(RawOrigin::None.into(), batch.clone()).unwrap();
@@ -401,7 +387,7 @@ fn dex_instruction_swap() {
         from: IN_INSTRUCTION_EXECUTOR.into(),
         instruction: OutInstructionWithBalance {
           instruction: OutInstruction { address: out_addr, data: None },
-          balance: Balance { coin: coin2, amount: Amount(68228493) }
+          balance: ExternalBalance { coin: coin2, amount: Amount(68228493) }
         }
       }]
     )
@@ -411,7 +397,7 @@ fn dex_instruction_swap() {
 #[test]
 fn genesis_liquidity_instruction() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Bitcoin;
+    let coin = ExternalCoin::Bitcoin;
     let amount = Amount(2 * 10u64.pow(coin.decimals()));
     let account = insecure_pair_from_name("random1").public();
 
@@ -422,7 +408,7 @@ fn genesis_liquidity_instruction() {
         block: BlockHash([0u8; 32]),
         instructions: vec![InInstructionWithBalance {
           instruction: InInstruction::GenesisLiquidity(account.into()),
-          balance: Balance { coin, amount },
+          balance: ExternalBalance { coin, amount },
         }],
       },
       signature: Signature([0u8; 64]),
@@ -431,7 +417,7 @@ fn genesis_liquidity_instruction() {
     InInstructions::execute_batch(RawOrigin::None.into(), batch.clone()).unwrap();
 
     // check that genesis liq account got the coins
-    assert_eq!(Coins::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), coin), amount);
+    assert_eq!(Coins::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), coin.into()), amount);
 
     // check that it registered the liquidity for the account
     // detailed tests about the amounts has to be done in GenesisLiquidity pallet tests.
@@ -448,8 +434,9 @@ fn genesis_liquidity_instruction() {
 #[test]
 fn swap_to_staked_sri_instruction() {
   new_test_ext().execute_with(|| {
-    let coin = Coin::Monero;
-    let key_share = ValidatorSets::<Test>::allocation_per_key_share(coin.network()).unwrap();
+    let coin = ExternalCoin::Monero;
+    let key_share =
+      ValidatorSets::<Test>::allocation_per_key_share(NetworkId::from(coin.network())).unwrap();
     let amount = Amount(2 * key_share.0);
     let account = insecure_pair_from_name("random1").public();
 
@@ -457,9 +444,9 @@ fn swap_to_staked_sri_instruction() {
     make_liquid_pool(coin, 5 * 10u64.pow(coin.decimals()));
 
     // make sure account doesn't already have lTs or allocation
-    let current_liq_tokens = LiquidityTokens::balance(POL_ACCOUNT.into(), coin).0;
+    let current_liq_tokens = LiquidityTokens::balance(POL_ACCOUNT.into(), coin.into()).0;
     assert_eq!(current_liq_tokens, 0);
-    assert_eq!(ValidatorSets::<Test>::allocation((coin.network(), account)), None);
+    assert_eq!(ValidatorSets::<Test>::allocation((NetworkId::from(coin.network()), account)), None);
 
     // we need this so that value for the coin exist
     Dex::on_finalize(0);
@@ -471,8 +458,8 @@ fn swap_to_staked_sri_instruction() {
         id: 0,
         block: BlockHash([0u8; 32]),
         instructions: vec![InInstructionWithBalance {
-          instruction: InInstruction::SwapToStakedSRI(account.into(), coin.network()),
-          balance: Balance { coin, amount },
+          instruction: InInstruction::SwapToStakedSRI(account.into(), coin.network().into()),
+          balance: ExternalBalance { coin, amount },
         }],
       },
       signature: Signature([0u8; 64]),
@@ -481,7 +468,7 @@ fn swap_to_staked_sri_instruction() {
     InInstructions::execute_batch(RawOrigin::None.into(), batch.clone()).unwrap();
 
     // assert that we added liq from POL account
-    assert!(LiquidityTokens::balance(POL_ACCOUNT.into(), coin).0 > current_liq_tokens);
+    assert!(LiquidityTokens::balance(POL_ACCOUNT.into(), coin.into()).0 > current_liq_tokens);
 
     // assert that user allocated SRI for the network
     let value = Dex::spot_price_for_block(0, coin).unwrap();
@@ -495,6 +482,9 @@ fn swap_to_staked_sri_instruction() {
       )
       .unwrap(),
     );
-    assert_eq!(ValidatorSets::<Test>::allocation((coin.network(), account)).unwrap(), sri_amount);
+    assert_eq!(
+      ValidatorSets::<Test>::allocation((NetworkId::from(coin.network()), account)).unwrap(),
+      sri_amount
+    );
   })
 }
diff --git a/substrate/in-instructions/primitives/src/lib.rs b/substrate/in-instructions/primitives/src/lib.rs
index 1455e423..3944fd73 100644
--- a/substrate/in-instructions/primitives/src/lib.rs
+++ b/substrate/in-instructions/primitives/src/lib.rs
@@ -20,7 +20,7 @@ use sp_std::vec::Vec;
 use sp_runtime::RuntimeDebug;
 
 #[rustfmt::skip]
-use serai_primitives::{BlockHash, Balance, NetworkId, SeraiAddress, ExternalAddress, system_address};
+use serai_primitives::{BlockHash, Balance, ExternalNetworkId, NetworkId, SeraiAddress, ExternalBalance, ExternalAddress, system_address};
 
 mod shorthand;
 pub use shorthand::*;
@@ -97,7 +97,7 @@ pub struct RefundableInInstruction {
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 pub struct InInstructionWithBalance {
   pub instruction: InInstruction,
-  pub balance: Balance,
+  pub balance: ExternalBalance,
 }
 
 #[derive(Clone, PartialEq, Eq, Encode, Decode, TypeInfo, RuntimeDebug)]
@@ -105,7 +105,7 @@ pub struct InInstructionWithBalance {
 #[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 pub struct Batch {
-  pub network: NetworkId,
+  pub network: ExternalNetworkId,
   pub id: u32,
   pub block: BlockHash,
   pub instructions: Vec<InInstructionWithBalance>,
diff --git a/substrate/in-instructions/primitives/src/shorthand.rs b/substrate/in-instructions/primitives/src/shorthand.rs
index 8b1103c3..6f29f6f3 100644
--- a/substrate/in-instructions/primitives/src/shorthand.rs
+++ b/substrate/in-instructions/primitives/src/shorthand.rs
@@ -9,7 +9,7 @@ use serde::{Serialize, Deserialize};
 use scale::{Encode, Decode, MaxEncodedLen};
 use scale_info::TypeInfo;
 
-use serai_primitives::{Coin, Amount, SeraiAddress, ExternalAddress};
+use serai_primitives::{Amount, ExternalAddress, ExternalCoin, SeraiAddress};
 
 use coins_primitives::OutInstruction;
 
@@ -25,7 +25,7 @@ pub enum Shorthand {
   Raw(RefundableInInstruction),
   Swap {
     origin: Option<ExternalAddress>,
-    coin: Coin,
+    coin: ExternalCoin,
     minimum: Amount,
     out: OutInstruction,
   },
diff --git a/substrate/node/src/chain_spec.rs b/substrate/node/src/chain_spec.rs
index e67674cc..972b4dd6 100644
--- a/substrate/node/src/chain_spec.rs
+++ b/substrate/node/src/chain_spec.rs
@@ -33,6 +33,22 @@ fn devnet_genesis(
   endowed_accounts: Vec<PublicKey>,
 ) -> RuntimeGenesisConfig {
   let validators = validators.iter().map(|name| account_from_name(name)).collect::<Vec<_>>();
+  let key_shares = NETWORKS
+    .iter()
+    .map(|network| match network {
+      NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
+      NetworkId::External(ExternalNetworkId::Bitcoin) => {
+        (NetworkId::External(ExternalNetworkId::Bitcoin), Amount(1_000_000 * 10_u64.pow(8)))
+      }
+      NetworkId::External(ExternalNetworkId::Ethereum) => {
+        (NetworkId::External(ExternalNetworkId::Ethereum), Amount(1_000_000 * 10_u64.pow(8)))
+      }
+      NetworkId::External(ExternalNetworkId::Monero) => {
+        (NetworkId::External(ExternalNetworkId::Monero), Amount(100_000 * 10_u64.pow(8)))
+      }
+    })
+    .collect::<Vec<_>>();
+
   RuntimeGenesisConfig {
     system: SystemConfig { code: wasm_binary.to_vec(), _config: PhantomData },
 
@@ -47,29 +63,10 @@ fn devnet_genesis(
     },
 
     validator_sets: ValidatorSetsConfig {
-      networks: serai_runtime::primitives::NETWORKS
-        .iter()
-        .map(|network| match network {
-          NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-          NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Ethereum => (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Monero => (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-        })
-        .collect(),
-      participants: validators.clone(),
-    },
-    emissions: EmissionsConfig {
-      networks: serai_runtime::primitives::NETWORKS
-        .iter()
-        .map(|network| match network {
-          NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-          NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Ethereum => (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Monero => (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-        })
-        .collect(),
+      networks: key_shares.clone(),
       participants: validators.clone(),
     },
+    emissions: EmissionsConfig { networks: key_shares, participants: validators.clone() },
     signals: SignalsConfig::default(),
     babe: BabeConfig {
       authorities: validators.iter().map(|validator| ((*validator).into(), 1)).collect(),
@@ -88,6 +85,21 @@ fn testnet_genesis(wasm_binary: &[u8], validators: Vec<&'static str>) -> Runtime
     .into_iter()
     .map(|validator| Public::decode(&mut hex::decode(validator).unwrap().as_slice()).unwrap())
     .collect::<Vec<_>>();
+  let key_shares = NETWORKS
+    .iter()
+    .map(|network| match network {
+      NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
+      NetworkId::External(ExternalNetworkId::Bitcoin) => {
+        (NetworkId::External(ExternalNetworkId::Bitcoin), Amount(1_000_000 * 10_u64.pow(8)))
+      }
+      NetworkId::External(ExternalNetworkId::Ethereum) => {
+        (NetworkId::External(ExternalNetworkId::Ethereum), Amount(1_000_000 * 10_u64.pow(8)))
+      }
+      NetworkId::External(ExternalNetworkId::Monero) => {
+        (NetworkId::External(ExternalNetworkId::Monero), Amount(100_000 * 10_u64.pow(8)))
+      }
+    })
+    .collect::<Vec<_>>();
 
   assert_eq!(validators.iter().collect::<HashSet<_>>().len(), validators.len());
 
@@ -105,29 +117,10 @@ fn testnet_genesis(wasm_binary: &[u8], validators: Vec<&'static str>) -> Runtime
     },
 
     validator_sets: ValidatorSetsConfig {
-      networks: serai_runtime::primitives::NETWORKS
-        .iter()
-        .map(|network| match network {
-          NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-          NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Ethereum => (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Monero => (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-        })
-        .collect(),
-      participants: validators.clone(),
-    },
-    emissions: EmissionsConfig {
-      networks: serai_runtime::primitives::NETWORKS
-        .iter()
-        .map(|network| match network {
-          NetworkId::Serai => (NetworkId::Serai, Amount(50_000 * 10_u64.pow(8))),
-          NetworkId::Bitcoin => (NetworkId::Bitcoin, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Ethereum => (NetworkId::Ethereum, Amount(1_000_000 * 10_u64.pow(8))),
-          NetworkId::Monero => (NetworkId::Monero, Amount(100_000 * 10_u64.pow(8))),
-        })
-        .collect(),
+      networks: key_shares.clone(),
       participants: validators.clone(),
     },
+    emissions: EmissionsConfig { networks: key_shares, participants: validators.clone() },
     signals: SignalsConfig::default(),
     babe: BabeConfig {
       authorities: validators.iter().map(|validator| ((*validator).into(), 1)).collect(),
diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml
index 0e1e8f38..983b1785 100644
--- a/substrate/primitives/Cargo.toml
+++ b/substrate/primitives/Cargo.toml
@@ -28,6 +28,7 @@ sp-application-crypto = { git = "https://github.com/serai-dex/substrate", defaul
 sp-core = { git = "https://github.com/serai-dex/substrate", default-features = false }
 sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false }
 sp-io = { git = "https://github.com/serai-dex/substrate", default-features = false }
+sp-std = { git = "https://github.com/serai-dex/substrate", default-features = false }
 
 frame-support = { git = "https://github.com/serai-dex/substrate", default-features = false }
 
@@ -35,7 +36,7 @@ frame-support = { git = "https://github.com/serai-dex/substrate", default-featur
 rand_core = { version = "0.6", default-features = false, features = ["getrandom"] }
 
 [features]
-std = ["zeroize", "scale/std", "borsh?/std", "serde?/std", "scale-info/std", "sp-core/std", "sp-runtime/std", "frame-support/std"]
+std = ["zeroize", "scale/std", "borsh?/std", "serde?/std", "scale-info/std", "sp-core/std", "sp-runtime/std", "sp-std/std", "frame-support/std"]
 borsh = ["dep:borsh"]
 serde = ["dep:serde"]
 default = ["std"]
diff --git a/substrate/primitives/src/amount.rs b/substrate/primitives/src/amount.rs
index 3953b420..c82fe34d 100644
--- a/substrate/primitives/src/amount.rs
+++ b/substrate/primitives/src/amount.rs
@@ -29,6 +29,8 @@ pub type SubstrateAmount = u64;
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 pub struct Amount(pub SubstrateAmount);
 
+// TODO: these impl shouldn't panic and return error to be dealt with.
+// Otherwise we might have a panic that stops the network.
 impl Add for Amount {
   type Output = Amount;
   fn add(self, other: Amount) -> Amount {
diff --git a/substrate/primitives/src/balance.rs b/substrate/primitives/src/balance.rs
index 62182d43..6743e6fa 100644
--- a/substrate/primitives/src/balance.rs
+++ b/substrate/primitives/src/balance.rs
@@ -11,7 +11,7 @@ use serde::{Serialize, Deserialize};
 use scale::{Encode, Decode, MaxEncodedLen};
 use scale_info::TypeInfo;
 
-use crate::{Coin, Amount};
+use crate::{Amount, Coin, ExternalCoin};
 
 /// The type used for balances (a Coin and Balance).
 #[derive(Clone, Copy, PartialEq, Eq, Debug, Encode, Decode, MaxEncodedLen, TypeInfo)]
@@ -23,6 +23,34 @@ pub struct Balance {
   pub amount: Amount,
 }
 
+/// The type used for balances (a Coin and Balance).
+#[derive(Clone, Copy, PartialEq, Eq, Debug, Encode, Decode, MaxEncodedLen, TypeInfo)]
+#[cfg_attr(feature = "std", derive(Zeroize))]
+#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+pub struct ExternalBalance {
+  pub coin: ExternalCoin,
+  pub amount: Amount,
+}
+
+impl From<ExternalBalance> for Balance {
+  fn from(balance: ExternalBalance) -> Self {
+    Balance { coin: balance.coin.into(), amount: balance.amount }
+  }
+}
+
+impl TryFrom<Balance> for ExternalBalance {
+  type Error = ();
+
+  fn try_from(balance: Balance) -> Result<Self, Self::Error> {
+    match balance.coin {
+      Coin::Serai => Err(())?,
+      Coin::External(coin) => Ok(ExternalBalance { coin, amount: balance.amount }),
+    }
+  }
+}
+
+// TODO: these impl either should be removed or return errors in case of overflows
 impl Add<Amount> for Balance {
   type Output = Balance;
   fn add(self, other: Amount) -> Balance {
diff --git a/substrate/primitives/src/networks.rs b/substrate/primitives/src/networks.rs
index 1213378c..64cf7cc2 100644
--- a/substrate/primitives/src/networks.rs
+++ b/substrate/primitives/src/networks.rs
@@ -1,7 +1,7 @@
 #[cfg(feature = "std")]
 use zeroize::Zeroize;
 
-use scale::{Encode, Decode, MaxEncodedLen};
+use scale::{Decode, Encode, EncodeLike, MaxEncodedLen};
 use scale_info::TypeInfo;
 
 #[cfg(feature = "borsh")]
@@ -10,54 +10,342 @@ use borsh::{BorshSerialize, BorshDeserialize};
 use serde::{Serialize, Deserialize};
 
 use sp_core::{ConstU32, bounded::BoundedVec};
+use sp_std::{vec, vec::Vec};
 
 #[cfg(feature = "borsh")]
 use crate::{borsh_serialize_bounded_vec, borsh_deserialize_bounded_vec};
 
-/// The type used to identify networks.
-#[derive(
-  Clone, Copy, PartialEq, Eq, Hash, Debug, Encode, Decode, PartialOrd, Ord, MaxEncodedLen, TypeInfo,
-)]
+/// The type used to identify external networks.
+#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, PartialOrd, Ord, TypeInfo)]
 #[cfg_attr(feature = "std", derive(Zeroize))]
-#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
-pub enum NetworkId {
-  Serai,
+pub enum ExternalNetworkId {
   Bitcoin,
   Ethereum,
   Monero,
 }
-impl NetworkId {
-  pub fn coins(&self) -> &'static [Coin] {
+
+impl Encode for ExternalNetworkId {
+  fn encode(&self) -> Vec<u8> {
     match self {
-      Self::Serai => &[Coin::Serai],
-      Self::Bitcoin => &[Coin::Bitcoin],
-      Self::Ethereum => &[Coin::Ether, Coin::Dai],
-      Self::Monero => &[Coin::Monero],
+      ExternalNetworkId::Bitcoin => vec![1],
+      ExternalNetworkId::Ethereum => vec![2],
+      ExternalNetworkId::Monero => vec![3],
     }
   }
 }
 
-pub const NETWORKS: [NetworkId; 4] =
-  [NetworkId::Serai, NetworkId::Bitcoin, NetworkId::Ethereum, NetworkId::Monero];
+impl Decode for ExternalNetworkId {
+  fn decode<I: scale::Input>(input: &mut I) -> Result<Self, scale::Error> {
+    let kind = input.read_byte()?;
+    match kind {
+      1 => Ok(Self::Bitcoin),
+      2 => Ok(Self::Ethereum),
+      3 => Ok(Self::Monero),
+      _ => Err(scale::Error::from("invalid format")),
+    }
+  }
+}
 
-pub const COINS: [Coin; 5] = [Coin::Serai, Coin::Bitcoin, Coin::Ether, Coin::Dai, Coin::Monero];
+impl MaxEncodedLen for ExternalNetworkId {
+  fn max_encoded_len() -> usize {
+    1
+  }
+}
 
-/// The type used to identify coins.
-#[derive(
-  Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Encode, Decode, MaxEncodedLen, TypeInfo,
-)]
+impl EncodeLike for ExternalNetworkId {}
+
+#[cfg(feature = "borsh")]
+impl BorshSerialize for ExternalNetworkId {
+  fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
+    writer.write_all(&self.encode())
+  }
+}
+
+#[cfg(feature = "borsh")]
+impl BorshDeserialize for ExternalNetworkId {
+  fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
+    let mut kind = [0; 1];
+    reader.read_exact(&mut kind)?;
+    ExternalNetworkId::decode(&mut kind.as_slice())
+      .map_err(|_| std::io::Error::other("invalid format"))
+  }
+}
+
+/// The type used to identify networks.
+#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, PartialOrd, Ord, TypeInfo)]
 #[cfg_attr(feature = "std", derive(Zeroize))]
-#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
-pub enum Coin {
+pub enum NetworkId {
   Serai,
+  External(ExternalNetworkId),
+}
+
+impl Encode for NetworkId {
+  fn encode(&self) -> Vec<u8> {
+    match self {
+      NetworkId::Serai => vec![0],
+      NetworkId::External(network) => network.encode(),
+    }
+  }
+}
+
+impl Decode for NetworkId {
+  fn decode<I: scale::Input>(input: &mut I) -> Result<Self, scale::Error> {
+    let kind = input.read_byte()?;
+    match kind {
+      0 => Ok(Self::Serai),
+      _ => Ok(ExternalNetworkId::decode(&mut [kind].as_slice())?.into()),
+    }
+  }
+}
+
+impl MaxEncodedLen for NetworkId {
+  fn max_encoded_len() -> usize {
+    1
+  }
+}
+
+impl EncodeLike for NetworkId {}
+
+#[cfg(feature = "borsh")]
+impl BorshSerialize for NetworkId {
+  fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
+    writer.write_all(&self.encode())
+  }
+}
+
+#[cfg(feature = "borsh")]
+impl BorshDeserialize for NetworkId {
+  fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
+    let mut kind = [0; 1];
+    reader.read_exact(&mut kind)?;
+    NetworkId::decode(&mut kind.as_slice()).map_err(|_| std::io::Error::other("invalid format"))
+  }
+}
+
+impl ExternalNetworkId {
+  pub fn coins(&self) -> Vec<ExternalCoin> {
+    match self {
+      Self::Bitcoin => vec![ExternalCoin::Bitcoin],
+      Self::Ethereum => vec![ExternalCoin::Ether, ExternalCoin::Dai],
+      Self::Monero => vec![ExternalCoin::Monero],
+    }
+  }
+}
+
+impl NetworkId {
+  pub fn coins(&self) -> Vec<Coin> {
+    match self {
+      Self::Serai => vec![Coin::Serai],
+      Self::External(network) => {
+        network.coins().into_iter().map(core::convert::Into::into).collect()
+      }
+    }
+  }
+}
+
+impl From<ExternalNetworkId> for NetworkId {
+  fn from(network: ExternalNetworkId) -> Self {
+    NetworkId::External(network)
+  }
+}
+
+impl TryFrom<NetworkId> for ExternalNetworkId {
+  type Error = ();
+
+  fn try_from(network: NetworkId) -> Result<Self, Self::Error> {
+    match network {
+      NetworkId::Serai => Err(())?,
+      NetworkId::External(n) => Ok(n),
+    }
+  }
+}
+
+pub const EXTERNAL_NETWORKS: [ExternalNetworkId; 3] =
+  [ExternalNetworkId::Bitcoin, ExternalNetworkId::Ethereum, ExternalNetworkId::Monero];
+
+pub const NETWORKS: [NetworkId; 4] = [
+  NetworkId::Serai,
+  NetworkId::External(ExternalNetworkId::Bitcoin),
+  NetworkId::External(ExternalNetworkId::Ethereum),
+  NetworkId::External(ExternalNetworkId::Monero),
+];
+
+pub const EXTERNAL_COINS: [ExternalCoin; 4] =
+  [ExternalCoin::Bitcoin, ExternalCoin::Ether, ExternalCoin::Dai, ExternalCoin::Monero];
+
+pub const COINS: [Coin; 5] = [
+  Coin::Serai,
+  Coin::External(ExternalCoin::Bitcoin),
+  Coin::External(ExternalCoin::Ether),
+  Coin::External(ExternalCoin::Dai),
+  Coin::External(ExternalCoin::Monero),
+];
+
+/// The type used to identify external coins.
+#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TypeInfo)]
+#[cfg_attr(feature = "std", derive(Zeroize))]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+pub enum ExternalCoin {
   Bitcoin,
   Ether,
   Dai,
   Monero,
 }
 
+impl Encode for ExternalCoin {
+  fn encode(&self) -> Vec<u8> {
+    match self {
+      ExternalCoin::Bitcoin => vec![4],
+      ExternalCoin::Ether => vec![5],
+      ExternalCoin::Dai => vec![6],
+      ExternalCoin::Monero => vec![7],
+    }
+  }
+}
+
+impl Decode for ExternalCoin {
+  fn decode<I: scale::Input>(input: &mut I) -> Result<Self, scale::Error> {
+    let kind = input.read_byte()?;
+    match kind {
+      4 => Ok(Self::Bitcoin),
+      5 => Ok(Self::Ether),
+      6 => Ok(Self::Dai),
+      7 => Ok(Self::Monero),
+      _ => Err(scale::Error::from("invalid format")),
+    }
+  }
+}
+impl MaxEncodedLen for ExternalCoin {
+  fn max_encoded_len() -> usize {
+    1
+  }
+}
+
+impl EncodeLike for ExternalCoin {}
+
+#[cfg(feature = "borsh")]
+impl BorshSerialize for ExternalCoin {
+  fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
+    writer.write_all(&self.encode())
+  }
+}
+
+#[cfg(feature = "borsh")]
+impl BorshDeserialize for ExternalCoin {
+  fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
+    let mut kind = [0; 1];
+    reader.read_exact(&mut kind)?;
+    ExternalCoin::decode(&mut kind.as_slice()).map_err(|_| std::io::Error::other("invalid format"))
+  }
+}
+
+/// The type used to identify coins.
+#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TypeInfo)]
+#[cfg_attr(feature = "std", derive(Zeroize))]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+pub enum Coin {
+  Serai,
+  External(ExternalCoin),
+}
+
+impl Encode for Coin {
+  fn encode(&self) -> Vec<u8> {
+    match self {
+      Coin::Serai => vec![0],
+      Coin::External(ec) => ec.encode(),
+    }
+  }
+}
+
+impl Decode for Coin {
+  fn decode<I: scale::Input>(input: &mut I) -> Result<Self, scale::Error> {
+    let kind = input.read_byte()?;
+    match kind {
+      0 => Ok(Self::Serai),
+      _ => Ok(ExternalCoin::decode(&mut [kind].as_slice())?.into()),
+    }
+  }
+}
+
+impl MaxEncodedLen for Coin {
+  fn max_encoded_len() -> usize {
+    1
+  }
+}
+
+impl EncodeLike for Coin {}
+
+#[cfg(feature = "borsh")]
+impl BorshSerialize for Coin {
+  fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
+    writer.write_all(&self.encode())
+  }
+}
+
+#[cfg(feature = "borsh")]
+impl BorshDeserialize for Coin {
+  fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
+    let mut kind = [0; 1];
+    reader.read_exact(&mut kind)?;
+    Coin::decode(&mut kind.as_slice()).map_err(|_| std::io::Error::other("invalid format"))
+  }
+}
+
+impl From<ExternalCoin> for Coin {
+  fn from(coin: ExternalCoin) -> Self {
+    Coin::External(coin)
+  }
+}
+
+impl TryFrom<Coin> for ExternalCoin {
+  type Error = ();
+
+  fn try_from(coin: Coin) -> Result<Self, Self::Error> {
+    match coin {
+      Coin::Serai => Err(())?,
+      Coin::External(c) => Ok(c),
+    }
+  }
+}
+
+impl ExternalCoin {
+  pub fn network(&self) -> ExternalNetworkId {
+    match self {
+      ExternalCoin::Bitcoin => ExternalNetworkId::Bitcoin,
+      ExternalCoin::Ether | ExternalCoin::Dai => ExternalNetworkId::Ethereum,
+      ExternalCoin::Monero => ExternalNetworkId::Monero,
+    }
+  }
+
+  pub fn name(&self) -> &'static str {
+    match self {
+      ExternalCoin::Bitcoin => "Bitcoin",
+      ExternalCoin::Ether => "Ether",
+      ExternalCoin::Dai => "Dai Stablecoin",
+      ExternalCoin::Monero => "Monero",
+    }
+  }
+
+  pub fn symbol(&self) -> &'static str {
+    match self {
+      ExternalCoin::Bitcoin => "BTC",
+      ExternalCoin::Ether => "ETH",
+      ExternalCoin::Dai => "DAI",
+      ExternalCoin::Monero => "XMR",
+    }
+  }
+
+  pub fn decimals(&self) -> u32 {
+    match self {
+      // Ether and DAI have 18 decimals, yet we only track 8 in order to fit them within u64s
+      ExternalCoin::Bitcoin | ExternalCoin::Ether | ExternalCoin::Dai => 8,
+      ExternalCoin::Monero => 12,
+    }
+  }
+}
+
 impl Coin {
   pub fn native() -> Coin {
     Coin::Serai
@@ -66,37 +354,28 @@ impl Coin {
   pub fn network(&self) -> NetworkId {
     match self {
       Coin::Serai => NetworkId::Serai,
-      Coin::Bitcoin => NetworkId::Bitcoin,
-      Coin::Ether | Coin::Dai => NetworkId::Ethereum,
-      Coin::Monero => NetworkId::Monero,
+      Coin::External(c) => c.network().into(),
     }
   }
 
   pub fn name(&self) -> &'static str {
     match self {
       Coin::Serai => "Serai",
-      Coin::Bitcoin => "Bitcoin",
-      Coin::Ether => "Ether",
-      Coin::Dai => "Dai Stablecoin",
-      Coin::Monero => "Monero",
+      Coin::External(c) => c.name(),
     }
   }
 
   pub fn symbol(&self) -> &'static str {
     match self {
       Coin::Serai => "SRI",
-      Coin::Bitcoin => "BTC",
-      Coin::Ether => "ETH",
-      Coin::Dai => "DAI",
-      Coin::Monero => "XMR",
+      Coin::External(c) => c.symbol(),
     }
   }
 
   pub fn decimals(&self) -> u32 {
     match self {
-      // Ether and DAI have 18 decimals, yet we only track 8 in order to fit them within u64s
-      Coin::Serai | Coin::Bitcoin | Coin::Ether | Coin::Dai => 8,
-      Coin::Monero => 12,
+      Coin::Serai => 8,
+      Coin::External(c) => c.decimals(),
     }
   }
 
diff --git a/substrate/runtime/src/lib.rs b/substrate/runtime/src/lib.rs
index e55270cb..15124271 100644
--- a/substrate/runtime/src/lib.rs
+++ b/substrate/runtime/src/lib.rs
@@ -53,8 +53,9 @@ use sp_runtime::{
 
 #[allow(unused_imports)]
 use primitives::{
-  NetworkId, PublicKey, AccountLookup, SubstrateAmount, Coin, NETWORKS, MEDIAN_PRICE_WINDOW_LENGTH,
-  HOURS, DAYS, MINUTES, TARGET_BLOCK_TIME, BLOCK_SIZE, FAST_EPOCH_DURATION,
+  NetworkId, PublicKey, AccountLookup, SubstrateAmount, Coin, EXTERNAL_NETWORKS,
+  MEDIAN_PRICE_WINDOW_LENGTH, HOURS, DAYS, MINUTES, TARGET_BLOCK_TIME, BLOCK_SIZE,
+  FAST_EPOCH_DURATION,
 };
 
 use support::{
@@ -570,10 +571,7 @@ sp_api::impl_runtime_apis! {
         .map(|(id, _)| id.into_inner().0)
         .collect::<hashbrown::HashSet<_>>();
       let mut all = serai_validators;
-      for network in NETWORKS {
-        if network == NetworkId::Serai {
-          continue;
-        }
+      for network in EXTERNAL_NETWORKS {
         // Returning the latest-decided, not latest and active, means the active set
         // may fail to peer find if there isn't sufficient overlap. If a large amount reboot,
         // forcing some validators to successfully peer find in order for the threshold to become
@@ -581,7 +579,7 @@ sp_api::impl_runtime_apis! {
         //
         // This is assumed not to matter in real life, yet an interesting note.
         let participants =
-          ValidatorSets::participants_for_latest_decided_set(network)
+          ValidatorSets::participants_for_latest_decided_set(NetworkId::from(network))
             .map_or(vec![], BoundedVec::into_inner);
         for (participant, _) in participants {
           all.insert(participant.0);
@@ -610,25 +608,25 @@ sp_api::impl_runtime_apis! {
 
   impl dex::DexApi<Block> for Runtime {
     fn quote_price_exact_tokens_for_tokens(
-      asset1: Coin,
-      asset2: Coin,
+      coin1: Coin,
+      coin2: Coin,
       amount: SubstrateAmount,
       include_fee: bool
     ) -> Option<SubstrateAmount> {
-      Dex::quote_price_exact_tokens_for_tokens(asset1, asset2, amount, include_fee)
+      Dex::quote_price_exact_tokens_for_tokens(coin1, coin2, amount, include_fee)
     }
 
     fn quote_price_tokens_for_exact_tokens(
-      asset1: Coin,
-      asset2: Coin,
+      coin1: Coin,
+      coin2: Coin,
       amount: SubstrateAmount,
       include_fee: bool
     ) -> Option<SubstrateAmount> {
-      Dex::quote_price_tokens_for_exact_tokens(asset1, asset2, amount, include_fee)
+      Dex::quote_price_tokens_for_exact_tokens(coin1, coin2, amount, include_fee)
     }
 
-    fn get_reserves(asset1: Coin, asset2: Coin) -> Option<(SubstrateAmount, SubstrateAmount)> {
-      Dex::get_reserves(&asset1, &asset2).ok()
+    fn get_reserves(coin1: Coin, coin2: Coin) -> Option<(SubstrateAmount, SubstrateAmount)> {
+      Dex::get_reserves(&coin1, &coin2).ok()
     }
   }
 }
diff --git a/substrate/signals/primitives/src/lib.rs b/substrate/signals/primitives/src/lib.rs
index cfd8aac5..c7f0565a 100644
--- a/substrate/signals/primitives/src/lib.rs
+++ b/substrate/signals/primitives/src/lib.rs
@@ -5,7 +5,7 @@
 use scale::{Encode, Decode, MaxEncodedLen};
 use scale_info::TypeInfo;
 
-use serai_primitives::NetworkId;
+use serai_primitives::ExternalNetworkId;
 
 #[derive(Clone, Copy, PartialEq, Eq, Debug, Encode, Decode, MaxEncodedLen, TypeInfo)]
 #[cfg_attr(feature = "std", derive(zeroize::Zeroize))]
@@ -13,5 +13,5 @@ use serai_primitives::NetworkId;
 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
 pub enum SignalId {
   Retirement([u8; 32]),
-  Halt(NetworkId),
+  Halt(ExternalNetworkId),
 }
diff --git a/substrate/validator-sets/pallet/src/lib.rs b/substrate/validator-sets/pallet/src/lib.rs
index c2ba80a9..383f94a7 100644
--- a/substrate/validator-sets/pallet/src/lib.rs
+++ b/substrate/validator-sets/pallet/src/lib.rs
@@ -316,11 +316,13 @@ pub mod pallet {
   /// The generated key pair for a given validator set instance.
   #[pallet::storage]
   #[pallet::getter(fn keys)]
-  pub type Keys<T: Config> = StorageMap<_, Twox64Concat, ValidatorSet, KeyPair, OptionQuery>;
+  pub type Keys<T: Config> =
+    StorageMap<_, Twox64Concat, ExternalValidatorSet, KeyPair, OptionQuery>;
 
   /// The key for validator sets which can (and still need to) publish their slash reports.
   #[pallet::storage]
-  pub type PendingSlashReport<T: Config> = StorageMap<_, Identity, NetworkId, Public, OptionQuery>;
+  pub type PendingSlashReport<T: Config> =
+    StorageMap<_, Identity, ExternalNetworkId, Public, OptionQuery>;
 
   /// Disabled validators.
   #[pallet::storage]
@@ -343,7 +345,7 @@ pub mod pallet {
       removed: T::AccountId,
     },
     KeyGen {
-      set: ValidatorSet,
+      set: ExternalValidatorSet,
       key_pair: KeyPair,
     },
     AcceptedHandover {
@@ -600,14 +602,16 @@ pub mod pallet {
       amount: Amount,
     ) -> Result<bool, DispatchError> {
       // Check it's safe to decrease this set's stake by this amount
-      let new_total_staked = Self::total_allocated_stake(network)
-        .unwrap()
-        .0
-        .checked_sub(amount.0)
-        .ok_or(Error::<T>::NotEnoughAllocated)?;
-      let required_stake = Self::required_stake_for_network(network);
-      if new_total_staked < required_stake {
-        Err(Error::<T>::DeallocationWouldRemoveEconomicSecurity)?;
+      if let NetworkId::External(n) = network {
+        let new_total_staked = Self::total_allocated_stake(NetworkId::from(n))
+          .unwrap()
+          .0
+          .checked_sub(amount.0)
+          .ok_or(Error::<T>::NotEnoughAllocated)?;
+        let required_stake = Self::required_stake_for_network(n);
+        if new_total_staked < required_stake {
+          Err(Error::<T>::DeallocationWouldRemoveEconomicSecurity)?;
+        }
       }
 
       let old_allocation =
@@ -690,20 +694,23 @@ pub mod pallet {
         return false;
       }
 
-      // Handover is automatically complete for Serai as it doesn't have a handover protocol
-      if network == NetworkId::Serai {
+      let NetworkId::External(n) = network else {
+        // Handover is automatically complete for Serai as it doesn't have a handover protocol
         return true;
-      }
+      };
 
       // The current session must have set keys for its handover to be completed
-      if !Keys::<T>::contains_key(ValidatorSet { network, session }) {
+      if !Keys::<T>::contains_key(ExternalValidatorSet { network: n, session }) {
         return false;
       }
 
       // This must be the first session (which has set keys) OR the prior session must have been
       // retired (signified by its keys no longer being present)
       (session.0 == 0) ||
-        (!Keys::<T>::contains_key(ValidatorSet { network, session: Session(session.0 - 1) }))
+        (!Keys::<T>::contains_key(ExternalValidatorSet {
+          network: n,
+          session: Session(session.0 - 1),
+        }))
     }
 
     fn new_session() {
@@ -733,19 +740,23 @@ pub mod pallet {
     // TODO: This is called retire_set, yet just starts retiring the set
     // Update the nomenclature within this function
     pub fn retire_set(set: ValidatorSet) {
-      // If the prior prior set didn't report, emit they're retired now
-      if PendingSlashReport::<T>::get(set.network).is_some() {
-        Self::deposit_event(Event::SetRetired {
-          set: ValidatorSet { network: set.network, session: Session(set.session.0 - 1) },
-        });
-      }
-
       // Serai doesn't set keys and network slashes are handled by BABE/GRANDPA
-      if set.network != NetworkId::Serai {
+      if let NetworkId::External(n) = set.network {
+        // If the prior prior set didn't report, emit they're retired now
+        if PendingSlashReport::<T>::get(n).is_some() {
+          Self::deposit_event(Event::SetRetired {
+            set: ValidatorSet { network: set.network, session: Session(set.session.0 - 1) },
+          });
+        }
+
         // This overwrites the prior value as the prior to-report set's stake presumably just
         // unlocked, making their report unenforceable
-        let keys = Keys::<T>::take(set).unwrap();
-        PendingSlashReport::<T>::set(set.network, Some(keys.0));
+        let keys =
+          Keys::<T>::take(ExternalValidatorSet { network: n, session: set.session }).unwrap();
+        PendingSlashReport::<T>::set(n, Some(keys.0));
+      } else {
+        // emit the event for serai network
+        Self::deposit_event(Event::SetRetired { set });
       }
 
       // We're retiring this set because the set after it accepted the handover
@@ -817,7 +828,7 @@ pub mod pallet {
     }
 
     /// Returns the required stake in terms SRI for a given `Balance`.
-    pub fn required_stake(balance: &Balance) -> SubstrateAmount {
+    pub fn required_stake(balance: &ExternalBalance) -> SubstrateAmount {
       use dex_pallet::HigherPrecisionBalance;
 
       // This is inclusive to an increase in accuracy
@@ -840,11 +851,11 @@ pub mod pallet {
     }
 
     /// Returns the current total required stake for a given `network`.
-    pub fn required_stake_for_network(network: NetworkId) -> SubstrateAmount {
+    pub fn required_stake_for_network(network: ExternalNetworkId) -> SubstrateAmount {
       let mut total_required = 0;
       for coin in network.coins() {
-        let supply = Coins::<T>::supply(coin);
-        total_required += Self::required_stake(&Balance { coin: *coin, amount: Amount(supply) });
+        let supply = Coins::<T>::supply(Coin::from(coin));
+        total_required += Self::required_stake(&ExternalBalance { coin, amount: Amount(supply) });
       }
       total_required
     }
@@ -940,7 +951,7 @@ pub mod pallet {
     #[pallet::weight(0)] // TODO
     pub fn set_keys(
       origin: OriginFor<T>,
-      network: NetworkId,
+      network: ExternalNetworkId,
       removed_participants: BoundedVec<Public, ConstU32<{ MAX_KEY_SHARES_PER_SET / 3 }>>,
       key_pair: KeyPair,
       signature: Signature,
@@ -951,8 +962,8 @@ pub mod pallet {
       // (called by pre_dispatch) checks it
       let _ = signature;
 
-      let session = Self::session(network).unwrap();
-      let set = ValidatorSet { network, session };
+      let session = Self::session(NetworkId::from(network)).unwrap();
+      let set = ExternalValidatorSet { network, session };
 
       Keys::<T>::set(set, Some(key_pair.clone()));
 
@@ -960,7 +971,7 @@ pub mod pallet {
       // We generally set TotalAllocatedStake when the prior set retires, and the new set is fully
       // active and liable. Since this is the first set, there is no prior set to wait to retire
       if session == Session(0) {
-        Self::set_total_allocated_stake(network);
+        Self::set_total_allocated_stake(NetworkId::from(network));
       }
 
       // This does not remove from TotalAllocatedStake or InSet in order to:
@@ -970,7 +981,7 @@ pub mod pallet {
       // 2) Not allow parties removed to immediately deallocate, per commentary on deallocation
       //    scheduling (https://github.com/serai-dex/serai/issues/394).
       for removed in removed_participants {
-        Self::deposit_event(Event::ParticipantRemoved { set, removed });
+        Self::deposit_event(Event::ParticipantRemoved { set: set.into(), removed });
       }
       Self::deposit_event(Event::KeyGen { set, key_pair });
 
@@ -981,7 +992,7 @@ pub mod pallet {
     #[pallet::weight(0)] // TODO
     pub fn report_slashes(
       origin: OriginFor<T>,
-      network: NetworkId,
+      network: ExternalNetworkId,
       slashes: BoundedVec<(Public, u32), ConstU32<{ MAX_KEY_SHARES_PER_SET / 3 }>>,
       signature: Signature,
     ) -> DispatchResult {
@@ -996,7 +1007,10 @@ pub mod pallet {
 
       // Emit set retireed
       Pallet::<T>::deposit_event(Event::SetRetired {
-        set: ValidatorSet { network, session: Session(Self::session(network).unwrap().0 - 1) },
+        set: ValidatorSet {
+          network: network.into(),
+          session: Session(Self::session(NetworkId::from(network)).unwrap().0 - 1),
+        },
       });
 
       Ok(())
@@ -1062,17 +1076,12 @@ pub mod pallet {
         Call::set_keys { network, ref removed_participants, ref key_pair, ref signature } => {
           let network = *network;
 
-          // Don't allow the Serai set to set_keys, as they have no reason to do so
-          if network == NetworkId::Serai {
-            Err(InvalidTransaction::Custom(0))?;
-          }
-
           // Confirm this set has a session
-          let Some(current_session) = Self::session(network) else {
+          let Some(current_session) = Self::session(NetworkId::from(network)) else {
             Err(InvalidTransaction::Custom(1))?
           };
 
-          let set = ValidatorSet { network, session: current_session };
+          let set = ExternalValidatorSet { network, session: current_session };
 
           // Confirm it has yet to set keys
           if Keys::<T>::get(set).is_some() {
@@ -1081,7 +1090,7 @@ pub mod pallet {
 
           // This is a needed precondition as this uses storage variables for the latest decided
           // session on this assumption
-          assert_eq!(Pallet::<T>::latest_decided_session(network), Some(current_session));
+          assert_eq!(Pallet::<T>::latest_decided_session(network.into()), Some(current_session));
 
           // This does not slash the removed participants as that'll be done at the end of the
           // set's lifetime
@@ -1094,15 +1103,15 @@ pub mod pallet {
             removed.insert(participant.0);
           }
 
-          let participants =
-            Participants::<T>::get(network).expect("session existed without participants");
+          let participants = Participants::<T>::get(NetworkId::from(network))
+            .expect("session existed without participants");
 
           let mut all_key_shares = 0;
           let mut signers = vec![];
           let mut signing_key_shares = 0;
           for participant in participants {
             let participant = participant.0;
-            let shares = InSet::<T>::get(network, participant)
+            let shares = InSet::<T>::get(NetworkId::from(network), participant)
               .expect("participant from Participants wasn't InSet");
             all_key_shares += shares;
 
@@ -1124,7 +1133,7 @@ pub mod pallet {
           // Verify the signature with the MuSig key of the signers
           // We theoretically don't need set_keys_message to bind to removed_participants, as the
           // key we're signing with effectively already does so, yet there's no reason not to
-          if !musig_key(set, &signers)
+          if !musig_key(set.into(), &signers)
             .verify(&set_keys_message(&set, removed_participants, key_pair), signature)
           {
             Err(InvalidTransaction::BadProof)?;
@@ -1138,17 +1147,16 @@ pub mod pallet {
         }
         Call::report_slashes { network, ref slashes, ref signature } => {
           let network = *network;
-          // Don't allow Serai to publish a slash report as BABE/GRANDPA handles slashes directly
-          if network == NetworkId::Serai {
-            Err(InvalidTransaction::Custom(0))?;
-          }
           let Some(key) = PendingSlashReport::<T>::take(network) else {
             // Assumed already published
             Err(InvalidTransaction::Stale)?
           };
+
           // There must have been a previous session is PendingSlashReport is populated
-          let set =
-            ValidatorSet { network, session: Session(Self::session(network).unwrap().0 - 1) };
+          let set = ExternalValidatorSet {
+            network,
+            session: Session(Self::session(NetworkId::from(network)).unwrap().0 - 1),
+          };
           if !key.verify(&report_slashes_message(&set, slashes), signature) {
             Err(InvalidTransaction::BadProof)?;
           }
@@ -1173,13 +1181,14 @@ pub mod pallet {
   }
 
   impl<T: Config> AllowMint for Pallet<T> {
-    fn is_allowed(balance: &Balance) -> bool {
+    fn is_allowed(balance: &ExternalBalance) -> bool {
       // get the required stake
       let current_required = Self::required_stake_for_network(balance.coin.network());
       let new_required = current_required + Self::required_stake(balance);
 
       // get the total stake for the network & compare.
-      let staked = Self::total_allocated_stake(balance.coin.network()).unwrap_or(Amount(0));
+      let staked =
+        Self::total_allocated_stake(NetworkId::from(balance.coin.network())).unwrap_or(Amount(0));
       staked.0 >= new_required
     }
   }
diff --git a/substrate/validator-sets/primitives/src/lib.rs b/substrate/validator-sets/primitives/src/lib.rs
index c900b0a9..9944d485 100644
--- a/substrate/validator-sets/primitives/src/lib.rs
+++ b/substrate/validator-sets/primitives/src/lib.rs
@@ -17,7 +17,7 @@ use sp_core::{ConstU32, sr25519::Public, bounded::BoundedVec};
 #[cfg(not(feature = "std"))]
 use sp_std::vec::Vec;
 
-use serai_primitives::NetworkId;
+use serai_primitives::{ExternalNetworkId, NetworkId};
 
 /// The maximum amount of key shares per set.
 pub const MAX_KEY_SHARES_PER_SET: u32 = 150;
@@ -43,6 +43,33 @@ pub struct ValidatorSet {
   pub network: NetworkId,
 }
 
+/// The type used to identify a specific validator set during a specific session.
+#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Encode, Decode, TypeInfo, MaxEncodedLen)]
+#[cfg_attr(feature = "std", derive(Zeroize))]
+#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+pub struct ExternalValidatorSet {
+  pub session: Session,
+  pub network: ExternalNetworkId,
+}
+
+impl From<ExternalValidatorSet> for ValidatorSet {
+  fn from(set: ExternalValidatorSet) -> Self {
+    ValidatorSet { session: set.session, network: set.network.into() }
+  }
+}
+
+impl TryFrom<ValidatorSet> for ExternalValidatorSet {
+  type Error = ();
+
+  fn try_from(set: ValidatorSet) -> Result<Self, Self::Error> {
+    match set.network {
+      NetworkId::Serai => Err(())?,
+      NetworkId::External(network) => Ok(ExternalValidatorSet { session: set.session, network }),
+    }
+  }
+}
+
 type MaxKeyLen = ConstU32<MAX_KEY_LEN>;
 /// The type representing a Key from an external network.
 pub type ExternalKey = BoundedVec<u8, MaxKeyLen>;
@@ -100,14 +127,14 @@ pub fn musig_key(set: ValidatorSet, set_keys: &[Public]) -> Public {
 
 /// The message for the set_keys signature.
 pub fn set_keys_message(
-  set: &ValidatorSet,
+  set: &ExternalValidatorSet,
   removed_participants: &[Public],
   key_pair: &KeyPair,
 ) -> Vec<u8> {
   (b"ValidatorSets-set_keys", set, removed_participants, key_pair).encode()
 }
 
-pub fn report_slashes_message(set: &ValidatorSet, slashes: &[(Public, u32)]) -> Vec<u8> {
+pub fn report_slashes_message(set: &ExternalValidatorSet, slashes: &[(Public, u32)]) -> Vec<u8> {
   (b"ValidatorSets-report_slashes", set, slashes).encode()
 }
 
diff --git a/tests/coordinator/src/lib.rs b/tests/coordinator/src/lib.rs
index c364128c..a1efcf41 100644
--- a/tests/coordinator/src/lib.rs
+++ b/tests/coordinator/src/lib.rs
@@ -19,7 +19,7 @@ use ciphersuite::{
   Ciphersuite, Ristretto,
 };
 
-use serai_client::primitives::NetworkId;
+use serai_client::primitives::ExternalNetworkId;
 
 use messages::{
   coordinator::{SubstrateSignableId, SubstrateSignId, cosign_block_msg},
@@ -108,7 +108,7 @@ pub struct Handles {
 }
 
 pub struct Processor {
-  network: NetworkId,
+  network: ExternalNetworkId,
 
   serai_rpc: String,
   #[allow(unused)]
@@ -132,7 +132,7 @@ impl Drop for Processor {
 impl Processor {
   pub async fn new(
     raw_i: u8,
-    network: NetworkId,
+    network: ExternalNetworkId,
     ops: &DockerOperations,
     handles: Handles,
     processor_key: <Ristretto as Ciphersuite>::F,
diff --git a/tests/coordinator/src/tests/batch.rs b/tests/coordinator/src/tests/batch.rs
index bfe4e36e..4fb5e858 100644
--- a/tests/coordinator/src/tests/batch.rs
+++ b/tests/coordinator/src/tests/batch.rs
@@ -16,7 +16,7 @@ use dkg::Participant;
 use scale::Encode;
 
 use serai_client::{
-  primitives::{NetworkId, BlockHash, Signature},
+  primitives::{BlockHash, Signature},
   in_instructions::{
     primitives::{Batch, SignedBatch, batch_message},
     InInstructionsEvent,
@@ -274,7 +274,7 @@ async fn batch_test() {
         Session(0),
         &substrate_key,
         Batch {
-          network: NetworkId::Bitcoin,
+          network: ExternalNetworkId::Bitcoin,
           id: 0,
           block: BlockHash([0x22; 32]),
           instructions: vec![],
diff --git a/tests/coordinator/src/tests/key_gen.rs b/tests/coordinator/src/tests/key_gen.rs
index 8ea14cbc..66aa9f5b 100644
--- a/tests/coordinator/src/tests/key_gen.rs
+++ b/tests/coordinator/src/tests/key_gen.rs
@@ -13,9 +13,8 @@ use ciphersuite::{
 use dkg::ThresholdParams;
 
 use serai_client::{
-  primitives::NetworkId,
+  validator_sets::primitives::{ExternalValidatorSet, KeyPair, Session},
   Public,
-  validator_sets::primitives::{Session, ValidatorSet, KeyPair},
 };
 use messages::{key_gen::KeyGenId, CoordinatorMessage};
 
@@ -28,7 +27,7 @@ pub async fn key_gen<C: Ciphersuite>(
   let coordinators = processors.len();
   let mut participant_is = vec![];
 
-  let set = ValidatorSet { session, network: NetworkId::Bitcoin };
+  let set = ExternalValidatorSet { session, network: ExternalNetworkId::Bitcoin };
   let id = KeyGenId { session: set.session, attempt: 0 };
 
   for (i, processor) in processors.iter_mut().enumerate() {
diff --git a/tests/coordinator/src/tests/mod.rs b/tests/coordinator/src/tests/mod.rs
index ef67b0ac..a488d01a 100644
--- a/tests/coordinator/src/tests/mod.rs
+++ b/tests/coordinator/src/tests/mod.rs
@@ -104,7 +104,7 @@ pub(crate) async fn new_test(test_body: impl TestBody, fast_epoch: bool) {
       handles.insert(name, handle);
     }
 
-    let processor_key = message_queue_keys[&NetworkId::Bitcoin];
+    let processor_key = message_queue_keys[&ExternalNetworkId::Bitcoin];
 
     coordinators.push((
       Handles {
@@ -198,7 +198,7 @@ pub(crate) async fn new_test(test_body: impl TestBody, fast_epoch: bool) {
         processors.push(
           Processor::new(
             i.try_into().unwrap(),
-            NetworkId::Bitcoin,
+            ExternalNetworkId::Bitcoin,
             &outer_ops,
             handles.clone(),
             *key,
diff --git a/tests/coordinator/src/tests/rotation.rs b/tests/coordinator/src/tests/rotation.rs
index 1ebeec16..c3659a9e 100644
--- a/tests/coordinator/src/tests/rotation.rs
+++ b/tests/coordinator/src/tests/rotation.rs
@@ -132,13 +132,13 @@ async fn set_rotation_test() {
 
       // excluded participant
       let pair5 = insecure_pair_from_name("Eve");
-      let network = NetworkId::Bitcoin;
+      let network = ExternalNetworkId::Bitcoin;
       let amount = Amount(1_000_000 * 10_u64.pow(8));
       let serai = processors[0].serai().await;
 
       // allocate now for the last participant so that it is guaranteed to be included into session
       // 1 set. This doesn't affect the genesis set at all since that is a predetermined set.
-      allocate_stake(&serai, network, amount, &pair5, 0).await;
+      allocate_stake(&serai, network.into(), amount, &pair5, 0).await;
 
       // genesis keygen
       let _ = key_gen::<Secp256k1>(&mut processors, Session(0)).await;
@@ -151,12 +151,14 @@ async fn set_rotation_test() {
       }
 
       // wait until next session to see the effect on coordinator
-      wait_till_session_1(&serai, network).await;
+      wait_till_session_1(&serai, network.into()).await;
 
       // Ensure the new validator was included in the new set
       assert_eq!(
-        most_recent_new_set_event(&serai, network).await,
-        ValidatorSetsEvent::NewSet { set: ValidatorSet { session: Session(1), network } },
+        most_recent_new_set_event(&serai, network.into()).await,
+        ValidatorSetsEvent::NewSet {
+          set: ValidatorSet { session: Session(1), network: network.into() }
+        },
       );
 
       // add the last participant & do the keygen
diff --git a/tests/coordinator/src/tests/sign.rs b/tests/coordinator/src/tests/sign.rs
index db8a7203..f6fdb6e6 100644
--- a/tests/coordinator/src/tests/sign.rs
+++ b/tests/coordinator/src/tests/sign.rs
@@ -10,18 +10,17 @@ use ciphersuite::Secp256k1;
 use dkg::Participant;
 
 use serai_client::{
-  PairTrait,
-  primitives::{
-    NetworkId, Coin, Amount, Balance, BlockHash, SeraiAddress, ExternalAddress,
-    insecure_pair_from_name,
-  },
   coins::{
     primitives::{OutInstruction, OutInstructionWithBalance},
     CoinsEvent,
   },
-  in_instructions::primitives::{InInstruction, InInstructionWithBalance, Batch},
+  in_instructions::primitives::{Batch, InInstruction, InInstructionWithBalance},
+  primitives::{
+    insecure_pair_from_name, Amount, Balance, BlockHash, Coin, ExternalAddress, ExternalBalance,
+    ExternalCoin, SeraiAddress,
+  },
   validator_sets::primitives::Session,
-  SeraiCoins,
+  PairTrait, SeraiCoins,
 };
 use messages::{coordinator::PlanMeta, sign::SignId, SubstrateContext, CoordinatorMessage};
 
@@ -202,7 +201,7 @@ async fn sign_test() {
 
       #[allow(clippy::inconsistent_digit_grouping)]
       let amount = Amount(1_000_000_00);
-      let balance = Balance { coin: Coin::Bitcoin, amount };
+      let balance = ExternalBalance { coin: ExternalCoin::Bitcoin, amount };
 
       let coin_block = BlockHash([0x33; 32]);
       let block_included_in = batch(
@@ -211,7 +210,7 @@ async fn sign_test() {
         Session(0),
         &substrate_key,
         Batch {
-          network: NetworkId::Bitcoin,
+          network: balance.coin.network(),
           id: 0,
           block: coin_block,
           instructions: vec![InInstructionWithBalance {
@@ -236,10 +235,13 @@ async fn sign_test() {
         // Verify the mint occurred as expected
         assert_eq!(
           serai.mint_events().await.unwrap(),
-          vec![CoinsEvent::Mint { to: serai_addr, balance }]
+          vec![CoinsEvent::Mint { to: serai_addr, balance: balance.into() }]
+        );
+        assert_eq!(serai.coin_supply(ExternalCoin::Bitcoin.into()).await.unwrap(), amount);
+        assert_eq!(
+          serai.coin_balance(ExternalCoin::Bitcoin.into(), serai_addr).await.unwrap(),
+          amount
         );
-        assert_eq!(serai.coin_supply(Coin::Bitcoin).await.unwrap(), amount);
-        assert_eq!(serai.coin_balance(Coin::Bitcoin, serai_addr).await.unwrap(), amount);
       }
 
       // Trigger a burn
@@ -296,8 +298,11 @@ async fn sign_test() {
       let last_serai_block_hash = last_serai_block.hash();
       let serai = serai.as_of(last_serai_block_hash);
       let serai = serai.coins();
-      assert_eq!(serai.coin_supply(Coin::Bitcoin).await.unwrap(), Amount(0));
-      assert_eq!(serai.coin_balance(Coin::Bitcoin, serai_addr).await.unwrap(), Amount(0));
+      assert_eq!(serai.coin_supply(ExternalCoin::Bitcoin.into()).await.unwrap(), Amount(0));
+      assert_eq!(
+        serai.coin_balance(ExternalCoin::Bitcoin.into(), serai_addr).await.unwrap(),
+        Amount(0)
+      );
 
       let mut plan_id = [0; 32];
       OsRng.fill_bytes(&mut plan_id);
diff --git a/tests/full-stack/src/tests/mint_and_burn.rs b/tests/full-stack/src/tests/mint_and_burn.rs
index ce19808f..26ffb442 100644
--- a/tests/full-stack/src/tests/mint_and_burn.rs
+++ b/tests/full-stack/src/tests/mint_and_burn.rs
@@ -9,12 +9,13 @@ use rand_core::{RngCore, OsRng};
 use scale::Encode;
 
 use serai_client::{
-  primitives::{
-    NetworkId, Coin, Amount, Balance, SeraiAddress, ExternalAddress, insecure_pair_from_name,
-  },
-  validator_sets::primitives::{Session, ValidatorSet},
-  in_instructions::primitives::Shorthand,
   coins::primitives::{OutInstruction, OutInstructionWithBalance},
+  in_instructions::primitives::Shorthand,
+  primitives::{
+    insecure_pair_from_name, Amount, Balance, Coin, ExternalAddress, ExternalBalance, ExternalCoin,
+    SeraiAddress,
+  },
+  validator_sets::primitives::{ExternalValidatorSet, Session},
   PairTrait, SeraiCoins,
 };
 
@@ -199,7 +200,7 @@ async fn mint_and_burn_test() {
               .await
               .unwrap()
               .validator_sets()
-              .keys(ValidatorSet { network, session: Session(0) })
+              .keys(ExternalValidatorSet { network, session: Session(0) })
               .await
               .unwrap()
             {
@@ -224,7 +225,10 @@ async fn mint_and_burn_test() {
         }
       };
 
-      (key_pair(false, NetworkId::Bitcoin).await, key_pair(true, NetworkId::Monero).await)
+      (
+        key_pair(false, ExternalNetworkId::Bitcoin).await,
+        key_pair(true, ExternalNetworkId::Monero).await,
+      )
     };
 
     // Because the initial keys only become active when the network's time matches the Serai
@@ -439,8 +443,8 @@ async fn mint_and_burn_test() {
           );
         }
       };
-      wait_for_batch(false, NetworkId::Bitcoin).await;
-      wait_for_batch(true, NetworkId::Monero).await;
+      wait_for_batch(false, ExternalNetworkId::Bitcoin).await;
+      wait_for_batch(true, ExternalNetworkId::Monero).await;
     }
 
     // TODO: Verify the mints
@@ -492,7 +496,7 @@ async fn mint_and_burn_test() {
         let serai_pair = &serai_pair;
         move |nonce, coin, amount, address| async move {
           let out_instruction = OutInstructionWithBalance {
-            balance: Balance { coin, amount: Amount(amount) },
+            balance: ExternalBalance { coin, amount: Amount(amount) },
             instruction: OutInstruction { address, data: None },
           };
 
@@ -511,7 +515,7 @@ async fn mint_and_burn_test() {
       #[allow(clippy::inconsistent_digit_grouping)]
       burn(
         0,
-        Coin::Bitcoin,
+        ExternalCoin::Bitcoin,
         1_000_000_00,
         ExternalAddress::new(
           serai_client::networks::bitcoin::Address::new(bitcoin_addr.clone()).unwrap().into(),
@@ -522,7 +526,7 @@ async fn mint_and_burn_test() {
 
       burn(
         1,
-        Coin::Monero,
+        ExternalCoin::Monero,
         1_000_000_000_000,
         ExternalAddress::new(
           serai_client::networks::monero::Address::new(monero_addr).unwrap().into(),
diff --git a/tests/full-stack/src/tests/mod.rs b/tests/full-stack/src/tests/mod.rs
index 7d92070e..b82ff177 100644
--- a/tests/full-stack/src/tests/mod.rs
+++ b/tests/full-stack/src/tests/mod.rs
@@ -3,7 +3,7 @@ use std::{sync::OnceLock, collections::HashMap};
 
 use tokio::sync::Mutex;
 
-use serai_client::primitives::NetworkId;
+use serai_client::primitives::ExternalNetworkId;
 
 use dockertest::{
   LogAction, LogPolicy, LogSource, LogOptions, StartPolicy, TestBodySpecification,
@@ -56,15 +56,21 @@ pub(crate) async fn new_test(test_body: impl TestBody) {
 
     let (coord_key, message_queue_keys, message_queue_composition) = message_queue_instance();
 
-    let (bitcoin_composition, bitcoin_port) = network_instance(NetworkId::Bitcoin);
-    let mut bitcoin_processor_composition =
-      processor_instance(NetworkId::Bitcoin, bitcoin_port, message_queue_keys[&NetworkId::Bitcoin]);
+    let (bitcoin_composition, bitcoin_port) = network_instance(ExternalNetworkId::Bitcoin);
+    let mut bitcoin_processor_composition = processor_instance(
+      ExternalNetworkId::Bitcoin,
+      bitcoin_port,
+      message_queue_keys[&ExternalNetworkId::Bitcoin],
+    );
     assert_eq!(bitcoin_processor_composition.len(), 1);
     let bitcoin_processor_composition = bitcoin_processor_composition.swap_remove(0);
 
-    let (monero_composition, monero_port) = network_instance(NetworkId::Monero);
-    let mut monero_processor_composition =
-      processor_instance(NetworkId::Monero, monero_port, message_queue_keys[&NetworkId::Monero]);
+    let (monero_composition, monero_port) = network_instance(ExternalNetworkId::Monero);
+    let mut monero_processor_composition = processor_instance(
+      ExternalNetworkId::Monero,
+      monero_port,
+      message_queue_keys[&ExternalNetworkId::Monero],
+    );
     assert_eq!(monero_processor_composition.len(), 1);
     let monero_processor_composition = monero_processor_composition.swap_remove(0);
 
diff --git a/tests/message-queue/src/lib.rs b/tests/message-queue/src/lib.rs
index e2bfd3a7..d59273d9 100644
--- a/tests/message-queue/src/lib.rs
+++ b/tests/message-queue/src/lib.rs
@@ -7,23 +7,25 @@ use ciphersuite::{
   Ciphersuite, Ristretto,
 };
 
-use serai_primitives::NetworkId;
+use serai_primitives::{ExternalNetworkId, EXTERNAL_NETWORKS};
 
 use dockertest::{
   PullPolicy, Image, LogAction, LogPolicy, LogSource, LogOptions, TestBodySpecification,
 };
 
 pub type MessageQueuePrivateKey = <Ristretto as Ciphersuite>::F;
-pub fn instance(
-) -> (MessageQueuePrivateKey, HashMap<NetworkId, MessageQueuePrivateKey>, TestBodySpecification) {
+pub fn instance() -> (
+  MessageQueuePrivateKey,
+  HashMap<ExternalNetworkId, MessageQueuePrivateKey>,
+  TestBodySpecification,
+) {
   serai_docker_tests::build("message-queue".to_string());
 
   let coord_key = <Ristretto as Ciphersuite>::F::random(&mut OsRng);
-  let priv_keys = HashMap::from([
-    (NetworkId::Bitcoin, <Ristretto as Ciphersuite>::F::random(&mut OsRng)),
-    (NetworkId::Ethereum, <Ristretto as Ciphersuite>::F::random(&mut OsRng)),
-    (NetworkId::Monero, <Ristretto as Ciphersuite>::F::random(&mut OsRng)),
-  ]);
+  let priv_keys = EXTERNAL_NETWORKS
+    .into_iter()
+    .map(|n| (n, <Ristretto as Ciphersuite>::F::random(&mut OsRng)))
+    .collect::<HashMap<_, _>>();
 
   let composition = TestBodySpecification::with_image(
     Image::with_repository("serai-dev-message-queue").pull_policy(PullPolicy::Never),
@@ -38,15 +40,15 @@ pub fn instance(
       ("COORDINATOR_KEY".to_string(), hex::encode((Ristretto::generator() * coord_key).to_bytes())),
       (
         "BITCOIN_KEY".to_string(),
-        hex::encode((Ristretto::generator() * priv_keys[&NetworkId::Bitcoin]).to_bytes()),
+        hex::encode((Ristretto::generator() * priv_keys[&ExternalNetworkId::Bitcoin]).to_bytes()),
       ),
       (
         "ETHEREUM_KEY".to_string(),
-        hex::encode((Ristretto::generator() * priv_keys[&NetworkId::Ethereum]).to_bytes()),
+        hex::encode((Ristretto::generator() * priv_keys[&ExternalNetworkId::Ethereum]).to_bytes()),
       ),
       (
         "MONERO_KEY".to_string(),
-        hex::encode((Ristretto::generator() * priv_keys[&NetworkId::Monero]).to_bytes()),
+        hex::encode((Ristretto::generator() * priv_keys[&ExternalNetworkId::Monero]).to_bytes()),
       ),
       ("DB_PATH".to_string(), "./message-queue-db".to_string()),
       ("RUST_LOG".to_string(), "serai_message_queue=trace,".to_string()),
@@ -85,7 +87,7 @@ fn basic_functionality() {
         .queue(
           Metadata {
             from: Service::Coordinator,
-            to: Service::Processor(NetworkId::Bitcoin),
+            to: Service::Processor(ExternalNetworkId::Bitcoin),
             intent: b"intent".to_vec(),
           },
           b"Hello, World!".to_vec(),
@@ -98,7 +100,7 @@ fn basic_functionality() {
           .queue(
             Metadata {
               from: Service::Coordinator,
-              to: Service::Processor(NetworkId::Bitcoin),
+              to: Service::Processor(ExternalNetworkId::Bitcoin),
               intent: b"intent 2".to_vec(),
             },
             b"Hello, World, again!".to_vec(),
@@ -108,9 +110,9 @@ fn basic_functionality() {
 
       // Successfully get it
       let bitcoin = MessageQueue::new(
-        Service::Processor(NetworkId::Bitcoin),
+        Service::Processor(ExternalNetworkId::Bitcoin),
         rpc.clone(),
-        Zeroizing::new(priv_keys[&NetworkId::Bitcoin]),
+        Zeroizing::new(priv_keys[&ExternalNetworkId::Bitcoin]),
       );
       let msg = bitcoin.next(Service::Coordinator).await;
       assert_eq!(msg.from, Service::Coordinator);
@@ -140,7 +142,7 @@ fn basic_functionality() {
         .queue(
           Metadata {
             from: Service::Coordinator,
-            to: Service::Processor(NetworkId::Monero),
+            to: Service::Processor(ExternalNetworkId::Monero),
             // Intents should be per-from-to, making this valid
             intent: b"intent".to_vec(),
           },
@@ -149,9 +151,9 @@ fn basic_functionality() {
         .await;
 
       let monero = MessageQueue::new(
-        Service::Processor(NetworkId::Monero),
+        Service::Processor(ExternalNetworkId::Monero),
         rpc,
-        Zeroizing::new(priv_keys[&NetworkId::Monero]),
+        Zeroizing::new(priv_keys[&ExternalNetworkId::Monero]),
       );
       assert_eq!(monero.next(Service::Coordinator).await.id, 0);
       monero.ack(Service::Coordinator, 0).await;
diff --git a/tests/no-std/Cargo.toml b/tests/no-std/Cargo.toml
index 5023a80e..16ca5d24 100644
--- a/tests/no-std/Cargo.toml
+++ b/tests/no-std/Cargo.toml
@@ -35,4 +35,4 @@ dkg = { path = "../../crypto/dkg", default-features = false }
 
 bitcoin-serai = { path = "../../networks/bitcoin", default-features = false, features = ["hazmat"] }
 
-monero-wallet-util = { path = "../../networks/monero/wallet/util", default-features = false, features = ["compile-time-generators"] }
+monero-wallet = { path = "../../networks/monero/wallet", default-features = false, features = ["compile-time-generators"] }
diff --git a/tests/no-std/src/lib.rs b/tests/no-std/src/lib.rs
index fa9da268..f1824050 100644
--- a/tests/no-std/src/lib.rs
+++ b/tests/no-std/src/lib.rs
@@ -20,4 +20,4 @@ pub use frost_schnorrkel;
 
 pub use bitcoin_serai;
 
-pub use monero_wallet_util;
+pub use monero_wallet;
diff --git a/tests/processor/src/lib.rs b/tests/processor/src/lib.rs
index ec607a55..571916fd 100644
--- a/tests/processor/src/lib.rs
+++ b/tests/processor/src/lib.rs
@@ -7,7 +7,7 @@ use rand_core::{RngCore, OsRng};
 
 use ciphersuite::{group::ff::PrimeField, Ciphersuite, Ristretto};
 
-use serai_client::primitives::NetworkId;
+use serai_client::primitives::ExternalNetworkId;
 use messages::{ProcessorMessage, CoordinatorMessage};
 use serai_message_queue::{Service, Metadata, client::MessageQueue};
 
@@ -25,7 +25,7 @@ mod tests;
 static UNIQUE_ID: OnceLock<Mutex<u16>> = OnceLock::new();
 
 pub fn processor_instance(
-  network: NetworkId,
+  network: ExternalNetworkId,
   port: u32,
   message_queue_key: <Ristretto as Ciphersuite>::F,
 ) -> Vec<TestBodySpecification> {
@@ -33,10 +33,9 @@ pub fn processor_instance(
   OsRng.fill_bytes(&mut entropy);
 
   let network_str = match network {
-    NetworkId::Serai => panic!("starting a processor for Serai"),
-    NetworkId::Bitcoin => "bitcoin",
-    NetworkId::Ethereum => "ethereum",
-    NetworkId::Monero => "monero",
+    ExternalNetworkId::Bitcoin => "bitcoin",
+    ExternalNetworkId::Ethereum => "ethereum",
+    ExternalNetworkId::Monero => "monero",
   };
   let image = format!("{network_str}-processor");
   serai_docker_tests::build(image.clone());
@@ -57,7 +56,7 @@ pub fn processor_instance(
     .into(),
   )];
 
-  if network == NetworkId::Ethereum {
+  if network == ExternalNetworkId::Ethereum {
     serai_docker_tests::build("ethereum-relayer".to_string());
     res.push(
       TestBodySpecification::with_image(
@@ -80,7 +79,7 @@ pub fn processor_instance(
 
 pub type Handles = (String, String, String, String);
 pub fn processor_stack(
-  network: NetworkId,
+  network: ExternalNetworkId,
   network_hostname_override: Option<String>,
 ) -> (Handles, <Ristretto as Ciphersuite>::F, Vec<TestBodySpecification>) {
   let (network_composition, network_rpc_port) = network_instance(network);
@@ -106,10 +105,9 @@ pub fn processor_stack(
   for (name, composition) in [
     Some((
       match network {
-        NetworkId::Serai => unreachable!(),
-        NetworkId::Bitcoin => "bitcoin",
-        NetworkId::Ethereum => "ethereum",
-        NetworkId::Monero => "monero",
+        ExternalNetworkId::Bitcoin => "bitcoin",
+        ExternalNetworkId::Ethereum => "ethereum",
+        ExternalNetworkId::Monero => "monero",
       },
       network_composition,
     )),
@@ -161,7 +159,7 @@ pub fn processor_stack(
 }
 
 pub struct Coordinator {
-  network: NetworkId,
+  network: ExternalNetworkId,
 
   network_handle: String,
   #[allow(unused)]
@@ -177,7 +175,7 @@ pub struct Coordinator {
 
 impl Coordinator {
   pub fn new(
-    network: NetworkId,
+    network: ExternalNetworkId,
     ops: &DockerOperations,
     handles: Handles,
     coord_key: <Ristretto as Ciphersuite>::F,
@@ -213,7 +211,7 @@ impl Coordinator {
         let mut iters = 0;
         while iters < 60 {
           match network {
-            NetworkId::Bitcoin => {
+            ExternalNetworkId::Bitcoin => {
               use bitcoin_serai::rpc::Rpc;
 
               // Bitcoin's Rpc::new will test the connection
@@ -221,7 +219,7 @@ impl Coordinator {
                 break;
               }
             }
-            NetworkId::Ethereum => {
+            ExternalNetworkId::Ethereum => {
               use std::sync::Arc;
               use ethereum_serai::{
                 alloy::{
@@ -270,7 +268,7 @@ impl Coordinator {
                 break;
               }
             }
-            NetworkId::Monero => {
+            ExternalNetworkId::Monero => {
               use monero_simple_request_rpc::SimpleRequestRpc;
               use monero_wallet::rpc::Rpc;
 
@@ -284,7 +282,6 @@ impl Coordinator {
                 break;
               }
             }
-            NetworkId::Serai => panic!("processor is booting with external network of Serai"),
           }
 
           println!("external network RPC has yet to boot, waiting 1 sec, attempt {iters}");
@@ -337,7 +334,7 @@ impl Coordinator {
   pub async fn add_block(&self, ops: &DockerOperations) -> ([u8; 32], Vec<u8>) {
     let rpc_url = network_rpc(self.network, ops, &self.network_handle);
     match self.network {
-      NetworkId::Bitcoin => {
+      ExternalNetworkId::Bitcoin => {
         use bitcoin_serai::{
           bitcoin::{consensus::Encodable, network::Network, Script, Address},
           rpc::Rpc,
@@ -360,7 +357,7 @@ impl Coordinator {
         block.consensus_encode(&mut block_buf).unwrap();
         (hash, block_buf)
       }
-      NetworkId::Ethereum => {
+      ExternalNetworkId::Ethereum => {
         use ethereum_serai::alloy::{
           simple_request_transport::SimpleRequest,
           rpc_types::{BlockTransactionsKind, BlockNumberOrTag},
@@ -397,7 +394,7 @@ impl Coordinator {
           .into_bytes();
         (hash.into(), state)
       }
-      NetworkId::Monero => {
+      ExternalNetworkId::Monero => {
         use curve25519_dalek::{constants::ED25519_BASEPOINT_POINT, scalar::Scalar};
         use monero_simple_request_rpc::SimpleRequestRpc;
         use monero_wallet::{rpc::Rpc, address::Network, ViewPair};
@@ -415,14 +412,13 @@ impl Coordinator {
         let hash = rpc.get_block_hash(rpc.get_height().await.unwrap() - 1).await.unwrap();
         (hash, rpc.get_block(hash).await.unwrap().serialize())
       }
-      NetworkId::Serai => panic!("processor tests adding block to Serai"),
     }
   }
 
   pub async fn sync(&self, ops: &DockerOperations, others: &[Coordinator]) {
     let rpc_url = network_rpc(self.network, ops, &self.network_handle);
     match self.network {
-      NetworkId::Bitcoin => {
+      ExternalNetworkId::Bitcoin => {
         use bitcoin_serai::{bitcoin::consensus::Encodable, rpc::Rpc};
 
         let rpc = Rpc::new(rpc_url).await.expect("couldn't connect to the Bitcoin RPC");
@@ -452,7 +448,7 @@ impl Coordinator {
           }
         }
       }
-      NetworkId::Ethereum => {
+      ExternalNetworkId::Ethereum => {
         use ethereum_serai::alloy::{
           simple_request_transport::SimpleRequest,
           rpc_types::{BlockTransactionsKind, BlockNumberOrTag},
@@ -503,7 +499,7 @@ impl Coordinator {
           //assert_eq!(expected_number, new_number);
         }
       }
-      NetworkId::Monero => {
+      ExternalNetworkId::Monero => {
         use monero_simple_request_rpc::SimpleRequestRpc;
         use monero_wallet::rpc::Rpc;
 
@@ -534,14 +530,13 @@ impl Coordinator {
           }
         }
       }
-      NetworkId::Serai => panic!("processors tests syncing Serai nodes"),
     }
   }
 
   pub async fn publish_transaction(&self, ops: &DockerOperations, tx: &[u8]) {
     let rpc_url = network_rpc(self.network, ops, &self.network_handle);
     match self.network {
-      NetworkId::Bitcoin => {
+      ExternalNetworkId::Bitcoin => {
         use bitcoin_serai::{
           bitcoin::{consensus::Decodable, Transaction},
           rpc::Rpc,
@@ -551,7 +546,7 @@ impl Coordinator {
           Rpc::new(rpc_url).await.expect("couldn't connect to the coordinator's Bitcoin RPC");
         rpc.send_raw_transaction(&Transaction::consensus_decode(&mut &*tx).unwrap()).await.unwrap();
       }
-      NetworkId::Ethereum => {
+      ExternalNetworkId::Ethereum => {
         use ethereum_serai::alloy::{
           simple_request_transport::SimpleRequest,
           rpc_client::ClientBuilder,
@@ -564,7 +559,7 @@ impl Coordinator {
         );
         let _ = provider.send_raw_transaction(tx).await.unwrap();
       }
-      NetworkId::Monero => {
+      ExternalNetworkId::Monero => {
         use monero_simple_request_rpc::SimpleRequestRpc;
         use monero_wallet::{transaction::Transaction, rpc::Rpc};
 
@@ -573,15 +568,15 @@ impl Coordinator {
           .expect("couldn't connect to the coordinator's Monero RPC");
         rpc.publish_transaction(&Transaction::read(&mut &*tx).unwrap()).await.unwrap();
       }
-      NetworkId::Serai => panic!("processor tests broadcasting block to Serai"),
     }
   }
 
   pub async fn publish_eventuality_completion(&self, ops: &DockerOperations, tx: &[u8]) {
     match self.network {
-      NetworkId::Bitcoin | NetworkId::Monero => self.publish_transaction(ops, tx).await,
-      NetworkId::Ethereum => (),
-      NetworkId::Serai => panic!("processor tests broadcasting block to Serai"),
+      ExternalNetworkId::Bitcoin | ExternalNetworkId::Monero => {
+        self.publish_transaction(ops, tx).await
+      }
+      ExternalNetworkId::Ethereum => (),
     }
   }
 
@@ -592,7 +587,7 @@ impl Coordinator {
   ) -> Option<Vec<u8>> {
     let rpc_url = network_rpc(self.network, ops, &self.network_handle);
     match self.network {
-      NetworkId::Bitcoin => {
+      ExternalNetworkId::Bitcoin => {
         use bitcoin_serai::{bitcoin::consensus::Encodable, rpc::Rpc};
 
         let rpc =
@@ -614,7 +609,7 @@ impl Coordinator {
           None
         }
       }
-      NetworkId::Ethereum => {
+      ExternalNetworkId::Ethereum => {
         /*
         let provider = RootProvider::<_, Ethereum>::new(
           ClientBuilder::default().transport(SimpleRequest::new(rpc_url.clone()), true),
@@ -664,7 +659,7 @@ impl Coordinator {
 
         None
       }
-      NetworkId::Monero => {
+      ExternalNetworkId::Monero => {
         use monero_simple_request_rpc::SimpleRequestRpc;
         use monero_wallet::rpc::Rpc;
 
@@ -679,7 +674,6 @@ impl Coordinator {
           None
         }
       }
-      NetworkId::Serai => panic!("processor tests broadcasting block to Serai"),
     }
   }
 }
diff --git a/tests/processor/src/networks.rs b/tests/processor/src/networks.rs
index 32563c9f..f2cc4e86 100644
--- a/tests/processor/src/networks.rs
+++ b/tests/processor/src/networks.rs
@@ -4,9 +4,9 @@ use rand_core::{RngCore, OsRng};
 use scale::Encode;
 
 use serai_client::{
-  primitives::{Amount, NetworkId, Coin, Balance, ExternalAddress},
-  validator_sets::primitives::ExternalKey,
   in_instructions::primitives::{InInstruction, RefundableInInstruction, Shorthand},
+  primitives::{Amount, ExternalAddress, ExternalBalance, ExternalCoin, ExternalNetworkId},
+  validator_sets::primitives::ExternalKey,
 };
 
 use dockertest::{PullPolicy, Image, StartPolicy, TestBodySpecification, DockerOperations};
@@ -52,37 +52,32 @@ pub fn monero_instance() -> (TestBodySpecification, u32) {
   (composition, XMR_PORT)
 }
 
-pub fn network_instance(network: NetworkId) -> (TestBodySpecification, u32) {
+pub fn network_instance(network: ExternalNetworkId) -> (TestBodySpecification, u32) {
   match network {
-    NetworkId::Bitcoin => bitcoin_instance(),
-    NetworkId::Ethereum => ethereum_instance(),
-    NetworkId::Monero => monero_instance(),
-    NetworkId::Serai => {
-      panic!("Serai is not a valid network to spawn an instance of for a processor")
-    }
+    ExternalNetworkId::Bitcoin => bitcoin_instance(),
+    ExternalNetworkId::Ethereum => ethereum_instance(),
+    ExternalNetworkId::Monero => monero_instance(),
   }
 }
 
-pub fn network_rpc(network: NetworkId, ops: &DockerOperations, handle: &str) -> String {
+pub fn network_rpc(network: ExternalNetworkId, ops: &DockerOperations, handle: &str) -> String {
   let (ip, port) = ops
     .handle(handle)
     .host_port(match network {
-      NetworkId::Bitcoin => BTC_PORT,
-      NetworkId::Ethereum => ETH_PORT,
-      NetworkId::Monero => XMR_PORT,
-      NetworkId::Serai => panic!("getting port for external network yet it was Serai"),
+      ExternalNetworkId::Bitcoin => BTC_PORT,
+      ExternalNetworkId::Ethereum => ETH_PORT,
+      ExternalNetworkId::Monero => XMR_PORT,
     })
     .unwrap();
   format!("http://{RPC_USER}:{RPC_PASS}@{ip}:{port}")
 }
 
-pub fn confirmations(network: NetworkId) -> usize {
+pub fn confirmations(network: ExternalNetworkId) -> usize {
   use processor::networks::*;
   match network {
-    NetworkId::Bitcoin => Bitcoin::CONFIRMATIONS,
-    NetworkId::Ethereum => Ethereum::<serai_db::MemDb>::CONFIRMATIONS,
-    NetworkId::Monero => Monero::CONFIRMATIONS,
-    NetworkId::Serai => panic!("getting confirmations required for Serai"),
+    ExternalNetworkId::Bitcoin => Bitcoin::CONFIRMATIONS,
+    ExternalNetworkId::Ethereum => Ethereum::<serai_db::MemDb>::CONFIRMATIONS,
+    ExternalNetworkId::Monero => Monero::CONFIRMATIONS,
   }
 }
 
@@ -108,11 +103,11 @@ pub enum Wallet {
 
 // TODO: Merge these functions with the processor's tests, which offers very similar functionality
 impl Wallet {
-  pub async fn new(network: NetworkId, ops: &DockerOperations, handle: String) -> Wallet {
+  pub async fn new(network: ExternalNetworkId, ops: &DockerOperations, handle: String) -> Wallet {
     let rpc_url = network_rpc(network, ops, &handle);
 
     match network {
-      NetworkId::Bitcoin => {
+      ExternalNetworkId::Bitcoin => {
         use bitcoin_serai::{
           bitcoin::{
             secp256k1::{SECP256K1, SecretKey},
@@ -153,7 +148,7 @@ impl Wallet {
         Wallet::Bitcoin { private_key, public_key, input_tx: funds }
       }
 
-      NetworkId::Ethereum => {
+      ExternalNetworkId::Ethereum => {
         use ciphersuite::{group::ff::Field, Secp256k1};
         use ethereum_serai::alloy::{
           primitives::{U256, Address},
@@ -185,7 +180,7 @@ impl Wallet {
         Wallet::Ethereum { rpc_url: rpc_url.clone(), key, nonce: 0 }
       }
 
-      NetworkId::Monero => {
+      ExternalNetworkId::Monero => {
         use curve25519_dalek::{constants::ED25519_BASEPOINT_POINT, scalar::Scalar};
         use monero_simple_request_rpc::SimpleRequestRpc;
         use monero_wallet::{rpc::Rpc, address::Network, ViewPair};
@@ -210,7 +205,6 @@ impl Wallet {
           last_tx: (height, block.miner_transaction.hash()),
         }
       }
-      NetworkId::Serai => panic!("creating a wallet for for Serai"),
     }
   }
 
@@ -219,7 +213,7 @@ impl Wallet {
     ops: &DockerOperations,
     to: &ExternalKey,
     instruction: Option<InInstruction>,
-  ) -> (Vec<u8>, Balance) {
+  ) -> (Vec<u8>, ExternalBalance) {
     match self {
       Wallet::Bitcoin { private_key, public_key, ref mut input_tx } => {
         use bitcoin_serai::bitcoin::{
@@ -298,7 +292,7 @@ impl Wallet {
         let mut buf = vec![];
         tx.consensus_encode(&mut buf).unwrap();
         *input_tx = tx;
-        (buf, Balance { coin: Coin::Bitcoin, amount: Amount(AMOUNT) })
+        (buf, ExternalBalance { coin: ExternalCoin::Bitcoin, amount: Amount(AMOUNT) })
       }
 
       Wallet::Ethereum { rpc_url, key, ref mut nonce } => {
@@ -400,7 +394,10 @@ impl Wallet {
         // We drop the bottom 10 decimals
         (
           bytes,
-          Balance { coin: Coin::Ether, amount: Amount(u64::try_from(eight_decimals).unwrap()) },
+          ExternalBalance {
+            coin: ExternalCoin::Ether,
+            amount: Amount(u64::try_from(eight_decimals).unwrap()),
+          },
         )
       }
 
@@ -417,7 +414,7 @@ impl Wallet {
         };
         use processor::{additional_key, networks::Monero};
 
-        let rpc_url = network_rpc(NetworkId::Monero, ops, handle);
+        let rpc_url = network_rpc(ExternalNetworkId::Monero, ops, handle);
         let rpc = SimpleRequestRpc::new(rpc_url).await.expect("couldn't connect to the Monero RPC");
 
         // Prepare inputs
@@ -485,7 +482,7 @@ impl Wallet {
         last_tx.0 = current_height;
         last_tx.1 = tx.hash();
 
-        (tx.serialize(), Balance { coin: Coin::Monero, amount: Amount(AMOUNT) })
+        (tx.serialize(), ExternalBalance { coin: ExternalCoin::Monero, amount: Amount(AMOUNT) })
       }
     }
   }
diff --git a/tests/processor/src/tests/batch.rs b/tests/processor/src/tests/batch.rs
index 6170270a..4a34500e 100644
--- a/tests/processor/src/tests/batch.rs
+++ b/tests/processor/src/tests/batch.rs
@@ -8,11 +8,12 @@ use dkg::{Participant, tests::clone_without};
 use messages::{coordinator::*, SubstrateContext};
 
 use serai_client::{
-  primitives::{
-    BlockHash, Amount, Balance, crypto::RuntimePublic, PublicKey, SeraiAddress, NetworkId,
-  },
   in_instructions::primitives::{
-    InInstruction, InInstructionWithBalance, Batch, SignedBatch, batch_message,
+    batch_message, Batch, InInstruction, InInstructionWithBalance, SignedBatch,
+  },
+  primitives::{
+    crypto::RuntimePublic, Amount, BlockHash, ExternalBalance, ExternalNetworkId, PublicKey,
+    SeraiAddress, EXTERNAL_NETWORKS,
   },
   validator_sets::primitives::Session,
 };
@@ -189,7 +190,7 @@ pub(crate) async fn substrate_block(
 
 #[test]
 fn batch_test() {
-  for network in [NetworkId::Bitcoin, NetworkId::Ethereum, NetworkId::Monero] {
+  for network in EXTERNAL_NETWORKS {
     let (coordinators, test) = new_test(network);
 
     test.run(|ops| async move {
@@ -255,15 +256,14 @@ fn batch_test() {
           instructions: if let Some(instruction) = &instruction {
             vec![InInstructionWithBalance {
               instruction: instruction.clone(),
-              balance: Balance {
+              balance: ExternalBalance {
                 coin: balance_sent.coin,
                 amount: Amount(
                   balance_sent.amount.0 -
                     (2 * match network {
-                      NetworkId::Bitcoin => Bitcoin::COST_TO_AGGREGATE,
-                      NetworkId::Ethereum => Ethereum::<MemDb>::COST_TO_AGGREGATE,
-                      NetworkId::Monero => Monero::COST_TO_AGGREGATE,
-                      NetworkId::Serai => panic!("minted for Serai?"),
+                      ExternalNetworkId::Bitcoin => Bitcoin::COST_TO_AGGREGATE,
+                      ExternalNetworkId::Ethereum => Ethereum::<MemDb>::COST_TO_AGGREGATE,
+                      ExternalNetworkId::Monero => Monero::COST_TO_AGGREGATE,
                     }),
                 ),
               },
@@ -322,7 +322,9 @@ fn batch_test() {
             },
           )
           .await;
-          if instruction.is_some() || (instruction.is_none() && (network == NetworkId::Monero)) {
+          if instruction.is_some() ||
+            (instruction.is_none() && (network == ExternalNetworkId::Monero))
+          {
             assert!(plans.is_empty());
           } else {
             // If no instruction was used, and the processor csn presume the origin, it'd have
@@ -335,7 +337,7 @@ fn batch_test() {
       // With the latter InInstruction not existing, we should've triggered a refund if the origin
       // was detectable
       // Check this is trying to sign a Plan
-      if network != NetworkId::Monero {
+      if network != ExternalNetworkId::Monero {
         let mut refund_id = None;
         for coordinator in &mut coordinators {
           match coordinator.recv_message().await {
diff --git a/tests/processor/src/tests/key_gen.rs b/tests/processor/src/tests/key_gen.rs
index 7dea0bfd..ec616b51 100644
--- a/tests/processor/src/tests/key_gen.rs
+++ b/tests/processor/src/tests/key_gen.rs
@@ -3,8 +3,8 @@ use std::{collections::HashMap, time::SystemTime};
 use dkg::{Participant, ThresholdParams, tests::clone_without};
 
 use serai_client::{
-  primitives::{NetworkId, BlockHash, PublicKey},
-  validator_sets::primitives::{Session, KeyPair},
+  primitives::{BlockHash, PublicKey, EXTERNAL_NETWORKS},
+  validator_sets::primitives::{KeyPair, Session},
 };
 
 use messages::{SubstrateContext, key_gen::KeyGenId, CoordinatorMessage, ProcessorMessage};
@@ -144,7 +144,7 @@ pub(crate) async fn key_gen(coordinators: &mut [Coordinator]) -> KeyPair {
 
 #[test]
 fn key_gen_test() {
-  for network in [NetworkId::Bitcoin, NetworkId::Ethereum, NetworkId::Monero] {
+  for network in EXTERNAL_NETWORKS {
     let (coordinators, test) = new_test(network);
 
     test.run(|ops| async move {
diff --git a/tests/processor/src/tests/mod.rs b/tests/processor/src/tests/mod.rs
index afda97d5..0347a3dd 100644
--- a/tests/processor/src/tests/mod.rs
+++ b/tests/processor/src/tests/mod.rs
@@ -1,7 +1,5 @@
 use ciphersuite::{Ciphersuite, Ristretto};
 
-use serai_client::primitives::NetworkId;
-
 use dockertest::DockerTest;
 
 use crate::*;
@@ -17,7 +15,9 @@ mod send;
 pub(crate) const COORDINATORS: usize = 4;
 pub(crate) const THRESHOLD: usize = ((COORDINATORS * 2) / 3) + 1;
 
-fn new_test(network: NetworkId) -> (Vec<(Handles, <Ristretto as Ciphersuite>::F)>, DockerTest) {
+fn new_test(
+  network: ExternalNetworkId,
+) -> (Vec<(Handles, <Ristretto as Ciphersuite>::F)>, DockerTest) {
   let mut coordinators = vec![];
   let mut test = DockerTest::new().with_network(dockertest::Network::Isolated);
   let mut eth_handle = None;
@@ -25,7 +25,7 @@ fn new_test(network: NetworkId) -> (Vec<(Handles, <Ristretto as Ciphersuite>::F)
     let (handles, coord_key, compositions) = processor_stack(network, eth_handle.clone());
     // TODO: Remove this once https://github.com/foundry-rs/foundry/issues/7955
     // This has all processors share an Ethereum node until we can sync controlled nodes
-    if network == NetworkId::Ethereum {
+    if network == ExternalNetworkId::Ethereum {
       eth_handle = eth_handle.or_else(|| Some(handles.0.clone()));
     }
     coordinators.push((handles, coord_key));
diff --git a/tests/processor/src/tests/send.rs b/tests/processor/src/tests/send.rs
index 62e80c09..e50edc3f 100644
--- a/tests/processor/src/tests/send.rs
+++ b/tests/processor/src/tests/send.rs
@@ -8,9 +8,9 @@ use dkg::{Participant, tests::clone_without};
 use messages::{sign::SignId, SubstrateContext};
 
 use serai_client::{
-  primitives::{BlockHash, NetworkId, Amount, Balance, SeraiAddress},
   coins::primitives::{OutInstruction, OutInstructionWithBalance},
-  in_instructions::primitives::{InInstruction, InInstructionWithBalance, Batch},
+  in_instructions::primitives::{Batch, InInstruction, InInstructionWithBalance},
+  primitives::{Amount, BlockHash, ExternalBalance, SeraiAddress, EXTERNAL_NETWORKS},
   validator_sets::primitives::Session,
 };
 
@@ -147,7 +147,7 @@ pub(crate) async fn sign_tx(
 
 #[test]
 fn send_test() {
-  for network in [NetworkId::Bitcoin, NetworkId::Ethereum, NetworkId::Monero] {
+  for network in EXTERNAL_NETWORKS {
     let (coordinators, test) = new_test(network);
 
     test.run(|ops| async move {
@@ -202,10 +202,9 @@ fn send_test() {
       let amount_minted = Amount(
         balance_sent.amount.0 -
           (2 * match network {
-            NetworkId::Bitcoin => Bitcoin::COST_TO_AGGREGATE,
-            NetworkId::Ethereum => Ethereum::<MemDb>::COST_TO_AGGREGATE,
-            NetworkId::Monero => Monero::COST_TO_AGGREGATE,
-            NetworkId::Serai => panic!("minted for Serai?"),
+            ExternalNetworkId::Bitcoin => Bitcoin::COST_TO_AGGREGATE,
+            ExternalNetworkId::Ethereum => Ethereum::<MemDb>::COST_TO_AGGREGATE,
+            ExternalNetworkId::Monero => Monero::COST_TO_AGGREGATE,
           }),
       );
 
@@ -215,7 +214,7 @@ fn send_test() {
         block: BlockHash(block_with_tx.unwrap()),
         instructions: vec![InInstructionWithBalance {
           instruction,
-          balance: Balance { coin: balance_sent.coin, amount: amount_minted },
+          balance: ExternalBalance { coin: balance_sent.coin, amount: amount_minted },
         }],
       };
 
@@ -245,7 +244,7 @@ fn send_test() {
             block: substrate_block_num,
             burns: vec![OutInstructionWithBalance {
               instruction: OutInstruction { address: wallet.address(), data: None },
-              balance: Balance { coin: balance_sent.coin, amount: amount_minted },
+              balance: ExternalBalance { coin: balance_sent.coin, amount: amount_minted },
             }],
             batches: vec![batch.batch.id],
           },