text:
Amended transportation regulations premature: beef industry
April 1, 2019 Livestock
Beef genomic selection finds its stride
Modified mob grazing makes efficient use of pasture
March 27, 2019 Livestock
Kicking antibiotics out of the dairy barn
Dairy farmers find opportunity in organic
AgDealer
Place a Free Ad on Farmzilla
MEMBERS GET MORE! | START CLAIMING YOUR BENEFITS NOW
The number of hours an animal can be on a truck will drop by 25 per cent to 36 hours without rest, feed and water
By Lois Harris
The need for shorter time on a truck could mean the need for more rest stop facilities. Photo: Stefonlinton/iStock/Getty Images
The federal government's amendments to the transport of animals regulations are causing controversy among cattle producers.
The new rules were introduced Feb. 20 and are scheduled to take effect in February 2020.
Why it matters: Cattle producers and truckers will have to adhere to new transportation regulations that may be premature, affecting animals and producers' bottom lines.
Trucking group still looking for clarification on new livestock transport rules
Award presented to recently retired OIMP executive director
Communicating the complexity of livestock farming
The main issue is that the number of consecutive hours cattle can be transported without rest, feed and water will drop to 36 from the current 48 and the rest period will increase to eight hours from five.
"We're disappointed the government didn't recognize that it has partnered with industry on ongoing research that's evaluating the stress of unloading and reloading cattle at a rest stop compared to finishing the journey," said Brady Stadnicki, policy analyst for the Canadian Cattlemen's Association (CCA).
While there is research indicating that cattle do experience stress during long haul trips, the current study, scheduled to be completed in 2021, is looking into how the cattle's health is affected by having to make rest stops, as well as their optimal duration.
"We're not sure if that's prolonging the stress or if it's adding benefit," Stadnicki said. "We wanted to have the regulations introduced after the research is complete to inform cattle outcomes and best practices."
The research is financed by Agriculture and Agri-Food Canada (AAFC), while the Canadian Food Inspection Agency (CFIA) (an arm of Health Canada) is responsible for the regulations.
"We're aware of the study," said Dr. Jaspinder Komal, Canada's chief veterinary officer, adding that the results will be reviewed and considered in future revisions of the regulations.
"We've looked at all the research and there are 400 articles posted on the open government database."
He said the CFIA also had to take into account international standards, and the practices currently used in Canada, but the central focus was the health and welfare of the animals, along with the geographic realities of this nation.
The regulations were last updated in 1977, and there have been extensive consultations with industry groups, animal welfare organizations and others around the new ones. Dr. Komal said the new regulations balance out the different interests.
Both Stadnicki and Dr. Komal agree that the industry, by and large, has a good reputation for transporting cattle.
Where they parted ways was in how much the industry is already adhering to the new rules. Dr. Komal said that 98 per cent of the industry is compliant. Stadnicki said that number includes all livestock — pigs and poultry as well as cattle.
The CCA contends that 99.9 per cent of cattle are reaching their destination injury-free, and the big changes being made under the amended regulations are not likely to improve on that number.
"We are not against looking at updating the regulations, and we're always willing to look at how things can be modernized and updated," Stadnicki said.
Adjustment made for industry concerns
Dr. Komal said that adjustments were made to the draft regulations to accommodate some of the industry's concerns, especially in terms of changing the prescriptive nature of some of them to more outcome-based. As an example, he said that there are no prescribed materials for ramps, provided they have a non-slip surface.
He also said that the new rules exempt fully equipped trucks — that are ventilated and in which animals can be fed and watered — from the time restrictions. Basically, the animals on these specially made conveyances have to "benefit from the same conditions as animals not held in containers," according to the regulation.
However, Stadnicki said that using them in a commercial setting is far away at this time.
The transportation time, though, is prescriptive, and Dr. Komal backed up the 36 hours by saying the CFIA analyzed the research and actually gave more time than other jurisdictions to include loading and offloading animals.
The United States has a maximum transport time of 28 hours, with extensions to 36 hours allowed by phone in extenuating circumstances, and the European standard is eight hours.
Managing quicker stops
Another industry issue is the facilities needed to accommodate the cattle at rest stops.
While most western cattle aren't coming to Ontario feedlots, Stadnicki said about 350,000 cattle make the trip annually.
"It's important that east-west trade in cattle continues and there's concern that there needs to be increased capacity in Thunder Bay or elsewhere to take care of it," he said, adding that the CCA raised this problem with the CFIA during the consultations.
As to the next steps for the CCA, Stadnicki said they will continue analyzing the revised regulations and engaging with the government before they come into effect next February.
Lois Harris's recent articles
Amended transportation regulations premature: beef industry April 1, 2019
Genomic best practices from committed testers February 21, 2019
Optimizing dairy farm returns February 19, 2019
Livestock, canadian food inspection agency
Federally licensed university abattoir upgraded
Livestock, animal welfare
Poultry housing changes could increase risk of disease
What's the future for Ontario's beef herd?
Livestock, animal welfare, Livestock transportation
Improved trailers good for livestock welfare
Animal welfare a focus during new hog barn construction
News, animal welfare
Higher penalties, more enforcement officers in new in new animal welfare system
Stories from our other publications
Canadian Cattlemen
Calving date shifting in Ontario
Manitoba Co-operator
Short feed triggers Hay Disaster Benefit for second year
The Western Producer
Beef competitiveness threatened
GFM Network News
Starbucks to add more plant-based food in latest green push
9 hours ago Crops
U.S. grains: Corn, soy fall as traders await Chinese buying
U.S. livestock: Hogs, cattle ease amid uncertain Chinese demand
10 hours ago Livestock
Flax prices likely to remain flat
15 hours ago Crops
Namibia looks to import cattle as drought decimates herds
More GFM Network News
GFM Podcasts
Mid-sized farm strengths, sustainable farm machines, paying a visit to St. Jean farm days, 'Phase One' deal on deck
Listen Now →
Tweets by @jgreig
Terms and Conditions | Privacy Policy | © 2020, Glacier FarmMedia Limited Partnership
Farmtario is a new source of farming information that provides the most useful independent insight for Ontario farmers, including news, crop and livestock production, markets and a deep understanding of how technology and data are being adopted on farms.
Sign Up To Receive!


RENO, Nevada -- The consolidation that is occurring in the gaming industry is a sign of its maturity and success, an American Gaming Association executive said today.
Wally Chalmers, vice president of the AGA, also said the industry's resilience is illustrated by the fact that gross gaming revenue has eclipsed pre-Sept. 11 levels with Las Vegas leading the pack.
Chalmers kicked off the second day of the three-day Governor's Conference on Tourism as one of three gaming industry speakers this morning.
Chalmers was a late pinch-hitter for AGA President and Chief Executive Frank Fahrenkopf, who has addressed the Governor's Conference every year since the AGA was formed in 1995. Not only was it Chalmers' first appearance at the state's top tourism gathering, but it was also his first trip to Reno. In a city that has traced its own gaming industry downturn to the explosive growth of tribal casinos in Northern California, Chalmers said the industry is strong overall.
"While consolidation is shrinking membership in the AGA, it has certainly fueled growth for our companies," he said. "This year, there were more mergers than ever before, with Harrah's buying Horseshoe and Caesars, MGM Mirage buying Mandalay, Boyd buying Coast Resorts and Penn National buying Argosy. Consolidation is common in any mature industry, so we expect that trend to continue." Chalmers said the health of the industry also has been reflected in the new investment opportunities offered by Wynn Resorts Ltd. and Las Vegas Sands Inc.
Those two companies "have attracted significant interest, fueled by their reputation as two of the industry's premiere operators and the potential of their casino licenses in Macau," he said. "At least in part, robust market conditions prompted the longtime privately held Las Vegas Sands to go public," Chalmers said. "Stock prices of many existing operators and manufacturers have skyrocketed as well, with MGM Mirage up 76 percent and Boyd Gaming and Penn National shares more than doubling. Other major Las Vegas operators also had record earnings in the third quarter of this year."
Chalmers said the industry's strength and reputation has placed it in a position to take leadership roles in important issues, like diversity and second-hand smoking.
"Through our Diversity Task Force, we released updated industry employment statistics for minorities and women," Chalmers said. "Our report found that commercial casinos employ a higher percentage of black executives, white and black female executives, Hispanics and women compared to other businesses in their states and nationwide."
That's important, he said, because the number of minority travelers also is increasing.
"According to a survey released earlier this year by the Travel Industry Association of America, Hispanic and Asian Americans are traveling to Las Vegas more than any other city, and gambling ranked as the top desired travel activity among 12 percent of Asian Americans and blacks. These statistics underscore the popularity of gaming among America's minority populations. With America's minority population continuing to grow, it's critical for our companies to reflect this changing customer base and our efforts on diversity help us achieve that goal."
Chalmers explained the AGA's stance on the smoking issue.
"As an industry, we are not pro-smoking or anti-smoking, but our job as a business is to keep all our customers happy -- which, of course, is a goal we all share. And, like it or not, many of our customers choose to smoke," he said.
Chalmers said the association's efforts on the issue have been focused on how to establish standards for indoor air quality and determining whether the association wants to have a committee to determine what those standards should be.
"Now that we've gathered the requisite number of petitions, the organization's full membership will vote early next year on whether or not to establish that committee," he said. "Internally, we have established a board-level subcommittee to address this issue and expect to work toward developing a set of industry best practices."
During the course of this week's event, about 600 delegates -- about average for a Northern Nevada Governor's Conference -- will hear from tourism industry leaders, Reno's airport director and several motivational speakers.
A briefing also is scheduled on "Nevada Passage," a made-for-television event planned in May that will pit teams of athletes grouped by profession in a series of outdoors adventures around the state. Organizers hope the Nevada backdrop for rock climbing, jet skiing, four-wheel driving, biking, hiking, sandboarding and kayaking will be seen by more than 2 million viewers in more than 80 television markets.
AGA VP: Casino Industry Remains Strong is republished from iGamingSuppliers.com.


text:
function similar(actual, expected, mistakes) {
   // actual is the generated zip, expected is what we got from the xhr.
   // Be sure to have a well formatted string
   expected = JSZip.utils.string2binary(expected);

   if (actual.length !== expected.length) {
      mistakes -= Math.abs((actual.length||0) - (expected.length||0));
   }

   for (var i = 0; i < Math.min(actual.length, expected.length); i++) {
      if (actual.charAt(i) !== expected.charAt(i)) {
         mistakes--;
      }
   }

   if (mistakes < 0)
      return false;
   else
      return true;
}

/**
 * bytes -> JSZip -> bytes
 */
