and other aspects of tables that are independent of type and method of implementation.
Define "n" for time-complexity. record? key?
A hash table, or a hash map, is a data structure that associates keys with values. The primary operation it supports efficiently is a lookup: given a key (e.g. a person's name), find the corresponding value (e.g. that person's telephone number). It works by transforming the key using a hash function into a hash, a number that the hash table uses to locate the desired value. This hash maps directly to a bucket in the array of key/value pairs, hence the name hash map. The mapping method lets us directly access the storage location for any key/value pair.
Create a hash table with n buckets.
Returns the value of the element for the given key. The key must be some comparable type.
Sets the element of the array for the given key to be equal to new-value. The key must be some comparable type.
Remove the element for the given key from the hash table. The key must be some comparable type.
A small phone book as a hash table.
Hash tables are often used to implement associative arrays, sets and caches. Like arrays, hash tables provide constant-time O(1) lookup on average, regardless of the number of items in the table. The (hopefully rare) worst-case lookup time in most hash table schemes is O(n). Compared to other associative array data structures, hash tables are most useful when we need to store a large numbers of data records.
Hash tables may be used as in-memory data structures. Hash tables may also be adopted for use with persistent data structures; database indexes commonly use disk-based data structures based on hash tables.
Hash tables are also used to speed-up string searching in many implementations of data compression.
In computer chess, a hash table can be used to implement the transposition table.
A good hash function is essential for good hash table performance. A poor choice of hash function is likely to lead to clustering behavior, in which the probability of keys mapping to the same hash bucket (i.e. a collision) is significantly greater than would be expected from a random function. A nonzero probability of collisions is inevitable in any hash implementation, but the number of operations to resolve collisions usually scales linearly with the number of keys mapping to the same bucket, so excess collisions will degrade performance significantly. In addition, some hash functions are computationally expensive, so the amount of time (and, in some cases, memory) taken to compute the hash may be burdensome.
Choosing a good hash function is tricky. The literature is replete with poor choices, at least when measured by modern standards. For example, the very popular multiplicative hash advocated by Knuth in The Art of Computer Programming (see reference below) has particularly poor clustering behavior. However, since poor hashing merely degrades hash table performance for particular input key distributions, such problems go undetected far too often.
The literature is also sparse on the criteria for choosing a hash function. Unlike most other fundamental algorithms and data structures, there is no universal consensus on what makes a "good" hash function. The remainder of this section is organized by three criteria: simplicity, speed, and strength, and will survey algorithms known to perform well by these criteria.
Simplicity and speed are readily measured objectively (by number of lines of code and CPU benchmarks, for example), but strength is a more slippery concept. Obviously, a cryptographic hash function such as SHA-1 would satisfy the relatively lax strength requirements needed for hash tables, but their slowness and complexity makes them unappealing. In fact, even a cryptographic hash does not provide protection against an adversary who wishes to degrade hash table performance by choosing keys all hashing to the same bucket. For these specialized cases, a universal hash function should be used instead of any one static hash, no matter how sophisticated.
In the absence of a standard measure for hash function strength, the current state of the art is to employ a battery of statistical tests to measure whether the hash function can be readily distinguished from a random function. Arguably the most important such test is to determine whether the hash function displays the avalanche effect, which essentially states that any single-bit change in the input key should affect on average half the bits in the output. Bret Mulvey advocates testing the strict avalanche condition in particular, which states that, for any single-bit change, each of the output bits should change with probability one-half, independent of the other bits in the key. Purely additive hash functions such as CRC fail this stronger condition miserably.
Clearly, a strong hash function should have a uniform distribution of hash values. Bret Mulvey proposes the use of a chi-squared test for uniformity, based on power of two hash table sizes ranging from 21 to 216. This test is considerably more sensitive than many others proposed for measuring hash functions, and finds problems in many popular hash functions.
Fortunately, there are good hash functions that satisfy all these criteria. The simplest class all consume one byte of the input key per iteration of the inner loop. Within this class, simplicity and speed are closely related, as fast algorithms simply don't have time to perform complex calculations. Of these, one that performs particularly well is the Jenkins One-at-a-time hash, adapted here from an article by Bob Jenkins, its creator.
The avalanche behavior of this hash shown on the right. The image was made using Bret Mulvey's AvalancheTest in his Hash.cs toolset. Each row corresponds to a single bit in the input, and each column to a bit in the output. A green square indicates good mixing behavior, a yellow square weak mixing behavior, and red would indicate no mixing. Only a few bits in the last byte are weakly mixed, a performance vastly better than a number of widely used hash functions.
Many commonly used hash functions perform poorly when subjected to such rigorous avalanche testing. The widely favored FNV hash, for example, shows many bits with no mixing at all, especially for short keys. See the evaluation of FNV by Bret Mulvey for a more thorough analysis.
If speed is more important than simplicity, then the class of hash functions which consume multibyte chunks per iteration may be of interest. One of the most sophisticated is "lookup3" by Bob Jenkins, which consumes input in 12 byte (96 bit) chunks. Note, though, that any speed improvement from the use of this hash is only likely to be useful for large keys, and that the increased complexity may also have speed consequences such as preventing an optimizing compiler from inlining the hash function. Bret Mulvey analyzed an earlier version, lookup2, and found it to have excellent avalanche behavior.
One desirable property of a hash function is that conversion from the hash value (typically 32 bits) to an bucket index for a particular-size hash table can be done simply by masking, preserving only the lower k bits for a table of size 2k (an operation equivalent to computing the hash value modulo the table size). This property enables the technique of incremental doubling of the size of the hash table - each bucket in the old table maps to only two in the new table. Because of its use of XOR-folding, the FNV hash does not have this property. Some older hashes are even worse, requiring table sizes to be a prime number rather than a power of two, again computing the bucket index as the hash value modulo the table size. In general, such a requirement is a sign of a fundamentally weak function; using a prime table size is a poor substitute for using a stronger function.
If two keys hash to the same index, the corresponding records cannot be stored in the same location. So, if it's already occupied, we must find another location to store the new record, and do it so that we can find it when we look it up later on.
To give an idea of the importance of a good collision resolution strategy, consider the following result, derived using the birthday paradox. Even if we assume that our hash function outputs random indices uniformly distributed over the array, and even for an array with 1 million entries, there is a 95% chance of at least one collision occurring before it contains 2500 records.
There are a number of collision resolution techniques, but the most popular are chaining and open addressing.
In the simplest chained hash table technique, each slot in the array references a linked list of inserted records that collide to the same slot. Insertion requires finding the correct slot, and appending to either end of the list in that slot; deletion requires searching the list and removal.
Chained hash tables have advantages over open addressed hash tables in that the removal operation is simple and resizing the table can be postponed for a much longer time because performance degrades more gracefully even when every slot is used. Indeed, many chaining hash tables may not require resizing at all since performance degradation is linear as the table fills. For example, a chaining hash table containing twice its recommended capacity of data would only be about twice as slow on average as the same table at its recommended capacity.
Chained hash tables inherit the disadvantages of linked lists. When storing small records, the overhead of the linked list can be significant. An additional disadvantage is that traversing a linked list has poor cache performance.
Alternative data structures can be used for chains instead of linked lists. By using a self-balancing tree, for example, the theoretical worst-case time of a hash table can be brought down to O(log n) rather than O(n). However, since each list is intended to be short, this approach is usually inefficient unless the hash table is designed to run at full capacity or there are unusually high collision rates, as might occur in input designed to cause collisions. Dynamic arrays can also be used to decrease space overhead and improve cache performance when records are small.
Some chaining implementations use an optimization where the first record of each chain is stored in the table. Although this can increase performance, it is generally not recommended: chaining tables with reasonable load factors contain a large proportion of empty slots, and the larger slot size causes them to waste large amounts of space.
Hash collision resolved by linear probing (interval=1).
in which the interval between probes is fixed for each record but is computed by another hash function.
The main tradeoffs between these methods are that linear probing has the best cache performance but is most sensitive to clustering, while double hashing has poor cache performance but exhibits virtually no clustering; quadratic hashing falls in-between in both areas. Double hashing can also require more computation than other forms of probing. Some open addressing methods, such as last-come-first-served hashing and cuckoo hashing move existing keys around in the array to make room for the new key. This gives better maximum search times than the methods based on probing.
A critical influence on performance of an open addressing hash table is the load factor; that is, the proportion of the slots in the array that are used. As the load factor increases towards 100%, the number of probes that may be required to find or insert a given key rises dramatically. Once the table becomes full, probing algorithms may even fail to terminate. Even with good hash functions, load factors are normally limited to 80%. A poor hash function can exhibit poor performance even at very low load factors by generating significant clustering. What causes hash functions to cluster is not well understood, and it is easy to unintentionally write a hash function which causes severe clustering.
The following pseudocode is an implementation of an open addressing hash table with linear probing and single-slot stepping, a common approach that is effective if the hash function is good. Each of the lookup, set and remove functions use a common internal function findSlot to locate the array slot that either does or should contain a given key.
Rebuilding the table requires allocating a larger array and recursively using the set operation to insert all the elements of the old array into the new larger array. It is common to increase the array size exponentially, for example by doubling the old array size.
For all records in a cluster, there must be no vacant slots between their natural hash position and their current position (else lookups will terminate before finding the record). At this point in the pseudocode, i is a vacant slot that might be invalidating this property for subsequent records in the cluster. j is such as subsequent record. k is the raw hash where the record at j would naturally land in the hash table if there were no collisions. This test is asking if the record at j is invalidly positioned with respect to the required properties of a cluster now that i is vacant.
Another technique for removal is simply to mark the slot as deleted. However this eventually requires rebuilding the table simply to remove deleted records. The methods above provide O(1) updating and removal of existing records, with occasional rebuilding if the high water mark of the table size grows.
The O(1) remove method above is only possible in linearly probed hash tables with single-slot stepping. In the case where many records are to be deleted in one operation, marking the slots for deletion and later rebuilding may be more efficient.
They are simple to implement effectively and only require basic data structures.
From the point of view of writing suitable hash functions, chained hash tables are insensitive to clustering, only requiring minimization of collisions. Open addressing depends upon better hash functions to avoid clustering. This is particularly important if novice programmers can add their own hash functions, but even experienced programmers can be caught out by unexpected clustering effects.
If the hash table stores large records, about 5 or more words per record, chaining uses less memory than open addressing.
If the hash table is sparse (that is, it has a big array with many free array slots), chaining uses less memory than open addressing even for small records of 2 to 4 words per record due to its external storage.
This graph compares the average number of cache misses required to lookup elements in tables with chaining and linear probing. As the table passes the 80%-full mark, linear probing's performance drastically degrades.
They can be more space-efficient than chaining since they don't need to store any pointers or allocate any additional space outside the hash table. Simple linked lists require a word of overhead per element.
Insertions avoid the time overhead of memory allocation, and can even be implemented in the absence of a memory allocator.
Because it uses internal storage, open addressing avoids the extra indirection required for chaining's external storage. It also has better locality of reference, particularly with linear probing. With small record sizes, these factors can yield better performance than chaining, particularly for lookups.
They can be easier to serialize, because they don't use pointers.
On the other hand, normal open addressing is a poor choice for large elements, since these elements fill entire cache lines (negating the cache advantage), and a large amount of space is wasted on large empty table slots. If the open addressing table only stores references to elements (external storage), it uses space comparable to chaining even for large records but loses its speed advantage.
Generally speaking, open addressing is better used for hash tables with small records that can be stored within the table (internal storage) and fit in a cache line. They are particularly suitable for elements of one word or less. In cases where the tables are expected to have high load factors, the records are large, or the data is variable-sized, chained hash tables often perform as well or better.
Ultimately, used sensibly any kind of hash table algorithm is usually fast enough; and the percentage of a calculation spent in hash table code is low. Memory usage is rarely considered excessive. Therefore, in most cases the differences between these algorithms is marginal, and other considerations typically come into play.
If all of the keys that will be used are known ahead of time, and there are no more keys that can fit the hash table, perfect hashing can be used to create a perfect hash table, in which there will be no collisions. If minimal perfect hashing is used, every location in the hash table can be used as well.
Perfect hashing gives a hash table where the time to make a lookup is constant in the worst case. This is in contrast to chaining and open addressing methods, where the time for lookup is low on average, but may be arbitrarily large. There exist methods for maintaining a perfect hash function under insertions of keys, known as dynamic perfect hashing. A simpler alternative, that also gives worst case constant lookup time, is cuckoo hashing.
Perhaps the simplest solution to a collision is to replace the value that is already in the slot with the new value, or slightly less commonly, drop the record that is to be inserted. In later searches, this may result in a search not finding a record which has been inserted. This technique is particularly useful for implementing caching.
An even more space-efficient solution which is similar to this is use a bit array (an array of one-bit fields) for our table. Initially all bits are set to zero, and when we insert a key, we set the corresponding bit to one. False negatives cannot occur, but false positives can, since if the search finds a 1 bit, it will claim that the value was found, even if it was just another value that hashed into the same array slot by coincidence. In reality, such a hash table is merely a specific type of Bloom filter.
With a good hash function, a hash table can typically contain about 70%–80% as many elements as it does table slots and still perform well. Depending on the collision resolution mechanism, performance can begin to suffer either gradually or dramatically as more elements are added. To deal with this, when the load factor exceeds some threshold, we allocate a new, larger table, and add all the contents of the original table to this new table. In Java's HashMap class, for example, the default load factor threshold is 0.75.
1 + 2 + 4 + ... + n = 2n - 1.
Because the costs of the resizings form a geometric series, the total cost is O(n). But we also perform n operations to add the n elements in the first place, so the total time to add n elements with resizing is O(n), an amortized time of O(1) per element.
Allocate the new hash table, but leave the old hash table and check both tables during lookups.
Each time an insertion is performed, add that element to the new table and also move k elements from the old table to the new table.
To ensure that the old table will be completely copied over before the new table itself needs to be enlarged, it's necessary to increase the size of the table by a factor of at least (k + 1)/k during the resizing.
Linear hashing is a hash table algorithm that permits incremental hash table expansion. It is implemented using a single hash table, but with two possible look-up functions.
Another way to decrease the cost of table resizing is to choose a hash function in such a way that the hashes of most values do not change when the table is resized. This approach, called consistent hashing, is prevalent in disk-based and distributed hashes, where resizing is prohibitively costly.
Although hash table lookups use constant time on average, the time spent can be significant. Evaluating a good hash function can be a slow operation. In particular, if simple array indexing can be used instead, this is usually faster.
Hash tables in general exhibit poor locality of reference—that is, the data to be accessed is distributed seemingly at random in memory. Because hash tables cause access patterns that jump around, this can trigger microprocessor cache misses that cause long delays. Compact data structures such as arrays, searched with linear search, may be faster if the table is relatively small and keys are cheap to compare, such as with simple integer keys. According to Moore's Law, cache sizes are growing exponentially and so what is considered "small" may be increasing. The optimal performance point varies from system to system; for example, a trial on Parrot shows that its hash tables outperform linear search in all but the most trivial cases (one to three entries).
More significantly, hash tables are more difficult and error-prone to write and use. Hash tables require the design of an effective hash function for each key type, which in many situations is more difficult and time-consuming to design and debug than the mere comparison function required for a self-balancing binary search tree. In open-addressed hash tables it's even easier to create a poor hash function.
Additionally, in some applications, a black hat with knowledge of the hash function may be able to supply information to a hash which creates worst-case behavior by causing excessive collisions, resulting in very poor performance (i.e., a denial of service attack). In critical applications, either universal hashing can be used or a data structure with better worst-case guarantees may be preferable. For details, see Crosby and Wallach's Denial of Service via Algorithmic Complexity Attacks.
Extendible hashing and linear hashing are hash algorithms that are used in the context of database algorithms used for instance in index file structures, and even primary file organization for a database. Generally, in order to make search scalable for large databases, the search time should be proportional log N or near constant, where N is the number of records to search. Log N searches can be implemented with tree structures, because the degree of fan out and the shortness of the tree relates to the number of steps needed to find a record, so the height of the tree is the maximum number of disc accesses it takes to find where a record is. However, hash tables are also used, because the cost of a disk access can be counted in units of disc accesses, and often that unit is a block of data. Since a hash table can, in the best case, find a key with one or two accesses, a hash table index is regarded as generally faster when retrieving a collection of records during a join operation e.g.
i.e. If orders has a hash index on cust_id, then it takes constant time to locate the block that contains record locations for orders matching cust_id = X. (although, it would be better if the value type of orders was a list of order ids, so that hash keys are just one unique cust_id for each batch of orders, to avoid unnecessary collisions).
Extendible hashing and linear hashing have certain similarities: collisions are accepted as inevitable and are part of the algorithm where blocks or buckets of collision space is added ; traditional good hash function ranges are required, but the hash value is transformed by a dynamic address function : in extendible hashing, a bit mask is used to mask out unwanted bits, but this mask length increases by one periodically, doubling the available addressing space ; also in extendible hashing, there is an indirection with a directory address space, the directory entries being paired with another address (a pointer ) to the actual block containing the key-value pairs; the entries in the directory correspond to the bit masked hash value (so that the number of entries is equal to maximum bit mask value + 1 e.g. a bit mask of 2 bits, can address a directory of 00 01 10 11, or 3 + 1 = 4).
In linear hashing, the traditional hash value is also masked with a bit mask, but if the resultant smaller hash value falls below a 'split' variable, the original hash value is masked with a bit mask of one bit greater length, making the resultant hash value address recently added blocks. The split variable ranges incrementally between 0 and the maximum current bit mask value e.g. a bit mask of 2, or in the terminology of linear hashing, a "level" of 2, the split variable will range between 0 to 3. When the split variable reaches 4, the level increases by 1, so in the next round of the split variable, it will range between 0 to 7, and reset again when it reaches 8.
The split variable incrementally allows increased addressing space, as new blocks are added; the decision to add a new block occurs whenever a key-and=value is being inserted, and overflows the particular block the key-and-value's key hashes into. This overflow location may be completely unrelated to the block going to be split pointed to by the split variable. However, over time, it is expected that given a good random hash function that distributes entries fairly evenly amongst all addressable blocks, the blocks that actually require splitting because they have overflowed get their turn in round-robin fashion as the split value ranges between 0 - N where N has a factor of 2 to the power of Level, level being the variable incremented whenever the split variable hits N.
New blocks are added one at a time with both extendible hashing, and with linear hashing.
In extendible hashing, a block overflow ( a new key-value colliding with B other key-values, where B is the size of a block) is handled by checking the size of the bit mask "locally", called the "local depth", an attribute which must be stored with the block. The directory structure, also has a depth, the "global depth". If the local depth is less than the global depth, then the local depth is incremented, and all the key values are rehashed and passed through a bit mask which is one bit longer now, placing them either in the current block, or in another block. If the other block happens to be the same block when looked up in the directory, a new block is added, and the directory entry for the other block is made to point to the new block. Why does the directory have entries where two entries point to the same block ? This is because if the local depth is equal to the global depth of the directory, this means the bit mask of the directory does not have enough bits to deal with an increment in the bit mask length of the block, and so the directory must have its bit mask length incremented, but this means the directory now doubles the number of addressable entries. Since half the entries addressable don't exist, the directory simply copies the pointers over to the new entries e.g. if the directory had entries for 00, 01, 10, 11, or a 2 bit mask, and it becomes a 3 bit mask, then 000 001 010 011 100 101 110 111 become the new entries, and 00's block address go to 000 and 001 ; 01's pointer goes to 010 and 011, 10 goes to 100 and 101 and so on. And so this creates the situation where two directory entries point to the same block. Although the block that was going to overflow, now can add a new block by redirecting the second pointer to a newly appended block, the other original blocks will have two pointers to them. When it is their turn to split, the algorithm will check local vs global depth and this time find that the local depth is less, and hence no directory splitting is required, only a new block be appended, and the second directory pointer moved from addressing the previous block to addressing the new block.
Let m = N times 2 ^ level ; if h is the original hash value, and old block number = h mod m, and now the new block number is h mod ( m * 2 ), because m * 2 = N times 2 ^ (level+1), then the new block number is either h mod m if (h / m) is even so dividing h/m by 2 leaves a zero remainder and therefore doesn't change the remainder, or the new block number is ( h mod m ) + m because h / m is an odd number, and dividing h / m by 2 will leave an excess remainder of m, + the original remainder. ( The same rationale applies to extendible hashing depth incrementing ).
As above, a new block is created with a number a2, which will usually occur at +1 the previous a2 value. Once this is done, the split variable is incremented, so that the next a2 value will be again old a2 + 1. In this way, each block is covered by the split variable eventually, so each block is preemptively rehashed into extra space, and new blocks are added incrementally. Overflow blocks that are no longer needed are discarded, for later garbage collection if needed, or put on an available free block list by chaining.
When the split variable reaches ( N times 2 ^ level ), level is incremented and split variable is reset to zero. In this next round, the split variable will now traverse from zero to ( N times 2 ^ (old_level + 1 ) ), which is exactly the number of blocks at the start of the previous round, but including all the blocks created by the previous round.
As can be seen, extendible hashing requires space to store a directory which can double in size.
Since the space of both algorithms increase by one block at a time, if blocks have a known maximum size or fixed size, then it is straight forward to map the blocks as blocks sequentially appended to a file.
In extendible hashing, it would be logical to store the directory as a separate file, as doubling can be accommodated by adding to the end of the directory file. The separate block file would not have to change, other than have blocks appended to its end.
Header information for linear hashing doesn't increase in size : basically just the values for N, level, and split need to be recorded, so these can be incorporated as a header into a fixed block size linear hash storage file.
However, linear hashing requires space for overflow blocks, and this might best be stored in another file, otherwise addressing blocks in the linear hash file is not as straight forward as multiplying the block number by the block size and adding the space for N,level, and split.
In the next section, a complete example of linear hashing in Java is given, using a in memory implementation of linear hashing, and code to manage blocks as files in a file directory, the whole contents of the file directory representing the persistent linear hashing structure.
While many programming languages already provide hash table functionality, there are several independent implementations worth mentioning.
Google Sparse Hash The Google SparseHash project contains several hash-map implementations in use at Google, with different performance characteristics, including an implementation that optimizes for space and one that optimizes for speed. The memory-optimized one is extremely memory-efficient with only 2 bits/entry of overhead.
MCT provides hashtables similar to Google's dense_hash_map, but without restriction on contained values; it also comes with exception safety and support for C++0x features.
A number of runtime languages and/or standard libraries use hash tables to implement their support for associative arrays because of their efficiency.
The file - block management routines aren't there, so this could be added in to make this a real implementation of a database hash index.
A full page is split according to the (local depth)th bit, first by collecting all the directory indices pointing to the full page, updating the pointers according to the d bit being 0 or 1 corresponding to first and second new pages, then reloading all the key-values after hashing each key and using the d bit of each hash to see which page to allocate to. The local depth of each new page is one greater than the old page's local depth, so that the next d bit can be used next time when splitting.
A direct Java translation of the above python code, tested to work.
This code evolved out of a need for a bigger Java HashMap. Originally, a Java HashMap standard object was used as a Map to index a heap like database file ( DBF format). But then, a file was encountered with so many records that the OutOfMemoryError was being thrown, so linear hashing seemed like a reasonably simple algorithm to use as a disk based index scheme.
Initially, linear hashing was implemented behind the Java Map interface, mainly the put(k,v) and get(k,v) methods. Generics was used, in order not to get too involved in the key and value details.
Custom dumps to System.err was used to verify that blocks were being created, filled, and overflow blocks were of expected number if they existed ( no. = 1 ). This was all done in a purely in-memory implementation.
Later, the standard Java decoupling was introduced, where the original LHMap2 class accepted listeners to events, such as when a block was needed. The listener was then implemented as a block file manager, loading blocks into the block list of the memory LHMap2 object whenever a null block was encountered on the block list, and checking whether virtual machine runtime free memory was low, and retiring blocks using just a basic first-to-last-listed cache removal algorithm (not least recently used (LRU), not least often used ) by saving them to disk file, and then actively invoking the system garbage collector.
Because an application use case existed, which was to externally index a large DBF table, this use case was used as the main test harness for the algorithm implementation.
* @return a bucket number.
Each block is a file in this implementation, because blocks are variably sized here to account for generics and variable sized key and value pairs, and overflow blocks are conceptual, not actual as on disc storage, because the block's contents and that of its overflow bucket(s), are saved as a list of alternating keys and values in this implementation. Methods for saving and loading to Object streams was used in a standard java customized object persistence way by implementing the Externalizable interface in the Block data class.
* This class manages the LHMap2 class block disk swapping, and saves and load an instance of the LHMap2 class.
* are avoided when the heap space is low by putting blocks back on files, and garbage collecting them.
System.err.println("free memory =" + freeMemory + " limit "
↑ The simplest hash table schemes -- "open addressing with linear probing", "separate chaining with linked lists", etc. -- have O(n) lookup time in the worst case where (accidentally or maliciously) most keys "collide" -- most keys are hashed to one or a few buckets. Other hash table schemes -- "cuckoo hashing", "dynamic perfect hashing", etc. -- guarantee O(1) lookup time even in the worst case. When a new key is inserted, such schemes change their hash function whenever necessary to avoid collisions.
↑ Wikipedia: Comparison of programming languages (mapping) shows how many programming languages provide hash table functionality.


3D Tiger Wallpapers For Desktop 3183 Hd Wallpapers This Wallpaper was viewed 635 times and downloaded 0 times. 3D Tiger Wallpapers For Desktop 3183 Hd Wallpapers Uplaoded by epha in April 7, 2013, 5:06 pm . This image have 1024x768px resolution and 304.13 KB of data Approximately 188.6 MB bandwith was consumed for this wallpaper. Last View for this Wallpaper is March 30, 2019, 2:18 am. You can download it for FREE and use it for your wallpaer on your desktop, tablet or other device you have. Have enjoy with this wallpaper :D . Click FULL SIZE for Download This Wallpaper.


text:
by Ingvar Kenne
type C photograph	(frame: 103.0 cm x 103.0 cm, sheet: 100.0 cm x 100.0 cm)
Collette Dinnigan AO (b. 1965), designer and company director, was born in South Africa and settled in Australia in 1985 after a period in New Zealand, where she studied fashion design at the Wellington Polytechnic. After working in the costume department of ABC TV she launched her own label in 1990, concentrating on lingerie. She soon moved into ready–to–wear, becoming the first Australian fashion designer to mount a full–scale parade in Paris in 1995. Her delicate, luxurious collections were stocked by more than eighty stores world–wide and hers is the only Australian fashion house to be recognised by the Chambre du Syndicale des Prêt-à-Porter Couturiers et des Créateurs de Mode. In 2001 she launched a range of luxury low-cost lingerie for English chain store Marks and Spencer; in 2008 she did the same for Target stores in Australia. In 2006 she became the first Australian to feature in television and print advertising campaigns for American Express. She launched a diffusion line, Collette by Collette Dinnigan, to mark her twentieth year in 2010. Having spent 24 years in fashion, the mother-of-two announced the closure of her business in late 2013, but continues to work across the field of design.
Ingvar Kenne (b.1965) completed his Bachelor of Fine Arts at the University of Photography in Gothenburg, Sweden before moving to Sydney in 1991. Over the past ten years he has worked in editorial and advertising photography in Australasia and Europe. His photographs have appeared in publications including POL Oxygen, Australian Style, Financial Review Magazine and Oyster Magazine in Australia and Blender Magazine (New York), the Guardian (UK), and BMW Magazine internationally. Kenne maintains his own photographic practice alongside his contractual assignments. He has been included in a number of group exhibitions, held more than a dozen solo shows and published two books on his photographic projects.
Gift of the artist 2006
National Portrait Gallery, Canberra, 25 Hours 31 minutes, 22-23rd of May 2009, 23 May 2009 (printed 2010) by Ingvar Kenne
Johnson Pilton Walker, 25 Hours 31 minutes, 22-23rd of May 2009, 23 May 2009 (printed 2010) by Ingvar Kenne
Paul van Ratingen - Portrait of Johnson Pilton Walker, Inside the National Portrait Gallery, Canberra, 25 Hours 31 minutes, 22-23rd of May 2009, 23 May 2009 (printed 2010) by Ingvar Kenne
Kiong Lee - Portrait of Johnson Pilton Walker, Inside the National Portrait Gallery, Canberra, 25 Hours 31 minutes, 22-23rd of May 2009, 23 May 2009 (printed 2010) by Ingvar Kenne
Glossy 2
Faces, Magazines, Now
Previous exhibition, 2005 – 2006
Following the success of Glossy: Faces, Magazines, Now in 1999 the National Portrait Gallery again highlights the huge array of contemporary portraiture in the pages of magazines.
Ingvar Kenne	(age 40 in 2005)
Collette Dinnigan	(age 40 in 2005)
Ingvar Kenne (14 portraits)
Architecture, design and fashion

redpajama_set_name: RedPajamaCommonCrawl


text:
Edinburgh mob tale unites three Rankin characters
Arts & Entertainment // Books
By Colette Bancroft Feb. 12, 2016
1of2"Even Dogs in the Wild," by Ian Rankin
There's one striking detail in Scottish writer Ian Rankin's new novel, "Even Dogs in the Wild," that reminds us the story is set outside the United States. After someone shoots the son of a crime boss in Edinburgh, a city of roughly half a million people, one of the investigators suggests it's a copycat of an earlier shooting. His Police Scotland colleague is incredulous:
"'Meaning what?' Fox enquired. 'Another gunman? That hardly sounds likely. How many nine-millimetre pistols are being lugged around the city?'"
In an American city, you could probably find two in any given block, but in Scotland two in the same city sounds improbable - even to police officers.
Not that the lack of guns keeps people from getting up to no good. Rankin is a master of atmospheric, dark crime fiction, and in "Even Dogs in the Wild," his 31st book, he's in top form.
The novel unites Rankin's three long-running series characters: Police Scotland Detective Inspector Siobhan Clarke, DI Malcolm Fox and recently retired former DI John Rebus.
The last, of course, is Rankin's great creation. Fierce and often intimidating on the job and a curmudgeon in his personal life, Rebus is an unrepentant hard drinker and smoker, a lover of music and books, a man with few friends and an unshakable devotion to doing the right thing - and he's much smarter than most people take him to be.
'Even Dogs in the Wild'
By Ian Rankin.
Little, Brown and Company, 352 pp., $26.
Clarke is Rebus' protégé and closest friend, as married to the job as he is but more ambitious - and hence always fighting the sexism she faces on the force. Fox is odd man out, a former investigator for the Complaints and Conduct department - cops who investigate other cops, an unpopular lot. He and Rebus were very much at odds in earlier books, but now he's working with Clarke (on whom he has an unrequited crush) on murder cases, and Rebus tolerates him with sardonic amusement.
After a mysterious and chilling prologue, the book's plot opens with Clarke looking into the murder of Lord David Minton. The 78-year-old lord, retired from a high-powered prosecutor's post, has been found beaten and strangled in the study of his posh home in Edinburgh. A window is broken, but nothing seems to have been stolen. Folded up in his wallet is a hand-printed note: "I'M GOING TO KILL YOU FOR WHAT YOU DID."
That evening, while Clarke is telling Fox about the Minton case over dinner, she gets a surprising call: reports of a gunshot. The target, who's unharmed but unwilling to talk to police, is another surprise - and another one of Rankin's most intriguing recurring characters: Big Ger Cafferty, once Edinburgh's top crime boss, now (maybe) retired.
Cafferty and Rebus have been nemeses for so long that they've developed a grudging, wary sort of friendship. Clarke figures the only way to get the old gangster to open his door is to call in Rebus.
Her former colleague is not enjoying retirement one bit. "He'd made a little list at the kitchen table: join the library, explore the city, take a holiday, see films, start going to concerts. There was a coffee ring on the list, and soon he would crumple it into the bin."
When Clarke calls, Rebus is at Cafferty's house in 15 minutes, cracking, "The bullet didn't hit you, then? … More's the pity."
Cafferty insists he has no idea who might have shot at him: "I'm too long out of the game to have enemies." But, despite there being no connection he knows of between himself and Minton, Cafferty received the same note: "I'M GOING TO KILL YOU FOR WHAT YOU DID."
When Fox is assigned to assist an undercover team from Glasgow doing surveillance on one of that city's crime families, he sees what look like connections to Cafferty. The Starks, father and son, seem to be hunting for a truck driver who has absconded with their property - but they might also be looking to push into Edinburgh, now the territory of a younger crime boss named Darryl Christie, who has a complicated relationship with Cafferty.
But what does that organized crime turf war have to do with Minton, or with the murder of a lottery winner with no criminal past? Does the surveillance team have a member in deep cover, infiltrating the Stark operation - and if so, who is it? Where did that gun come from, and where has it gone? What was Acorn House, and why is its history "plutonium on a floppy disk"? And who on earth was the revenant in the prologue?
Following Rebus, Clarke and Fox as they make the connections between present crimes and those deep in the past is as satisfying as one of those pints Rebus likes to sip at the corner table by the fire in the Oxford Bar.
Colette Bancroft wrote this review for the Tampa Bay Times.
Houston book events: July 14-20
Bestsellers: July 14
Poem: Stones
Malin Persson Giolito looks for elusive justice in new thriller 'Beyond All...
We know about E. Jean Carroll's rape accusation. How is the rest of her book?
Houston book events: July 7-13
Bestsellers: July 7
Poem: Children in Clint


Light is a very clean & minimal portfolio template. Light has awesome tyopgraphy for attractive look. Light is identical for any type or portfolio, personal blog or any small business website.
Light includes awesome jQuery effects, jQuery sliders & it has portfolio filter functionality. Light is built with latest version of twitter bootstrap.
Light has photo streaming feature form dribble & instagram. Light includes google map API so everyone can embed fullscreen map by using location.
The template is very responsive for any type of layout such of mobile, tablet or bigger display like iMac.
Product support is our main target, not selling. Just drop us an email or open a thread in support area, we'll glad to help you.


Both Clayton and Lindsay Ainger are committed and dedicated to living with excellence! Their unique story of how they met, the way they choose to live their lives and how they help individuals and companies to embody and live with excellence is an inspiring story of exciting high's and overcoming challenging low's that will captivate your imagination, move your heart and motivate you to take action!
Both Clayton and Lindsay are available to speak at your corporate events either together or separately.
For more detailed information visit either Clayton or Lindsay's detail page.


text:
Real Estate Offers
TOP REAL ESTATE
Wilanow
Miasteczko Wilanów
Submit a real estate offer
Prestigious estate near the Palace in Wilanów
Warsaw, Wilanów, Stanisław Kostka Potocki
nr 488884
EUROVILLA offers a segment for rent located in an intimate, guarded estate near the Palace in Wilanów.
The house has an area of - 268 m2, it has been perfectly divided into guest and private zones.
The big advantage is the beautifully landscaped garden where you can relax after a hard day's work.
The house is located in a gated, guarded estate, near the Wilanów Palace. Property residents have access to all services such as schools, kindergartens, restaurants and recreational areas. In a very close proximity to the Palace in Wilanów,
FINISHING STANDARD
The house has been finished with high-quality materials. It has a lot of open spaces, which makes us feel very comfortable in it. The interior is finished in a uniform style.
- a living room with a fireplace, from which there is an exit to the garden,
- a functionally furnished kitchen,
- hall.
- two bedrooms,
- four wardrobes,
- two bathrooms (hydromassage bathtub)
XNUMXnd floor:
- two bedrooms
- hall
- a terrace of about 20m2
- garage for two cars with direct access to the house.
- large laundry room,
- two wardrobes
- pantry,
Luxurious, new, fully equipped and furnished segment located in the prestigious part of Wilanów in the vicinity of the Wilanów Palace, on a closed and guarded estate.
There is a fitness club in the estate.
This announcement is only information and does not constitute an offer within the meaning of Art. 66 § 1 of the Civil Code. _______________________________________________________________________________________________
The proprietary copyrights to the photograph of the real estate are vested only in the following companies: Eurovilla Wilanów Sp .z oo, Eurovilla Miasteczko Wilanów Sp .z oo, Eurovilla Mokotów Sp .z oo, Eurovilla Śródmieście Sp .z oo
Copying, processing and dissemination of the photos without the consent of the Eurovilla Companies is prohibited and will be considered a breach of the Act of February 4, 1994 on copyright and related rights.
+48 885 300 200...
a.dabrowski@eurovilla.pl
Eurovilla Wilanów
We will contact you
Please leave your contact details
Pursuant to Art. 7 sec. 2 of the Regulation of the European Parliament and the EU Council 2016/679 of 27.04.2016/95/46 on the protection of individuals with regard to the processing of personal data and on the free movement of such data, and repealing Directive 02/956 / EC (general regulation on data protection), I express express and voluntary consent to the processing of my personal data by EUROVILLA Wilanów Sp. z o. o. with its seat in Warsaw (10-XNUMX, ul. Stanisława Lentza XNUMX) for purposes related to the implementation of the application, answering, preparing and sending a commercial offer. I acknowledge that the lack of consent to the processing of my personal data for the above-mentioned purposes will prevent the implementation of the application, and that I have the right to withdraw my consent at any time, which, however, will not affect the lawfulness of the processing which was carried out on the basis of consent before its withdrawal. I have been informed about my rights regarding the processing of my personal data (information clause).
I consent to the processing of my personal data by EUROVILLA Wilanów sp. Z oo with its seat in Warsaw (02-956, ul. Stanisława Lentza 10) for the purpose of sending information by electronic means in accordance with the Act of 18.07.2002 on the provision of electronic services and the Act of 16.07.2004 Telecommunications Law to the provided e-mail address or mobile phone number.
ul. Lentza 10
info@eurovilla.pl
Eurovilla Miasteczko Wilanów
ul. Sarmacka 16 (corner of ul. Klimczaka)
newwilanow@eurovilla.pl
Eurovilla Mokotow
st. Puławska 111A
mokotow@eurovilla.pl
Eurovilla Śródmieście
ul. Vain 7/9
office@eurovilla.pl
Latest house offers:
Many arrangement possibilities, unusual layout
Detached, 5 rooms, garage for 2 cars, To be arranged
Keys received, developer status
Bright edge segment in Mokotów!
Latest apartment offers:
To move in, 2 balconies, 3rd floor
Penthouse with terrace of 140 m2
New beautiful apartment
Bright, modern, with a large loggia
A unique apartment building.
Latest for rent:
The entire office building in a great location
area from 270 to 1350 m2 ul. drilling
Large parking lot, at ul. Wiertnicza, after renovation!
Large Parking, Fitness, Office, Company Headquarters
© Copyright 2023 Eurovilla


Butchers blocks are hugely practical and a great way to finish a kitchen, contact us to discuss your bespoke butchers block project. Choose from our favourites as shown below or design your own, maybe you're looking for additional shelves, extra hooks, deeper drawers, you want to change the size or feature a removeable chopping board. Whatever you want we can design your perfect piece, call us on 01538 380 988 for a quote.
tell us what you want and we'll make it for you.
and can provide additional storage, work surface areas and seating options.
To complement your new kitchen island, why not explore our handmade chairs and bar stools. Choose from our favourites online, or design your own. Download a copy of the Mudd & Co brochure for more information. All bespoke kitchen islands from Mudd & Co are guaranteed against manufacturing defects in materials or workmanship for 10 years.
If you're ready to talk to us about handmade furniture, you can contact us on 01538 380 988, email us or book an appointment to view our showroom or discuss your latest project in depth. We look forward to making your vision a reality. Designed by you…Made by us!
Ready to find out more about our handmade butchers blocks?
Contact us to discuss your requirements with a member of our friendly team. Looking for something a little bigger? View our Kitchen Islands here.


Truncating issue while parsing XML with SAX Parser.
Truncating issue while parsing XML with SAX Parser. I am Parsing one xml file and after parsing I have to enter the data into the database using... could understand was while calling the event handler of the SAX Parser i.e.
Read Complex XML using DOM/SAX Parser.


text:
'''Sira kan syfta på:

Sira (islam), ett begrepp inom islam
Sira (ort), en ort i Agder fylke, Norge
Sira (språk), ett språk
Sira (stiftelse), en stiftelse
Sira (titel), en titel

Sīra, en ort i Karnataka, Indien
Sira Taluk, ett underdistrikt i Karnataka, Indien

redpajama_set_name: RedPajamaWikipedia


text:
PIJARBEY
DID ONE LAST TOUR OF HIS PRIME REFUGE
CHINA AND CRIME
Home ᐳ News ᐳ Brief ᐳ Could New Anti-Corruption App Reduce Graft in Mexico?
The Incorruptible app lets citizens report acts of corruption
Could New Anti-Corruption App Reduce Graft in Mexico?
MEXICO / 20 OCT 2017 BY PARKER ASMANN EN
A number of civil organizations in Mexico have introduced a new mobile phone application designed for citizens to report corruption, something that is becoming more common elsewhere in the region despite uncertainty surrounding their efficacy.
The application, called Incorruptible (Incorruptible), was launched by the Mexican civil organization Political Edge (Borde Político) in collaboration with other civil organizations like Mexican Transparency (Transparencia Mexicana), El Financiero reported.
SEE ALSO: Mexico News and Profiles
Manuel Silva Coache, the application's coordinator, told El Financiero that the app is "not only about making complaints, but will enable research and the diffusion of anti-corruption efforts."
In addition to reporting on corruption, citizens can also follow up on the complaints they have filed, track what other complaints have been made and even work with local officials, according to El Financiero.
Dante Preisser, the head of a joint unit that works with Mexico's National Anti-Corruption System within the Civil Service Secretariat (Secretaría de la Función Pública - SFP), said that the involvement of local officials is key given the prevalence of corruption at the local level.
However, the SFP is still configuring specifically how local officials will be involved.
This isn't the first app introduced in Mexico aimed at tackling corruption. In May of this year, the SFP introduced the Reporting Corruption app as an "agile and secure" way for citizens to file complaints against government officials.
Mexico is on a growing list of countries in Latin America that have launched mobile phone applications designed to either improve citizen security or help combat corruption.
An application designed to report robberies, drug trafficking and police corruption was launched in July of this year in Argentina's Buenos Aires province, where the provincial police known as the "bonaerense" have long had a reputation for corruption.
In Brazil, a citizen-created security app was launched in July of this year in Rio de Janeiro to help alert citizens about where crimes and shootings were occurring in an effort to keep them out of the crossfire. A similar app was launched by Amnesty International in Brazil during the 2016 Olympic games.
Still, despite a growing number of countries in the region introducing these new technologies to tackle corruption and improve security, such apps have failed to produce significant results so far. For example, violence in Rio de Janeiro has spiraled out of control, forcing residents to flee the city as a result. Civil society remains enraged by widespread graft in Mexico, while a recent customs fraud scheme in Argentina suggests that corruption remains a serious problem.
Tools such as these are only one step in the fight against the endemic corruption that pervades culture and institutions across the region.
MEXICO WHAT WORKS
WHAT WORKS
Mexico Migrant Massacre Linked to Sophisticated Guatemala Smuggling Ring
GUATEMALA / 4 FEB 2022
A former Guatemala mayor and his family have been accused of smuggling more than a dozen migrants later massacred in…
Bomb Threats: Mexico's Crime Groups Turn to Explosives
HOMICIDES / 23 SEP 2021
A package bomb that killed a restaurateur and his manager underscores the escalating use of explosives – and the terror…


text:
Tim Tebow Says Pre-Draft Meeting With Bill Belichick Was 'Phenomenal Experience'
by jeff-howe on Fri, Dec 16, 2011 at 11:14AM
FOXBORO, Mass. — Broncos quarterback Tim Tebow reflected Wednesday upon his 2010 pre-draft visit with Patriots head coach Bill Belichick, and the former Florida star said it was beneficial to him as a football player and a person.
"It was a great opportunity to get to know a great coach," Tebow said. "Just to be around coach Belichick and all the great coaches there in New England, I felt like it was a great opportunity to try to learn. So I tried to take as much as I possibly could and learn from a great coach — one of the best to coach. It was a phenomenal opportunity for me, and I'm very grateful they were even that interested in me."
What exactly did Tebow try to take out of the experience?
"It was just picking up a lot of different things, just from certain things and how they go about it, different things he's looking for, just a lot of little things that you try to pick up as a player, from demeanors, to attitudes, to certain things from fundamentals," Tebow said. "I think it was just a great opportunity to learn a lot, and I feel like I really did."
Belichick has been friends with former Florida head coach Urban Meyer for several years, so he spent a decent amount of time on the Gators' campus. Through that, Belichick had gotten to know Tebow, tight end Aaron Hernandez, linebacker Brandon Spikes and defensive end Jermaine Cunningham.
The pre-draft meeting earned a considerable amount of buzz throughout the NFL, and it might have even improved Tebow's draft stock. The Broncos, who were led by former New England offensive coordinator Josh McDaniels, selected Tebow with the 25th pick in 2010.
Belichick was also complimentary of the pre-draft meeting.
"We brought Tim in and spent a whole day with him here in addition to our other interactions with him," Belichick said. "He's an impressive young man. He had great success in college. I think all his attributes are pretty well-documented. He's a strong guy, smart, works hard, a great leader, great football character. He made a lot of big plays for Florida and won two national championships."


text:
Home » Good Living
Ripon College names five area students to dean's list
Five area students have been named to the spring semester dean's list at Ripon College.
To qualify for the dean's list, students must achieve a 3.4 grade point average or higher.
Students from Grafton include Michael Hartman, Kylie Tomashek and Madison Tomashek.
Students from Port Washington are Katherine Lemkuil and Brianna Schnell.
Read more about Ripon College names five area students to dean's list
Port Historical Society online auction ends Sept. 18
The Port Washington Historical Society's online auction will close at 7 p.m. Friday, Sept. 18.
The closing ceremony will include a 30-minute virtual toast, celebration, reverse auction and paddle raise hosted by former Society President Jeff Morgan.
Bidding will end after the celebration, at 7:45 p.m. Sept. 18.
Read more about Port Historical Society online auction ends Sept. 18
Six area students graduate from UW-La Crosse
Six local students graduated from the University of Wisconsin-La Crosse this spring.
Students from Port Washington and their degrees are Natalie Bozikowski, who graduated with honors and earned a bachelor of science degree in biology; Joel Van Pietersom, bachelor of science in accountancy; and Jacquelyn Watry, bachelor of science in psychology.
Read more about Six area students graduate from UW-La Crosse
Girl Scouts Council seeks new members
The Girl Scouts of Manitou Council is in the process of forming online and in-person troops.
There will be several events in the coming weeks for prospective Scouts:
n At 6 p.m. Monday, Sept. 21, there will be a meeting for prospective Saukville Scouts at the Grady Park pavilion. Those who are unable to attend should contact Anna Doll at (920) 565-4575 or anna@gsmanitou.org.
Read more about Girl Scouts Council seeks new members
Belgium student graduates from University of Nebraska
Johnathan Leeson of Belgium graduated from the University of Nebraska-Lincoln on Saturday, Aug. 15.
Leeson earned a master of business administration degree from the Office of Graduate Studies.
Read more about Belgium student graduates from University of Nebraska
Voter registrations, blood drive set at Port library
The Niederkorn Library in Port Washington will be home to several community efforts in the coming weeks.
The library at 316 W. Grand Ave. will serve as a voter registration station from 10 a.m. to 6 p.m. Monday through Friday, Sept. 21 to 25.
Self-service voter stations will be set up to help residents register online, check their voter registration status, request an absentee ballot or update their address.
The station will be equipped with resources and online links compiled by the League of Women Voters of Ozaukee County.
Read more about Voter registrations, blood drive set at Port library
Local student earns academic scholarship
Jakob Pedersen of Grafton has received a Gerald D. Woldt Undergraduate Nursing Scholarship at the University of Wisconsin-Eau Claire.
The College of Nursing and Health Sciences has awarded 82 academic undergraduate and graduate nursing students during the 2020-21 school year.
Read more about Local student earns academic scholarship
Pasta is perfect as summer turns to autumn
There's nothing better — and easier — than a baked pasta dish as summer begins to turn to fall.
After all, just thinking about a baked ziti or homemade macaroni and cheese is enough to get most people's mouths watering.
And in this age of Covid-19, when people are spending more time at home and in the kitchen, it might be tempting to try your hand at homemade pasta.
Read more about Pasta is perfect as summer turns to autumn
Plant Deflopper would be just the ticket for droopy fall gardens
Mr. Much More Patient, also known as the picker-upper of our yard, offered a rare suggestion for the topic of this week's column. This is highly unusual as the yard maintenance roles in our house have always been clear. I manage everything related to the garden, and he is in charge of all lawn-related items. Fortunately, this also includes anything on the lawn, which means that my frantic weeding sessions in which all manner of detritus is tossed on the lawn becomes part of his kingdom as it is expelled from mine.
Read more about Plant Deflopper would be just the ticket for droopy fall gardens
Luxembourger mysteries revealed!
For Kevin Wester, the virus that is making history is also helping preserve it.
The Belgium native, who has dedicated much of his life to telling the story of Luxembourg ancestors and connecting people to their original homeland, has published a book titled "Lake Church, Wisconsin, A Pictorial History."
It's a work Wester had been hoping to complete for decades as he compiled information more than a century old.
"I decided three years ago I'm not getting any younger. I have to do it," the 56-year-old Milwaukee resident said.
Read more about Luxembourger mysteries revealed!


text:
Songs, Gusii -- Kenya. : Swahili rumba / Golden Sounds Band. 2004 1
Songs, Hawaiian. : Unwritten literature of Hawaii; the sacred songs of the hula. / Collected and translated, with notes and an account of the hula. 1965 1
Songs (High voice) : Vocal music. Selections http://id.loc.gov/authorities/names/no98006435 2004 1
Songs (High voice), Unaccompanied. 2
Songs (High voice) with chamber orchestra. 6
Songs (High voice) with continuo. 4
Songs (High voice) with electronics. : Works. Selections http://id.loc.gov/authorities/names/n2003085650 2004 1
Songs (High voice) with guitar. : Songs. Selections http://id.loc.gov/authorities/names/n92047163 2004 1
Songs (High voice) with harp. : Works. Selections http://id.loc.gov/authorities/names/n80017321 2004 1
Songs (High voice) with instrumental ensemble. 33
Songs (High voice) with instrumental ensemble -- Scores and parts. : Deutsche Lieder, op. 103 http://id.loc.gov/authorities/names/n79033852 1971 1
Songs (High voice) with instrumental ensemble -- Texts. : Ayres. Texts 1609 1
Songs (High voice) with lute. 2
Songs (High voice) with orchestra. 22
Songs (High voice) with orchestra -- Scores. : Knoxville: summer of 1915 : for voice and orchestra / Samuel Barber. 1952 1
Songs (High voice) with percussion. : Works. Selections 1999 1
Songs (High voice) with piano. 59
Songs (High voice) with string ensemble. : Works. Selections http://id.loc.gov/authorities/names/no97073557 2004 1
Songs (High voice) with string orchestra. : Vocal music. Selections http://id.loc.gov/authorities/names/n97116921 2004 1
Songs (High voice) with string orchestra -- Scores and parts. : Vocal music. Selections. German & English 1956 1
Songs (High voice) with vihuela. : Canzone villanesche alla napolitana and villotte / Adrian Willaert and his circle. Edited by Donna G. Cardamone. 1978 1
Songs (High voice) with violin. : Songs. Selections http://id.loc.gov/authorities/names/n2005004022 2004 1
Songs (High voice) with woodwind ensemble. : Voices from Elysium. 1998 1
Songs -- History and criticism. 8
Songs, Hopi -- Texts. : Hopi katsina songs / Emory Sekaquaptewa ; Kenneth C. Hill ; Dorothy K. Washburn. 2015 1
Songs in literature. 2
Songs -- Indexes. : Song index; an index to more than 12,000 songs in 177 song collections comprising 262 volumes and supplement, 1934. / Assisted by Phyllis Crawford. 1966 1
Songs -- Instrumental settings. 2
Songs -- Interpretation (Phrasing, dynamics, etc.) 2
Songs, Irish. : Irish songs and ballads / by Alfred Perceval Graves. 1880 1
Songs, Irish -- Ireland -- History and criticism. : The melodic tradition of Ireland / James R. Cowdery. 1990 1
Songs, Irish -- Texts. : Songs and ballads / by Samuel Lover. 1858 1
Songs, Italian. 7
Songs, Italian -- Italy. : La flora, arie &c. antiche italiane. 1949 1
Songs, Italian -- Texts. : Masters of the Italian art song : word-by-word and poetic translations of the complete songs for voice and piano / by Timothy LeVan. 1990 1
Songs -- Juvenile fiction. : The wheels on the bus / Maryann Kovalski. 1987 1
Songs, Korean -- History and criticism. : Hearts of pine : songs in the lives of three Korean survivors of the Japanese "comfort women" / Joshua D. Pilzer. 2012 1
Songs -- Latin America -- 20th century -- Bibliography. : A guide to the Latin American art song repertoire : an annotated catalog of twentieth-century art songs for voice and piano / editied by Maya Hoover ; with contributions by Stela M. Brandão [and others]. 2010 1
Songs, Latin (Medieval and modern) : Carmina Burana. 2004 1
Songs, Logooli -- History and criticism -- 20th century. : Music in Kenyan Christianity : Logooli Religious Song. 2013 1
Songs (Low voice) with chamber orchestra. : Symphonies, no. 14, op. 135 http://id.loc.gov/authorities/names/no97004686 2004 1
Songs (Low voice) with orchestra. : Works. Selections 2004 1
Songs (Low voice) with piano. 8
Songs (Low voice) with string orchestra. : Shadow of the swan http://id.loc.gov/authorities/names/no2004096933 2004 1
Mahler, Gustav, 1860-1911. Songs. : Mahler's voices : expression and irony in the songs and symphonies / Julian Johnson. 2009 1
Songs (Medium voice) : Vocal music. Selections http://id.loc.gov/authorities/names/no98006435 2004 1
Songs (Medium voice) with chamber orchestra. : Instrumental music. Selections http://id.loc.gov/authorities/names/no98006632 2004 1
Songs (Medium voice) with continuo. : Nuove musiche http://id.loc.gov/authorities/names/n79113025 1970 1
Songs (Medium voice) with instrumental ensemble. 14
Songs (Medium voice) with lute. : German lute songs. 2004 1


Let me tell you what the fuss is all about. Everything you can do on the disk, you can do on the marudai 2 – 3 times faster! And, there are lots of cool techniques you can do on the marudai that you really can't do on a disk!
If you're excited to give it a try and want to experience a wide variety of techniques over two amazing days, this workshop is for you!
If you have some previous marudai experience and want to become a more efficient and confident braider, this workshop is for you, too! Focus on improving your form and gain a better understanding of the point-of-braiding. You don't really know a braid, until you can unbraid it!
On the first day of class, you'll make a sampler braid using four different braid structures – including two that can't be done on the disk. New braiders will focus on tama management and learning the braiding sequences. More experienced braiders will focus on improved braiding posture, form, and tension. In the afternoon you'll learn how to drop beads into the kongoh gumi braid structure (this is the basic round braid most people first learn on the disk) and make a beaded rope bracelet. You'll be amazed at how one simple motion easily and quickly locks the beads in place.
On the second day you'll finish up your beaded bracelet and work on a "beads a fiber" project. "Beads as Fiber" is a technique where rather than dropping the beads one at a time, you braid with the beads under tension as a continuous strand. What braid structure will you use? Choose from any of the structures you learned on day one!
The tuition for this fantastic two-day event is just $250. This workshop is limited to only eight students, so please call 520-209-1900 right away to sign up.
I hope you can join me for my Two-Day Intensive Marudai Workshop at Design & Adorn in Tucson.
Who should attend this workshop? There are no prerequisites to take this workshop, but we will be covering a lot of material in only 2 days. This course is recommended for highly motivated beginners and experienced braiders looking to take their skills to the next level.
Braid "Beads as Fiber" necklace using your favorite braid structure from yesterday.
*About Lunch:There are many places within walking distance or a very short drive from Design & Adorn. At the Grant/Swan intersection you'll find: AppleBee's, Panda Express, Jimmy Jonhn's, Chipoltle, Panera Bread, Smash Burger, La Salsa, Startbucks, and Dunkin Donuts. If you'd rather pack your lunch, you're welcome to keep it in our mini fridge.
Cancellation Policy: When you register for the workshop, we reserve a space just for you. Because of the small intimate nature of the workshop, 48 hours advance notice is required transfer to another course or to receive a store credit.
Coming from out of town? There are two hotels on Grant just 1/2 mile down the road from Design & Adorn.


text:
Canadian Refugee Procedure/The Board's inquisitorial mandate
Refugee Status Determination is said to be among the most difficult forms of adjudication, involving as it does fact-finding in regard to foreign conditions, cross-cultural and interpreted examination of witnesses, ever-present evidentiary voids, and a duty to prognosticate potential risks rather than simply to declare the more plausible account of past events.[1] Within this context, the process for Refugee Status Determination adopted in Canada is one where the Board has an inquisitorial mandate. The following are some of the contours of that mandate.
1 The Refugee Protection Division has an inquisitorial mandate
2 Refugee Status Determination is declaratory, not constitutive
3 A hearing becomes adversarial where the Minister is involved
4 The Member has wide latitude to question claimants in an inquisitorial process
5 A claimant has an onus to show that they meet the criteria to be recognized as a refugee
6 There is a shared duty of fact-finding in refugee matters
7 The Board must ensure that certain claimants are assisted to make their cases
7.1 Minors and the mentally incompetent
7.2 Claimants in detention
8 Evidence is primarily presented in written form in the Canadian process
9 The Board should consider the most up-to-date country conditions evidence
The Refugee Protection Division has an inquisitorial mandateEdit
The Board generally uses an inquisitorial, as opposed to adversarial, approach to decision-making. Rebecca Hamlin describes the contrast between these two decision-making approaches this way:
The adversarial style takes the shape of a triad: two disputants arguing their respective cases before a passive judge, who must resolve the dispute by deciding which case is more persuasive. In an adversarial process, justice is based on the premise that an impartial judge decides between competing versions of this story after hearing both sides argued forcefully. Unlike this courtroom-like setting, inquisitorial hearings are designed to be non-adversarial and non-legalistic, taking the form of a dyad between the person whose fate is to be decided and the person deciding it. The inquisitorial decision-maker is engaged in a conversation with the parties, and the facts must be discovered through a collaborative process of research and questioning. Justice is demonstrated through the decision-maker's commitment to an active investigatory process.[2]
The Refugee Protection Division has an inquisitorial mandate. The Board's Chairperson Guideline 7 describes a Member's inquisitorial mandate this way:
A member's role is different from the role of a judge. A judge's primary role is to consider the evidence and arguments that the opposing parties choose to present; it is not to tell parties how to present their cases. Case law has clearly established that the RPD has control of its own procedures. The RPD decides and gives directions as to how a hearing is to proceed. The members have to be actively involved to make the RPD's inquiry process work properly.[3]
A Member's role is inquisitorial since they not only hear whatever evidence comes before them, but, ultimately, must inform themselves sufficiently to "determine whether or not the [claimant] is a Convention refugee."[4]
Refugee Status Determination is declaratory, not constitutiveEdit
Recognizing someone as a refugee does not make the person a refugee. This is because refugee status determination is a declaratory, not constitutive act. As refugee lawyer David Matas writes, "a declaratory act recognizes someone to be what he is or always was. A constitutive act makes a person something he was not before. An asylum government cannot constitute someone to be a refugee, because he already is one."[5] In this way, a decision-maker errs when they fail to recognize a genuine refugee as such, and a decision-maker also errs when they do the converse by wrongly recognizing someone who is not a refugee as such. While, in principle, a state may grant asylum to anyone that it may so choose, regardless of whether or not they meet the criteria enshrined in the Refugee Convention, or any other international treaty,[6] such a wide-ranging power has not been delegated to Immigration and Refugee Board Members, who are restricted to recognizing cases where the applicable criteria in either s. 96 or s. 97 of the IRPA have been met. This modern conception of the refugee regime stands in contrast to pre-20th century views of asylum, where diplomatic and territorial asylum were considered to be constitutive acts such that it was the decision that made the person asking for asylum an asylee.[7]
A hearing becomes adversarial where the Minister is involvedEdit
While the Division's mandate is primarily conceived of as inquisitorial, in some cases the Minister intervenes in a claim and the process becomes an adversarial one. This properly constrains the Member's role. Madam Justice Tremblay-Lamer observed in Rivas v. Canada that in some situations, such as where exclusion is at issue, "it may be problematic for the tribunal to proceed without the Minister since the Minister usually has the burden of proof. As the applicant argues, it is a situation that can force the member to [translation] 'descend into the arena'."[8] As Lorne Waldman states in his looseleaf: "… Since the burden of proof falls squarely on the Minister, it is certainly arguable that it is not appropriate for tribunal members themselves to engage in an investigation with respect to the exclusion matters. For the tribunal members to do so would result in their becoming prosecutors seeking to establish if the claimant falls within the exclusion clauses."[9] Despite all of this, the jurisprudence recognizes that the Board may make a decision on the issue of exclusion without the Minister's participation,[10] and indeed that it may have an obligation to do so even where the Minister does not participate in a case. But once the Minister becomes involved, the hearing is seen to become an adversarial process, with both the Minister's Hearings Officer and the refugee claimant presenting evidence to establish or rebut the allegation of exclusion.[11] This may entail some limits on the Member's proper role, and this relates to the requirement in the RPD Rules that the hearing be suspended immediately upon notification to the Minister of possible exclusion (which see: Canadian Refugee Procedure/Exclusion, Integrity Issues, Inadmissibility and Ineligibility).
The Member has wide latitude to question claimants in an inquisitorial processEdit
The text Judicial Review of Administrative Action in Canada provides that particular latitude will be given to tribunals to question where the matter is not adversarial, as with most refugee proceedings:
Extensive and "energetic" questioning alone by tribunal members will not in itself give rise to a reasonable apprehension of bias. And particular latitude is likely to be given to tribunals operating in a non-adversarial setting, such as refugee determination hearings, where there is no one appearing to oppose the claim.[12]
The nature of the mandate that decision-makers have in inquisitorial RSD processes is summarized by Rebecca Hamlin as follows:
The inquisitorial form requires much more active decision makers. Instead of placing the responsibility for the collection of evidence and the presentation of arguments on the disputing parties themselves, the inquisitorial process combines the role of investigator and decision-maker into one. RSD is inquisitorial if the asylum seeker goes before a decision maker who both researches and decides the claim.[13]
That said, there are limits on appropriate questioning where a Member approaches questioning with a discriminatory or hostile attitude: Canadian Refugee Procedure/The right to an unbiased decision-maker#The tone and tenor of the decision-maker's involvement in the hearing.
A claimant has an onus to show that they meet the criteria to be recognized as a refugeeEdit
The Federal Court affirms that the burden of proof rests on a claimant to show that they meet the definition of a Convention Refugee or 'person in need of protection' in the Act.[14] The Irwin Law text Refugee Law notes that this burden flows from the general proposition in international law that an individual seeking admission to a state must justify their admission.[15] The UNHCR is of the view that this principle properly applies in the refugee context, stating that "the burden of proof in principle rests on the applicant".[16] The burden of proof was previously allocated differently in Canadian refugee law, but in 1988 Canada's legislature modified the immigration legislation to shift the burden of proof for making a claim onto the asylum seeker.[17]
The UNHCR Handbook provides that those examining a refugee claim should "ensure that the applicant presents his case as fully as possible and with all available evidence."[16] This does not mean that the Board member is obliged to undertake a freestanding inquiry into a claim; the Refugee Appeal Division has held that the following principles apply in the refugee determination context: "a decision-maker [is] entitled to proper notice as to what exactly [is] being advanced. It is not up to the decision-maker to ferret out points which might possibly assist an applicant."[18] One of the reasons for this is about judicial economy; indeed, it is said that "states have a right to a fair and efficient asylum procedure".[19]
Finally, in the Canadian system there exist legal issues where the burden of proof does not fall on the claimant, for example the Minister (or the Board, if the Minister is not participating in a hearing) bears the onus to establish a refugee claimant comes within one of the Convention's exclusion clauses.[20]
There is a shared duty of fact-finding in refugee mattersEdit
The United Nations High Commissioner for Refugees states in their handbook that there is a shared duty of fact-finding between a claimant and the examiner: "In most cases a person fleeing from persecution will have arrived with the barest necessities and very frequently even without personal documents. Thus, while the burden of proof in principle rests on the applicant, the duty to ascertain and evaluate all the relevant facts is shared between the applicant and the examiner."[21] States must consider persons exercising their right to asylum honestly and with due diligence so as to not violate their obligation of non-refoulement.[22]
One of the ways that this principle is implemented in practice is through packages of information that states compile on the countries of origin against which claimants are filing claims. It is an international norm that states ensure that precise and up-to-date information from various sources, such as the UNHCR and knowledgeable NGOs, is made available to the personnel responsible for examining applications and taking decisions.[23] This information will concern the general situation prevailing in the countries of origin against which applications of asylum are being made. That said, it is generally expected that a claimant will bring the passages that they are relying on to the attention of the decision maker; the Federal Court has held that the RPD "is not obliged to comb through every document listed in the National Document Package in the hope of finding passages that may support the claim and specifically address why they do not, in fact, support the claim".[24]
Another way that Canada fulfills this obligation is through claimant-specific research; the Board has committed to using the following process when engaging in such research: Canadian Refugee Procedure/The right to a fair hearing#Disclosure rights and obligations for the Board.
The Board must ensure that certain claimants are assisted to make their casesEdit
The United Nations High Commissioner for Refugees states in their handbook that the scope of the shared duty of fact-finding between a claimant and the examiner will vary depending on the nature of the case: "While the burden of proof in principle rests on the applicant, the duty to ascertain and evaluate all the relevant facts is shared between the applicant and the examiner. Indeed, in some cases, it may be for the examiner to use all the means at [their] disposal to produce the necessary evidence in support of the application."[21] What are those cases in which an examiner is to go to greater lengths to produce such evidence?
There is recognition that certain types of claimants may be particularly prejudiced in presenting their cases and that in such circumstances this may affect the onus that is placed on the claimant to provide corroboration of their claim. Indeed, the Code of Conduct for Members of the Immigration and Refugee Board of Canada provides that "Members must take reasonable measures to accommodate all participants in a proceeding so that they may participate effectively."[25] The UNHCR stipulates that "procedures should be in place to identify and assist asylum seekers with specific needs."[26]
Minors and the mentally incompetentEdit
One such category of claimants is those whose ability to appreciate the nature of the proceedings is severely impaired, either because they are incompetent or a minor. The failure to appoint a designated representative in a refugee protection proceeding, when one is required by the rules, is a violation of procedural fairness. As the court stated in Kurija v. Canada, "I place the proper representation of young immigrant claimants in refugee proceedings on the same plane as concerns over bias of a decision-maker. By this I mean that it is a 'knock-out' issue requiring the decision to be set aside, and furthermore an issue on which new evidence is admissible after the fact for the purpose of determining the partiality of the decision-maker, or in this case, the age of the claimant."[27] For further discussion of this, see: Canadian Refugee Procedure/Designated Representatives.
Furthermore, the UNHCR states that determining the claim of a minor "may call for a liberal application of the benefit-of-the-doubt principle".[28]
Claimants in detentionEdit
Another category of claimant which may require special assistance is those who are in detention at the time that they are preparing for, or attending, their refugee hearing. There are particular access to justice issues for claimants in detention, who have consistently been identified as being among those who have the greatest difficulty accessing legal counsel.[29] The UN Committee Against Torture, in its General Comment on non-refoulement, has listed this as one situation in which the burden of proof should reverse, and it should fall on the state to rebut the claimant's assertions where the author of the complaint has faced difficulties in obtaining evidence to substantiate their claim:[30]
[W]hen the complainant is in a situation where he/she cannot elaborate on his/her case, for instance, when the complainant has demonstrated that he/she has no possibility of obtaining documentation relating to his/her allegation of torture or is deprived of his/her liberty, the burden of proof is reversed and it is up to the State party concerned to investigate the allegations and verify the information on which the communication is based.[31]
For further discussion of this, see: Canadian Refugee Procedure/Claimant or Protected Person in Custody.
Evidence is primarily presented in written form in the Canadian processEdit
The purpose of an oral hearing before the Division is not for a claimant to repeat everything that is in their Basis of Claim form. The form is already to include "everything important for [their] claim" (as stated on the form) and as per the Chairperson Guidelines 7: Concerning Preparation and Conduct of a Hearing in the Refugee Protection Division, "questions that are answered by the claimant just repeating what is written in the BOC Form do not help the Member."[32] Instead, if the information on the form reliably establishes that the claimant meets the criteria to receive protection, then an oral hearing need not be held (See Rule 23: Canadian Refugee Procedure/Allowing a Claim Without a Hearing). The purpose of an oral hearing is to test the evidence presented, or lack thereof, where it is necessary to do so. This is in contrast to the practice in some other jurisdictions; for example, in Finland the practice is to have a portion of their asylum interviews in which the claimant is expected to state the grounds for claiming asylum and disclose evidence to support that claim through free narration.[33]
The Board should consider the most up-to-date country conditions evidenceEdit
Where a new National Documentation Package is released by the Board's research unit prior to a panel rendering a decision, the panel should consider it. In Zhao v. Canada, the court held that the Board should consider the most recent information on country conditions. The parties should have an opportunity to present submissions and evidence on the new documents if they include material new information.[34] As the Federal Court held in that case, "as a matter of procedural fairness, the [Board] simply had a duty to disclose the most recent NDP and to give the Applicants an opportunity to respond and make submissions on this matter."[35] That said, the RPD is not generally required to look for evidence on its own in these documents to support either the claimant's or Minister's arguments and propositions.[24] For an additional discussion of this issue, see: Canadian Refugee Procedure/Documents#The panel should consider the most recent National Documentation Package.
↑ Hathaway, James C., Rebuilding trust: a report of the Review of Fundamental Justice in Information Gathering and Dissemination at the Immigration and Refugee Board of Canada, Refugee Studies Centre, Publisher: Osgoode Hall Law School, 01/12/1993 <http://repository.forcedmigration.org/show_metadata.jsp?pid=fmo:1136> (Accessed April 14, 2020), page 6.
↑ Let Me Be a Refugee: Administrative Justice and the Politics of Asylum in the United States, Canada, and Australia. By Hamlin, Rebecca. New York: Oxford University Press, 2014, p. 18.
↑ Immigration and Refugee Board of Canada, Chairperson Guidelines 7: Concerning Preparation and Conduct of a Hearing in the Refugee Protection Division, Amended December 15, 2012 <https://irb-cisr.gc.ca/en/legal-policy/policies/Pages/GuideDir07.aspx#FailureA4> (Accessed January 26, 2020), section 2.2.
↑ David Matas with Ilana Simon, Closing the Doors: The Failure of Refugee Protection, Summerhill Press Ltd., Toronto, 1989, ISBN 0-920197-81-7, page 196.
↑ Roman Boed, The State of the Right of Aslyum in International Law, Duke Journal of Comparative & International Law, 5, 1-34 (1994), <https://scholarship.law.duke.edu/cgi/viewcontent.cgi?article=1342&context=djcil>, page 4.
↑ Andreas Zimmermann (editor), The 1951 Convention Relating to the Status of Refugees and its 1967 Protocol: A Commentary. Oxford University Press, 2011, 1799 pp, ISBN 978-0-19-954251-2, Regional Developments: Americas, written by Piovesan and Jubilut, at p. 213 (para. 29).
↑ Reyes Rivas v. Canada (Citizenship and Immigration), 2007 FC 317 (CanLII), para. 39.
↑ Immigration Law and Practice, Vol. 1, looseleaf (Markham, Ont.: Butterworths, 1992), at paragraph 8.511.
↑ Jennifer Bond, Nathan Benson, Jared Porter, Guilt by Association: Ezokola's Unfinished Business in Canadian Refugee Law, Refugee Survey Quarterly, hdz019, https://doi-org.ezproxy.library.yorku.ca/10.1093/rsq/hdz019, footnote 35.
↑ Judicial Review of Administrative Action in Canada (Brown and Evans, Toronto : Canvasback Publishing, 1998) at pages 11-31 and 11-32.
↑ Lugunda v. Canada (Minister of Citizenship and Immigration), 2005 FC 467 (CanLII), par. 17, <http://canlii.ca/t/1k43l#par17>, retrieved on 2020-04-15.
↑ Lassa Oppenheim, Oppenheim's International Law, 7th ed by Hersch Lauterpacht (London: Longmans Green, 1952) at 616, as cited in Martin David Jones and Sasha Baglay. Refugee Law (Second Edition). Irwin Law, 2017, page 144.
↑ a b UN High Commissioner for Refugees (UNHCR), Handbook on Procedures and Criteria for Determining Refugee Status and Guidelines on International Protection Under the 1951 Convention and the 1967 Protocol Relating to the Status of Refugees, April 2019, HCR/1P/4/ENG/REV. 4, available at: https://www.refworld.org/docid/5cb474b27.html [accessed 26 January 2020], page 45.
↑ Hamlin, Rebecca. Let Me Be a Refugee: Administrative Justice and the Politics of Asylum in the United States, Canada, and Australia. New York: Oxford University Press, 2014. Print. Page 49.
↑ X (Re), 2016 CanLII 107938 (CA IRB), para. 28.
↑ Ramirez v. Canada (Minister of Employment and Immigration), 1992 CanLII 8540 (FCA), [1992] 2 F.C. 306 (C.A.).
↑ a b United Nations High Commissioner for Refugees, Handbook on Procedures and Criteria for Determining Refugee Status 47 (1992).
↑ Kipras Adomaitis, The Right to Liberty in the Context of Migration, Masters Thesis, Mykolas Romeris Law School, <https://vb.mruni.eu/object/elaba:64888610/64888610.pdf> (Accessed July 19, 2020), page 21.
↑ a b Giraldo v. Canada (Citizenship and Immigration), 2020 FC 1052, para. 19.
↑ Kurija v. Canada (Citizenship and Immigration), 2013 FC 1158 (CanLII), par. 23, <http://canlii.ca/t/g1tm3#par23>, retrieved on 2020-03-15.
↑ UNHCR and Inter-Parliamentary Union, Refugee Protection: A Guide to International Refugee Law, <https://www.academia.edu/36070452/REFUGEE_PROTECTION_A_Guide_to_International_Refugee_Law?email_work_card=view-paper> (Accessed December 13, 2020).
↑ BC Public Interest Advocacy Centre, Refugee Reform Paper, <https://bcpiac.com/wp-content/uploads/2015/09/LFBC-Refugee-Reform-Paper-Final-July-30-2015-2.pdf>, page 3.
↑ Çalı, B., Costello, C., & Cunningham, S., Hard Protection through Soft Courts? Non-Refoulement before the United Nations Treaty Bodies, German Law Journal, 21(3) (2020), 355-384. doi:10.1017/glj.2020.28 (Accessed April 11, 2020), page 375.
↑ CAT, General Comment No. 4 (2017) on the Implementation of Article 3 of the Convention in the Context of Article 22, Paragraphs 15 and 16, U.N. Doc. CAT/C/GC/4 (Sep. 4, 2018), at para. 38.
↑ Eeva Puumala, Riitta Ylikomi & Hanna-Leena Ristimäki, Giving an account of persecution: The dynamic formation of asylum narratives, Journal of Refugee Studies 31(2), pp. 197-215 (2018) <https://s3.amazonaws.com/academia.edu.documents/61879698/Refugee_Studies_Puumala__Ylikomi_and_Ristimaki_accepted_version.pdf> (Accessed February 10, 2020), at page 7.
↑ Zhao v. Canada (Citizenship and Immigration), 2019 FC 1593 (CanLII), par. 12, <http://canlii.ca/t/j48rf#par12>, retrieved on 2020-04-01.
Retrieved from "https://en.wikibooks.org/w/index.php?title=Canadian_Refugee_Procedure/The_Board%27s_inquisitorial_mandate&oldid=3795299"