public interface ChaincodeStub
| Modifier and Type | Method and Description |
|---|---|
CompositeKey |
createCompositeKey(java.lang.String objectType,
java.lang.String... attributes)
Given a set of attributes, this method combines these attributes to
return a composite key.
|
void |
delPrivateData(java.lang.String collection,
java.lang.String key)
Records the specified
key to be deleted in the private writeset of
the transaction. |
void |
delState(java.lang.String key)
Records the specified
key to be deleted in the writeset of
the transaction proposal. |
java.util.List<byte[]> |
getArgs()
Returns the arguments corresponding to the call to
Chaincode.init(ChaincodeStub) or
Chaincode.invoke(ChaincodeStub) , each argument represented as byte array. |
byte[] |
getBinding()
Returns the transaction binding.
|
java.lang.String |
getChannelId()
Returns the channel id for the current proposal.
|
byte[] |
getCreator()
Returns the identity of the agent (or user) submitting the transaction.
|
org.hyperledger.fabric.protos.peer.ChaincodeEventPackage.ChaincodeEvent |
getEvent()
Returns the CHAINCODE type event that will be posted to interested
clients when the chaincode's result is committed to the ledger.
|
java.lang.String |
getFunction()
A convenience method that returns the first argument of the chaincode
invocation for use as a function name.
|
QueryResultsIterator<KeyModification> |
getHistoryForKey(java.lang.String key)
Returns a history of key values across time.
|
java.util.List<java.lang.String> |
getParameters()
A convenience method that returns all except the first argument of the
chaincode invocation for use as the parameters to the function returned
by #
getFunction() . |
byte[] |
getPrivateData(java.lang.String collection,
java.lang.String key)
Returns the value of the specified
key from the specified
collection . |
QueryResultsIterator<KeyValue> |
getPrivateDataByPartialCompositeKey(java.lang.String collection,
CompositeKey compositeKey)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey in a given private collection. |
QueryResultsIterator<KeyValue> |
getPrivateDataByPartialCompositeKey(java.lang.String collection,
java.lang.String compositeKey)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey in a given private collection. |
QueryResultsIterator<KeyValue> |
getPrivateDataByPartialCompositeKey(java.lang.String collection,
java.lang.String objectType,
java.lang.String... attributes)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey in a given private collection. |
QueryResultsIterator<KeyValue> |
getPrivateDataByRange(java.lang.String collection,
java.lang.String startKey,
java.lang.String endKey)
Returns all existing keys, and their values, that are lexicographically
between
startkey (inclusive) and the endKey
(exclusive) in a given private collection. |
byte[] |
getPrivateDataHash(java.lang.String collection,
java.lang.String key) |
QueryResultsIterator<KeyValue> |
getPrivateDataQueryResult(java.lang.String collection,
java.lang.String query)
Perform a rich query against a given private collection.
|
default java.lang.String |
getPrivateDataUTF8(java.lang.String collection,
java.lang.String key)
Returns the byte array value specified by the key and decoded as a UTF-8
encoded string, from the sidedb collection.
|
byte[] |
getPrivateDataValidationParameter(java.lang.String collection,
java.lang.String key)
Retrieves the key-level endorsement
policy for the private data specified by
key . |
QueryResultsIterator<KeyValue> |
getQueryResult(java.lang.String query)
Performs a "rich" query against a state database.
|
QueryResultsIteratorWithMetadata<KeyValue> |
getQueryResultWithPagination(java.lang.String query,
int pageSize,
java.lang.String bookmark)
Performs a "rich" query against a state database.
|
org.hyperledger.fabric.protos.peer.ProposalPackage.SignedProposal |
getSignedProposal()
Returns the signed transaction proposal currently being executed.
|
byte[] |
getState(java.lang.String key)
Returns the value of the specified
key from the ledger. |
QueryResultsIterator<KeyValue> |
getStateByPartialCompositeKey(CompositeKey compositeKey)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey . |
QueryResultsIterator<KeyValue> |
getStateByPartialCompositeKey(java.lang.String compositeKey)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey . |
QueryResultsIterator<KeyValue> |
getStateByPartialCompositeKey(java.lang.String objectType,
java.lang.String... attributes)
Returns all existing keys, and their values, that are prefixed by the
specified partial
CompositeKey . |
QueryResultsIteratorWithMetadata<KeyValue> |
getStateByPartialCompositeKeyWithPagination(CompositeKey compositeKey,
int pageSize,
java.lang.String bookmark)
Queries the state in the ledger based on a given partial composite key.
|
QueryResultsIterator<KeyValue> |
getStateByRange(java.lang.String startKey,
java.lang.String endKey)
Returns all existing keys, and their values, that are lexicographically
between
startkey (inclusive) and the endKey
(exclusive). |
QueryResultsIteratorWithMetadata<KeyValue> |
getStateByRangeWithPagination(java.lang.String startKey,
java.lang.String endKey,
int pageSize,
java.lang.String bookmark)
Returns a range iterator over a set of keys in the ledger.
|
byte[] |
getStateValidationParameter(java.lang.String key)
retrieves the key-level endorsement policy for
key . |
java.util.List<java.lang.String> |
getStringArgs()
Returns the arguments corresponding to the call to
Chaincode.init(ChaincodeStub) or
Chaincode.invoke(ChaincodeStub) , cast to UTF-8 string. |
default java.lang.String |
getStringState(java.lang.String key)
Returns the byte array value specified by the key and decoded as a UTF-8
encoded string, from the ledger.
|
java.util.Map<java.lang.String,byte[]> |
getTransient()
Returns the transient map associated with the current transaction.
|
java.lang.String |
getTxId()
Returns the transaction id for the current chaincode invocation request.
|
java.time.Instant |
getTxTimestamp()
Returns the timestamp when the transaction was created.
|
default Chaincode.Response |
invokeChaincode(java.lang.String chaincodeName,
java.util.List<byte[]> args)
Invoke another chaincode using the same transaction context.
|
Chaincode.Response |
invokeChaincode(java.lang.String chaincodeName,
java.util.List<byte[]> args,
java.lang.String channel)
Locally calls the specified chaincode
invoke() using the
same transaction context. |
default Chaincode.Response |
invokeChaincodeWithStringArgs(java.lang.String chaincodeName,
java.util.List<java.lang.String> args)
Invoke another chaincode using the same transaction context.
|
default Chaincode.Response |
invokeChaincodeWithStringArgs(java.lang.String chaincodeName,
java.util.List<java.lang.String> args,
java.lang.String channel)
Invoke another chaincode using the same transaction context.
|
default Chaincode.Response |
invokeChaincodeWithStringArgs(java.lang.String chaincodeName,
java.lang.String... args)
Invoke another chaincode using the same transaction context.
|
void |
putPrivateData(java.lang.String collection,
java.lang.String key,
byte[] value)
Puts the specified
key and value into the transaction's
private writeset. |
default void |
putPrivateData(java.lang.String collection,
java.lang.String key,
java.lang.String value)
Writes the specified value and key into the sidedb collection
value converted to byte array.
|
void |
putState(java.lang.String key,
byte[] value)
Puts the specified
key and value into the transaction's
writeset as a data-write proposal. |
default void |
putStringState(java.lang.String key,
java.lang.String value)
Writes the specified value and key into the ledger
|
void |
setEvent(java.lang.String name,
byte[] payload)
Defines the CHAINCODE type event that will be posted to interested
clients when the chaincode's result is committed to the ledger.
|
void |
setPrivateDataValidationParameter(java.lang.String collection,
java.lang.String key,
byte[] value)
Sets the key-level endorsement policy for the private data specified by
key . |
void |
setStateValidationParameter(java.lang.String key,
byte[] value)
Sets the key-level endorsement policy for
key . |
CompositeKey |
splitCompositeKey(java.lang.String compositeKey)
Parses a composite key
CompositeKey from a string. |
java.util.List<byte[]> getArgs()
Chaincode.init(ChaincodeStub)
or
Chaincode.invoke(ChaincodeStub)
, each argument represented as byte array.java.util.List<java.lang.String> getStringArgs()
Chaincode.init(ChaincodeStub)
or
Chaincode.invoke(ChaincodeStub)
, cast to UTF-8 string.java.lang.String getFunction()
The bytes of the first argument are decoded as a UTF-8 string.
java.util.List<java.lang.String> getParameters()
getFunction()
.
The bytes of the arguments are decoded as a UTF-8 strings and returned as a list of string parameters.
java.lang.String getTxId()
The transaction id uniquely identifies the transaction within the scope of the channel.
java.lang.String getChannelId()
This would be the 'channel_id' of the transaction proposal except where the chaincode is calling another on a different channel.
Chaincode.Response invokeChaincode(java.lang.String chaincodeName, java.util.List<byte[]> args, java.lang.String channel)
invoke()
using the
same transaction context.
chaincode calling chaincode doesn't create a new transaction message.
If the called chaincode is on the same channel, it simply adds the called chaincode read set and write set to the calling transaction.
If the called chaincode is on a different channel,
only the Response is returned to the calling chaincode; any putState
calls
from the called chaincode will not have any effect on the ledger; that is,
the called chaincode on a different channel will not have its read set
and write set applied to the transaction. Only the calling chaincode's
read set and write set will be applied to the transaction. Effectively
the called chaincode on a different channel is a `Query`, which does not
participate in state validation checks in subsequent commit phase.
If `channel` is empty, the caller's channel is assumed.
Invoke another chaincode using the same transaction context.
chaincodeName
- Name of chaincode to be invoked.args
- Arguments to pass on to the called chaincode.channel
- If not specified, the caller's channel is assumed.Chaincode.Response
object returned by called chaincodebyte[] getState(java.lang.String key)
key
from the ledger.
Note that getState doesn't read data from the writeset, which has not been committed to the ledger. In other words, GetState doesn't consider data modified by PutState that has not been committed.
key
- name of the valuebyte[] getStateValidationParameter(java.lang.String key)
key
.
Note that this will introduce a read dependency on key
in the transaction's readset.key
- key to get key level endorsementvoid putState(java.lang.String key, byte[] value)
key
and value
into the transaction's
writeset as a data-write proposal.
putState doesn't effect the ledger until the transaction is validated and successfully committed. Simple keys must not be an empty string and must not start with 0x00 character, in order to avoid range query collisions with composite keys
key
- name of the valuevalue
- the value to write to the ledgervoid setStateValidationParameter(java.lang.String key, byte[] value)
key
.key
- key to set key level endorsementvalue
- endorsement policyvoid delState(java.lang.String key)
key
to be deleted in the writeset of
the transaction proposal.
The key
and its value will be deleted from
the ledger when the transaction is validated and successfully committed.
key
- name of the value to be deletedQueryResultsIterator<KeyValue> getStateByRange(java.lang.String startKey, java.lang.String endKey)
startkey
(inclusive) and the endKey
(exclusive).
The keys are returned by the iterator in lexical order. Note that startKey and endKey can be empty string, which implies unbounded range query on start or end.
Call close() on the returned AutoCloseable.close()
object when done.
startKey
- key as the start of the key range (inclusive)endKey
- key as the end of the key range (exclusive)Iterable
of KeyValue
QueryResultsIteratorWithMetadata<KeyValue> getStateByRangeWithPagination(java.lang.String startKey, java.lang.String endKey, int pageSize, java.lang.String bookmark)
startKey
(inclusive) and endKey
(exclusive).
When an empty string is passed as a value to the bookmark
argument, the returned iterator can be used to fetch
the first pageSize
keys between the startKey
and endKey
.
When the bookmark
is a non-empty string, the iterator can be used to fetch first pageSize
keys between the
bookmark
and endKey
.
Note that only the bookmark present in a prior page of query results (ChaincodeShim.QueryResponseMetadata
)
can be used as a value to the bookmark argument. Otherwise, an empty string must be passed as bookmark.
The keys are returned by the iterator in lexical order. Note that startKey
and endKey
can be empty string, which implies
unbounded range query on start or end.
This call is only supported in a read only transaction.startKey
- endKey
- pageSize
- bookmark
- QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(java.lang.String compositeKey)
CompositeKey
.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
This method takes responsibility to correctly parse the CompositeKey
from a String
and behaves exactly as getStateByPartialCompositeKey(CompositeKey)
.
Call close() on the returned AutoCloseable.close()
object when done.
compositeKey
- partial composite keyIterable
of KeyValue
QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(java.lang.String objectType, java.lang.String... attributes)
CompositeKey
.
It combines the attributes and the objectType to form a partial composite key.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
This method takes responsibility to correctly combine Object type and attributes
creating a CompositeKey
and behaves exactly
as getStateByPartialCompositeKey(CompositeKey)
.
AutoCloseable.close()
object when done.objectType
- ObjectType of the compositeKeyattributes
- Attributes of the composite keyIterable
of KeyValue
QueryResultsIterator<KeyValue> getStateByPartialCompositeKey(CompositeKey compositeKey)
CompositeKey
.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
compositeKey
- partial composite keyIterable
of KeyValue
QueryResultsIteratorWithMetadata<KeyValue> getStateByPartialCompositeKeyWithPagination(CompositeKey compositeKey, int pageSize, java.lang.String bookmark)
When an empty string is passed as a value to the bookmark
argument, the returned iterator can be used to fetch
the first pageSize
composite keys whose prefix matches the given partial composite key.
When the bookmark
is a non-empty string, the iterator can be used to fetch first pageSize
keys between the
bookmark
(inclusive) and and the last matching composite key.
Note that only the bookmark present in a prior page of query results (ChaincodeShim.QueryResponseMetadata
)
can be used as a value to the bookmark argument. Otherwise, an empty string must be passed as bookmark.
This call is only supported in a read only transaction.
compositeKey
- pageSize
- bookmark
- CompositeKey createCompositeKey(java.lang.String objectType, java.lang.String... attributes)
objectType
- A string used as the prefix of the resulting keyattributes
- List of attribute values to concatenate into the keyCompositeKey splitCompositeKey(java.lang.String compositeKey)
CompositeKey
from a string.compositeKey
- a composite key stringQueryResultsIterator<KeyValue> getQueryResult(java.lang.String query)
It is only supported for state databases that support rich query,
e.g. CouchDB. The query string is in the native syntax
of the underlying state database. An QueryResultsIterator
is returned
which can be used to iterate (next) over the query result set.
query
- query string in a syntax supported by the underlying state
databaseQueryResultsIterator
object contains query resultsjava.lang.UnsupportedOperationException
- if the underlying state database does not support rich
queries.QueryResultsIteratorWithMetadata<KeyValue> getQueryResultWithPagination(java.lang.String query, int pageSize, java.lang.String bookmark)
bookmark
argument, the returned iterator can be used to fetch
the first pageSize
of query results..
When the bookmark
is a non-empty string, the iterator can be used to fetch first pageSize
keys between the
bookmark
(inclusive) and the last key in the query result.
Note that only the bookmark present in a prior page of query results (ChaincodeShim.QueryResponseMetadata
)
can be used as a value to the bookmark argument. Otherwise, an empty string must be passed as bookmark.
This call is only supported in a read only transaction.
query
- pageSize
- bookmark
- QueryResultsIterator<KeyModification> getHistoryForKey(java.lang.String key)
For each historic key update, the historic value and associated
transaction id and timestamp are returned. The timestamp is the
timestamp provided by the client in the proposal header.
This method requires peer configuration
core.ledger.history.enableHistoryDatabase
to be true.
key
- The state variable keyIterable
of KeyModification
byte[] getPrivateData(java.lang.String collection, java.lang.String key)
key
from the specified
collection
.
Note that getPrivateData(String, String)
doesn't read data from the
private writeset, which has not been committed to the collection
. In
other words, getPrivateData(String, String)
doesn't consider data modified by putPrivateData(String, String, byte[])
* that has not been committed.
collection
- name of the collectionkey
- name of the valuebyte[] getPrivateDataHash(java.lang.String collection, java.lang.String key)
collection
- name of the collectionkey
- name of the valuebyte[] getPrivateDataValidationParameter(java.lang.String collection, java.lang.String key)
key
. Note that this introduces
a read dependency on key
in the transaction's readset.collection
- name of the collectionkey
- key to get endorsement policyvoid putPrivateData(java.lang.String collection, java.lang.String key, byte[] value)
key
and value
into the transaction's
private writeset.
Note that only hash of the private writeset goes into the
transaction proposal response (which is sent to the client who issued the
transaction) and the actual private writeset gets temporarily stored in a
transient store. putPrivateData doesn't effect the collection
until the
transaction is validated and successfully committed. Simple keys must not be
an empty string and must not start with null character (0x00), in order to
avoid range query collisions with composite keys, which internally get
prefixed with 0x00 as composite key namespace.
collection
- name of the collectionkey
- name of the valuevalue
- the value to write to the ledgervoid setPrivateDataValidationParameter(java.lang.String collection, java.lang.String key, byte[] value)
key
.collection
- name of the collectionkey
- key to set endorsement policyvalue
- endorsement policyvoid delPrivateData(java.lang.String collection, java.lang.String key)
key
to be deleted in the private writeset of
the transaction.
Note that only hash of the private writeset goes into the
transaction proposal response (which is sent to the client who issued the
transaction) and the actual private writeset gets temporarily stored in a
transient store. The key
and its value will be deleted from the collection
when the transaction is validated and successfully committed.
collection
- name of the collectionkey
- name of the value to be deletedQueryResultsIterator<KeyValue> getPrivateDataByRange(java.lang.String collection, java.lang.String startKey, java.lang.String endKey)
startkey
(inclusive) and the endKey
(exclusive) in a given private collection.
Note that startKey and endKey can be empty string, which implies unbounded range query on start or end. The query is re-executed during validation phase to ensure result set has not changed since transaction endorsement (phantom reads detected).
collection
- name of the collectionstartKey
- private data variable key as the start of the key range (inclusive)endKey
- private data variable key as the end of the key range (exclusive)Iterable
of KeyValue
QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(java.lang.String collection, java.lang.String compositeKey)
CompositeKey
in a given private collection.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
The query is re-executed during validation phase to ensure result set has not changed since transaction endorsement (phantom reads detected).
This method takes responsibility to correctly parse the CompositeKey
from a String
and behaves exactly as getPrivateDataByPartialCompositeKey(String, CompositeKey)
.
collection
- name of the collectioncompositeKey
- partial composite keyIterable
of KeyValue
QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(java.lang.String collection, CompositeKey compositeKey)
CompositeKey
in a given private collection.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
The query is re-executed during validation phase to ensure result set has not changed since transaction endorsement (phantom reads detected).
collection
- name of the collectioncompositeKey
- partial composite keyIterable
of KeyValue
QueryResultsIterator<KeyValue> getPrivateDataByPartialCompositeKey(java.lang.String collection, java.lang.String objectType, java.lang.String... attributes)
CompositeKey
in a given private collection.
If a full composite key is specified, it will not match itself, resulting in no keys being returned.
The query is re-executed during validation phase to ensure result set has not changed since transaction endorsement (phantom reads detected).
This method takes responsibility to correctly combine Object type and attributes
creating a CompositeKey
and behaves exactly
as getPrivateDataByPartialCompositeKey(String, CompositeKey)
.
collection
- name of the collectionobjectType
- ObjectType of the compositeKeyattributes
- Attributes of the composite keyIterable
of KeyValue
QueryResultsIterator<KeyValue> getPrivateDataQueryResult(java.lang.String collection, java.lang.String query)
It is only supported for state databases that support rich query, e.g.CouchDB. The query string is in the native syntax of the underlying state database. An iterator is returned which can be used to iterate (next) over the query result set. The query is NOT re-executed during validation phase, phantom reads are not detected. That is, other committed transactions may have added, updated, or removed keys that impact the result set, and this would not be detected at validation/commit time. Applications susceptible to this should therefore not use GetQueryResult as part of transactions that update ledger, and should limit use to read-only chaincode operations.
collection
- name of the collectionquery
- query string in a syntax supported by the underlying state
databaseQueryResultsIterator
object contains query resultsjava.lang.UnsupportedOperationException
- if the underlying state database does not support rich
queries.void setEvent(java.lang.String name, byte[] payload)
name
- Name of event. Cannot be null or empty string.payload
- Optional event payload.default Chaincode.Response invokeChaincode(java.lang.String chaincodeName, java.util.List<byte[]> args)
Same as invokeChaincode(String, List, String)
using channelId to null
chaincodeName
- Name of chaincode to be invoked.args
- Arguments to pass on to the called chaincode.Chaincode.Response
object returned by called chaincodedefault Chaincode.Response invokeChaincodeWithStringArgs(java.lang.String chaincodeName, java.util.List<java.lang.String> args, java.lang.String channel)
This is a convenience version of
invokeChaincode(String, List, String)
. The string args will be
encoded into as UTF-8 bytes.
chaincodeName
- Name of chaincode to be invoked.args
- Arguments to pass on to the called chaincode.channel
- If not specified, the caller's channel is assumed.Chaincode.Response
object returned by called chaincodedefault Chaincode.Response invokeChaincodeWithStringArgs(java.lang.String chaincodeName, java.util.List<java.lang.String> args)
This is a convenience version of invokeChaincode(String, List)
.
The string args will be encoded into as UTF-8 bytes.
chaincodeName
- Name of chaincode to be invoked.args
- Arguments to pass on to the called chaincode.Chaincode.Response
object returned by called chaincodedefault Chaincode.Response invokeChaincodeWithStringArgs(java.lang.String chaincodeName, java.lang.String... args)
This is a convenience version of invokeChaincode(String, List)
.
The string args will be encoded into as UTF-8 bytes.
chaincodeName
- Name of chaincode to be invoked.args
- Arguments to pass on to the called chaincode.Chaincode.Response
object returned by called chaincodedefault java.lang.String getStringState(java.lang.String key)
This is a convenience version of getState(String)
key
- name of the valuedefault void putPrivateData(java.lang.String collection, java.lang.String key, java.lang.String value)
collection
- collection namekey
- name of the valuevalue
- the value to write to the ledgerdefault java.lang.String getPrivateDataUTF8(java.lang.String collection, java.lang.String key)
collection
- collection namekey
- name of the valuedefault void putStringState(java.lang.String key, java.lang.String value)
key
- name of the valuevalue
- the value to write to the ledgerorg.hyperledger.fabric.protos.peer.ChaincodeEventPackage.ChaincodeEvent getEvent()
org.hyperledger.fabric.protos.peer.ProposalPackage.SignedProposal getSignedProposal()
java.time.Instant getTxTimestamp()
byte[] getCreator()
java.util.Map<java.lang.String,byte[]> getTransient()
byte[] getBinding()