function reload(bytesStream) {
   return new JSZip(bytesStream, {checkCRC32:true}).generate({type:"string"});
}

// cache for files
var refZips = {};

function testZipFile(testName, zipName, testFunction) {
   test(testName, function () {
      if (refZips[zipName]) {
         testFunction.call(this, refZips[zipName]);
      } else {
         stop();
         JSZipTestUtils.loadZipFile(zipName, function (file) {
            start();
            refZips[zipName] = file;
            testFunction.call(this, file);
         }, function(error){
            if (QUnit.config.semaphore) {
               start();
            }
            ok(false, error);
         });
      }
   });
}

test("JSZip", function(){
   ok(JSZip, "JSZip exists");

   var zip = new JSZip();
   ok(zip, "Constructor works");
});

QUnit.module("Essential"); // {{{

test("JSZip.utils.transformTo", function () {
   var supportedArgs = ['string', 'array'];
   if (JSZip.support.arraybuffer) {
      supportedArgs.push("arraybuffer");
   }
   if (JSZip.support.uint8array) {
      supportedArgs.push("uint8array");
   }
   if (JSZip.support.nodebuffer) {
      supportedArgs.push("nodebuffer");
   }

   var txt = 'test text !';

   for (var i = 0; i < supportedArgs.length; i++) {
      for (var j = 0; j < supportedArgs.length; j++) {
         var step1 = JSZip.utils.transformTo(supportedArgs[i], txt);
         var step2 = JSZip.utils.transformTo(supportedArgs[j], step1);
         var result = JSZip.utils.transformTo("string", step2);
         equal(result, txt, "The transformation string -> " + supportedArgs[i] + " -> " + supportedArgs[j] + " -> string works");
      }
   }
});

testZipFile("Zip text file !", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   /*
      Expected differing bytes:
      2  version number
      4  date/time
      4  central dir version numbers
      4  central dir date/time
      4  external file attributes

      18 Total
      */
   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
});

testZipFile("Add a file to overwrite", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "hello ?");
   zip.file("Hello.txt", "Hello World\n");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   /*
      Expected differing bytes:
      2  version number
      4  date/time
      4  central dir version numbers
      4  central dir date/time
      4  external file attributes

      18 Total
      */
   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
   });

// zip -X -0 utf8.zip amount.txt
testZipFile("Zip text file with UTF-8 characters", "ref/utf8.zip", function(expected) {
      var zip = new JSZip();
      zip.file("amount.txt", "€15\n");
      var actual = zip.generate({type:"string"});

      ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
      equal(reload(actual), actual, "Generated ZIP can be parsed");
      });

// zip -X -0 utf8_in_name.zip €15.txt
testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(expected) {
      var zip = new JSZip();
      zip.file("€15.txt", "€15\n");
      var actual = zip.generate({type:"string"});

      ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
      equal(reload(actual), actual, "Generated ZIP can be parsed");
      });

testZipFile("Zip text file with date", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n", {date : new Date("July 17, 2009 14:36:57")});
      var content = zip.generate();

      var actual = JSZip.base64.decode(content);

      /*
         Expected differing bytes:
         2  version number
         4  central dir version numbers
         4  external file attributes

         10 Total
         */
      ok(similar(actual, expected, 10) , "Generated ZIP matches reference ZIP");
      equal(reload(actual), actual, "Generated ZIP can be parsed");
});

testZipFile("Zip image file", "ref/image.zip", function(expected) {
   var zip = new JSZip();
   zip.file("smile.gif", "R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs=", {base64: true});
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
});

test("Zip folder() shouldn't throw an exception", function(expected) {
   var zip = new JSZip();
   try {
      zip.folder();
      ok(true, "no exception thrown");
   } catch (e) {
      ok(false, e.message||e);
   }
});

testZipFile("Zip empty folder", "ref/folder.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("folder");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
});

testZipFile("Zip text, folder and image", "ref/all.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   zip.folder("images").file("smile.gif", "R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs=", {base64: true});
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   /*
      Expected differing bytes:
      2  version number
      4  date/time
      4  central dir version numbers
      4  central dir date/time
      4  external file attributes

      18 * 3 files
      54 Total
      */

   ok(similar(actual, expected, 54) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
});

test("Finding a file", function() {
   var zip = new JSZip();
   zip.file("Readme", "Hello World!\n");
   zip.file("Readme.French", "Bonjour tout le monde!\n");
   zip.file("Readme.Pirate", "Ahoy m'hearty!\n");

   equal(zip.file("Readme.French").asText(), "Bonjour tout le monde!\n", "Exact match found");
   equal(zip.file("Readme.Deutch"), null, "Match exactly nothing");
   equal(zip.file(/Readme\../).length, 2, "Match regex free text");
   equal(zip.file(/pirate/i).length, 1, "Match regex 1 result");
});

testZipFile("Finding a file : modifying the result doesn't alter the zip", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   zip.file("Hello.txt").name = "Hello2.txt";
   zip.file("Hello.txt").options.dir = true;
   // these changes won't be used
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

test("Finding a file (text search) with a relative folder", function() {
   var zip = new JSZip();
   zip.folder("files/default").file("Readme", "Hello World!\n");
   zip.folder("files/translation").file("Readme.French", "Bonjour tout le monde!\n");
   zip.folder("files").folder("translation").file("Readme.Pirate", "Ahoy m'hearty!\n");

   equal(zip.file("files/translation/Readme.French").asText(), "Bonjour tout le monde!\n", "finding file with the full path");
   equal(zip.folder("files").file("translation/Readme.French").asText(), "Bonjour tout le monde!\n", "finding file with a relative path");
   equal(zip.folder("files/translation").file("Readme.French").asText(), "Bonjour tout le monde!\n", "finding file with a relative path");
});

test("Finding files (regex) with a relative folder", function() {
   var zip = new JSZip();
   zip.folder("files/default").file("Readme", "Hello World!\n");
   zip.folder("files/translation").file("Readme.French", "Bonjour tout le monde!\n");
   zip.folder("files").folder("translation").file("Readme.Pirate", "Ahoy m'hearty!\n");

   equal(zip.file(/Readme/).length, 3, "match files in subfolders");
   equal(zip.folder("files/translation").file(/Readme/).length, 2, "regex match only in subfolders");
   equal(zip.folder("files").folder("translation").file(/Readme/).length, 2, "regex match only in subfolders");
   equal(zip.folder("files/translation").file(/pirate/i).length, 1, "regex match only in subfolders");
   equal(zip.folder("files/translation").file(/^readme/i).length, 2, "regex match only with the relative path");
   equal(zip.folder("files/default").file(/pirate/i).length, 0, "regex match only in subfolders");
});

test("Finding folders", function () {
   var zip = new JSZip();
   zip.folder("root/").folder("sub1/");
   zip.folder("root/sub2/subsub1");

   equal(zip.folder(/sub2\/$/).length, 1, "unique result");
   equal(zip.folder(/sub1/).length, 2, "multiple results");
   equal(zip.folder(/root/).length, 4, "match on whole path");
});

test("Finding folders with relative path", function () {
   var zip = new JSZip();
   zip.folder("root/").folder("sub1/");
   zip.folder("root/sub2/subsub1");
   var root = zip.folder("root/sub2");

   equal(root.folder(/sub2\/$/).length, 0, "current folder is not matched");
   equal(root.folder(/sub1/).length, 1, "sub folder is matched");
   equal(root.folder(/^subsub1/).length, 1, "relative folder path is used");
   equal(root.folder(/root/).length, 0, "parent folder is not matched");
});
// }}} module Essential

QUnit.module("More advanced"); // {{{

testZipFile("Delete file", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Remove.txt", "This file should be deleted\n");
   zip.file("Hello.txt", "Hello World\n");
   zip.remove("Remove.txt");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");

});