Recipe: Deviled Green Eggs with Roasted Red Pepper and Capers
by CBS NewsFrom Dr. Drew Ramsey, author of "Eat Complete: The 21 Nutrients That Fuel Brainpower, Boost Weight Loss, and Transform Your Health":
"Deviled eggs are always a crowd-pleaser and are a great way to extend your relationship with eggs beyond breakfast. Here's a twist on the classic that packs more flavor and far more nutrition with the powers of mustard greens and roasted red pepper.
"These are great for a snack or for lunch at work. If you prefer to roast the peppers yourself, place them on a baking sheet under the broiler for 3 to 4 minutes, turning often, until the skins are blackened. Transfer to a bowl and let them steam for 5 minutes. Then peel and seed the peppers before completing the recipe."
 Bring to a full boil over high heat, cover, and turn off the heat. Set aside for 15 minutes to allow the eggs to cook through. Place under cold running water to cool. Drain and peel. Cut the eggs in half lengthwise, scoop out the yolks, and transfer them to a small bowl. Set aside.
Put the mustard greens in a food processor and chop finely. Add the reserved egg yolks, mayonnaise, and black pepper and process until smooth. Transfer the egg whites to a plate and fill them with the yolk mixture. Top with the roasted red peppers, capers, and jalapeño, if using.
Serve immediately, or cover and chill until ready to serve or for up to 4 hours.
Nutritional Stats Per Serving (4 Pieces):
255 Calories
13g Protein
4g Carbohydrates
19g Fat (4g Saturated)
382mg Cholesterol
1g Sugars
1g Fiber
555mg Sodium Vitamin K = 157%
Choline = 69%
Selenium = 56%
Vitamin A = 46%
Vitamin D = 40%
From the book "Eat Complete" by Drew Ramsey. Copyright © 2016 by Drew Ramsey. Published by Harper Wave, an imprint of HarperCollins Publishers. Reprinted by permission.
For more info:
- "Eat Complete: The 21 Nutrients That Fuel Brainpower, Boost Weight Loss, and Transform Your Health" by Drew Ramsey M.D. (Harper Wave), in Hardcover and eBook formats, available via Amazon
- drewramseymd.com


Software Development Services
The success of a business depends heavily on how cost-effective & responsive to its customers need. So, every business needs different software to make work easier to accomplish & Ewebdigital is one of the best software development company when it comes to delivering the best software solutions. Just bring about your need for software our team of creative & dedicated software developers will turn it into reality. With our sincere partnership, we try to innovate secure, easy to operate & affordable software to accelerate growth & productivity in your startup.
We believe in providing world class experience of softwares to our clients. To expand your business opportunities, every organisation need system dependant softwares for business operations, supply chain management, purchase planning to achieve customer satisfaction. E web digital is the affordable resource with dedicated support through our trained and experienced professional to maximize productivity of organisation and accelerate the growth of company. We help people creating their customised and personalised softwares as per the requirement of business in cost effective manner. We provide Solutions for Custom designed softwares, Effective resouce planning, Customer relationaship management to deliver enthusiatic experience on working with softwares.
Custom Software Development
To be a pioneer in today’s digital era, an organization needs to have customized software that can fulfill their personal needs. For this, we have created a client-oriented business structure for making it easy to communicate, so that they can approach us at any possible time. Our experienced team of software developers has a good portfolio of clients from different industries ranging from hospitality to the IT sector. Our developers have access to advanced tools like Datadog & Honeycomb to increase their observability in business structures.
Enterprise Resource Planning (ERP)
For better business proceedings we have provided many of our clients with best ERP software to achieve higher coordination among their different activities like purchase, production, supply chain & accounting. This software module is extremely helpful to SMEs as they can easily collaborate their manufacturing & trading activities at a lower cost. ERP allows for lessening the use of manual data entry by providing a single database for the whole enterprise. This leads to higher cost savings.
Customer Relationship Management (CRM)
A customer is actually the king of the market & business can only ensure his survival by having a satisfied customer. To achieve this daunting task we provide our clients with best, highly interactive & most-efficient Customer Relationship Management Software. With our CRM software, you can track the activities of your customer, their purchase habits, allow easy cross-selling & up-selling of different products along with maintaining a proper record of customer feedbacks & complaints in the least time possible.


Firstname
*
Lastname
*
Email
*
Phone
*
Street
*
City
*
Country
*
Select Country
United States
India
Website
Sex
*
Male
Female
*
I accept the Terms and Conditions
Submit


Segment name
How would you like to define your segment?
Segment estimate
0% 0 monthly active users
App usage criteria
Filter by device attributes
Filter by custom attributes
Filter by custom user attributes
Amazon S3 URL
IAM Role ARN
External ID
What is the format of the file?


Scratch Jr for Desktop - Open Source Community Port
About
A community open source port of a well-loved early educational programming tool.
We are very excited about the use of Scratch Jr in the classroom, especially for children in early school years.
When we discovered the schools in our area did not have access to tablets, we decided to turn the tablet app into a full
fledged desktop app. In order to do this, we have taken the original code recompiled it for Mac and Windows.
While we have chatted to the official Scratch team, they have asked us to let you know
this important disclaimer about this experimental version:
Scratch and ScratchJr are trademarks of Massachusetts Institute of Technology, which does not sponsor, endorse, or authorize this content. See scratchjr.org for more information.
To port to the desktop, a small database and filesystem layer was rewritten, as well as access to video and sound.
This was accomplished using
Electron for the app hosting, the original html source of ScratchJR and SQL.js for the project database.
Electron is like having your own chrome browser to run one html webpage. And in our case, that webpage is ScratchJR.
Offline mode
Once installed, this app should not require an internet connection to work.
Deleting stuff (press and hold mouse)
Because this is a tablet app, there is no right click support. In order to delete stuff you need to click
and hold the left mouse button until everything wiggles. When you get a red X, click this to remove
characters and projects.
Where's the cat?
Sadly, the cat is not allowed to make an official appearance
in our app but has sent along all of his friends. Everything (else) you
know and love about Scratch Jr on the tablet is there.
All projects are stored locally on the machine inside of a file (which happens to be a sql lite database.)
Inside your documents/ScratchJR folder, there will be a scratchjr.sqllite file.
Reloading saved projects
For classroom use, sometimes it is handy to pre-configure a set of projects. All of the projects all save into the same Documents/ScratchJR/scratchjr.sqllite file.
To set up projects beforehand, you can make a backup copy of this file.
Here's how.
Make starter projects for your class - set up Scratch Jr with the projects you want everyone to use.
Open up the ScratchJR folder inside of Documents
Copy the scratchjr.sqllite file to scratchjr.sqllite.restore
Re-open ScratchJR for desktop.
After completing, there will be a menu option for restoring the projects. This will reset all the projects back
to a clean copy of your projects. This is handy for a shared classroom setting where you don't wish to
save the work between students.
Thanks
Thank you to the official Scratch Jr team and their supporters.
In addition, thank you to the folks working on Electron, ElectronForge, and Sql.js. Thank you to AppVeyor and Travis CL for contributing free Mac, Windows and Linux builds.
Finally, a special thank you to ScopeIT Education for donating their technical expertise to this project.
Support
Note we are working on a volunteer basis and only limited support is available.