testZipFile("Delete file in folder", "ref/folder.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("folder").file("Remove.txt", "This folder and file should be deleted\n");
   zip.remove("folder/Remove.txt");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("Delete file in folder, with a relative path", "ref/folder.zip", function(expected) {
   var zip = new JSZip();
   var folder = zip.folder("folder");
   folder.file("Remove.txt", "This folder and file should be deleted\n");
   folder.remove("Remove.txt");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("Delete folder", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("remove").file("Remove.txt", "This folder and file should be deleted\n");
   zip.file("Hello.txt", "Hello World\n");
   zip.remove("remove");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("Delete folder with a final /", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("remove").file("Remove.txt", "This folder and file should be deleted\n");
   zip.file("Hello.txt", "Hello World\n");
   zip.remove("remove/");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("Delete unknown path", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   zip.remove("unknown_file");
   zip.remove("unknown_folder/Hello.txt");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("Delete nested folders", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("remove").file("Remove.txt", "This folder and file should be deleted\n");
   zip.folder("remove/second").file("Sub.txt", "This should be removed");
   zip.file("remove/second/another.txt", "Another file");
   zip.file("Hello.txt", "Hello World\n");
   zip.remove("remove");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");

});

testZipFile("Delete nested folders from relative path", "ref/folder.zip", function(expected) {
   var zip = new JSZip();
   zip.folder("folder");
   zip.folder("folder/1/2/3");
   zip.folder("folder").remove("1");
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   equal(reload(actual), actual, "Generated ZIP can be parsed");
});

testZipFile("add file: from XHR (with bytes > 255)", "ref/text.zip", function(textZip) {
   var zip = new JSZip();
   zip.file("text.zip", textZip, {binary:true});
   var actual = zip.generate({base64:false});

   equal(reload(actual), actual, "high-order byte is discarded and won't mess up the result");
});

function testFileDataGetters (opts) {
   if (typeof opts.rawData === "undefined") {
      opts.rawData = opts.textData;
   }
   _actualTestFileDataGetters.asText(opts);
   _actualTestFileDataGetters.asBinary(opts);
   _actualTestFileDataGetters.asArrayBuffer(opts);
   _actualTestFileDataGetters.asUint8Array(opts);
   _actualTestFileDataGetters.asNodeBuffer(opts);

   var reload = function () {
      return {
         name : "reloaded, " + opts.name,
         // no check of crc32, we want to test the CompressedObject code.
         zip : new JSZip(opts.zip.generate({type:"string"}, {checkCRC32:false})),
         textData : opts.textData,
         rawData : opts.rawData
      };
   };

   _actualTestFileDataGetters.asText(reload());
   _actualTestFileDataGetters.asBinary(reload());
   _actualTestFileDataGetters.asArrayBuffer(reload());
   _actualTestFileDataGetters.asUint8Array(reload());
   _actualTestFileDataGetters.asNodeBuffer(reload());
}

var _actualTestFileDataGetters = {
   asText : function (opts) {
      equal(opts.zip.file("file.txt").asText(), opts.textData, opts.name + " : asText()");
   },
   asBinary : function (opts) {
      equal(opts.zip.file("file.txt").asBinary(), opts.rawData, opts.name + " : asBinary()");
   },
   asArrayBuffer : function (opts) {
      if (JSZip.support.arraybuffer) {
         var buffer = opts.zip.file("file.txt").asArrayBuffer();
         ok(buffer instanceof ArrayBuffer, opts.name + " : the result is a instance of ArrayBuffer");
         var actual = JSZip.utils.transformTo("string", buffer);
         equal(actual, opts.rawData, opts.name + " : asArrayBuffer()");
      } else {
         try {
            opts.zip.file("file.txt").asArrayBuffer();
            ok(false, "no exception thrown");
         } catch (e) {
            ok(e.message.match("not supported by this browser"), opts.name + " : the error message is useful");
         }
      }
   },
   asUint8Array : function (opts) {
      if (JSZip.support.uint8array) {
         var bufferView = opts.zip.file("file.txt").asUint8Array();
         ok(bufferView instanceof Uint8Array, opts.name + " : the result is a instance of Uint8Array");
         var actual = JSZip.utils.transformTo("string", bufferView);
         equal(actual, opts.rawData, opts.name + " : asUint8Array()");
      } else {
         try {
            opts.zip.file("file.txt").asUint8Array();
            ok(false, "no exception thrown");
         } catch (e) {
            ok(e.message.match("not supported by this browser"), opts.name + " : the error message is useful");
         }
      }
   },
   asNodeBuffer : function (opts) {
      if (JSZip.support.nodebuffer) {
         var buffer = opts.zip.file("file.txt").asNodeBuffer();
         ok(buffer instanceof Buffer, opts.name + " : the result is a instance of Buffer");
         var actual = JSZip.utils.transformTo("string", buffer);
         equal(actual, opts.rawData, opts.name + " : .asNodeBuffer()");
      } else {
         try {
            opts.zip.file("file.txt").asNodeBuffer();
            ok(false, "no exception thrown");
         } catch (e) {
            ok(e.message.match("not supported by this browser"), opts.name + " : the error message is useful");
         }
      }
   }
};

test("add file: file(name, undefined)", function() {
   var zip = new JSZip(), undef;
   zip.file("file.txt", undef);
   testFileDataGetters({name : "undefined", zip : zip, textData : ""});
   zip = new JSZip();
   zip.file("file.txt", undef, {binary:true});
   testFileDataGetters({name : "undefined", zip : zip, textData : ""});
   zip = new JSZip();
   zip.file("file.txt", undef, {base64:true});
   testFileDataGetters({name : "undefined", zip : zip, textData : ""});
});

test("add file: file(name, null)", function() {
   var zip = new JSZip();
   zip.file("file.txt", null);
   testFileDataGetters({name : "null", zip : zip, textData : ""});
   zip = new JSZip();
   zip.file("file.txt", null, {binary:true});
   testFileDataGetters({name : "null", zip : zip, textData : ""});
   zip = new JSZip();
   zip.file("file.txt", null, {base64:true});
   testFileDataGetters({name : "null", zip : zip, textData : ""});
});

test("add file: file(name, stringAsText)", function() {
   var zip = new JSZip();
   zip.file("file.txt", "€15\n", {binary:false});
   testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
   zip = new JSZip();
   zip.file("file.txt", "test\r\ntest\r\n", {binary:false});
   testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
});

test("add file: file(name, stringAsBinary)", function() {
   var zip = new JSZip();
   zip.file("file.txt", "\xE2\x82\xAC15\n", {binary:true});
   testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
   zip = new JSZip();
   zip.file("file.txt", "test\r\ntest\r\n", {binary:true});
   testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
});

test("add file: file(name, base64)", function() {
   var zip = new JSZip();
   zip.file("file.txt", "4oKsMTUK", {base64:true});
   testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
   zip = new JSZip();
   zip.file("file.txt", "dGVzdA0KdGVzdA0K", {base64:true});
   testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
});

test("add file: file(name, unsupported)", function() {
   var zip = new JSZip();
   try {
      zip.file("test.txt", new Date());
      ok(false, "An unsupported object was added, but no exception thrown");
   } catch(e) {
      ok(e.message.match("unsupported format"), "the error message is useful");
   }
   if (JSZip.support.blob) {
      var blob = zip.generate({type:"blob"});
      try {
         zip.file("test.txt", blob);
         ok(false, "An blob was added, but no exception thrown");
      } catch(e) {
         ok(e.message.match("unsupported format"), "the error message is useful");
      }
   }
});

if (JSZip.support.uint8array) {
   test("add file: file(name, Uint8Array)", function() {
      var str2array = function (str) {
         var array = new Uint8Array(str.length);
         for(var i = 0; i < str.length; i++) {
            array[i] = str.charCodeAt(i);
         }
         return array;
      };
      var zip = new JSZip();
      zip.file("file.txt", str2array("\xE2\x82\xAC15\n"));
      testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
      zip = new JSZip();
      zip.file("file.txt", str2array("test\r\ntest\r\n"));
      testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
      zip = new JSZip();
      zip.file("file.txt", str2array(""));
      testFileDataGetters({name : "empty content", zip : zip, textData : ""});
   });
}

if (JSZip.support.arraybuffer) {
   test("add file: file(name, ArrayBuffer)", function() {
      var str2buffer = function (str) {
         var array = new Uint8Array(str.length);
         for(var i = 0; i < str.length; i++) {
            array[i] = str.charCodeAt(i);
         }
         return array.buffer;
      };
      var zip = new JSZip();
      zip.file("file.txt", str2buffer("\xE2\x82\xAC15\n"));
      testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
      zip = new JSZip();
      zip.file("file.txt", str2buffer("test\r\ntest\r\n"));
      testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
      zip = new JSZip();
      zip.file("file.txt", str2buffer(""));
      testFileDataGetters({name : "empty content", zip : zip, textData : ""});
   });
}

if (JSZip.support.nodebuffer) {
   test("add file: file(name, Buffer)", function() {
      var str2buffer = function (str) {
         var array = new Buffer(str.length);
         for(var i = 0; i < str.length; i++) {
            array[i] = str.charCodeAt(i);
         }
         return array;
      };
      var zip = new JSZip();
      zip.file("file.txt", str2buffer("\xE2\x82\xAC15\n"));
      testFileDataGetters({name : "utf8", zip : zip, textData : "€15\n", rawData : "\xE2\x82\xAC15\n"});
      zip = new JSZip();
      zip.file("file.txt", str2buffer("test\r\ntest\r\n"));
      testFileDataGetters({name : "\\r\\n", zip : zip, textData : "test\r\ntest\r\n"});
      zip = new JSZip();
      zip.file("file.txt", str2buffer(""));
      testFileDataGetters({name : "empty content", zip : zip, textData : ""});
   });
}

testZipFile("generate : base64:false. Deprecated, but it still works", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   var actual = zip.generate({base64:false});

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("generate : base64:true. Deprecated, but it still works", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   var content = zip.generate({base64:true});
   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("generate : type:string", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   var actual = zip.generate({type:"string"});

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

testZipFile("generate : type:base64", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   var content = zip.generate({type:"base64"});

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

if (JSZip.support.uint8array) {
   testZipFile("generate : type:uint8array", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      var array = zip.generate({type:"uint8array"});
      ok(array instanceof Uint8Array, "The result is a instance of Uint8Array");
      equal(array.length, expected.length);

      var actual = JSZip.utils.transformTo("string", array);

      ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   });
} else {
   testZipFile("generate : type:uint8array", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      try {
         var blob = zip.generate({type:"uint8array"});
         ok(false, "Uint8Array is not supported, but no exception thrown");
      } catch(e) {
         ok(e.message.match("not supported by this browser"), "the error message is useful");
      }
   });
}

if (JSZip.support.arraybuffer) {
   testZipFile("generate : type:arraybuffer", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      var buffer = zip.generate({type:"arraybuffer"});
      ok(buffer instanceof ArrayBuffer, "The result is a instance of ArrayBuffer");

      var actual = JSZip.utils.transformTo("string", buffer);

      ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   });
} else {
   testZipFile("generate : type:arraybuffer", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      try {
         var blob = zip.generate({type:"arraybuffer"});
         ok(false, "ArrayBuffer is not supported, but no exception thrown");
      } catch(e) {
         ok(e.message.match("not supported by this browser"), "the error message is useful");
      }
   });
}

if (JSZip.support.nodebuffer) {
   testZipFile("generate : type:nodebuffer", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      var buffer = zip.generate({type:"nodebuffer"});
      ok(buffer instanceof Buffer, "The result is a instance of ArrayBuffer");

      var actual = "";
      for (var i = 0; i < buffer.length; i++) {
         actual += String.fromCharCode(buffer[i]);
      }

      ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
   });
} else {
   testZipFile("generate : type:nodebuffer", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      try {
         var blob = zip.generate({type:"nodebuffer"});
         ok(false, "Buffer is not supported, but no exception thrown");
      } catch(e) {
         ok(e.message.match("not supported by this browser"), "the error message is useful");
      }
   });
}

if (JSZip.support.blob) {
   testZipFile("generate : type:blob", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      var blob = zip.generate({type:"blob"});
      ok(blob instanceof Blob, "The result is a instance of Blob");
      equal(blob.type, "application/zip");
      equal(blob.size, expected.length);
   });
} else {
   testZipFile("generate : type:blob", "ref/text.zip", function(expected) {
      var zip = new JSZip();
      zip.file("Hello.txt", "Hello World\n");
      try {
         var blob = zip.generate({type:"blob"});
         ok(false, "Blob is not supported, but no exception thrown");
      } catch(e) {
         ok(e.message.match("not supported by this browser"), "the error message is useful");
      }
   });
}

test("Filtering a zip", function() {
   var zip = new JSZip();
   zip.file("1.txt", "1\n");
   zip.file("2.txt", "2\n");
   zip.file("3.log", "3\n");
   var result = zip.filter(function (relativeFilename, file){
      return relativeFilename.indexOf(".txt") != -1;
   });
   equal(result.length, 2, "filter has filtered");
   ok(result[0].name.indexOf(".txt") != -1, "filter has filtered the good file");
   ok(result[1].name.indexOf(".txt") != -1, "filter has filtered the good file");
});

test("Filtering a zip from a relative path", function() {
   var zip = new JSZip();
   zip.file("foo/1.txt", "1\n");
   zip.file("foo/2.txt", "2\n");
   zip.file("foo/3.log", "3\n");
   zip.file("1.txt", "1\n");
   zip.file("2.txt", "2\n");
   zip.file("3.log", "3\n");

   var result = zip.folder("foo").filter(function (relativeFilename, file) {
      return relativeFilename.indexOf("3") != -1;
   });
   equal(result.length, 1, "filter has filtered");
   equal(result[0].name, "foo/3.log", "filter has filtered the good file");
});

test("Filtering a zip : the full path is still accessible", function() {
   var zip = new JSZip();
   zip.file("foo/1.txt", "1\n");
   zip.file("foo/2.txt", "2\n");
   zip.file("foo/3.log", "3\n");
   zip.file("1.txt", "1\n");
   zip.file("2.txt", "2\n");
   zip.file("3.log", "3\n");

   var result = zip.folder("foo").filter(function (relativeFilename, file) {
      return file.name.indexOf("3") != -1;
   });
   equal(result.length, 1, "the filter only match files/folders in the current folder");
   equal(result[0].name, "foo/3.log", "filter has filtered the good file");
});

testZipFile("Filtering a zip : the filter function can't alter the data", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
   zip.filter(function (relativeFilename, file) {
      file.name = "bye.txt";
      file.data = "good bye";
      file.options.dir = true;
   });
   var content = zip.generate();

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");

});

testZipFile("STORE is the default method", "ref/text.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "Hello World\n");
      var content = zip.generate({compression:'STORE'});

   var actual = JSZip.base64.decode(content);

   // no difference with the "Zip text file" test.
   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

// zip -0 -X store.zip Hello.txt
testZipFile("STORE doesn't compress", "ref/store.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "This a looong file : we need to see the difference between the different compression methods.\n");
   var content = zip.generate({compression:'STORE'});

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});

/*
// commented because the new implementation of DEFLATE produces different results from the old one.

// zip -6 -X deflate.zip Hello.txt
testZipFile("DEFLATE compress", "ref/deflate.zip", function(expected) {
   var zip = new JSZip();
   zip.file("Hello.txt", "This a looong file : we need to see the difference between the different compression methods.\n");
   var content = zip.generate({compression:'DEFLATE'});

   var actual = JSZip.base64.decode(content);

   ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
});
*/
test("Lazy decompression works", function () {
   var zip = new JSZip();
   zip.folder("test/").file("Hello.txt", "hello !");

   var expected = zip.generate({type:"string", compression:"STORE"});

   zip = new JSZip(expected); // lazy
   equal(zip.generate({type:"string", compression:"STORE"}), expected, "Reloading file, same compression");

   zip = new JSZip(zip.generate({type:"string", compression:"DEFLATE"}));
   zip = new JSZip(zip.generate({type:"string", compression:"STORE"}));

   var zipData = zip.generate({type:"string", compression:"STORE"});
   equal(zipData, expected, "Reloading file, different compression");

   // check CRC32
   new JSZip(zipData, {checkCRC32:true}).generate({type:"string"});
});

test("Empty files / folders are not compressed", function() {
   var zip = new JSZip();
   zip.file("Hello.txt", "This a looong file : we need to see the difference between the different compression methods.\n");
   zip.folder("folder").file("empty", "");

   var deflateCount = 0, emptyDeflateCount = 0;
   var oldDeflateCompress = JSZip.compressions.DEFLATE.compress;
   JSZip.compressions.DEFLATE.compress = function (str) {
      deflateCount++;
      if (!str) {
         emptyDeflateCount++;
      }
      return str;
   };
   zip.generate({compression:'DEFLATE'});

   equal(deflateCount, 1, "The file has been compressed");
   equal(emptyDeflateCount, 0, "The file without content and the folder has not been compressed.");

   JSZip.compressions.DEFLATE.compress = oldDeflateCompress;
});

test("unknown compression throws an exception", function () {
   var zip = new JSZip().file("file.txt", "test");
   try {
      zip.generate({compression:'MAYBE'});
      ok(false, "no exception");
   } catch (e) {
      ok(true, "an exception were thrown");
   }
});
// }}} More advanced

QUnit.module("Load file, not supported features"); // {{{

// zip -0 -X -e encrypted.zip Hello.txt
testZipFile("basic encryption", "ref/encrypted.zip", function(file) {
   try {
      var zip = new JSZip(file);
      ok(false, "Encryption is not supported, but no exception were thrown");
   } catch(e) {
      equal(e.message, "Encrypted zip are not supported", "the error message is useful");
   }
});
// }}} Load file, not supported features

QUnit.module("Load file, corrupted zip"); // {{{

testZipFile("bad compression method", "ref/invalid/compression.zip", function(file) {
   try {
      var zip = new JSZip(file);
      ok(false, "no exception were thrown");
   } catch(e) {
      ok(e.message.match("Corrupted zip"), "the error message is useful");
   }
});

testZipFile("invalid crc32 but no check", "ref/invalid/crc32.zip", function(file) {
   try {
      var zip = new JSZip(file, {checkCRC32:false});
      ok(true, "no exception were thrown");
   } catch(e) {
      ok(false, "An exception were thrown but the check should have been disabled.");
   }
});

testZipFile("invalid crc32", "ref/invalid/crc32.zip", function(file) {
   try {
      var zip = new JSZip(file, {checkCRC32:true});
      ok(false, "no exception were thrown");
   } catch(e) {
      ok(e.message.match("Corrupted zip"), "the error message is useful");
   }
});

testZipFile("bad offset", "ref/invalid/bad_offset.zip", function(file) {
   try {
      var zip = new JSZip(file);
      ok(false, "no exception were thrown");
   } catch(e) {
      ok(e.message.match("Corrupted zip"), "the error message is useful");
   }
});
// }}} Load file, corrupted zip

QUnit.module("Load file"); // {{{

testZipFile("load(string) works", "ref/all.zip", function(file) {
   ok(typeof file === "string");
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

testZipFile("load(string) handles bytes > 255", "ref/all.zip", function(file) {
   // the method used to load zip with ajax will remove the extra bits.
   // adding extra bits :)
   var updatedFile = "";
   for (var i = 0; i < file.length; i++) {
      updatedFile += String.fromCharCode((file.charCodeAt(i) & 0xff) + 0x4200);
   }
   var zip = new JSZip(updatedFile);

   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

if (JSZip.support.arraybuffer) {
   testZipFile("load(ArrayBuffer) works", "ref/all.zip", function(fileAsString) {
      var file = new ArrayBuffer(fileAsString.length);
      var bufferView = new Uint8Array(file);
      for( var i = 0; i < fileAsString.length; ++i ) {
         bufferView[i] = fileAsString.charCodeAt(i);
      }

      ok(file instanceof ArrayBuffer);

      // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
      // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
      equal(new JSZip(file).file("Hello.txt").asArrayBuffer().byteLength, 12, "don't get the original buffer");
      equal(new JSZip(file).file("Hello.txt").asUint8Array().buffer.byteLength, 12, "don't get a view of the original buffer");

      equal(new JSZip(file).file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
   });
}

if (JSZip.support.nodebuffer) {
   testZipFile("load(Buffer) works", "ref/all.zip", function(fileAsString) {
      var file = new Buffer(fileAsString.length);
      for( var i = 0; i < fileAsString.length; ++i ) {
         file[i] = fileAsString.charCodeAt(i);
      }

      equal(new JSZip(file).file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
   });
}

if (JSZip.support.uint8array) {
   testZipFile("load(Uint8Array) works", "ref/all.zip", function(fileAsString) {
      var file = new Uint8Array(fileAsString.length);
      for( var i = 0; i < fileAsString.length; ++i ) {
         file[i] = fileAsString.charCodeAt(i);
      }

      ok(file instanceof Uint8Array);

      // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
      // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
      equal(new JSZip(file).file("Hello.txt").asArrayBuffer().byteLength, 12, "don't get the original buffer");
      equal(new JSZip(file).file("Hello.txt").asUint8Array().buffer.byteLength, 12, "don't get a view of the original buffer");

      equal(new JSZip(file).file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
   });
}

// zip -6 -X deflate.zip Hello.txt
testZipFile("zip with DEFLATE", "ref/deflate.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read.");
});

// zip -0 -z -c archive_comment.zip Hello.txt
testZipFile("zip with comment", "ref/archive_comment.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

// zip -0 extra_attributes.zip Hello.txt
testZipFile("zip with extra attributes", "ref/extra_attributes.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

// use -fz to force use of Zip64 format
// zip -fz -0 zip64.zip Hello.txt
testZipFile("zip 64", "ref/zip64.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

// use -fd to force data descriptors as if streaming
// zip -fd -0 data_descriptor.zip Hello.txt
testZipFile("zip with data descriptor", "ref/data_descriptor.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
});

// combo of zip64 and data descriptors :
// zip -fz -fd -0 data_descriptor_zip64.zip Hello.txt
// this generate a corrupted zip file :(
// TODO : find how to get the two features

// zip -0 -X zip_within_zip.zip Hello.txt && zip -0 -X nested.zip Hello.txt zip_within_zip.zip
testZipFile("nested zip", "ref/nested.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hello.txt").asText(), "Hello World\n", "the zip was correctly read.");
   var nested = new JSZip(zip.file("zip_within_zip.zip").asBinary());
   equal(nested.file("Hello.txt").asText(), "Hello World\n", "the inner zip was correctly read.");
});

// zip -fd -0 nested_data_descriptor.zip data_descriptor.zip
testZipFile("nested zip with data descriptors", "ref/nested_data_descriptor.zip", function(file) {
   var zip = new JSZip(file);
   var nested = new JSZip(zip.file("data_descriptor.zip").asBinary());
   equal(nested.file("Hello.txt").asText(), "Hello World\n", "the inner zip was correctly read.");
});

// zip -fz -0 nested_zip64.zip zip64.zip
testZipFile("nested zip 64", "ref/nested_zip64.zip", function(file) {
   var zip = new JSZip(file);
   var nested = new JSZip(zip.file("zip64.zip").asBinary());
   equal(nested.file("Hello.txt").asText(), "Hello World\n", "the inner zip was correctly read.");
});

// nested zip 64 with data descriptors
// zip -fz -fd -0 nested_data_descriptor_zip64.zip data_descriptor_zip64.zip
// this generate a corrupted zip file :(
// TODO : find how to get the two features

// zip -X -0 utf8_in_name.zip €15.txt
testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(file) {
   var zip = new JSZip(file);
   ok(zip.file("€15.txt") !== null, "the utf8 file is here.");
   equal(zip.file("€15.txt").asText(), "€15\n", "the utf8 content was correctly read (with file().asText).");
   equal(zip.files["€15.txt"].asText(), "€15\n", "the utf8 content was correctly read (with files[].astext).");
});

// zip backslash.zip -0 -X Hel\\lo.txt
testZipFile("Zip text file with backslash in filename", "ref/backslash.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.file("Hel\\lo.txt").asText(), "Hello World\n", "the utf8 content was correctly read.");
});

// use izarc to generate a zip file on windows
testZipFile("Zip text file from windows with \\ in central dir", "ref/slashes_and_izarc.zip", function(file) {
   var zip = new JSZip(file);
   equal(zip.folder("test").file("Hello.txt").asText(), "Hello world\r\n", "the content was correctly read.");
});

test("A folder stays a folder", function () {
   var zip = new JSZip();
   zip.folder("folder/");
   ok(zip.files['folder/'].options.dir, "the folder is marked as a folder");
   var reloaded = new JSZip(zip.generate({base64:false}));
   ok(reloaded.files['folder/'].options.dir, "the folder is marked as a folder");
});

// }}} Load file

QUnit.module("Load complex files"); // {{{

if (QUnit.urlParams.complexfiles) {

   // http://www.feedbooks.com/book/8/the-metamorphosis
   testZipFile("Franz Kafka - The Metamorphosis.epub", "ref/complex_files/Franz Kafka - The Metamorphosis.epub", function(file) {
      var zip = new JSZip(file);
      equal(zip.filter(function(){return true;}).length, 26, "the zip contains the good number of elements.");
      equal(zip.file("mimetype").asText(), "application/epub+zip\r\n", "the zip was correctly read.");
      // the .ncx file tells us that the first chapter is in the main0.xml file.
      ok(zip.file("OPS/main0.xml").asText().indexOf("One morning, as Gregor Samsa was waking up from anxious dreams") !== -1, "the zip was correctly read.");
   });

   // a showcase in http://msdn.microsoft.com/en-us/windows/hardware/gg463429
   testZipFile("Outlook2007_Calendar.xps", "ref/complex_files/Outlook2007_Calendar.xps", function(file) {
      var zip = new JSZip(file);
      // the zip file contains 15 entries, but we get 23 when creating all the sub-folders.
      equal(zip.filter(function(){return true;}).length, 23, "the zip contains the good number of elements.");
      ok(zip.file("[Content_Types].xml").asText().indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read.");
   });

   // an example file in http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip
   // the data come from http://www.antarctica.ac.uk/met/READER/upper_air/
   testZipFile("AntarcticaTemps.xlsx", "ref/complex_files/AntarcticaTemps.xlsx", function(file) {
      var zip = new JSZip(file);
      // the zip file contains 16 entries, but we get 27 when creating all the sub-folders.
      equal(zip.filter(function(){return true;}).length, 27, "the zip contains the good number of elements.");
      ok(zip.file("[Content_Types].xml").asText().indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read.");
   });

   // same as above, but in the Open Document format
   testZipFile("AntarcticaTemps.ods", "ref/complex_files/AntarcticaTemps.ods", function(file) {
      var zip = new JSZip(file);
      // the zip file contains 19 entries, but we get 27 when creating all the sub-folders.
      equal(zip.filter(function(){return true;}).length, 27, "the zip contains the good number of elements.");
      ok(zip.file("META-INF/manifest.xml").asText().indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read.");
   });
}
// }}} Load complex files

// enforcing Stuk's coding style
// vim: set shiftwidth=3 softtabstop=3:

redpajama_set_name: RedPajamaGithub


This article engages in a gender analysis of the stories of Joseph and Esther in the Hebrew Bible, two characters who rise to prominence within the imperial palace in the Diaspora. Both are distinguished by their beauty and charm, their double-names, and feminine guile; both delay the revelation of their identity (as Hebrew/Jew) until the crisis point. In this study, Adelman appropriates classic midrashic interpretations that sharpen the ironies in the biblical text and adapt them in an explicitly feminist hermeneutics. The question remains: How is this reading both continuous with and subversive of the classic rabbinic reading? By noting the seeming absence of God in these two narratives, Adelman suggests a parallel between the increasing autonomy of the characters in exile as they break gender boundaries, and the awakening of our feminist voices as interpreters.


text:
<?php

namespace Go\Aop\Framework;

/**
 * Generated by PHPUnit_SkeletonGenerator 1.2.0 on 2012-12-20 at 11:58:54.
 */
class ReflectionMethodInvocationTest extends \PHPUnit_Framework_TestCase
{

    const FIRST_CLASS_NAME = 'Go\Stubs\First';

    /**
     * Tests dynamic method invocations
     *
     * @dataProvider dynamicMethodsBatch
     */
    public function testDynamicMethodInvocation($methodName, $expectedResult)
    {
        $child      = $this->getMock(self::FIRST_CLASS_NAME, array('none'));
        $invocation = new ReflectionMethodInvocation(self::FIRST_CLASS_NAME, $methodName, array());

        $result = $invocation($child);
        $this->assertEquals($expectedResult, $result);
    }

    /**
     * Tests static method invocations with self
     *
     * @dataProvider staticSelfMethodsBatch
     */
    public function testStaticSelfMethodInvocation($methodName, $expectedResult)
    {
        $childClass = $this->getMockClass(self::FIRST_CLASS_NAME, array('none'));
        $invocation = new ReflectionMethodInvocation($childClass, $methodName, array());

        $result = $invocation($childClass);
        $this->assertEquals($expectedResult, $result);
    }

    /**
     * Tests static method invocations with self not overridden with parent
     *
     * @dataProvider staticSelfMethodsBatch
     */
    public function testStaticSelfNotOverridden($methodName, $expectedResult)
    {
        $childClass = $this->getMockClass(self::FIRST_CLASS_NAME, array($methodName));
        $invocation = new ReflectionMethodInvocation(self::FIRST_CLASS_NAME, $methodName, array());

        $result = $invocation($childClass);
        $this->assertEquals($expectedResult, $result);
    }

    /**
     * Tests static method invocations with Late Static Binding
     *
     * @dataProvider staticLsbMethodsBatch
     */
    public function testStaticLsbIsWorking($methodName)
    {
        $childClass = $this->getMockClass(self::FIRST_CLASS_NAME, array('none'));
        $invocation = new ReflectionMethodInvocation($childClass, $methodName, array());

        // LSB is not working, so it returns parent class name :( So just check that this doesn't break anything
        $result = $invocation($childClass);
        $this->markTestSkipped("Late Static Binding is not working with Reflection");
    }

    public function testValueChangedByReference()
    {
        $child      = $this->getMock(self::FIRST_CLASS_NAME, array('none'));
        $invocation = new ReflectionMethodInvocation(self::FIRST_CLASS_NAME, 'passByReference', array());

        $value  = 'test';
        $result = $invocation($child, array(&$value));
        $this->assertEquals(null, $result);
        $this->assertEquals(null, $value);
    }

    public function testRecursionWorks()
    {
        $child      = $this->getMock(self::FIRST_CLASS_NAME, array('recursion'));
        $invocation = new ReflectionMethodInvocation(self::FIRST_CLASS_NAME, 'recursion', array());

        $child->expects($this->exactly(5))->method('recursion')->will($this->returnCallback(
            function ($value, $level) use ($child, $invocation) {
                return $invocation($child, array($value, $level));
            }
        ));

        $this->assertEquals(5, $child->recursion(5,0));
        $this->assertEquals(20, $child->recursion(5,3));
    }

    public function testAdviceIsCalledForInvocation()
    {
        $child  = $this->getMock(self::FIRST_CLASS_NAME, array('none'));
        $value  = 'test';
        $advice = new MethodBeforeInterceptor(function ($object) use (&$value) {
            $value = 'ok';
        });

        $invocation = new ReflectionMethodInvocation(self::FIRST_CLASS_NAME, 'publicMethod', array($advice));

        $result = $invocation($child, array());
        $this->assertEquals('ok', $value);
        $this->assertEquals(T_PUBLIC, $result);
    }

    public function dynamicMethodsBatch()
    {
        return array(
            array('publicMethod', T_PUBLIC),
            array('protectedMethod', T_PROTECTED),
            // array('privateMethod', T_PRIVATE), This will throw an ReflectionException, need to add use case for that
        );
    }

    public function staticSelfMethodsBatch()
    {
        return array(
            array('staticSelfPublic', T_PUBLIC),
            array('staticSelfProtected', T_PROTECTED),
            // array('staticSelfPrivate', T_PRIVATE), // This will give a Fatal Error for scope
        );
    }

    public function staticLsbMethodsBatch()
    {
        return array(
            array('staticLsbPublic'),
            array('staticLsbProtected'),
        );
    }

}


text:
Nick Matthew meets Gregory Gaultier in Swedish Open final
Gregory Gaultier fires in a tight backhand against Steve Coppinger
Top seed Gaultier glides into final without dropping a game, but Matthew has to battle to beat Simon Rosner in Swedish semi-finals
By Squash Mad Reporter
England's 34-year-old World No.3 Nick Matthew kept alive his hopes of retaining the CASE Swedish Open, PSA International 70 title, after seeing off the challenge of German World No.10 Simon Rösner during the semi-finals in Linkoping today (February 7).
Matthew, who produced an impressive display to beat Ramy Ashour 3-2 and win the title in 2014, ensured his place in the final with a hard-earned 3-1 victory over the 27-year-old from Paderborn.
He will now line-up against long-time adversary Gregory Gaultier, the man he beat in the finals of the 2011 and 2013 World Championships, to contest the final tomorrow (Sunday, February 8).
"What I was really pleased with was that when it came to the big points today I was able to raise my game and make them count," said Matthew afterwards.
"That's going to be especially important tomorrow against Greg because he looks in good form and I'm glad it didn't go into a fifth game because I'll need to be fresh tomorrow for the final."
Simon Rosner bends into a drop shot against Nick Matthew
The Englishman, a notoriously strong starter, lived up to his billing as he tested the tall German's physical abilities from the off, taking the opening game after 14 minutes. But Rösner mounted a spirited fight-back in the second game and levelled the scores following some impressive action.
After restoring his advantage in the third, Matthew was forced to use everything in his locker to prevent the match from going into a fifth game, a scenario he has never experienced against Rösner in their five previous meetings. He showed his mental composure and resolve to save four game-balls before eventually sealing the match in a tight tie-break, winning 11-7, 7-11, 11-5, 13-11 in 62-minutes.
"I was maybe a little guilty in the fifth game at 5-1 up of thinking about the next day and you can't do that against someone like Simon," he said.
Nick Matthew plays a quick volley
"He can win points quickly and he's a very exciting player. He's an up and coming player so I'm happy to have won in four."
Gaultier, the current World No.2, ensured his place in the final with a comfortable 3-0 victory over Stephen Coppinger, ending the South African's hopes of reaching back-to-back finals on the PSA World Tour with a dominant 11-4, 11-3, 11-6 win which took just 33 minutes.
The victory means the Frenchman goes into the title-decider without having dropped a single game during the tournament.
Case Swedish Open, Linkoping, Sweden.
Semi-finals:
[1] Gregory Gaultier (FRA) bt [8] Stephen Coppinger (RSA) 3-0: 11-4, 11-3, 11-6 (33m)
[2] Nick Matthew (ENG) bt [4] Simon Rösner (GER) 3-1: 11-7, 7-11, 11-5, 13-11 (62m)
[1] Gregory Gaultier (FRA) v [2] Nick Matthew (ENG)
Pictures by TOMMI TAPOLA
Previous articleBritish Open stays in Hull for three years
Next articleDanny Massaro on Self-Appreciation and Positive Self Talk

redpajama_set_name: RedPajamaCommonCrawl


Proflex Muscle (Pro Muscle Flex): Reviews, Price & Where to Buy!
Ignite No2 Reviews – Where to Buy, Side Effects and Price!!
Max Boost Omega Reviews : Get Strong and Muscular Body!
Alpha Flex XT – Price, Reviews, Free Trial & Where to Buy!
Muscle Pro Strength Reviews – Read Price, Scam & Where to Buy!
Titanodrol Reviews: Testosterone Booster, Read Side Effects, Price & Buy!


"I really liked Pete's online workshop. Really informative and I now feel more confident, to manage my back pain." S.B. London.
You will learn the benefits of self-managing pain and overcoming daily problems. As well as learning the tools in the Toolkit. You will also learn how to work effectively with your doctor and healthcare professionals.
Click here, to see an overview of the workshop and what you will need on the day of the Online Workshop.
Watch the video which introduce Pete and what happen on the face to face workshops.


Power Ranch Home for Sale! 4332 S Fireside Trail, Gilbert AZ 85297. New listing, a two story home in The Orchard of Power Ranch. 4 Bedrooms + Bonus Room, 3 Baths with 2,869 square feet. Private home with no neighbor behind and adjacent to a common area.
Power Ranch home for sale at 4637 E Ironhorse Road, Gilbert AZ 85297. Beautiful 2 story home in Power Ranch with 3,353 square feet, 4 Bedrooms + Den + Loft, 3 Baths. Gorgeous Kitchen with Granite Countertops and Stainless Steel appliances. Spacious and private backyard.
3D Interactive Floor Plan is the newest listing tool that I use when marketing my listings for sale.


Looking for a studio monitor that will help your mixes translate well on to any system? Don't look past the Yamaha HS series!
The HS series reference subwoofer is the perfect choice if you are looking for the idea sub to compliment your HS monitors.
It has been created by Yamaha's studio monitor engineering team to deliver an exceptionally flat, accurate response that you can trust.


text:
Q: My program is having a problem detecting a specific letter inside a word So I recently made a program where it detects a specific letter (n to be exact) inside a word given by the user.
(example: the program must detect a letter 'n' inside the word 'North')
But there is a slight problem, it cannot detect letter 'n' after the first letter of a word.
(example2: the program can detect 'Null' but not 'One')
Now, I tried editing the function, fixing the variables and conditional statements. But to no avail, nothing fixed it.
Any help will be appreciated.
Here is the code:
while True:

    def find_n(word):
        n_detector = ""
        for letter in word:
            if letter in 'Nn':
                print("I found letter(s) N in your given word: " + word)
                return n_detector

            else:
                print("I found no letter N in your given word: " + word)
                return n_detector

    print(find_n(input("Enter a word: ")))

A: You don't need to always return something if a function is called. You just leave it at print.
while True:

    def find_n(word):
        if ('n' in word.lower()):
            print("I found letter(s) N in your given word: " + word)
        else:
            print("I found no letter N in your given word: " + word)

    find_n(input("Enter a word: "))

A small point to mention- you do realize this loop will not end unless you interrupt the flow of the code? Be sure about it buddy.

A: Your specific problem lies here:
for letter in word:
    if letter in 'Nn':
        print("I found letter(s) N in your given word: " + word)
        return n_detector
    else:
        print("I found no letter N in your given word: " + word)
        return n_detector

In the first iteration of that loop (checking if the first letter is one of nN), it will print one of the messages and exit. It will not process the rest of the letters.
A modified construct that would check all letters would be:
for letter in word:
    # Process each letter in word, returning if 'n' or 'N'.

    if letter in 'Nn':
        print("I found letter(s) N in your given word: " + word)
        return n_detector

    # This bit only runs after all letters processed and none were 'n' or 'N'.

    print("I found no letter N in your given word: " + word)
    return n_detector

But you can do it more efficiently by reversing what you're looking for. Rather than checking for each letter being in the string 'nN', you can check if 'n' or 'N' is in your word. This is a non-loop operation, at least as far as your concerned:
if 'n' in word.lower():
    print("I found letter(s) N in your given word: " + word)
    return n_detector
print("I found no letter N in your given word: " + word)
return n_detector

I'm also not sure why you're returning an empty string regardless of what happens but that's not really relevant to the question at hand.
However, I'll modify your code so that it simply returns the string indicating whether n/N was found:
def find_n(word):
    if 'n' in word.lower():
        return f"I found letter(s) N in your given word: {word}"
    return f"I found no letter N in your given word: {word}"

print(find_n(input("Enter a word: ")))

A: You can make it as for-else:
Just make it as for-else:

while True:

    def find_n(word):
        n_detector = ""
        for letter in word:
            if letter in 'Nn':
                print("I found letter(s) N in your given word: " + word)
                return n_detector

        else:
            print("I found no letter N in your given word: " + word)
            return n_detector

    print(find_n(input("Enter a word: ")))

Or, Since you are returning in the if statement, You can remove your else:
while True:

    def find_n(word):
        n_detector = ""
        for letter in word:
            if letter in 'Nn':
                print("I found letter(s) N in your given word: " + word)
                return n_detector
        print("I found no letter N in your given word: " + word)
        return n_detector

    print(find_n(input("Enter a word: ")))

A: 6th Line you have done if letter in 'Nn': which means Nn both should be there so what you can do is if letter.lower() in 'n': this will convert the letter to lowercase and then compare.
So your code will look like:
while True:

    def find_n(word):
        n_detector = ""
        for letter in word:
            if letter.lower() in 'n':
                print("I found letter(s) N in your given word: " + word)
                return n_detector

            else:
                print("I found no letter N in your given word: " + word)
                return n_detector

    print(find_n(input("Enter a word: ")))

If you want more optimized code this is the one according to me:
while True:

    def find_n(word):
        n_detector = ""
        for letter in word:
            if letter in 'n':
                print("I found letter(s) N in your given word: " + word)

            else:
                print("I found no letter N in your given word: " + word)

    print(find_n(input("Enter a word: ").lower()))

A: Here you go!
while True:

def find_n(word):
    n_detector = ""
    for letter in word:
        if letter in 'Nn':
            print("I found letter(s) N in your given word: " + word)
            return n_detector

    print("I found no letter N in your given word: " + word)
    return n_detector

print(find_n(input("Enter a word: ")))

Explanation:
The problem is with the else block. Why? Because for loop loops around the code written in it and no code is left after a complete iteration and then it comes back on the top and repeats the process. So in the very first iteration, it also runs the else block which if the first letter is not n or N. Thus not checking the rest of the letters.

redpajama_set_name: RedPajamaStackExchange


If you want, you can donate me accounts so I can also record rage cheating in matchmaking. Everyone who donate will get shoutout in video, cya!
Enjoy CS:GO Legit hacking with PASTE? 1.
CS:GO Legit hacking with PASTE? 1 are up to date.
We are not responsible for any illegal actions you do with theses files. Download and use CS:GO Legit hacking with PASTE? 1 on your own responsibility.


AEA Academy's 2016-2017 After-school Program Enrollment Begins ... AEA Academy's 2016-2017 After-school Program Enrollment Begins.
Math Enrichment Program Now Available! » Ben Rush PTA Math Enrichment Program Now Available!
McCarthy-Towne Enrichment Program Offerings! – Merriam School PTO We are once again invited to participate in the McCarthy-Towne After School Enrichment Classes!! Click through to view the offered classes!
Poland Bulldog Math This site is not sponsored, endorsed, or maintained by the Poland Local School system.
The Phenomenal Mama: Mathemagis: Singapore Math Enrichment Program Although it is for teachers, but if you plan to teach your grade-schoolers or pre-schoolers Singapore Math, then this would surely be beneficial for you!


BEIJING — China announced more tariff cuts Sept. 26 on construction machinery and other goods but no action on U.S. complaints about its technology policy that are fueling an escalating trade battle.
The announcement reflected Beijing's effort to stick to reform plans aimed at making its economy more competitive while rejecting pressure to roll back state-led industry development. It gave no indication the reductions would apply to U.S. goods on which Beijing has imposed additional taxes of 5-25 %.
The tariff cut, effective Nov. 1, applies to 1,585 types of goods including construction equipment, industrial machinery, paper products and building materials. It is the second reduction in less than a year after a cut last November for food and consumer goods.
President Xi Jinping's government has announced a series of market-opening measures this year but none addresses U.S. complaints that Beijing steals or pressures companies into handing over technology.
The United States, Europe and other trading partners say initiatives such as "Made in China 2025," which calls for state-led creation of champions in robotics and other fields, violate Beijing's market-opening obligations. American officials worry they might erode U.S. industrial leadership.
U.S. President Donald Trump went ahead with a tariff increase on $200 billion of Chinese goods Sept. 26. Beijing responded by imposing penalties on $60 billion of American products. That was on top of an earlier duty increase by both sides on $50 billion of each other's goods.
Negotiations were impossible while Washington "holds a knife" to Beijing's neck by imposing tariff hikes, Chinese Deputy Commerce Minister Wang Shouwen said Sept. 26.
A Chinese government report Sept. 24 accused Trump of bullying other countries and destroying "mutual trust" required for international relations. That dampened hopes for a settlement and prompted suggestions Beijing might go so far as waiting for Trump to leave office instead of negotiating.
In research published Sept. 26, economists at the European Central Bank said they simulated a wide-ranging global trade war and found it would hurt the United States economy significantly, making households poorer and destroying jobs, while China would not suffer as much. The researchers concluded that stock and bond markets could be hurt by a general loss of confidence in the economy and that "an escalation of trade tensions could have significant adverse global effects" on growth.
The Asian Development Bank updated its regional economic outlook report Sept. 25, saying that trade conflicts, rising debt and the potential impact from rising interest rates in the United States likely will `dampen growth in the coming year.
The Manila, Philippines-based regional lender said it expects economic growth in Asia to remain at a robust 6.0 % in 2018 but to slip to 5.8 % next year. China's economy is expected to expand at a 6.6 % annual pace this year but slow to 6.3 % in 2019, it said.
Under the latest changes, tariffs on electronic equipment and other industrial products will be cut from 12.2 % to 8.8 %, according to a Cabinet statement. It said charges on textiles and building materials will fall from 11.5 % to 8.4 % and those on paper and other resource products from 6.6 % to 5.4 %.
China's overall import tariffs have been cut to an average of 7.5 % from 9.8 % a year ago, according to the Cabinet statement.


text:
Terms of Reference for the Technical Committee on Rules of Origin (TCRO)
Confirmed by the Council - June 2003
Updated - June 2005
Established : 1995
Duration : Unspecified
1. Mandate
The Technical Committee on Rules of Origin (Technical Committee or TCRO) was established by the WTO Agreement on Rules of Origin (Origin Agreement), Article 4.2 (Institutions). The Technical Committee is a WTO body, but it has operated under the auspices of the WCO as provided for under Article 4.2 of the Origin Agreement. Therefore, the WCO Council exercises its supervision over the Technical Committee with regard to administrative matters only.
When the TCRO was established, its two major mandates were to : (i) undertake the technical exercise of the Work Programme for harmonizing non-preferential rules of origin (HWP in short, as described in Articles 9.1 and 9.2 of the Origin Agreement); and (ii) assume its permanent responsibilities (as described in Articles 4.1 and 4.2 (Institutions), Article 6.3 (Review) and Annex I of the Origin Agreement).
2. Membership
Each WTO Member has the right to be represented on the Technical Committee. Each Member may nominate one delegate and one or more alternates to be its representative(s) on the Technical Committee. Representatives of members of the Technical Committee may be assisted by advisers at meetings of the Technical Committee. The WTO Secretariat may also attend such meetings with observer status (Origin Agreement, Annex I, paragraph 4).
Members of the WCO that are not Members of the WTO may be represented at meetings of the Technical Committee by one delegate and one or more alternates. Such representatives attend meetings of the Technical Committee as observers (Annex I, paragraph 5).
Subject to the approval of the Chairperson of the Technical Committee, the Secretary General of the WCO may invite representatives of governments which are neither Members of the WTO nor Members of the WCO and representatives of international governmental and trade organizations to attend meetings of the Technical Committee as observers (Annex I, paragraph 6).
Such representatives attend meetings of the Technical Committee as observers with the right to take part in the discussions but not to take part in decision-making (Rules of Procedure, Rule 4, 2nd paragraph).
Nominations of delegates, alternates and advisers to meetings of the Technical Committee are made to the Secretary General (Annex I, paragraph 7).
Delegations and alternates continue to hold their positions until such time as the Secretary General is notified of the termination of their appointment (Rules of Procedure, Rule 5, 2nd paragraph).
3. Purpose and Scope
The purpose of the Technical Committee is as follows :
(1) Re Harmonization Work Programme
The TCRO completed this technical exercise in 1999 and has been awaiting further requests from the WTO Committee on Rules of Origin (Committee or CRO). These requests could include assisting the work of the CRO in the final stages of the HWP, e.g., an overall coherence review;
In the meantime, in order to ensure the smooth implementation of the Harmonized Non-Preferential Rules of Origin in the future, the Technical Committee has informally conducted a technical rectification exercise to align the draft rules of origin (based on HS 1996) on the 2002 edition of the Harmonized System.
(2) Re permanent responsibilities of the TCRO
To examine specific technical problems arising in the day-to-day administration of the rules of origin of Members and to give advisory opinions on appropriate solutions based upon the facts presented (Annex I, paragraph 1(a));
To furnish information and advice on any matters concerning the origin determination of goods as may be requested by any Member or the Committee (Annex I, paragraph 1(b));
To prepare and circulate Periodic Reports on the technical aspects of the operation and status of this Agreement (Annex I, paragraph 1(c));
To review annually the technical aspects of the implementation and operation of Parts II and III (Annex I, paragraph 1(d));
To exercise such other responsibilities as the Committee may request of it (Annex I, paragraph 2);
To attempt to conclude its work on specific matters, especially those referred to it by Members or the Committee, in a reasonably short period of time (Annex I, paragraph 3); and
In co-operation with the Committee, to set up a mechanism to consider and propose amendments to the results of the HWP, taking into account the objectives and principles set out in Article 9 of the Origin Agreement. This includes instances where the rules need to be made more operational or need to be updated to take into account new production processes as affected by any technological change. In this respect, the Technical Committee, at its 20th Session, sent a proposal to the CRO in the form of a document entitled "Proposed Mechanism for the Submission of the Views of the TCRO to the CRO for Amendments to the Harmonized Non-Preferential Rules of Origin".
4. Key Deliverables
The Technical Committee will :
prepare draft amendment texts of the Harmonized Non-Preferential Rules of Origin in the course of the technical rectification exercise;
provide information and advisory opinions on any matters, including appropriate solutions, concerning the origin determination of goods (Annex I, paragraphs 1(a)
and (b));
prepare Periodic Reports on the technical aspects of the operation and status of this Agreement (Annex I, paragraph 1(c));
prepare Annual Reviews on the technical aspects of the implementation and operation of Parts II and III (Annex I, paragraph 1(d)); and
forward a report to the WCO Council on its work.
5. Means of Operation
The Technical Committee may :
examine specific technical problems arising in the day-to-day administration of the rules of origin of Members (Annex I, paragraph 1(a));
in accordance with WCO Council guidelines, establish such Sub-Committees or Working Parties as it considers necessary, and elect from among the representatives of its members a Chairperson for each such Sub-Committee or Working Party. All the proposals of such Sub-Committees or Working Parties shall be submitted to the Technical Committee for decision (Rules of Procedure, Rule 17);
where appropriate, request information and advice from the Committee on matters related to this Agreement. The Technical Committee may also request such other work from the Committee as it considers appropriate for the furtherance of the above-mentioned objectives of the Agreement (Article 4.2);
co-operate, promote joint projects, or share information and experiences with relevant WCO working bodies and international governmental and trade organizations related to the matters within its competence.
6. Resources Required
The Technical Committee meets as necessary, but not less than once a year (Annex I, paragraph 8). Meetings of the Technical Committee are normally held at WCO Headquarters (Rules of Procedure, Rule 9).
The WCO Secretariat is responsible for :
(a) preparation of each meeting, including :
administrative preparation;
informing all members and observers at least 30 days in advance, except in urgent cases, of the opening date and duration of each session of the Technical Committee (Rules of Procedure, Rule 8);
including items in the Agenda at least 60 days before the session opens (Rules of Procedure, Rule 10);
preparing working documents and non-papers, where necessary.
(b) the meeting itself, including :
assisting the Chairperson;
presenting reports and proposals;
facilitating the course of the meeting;
taking note of discussions;
preparing a draft Report.
(c) follow-up to the meeting, including :
preparing the final Report and distributing it to members of the Technical Committee.


text:
Namibia's Dillish Wins Big Brother The Chase
By Ken / Monday, 26 Aug 2013 07:22AM / Leave a Comment
Namibia's Dillish Mathews is Big Brother The Chase winner. The first Namibian to do it.
Dillish remained mostly out of trouble and behind the scenes for the 90 days, maintaining a cordial relationship with her fellow housemates.
The only time the Namibian got herself in a spot of trouble was when she and her good friend, Nigeria's Melvin, had a disagreement after she told her fellow Housemates about a relationship he was involved in, which was less than stellar. Dillish and Cleo proved to all and sundry that women are indeed a force of nature. The two hotties pipped their male counterparts, Elikem and Melvin to the Top 2 while, as well as their close friend Beverly.
Before the big news was delivered, Pebbles the fish surprised all and sundry with one last speech. "On behalf of myself and the other fish, I would like to congratulate you on your amazing feat. You are the specialest ladies in Africa," Pebbles said.
As soon as the Namibian was announced the winner of the Chase, she broke down in a heap of tears at the realisation that she has a cool USD 300 000 sitting in her bank account.
– BigbrotherAfrica
PHOTOS – Demi Lovato Given a Goat By The Maasai For Her 21st Birthday
All The PHOTOS From Sunday's Mashemeji Derby


In this variation the dominant shape is the square, as already seen on Nexus devices running Android Oreo, this shape is as simple as beautiful.
-A lot of Launchers supported!
- Vector graphic designs grant an awesome quality to every icon!
-The awesome dashboard lets you discover 20+ high definition QHD wallpapers!
- Icon Requests are managed by the dashboard too!
- Updates are granted for years, based on icon requests.
More users = More requests = More updates!
-For News, Polls and Suggestions take a look at the following links!


text:
Der Gau Mecklenburg war auf Parteiebene seit 1925 die regionale Verwaltungseinheit der NSDAP, die bis zum 31. März 1937 (Groß-Hamburg-Gesetz) zusätzlich die Stadt Lübeck umfasste und Gau Mecklenburg-Lübeck hieß.

Geschichte
Die NSDAP verfügte seit dem 22. Mai 1926 offiziell über die reichsweite Gliederung in Parteigaue, die häufig der Struktur der Reichstagswahlkreise entsprach. Nach der Machtergreifung 1933 wurden die Gaue zunehmend auch zu staatlichen Verwaltungseinheiten. An der Spitze über den Kreisleitungen stand der von Adolf Hitler eingesetzte Gauleiter, der häufig zugleich Reichsstatthalter in den Ländern war. Er war zuständig für die Propaganda, Überwachung und im Krieg für immer mehr Aufgaben: als Reichsverteidigungskommissar u. a. für den Luftschutz, den Einsatz von Zwangsarbeitern und den Volkssturm. Für den Gau Mecklenburg-(Lübeck) hatte Friedrich Hildebrandt vom 22. März 1925 bis zum 8. Mai 1945 dieses Amt inne, nur acht Monate von Hitler beurlaubt zwischen Juli 1930 und Februar 1931 wegen seiner Nähe zu Otto Strasser. In dieser Zeit amtierte Herbert Albrecht, der nach dem Gewinn eines Reichstagsmandates freiwillig zurücktrat. Auf der Staatsebene stand dem Parteigau das Land Mecklenburg gegenüber als eine Verwaltungseinheit im Deutschen Reich vom 1. Januar 1934 bis 1945, gebildet aus dem Freistaat Mecklenburg-Strelitz und dem Freistaat Mecklenburg-Schwerin. Siehe Geschichte Mecklenburgs.

Der Sitz der Gauleitung war in Schwerin im ehemaligen Staatsministerium (heute Staatskanzlei). In Lübeck setzte der Reichsstatthalter für Mecklenburg und Lübeck Hildebrandt als seinen Vertreter und Oberbürgermeister Otto-Heinrich Drechsler ein. Auch im Land Mecklenburg gab es einen vom Reichsstatthalter eingesetzten Ministerpräsidenten: bis Oktober 1934 Hans Egon Engell, danach Friedrich Scharf.

Hildebrandts Stellvertreter in der Gauleitung waren 1932/33 Drechsler, vom 1. Juni 1933 bis März 1935 Rudolf Schildmann und dann vom 1. April 1934 bis 1945 Gerd von Koerber. Der Gauinspekteur war Walter Unger, der 1933/34 noch im Gau die Hitlerjugend (HJ) geleitet hatte. Von 1936 bis 1940 nahm er ein Reichstagsmandat für den Wahlkreis 35 Mecklenburg wahr. Ihm ging seit 1933 zuvor Karl Seemann, der auch Gaufachberater für Landwirtschaft war und bis 1943 ein Mandat hatte. Es folgten noch der Propagandaleiter Fritz Montag bis zum Tod 1943 sowie der Polizeiführer Hans-Eugen Sommer. Einflussreich blieb auch der ehemalige Ministerpräsident von Mecklenburg-Schwerin Walter Granzow, der im Gau Landwirtschaftlicher Fachberater blieb.

Gauwirtschaftsberater waren Hennecke von Plessen (1933–1942), der in die Arisierungen eingebunden war, und der DAF-Funktionär Fritz Montag (1942–1943). Eine Gauführerschule bestand in Schwerin zunächst im ehemaligen Hotel "Nordischer Hof" (heute Finanzministerium), dann in einem Neubau (heute NDR-Landesfunkhaus). In der Gauleitung gab es verschiedene Ämter mit Koordinierungsaufgaben, so das Amt für Kommunalpolitik, das ab 1933 Friedrich Scharf, später Richard Crull, zugleich ab 1943 Oberbürgermeister in Schwerin, leitete, oder das Amt für Erzieher, das der Lehrer Rudolf Krüger (Politiker, 1898) 1936–1942 leitete, parallel als Gauwalter des NS-Lehrerbundes. Der Rostocker Germanist Willi Flemming leitete ab 1938 die Stelle für Büchereiwesen, Abteilung Volksbildung des Schulungsamtes der Gauleitung, womit er für die Zensur entscheidend wurde.

Schwerin wurde für eine Gauhauptstadt als zu klein empfunden. 1935 begannen Pläne zur Umgestaltung des Stadtzentrums. Der Bau zweier neuer städtischer Ringstraßen und einer neuen Trasse für die Lübecker Straße, die Verbreiterung der Wittenburger Straße und der Schloßstraße sowie die Errichtung monumentaler Gebäude gehörten dazu, ferner wurden 1936 mehrere Orte zwangsweise eingemeindet.

Nach dem großen Luftangriff auf Rostock im April 1942 wurde ein Gaueinsatzstab gebildet, um Rettungs- und Bergungsmaßnahmen zu koordinieren.

Literatur
 Volker Janke: Ein Buch mit den Namen der Kämpfer im Gau Mecklenburg-Lübeck aus dem Jahr 1935, in: Zeitgeschichte regional 17/2, Dezember 2013, S. 72–75
 Mecklenburg im Zweiten Weltkrieg. Die Tagungen des Gauleiters Friedrich Hildebrandt mit den NS-Führungsgremien des Gaues Mecklenburg 1939-1945. Eine Edition der Sitzungsprotokolle, bearb. von Michael Buddrus, unter Mitarbeit von Sigrid Fritzlar und Karsten Schröder, Edition Temmen, Bremen 2009
 Jürgen John, Horst Möller, Thomas Schaarschmidt (Hrsg.): Die NS-Gaue. Regionale Mittelinstanzen im zentralistischen "Führerstaat". Oldenbourg, München 2007 ISBN 978-3-486-58086-0.
 Henrik Bispinck: Bildungsbürger in Demokratie und Diktatur: Lehrer an höheren Schulen in Mecklenburg 1918 bis 1961, Oldenbourg, München 2011 ISBN 978-3-48659804-9
Michael Buddrus mit Sigrid Fritzlar: Die Städte Mecklenburgs im Dritten Reich. Ein Handbuch zur Stadtentwicklung im Nationalsozialismus, ergänzt durch ein biographisches Lexikon der Bürgermeister, Stadträte und Ratsherren. Edition Temmen, Bremen 2011, ISBN 978-3-8378-4029-2.

Weblinks

 Übersicht über die Gaue
 Anfänge Schwerins in der NS-Zeit

Einzelbelege

Mecklenburg
Historische Organisation (Lübeck)
Historische Organisation (Schwerin)
Mecklenburgische Geschichte
Gegründet 1925
Aufgelöst 1945

redpajama_set_name: RedPajamaWikipedia


This week, we try something a little bit different! Our first virtual podcast with Joe Varnadore. Joe invested in his first property at the age of 19; he learned the importance of using creative financing to make the deal work. Since then, Joe has created, brokered, bought and sold more than 10,000 real estate notes on both residential and commercial properties.
http://bit.ly/2BG5A3n Use code "aren1" at checkout for $10 off!


Created in 2010 by François Georges and Xavier Guilbert, two company directors with a proven track record in tourism, Sandaya is today a group with 4 and 5 star campsites throughout Europe.
Because Sandaya both owns and manages its campsites, we are able to promise you total consistency in the quality of every service we provide. And although each Sandaya campsite has its own individual identity, they have all been carefully selected for the beauty of their setting and the fabulous "dolce vita" offered by their location. Essential values that today underpin Sandaya's success!
On holiday with Sandaya, our customers are able to enjoy top-of-the-range facilities and accommodation, that meet all their expectations of a 4 or 5 star campsite! We have made the deliberate choice to offer you not only campsites with quick and direct access to the sea, but also located in regions with a rich cultural and natural heritage. This means that every one of our holiday-makers is free to put together their own holiday programme and do exactly what they want to do, alternating relaxation, sport, exploration and discovery.
Jobs and quality of service, for unforgettable holidays!
Throughout its campsites, the Sandaya group employs up to 500 staff at the height of the season in professions that include hospitality, catering, maintenance and entertainment, but all with the same brief - to make your stay even better! Our aim? To ensure you feel completely at home here with us and free to enjoy all the pleasure of being on holiday!
And with our varied range of rental accommodation (mobile homes, chalets, lodge tents, cabins) and camping pitches for your tent, caravan or campervan, everyone is certain to get a truly good night's sleep. Each of our customers, wherever they come from in Europe, can also enjoy the pleasure of high quality equipment such as air-conditioning, a jacuzzi® or an outdoor kitchen, all in the heart of a natural setting and well-cared for environment.
Activities, services and entertainment, for a holiday with never a dull moment!
You'll always have a wide choice of activities available whichever Sandaya campsite you choose, ensuring that campers of every age can make the most of every minute of their holiday, whether with the family or with friends: fun water parks, zen areas for simply chilling, children's clubs, outdoor entertainment and activities, etc. To add an extra special touch to your stay and make life even easier, our campsites also provide a great range of services and shops conveniently close at hand: restaurant, bar, grocery store, boutique, laundry, campervan service point, beach shuttle and more. And to keep in shape all summer long? Our entertainment staff are ready and waiting to offer fitness, aquagym and dance lessons, and to organise sports tournaments and themed evenings. All in a warm and welcoming family atmosphere, of course.
A holiday free from constraint, a holiday as free as the air!
The stay that you've always dreamed of on the shores of the Mediterranean, in the heart of nature or looking out over the Atlantic, in the comfort of a PREMIUM accommodation option, on a pitch for your tent or perched high in a tree-house. Sandaya offers every choice for a holiday without compromise: here in your new home-away-from-home!
Sandaya, camping inspired by freedom.


Alex joined the team at East Port Veterinary Hospital at the beginning of November 2010 after completing her Certificate IV in Veterinary Nursing. She grew up on a farm at Gloucester with a variety of animals. Her favourites being a pug called Roger, a ragdoll called Lucy and a tabby cat called Millie.
In 2011 she fostered and then adopted Dexter the cat from the local RSPCA shelter. Alex has always been interested in competing in cattle shows and horse events and has two registered Australian Stock horses named Socks and Ruby. In her spare time, she enjoys visiting the family farm at Gloucester, going to the gym, fishing, playing Oz tag and basketball.


text:
    <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="close()">
        ×</button>

{{'DASHBOARD.PARAM.NAME'|translate}}

{{alert.msg}}

                {{'DASHBOARD.PARAM.FIND'|translate}}
                <input type="text" class="form-control" ng-model="keyword">

                {{'DASHBOARD.PARAM.OPT_VALUE'|translate}}
                <select multiple class="form-control selectsOption" style="height: 300px">
                    <option ng-repeat="v in selects | filter:keyword" ng-click="selectedValues($event)">{{v}}</option>
                </select>

            <select class="form-control filterOptions" ng-model="param.type" ng-options="t as t for t in type" ng-change="filterType()">
            </select>

                {{'DASHBOARD.PARAM.VALUE_LIST'|translate}}
                <select multiple class="form-control" style="height: 300px">
                    <option ng-repeat="v in param.values" ng-click="deleteSelected($event)">{{v}}</option>
                </select>

                    {{'DASHBOARD.PARAM.VALUE_A'|translate}}

{{param.values[0]}}

                    {{'DASHBOARD.PARAM.VALUE_B'|translate}}

{{param.values[1]}}

                {{'DASHBOARD.PARAM.VALUE'|translate}}

{{param.values[0]}}

    <button type="button" class="btn btn-default pull-left" data-dismiss="modal" ng-click="close()">{{'COMMON.CANCEL'|translate}}</button>
    <button type="button" class="btn btn-primary" ng-click="ok()">{{'COMMON.OK'|translate}}</button>