| 1081 | (A) | witħ Masouns and Mynours to Myne thay by-gane |
| 1085 | (C) | witħ masons & mynours . to myne þey by-gynne |
| 1068 | (D) | with masons and mynours to myne þei bygan |
| 1048 | (E) | with masonys & mynours . to myne thei be-gunne . |
| 40 | (Ex) | . . .yne thay begynne |
| 1106 | (L) | with mynours & masouns myne þey bygonne |
| 1020 | (P) | line illegible |
| 1057 | (U) | witħ masons and mynours / to myne thei bygan |
| 146 | (V) | with masons and mynours . to myne þey begonne |


{% extends 'base.html' %}
{% block head %}
{{ customer.get_full_name }} - Customer
{% endblock %}
{% block body %}
{% comment %}
So basically, the way this works is that we have two
major sections here. Our first major section is that
we have the Customer's information such as phone numbers,
addresses, name, etc.
The second major field is a basic list of all items they have
tickets on. This allows us to go to a customer's page and view
all items they have and they did in the past.
{% endcomment %}
{{ customer.get_full_name }}
- Created: {{ customer.created|date }}
- E-Mail: {{ customer.email }}
- Phone: {{ customer.phone }}
All tickets for {{ customer.get_full_name }}
{% if tickets %}
| Invoice # |
Created |
Item |
Status |
{% for t in tickets %}
| {{ t.id }} |
{{ t.date|date }} |
{{ t.item_manufacture }} {{ t.item_model }} ({{ t.item_type }}) |
{{ t.status }} |
{% endfor %}
{% else %}
{% endif %}
{% endblock %}


Jewellery design is the art or profession of designing and creating jewellery. This is one of civilization's earliest forms of decoration, dating back at least seven thousand years to the oldest known human societies in Mesopotamia and Egypt. The art has taken many forms throughout the centuries, from the simple beadwork of ancient times to the sophisticated metalworking and gem cutting known in the modern day.
| Thiranwalar A.S.3,navin vigneswar apartment, 76 medavakkam main road,Madipakkam, Chennai, Tamil Nadu 600091 India. |
|---|
| Solitaire Diamond Institute No.14/1, Sankeshwara Towers 2nd Floor, 1st Cross R.V.Road, Near Minerva Junction Bengaluru-560004 |
|---|
| Gautam Banerjess's Academy Of Jewellery making 205, Mani Mahal, No 11/21, Mathew Rd, Opera House Girgaon, Mumba Maharashtra 400004 |
|---|


Transforms
Transforms are how we create MIDI effects in Warp. The most basic example would be something like an octave shift or strumming a chord so that chords can be played on monophonic instruments. More advanced transforms can introduce probabilistic randomness or humanization, or even reassigning velocity or MIDI CC data. At the most basic level, transforms process patterns and modify the notes or chords therein before they are turned into MIDI events.
In each Clip, you can assign any number of transforms to apply to the current playing pattern in the clip. If there is a list of transforms, they apply in turn as the patterns advance and repeat. If that list contains more than one transform in any list element (see examples below), each transform at that step will apply as an effect chain. In short, transforms can be stacked, just like VST audio effects can be stacked. And not only can they stack, they can rotate in and out. A common problem in many electronic music studios is that while patching, many of us play repeated patterns in loops. By combining a simple pattern with a list of differing transforms, we can give life to that patch and make it evolve. The result is a much more interesting composition.
All transforms work through applying Mod Expressions - so read about them to understand what is possible.
Classically, arpeggiators are used in synthesizers to turn chord patterns into individual notes, played in rapid sequence. While the most basic arps in hardware synthesizers strum chords, sometimes with an octave shift, more advanced onces allow offsetting notes by particular steps, and using each base note of a chord to start a pattern using that individual note as a root. Having a very powerful and open-ended arp system was a key design goal for Warp, so we went even further.
In Warp, you can also decide whether the transform will affect chords, notes, or both. This is set by setting 'applies_to' parameter to ... yes, 'chords', 'notes', or 'both'. The default is 'both', which is what you would use if applying something like an octave shift, at least most of the time. To implement a classic arp, you should pick 'chords'. If you just want to strum chords, pick 'chords'. Picking 'notes', would be unusual, but would allow crafting an effect that transposes notes but leaves the chords intact. This means you can mix in some totally shredding when you are not playing chords, but play chords full length. Or maybe something more creative!
It's important to understand how speed is controlled. Transforms have a divide time that decides how much they slice up notes or chords. For processing chords, leaving this unset will strum the chord completely within the current time slice. Setting divide=6 will insert six notes, rolling around and using the first notes as chord data as the transform repeats. If a basic "slot" in Warp is thought to be a sixteenth note (it is, unless you adjust the pattern, clip, or scene rate - setting a divide of 2 would mean each processed note or chord would turn into 32nd notes. The divide time must presently be an positive integer.
Examples
Transform examples are included as part of the Transform Expression Guide.
Learning in Context
The Python API examples that ship with the program contain both basic and advanced transform examples. Once the UI is available, the demo songs will also include several transform examples that will show creative transform usage in demo song context. It is easiest to understand chords for now by exploring this particular API demo file.
The best way to learn (after reading the examples and the Mod Expression chapter is experimenting and seeing or hearing what happens. As you experiment with mixing patterns and transforms, you will undoubtedly uncover lots of emergent behavior that can turn very simple lists of expressions into much more diverse and interesting compositions.


We're sorry but this app doesn't work properly without JavaScript enabled. Please enable it to continue.


{% extends "inc/layout.html" %} {% from "inc/forms.html" import renderfield %} {% block title %}{{ post.headline|e }}{% endblock %} {% block content %}
Please confirm that you wish to withdraw this job listing. Your listing will be permanently withdrawn and cannot be made available again.


In the not-too-distant future, next Sunday, AD
There was a man. There were some puppets. It was amazing.
These are the experiments of the SOL.


Structure containing the Exception Handlers. If application does not want register an exception handler then below handlers can be assigned to 'NULL' value. In such case, default handler will be used which have the infinite loop. More...
#include <csl_arm_r5.h>
Data Fields | |
| uint32_t | cpuID |
| uint32_t | grpId |
| uint32_t | multiprocessingExt |
Structure containing the Exception Handlers. If application does not want register an exception handler then below handlers can be assigned to 'NULL' value. In such case, default handler will be used which have the infinite loop.
| uint32_t CSL_ArmR5CPUInfo::cpuID |
CPU/core ID within cluster Refer #CSL_ArmR5CPUID
| uint32_t CSL_ArmR5CPUInfo::grpId |
Group Id of the cluster Refer #CSL_ArmR5ClusterGroupID
| uint32_t CSL_ArmR5CPUInfo::multiprocessingExt |
Prefetch Abort exception handler


Select the category of your item:
Title
Item Attributes
Item description
Pricing (leave empty for no bid/buyout price)
Days until expiration
Item Picture


This chapter describes RADIUS authentication backend. Mpd supports both user authentication and session accounting using RADIUS. RADIUS-Accounting and RADIUS-Authentication are independant so it is possible to use them in any combination.
All authentication methods are supported with RADIUS (PAP, CHAP, MS-CHAPv1, MS-CHAPv2, EAP). Password changing is currently not supported.
All of these commands apply to the currently active link.
set radius server name secret [ auth-port [ acct-port ]]
Configure RADIUS server parameters. Multiple RADIUS servers may be configured by repeating this command, and up to 10 servers may be specified. If one of auth/acct ports specified as 0, it will not be used for requests of that type.
unset radius server name [ auth-port [ acct-port ]]
Deletes cpecific RADIUS server from pool.
set radius src-addr ipaddr
Configure IP address on the multihomed host that is used as a source address for all requests.
set radius timeout seconds
Set the timeout for completion of RADIUS requests.
The default is 5 second.
set radius retries #retries
Set the number of retries for RADIUS requests.
The default is 3 retries.
set radius me IP|ifname|hostname
Send the given IP in the RAD_NAS_IP_ADDRESS attribute to the server.
set radius v6me IPv6
Send the given IP in the RAD_NAS_IPV6_ADDRESS attribute to the server.
set radius identifier name
Send the given name in the RAD_NAS_IDENTIFIER attribute to the server. If not set the local hostname is used.
set radius enable message-authentic
Adds the Message-Authenticator attribute to the RADIUS request. The Message-Authenticator is an HMAC-MD5 checksum of the entire Access-Request packet using the shared secret as the key. This should protect the RADIUS server against online dictionary attacks. This is mandatory when using the EAP-RADIUS-Proxy and it's implicitly added to the request by Mpd.
RADIUS attributes supported by mpd:
N Name Access Accounting Req Resp Req Resp 1 User-Name + + + - 2 User-Password + - - - 3 CHAP-Password + - - - 4 NAS-IP-Address + - + - 5 NAS-Port + - + - 6 Service-Type + - + - 7 Framed-Protocol + - + - 8 Framed-IP-Address - + + - 9 Framed-IP-Netmask - + + - 11 Filter-Id - + - - 12 Framed-MTU - + - - 13 Framed-Compression - + - - 18 Reply-Message - + - - 22 Framed-Route - + - - 24 State + + + - 25 Class - + + - 27 Session-Timeout - + - - 28 Idle-Timeout - + - - 30 Called-Station-Id + - + - 31 Calling-Station-Id + - + - 32 NAS-Identifier + - + - 40 Acct-Status-Type - - + - 42 Acct-Input-Octets - - + - 43 Acct-Output-Octets - - + - 44 Acct-Session-Id + - + - 45 Acct-Authentic - - + - 46 Acct-Session-Time - - + - 47 Acct-Input-Packets - - + - 48 Acct-Output-Packets - - + - 49 Acct-Terminate-Cause - - + - 50 Acct-Multi-Session-Id - - + - 51 Acct-Link-Count - - + - 52 Acct-Input-Gigawords - - + - 53 Acct-Output-Gigawords - - + - 60 CHAP-Challenge + - - - 61 NAS-Port-Type + - + - 64 Tunnel-Type + - + - 65 Tunnel-Medium-Type + - + - 66 Tunnel-Client-Endpoint + - + - 67 Tunnel-Server-Endpoint + - + - 85 Acct-Interim-Interval - + - - 87 NAS-Port-Id + - + - 88 Framed-Pool - + - - 90 Tunnel-Client-Auth-ID + - + - 91 Tunnel-Server-Auth-ID + - + - 95 NAS-IPv6-Address + - + - 99 Framed-IPv6-Route - + - - Microsoft VSA (311) 1 MS-CHAP-Response + - - - 2 MS-CHAP-Error - + - - 7 MS-MPPE-Encryption-Policy - + - - 8 MS-MPPE-Encryption-Types - + - - 10 MS-CHAP-Domain - + - - 11 MS-CHAP-Challenge + - - - 12 MS-CHAP-MPPE-Keys - + - - 16 MS-MPPE-Send-Key - + - - 17 MS-MPPE-Recv-Key - + - - 25 MS-CHAP2-Response + - - - 26 MS-CHAP2-Success - + - - 28 MS-Primary-DNS-Server - + - - 29 MS-Secondary-DNS-Server - + - - 30 MS-Primary-NBNS-Server - + - - 31 MS-Secondary-NBNS-Server - + - - DSL Forum VSA (3561) 1 ADSL-Agent-Circuit-Id + - + - 2 ADSL-Agent-Remote-Id + - + - mpd VSA (12341) 1 mpd-rule - + - - 2 mpd-pipe - + - - 3 mpd-queue - + - - 4 mpd-table - + - - 5 mpd-table-static - + - - 6 mpd-filter - + - - 7 mpd-limit - + - - 8 mpd-input-octets - - + - 9 mpd-input-packets - - + - 10 mpd-output-octets - - + - 11 mpd-output-packets - - + - 12 mpd-link + - + - 13 mpd-bundle - - + - 14 mpd-iface - - + - 15 mpd-iface-index - - + - 16 mpd-input-acct - + - - 17 mpd-output-acct - + - - 18 mpd-action - + - - 19 mpd-peer-ident + - + - 20 mpd-iface-name - + - - 21 mpd-iface-descr - + - - 22 mpd-iface-group - + - - 154 mpd-drop-user - - - +
To use mpd VSA you should add such dictionary to your RADIUS server:
#---------------------------------------------------------- # dictionary.mpd VENDOR mpd 12341 BEGIN-VENDOR mpd ATTRIBUTE mpd-rule 1 string ATTRIBUTE mpd-pipe 2 string ATTRIBUTE mpd-queue 3 string ATTRIBUTE mpd-table 4 string ATTRIBUTE mpd-table-static 5 string ATTRIBUTE mpd-filter 6 string ATTRIBUTE mpd-limit 7 string ATTRIBUTE mpd-input-octets 8 string ATTRIBUTE mpd-input-packets 9 string ATTRIBUTE mpd-output-octets 10 string ATTRIBUTE mpd-output-packets 11 string ATTRIBUTE mpd-link 12 string ATTRIBUTE mpd-bundle 13 string ATTRIBUTE mpd-iface 14 string ATTRIBUTE mpd-iface-index 15 integer ATTRIBUTE mpd-input-acct 16 string ATTRIBUTE mpd-output-acct 17 string ATTRIBUTE mpd-action 18 string ATTRIBUTE mpd-peer-ident 19 string ATTRIBUTE mpd-iface-name 20 string ATTRIBUTE mpd-iface-descr 21 string ATTRIBUTE mpd-iface-group 22 string ATTRIBUTE mpd-drop-user 154 integer END-VENDOR mpd #----------------------------------------------------------
Mpd allows RADIUS server to terminate user session by setting vendor specific mpd-drop-user attribute to nonzero value in accounting start/update reply packet.
Mpd can use the Access Control Lists (ACLs) given by the RADIUS server. This ACLs may include ipfw rules, pipes, queues and tables and also mpd internal traffic filtering/shaping/limiting features. That two sets are redundant. ipfw proposed as standard and universal solution, while internal filter/shaper/limiter based on ng_bpf+ng_car expected to work faster with big number of active links.
You can write in your RADIUS configuration something like:
mpd-table += "1=<IP_ADDRESS>", mpd-table += "1=<IP_ADDRESS>", mpd-pipe += "1=bw 10Kbyte/s", mpd-pipe += "5=bw 20Kbyte/s", mpd-rule += "1=pipe %p1 all from any to table\\(%t1\\) in", mpd-rule += "2=pipe %p5 all from table\\(%t1\\) to any out", mpd-rule += "100=allow all from any to any",
When mpd receives these parameters it will call ipfw(8) to create firewall rules, pipes and queues with unique numbers starting from 10000 (configurable via 'set global start...'). %rX, %pX, %qX, %tX and %aX macroses will be expanded within mpd-rule and mpd-queue. To the end of each rule will be added "via ngX" to make the rule apply only to that client's networking interface.
Allowed macroses:
%rX IPFW rule pool %pX IPFW pipe pool %qX IPFW queue pool %tX IPFW table pool %a1 peer negotiated IP address %a2 self negotiated IP address
As a result of this example we would get these commands executed:
ipfw table 32 add <IP_ADDRESS> ipfw table 32 add <IP_ADDRESS> ipfw pipe 10000 config bw 10Kbyte/s ipfw pipe 10001 config bw 20Kbyte/s ipfw add 10000 pipe 10000 all from any to table\(32\) in via ng0 ipfw add 10001 pipe 10001 all from table\(32\) to any out via ng0 ipfw add 10002 allow all from any to any via ng0When the link goes down, all created rules will be removed.
Note: As soon as mpd executes ipfw commands using shell, shell's special characters like "(" and ")" must be slashed.
You can specify mpd-table += "1=peer_addr" to use mpd-table with the peer negotiated IP address.
Mpd can create complex per-interface traffic filtering/limiting engines inside netgraph when it is requested by mpd-filter and mpd-limit RADIUS attributes.
mpd-filter attribute is a packet filter declaration for using in mpd-limit. mpd-filter consists of two main parts: match/nomatch verdict and the condition. tcpdump (libpcap) expression syntax used for conditions.
mpd-filter: match|nomatch {condition}
mpd-limit attribute is an action which should be done for packet. It consists of two main parts: filter and action.
mpd-limit: {filter} {action}
Filter can be or "all" (any packet) or "fltX" (packets matching to specified mpd-filter).
filter: any|fltX
Action can be: "" (do nothing, just account), "pass" (stop processing and pass packet), "deny" (stop processing and drop packet), "rate-limit" (do Cisco-like rate-limit), "shape" (do simple RED aware traffic shaping).
Actions "rate-limit" and "shape" can have optional "pass" suffix to stop processing after doing this action.
action: | pass | deny | rate-limit {rate(bits/s)} [{normal burst(bytes)} [{extended burst(bytes)}]] [pass] | shape {rate(bits/s)} [{burst(bytes)}] [pass]
As example you can write in your RADIUS configuration something like:
mpd-filter += "1#1=nomatch dst net <IP_ADDRESS>/24", mpd-filter += "1#2=match dst net <IP_ADDRESS>/8", mpd-filter += "2#1=nomatch src net <IP_ADDRESS>/24", mpd-filter += "2#2=match src net <IP_ADDRESS>/8", mpd-limit += "in#1=flt1 pass", mpd-limit += "in#2#Biz=all shape 64000 4000", mpd-limit += "out#1=flt2 pass", mpd-limit += "out#2#Biz=all rate-limit 1024000<PHONE_NUMBER>00",
As result, one ng_bpf node will be created to implement traffic filters and several (two for this example) ng_car nodes for traffic shaping and rate-limiting. Incoming traffic to <IP_ADDRESS>/8 except <IP_ADDRESS>/24 will be passed, other traffic will be shaped to 64Kbits/s. Outgoing traffic from <IP_ADDRESS>/8 except <IP_ADDRESS>/24 will be passed, all other will be limited to 1024Kbit/s. Also traffic that passed mpd-limit rules marked "Biz" will be accordingly accounted and present with that name in AAA accounting requests.


See: Description
| Class | Description |
|---|---|
| Environment |
This class is a data structure to hold the extracted information, that is
valid for the whole environment and does not depend on single files.
|
| Event |
Represents an event that occurred in the system environment and was monitored
by one of the application daemons, or an event created as result of other
occurring events.
|
| ExtractionResult |
This class represents the result of a single module extraction run.
|
| ExtractionResultCollection |
Information collections are used to collect sets of extracted information as
ExtractionResult s, for example from different module extractions, to
be saved together. |
| GenericModule |
Generic modules are used to provide a list of available modules without
configuration.
|
| GenericModuleTest | |
| KeyValueResult |
Utility class to be used by
ExtractionResult to store simple
extracted information in key-value format. |
| MetadataCollectionTest | |
| OperatingSystem |
AbstractModule s use this class to define a list of operating
systems where they are compatible with, and to validate if they can be
executed on the current system. |
| Part |
This data structure represents a file with its belonging extracted
information.
|
| PartTest | |
| Profile |
A Profile is a data structure that contains a list of files (
Part )
and a list of configured AbstractModule s to be used on these files. |
| ProfileTemplate |
A template class for a
Profile , to save and load a pre-configured set
of AbstractModule s used for the fast creation of a Profile . |
| ProfileTest |
| Enum | Description |
|---|---|
| OperatingSystem.OsName |
Operating system types for a general distinction.
|


Rules: At the Double, Forward to Victory, Inspiring Presence
Selections: 3. Arcane Transformation, 3. Aspect of Tzeentch
Categories: CHAOS, DAEMON, MORTAL, TZEENTCH, HERO, WIZARD, ARCANITE, EVERCHOSEN, Leader
Artefact: Aspect of Tzeentch, Magic: Gaunt Summoner, Spell: Arcane Bolt, Arcane Transformation, Infernal Flames, Mystic Shield, Unit: Gaunt Summoner, Unit Abilities: Book of Profane Secrets, Warptongue Blade, Weapon: Changestaff, Warptongue Blade
| Artefact | Artefact Details |
|---|---|
| Aspect of Tzeentch | If the bearer is on the battlefield, roll a dice each time you spend a Destiny Dice. On a 5+, you can roll a dice and add it to your Destiny Dice. |
| Magic | Cast/Unbind | Spells Known |
|---|---|---|
| Gaunt Summoner | 2/2 | Arcane Bolt, Mystic Shield and Infernal Flames |
| Spell | Casting Value | Description |
|---|---|---|
| Arcane Bolt | 5 | If successfully cast, pick an enemy unit within 18" of the caster that is visible to them. That unit suffers 1 mortal wound. If the casting roll was 10 or more, the unit suffers D3 mortal wounds instead. |
| Arcane Transformation | 6 | If successfully cast, pick 1 friendly TZEENTCH HERO wholly within 18" of the caster and visible to them. Until your next hero phase, you can either add 1 to that HERO’s Move and Bravery characteristics or add 1 to the Attacks characteristic of one of that HERO’S melee weapons. |
| Infernal Flames | 7 | If successfully cast, pick 1 enemy unit within 12" of the caster that is visible to them, and roll 1 dice for each model in that unit. For each 5+, that unit suffers 1 mortal wound. If that unit is an enemy MONSTER or WAR MACHINE, roll 3 dice for each model instead. |
| Mystic Shield | 6 | If successfully cast, pick a friendly unit within 18" of the caster that is visible to them. Re-roll save rolls of 1 for that unit until your next hero phase. |
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Gaunt Summoner | 5 | 5 | 8 | 6+ |
| Unit Abilities | Ability Details |
|---|---|
| Book of Profane Secrets | Once per battle, at the start of your hero phase, you can say that this model will use its Book of Profane Secrets. If you do so, you can summon 1 unit from the following list to the battlefield and add it to your army, but the number of spells that this model can attempt to cast in that phase is reduced by 1. The summoned unit must be set up wholly within 9" of this model and more than 9" from any enemy units. Choose 1 unit from the following list: • 10 Pink Horrors • 10 Bloodletters • 10 Plaguebearers • 10 Daemonettes • 6 Furies |
| Warptongue Blade | If the unmodified wound roll for an attack made with a Warptongue Blade is 6, that attack inflicts D6 mortal wounds on the target and the attack sequence ends (do not make a save roll). |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Changestaff | Missile | 18" | 1 | 3+ | 4+ | - | D3 |
| Warptongue Blade | Melee | 1" | 1 | 3+ | 4+ | - | 1 |
Selections: 0. Prophet of the Ostensible, 2. Treason of Tzeentch, General
Categories: CHAOS, DAEMON, HERO, MORTAL, TZEENTCH, WIZARD, EVERCHOSEN, Leader, General
Command Trait: Prophet of the Ostensible, Magic: Gaunt Summoner, Infernal Flames, Spell: Fractal Mindstorm, Treason of Tzeentch, Unit: Gaunt Summoner on Disc of Tzeentch, Unit Abilities: Book of Profane Secrets, Fly, Hovering Disc of Tzeentch, Warptongue Blade, Weapon: Blades and Sttingers, Changestaff, Warptongue Blade
| Command Trait | Command Trait Details |
|---|---|
| Prophet of the Ostensible | If this general is part of your army and on the battlefield at the start of your hero phase, roll a dice. On a 4+, you receive 1 extra command point. |
| Magic | Cast/Unbind | Spells Known |
|---|---|---|
| Gaunt Summoner | 2/2 | Arcane Bolt, Mystic Shield, Fractal Mindstorm |
| Infernal Flames | 7 | If successfully cast, pick 1 enemy unit within 12" of the caster and visible to them, and roll 1 dice for each model in that unit. For each 5+, that unit suffers 1 mortal wound. If that unit is a MONSTER or WAR MACHINE, roll 3 dice for each model instead. |
| Spell | Casting Value | Description |
|---|---|---|
| Fractal Mindstorm | See below | Before attempting to cast the spell, choose an enemy unit within 9" of the caster. The spell has a casting value equal to the Bravery of the unit you chose. If the spell is successfully cast, roll a number of dice equal to the unit's Bravery. It suffers 1 mortal wound for each dice that rolls 4 or more. |
| Treason of Tzeentch | 5 | If successfully cast, pick 1 enemy unit within 18" of the caster and visible to them. Roll a number of dice equal to the number of models in that unit. For each 6, that unit suffers 1 mortal wound. If any models from that unit are slain by this spell, subtract 1 from hit rolls for attacks made by that unit until your next hero phase. |
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Gaunt Summoner on Disc of Tzeentch | 16" | 5 | 8 | 6+ |
| Unit Abilities | Ability Details |
|---|---|
| Book of Profane Secrets | Once per battle, at the start of your hero phase, you can say this model will use its Book of Profane Secrets. If you do so, you can summon 1 unit from the list below to the battlefield, and add it to your army, but the number of spells that this model can attempt to cast in that phase is reduced by 1. The summoned unit must be set up wholly within 9" of this model and more than 9" from any enemy units. Choose 1 unit from the following list: • 10 Pink Horrors • 10 Bloodletters • 10 Plaguebearers • 10 Daemonettes • 6 Furies |
| Fly | This unit can fly. |
| Hovering Disc of Tzeentch | Add 2 to save rolls for attacks made with melee weapons that target this model unless the attacking unit is a MONSTER or can fly. |
| Warptongue Blade | If the unmodified wound roll for an attack made with a Warptongue Blade is 6, that attacks inflicts D6 mortal wounds on the target and the attack sequence ends (do not make a save roll). |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Blades and Sttingers | Melee | 1" | D3 | 4+ | 4+ | - | 1 |
| Changestaff | Missile | 18" | 1 | 3+ | 4+ | - | D3 |
| Warptongue Blade | Melee | 1" | 1 | 3+ | 4+ | - | 1 |
Selections: 0. Brimstone Familiar, 5. Fold Reality
Categories: CHAOS, DAEMON, HERO, MORTAL, TZEENTCH, WIZARD, EVERCHOSEN, Leader, Artefact
Artefact: Brimstone Familiar, Magic: Gaunt Summoner, Infernal Flames, Spell: Fold Reality, Fractal Mindstorm, Unit: Gaunt Summoner on Disc of Tzeentch, Unit Abilities: Book of Profane Secrets, Fly, Hovering Disc of Tzeentch, Warptongue Blade, Weapon: Blades and Sttingers, Changestaff, Warptongue Blade
| Artefact | Artefact Details |
|---|---|
| Brimstone Familiar | Do not take battleshock tests for friendly GUILD OF SUMMONERS units while they are wholly within 12" of the bearer. |
| Magic | Cast/Unbind | Spells Known |
|---|---|---|
| Gaunt Summoner | 2/2 | Arcane Bolt, Mystic Shield, Fractal Mindstorm |
| Infernal Flames | 7 | If successfully cast, pick 1 enemy unit within 12" of the caster and visible to them, and roll 1 dice for each model in that unit. For each 5+, that unit suffers 1 mortal wound. If that unit is a MONSTER or WAR MACHINE, roll 3 dice for each model instead. |
| Spell | Casting Value | Description |
|---|---|---|
| Fold Reality | 7 | If successfully cast, pick 1 friendly TZEENTCH DAEMON unit wholly within 18" of the caster and visible to them, and roll a dice. On a 1, that unit is destroyed. On a 2+, you can return a number of slain models equal to that roll to that unit. Set up the models one at a time within 1" of a model from that unit that has not been returned in that phase. The models can only be set up within 3" of an enemy unit if the friendly unit was within 3" of that enemy unit before any models were returned. |
| Fractal Mindstorm | See below | Before attempting to cast the spell, choose an enemy unit within 9" of the caster. The spell has a casting value equal to the Bravery of the unit you chose. If the spell is successfully cast, roll a number of dice equal to the unit's Bravery. It suffers 1 mortal wound for each dice that rolls 4 or more. |
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Gaunt Summoner on Disc of Tzeentch | 16" | 5 | 8 | 6+ |
| Unit Abilities | Ability Details |
|---|---|
| Book of Profane Secrets | Once per battle, at the start of your hero phase, you can say this model will use its Book of Profane Secrets. If you do so, you can summon 1 unit from the list below to the battlefield, and add it to your army, but the number of spells that this model can attempt to cast in that phase is reduced by 1. The summoned unit must be set up wholly within 9" of this model and more than 9" from any enemy units. Choose 1 unit from the following list: • 10 Pink Horrors • 10 Bloodletters • 10 Plaguebearers • 10 Daemonettes • 6 Furies |
| Fly | This unit can fly. |
| Hovering Disc of Tzeentch | Add 2 to save rolls for attacks made with melee weapons that target this model unless the attacking unit is a MONSTER or can fly. |
| Warptongue Blade | If the unmodified wound roll for an attack made with a Warptongue Blade is 6, that attacks inflicts D6 mortal wounds on the target and the attack sequence ends (do not make a save roll). |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Blades and Sttingers | Melee | 1" | D3 | 4+ | 4+ | - | 1 |
| Changestaff | Missile | 18" | 1 | 3+ | 4+ | - | D3 |
| Warptongue Blade | Melee | 1" | 1 | 3+ | 4+ | - | 1 |
Selections: 5 Chaos Warriors [100pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS WARRIORS, Battleline
Unit: Chaos Warriors, Unit Abilities: Aspiring Champion, Legions of Chaos
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Warriors | 5" | 2 | 6 | 4+ |
| Unit Abilities | Ability Details |
|---|---|
| Aspiring Champion | 1 model in this unit can be an Aspiring Champion. Add 1 to the Attacks characteristic of that model’s melee weapons. |
| Legions of Chaos | You can re-roll save rolls for attacks that target this unit while it has at least 10 models. |
Selections: 5 Chaos Warriors [100pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS WARRIORS, Battleline
Unit: Chaos Warriors, Unit Abilities: Aspiring Champion, Legions of Chaos
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Warriors | 5" | 2 | 6 | 4+ |
| Unit Abilities | Ability Details |
|---|---|
| Aspiring Champion | 1 model in this unit can be an Aspiring Champion. Add 1 to the Attacks characteristic of that model’s melee weapons. |
| Legions of Chaos | You can re-roll save rolls for attacks that target this unit while it has at least 10 models. |
Selections: 5 Chaos Warriors [100pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS WARRIORS, Battleline
Unit: Chaos Warriors, Unit Abilities: Aspiring Champion, Legions of Chaos
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Warriors | 5" | 2 | 6 | 4+ |
| Unit Abilities | Ability Details |
|---|---|
| Aspiring Champion | 1 model in this unit can be an Aspiring Champion. Add 1 to the Attacks characteristic of that model’s melee weapons. |
| Legions of Chaos | You can re-roll save rolls for attacks that target this unit while it has at least 10 models. |
Selections: Chaos Spawn [50pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS SPAWN, MARK OF CHAOS, Other
Unit: Chaos Spawn, Unit Abilities: Writhing Tentacles
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Spawn | 2D6" | 5 | 10 | 5+ |
| Unit Abilities | Ability Details |
|---|---|
| Writhing Tentacles | If you roll a double when determining the number of attacks made by Freakish Mutations, add 1 to hit and wound rolls for attacks made by the attacking model until the end of the phase. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Freakish Mutations | Melee | 1" | 2D6 | 4+ | 4+ | - | 1 |
Selections: Chaos Spawn [50pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS SPAWN, MARK OF CHAOS, Other
Unit: Chaos Spawn, Unit Abilities: Writhing Tentacles
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Spawn | 2D6" | 5 | 10 | 5+ |
| Unit Abilities | Ability Details |
|---|---|
| Writhing Tentacles | If you roll a double when determining the number of attacks made by Freakish Mutations, add 1 to hit and wound rolls for attacks made by the attacking model until the end of the phase. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Freakish Mutations | Melee | 1" | 2D6 | 4+ | 4+ | - | 1 |
Selections: Chaos Spawn [50pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS SPAWN, MARK OF CHAOS, Other
Unit: Chaos Spawn, Unit Abilities: Writhing Tentacles
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Spawn | 2D6" | 5 | 10 | 5+ |
| Unit Abilities | Ability Details |
|---|---|
| Writhing Tentacles | If you roll a double when determining the number of attacks made by Freakish Mutations, add 1 to hit and wound rolls for attacks made by the attacking model until the end of the phase. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Freakish Mutations | Melee | 1" | 2D6 | 4+ | 4+ | - | 1 |
Selections: Chaos Spawn [50pts]
Categories: CHAOS, MORTAL, SLAVES TO DARKNESS, CHAOS SPAWN, MARK OF CHAOS, Other
Unit: Chaos Spawn, Unit Abilities: Writhing Tentacles
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Chaos Spawn | 2D6" | 5 | 10 | 5+ |
| Unit Abilities | Ability Details |
|---|---|
| Writhing Tentacles | If you roll a double when determining the number of attacks made by Freakish Mutations, add 1 to hit and wound rolls for attacks made by the attacking model until the end of the phase. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Freakish Mutations | Melee | 1" | 2D6 | 4+ | 4+ | - | 1 |
Selections: Arcanite Cabal [140pts]
Categories: Battalion
Battalion Abilities: Master of the Cults
Selections: 6. Sword of Judgement
Categories: CHAOS, MORTAL, DAEMON, TZEENTCH, HERO, FATEMASTER, Leader, Artefact
Artefact: Sword of Judgement, Command Abilities: Lord of Fate, Unit: Fatemaster, Unit Abilities: Fly, Hovering Disc of Tzeentch, Soulbound Shield, Weapon: Fireglaive of Tzeentch, Teeth and Horns
Selections: 2. Arcane Suggestion
Categories: CHAOS, MORTAL, TZEENTCH, HERO, WIZARD, MAGISTER, Leader
Magic: Magister, Spell: Arcane Bolt, Arcane Suggestion, Bolt of Change, Mystic Shield, Unit: Magister, Unit Abilities: Magic-touched, Weapon: Tzeenchian Runestaff, Warpsteel Sword
Selections: 1. Bolt of Tzeentch
Categories: CHAOS, MORTAL, TZEENTCH, HERO, WIZARD, MAGISTER, Leader
Magic: Magister, Spell: Arcane Bolt, Bolt of Change, Bolt of Tzeentch, Mystic Shield, Unit: Magister, Unit Abilities: Magic-touched, Weapon: Tzeenchian Runestaff, Warpsteel Sword
| Artefact | Artefact Details |
|---|---|
| Sword of Judgement | Pick one of the bearer’s melee weapons to be a Sword of Judgement. If the hit roll for an attack with that weapon against a HERO or MONSTER is 6+, that attack inflicts D6 mortal wounds and the attack sequence ends (do not make a wound or save roll). |
| Battalion Abilities | Battalion Ability Details |
|---|---|
| Master of the Cults | After armies have been set up but before the first battle round begins, pick 1 friendly model from this battalion. For the rest of the battle, each time you spend a Destiny Dice to replace a dice roll for that model, roll a dice. On a 2+, you can replace one of your remaining Destiny Dice with that roll. |
| Command Abilities | Command Ability Details |
|---|---|
| Lord of Fate | You can use this command ability at the start of your hero phase. If you do so, pick a friendly model with this command ability. Until your next hero phase, you can re-roll hit rolls for attacks made by friendly TZEENTCH units wholly within 9" of this model. |
| Magic | Cast/Unbind | Spells Known |
|---|---|---|
| Magister | 1/1 | Arcane Bolt, Mystic Shield and Bolt of Change |
| Spell | Casting Value | Description |
|---|---|---|
| Arcane Bolt | 5 | If successfully cast, pick an enemy unit within 18" of the caster that is visible to them. That unit suffers 1 mortal wound. If the casting roll was 10 or more, the unit suffers D3 mortal wounds instead. |
| Arcane Suggestion | 8 | If successfully cast, pick 1 enemy unit within 18" of the caster that is visible to them and pick one of the following effects: It’s Hopeless: That unit suffers D3 mortal wounds. Drop Your Weapons: Subtract 1 from hit and wound rolls for attacks made by that unit until your next hero phase. Kneel: Subtract 1 from save rolls for attacks that target that unit until your next hero phase. |
| Bolt of Change | 7 | If successfully cast, pick 1 enemy unit within 18" of the caster and visible to them. That unit suffers D3 mortal wounds. If any models were slain by this spell, before removing the first slain model, you can add 1 TZEENTCH CHAOS SPAWN to your army and set it up within 3" of the slain model’s unit. |
| Bolt of Tzeentch | 7 | If successfully cast, pick 1 enemy unit within 18" of the caster and visible to them. That unit suffers D6 mortal wounds. This spell cannot be cast more than once per turn, even though it appears in both the Lore of Fate and the Lore of Change. |
| Mystic Shield | 6 | If successfully cast, pick a friendly unit within 18" of the caster that is visible to them. Re-roll save rolls of 1 for that unit until your next hero phase. |
| Unit | Move | Wounds | Bravery | Save |
|---|---|---|---|---|
| Fatemaster | 16" | 6 | 8 | 4+ |
| Magister | 6" | 5 | 7 | 5+ |
| Unit Abilities | Ability Details |
|---|---|
| Fly | This unit can fly. |
| Hovering Disc of Tzeentch | Add 2 to save rolls for attacks made with melee weapons that target this model unless the attacking unit is a MONSTER or can fly. |
| Magic-touched | If the casting roll for this model is a double and the casting attempt is successful and not unbound, this model can attempt to cast 1 extra spell this turn. If it does so and the extra casting roll is a double, the spell automatically fails and this model is slain. If a friendly MAGISTER is slain by this effect, roll a dice before removing the model. On a 2+, 1 TZEENTCH CHAOS SPAWN is added to your army. Set up the TZEENTCH CHAOS SPAWN anywhere on the battlefield within 1" of the slain MAGISTER and more than 3" from any enemy units. |
| Soulbound Shield | Each time this model is affected by a spell or endless spell, you can roll a dice. If you do so, on a 4+, ignore the effects of that spell or endless spell on this model. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage |
|---|---|---|---|---|---|---|---|
| Fireglaive of Tzeentch | Melee | 2" | 3 | 3+ | 4+ | - | D3 |
| Teeth and Horns | Melee | 1" | D3 | 4+ | 3+ | -1 | D3 |
| Tzeenchian Runestaff | Missile | 18" | 1 | 3+ | 4+ | - | D3 |
| Warpsteel Sword | Melee | 1" | 1 | 4+ | 4+ | - | 1 |
Categories: Allegiance
Selections: The Guild of Summoners
Categories: TZEENTCH
Battle Trait: Locus of Change, Masters of Destiny, Scions of the Exiled, Summon Daemons of Tzeentch, Command Abilities: The Guild of Summoners, Fate Point Summoning Table - Unit: 00. 1 Exalted Greater Daemon of Tzeentch, 01. 1 Lord of Change, 02. 1 Fateskimmer, 03. 10 Pink Horrors of Tzeentch, 04. 1 Burning Chariot of Tzeentch, 05. 3 Flamers of Tzeentch, 06. 1 Changecaster, 07. 1 Exalted Flamer of Tzeentch, 08. 1 Fluxmaster, 09. 10 Blue Horrors of Tzeentch, 10. 10 Brimstone Horrors of Tzeentch, 11. 3 Screamers of Tzeentch
| Battle Trait | Battle Trait Details |
|---|---|
| Locus of Change | Subtract 1 from hit rolls for attacks made with melee weapons that target friendly TZEENTCH DAEMON units that are wholly within 12" of a friendly TZEENTCH DAEMON HERO. |
| Masters of Destiny | After armies have been set up but before the first battle round begins, roll 9 dice and put them to one side. These are your Destiny Dice. Destiny Dice can be used during the battle to change the results of different dice rolls. The number of Destiny Dice you have at any time must never exceed 9. Instead of making one of the rolls from the list below for a friendly TZEENTCH unit, you can spend one or more of your Destiny Dice. The result of the roll you would have made is replaced with the value on the Destiny Dice you spent. For example, instead of rolling a dice to see how far a TZEENTCH unit would run in the movement phase, you could spend a Destiny Dice to determine the distance. If you spent a Destiny Dice with a value of 5, the unit would run 5". Destiny Dice can be spent in place of the following dice rolls: • Casting rolls • Unbinding rolls • Dispelling rolls • Run rolls • Charge rolls • Hit rolls • Wound rolls • Save rolls • Any roll that determines the Damage characteristic of a missile or melee weapon • Battleshock tests Note that each Destiny Dice spent only allows you to replace a single dice roll. If you want to replace a 2D6 roll (such as a casting roll or charge roll), you must spend 2 Destiny Dice. In addition, any rolls that have been replaced count as unmodified rolls and cannot be re-rolled or modified further. |
| Scions of the Exiled | If your army has the GUILD OF SUMMONERS keyword, your Fate Points can only be used to summon LORD OF CHANGE units. Instead of a Fate Point cost of 30, a GUILD OF SUMMONERS LORD OF CHANGE costs 9 Fate Points to summon the first time, 18 Fate Points the second time, and 30 Fate Points each time thereafter for the rest of the battle. |
| Summon Daemons of Tzeentch | You can summon units of TZEENTCH DAEMONS to the battlefield if you collect enough Fate Points. Each time a casting roll (made by friend or foe) is successful and the spell is not unbound, you receive 1 Fate Point. Once per turn, at the end of your movement phase, you can spend Fate Points to summon 1 unit from the list opposite to the battlefield and add it to your army. Each unit you summon costs a number of Fate Points as shown on the list, and you can only summon a unit if you have enough Fate Points to do so. Summoned units must be set up wholly within 12" of a friendly TZEENTCH HERO and more than 9" from any enemy units. Immediately after you have set up the summoned unit, subtract its cost from the total number of Fate Points you have. |
| Command Abilities | Command Ability Details |
|---|---|
| The Guild of Summoners | You can use this command ability in your hero phase. If you do so, pick a friendly GUILD OF SUMMONERS WIZARD wholly within 9" of a friendly GUILD OF SUMMONERS HERO or wholly within 18" of a friendly GUILD OF SUMMONERS HERO that is a general. Add 1 to casting rolls for that WIZARD until the end of that phase. A unit cannot benefit from this command ability more than once per turn. |
| Fate Point Summoning Table - Unit | Cost |
|---|---|
| 00. 1 Exalted Greater Daemon of Tzeentch | 45 |
| 01. 1 Lord of Change | 30 |
| 02. 1 Fateskimmer | 24 |
| 03. 10 Pink Horrors of Tzeentch | 20 |
| 04. 1 Burning Chariot of Tzeentch | 18 |
| 05. 3 Flamers of Tzeentch | 18 |
| 06. 1 Changecaster | 12 |
| 07. 1 Exalted Flamer of Tzeentch | 12 |
| 08. 1 Fluxmaster | 12 |
| 09. 10 Blue Horrors of Tzeentch | 10 |
| 10. 10 Brimstone Horrors of Tzeentch | 10 |
| 11. 3 Screamers of Tzeentch | 10 |
Selections: 2000 Points - Battlehost
Categories: Game Options, Battlehost
Selections: Origin: Ulgu
Categories: Realm of Origin
Categories: ENDLESS SPELL, BALEWIND VORTEX, Malign Sorcery
Rules: Balewind Vortex
Spell: Summon Balewind Vortex, Unit Abilities: Against the Aetheric Wind, Arcane Invigoration
| Spell | Casting Value | Description |
|---|---|---|
| Summon Balewind Vortex | 6 | WIZARDS with a Wounds characteristic of 9 or more, that are part of a unit of two or more models, or that are already on a Balewind Vortex, cannot attempt to cast this spell. If successfully cast, set up a Balewind Vortex model within 1" of the caster and more than 3" from any enemy models, and then place the caster on the upper platform. |
| Unit Abilities | Ability Details |
|---|---|
| Against the Aetheric Wind | Add 1 to save rolls for a WIZARD on a Balewind Vortex. |
| Arcane Invigoration | A WIZARD on a Balewind Vortex can attempt to cast an additional spell in each of their hero phases (including the turn in which the Summon Balewind Vortex spell was cast), and you can add 6" to the range of any spells that the WIZARD casts. |
Categories: ENDLESS SPELL, MALEVOLENT MAELSTROM, SHYISH, Malign Sorcery
Spell: Summon Malevolent Maelstrom, Unit Abilities: Devourerer of Sorcery and Souls, Empowered by Shyish, Fly, Morbid Detonation, Predatory
| Spell | Casting Value | Description |
|---|---|---|
| Summon Malevolent Maelstrom | 7 | If successfully cast, set up a Malevolent Maelstrom model wholly within 18" of the caster. |
| Unit Abilities | Ability Details |
|---|---|
| Devourerer of Sorcery and Souls | If a WIZARD successfully casts a spell within 12" of a Malevolent Maelstrom, and that spell is not unbound, the Malevolent Maelstrom will attempt to steal the energies of the spell. Make an additional unbinding roll for that spell. If this unbinding roll is successful, the spell is unbound and 1 energy point is allocated to this model. In addition, 1 energy point is allocated to this model for each unit destroyed within 6" of this model. |
| Empowered by Shyish | If your battle is taking place in the Realm of Death, allocate 1 additional energy point to this model at the start of each battle round. |
| Fly | This unit can fly. |
| Morbid Detonation | At the end of each battle round, roll a dice for each Malevolent Maelstrom and add the number of energy points allocated to that model to the roll. On a 7+ that Malevolent Maelstrom explodes. Each unit within 3D6" of the model that exploded suffers D3 mortal wounds. The model that exploded is then dispelled. |
| Predatory | A Malevolent Maelstrom is a predatory endless spell. It can move up to 8" and can fly. |
Rules: At the Double, Forward to Victory, Inspiring Presence
Categories: Battalion
Battalion Abilities: Scions of Change, Spell: Stolen Sting
| Battalion Abilities | Battalion Ability Details |
|---|---|
| Scions of Change | At the start of your hero phase, you can pick 1 unit from this battalion that has 9 or more models. If you do so, until the end of that phase, that unit can attempt to cast 1 spell and attempt to dispel 1 endless spell. It knows the Stolen Sting spell: |
| Spell | Casting Value | Description |
|---|---|---|
| Stolen Sting | 7 | If successfully cast, pick 1 enemy unit within 18" of the caster and visible to them. Worsen the Rend characteristic of that unit’s melee weapons by 1 until your next hero phase. A unit cannot be affected by this spell more than once per turn. |
Categories: ENDLESS SPELL, Malign Sorcery
Spell: Summon Darkfire Daemonrift, Unit Abilities: Billowing Energies, Fly, Fuelled by Sorcery, Predatory, Reality Screams
| Spell | Casting Value | Description |
|---|---|---|
| Summon Darkfire Daemonrift | 6 | Only SLAVES TO DARKNESS WIZARDS can attempt to cast this spell. If successfully cast, set up a Darkfire Daemonrift model wholly within 9" of the caster. |
| Unit Abilities | Ability Details |
|---|---|
| Billowing Energies | After this model has moved, each unit that has any models it passed across, and each other unit that is within 1" of it at the end of its move, suffers D3 mortal wounds. |
| Fly | This unit can fly. |
| Fuelled by Sorcery | Add 1 to the number of mortal wounds inflicted by this endless spell for each WIZARD and each other ENDLESS SPELL within 12" of this model after it has moved. |
| Predatory | A Darkfire Daemonrift is a predatory endless spell. It can move up to 12" and can fly. |
| Reality Screams | When this model is set up, the player who set it up can immediately make a move with it. |
At the Double: You can use this command ability after you make a run roll for a friendly unit that is within 6" of a friendly HERO, or 12" of a friendly HERO that is a general.
Forward to Victory: You can use this command ability after you make a charge roll for a friendly unit that is within 6" of a friendly HERO, or 12" of a friendly HERO that is a general. If you do so, re-roll the charge roll.
Inspiring Presence: You can use this command ability at the start of the battleshock phase. If you do so, pick a friendly unit that is within 6" of friendly HERO, or 12" of a friendly HERO that is a general. That unit does not have to take battleshock tests in that phase.
Balewind Vortex:
As long as the Balewind Vortex remains on the battlefield, the caster and the Balewind Vortex are treated as being a single model
from the caster’s army that uses the caster’s warscroll as well as the endless spells rules. It is treated as an enemy model by the opposing player’s army. A WIZARD on a Balewind Vortex cannot move.
If a WIZARD on a Balewind Vortex attempts to dispel it, the attempt is automatically successful (do not roll any dice). This uses up the additional spell that the WIZARD would have received in that hero phase, and still counts as the single attempt they can make to dispel an endless spell this hero phase, but allows them to use any remaining spell casting attempts normally.
If the WIZARD on the Balewind Vortex is slain, then the Balewind Vortex is immediately dispelled and removed from play along with the slain WIZARD.
If a Balewind Vortex is dispelled and the WIZARD on it has not been slain, set up the WIZARD wholly within 6" of the Balewind
Vortex and more than 3" from any enemy models, and then remove the Balewind Vortex model from play. If it is impossible
to set up the WIZARD, then the WIZARD is slain.
Created with BattleScribe