summaryrefslogtreecommitdiff
path: root/src/third_party/mozjs-45
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2016-11-08 11:52:12 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2016-11-08 11:52:30 -0500
commitbb78a26fcdca87e808cab52b6daa91be581bcbbc (patch)
tree25e4f445fe5dce1c6f7d78929a265aabc397e2b0 /src/third_party/mozjs-45
parent4b423738f24c1ccd628e1fcc2b9ee5fd84bbfe4c (diff)
downloadmongo-bb78a26fcdca87e808cab52b6daa91be581bcbbc.tar.gz
SERVER-26902 Update to Mozilla Javascript ESR 45.4.0
Diffstat (limited to 'src/third_party/mozjs-45')
-rw-r--r--src/third_party/mozjs-45/extract.sh7
-rw-r--r--src/third_party/mozjs-45/extract/js/public/GCHashTable.h2
-rw-r--r--src/third_party/mozjs-45/extract/js/public/HashTable.h27
-rw-r--r--src/third_party/mozjs-45/extract/js/public/HeapAPI.h2
-rw-r--r--src/third_party/mozjs-45/extract/js/public/Utility.h16
-rw-r--r--src/third_party/mozjs-45/extract/js/src/asmjs/Wasm.h4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/builtin/RegExp.cpp61
-rw-r--r--src/third_party/mozjs-45/extract/js/src/builtin/WeakMapObject.cpp3
-rw-r--r--src/third_party/mozjs-45/extract/js/src/frontend/BytecodeCompiler.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/frontend/BytecodeEmitter.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/frontend/Parser.cpp9
-rw-r--r--src/third_party/mozjs-45/extract/js/src/frontend/SharedContext.h5
-rw-r--r--src/third_party/mozjs-45/extract/js/src/frontend/TokenStream.cpp22
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Barrier.cpp6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Barrier.h17
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/GCRuntime.h6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Heap.h6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Iteration.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Marking.cpp6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Nursery.cpp52
-rw-r--r--src/third_party/mozjs-45/extract/js/src/gc/Nursery.h11
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/BaselineBailouts.cpp46
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/BaselineCompiler.cpp10
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/BaselineIC.cpp14
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/Ion.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/IonAnalysis.cpp18
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/IonCaches.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/JitcodeMap.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/MCallOptimize.cpp3
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/MIR.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/MIR.h19
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/RangeAnalysis.cpp46
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/Recover.cpp21
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/Recover.h1
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/SharedIC.cpp13
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/SharedIC.h8
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/VMFunctions.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.cpp55
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.h2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/arm/Assembler-arm.h12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/arm/CodeGenerator-arm.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/arm/MacroAssembler-arm.h23
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/arm64/Assembler-arm64.h12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/arm64/MacroAssembler-arm64.h19
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/mips-shared/Assembler-mips-shared.h12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/mips32/MacroAssembler-mips32.h23
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/mips64/MacroAssembler-mips64.h19
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/none/MacroAssembler-none.h2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/shared/Assembler-shared.h11
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/x64/MacroAssembler-x64.h20
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/x86-shared/Assembler-x86-shared.h12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jit/x86/MacroAssembler-x86.h24
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsapi.cpp12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsapi.h43
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsarray.cpp29
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jscntxt.cpp34
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jscntxt.h4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jscntxtinlines.h9
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsexn.cpp63
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsfriendapi.h4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsmath.cpp22
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsmath.h3
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsobj.cpp5
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsobjinlines.h3
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsscript.cpp9
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsscript.h27
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsstr.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsutil.h31
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jswatchpoint.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsweakmap.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/jsweakmap.h8
-rw-r--r--src/third_party/mozjs-45/extract/js/src/mfbt/Unified_cpp_mfbt0.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/selfhosted.out.h6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/ArrayBufferObject.cpp3
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/Debugger.cpp27
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/Debugger.h7
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/HelperThreads.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/ObjectGroup.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.cpp114
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.h12
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/Runtime.cpp1
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/Runtime.h85
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/SavedStacks.cpp7
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.cpp15
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.h14
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/Shape.cpp4
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/StructuredClone.cpp1
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/TaggedProto.h5
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/TypeInference-inl.h6
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/TypeInference.cpp8
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/UbiNodeCensus.cpp2
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.cpp7
-rw-r--r--src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.h11
-rw-r--r--src/third_party/mozjs-45/extract/mfbt/Opaque.h44
-rw-r--r--src/third_party/mozjs-45/extract/mfbt/moz.build1
-rw-r--r--src/third_party/mozjs-45/get-sources.sh2
-rw-r--r--src/third_party/mozjs-45/include/js/GCHashTable.h2
-rw-r--r--src/third_party/mozjs-45/include/js/HashTable.h27
-rw-r--r--src/third_party/mozjs-45/include/js/HeapAPI.h2
-rw-r--r--src/third_party/mozjs-45/include/js/Utility.h16
-rw-r--r--src/third_party/mozjs-45/include/jsapi.h43
-rw-r--r--src/third_party/mozjs-45/include/jsfriendapi.h4
-rw-r--r--src/third_party/mozjs-45/include/mozilla/Opaque.h44
-rw-r--r--src/third_party/mozjs-45/platform/aarch64/linux/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/aarch64/linux/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/ppc64le/linux/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/ppc64le/linux/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/s390x/linux/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/s390x/linux/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/freebsd/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/freebsd/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/linux/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/linux/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/openbsd/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/openbsd/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/osx/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/osx/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/solaris/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/solaris/include/js-config.h2
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/windows/build/js-confdefs.h6
-rw-r--r--src/third_party/mozjs-45/platform/x86_64/windows/include/js-config.h2
121 files changed, 1092 insertions, 557 deletions
diff --git a/src/third_party/mozjs-45/extract.sh b/src/third_party/mozjs-45/extract.sh
index 6c106e5ee6d..589661b4ff9 100644
--- a/src/third_party/mozjs-45/extract.sh
+++ b/src/third_party/mozjs-45/extract.sh
@@ -193,6 +193,7 @@ cp extract/mfbt/MemoryReporting.h include/mozilla
cp extract/mfbt/Move.h include/mozilla
cp extract/mfbt/NullPtr.h include/mozilla
cp extract/mfbt/NumericLimits.h include/mozilla
+cp extract/mfbt/Opaque.h include/mozilla
cp extract/mfbt/Pair.h include/mozilla
cp extract/mfbt/PodOperations.h include/mozilla
cp extract/mfbt/Poison.h include/mozilla
@@ -226,6 +227,6 @@ cp extract/mfbt/XorShift128PlusRNG.h include/mozilla
# Apply a local patch
git apply \
- mongodb_patches/SERVER-23358.patch \
- mongodb_patches/SERVER-24400.patch \
- mongodb_patches/SERVER-22927-x86_64.patch
+ mongo_patches/SERVER-23358.patch \
+ mongo_patches/SERVER-24400.patch \
+ mongo_patches/SERVER-22927-x86_64.patch
diff --git a/src/third_party/mozjs-45/extract/js/public/GCHashTable.h b/src/third_party/mozjs-45/extract/js/public/GCHashTable.h
index 9d2b83a626a..94d98f7bcfb 100644
--- a/src/third_party/mozjs-45/extract/js/public/GCHashTable.h
+++ b/src/third_party/mozjs-45/extract/js/public/GCHashTable.h
@@ -112,7 +112,6 @@ class GCHashMapOperations
bool empty() const { return map().empty(); }
uint32_t count() const { return map().count(); }
size_t capacity() const { return map().capacity(); }
- uint32_t generation() const { return map().generation(); }
bool has(const Lookup& l) const { return map().lookup(l).found(); }
};
@@ -253,7 +252,6 @@ class GCHashSetOperations
bool empty() const { return set().empty(); }
uint32_t count() const { return set().count(); }
size_t capacity() const { return set().capacity(); }
- uint32_t generation() const { return set().generation(); }
bool has(const Lookup& l) const { return set().lookup(l).found(); }
};
diff --git a/src/third_party/mozjs-45/extract/js/public/HashTable.h b/src/third_party/mozjs-45/extract/js/public/HashTable.h
index 1ddf83fa7c8..159315d36b6 100644
--- a/src/third_party/mozjs-45/extract/js/public/HashTable.h
+++ b/src/third_party/mozjs-45/extract/js/public/HashTable.h
@@ -13,6 +13,7 @@
#include "mozilla/Casting.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/Move.h"
+#include "mozilla/Opaque.h"
#include "mozilla/PodOperations.h"
#include "mozilla/ReentrancyGuard.h"
#include "mozilla/TemplateLib.h"
@@ -33,6 +34,8 @@ namespace detail {
/*****************************************************************************/
+using Generation = mozilla::Opaque<uint64_t>;
+
// A JS-friendly, STL-like container providing a hash-based map from keys to
// values. In particular, HashMap calls constructors and destructors of all
// objects added so non-PODs may be used safely.
@@ -207,7 +210,9 @@ class HashMap
// If |generation()| is the same before and after a HashMap operation,
// pointers into the table remain valid.
- uint32_t generation() const { return impl.generation(); }
+ Generation generation() const {
+ return impl.generation();
+ }
/************************************************** Shorthand operations */
@@ -443,7 +448,9 @@ class HashSet
// If |generation()| is the same before and after a HashSet operation,
// pointers into the table remain valid.
- uint32_t generation() const { return impl.generation(); }
+ Generation generation() const {
+ return impl.generation();
+ }
/************************************************** Shorthand operations */
@@ -799,7 +806,7 @@ class HashTable : private AllocPolicy
Entry* entry_;
#ifdef JS_DEBUG
const HashTable* table_;
- uint32_t generation;
+ Generation generation;
#endif
protected:
@@ -907,7 +914,7 @@ class HashTable : private AllocPolicy
#ifdef JS_DEBUG
const HashTable* table_;
uint64_t mutationCount;
- uint32_t generation;
+ Generation generation;
bool validEntry;
#endif
@@ -1056,9 +1063,9 @@ class HashTable : private AllocPolicy
static const size_t CAP_BITS = 30;
public:
- Entry* table; // entry storage
- uint32_t gen:24; // entry storage generation number
- uint32_t hashShift:8; // multiplicative hash shift
+ uint64_t gen:56; // entry storage generation number
+ uint64_t hashShift:8; // multiplicative hash shift
+ Entry* table; // entry storage
uint32_t entryCount; // number of entries in table
uint32_t removedCount; // removed entry sentinels in table
@@ -1155,9 +1162,9 @@ class HashTable : private AllocPolicy
public:
explicit HashTable(AllocPolicy ap)
: AllocPolicy(ap)
- , table(nullptr)
, gen(0)
, hashShift(sHashBits)
+ , table(nullptr)
, entryCount(0)
, removedCount(0)
#ifdef JS_DEBUG
@@ -1596,10 +1603,10 @@ class HashTable : private AllocPolicy
return JS_BIT(sHashBits - hashShift);
}
- uint32_t generation() const
+ Generation generation() const
{
MOZ_ASSERT(table);
- return gen;
+ return Generation(gen);
}
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
diff --git a/src/third_party/mozjs-45/extract/js/public/HeapAPI.h b/src/third_party/mozjs-45/extract/js/public/HeapAPI.h
index ba9fcbcf0ce..7f97d028e7a 100644
--- a/src/third_party/mozjs-45/extract/js/public/HeapAPI.h
+++ b/src/third_party/mozjs-45/extract/js/public/HeapAPI.h
@@ -401,7 +401,7 @@ IsIncrementalBarrierNeededOnTenuredGCThing(JS::shadow::Runtime* rt, const JS::GC
{
MOZ_ASSERT(thing);
MOZ_ASSERT(!js::gc::IsInsideNursery(thing.asCell()));
- if (rt->isHeapBusy())
+ if (rt->isHeapCollecting())
return false;
JS::Zone* zone = JS::GetTenuredGCThingZone(thing);
return JS::shadow::Zone::asShadowZone(zone)->needsIncrementalBarrier();
diff --git a/src/third_party/mozjs-45/extract/js/public/Utility.h b/src/third_party/mozjs-45/extract/js/public/Utility.h
index d62e62e42dd..318b80298cc 100644
--- a/src/third_party/mozjs-45/extract/js/public/Utility.h
+++ b/src/third_party/mozjs-45/extract/js/public/Utility.h
@@ -34,22 +34,6 @@ namespace mozilla {}
/* The private JS engine namespace. */
namespace js {}
-/*
- * Patterns used by SpiderMonkey to overwrite unused memory. If you are
- * accessing an object with one of these pattern, you probably have a dangling
- * pointer.
- */
-#define JS_FRESH_NURSERY_PATTERN 0x2F
-#define JS_SWEPT_NURSERY_PATTERN 0x2B
-#define JS_ALLOCATED_NURSERY_PATTERN 0x2D
-#define JS_FRESH_TENURED_PATTERN 0x4F
-#define JS_MOVED_TENURED_PATTERN 0x49
-#define JS_SWEPT_TENURED_PATTERN 0x4B
-#define JS_ALLOCATED_TENURED_PATTERN 0x4D
-#define JS_EMPTY_STOREBUFFER_PATTERN 0x1B
-#define JS_SWEPT_CODE_PATTERN 0x3B
-#define JS_SWEPT_FRAME_PATTERN 0x5B
-
#define JS_STATIC_ASSERT(cond) static_assert(cond, "JS_STATIC_ASSERT")
#define JS_STATIC_ASSERT_IF(cond, expr) MOZ_STATIC_ASSERT_IF(cond, expr, "JS_STATIC_ASSERT_IF")
diff --git a/src/third_party/mozjs-45/extract/js/src/asmjs/Wasm.h b/src/third_party/mozjs-45/extract/js/src/asmjs/Wasm.h
index 277746734b2..b0976d012da 100644
--- a/src/third_party/mozjs-45/extract/js/src/asmjs/Wasm.h
+++ b/src/third_party/mozjs-45/extract/js/src/asmjs/Wasm.h
@@ -34,7 +34,9 @@ using mozilla::Move;
// The ValType enum represents the WebAssembly "value type", which are used to
// specify the type of locals and parameters.
-enum class ValType : uint8_t
+// FIXME: uint8_t would make more sense for the underlying storage class, but
+// causes miscompilations in GCC (fixed in 4.8.5 and 4.9.3).
+enum class ValType
{
I32,
I64,
diff --git a/src/third_party/mozjs-45/extract/js/src/builtin/RegExp.cpp b/src/third_party/mozjs-45/extract/js/src/builtin/RegExp.cpp
index 8d6c4a1b7c3..2991118ebb6 100644
--- a/src/third_party/mozjs-45/extract/js/src/builtin/RegExp.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/builtin/RegExp.cpp
@@ -145,13 +145,14 @@ js::ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, RegExpObject& reobj,
* provided by the user, we omit it and just return the usual success/failure.
*/
static bool
-RegExpInitialize(JSContext* cx, Handle<RegExpObject*> obj, HandleValue patternValue,
- HandleValue flagsValue, RegExpStaticsUse staticsUse)
+RegExpInitializeIgnoringLastIndex(JSContext* cx, Handle<RegExpObject*> obj,
+ HandleValue patternValue, HandleValue flagsValue,
+ RegExpStaticsUse staticsUse)
{
RootedAtom pattern(cx);
if (patternValue.isUndefined()) {
/* Step 1. */
- pattern = cx->runtime()->emptyString;
+ pattern = cx->names().empty;
} else {
/* Steps 2-3. */
pattern = ToAtom<CanGC>(cx, patternValue);
@@ -166,12 +167,13 @@ RegExpInitialize(JSContext* cx, Handle<RegExpObject*> obj, HandleValue patternVa
RootedString flagStr(cx, ToString<CanGC>(cx, flagsValue));
if (!flagStr)
return false;
+
/* Step 7. */
if (!ParseRegExpFlags(cx, flagStr, &flags))
return false;
}
- /* Steps 9-10. */
+ /* Steps 8-10. */
CompileOptions options(cx);
frontend::TokenStream dummyTokenStream(cx, options, nullptr, 0, nullptr);
if (!irregexp::ParsePatternSyntax(dummyTokenStream, cx->tempLifoAlloc(), pattern))
@@ -184,11 +186,8 @@ RegExpInitialize(JSContext* cx, Handle<RegExpObject*> obj, HandleValue patternVa
flags = RegExpFlag(flags | res->getFlags());
}
- /* Steps 11-15. */
- if (!RegExpObject::initFromAtom(cx, obj, pattern, flags))
- return false;
-
- /* Step 16. */
+ /* Steps 11-13. */
+ obj->initIgnoringLastIndex(pattern, flags);
return true;
}
@@ -267,21 +266,25 @@ regexp_compile_impl(JSContext* cx, const CallArgs& args)
flags = g->getFlags();
}
- // Step 5.
- if (!RegExpObject::initFromAtom(cx, regexp, sourceAtom, flags))
- return false;
+ // Step 5, minus lastIndex zeroing.
+ regexp->initIgnoringLastIndex(sourceAtom, flags);
+ } else {
+ // Step 4.
+ RootedValue P(cx, patternValue);
+ RootedValue F(cx, args.get(1));
- args.rval().setObject(*regexp);
- return true;
+ // Step 5, minus lastIndex zeroing.
+ if (!RegExpInitializeIgnoringLastIndex(cx, regexp, P, F, UseRegExpStatics))
+ return false;
}
- // Step 4.
- RootedValue P(cx, patternValue);
- RootedValue F(cx, args.get(1));
-
- // Step 5.
- if (!RegExpInitialize(cx, regexp, P, F, UseRegExpStatics))
- return false;
+ if (regexp->lookupPure(cx->names().lastIndex)->writable()) {
+ regexp->zeroLastIndex(cx);
+ } else {
+ RootedValue zero(cx, Int32Value(0));
+ if (!SetProperty(cx, regexp, cx->names().lastIndex, zero))
+ return false;
+ }
args.rval().setObject(*regexp);
return true;
@@ -377,8 +380,7 @@ js::regexp_construct(JSContext* cx, unsigned argc, Value* vp)
return false;
}
- if (!RegExpObject::initFromAtom(cx, regexp, sourceAtom, flags))
- return false;
+ regexp->initAndZeroLastIndex(sourceAtom, flags, cx);
args.rval().setObject(*regexp);
return true;
@@ -417,8 +419,9 @@ js::regexp_construct(JSContext* cx, unsigned argc, Value* vp)
return false;
// Step 10.
- if (!RegExpInitialize(cx, regexp, P, F, UseRegExpStatics))
+ if (!RegExpInitializeIgnoringLastIndex(cx, regexp, P, F, UseRegExpStatics))
return false;
+ regexp->zeroLastIndex(cx);
args.rval().setObject(*regexp);
return true;
@@ -441,8 +444,9 @@ js::regexp_construct_no_statics(JSContext* cx, unsigned argc, Value* vp)
if (!regexp)
return false;
- if (!RegExpInitialize(cx, regexp, args[0], args.get(1), DontUseRegExpStatics))
+ if (!RegExpInitializeIgnoringLastIndex(cx, regexp, args[0], args.get(1), DontUseRegExpStatics))
return false;
+ regexp->zeroLastIndex(cx);
args.rval().setObject(*regexp);
return true;
@@ -706,9 +710,12 @@ js::CreateRegExpPrototype(JSContext* cx, JSProtoKey key)
return nullptr;
proto->NativeObject::setPrivate(nullptr);
- RootedAtom source(cx, cx->names().empty);
- if (!RegExpObject::initFromAtom(cx, proto, source, RegExpFlag(0)))
+ if (!RegExpObject::assignInitialShape(cx, proto))
return nullptr;
+
+ RootedAtom source(cx, cx->names().empty);
+ proto->initAndZeroLastIndex(source, RegExpFlag(0), cx);
+
return proto;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/builtin/WeakMapObject.cpp b/src/third_party/mozjs-45/extract/js/src/builtin/WeakMapObject.cpp
index f9487285388..e1eb94cf6aa 100644
--- a/src/third_party/mozjs-45/extract/js/src/builtin/WeakMapObject.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/builtin/WeakMapObject.cpp
@@ -154,8 +154,7 @@ SetWeakMapEntryInternal(JSContext* cx, Handle<WeakMapObject*> mapObj,
{
ObjectValueMap* map = mapObj->getMap();
if (!map) {
- AutoInitGCManagedObject<ObjectValueMap> newMap(
- cx->make_unique<ObjectValueMap>(cx, mapObj.get()));
+ auto newMap = cx->make_unique<ObjectValueMap>(cx, mapObj.get());
if (!newMap)
return false;
if (!newMap->init()) {
diff --git a/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeCompiler.cpp b/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeCompiler.cpp
index 8cd69f9cb39..22519caa8ad 100644
--- a/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeCompiler.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeCompiler.cpp
@@ -814,8 +814,8 @@ frontend::CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const cha
script->bindings = pn->pn_funbox->bindings;
- if (lazy->usesArgumentsApplyAndThis())
- script->setUsesArgumentsApplyAndThis();
+ if (lazy->isLikelyConstructorWrapper())
+ script->setLikelyConstructorWrapper();
if (lazy->hasBeenCloned())
script->setHasBeenCloned();
diff --git a/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeEmitter.cpp b/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeEmitter.cpp
index 021748f1dfb..0a6cc35ad1c 100644
--- a/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeEmitter.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/frontend/BytecodeEmitter.cpp
@@ -6271,8 +6271,8 @@ BytecodeEmitter::emitFunction(ParseNode* pn, bool needsProto)
if (!bce2.emitFunctionScript(pn->pn_body))
return false;
- if (funbox->usesArguments && funbox->usesApply && funbox->usesThis)
- script->setUsesArgumentsApplyAndThis();
+ if (funbox->isLikelyConstructorWrapper())
+ script->setLikelyConstructorWrapper();
}
if (outersc->isFunctionBox())
outersc->asFunctionBox()->function()->nonLazyScript()->setHasInnerFunctions(true);
diff --git a/src/third_party/mozjs-45/extract/js/src/frontend/Parser.cpp b/src/third_party/mozjs-45/extract/js/src/frontend/Parser.cpp
index 8a331910fa7..8515f97dedb 100644
--- a/src/third_party/mozjs-45/extract/js/src/frontend/Parser.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/frontend/Parser.cpp
@@ -524,6 +524,9 @@ ParseContext<ParseHandler>::generateBindings(ExclusiveContext* cx, TokenStream&
if (UINT32_MAX - args_.length() <= vars_.length() + bodyLevelLexicals_.length())
return ts.reportError(JSMSG_TOO_MANY_LOCALS);
+ if (blockScopeDepth >= Bindings::BLOCK_SCOPED_LIMIT)
+ return ts.reportError(JSMSG_TOO_MANY_LOCALS);
+
// Fix up slots in non-global contexts. In global contexts all body-level
// names are dynamically defined and do not live in either frame or
// CallObject slots.
@@ -760,6 +763,7 @@ FunctionBox::FunctionBox(ExclusiveContext* cx, ObjectBox* traceListHead, JSFunct
usesArguments(false),
usesApply(false),
usesThis(false),
+ usesReturn(false),
funCxFlags()
{
// Functions created at parse time may be set singleton after parsing and
@@ -2702,8 +2706,8 @@ Parser<SyntaxParseHandler>::finishFunctionDefinition(Node pn, FunctionBox* funbo
if (pc->sc->strict())
lazy->setStrict();
lazy->setGeneratorKind(funbox->generatorKind());
- if (funbox->usesArguments && funbox->usesApply && funbox->usesThis)
- lazy->setUsesArgumentsApplyAndThis();
+ if (funbox->isLikelyConstructorWrapper())
+ lazy->setLikelyConstructorWrapper();
if (funbox->isDerivedClassConstructor())
lazy->setIsDerivedClassConstructor();
if (funbox->needsHomeObject())
@@ -5940,6 +5944,7 @@ Parser<ParseHandler>::returnStatement(YieldHandling yieldHandling)
uint32_t begin = pos().begin;
MOZ_ASSERT(pc->sc->isFunctionBox());
+ pc->sc->asFunctionBox()->usesReturn = true;
// Parse an optional operand.
//
diff --git a/src/third_party/mozjs-45/extract/js/src/frontend/SharedContext.h b/src/third_party/mozjs-45/extract/js/src/frontend/SharedContext.h
index 1cf64118067..41a65f86128 100644
--- a/src/third_party/mozjs-45/extract/js/src/frontend/SharedContext.h
+++ b/src/third_party/mozjs-45/extract/js/src/frontend/SharedContext.h
@@ -330,6 +330,7 @@ class FunctionBox : public ObjectBox, public SharedContext
bool usesArguments:1; /* contains a free use of 'arguments' */
bool usesApply:1; /* contains an f.apply() call */
bool usesThis:1; /* contains 'this' */
+ bool usesReturn:1; /* contains a 'return' statement */
FunctionContextFlags funCxFlags;
@@ -343,6 +344,10 @@ class FunctionBox : public ObjectBox, public SharedContext
JSObject* staticScope() const override { return function(); }
JSObject* enclosingStaticScope() const { return enclosingStaticScope_; }
+ bool isLikelyConstructorWrapper() const {
+ return usesArguments && usesApply && usesThis && !usesReturn;
+ }
+
GeneratorKind generatorKind() const { return GeneratorKindFromBits(generatorKindBits_); }
bool isGenerator() const { return generatorKind() != NotGenerator; }
bool isLegacyGenerator() const { return generatorKind() == LegacyGenerator; }
diff --git a/src/third_party/mozjs-45/extract/js/src/frontend/TokenStream.cpp b/src/third_party/mozjs-45/extract/js/src/frontend/TokenStream.cpp
index 9998144f34a..1570f47308e 100644
--- a/src/third_party/mozjs-45/extract/js/src/frontend/TokenStream.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/frontend/TokenStream.cpp
@@ -585,8 +585,7 @@ CompileError::throwError(JSContext* cx)
CompileError::~CompileError()
{
- js_free((void*)report.uclinebuf);
- js_free((void*)report.linebuf);
+ js_free((void*)report.linebuf());
js_free((void*)report.ucmessage);
js_free(message);
message = nullptr;
@@ -689,22 +688,17 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne
// Create the windowed strings.
StringBuffer windowBuf(cx);
if (!windowBuf.append(userbuf.rawCharPtrAt(windowStart), windowLength) ||
- !windowBuf.append((char16_t)0))
- return false;
-
- // Unicode and char versions of the window into the offending source
- // line, without final \n.
- err.report.uclinebuf = windowBuf.stealChars();
- if (!err.report.uclinebuf)
+ !windowBuf.append('\0'))
+ {
return false;
+ }
- mozilla::Range<const char16_t> tbchars(err.report.uclinebuf, windowLength);
- err.report.linebuf = JS::LossyTwoByteCharsToNewLatin1CharsZ(cx, tbchars).c_str();
- if (!err.report.linebuf)
+ // The window into the offending source line, without final \n.
+ mozilla::UniquePtr<char16_t[], JS::FreePolicy> linebuf(windowBuf.stealChars());
+ if (!linebuf)
return false;
- err.report.tokenptr = err.report.linebuf + (offset - windowStart);
- err.report.uctokenptr = err.report.uclinebuf + (offset - windowStart);
+ err.report.initLinebuf(linebuf.release(), windowLength, offset - windowStart);
}
if (cx->isJSContext())
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Barrier.cpp b/src/third_party/mozjs-45/extract/js/src/gc/Barrier.cpp
index 699bc3aec21..2a1dd2e3ede 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Barrier.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Barrier.cpp
@@ -77,10 +77,10 @@ CurrentThreadIsGCSweeping()
}
bool
-CurrentThreadIsHandlingInitFailure()
+CurrentThreadCanSkipPostBarrier(bool inNursery)
{
- JSRuntime* rt = TlsPerThreadData.get()->runtimeIfOnOwnerThread();
- return rt && rt->handlingInitFailure;
+ bool onMainThread = TlsPerThreadData.get()->runtimeIfOnOwnerThread() != nullptr;
+ return !onMainThread && !inNursery;
}
#endif // DEBUG
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Barrier.h b/src/third_party/mozjs-45/extract/js/src/gc/Barrier.h
index a2131f03f2d..8618eb0ab90 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Barrier.h
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Barrier.h
@@ -227,7 +227,7 @@ bool
CurrentThreadIsGCSweeping();
bool
-CurrentThreadIsHandlingInitFailure();
+CurrentThreadCanSkipPostBarrier(bool inNursery);
#endif
namespace gc {
@@ -254,6 +254,8 @@ struct InternalGCMethods<T*>
static void postBarrier(T** vp, T* prev, T* next) { T::writeBarrierPost(vp, prev, next); }
static void readBarrier(T* v) { T::readBarrier(v); }
+
+ static bool isInsideNursery(T* v) { return IsInsideNursery(v); }
};
template <typename S> struct PreBarrierFunctor : VoidDefaultAdaptor<S> {
@@ -298,6 +300,10 @@ struct InternalGCMethods<Value>
static void readBarrier(const Value& v) {
DispatchTyped(ReadBarrierFunctor<Value>(), v);
}
+
+ static bool isInsideNursery(const Value& v) {
+ return v.isMarkable() && IsInsideNursery(v.toGCThing());
+ }
};
template <>
@@ -308,6 +314,8 @@ struct InternalGCMethods<jsid>
static void preBarrier(jsid id) { DispatchTyped(PreBarrierFunctor<jsid>(), id); }
static void postBarrier(jsid* idp, jsid prev, jsid next) {}
+
+ static bool isInsideNursery(jsid id) { return false; }
};
// Barrier classes can use Mixins to add methods to a set of barrier
@@ -440,8 +448,11 @@ class HeapPtr : public WriteBarrieredBase<T>
#ifdef DEBUG
~HeapPtr() {
// No prebarrier necessary as this only happens when we are sweeping or
- // before the containing object becomes part of the GC graph.
- MOZ_ASSERT(CurrentThreadIsGCSweeping() || CurrentThreadIsHandlingInitFailure());
+ // after we have just collected the nursery.
+ bool inNursery = InternalGCMethods<T>::isInsideNursery(this->value);
+ MOZ_ASSERT(CurrentThreadIsGCSweeping() ||
+ CurrentThreadCanSkipPostBarrier(inNursery));
+ Poison(this, JS_FREED_HEAP_PTR_PATTERN, sizeof(*this));
}
#endif
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/GCRuntime.h b/src/third_party/mozjs-45/extract/js/src/gc/GCRuntime.h
index d7cf559b987..d2b45473862 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/GCRuntime.h
+++ b/src/third_party/mozjs-45/extract/js/src/gc/GCRuntime.h
@@ -838,6 +838,11 @@ class GCRuntime
void freeUnusedLifoBlocksAfterSweeping(LifoAlloc* lifo);
void freeAllLifoBlocksAfterSweeping(LifoAlloc* lifo);
+ // Queue a thunk to run after the next minor GC.
+ void callAfterMinorGC(void (*thunk)(void* data), void* data) {
+ nursery.queueSweepAction(thunk, data);
+ }
+
// Public here for ReleaseArenaLists and FinalizeTypedArenas.
void releaseArena(ArenaHeader* aheader, const AutoLockGC& lock);
@@ -1380,6 +1385,7 @@ inline bool GCRuntime::needZealousGC() { return false; }
#endif
} /* namespace gc */
+
} /* namespace js */
#endif
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Heap.h b/src/third_party/mozjs-45/extract/js/src/gc/Heap.h
index 5f8a2353528..1ff1d9fa498 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Heap.h
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Heap.h
@@ -1455,10 +1455,8 @@ TenuredCell::readBarrier(TenuredCell* thing)
{
MOZ_ASSERT(!CurrentThreadIsIonCompiling());
MOZ_ASSERT(!isNullLike(thing));
- if (thing->shadowRuntimeFromAnyThread()->isHeapBusy())
+ if (thing->shadowRuntimeFromAnyThread()->isHeapCollecting())
return;
- MOZ_ASSERT_IF(CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread()),
- !thing->shadowRuntimeFromAnyThread()->isHeapCollecting());
JS::shadow::Zone* shadowZone = thing->shadowZoneFromAnyThread();
MOZ_ASSERT_IF(!CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread()),
@@ -1479,7 +1477,7 @@ TenuredCell::writeBarrierPre(TenuredCell* thing)
{
MOZ_ASSERT(!CurrentThreadIsIonCompiling());
MOZ_ASSERT_IF(thing, !isNullLike(thing));
- if (!thing || thing->shadowRuntimeFromAnyThread()->isHeapBusy())
+ if (!thing || thing->shadowRuntimeFromAnyThread()->isHeapCollecting())
return;
JS::shadow::Zone* shadowZone = thing->shadowZoneFromAnyThread();
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Iteration.cpp b/src/third_party/mozjs-45/extract/js/src/gc/Iteration.cpp
index 45168fd432e..5776f52bbbb 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Iteration.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Iteration.cpp
@@ -130,8 +130,6 @@ JS_PUBLIC_API(void)
JS_IterateCompartments(JSRuntime* rt, void* data,
JSIterateCompartmentCallback compartmentCallback)
{
- MOZ_ASSERT(!rt->isHeapBusy());
-
AutoTraceSession session(rt);
for (CompartmentsIter c(rt, WithAtoms); !c.done(); c.next())
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Marking.cpp b/src/third_party/mozjs-45/extract/js/src/gc/Marking.cpp
index 2804fb3e22d..f52ab393f71 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Marking.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Marking.cpp
@@ -124,10 +124,10 @@ IsThingPoisoned(T* thing)
JS_SWEPT_NURSERY_PATTERN,
JS_ALLOCATED_NURSERY_PATTERN,
JS_FRESH_TENURED_PATTERN,
+ JS_MOVED_TENURED_PATTERN,
JS_SWEPT_TENURED_PATTERN,
JS_ALLOCATED_TENURED_PATTERN,
- JS_SWEPT_CODE_PATTERN,
- JS_SWEPT_FRAME_PATTERN
+ JS_SWEPT_CODE_PATTERN
};
const int numPoisonBytes = sizeof(poisonBytes) / sizeof(poisonBytes[0]);
uint32_t* p = reinterpret_cast<uint32_t*>(reinterpret_cast<FreeSpan*>(thing) + 1);
@@ -2647,7 +2647,7 @@ TypedUnmarkGrayCellRecursively(T* t)
MOZ_ASSERT(t);
JSRuntime* rt = t->runtimeFromMainThread();
- MOZ_ASSERT(!rt->isHeapBusy());
+ MOZ_ASSERT(!rt->isHeapCollecting());
bool unmarkedArg = false;
if (t->isTenured()) {
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Nursery.cpp b/src/third_party/mozjs-45/extract/js/src/gc/Nursery.cpp
index a5bcb6b9696..4d7ba121781 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Nursery.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Nursery.cpp
@@ -54,6 +54,22 @@ struct js::Nursery::FreeMallocedBuffersTask : public GCParallelTask
virtual void run() override;
};
+struct js::Nursery::SweepAction
+{
+ SweepAction(SweepThunk thunk, void* data, SweepAction* next)
+ : thunk(thunk), data(data), next(next)
+ {}
+
+ SweepThunk thunk;
+ void* data;
+ SweepAction* next;
+
+#if JS_BITS_PER_WORD == 32
+ protected:
+ uint32_t padding;
+#endif
+};
+
bool
js::Nursery::init(uint32_t maxNurseryBytes)
{
@@ -666,6 +682,8 @@ js::Nursery::sweep()
}
cellsWithUid_.clear();
+ runSweepActions();
+
#ifdef JS_GC_ZEAL
/* Poison the nursery contents so touching a freed object will crash. */
JS_POISON((void*)start(), JS_SWEPT_NURSERY_PATTERN, nurserySize());
@@ -714,3 +732,37 @@ js::Nursery::shrinkAllocableSpace()
numActiveChunks_ = Max(numActiveChunks_ - 1, 1);
updateDecommittedRegion();
}
+
+void
+js::Nursery::queueSweepAction(SweepThunk thunk, void* data)
+{
+ static_assert(sizeof(SweepAction) % CellSize == 0,
+ "SweepAction size must be a multiple of cell size");
+ MOZ_ASSERT(!runtime()->mainThread.suppressGC);
+
+ SweepAction* action = nullptr;
+ if (isEnabled() && !js::oom::ShouldFailWithOOM())
+ action = reinterpret_cast<SweepAction*>(allocate(sizeof(SweepAction)));
+
+ if (!action) {
+ runtime()->gc.evictNursery();
+ AutoSetThreadIsSweeping threadIsSweeping;
+ thunk(data);
+ return;
+ }
+
+ new (action) SweepAction(thunk, data, sweepActions_);
+ sweepActions_ = action;
+}
+
+void
+js::Nursery::runSweepActions()
+{
+ // The hazard analysis doesn't know whether the thunks can GC.
+ JS::AutoSuppressGCAnalysis nogc;
+
+ AutoSetThreadIsSweeping threadIsSweeping;
+ for (auto action = sweepActions_; action; action = action->next)
+ action->thunk(action->data);
+ sweepActions_ = nullptr;
+}
diff --git a/src/third_party/mozjs-45/extract/js/src/gc/Nursery.h b/src/third_party/mozjs-45/extract/js/src/gc/Nursery.h
index 22ab99ab6e8..878790e5013 100644
--- a/src/third_party/mozjs-45/extract/js/src/gc/Nursery.h
+++ b/src/third_party/mozjs-45/extract/js/src/gc/Nursery.h
@@ -106,7 +106,8 @@ class Nursery
numNurseryChunks_(0),
profileThreshold_(0),
enableProfiling_(false),
- freeMallocedBuffersTask(nullptr)
+ freeMallocedBuffersTask(nullptr),
+ sweepActions_(nullptr)
{}
~Nursery();
@@ -196,6 +197,9 @@ class Nursery
return cellsWithUid_.put(cell);
}
+ using SweepThunk = void (*)(void *data);
+ void queueSweepAction(SweepThunk thunk, void* data);
+
size_t sizeOfHeapCommitted() const {
return numActiveChunks_ * gc::ChunkSize;
}
@@ -294,6 +298,9 @@ class Nursery
using CellsWithUniqueIdSet = HashSet<gc::Cell*, PointerHasher<gc::Cell*, 3>, SystemAllocPolicy>;
CellsWithUniqueIdSet cellsWithUid_;
+ struct SweepAction;
+ SweepAction* sweepActions_;
+
/* The maximum number of bytes allowed to reside in nursery buffers. */
static const size_t MaxNurseryBufferSize = 1024;
@@ -378,6 +385,8 @@ class Nursery
*/
void sweep();
+ void runSweepActions();
+
/* Change the allocable space provided by the nursery. */
void growAllocableSpace();
void shrinkAllocableSpace();
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/BaselineBailouts.cpp b/src/third_party/mozjs-45/extract/js/src/jit/BaselineBailouts.cpp
index d951467f31d..ba3a2403fc3 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/BaselineBailouts.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/BaselineBailouts.cpp
@@ -645,12 +645,6 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
return false;
BufferPointer<BaselineFrame> blFrame = builder.pointerAtStackOffset<BaselineFrame>(0);
- // Initialize BaselineFrame::frameSize
- uint32_t frameSize = BaselineFrame::Size() + BaselineFrame::FramePointerOffset +
- (sizeof(Value) * (script->nfixed() + exprStackSlots));
- JitSpew(JitSpew_BaselineBailouts, " FrameSize=%d", (int) frameSize);
- blFrame->setFrameSize(frameSize);
-
uint32_t flags = 0;
// If we are bailing to a script whose execution is observed, mark the
@@ -930,7 +924,15 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
return false;
}
- size_t endOfBaselineJSFrameStack = builder.framePushed();
+ // BaselineFrame::frameSize is the size of everything pushed since
+ // the builder.resetFramePushed() call.
+ uint32_t frameSize = builder.framePushed();
+ blFrame->setFrameSize(frameSize);
+ JitSpew(JitSpew_BaselineBailouts, " FrameSize=%u", frameSize);
+
+ // numValueSlots() is based on the frame size, do some sanity checks.
+ MOZ_ASSERT(blFrame->numValueSlots() >= script->nfixed());
+ MOZ_ASSERT(blFrame->numValueSlots() <= script->nslots());
// If we are resuming at a LOOPENTRY op, resume at the next op to avoid
// a bailout -> enter Ion -> bailout loop with --ion-eager. See also
@@ -1223,6 +1225,7 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
// Arguments are reversed on the BaselineJS frame's stack values.
MOZ_ASSERT(IsIonInlinablePC(pc));
unsigned actualArgc;
+ Value callee;
if (needToSaveArgs) {
// For FUNAPPLY or an accessor, the arguments are not on the stack anymore,
// but they are copied in a vector and are written here.
@@ -1230,6 +1233,7 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
actualArgc = blFrame->numActualArgs();
else
actualArgc = IsSetPropPC(pc);
+ callee = savedCallerArgs[0];
// Align the stack based on the number of arguments.
size_t afterFrameSize = (actualArgc + 1) * sizeof(Value) + JitFrameLayout::Size();
@@ -1257,12 +1261,16 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
if (!builder.maybeWritePadding(JitStackAlignment, afterFrameSize, "Padding"))
return false;
- MOZ_ASSERT(actualArgc + 2 + pushedNewTarget <= exprStackSlots);
- for (unsigned i = 0; i < actualArgc + 1 + pushedNewTarget; i++) {
- size_t argSlot = (script->nfixed() + exprStackSlots) - (i + 1);
- if (!builder.writeValue(*blFrame->valueSlot(argSlot), "ArgVal"))
+ // Copy the arguments and |this| from the BaselineFrame, in reverse order.
+ size_t valueSlot = blFrame->numValueSlots() - 1;
+ size_t calleeSlot = valueSlot - actualArgc - 1 - pushedNewTarget;
+
+ for (size_t i = valueSlot; i > calleeSlot; i--) {
+ if (!builder.writeValue(*blFrame->valueSlot(i), "ArgVal"))
return false;
}
+
+ callee = *blFrame->valueSlot(calleeSlot);
}
// In case these arguments need to be copied on the stack again for a rectifier frame,
@@ -1279,20 +1287,8 @@ InitFromBailout(JSContext* cx, HandleScript caller, jsbytecode* callerPC,
return false;
// Push callee token (must be a JS Function)
- Value callee;
- if (needToSaveArgs) {
- // The arguments of FUNAPPLY or inlined accessors are not writen to the stack.
- // So get the callee from the specially saved vector.
- callee = savedCallerArgs[0];
- } else {
- uint32_t calleeStackSlot = exprStackSlots - uint32_t(actualArgc + 2 + pushedNewTarget);
- size_t calleeOffset = (builder.framePushed() - endOfBaselineJSFrameStack)
- + ((exprStackSlots - (calleeStackSlot + 1)) * sizeof(Value));
- callee = *builder.valuePointerAtStackOffset(calleeOffset);
- JitSpew(JitSpew_BaselineBailouts, " CalleeStackSlot=%d", (int) calleeStackSlot);
- }
- JitSpew(JitSpew_BaselineBailouts, " Callee = %016llx", *((uint64_t*) &callee));
- MOZ_ASSERT(callee.isObject() && callee.toObject().is<JSFunction>());
+ JitSpew(JitSpew_BaselineBailouts, " Callee = %016llx", callee.asRawBits());
+
JSFunction* calleeFun = &callee.toObject().as<JSFunction>();
if (!builder.writePtr(CalleeToToken(calleeFun, JSOp(*pc) == JSOP_NEW), "CalleeToken"))
return false;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/BaselineCompiler.cpp b/src/third_party/mozjs-45/extract/js/src/jit/BaselineCompiler.cpp
index 73aaba7ba6a..b420a5a2f2e 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/BaselineCompiler.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/BaselineCompiler.cpp
@@ -2248,11 +2248,11 @@ BaselineCompiler::emit_JSOP_BINDGNAME()
frame.push(ObjectValue(*globalLexical));
return true;
}
- }
-
- // We can bind name to the global object if the property exists on the
- // global and is non-configurable, as then it cannot be shadowed.
- if (Shape* shape = script->global().lookup(cx, name)) {
+ } else if (Shape* shape = script->global().lookup(cx, name)) {
+ // If the property does not currently exist on the global lexical
+ // scope, we can bind name to the global object if the property
+ // exists on the global and is non-configurable, as then it cannot
+ // be shadowed.
if (!shape->configurable()) {
frame.push(ObjectValue(script->global()));
return true;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/BaselineIC.cpp b/src/third_party/mozjs-45/extract/js/src/jit/BaselineIC.cpp
index 630639684e7..ab11826b3bb 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/BaselineIC.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/BaselineIC.cpp
@@ -5166,8 +5166,6 @@ ICSetProp_Unboxed::Compiler::generateStubCode(MacroAssembler& masm)
if (needsUpdateStubs()) {
// Stow both R0 and R1 (object and value).
- masm.push(object);
- masm.push(ICStubReg);
EmitStowICValues(masm, 2);
// Move RHS into R0 for TypeUpdate check.
@@ -5179,8 +5177,9 @@ ICSetProp_Unboxed::Compiler::generateStubCode(MacroAssembler& masm)
// Unstow R0 and R1 (object and key)
EmitUnstowICValues(masm, 2);
- masm.pop(ICStubReg);
- masm.pop(object);
+
+ // The TypeUpdate IC may have smashed object. Rederive it.
+ masm.unboxObject(R0, object);
// Trigger post barriers here on the values being written. Fields which
// objects can be written to also need update stubs.
@@ -5237,8 +5236,6 @@ ICSetProp_TypedObject::Compiler::generateStubCode(MacroAssembler& masm)
if (needsUpdateStubs()) {
// Stow both R0 and R1 (object and value).
- masm.push(object);
- masm.push(ICStubReg);
EmitStowICValues(masm, 2);
// Move RHS into R0 for TypeUpdate check.
@@ -5250,8 +5247,9 @@ ICSetProp_TypedObject::Compiler::generateStubCode(MacroAssembler& masm)
// Unstow R0 and R1 (object and key)
EmitUnstowICValues(masm, 2);
- masm.pop(ICStubReg);
- masm.pop(object);
+
+ // We may have clobbered object in the TypeUpdate IC. Rederive it.
+ masm.unboxObject(R0, object);
// Trigger post barriers here on the values being written. Descriptors
// which can write objects also need update stubs.
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/Ion.cpp b/src/third_party/mozjs-45/extract/js/src/jit/Ion.cpp
index 22cf54d8e11..12f3b699fe8 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/Ion.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/Ion.cpp
@@ -861,8 +861,8 @@ JitCode::finalize(FreeOp* fop)
// Don't do this if the Ion code is protected, as the signal handler will
// deadlock trying to reacquire the interrupt lock.
{
- AutoWritableJitCode awjc(this);
- memset(code_, JS_SWEPT_CODE_PATTERN, bufferSize_);
+ AutoWritableJitCode awjc(fop->runtime(), code_ - headerSize_, headerSize_ + bufferSize_);
+ memset(code_ - headerSize_, JS_SWEPT_CODE_PATTERN, headerSize_ + bufferSize_);
code_ = nullptr;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/IonAnalysis.cpp b/src/third_party/mozjs-45/extract/js/src/jit/IonAnalysis.cpp
index eb709c6502a..8def5e6c1e1 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/IonAnalysis.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/IonAnalysis.cpp
@@ -200,14 +200,14 @@ FlagAllOperandsAsHavingRemovedUses(MBasicBlock* block)
// Flag observable operands of the entry resume point as having removed uses.
MResumePoint* rp = block->entryResumePoint();
- do {
+ while (rp) {
for (size_t i = 0, e = rp->numOperands(); i < e; i++) {
if (!rp->isObservableOperand(i))
continue;
rp->getOperand(i)->setUseRemovedUnchecked();
}
rp = rp->caller();
- } while (rp);
+ }
// Flag Phi inputs of the successors has having removed uses.
MPhiVector worklist;
@@ -1925,6 +1925,17 @@ jit::RemoveUnmarkedBlocks(MIRGenerator* mir, MIRGraph& graph, uint32_t numMarked
// since we may have removed edges even if we didn't remove any blocks.
graph.unmarkBlocks();
} else {
+ // As we are going to remove edges and basic blocks, we have to mark
+ // instructions which would be needed by baseline if we were to
+ // bailout.
+ for (PostorderIterator it(graph.poBegin()); it != graph.poEnd();) {
+ MBasicBlock* block = *it++;
+ if (!block->isMarked())
+ continue;
+
+ FlagAllOperandsAsHavingRemovedUses(block);
+ }
+
// Find unmarked blocks and remove them.
for (ReversePostorderIterator iter(graph.rpoBegin()); iter != graph.rpoEnd();) {
MBasicBlock* block = *iter++;
@@ -2793,6 +2804,9 @@ TryEliminateBoundsCheck(BoundsCheckMap& checks, size_t blockIndex, MBoundsCheck*
if (!dominated->isMovable())
return true;
+ if (!dominated->fallible())
+ return true;
+
MBoundsCheck* dominating = FindDominatingBoundsCheck(checks, dominated, blockIndex);
if (!dominating)
return false;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/IonCaches.cpp b/src/third_party/mozjs-45/extract/js/src/jit/IonCaches.cpp
index a69489b4a2c..b5fe6dec072 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/IonCaches.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/IonCaches.cpp
@@ -699,10 +699,10 @@ CheckDOMProxyExpandoDoesNotShadow(JSContext* cx, MacroAssembler& masm, JSObject*
ExpandoAndGeneration* expandoAndGeneration = (ExpandoAndGeneration*)expandoVal.toPrivate();
masm.movePtr(ImmPtr(expandoAndGeneration), tempVal.scratchReg());
- masm.branch32(Assembler::NotEqual,
+ masm.branch64(Assembler::NotEqual,
Address(tempVal.scratchReg(),
ExpandoAndGeneration::offsetOfGeneration()),
- Imm32(expandoAndGeneration->generation),
+ Imm64(expandoAndGeneration->generation),
&failDOMProxyCheck);
expandoVal = expandoAndGeneration->expando;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/JitcodeMap.cpp b/src/third_party/mozjs-45/extract/js/src/jit/JitcodeMap.cpp
index 7185597f36d..7f6a06120d2 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/JitcodeMap.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/JitcodeMap.cpp
@@ -12,6 +12,8 @@
#include "mozilla/SizePrintfMacros.h"
#include "mozilla/UniquePtr.h"
+#include <algorithm>
+
#include "jsprf.h"
#include "gc/Marking.h"
@@ -682,7 +684,7 @@ JitcodeGlobalTable::generateTowerHeight()
break;
result++;
}
- return result + 1;
+ return (std::max)(1U, result);
}
JitcodeSkiplistTower*
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/MCallOptimize.cpp b/src/third_party/mozjs-45/extract/js/src/jit/MCallOptimize.cpp
index afe1b7e90d9..e2336fd1f6a 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/MCallOptimize.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/MCallOptimize.cpp
@@ -2343,7 +2343,8 @@ IonBuilder::inlineUnsafeSetReservedSlot(CallInfo& callInfo)
callInfo.setImplicitlyUsedUnchecked();
- MStoreFixedSlot* store = MStoreFixedSlot::New(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
+ MStoreFixedSlot* store =
+ MStoreFixedSlot::NewBarriered(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
current->add(store);
current->push(store);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/MIR.cpp b/src/third_party/mozjs-45/extract/js/src/jit/MIR.cpp
index 08d5c67f725..419330a7889 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/MIR.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/MIR.cpp
@@ -2868,7 +2868,7 @@ MustBeUInt32(MDefinition* def, MDefinition** pwrapped)
if (def->isUrsh()) {
*pwrapped = def->toUrsh()->getOperand(0);
MDefinition* rhs = def->toUrsh()->getOperand(1);
- return !def->toUrsh()->bailoutsDisabled()
+ return def->toUrsh()->bailoutsDisabled()
&& rhs->isConstantValue()
&& rhs->constantValue().isInt32()
&& rhs->constantValue().toInt32() == 0;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/MIR.h b/src/third_party/mozjs-45/extract/js/src/jit/MIR.h
index e1daa4c94a7..60f5c33334b 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/MIR.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/MIR.h
@@ -6491,6 +6491,11 @@ class MDiv : public MBinaryArithInstruction
return specialization_ < MIRType_Object;
}
+ bool congruentTo(const MDefinition* ins) const override {
+ return MBinaryArithInstruction::congruentTo(ins) &&
+ unsigned_ == ins->toDiv()->isUnsigned();
+ }
+
ALLOW_CLONE(MDiv)
};
@@ -6569,6 +6574,11 @@ class MMod : public MBinaryArithInstruction
void collectRangeInfoPreTrunc() override;
TruncateKind operandTruncateKind(size_t index) const override;
+ bool congruentTo(const MDefinition* ins) const override {
+ return MBinaryArithInstruction::congruentTo(ins) &&
+ unsigned_ == ins->toMod()->isUnsigned();
+ }
+
ALLOW_CLONE(MMod)
};
@@ -8577,12 +8587,14 @@ class MBoundsCheck
return minimum_;
}
void setMinimum(int32_t n) {
+ MOZ_ASSERT(fallible_);
minimum_ = n;
}
int32_t maximum() const {
return maximum_;
}
void setMaximum(int32_t n) {
+ MOZ_ASSERT(fallible_);
maximum_ = n;
}
MDefinition* foldsTo(TempAllocator& alloc) override;
@@ -8592,6 +8604,8 @@ class MBoundsCheck
const MBoundsCheck* other = ins->toBoundsCheck();
if (minimum() != other->minimum() || maximum() != other->maximum())
return false;
+ if (fallible() != other->fallible())
+ return false;
return congruentIfOperandsEqual(other);
}
virtual AliasSet getAliasSet() const override {
@@ -12443,7 +12457,10 @@ class MFilterTypeSet
}
void computeRange(TempAllocator& alloc) override;
- bool isFloat32Commutative() const override { return true; }
+ bool isFloat32Commutative() const override {
+ return IsFloatingPointType(type());
+ }
+
bool canProduceFloat32() const override;
bool canConsumeFloat32(MUse* operand) const override;
void trySpecializeFloat32(TempAllocator& alloc) override;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/RangeAnalysis.cpp b/src/third_party/mozjs-45/extract/js/src/jit/RangeAnalysis.cpp
index fd7d01f6196..64d6ad179ab 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/RangeAnalysis.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/RangeAnalysis.cpp
@@ -2802,8 +2802,9 @@ CloneForDeadBranches(TempAllocator& alloc, MInstruction* candidate)
static MDefinition::TruncateKind
ComputeRequestedTruncateKind(MDefinition* candidate, bool* shouldClone)
{
- bool isCapturedResult = false;
- bool isObservableResult = false;
+ bool isCapturedResult = false; // Check if used by a recovered instruction or a resume point.
+ bool isObservableResult = false; // Check if it can be read from another frame.
+ bool isRecoverableResult = true; // Check if it can safely be reconstructed.
bool hasUseRemoved = candidate->isUseRemoved();
MDefinition::TruncateKind kind = MDefinition::Truncate;
@@ -2816,6 +2817,8 @@ ComputeRequestedTruncateKind(MDefinition* candidate, bool* shouldClone)
isCapturedResult = true;
isObservableResult = isObservableResult ||
use->consumer()->toResumePoint()->isObservableOperand(*use);
+ isRecoverableResult = isRecoverableResult &&
+ use->consumer()->toResumePoint()->isRecoverableOperand(*use);
continue;
}
@@ -2841,31 +2844,32 @@ ComputeRequestedTruncateKind(MDefinition* candidate, bool* shouldClone)
// seeing truncated values.
bool needsConversion = !candidate->range() || !candidate->range()->isInt32();
+ // If the instruction is explicitly truncated (not indirectly) by all its
+ // uses and if it has no removed uses, then we can safely encode its
+ // truncated result as part of the resume point operands. This is safe,
+ // because even if we resume with a truncated double, the next baseline
+ // instruction operating on this instruction is going to be a no-op.
+ //
+ // Note, that if the result can be observed from another frame, then this
+ // optimization is not safe.
+ bool safeToConvert = kind == MDefinition::Truncate && !hasUseRemoved && !isObservableResult;
+
// If the candidate instruction appears as operand of a resume point or a
// recover instruction, and we have to truncate its result, then we might
// have to either recover the result during the bailout, or avoid the
// truncation.
- if (isCapturedResult && needsConversion) {
-
- // 1. Recover instructions are useless if there is no removed uses. Not
- // having removed uses means that we know everything about where this
- // results flows into.
- //
- // 2. If the result is observable, then we cannot recover it.
- //
- // 3. The cloned instruction is expected to be used as a recover
- // instruction.
- if (hasUseRemoved && !isObservableResult && candidate->canRecoverOnBailout())
+ if (isCapturedResult && needsConversion && !safeToConvert) {
+
+ // If the result can be recovered from all the resume points (not needed
+ // for iterating over the inlined frames), and this instruction can be
+ // recovered on bailout, then we can clone it and use the cloned
+ // instruction to encode the recover instruction. Otherwise, we should
+ // keep the original result and bailout if the value is not in the int32
+ // range.
+ if (isRecoverableResult && candidate->canRecoverOnBailout())
*shouldClone = true;
-
- // 1. If uses are removed, then we need to keep the expected result for
- // dead branches.
- //
- // 2. If the result is observable, then the result might be read while
- // the frame is on the stack.
- else if (hasUseRemoved || isObservableResult)
+ else
kind = Min(kind, MDefinition::TruncateAfterBailouts);
-
}
return kind;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/Recover.cpp b/src/third_party/mozjs-45/extract/js/src/jit/Recover.cpp
index fae79ea90d4..da795663bc9 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/Recover.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/Recover.cpp
@@ -406,12 +406,15 @@ MMul::writeRecoverData(CompactBufferWriter& writer) const
MOZ_ASSERT(canRecoverOnBailout());
writer.writeUnsigned(uint32_t(RInstruction::Recover_Mul));
writer.writeByte(specialization_ == MIRType_Float32);
+ MOZ_ASSERT(Mode(uint8_t(mode_)) == mode_);
+ writer.writeByte(uint8_t(mode_));
return true;
}
RMul::RMul(CompactBufferReader& reader)
{
isFloatOperation_ = reader.readByte();
+ mode_ = reader.readByte();
}
bool
@@ -421,13 +424,19 @@ RMul::recover(JSContext* cx, SnapshotIterator& iter) const
RootedValue rhs(cx, iter.read());
RootedValue result(cx);
- if (!js::MulValues(cx, &lhs, &rhs, &result))
- return false;
+ if (MMul::Mode(mode_) == MMul::Normal) {
+ if (!js::MulValues(cx, &lhs, &rhs, &result))
+ return false;
- // MIRType_Float32 is a specialization embedding the fact that the result is
- // rounded to a Float32.
- if (isFloatOperation_ && !RoundFloat32(cx, result, &result))
- return false;
+ // MIRType_Float32 is a specialization embedding the fact that the
+ // result is rounded to a Float32.
+ if (isFloatOperation_ && !RoundFloat32(cx, result, &result))
+ return false;
+ } else {
+ MOZ_ASSERT(MMul::Mode(mode_) == MMul::Integer);
+ if (!js::math_imul_handle(cx, lhs, rhs, &result))
+ return false;
+ }
iter.storeInstructionResult(result);
return true;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/Recover.h b/src/third_party/mozjs-45/extract/js/src/jit/Recover.h
index 4d2d8792676..f5432146119 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/Recover.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/Recover.h
@@ -291,6 +291,7 @@ class RMul final : public RInstruction
{
private:
bool isFloatOperation_;
+ uint8_t mode_;
public:
RINSTRUCTION_HEADER_(Mul)
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.cpp b/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.cpp
index e9919f65c1b..2867776f0af 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.cpp
@@ -8,6 +8,7 @@
#include "mozilla/Casting.h"
#include "mozilla/DebugOnly.h"
+#include "mozilla/IntegerPrintfMacros.h"
#include "mozilla/SizePrintfMacros.h"
#include "jslibmath.h"
@@ -2194,10 +2195,10 @@ UpdateExistingGenerationalDOMProxyStub(ICGetProp_Fallback* stub,
iter->toGetProp_CallDOMProxyWithGenerationNative();
if (updateStub->expandoAndGeneration() == expandoAndGeneration) {
// Update generation
- uint32_t generation = expandoAndGeneration->generation;
+ uint64_t generation = expandoAndGeneration->generation;
JitSpew(JitSpew_BaselineIC,
" Updating existing stub with generation, old value: %i, "
- "new value: %i", updateStub->generation(),
+ "new value: %" PRIu64 "", updateStub->generation(),
generation);
updateStub->setGeneration(generation);
return true;
@@ -3821,9 +3822,9 @@ CheckDOMProxyExpandoDoesNotShadow(JSContext* cx, MacroAssembler& masm, Register
masm.branchPrivatePtr(Assembler::NotEqual, expandoAddr, tempVal.scratchReg(),
&failDOMProxyCheck);
- masm.load32(*generationAddr, scratch);
- masm.branch32(Assembler::NotEqual,
- Address(tempVal.scratchReg(), offsetof(ExpandoAndGeneration, generation)),
+ masm.branch64(Assembler::NotEqual,
+ Address(tempVal.scratchReg(), ExpandoAndGeneration::offsetOfGeneration()),
+ *generationAddr,
scratch, &failDOMProxyCheck);
masm.loadValue(Address(tempVal.scratchReg(), 0), tempVal);
@@ -3951,7 +3952,7 @@ ICGetPropCallDOMProxyNativeCompiler::getStub(ICStubSpace* space)
Value expandoSlot = GetProxyExtra(proxy_, GetDOMProxyExpandoSlot());
RootedShape expandoShape(cx, nullptr);
ExpandoAndGeneration* expandoAndGeneration;
- int32_t generation;
+ uint64_t generation;
Value expandoVal;
if (kind == ICStub::GetProp_CallDOMProxyNative) {
expandoVal = expandoSlot;
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.h b/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.h
index a7073152e09..9ae490a912b 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/SharedIC.h
@@ -3136,13 +3136,13 @@ class ICGetProp_CallDOMProxyWithGenerationNative : public ICGetPropCallDOMProxyN
{
protected:
ExpandoAndGeneration* expandoAndGeneration_;
- uint32_t generation_;
+ uint64_t generation_;
public:
ICGetProp_CallDOMProxyWithGenerationNative(JitCode* stubCode, ICStub* firstMonitorStub,
Shape* shape,
ExpandoAndGeneration* expandoAndGeneration,
- uint32_t generation, Shape* expandoShape,
+ uint64_t generation, Shape* expandoShape,
JSObject* holder, Shape* holderShape,
JSFunction* getter, uint32_t pcOffset)
: ICGetPropCallDOMProxyNativeStub(ICStub::GetProp_CallDOMProxyWithGenerationNative,
@@ -3160,11 +3160,11 @@ class ICGetProp_CallDOMProxyWithGenerationNative : public ICGetPropCallDOMProxyN
void* expandoAndGeneration() const {
return expandoAndGeneration_;
}
- uint32_t generation() const {
+ uint64_t generation() const {
return generation_;
}
- void setGeneration(uint32_t value) {
+ void setGeneration(uint64_t value) {
generation_ = value;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/VMFunctions.cpp b/src/third_party/mozjs-45/extract/js/src/jit/VMFunctions.cpp
index d43e4627da3..43dd9501035 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/VMFunctions.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/VMFunctions.cpp
@@ -1314,7 +1314,7 @@ bool
ThrowObjectCoercible(JSContext* cx, HandleValue v)
{
MOZ_ASSERT(v.isUndefined() || v.isNull());
- MOZ_ALWAYS_FALSE(ToObjectSlow(cx, v, false));
+ MOZ_ALWAYS_FALSE(ToObjectSlow(cx, v, true));
return false;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.cpp b/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.cpp
index c98a3c8c75e..027f4df6971 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.cpp
@@ -462,6 +462,7 @@ ValueNumberer::fixupOSROnlyLoop(MBasicBlock* block, MBasicBlock* backedge)
block->setLoopHeader(backedge);
JitSpew(JitSpew_GVN, " Created fake block%u", fake->id());
+ hasOSRFixups_ = true;
return true;
}
@@ -1076,6 +1077,52 @@ ValueNumberer::visitGraph()
return true;
}
+// OSR fixups serve the purpose of representing the non-OSR entry into a loop
+// when the only real entry is an OSR entry into the middle. However, if the
+// entry into the middle is subsequently folded away, the loop may actually
+// have become unreachable. Mark-and-sweep all blocks to remove all such code.
+bool ValueNumberer::cleanupOSRFixups()
+{
+ // Mark.
+ Vector<MBasicBlock*, 0, JitAllocPolicy> worklist(graph_.alloc());
+ unsigned numMarked = 2;
+ graph_.entryBlock()->mark();
+ graph_.osrBlock()->mark();
+ if (!worklist.append(graph_.entryBlock()) || !worklist.append(graph_.osrBlock()))
+ return false;
+ while (!worklist.empty()) {
+ MBasicBlock* block = worklist.popCopy();
+ for (size_t i = 0, e = block->numSuccessors(); i != e; ++i) {
+ MBasicBlock* succ = block->getSuccessor(i);
+ if (!succ->isMarked()) {
+ ++numMarked;
+ succ->mark();
+ if (!worklist.append(succ))
+ return false;
+ }
+ }
+ // The one special thing we do during this mark pass is to mark
+ // loop predecessors of reachable blocks as reachable. These blocks are
+ // the OSR fixups blocks which need to remain if the loop remains,
+ // though they can be removed if the loop is removed.
+ if (block->isLoopHeader()) {
+ MBasicBlock* pred = block->loopPredecessor();
+ if (!pred->isMarked() && pred->numPredecessors() == 0) {
+ MOZ_ASSERT(pred->numSuccessors() == 1,
+ "OSR fixup block should have exactly one successor");
+ MOZ_ASSERT(pred != graph_.entryBlock(),
+ "OSR fixup block shouldn't be the entry block");
+ MOZ_ASSERT(pred != graph_.osrBlock(),
+ "OSR fixup block shouldn't be the OSR entry block");
+ pred->mark();
+ }
+ }
+ }
+
+ // And sweep.
+ return RemoveUnmarkedBlocks(mir_, graph_, numMarked);
+}
+
ValueNumberer::ValueNumberer(MIRGenerator* mir, MIRGraph& graph)
: mir_(mir), graph_(graph),
values_(graph.alloc()),
@@ -1086,7 +1133,8 @@ ValueNumberer::ValueNumberer(MIRGenerator* mir, MIRGraph& graph)
rerun_(false),
blocksRemoved_(false),
updateAliasAnalysis_(false),
- dependenciesBroken_(false)
+ dependenciesBroken_(false),
+ hasOSRFixups_(false)
{}
bool
@@ -1163,5 +1211,10 @@ ValueNumberer::run(UpdateAliasAnalysisFlag updateAliasAnalysis)
runs, uint64_t(graph_.numBlocks()));
}
+ if (MOZ_UNLIKELY(hasOSRFixups_)) {
+ cleanupOSRFixups();
+ hasOSRFixups_ = false;
+ }
+
return true;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.h b/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.h
index 9539de643de..5e6fe5816dc 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/ValueNumbering.h
@@ -71,6 +71,7 @@ class ValueNumberer
bool blocksRemoved_; // Have any blocks been removed?
bool updateAliasAnalysis_; // Do we care about AliasAnalysis?
bool dependenciesBroken_; // Have we broken AliasAnalysis?
+ bool hasOSRFixups_; // Have we created any OSR fixup blocks?
enum UseRemovedOption {
DontSetUseRemoved,
@@ -100,6 +101,7 @@ class ValueNumberer
bool visitBlock(MBasicBlock* block, const MBasicBlock* root);
bool visitDominatorTree(MBasicBlock* root);
bool visitGraph();
+ bool cleanupOSRFixups();
public:
ValueNumberer(MIRGenerator* mir, MIRGraph& graph);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/arm/Assembler-arm.h b/src/third_party/mozjs-45/extract/js/src/jit/arm/Assembler-arm.h
index 14a4a4a26ab..75a6c820288 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/arm/Assembler-arm.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/arm/Assembler-arm.h
@@ -1119,6 +1119,18 @@ class Operand
}
};
+inline Imm32
+Imm64::firstHalf() const
+{
+ return low();
+}
+
+inline Imm32
+Imm64::secondHalf() const
+{
+ return hi();
+}
+
void
PatchJump(CodeLocationJump& jump_, CodeLocationLabel label,
ReprotectCode reprotect = DontReprotect);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/arm/CodeGenerator-arm.cpp b/src/third_party/mozjs-45/extract/js/src/jit/arm/CodeGenerator-arm.cpp
index 202dc5752b5..c2a3bfde191 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/arm/CodeGenerator-arm.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jit/arm/CodeGenerator-arm.cpp
@@ -1086,7 +1086,7 @@ CodeGeneratorARM::emitTableSwitchDispatch(MTableSwitch* mir, Register index, Reg
for (int32_t i = 0; i < cases; i++) {
CodeLabel cl;
masm.writeCodePointer(cl.patchAt());
- ool->addCodeLabel(cl);
+ masm.propagateOOM(ool->addCodeLabel(cl));
}
addOutOfLineCode(ool, mir);
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/arm/MacroAssembler-arm.h b/src/third_party/mozjs-45/extract/js/src/jit/arm/MacroAssembler-arm.h
index 23962bbded8..4ffdbe2d4c2 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/arm/MacroAssembler-arm.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/arm/MacroAssembler-arm.h
@@ -1245,6 +1245,29 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
void loadPtr(AbsoluteAddress address, Register dest);
void loadPtr(wasm::SymbolicAddress address, Register dest);
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branch32(cond, lhs, val.firstHalf(), label);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), val.secondHalf(), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ load32(rhs, scratch);
+ branch32(cond, lhs, scratch, label);
+
+ load32(Address(rhs.base, rhs.offset + sizeof(uint32_t)), scratch);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), scratch, label);
+ }
+
void loadPrivate(const Address& address, Register dest);
void loadInt32x1(const Address& addr, FloatRegister dest) { MOZ_CRASH("NYI"); }
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/arm64/Assembler-arm64.h b/src/third_party/mozjs-45/extract/js/src/jit/arm64/Assembler-arm64.h
index 9d6a5631349..b30874baf30 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/arm64/Assembler-arm64.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/arm64/Assembler-arm64.h
@@ -484,6 +484,18 @@ GetTempRegForIntArg(uint32_t usedIntArgs, uint32_t usedFloatArgs, Register* out)
return true;
}
+inline Imm32
+Imm64::firstHalf() const
+{
+ return low();
+}
+
+inline Imm32
+Imm64::secondHalf() const
+{
+ return hi();
+}
+
void PatchJump(CodeLocationJump& jump_, CodeLocationLabel label,
ReprotectCode reprotect = DontReprotect);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/arm64/MacroAssembler-arm64.h b/src/third_party/mozjs-45/extract/js/src/jit/arm64/MacroAssembler-arm64.h
index 268caa8b2c2..ef48df42793 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/arm64/MacroAssembler-arm64.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/arm64/MacroAssembler-arm64.h
@@ -1683,6 +1683,25 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
branchPtr(cond, scratch, ptr, label);
}
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branchPtr(cond, lhs, ImmWord(val.value), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ loadPtr(rhs, scratch);
+ branchPtr(cond, lhs, scratch, label);
+ }
+
void branchTestPtr(Condition cond, Register lhs, Register rhs, Label* label) {
Tst(ARMRegister(lhs, 64), Operand(ARMRegister(rhs, 64)));
B(label, cond);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/mips-shared/Assembler-mips-shared.h b/src/third_party/mozjs-45/extract/js/src/jit/mips-shared/Assembler-mips-shared.h
index dab4c88d179..244e7248b44 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/mips-shared/Assembler-mips-shared.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/mips-shared/Assembler-mips-shared.h
@@ -624,6 +624,18 @@ class Operand
}
};
+inline Imm32
+Imm64::firstHalf() const
+{
+ return low();
+}
+
+inline Imm32
+Imm64::secondHalf() const
+{
+ return hi();
+}
+
void
PatchJump(CodeLocationJump& jump_, CodeLocationLabel label,
ReprotectCode reprotect = DontReprotect);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/mips32/MacroAssembler-mips32.h b/src/third_party/mozjs-45/extract/js/src/jit/mips32/MacroAssembler-mips32.h
index 319748378f6..560353e4b60 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/mips32/MacroAssembler-mips32.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/mips32/MacroAssembler-mips32.h
@@ -1149,6 +1149,29 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS
load32(Address(address.base, address.offset + HIGH_32_OFFSET), dest.high);
}
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branch32(cond, lhs, val.firstHalf(), label);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), val.secondHalf(), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ load32(rhs, scratch);
+ branch32(cond, lhs, scratch, label);
+
+ load32(Address(rhs.base, rhs.offset + sizeof(uint32_t)), scratch);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), scratch, label);
+ }
+
void loadPtr(const Address& address, Register dest);
void loadPtr(const BaseIndex& src, Register dest);
void loadPtr(AbsoluteAddress address, Register dest);
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/mips64/MacroAssembler-mips64.h b/src/third_party/mozjs-45/extract/js/src/jit/mips64/MacroAssembler-mips64.h
index 44364ffca37..0787aefe912 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/mips64/MacroAssembler-mips64.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/mips64/MacroAssembler-mips64.h
@@ -1167,6 +1167,25 @@ class MacroAssemblerMIPS64Compat : public MacroAssemblerMIPS64
void loadPtr(AbsoluteAddress address, Register dest);
void loadPtr(wasm::SymbolicAddress address, Register dest);
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branchPtr(cond, lhs, ImmWord(val.value), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ loadPtr(rhs, scratch);
+ branchPtr(cond, lhs, scratch, label);
+ }
+
void loadPrivate(const Address& address, Register dest);
void loadInt32x1(const Address& addr, FloatRegister dest) { MOZ_CRASH("NYI"); }
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/none/MacroAssembler-none.h b/src/third_party/mozjs-45/extract/js/src/jit/none/MacroAssembler-none.h
index 512ae813d68..4441d8d59d3 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/none/MacroAssembler-none.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/none/MacroAssembler-none.h
@@ -259,6 +259,8 @@ class MacroAssemblerNone : public Assembler
template <typename T, typename S> void branchPrivatePtr(Condition, T, S, Label*) { MOZ_CRASH(); }
template <typename T, typename S> void decBranchPtr(Condition, T, S, Label*) { MOZ_CRASH(); }
template <typename T, typename S> void branchTest64(Condition, T, T, S, Label*) { MOZ_CRASH(); }
+ template <typename T, typename S> void branch64(Condition, T, S, Label*) { MOZ_CRASH(); }
+ template <typename T, typename S> void branch64(Condition, T, T, S, Label*) { MOZ_CRASH(); }
template <typename T, typename S> void mov(T, S) { MOZ_CRASH(); }
template <typename T, typename S> void movq(T, S) { MOZ_CRASH(); }
template <typename T, typename S> void movePtr(T, S) { MOZ_CRASH(); }
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/shared/Assembler-shared.h b/src/third_party/mozjs-45/extract/js/src/jit/shared/Assembler-shared.h
index 123e23c7c9a..10c39b38f69 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/shared/Assembler-shared.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/shared/Assembler-shared.h
@@ -132,6 +132,17 @@ struct Imm64
explicit Imm64(uint64_t value) : value(value)
{ }
+
+ Imm32 low() const {
+ return Imm32(int32_t(value));
+ }
+
+ Imm32 hi() const {
+ return Imm32(int32_t(value >> 32));
+ }
+
+ inline Imm32 firstHalf() const;
+ inline Imm32 secondHalf() const;
};
#ifdef DEBUG
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/x64/MacroAssembler-x64.h b/src/third_party/mozjs-45/extract/js/src/jit/x64/MacroAssembler-x64.h
index 7daccb75926..e59d29bf300 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/x64/MacroAssembler-x64.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/x64/MacroAssembler-x64.h
@@ -767,6 +767,26 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
void load64(const Address& address, Register64 dest) {
movq(Operand(address), dest.reg);
}
+
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branchPtr(cond, lhs, ImmWord(val.value), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ loadPtr(rhs, scratch);
+ branchPtr(cond, lhs, scratch, label);
+ }
+
template <typename T>
void storePtr(ImmWord imm, T address) {
if ((intptr_t)imm.value <= INT32_MAX && (intptr_t)imm.value >= INT32_MIN) {
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/x86-shared/Assembler-x86-shared.h b/src/third_party/mozjs-45/extract/js/src/jit/x86-shared/Assembler-x86-shared.h
index 8d296e76a70..ed9bb8f0953 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/x86-shared/Assembler-x86-shared.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/x86-shared/Assembler-x86-shared.h
@@ -173,6 +173,18 @@ class Operand
}
};
+inline Imm32
+Imm64::firstHalf() const
+{
+ return low();
+}
+
+inline Imm32
+Imm64::secondHalf() const
+{
+ return hi();
+}
+
class CPUInfo
{
public:
diff --git a/src/third_party/mozjs-45/extract/js/src/jit/x86/MacroAssembler-x86.h b/src/third_party/mozjs-45/extract/js/src/jit/x86/MacroAssembler-x86.h
index 0c41692bdac..a80fa132002 100644
--- a/src/third_party/mozjs-45/extract/js/src/jit/x86/MacroAssembler-x86.h
+++ b/src/third_party/mozjs-45/extract/js/src/jit/x86/MacroAssembler-x86.h
@@ -777,6 +777,30 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
movl(Operand(address), dest.low);
movl(Operand(Address(address.base, address.offset + 4)), dest.high);
}
+
+ void branch64(Condition cond, const Address& lhs, Imm64 val, Label* label) {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+
+ branch32(cond, lhs, val.firstHalf(), label);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), val.secondHalf(), label);
+ }
+
+ void branch64(Condition cond, const Address& lhs, const Address& rhs, Register scratch,
+ Label* label)
+ {
+ MOZ_ASSERT(cond == Assembler::NotEqual,
+ "other condition codes not supported");
+ MOZ_ASSERT(lhs.base != scratch);
+ MOZ_ASSERT(rhs.base != scratch);
+
+ load32(rhs, scratch);
+ branch32(cond, lhs, scratch, label);
+
+ load32(Address(rhs.base, rhs.offset + sizeof(uint32_t)), scratch);
+ branch32(cond, Address(lhs.base, lhs.offset + sizeof(uint32_t)), scratch, label);
+ }
+
template <typename T>
void storePtr(ImmWord imm, T address) {
movl(Imm32(imm.value), Operand(address));
diff --git a/src/third_party/mozjs-45/extract/js/src/jsapi.cpp b/src/third_party/mozjs-45/extract/js/src/jsapi.cpp
index fa3647d8a2c..adbee56ef02 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsapi.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsapi.cpp
@@ -5781,6 +5781,18 @@ JS_ErrorFromException(JSContext* cx, HandleObject obj)
return ErrorFromException(cx, obj);
}
+void
+JSErrorReport::initLinebuf(const char16_t* linebuf, size_t linebufLength, size_t tokenOffset)
+{
+ MOZ_ASSERT(linebuf);
+ MOZ_ASSERT(tokenOffset <= linebufLength);
+ MOZ_ASSERT(linebuf[linebufLength] == '\0');
+
+ linebuf_ = linebuf;
+ linebufLength_ = linebufLength;
+ tokenOffset_ = tokenOffset;
+}
+
JS_PUBLIC_API(bool)
JS_ThrowStopIteration(JSContext* cx)
{
diff --git a/src/third_party/mozjs-45/extract/js/src/jsapi.h b/src/third_party/mozjs-45/extract/js/src/jsapi.h
index 2fa1b9f370c..358d09b1ef0 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsapi.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsapi.h
@@ -307,10 +307,6 @@ class MOZ_RAII AutoHashMapRooter : protected AutoGCRooter
return map.sizeOfIncludingThis(mallocSizeOf);
}
- uint32_t generation() const {
- return map.generation();
- }
-
/************************************************** Shorthand operations */
bool has(const Lookup& l) const {
@@ -422,10 +418,6 @@ class MOZ_RAII AutoHashSetRooter : protected AutoGCRooter
return set.sizeOfIncludingThis(mallocSizeOf);
}
- uint32_t generation() const {
- return set.generation();
- }
-
/************************************************** Shorthand operations */
bool has(const Lookup& l) const {
@@ -4461,7 +4453,7 @@ class MOZ_RAII JSAutoByteString
}
~JSAutoByteString() {
- js_free(mBytes);
+ JS_free(nullptr, mBytes);
}
/* Take ownership of the given byte array. */
@@ -4506,7 +4498,7 @@ class MOZ_RAII JSAutoByteString
}
private:
- char* mBytes;
+ char* mBytes;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
/* Copy and assignment are not supported. */
@@ -4768,26 +4760,43 @@ JS_ReportAllocationOverflow(JSContext* cx);
class JSErrorReport
{
+ // Offending source line without final '\n'.
+ const char16_t* linebuf_;
+
+ // Number of chars in linebuf_. Does not include trailing '\0'.
+ size_t linebufLength_;
+
+ // The 0-based offset of error token in linebuf_.
+ size_t tokenOffset_;
+
public:
JSErrorReport()
- : filename(nullptr), lineno(0), column(0), isMuted(false), linebuf(nullptr),
- tokenptr(nullptr), uclinebuf(nullptr), uctokenptr(nullptr), flags(0), errorNumber(0),
- ucmessage(nullptr), messageArgs(nullptr), exnType(0)
+ : linebuf_(nullptr), linebufLength_(0), tokenOffset_(0),
+ filename(nullptr), lineno(0), column(0), isMuted(false),
+ flags(0), errorNumber(0), ucmessage(nullptr),
+ messageArgs(nullptr), exnType(0)
{}
const char* filename; /* source file name, URL, etc., or null */
unsigned lineno; /* source line number */
unsigned column; /* zero-based column index in line */
bool isMuted; /* See the comment in ReadOnlyCompileOptions. */
- const char* linebuf; /* offending source line without final \n */
- const char* tokenptr; /* pointer to error token in linebuf */
- const char16_t* uclinebuf; /* unicode (original) line buffer */
- const char16_t* uctokenptr; /* unicode (original) token pointer */
unsigned flags; /* error/warning, etc. */
unsigned errorNumber; /* the error number, e.g. see js.msg */
const char16_t* ucmessage; /* the (default) error message */
const char16_t** messageArgs; /* arguments for the error message */
int16_t exnType; /* One of the JSExnType constants */
+
+ const char16_t* linebuf() const {
+ return linebuf_;
+ }
+ size_t linebufLength() const {
+ return linebufLength_;
+ }
+ size_t tokenOffset() const {
+ return tokenOffset_;
+ }
+ void initLinebuf(const char16_t* linebuf, size_t linebufLength, size_t tokenOffset);
};
/*
diff --git a/src/third_party/mozjs-45/extract/js/src/jsarray.cpp b/src/third_party/mozjs-45/extract/js/src/jsarray.cpp
index d7367ec9b4b..6ae22586271 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsarray.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsarray.cpp
@@ -2123,18 +2123,25 @@ js::ArrayShiftMoveElements(JSObject* obj)
template <JSValueType Type>
DenseElementResult
-ArrayShiftDenseKernel(JSContext* cx, JSObject* obj, Value* rval)
+ArrayShiftDenseKernel(JSContext* cx, HandleObject obj, MutableHandleValue rval)
{
if (ObjectMayHaveExtraIndexedProperties(obj))
return DenseElementResult::Incomplete;
+ RootedObjectGroup group(cx, obj->getGroup(cx));
+ if (MOZ_UNLIKELY(!group))
+ return DenseElementResult::Failure;
+
+ if (MOZ_UNLIKELY(group->hasAllFlags(OBJECT_FLAG_ITERATED)))
+ return DenseElementResult::Incomplete;
+
size_t initlen = GetBoxedOrUnboxedInitializedLength<Type>(obj);
if (initlen == 0)
return DenseElementResult::Incomplete;
- *rval = GetBoxedOrUnboxedDenseElement<Type>(obj, 0);
- if (rval->isMagic(JS_ELEMENTS_HOLE))
- rval->setUndefined();
+ rval.set(GetBoxedOrUnboxedDenseElement<Type>(obj, 0));
+ if (rval.isMagic(JS_ELEMENTS_HOLE))
+ rval.setUndefined();
DenseElementResult result = MoveBoxedOrUnboxedDenseElements<Type>(cx, obj, 0, 1, initlen - 1);
MOZ_ASSERT(result != DenseElementResult::Incomplete);
@@ -2146,7 +2153,7 @@ ArrayShiftDenseKernel(JSContext* cx, JSObject* obj, Value* rval)
}
DefineBoxedOrUnboxedFunctor3(ArrayShiftDenseKernel,
- JSContext*, JSObject*, Value*);
+ JSContext*, HandleObject, MutableHandleValue);
/* ES5 15.4.4.9 */
bool
@@ -2178,19 +2185,13 @@ js::array_shift(JSContext* cx, unsigned argc, Value* vp)
uint32_t newlen = len - 1;
/* Fast paths. */
- ArrayShiftDenseKernelFunctor functor(cx, obj, args.rval().address());
+ ArrayShiftDenseKernelFunctor functor(cx, obj, args.rval());
DenseElementResult result = CallBoxedOrUnboxedSpecialization(functor, obj);
if (result != DenseElementResult::Incomplete) {
if (result == DenseElementResult::Failure)
return false;
- if (!SetLengthProperty(cx, obj, newlen))
- return false;
-
- RootedId id(cx);
- if (!IndexToId(cx, newlen, &id))
- return false;
- return SuppressDeletedProperty(cx, obj, id);
+ return SetLengthProperty(cx, obj, newlen);
}
/* Steps 5, 10. */
@@ -2508,7 +2509,7 @@ js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueI
Rooted<ArrayObject*> arr(cx, &obj->as<ArrayObject>());
if (arr->lengthIsWritable()) {
DenseElementResult result =
- arr->ensureDenseElements(cx, arr->length(), itemCount - actualDeleteCount);
+ arr->ensureDenseElements(cx, len, itemCount - actualDeleteCount);
if (result == DenseElementResult::Failure)
return false;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jscntxt.cpp b/src/third_party/mozjs-45/extract/js/src/jscntxt.cpp
index 4cc31813f17..6b113d5f21b 100644
--- a/src/third_party/mozjs-45/extract/js/src/jscntxt.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jscntxt.cpp
@@ -522,20 +522,28 @@ js::PrintError(JSContext* cx, FILE* file, const char* message, JSErrorReport* re
fputs(prefix, file);
fputs(message, file);
- if (report->linebuf) {
- /* report->linebuf usually ends with a newline. */
- int n = strlen(report->linebuf);
- fprintf(file, ":\n%s%s%s%s",
- prefix,
- report->linebuf,
- (n > 0 && report->linebuf[n-1] == '\n') ? "" : "\n",
- prefix);
- n = report->tokenptr - report->linebuf;
- for (int i = 0, j = 0; i < n; i++) {
- if (report->linebuf[i] == '\t') {
- for (int k = (j + 8) & ~7; j < k; j++) {
+ if (const char16_t* linebuf = report->linebuf()) {
+ size_t n = report->linebufLength();
+
+ fputs(":\n", file);
+ if (prefix)
+ fputs(prefix, file);
+
+ for (size_t i = 0; i < n; i++)
+ fputc(static_cast<char>(linebuf[i]), file);
+
+ // linebuf usually ends with a newline. If not, add one here.
+ if (n == 0 || linebuf[n-1] != '\n')
+ fputc('\n', file);
+
+ if (prefix)
+ fputs(prefix, file);
+
+ n = report->tokenOffset();
+ for (size_t i = 0, j = 0; i < n; i++) {
+ if (linebuf[i] == '\t') {
+ for (size_t k = (j + 8) & ~7; j < k; j++)
fputc('.', file);
- }
continue;
}
fputc('.', file);
diff --git a/src/third_party/mozjs-45/extract/js/src/jscntxt.h b/src/third_party/mozjs-45/extract/js/src/jscntxt.h
index 7661853677d..2bf252bca8e 100644
--- a/src/third_party/mozjs-45/extract/js/src/jscntxt.h
+++ b/src/third_party/mozjs-45/extract/js/src/jscntxt.h
@@ -51,11 +51,11 @@ class MOZ_RAII AutoCycleDetector
bool foundCycle() { return cyclic; }
private:
+ Generation hashsetGenerationAtInit;
JSContext* cx;
RootedObject obj;
- bool cyclic;
- uint32_t hashsetGenerationAtInit;
Set::AddPtr hashsetAddPointer;
+ bool cyclic;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
diff --git a/src/third_party/mozjs-45/extract/js/src/jscntxtinlines.h b/src/third_party/mozjs-45/extract/js/src/jscntxtinlines.h
index 063f0ca43d0..073a04c7bb6 100644
--- a/src/third_party/mozjs-45/extract/js/src/jscntxtinlines.h
+++ b/src/third_party/mozjs-45/extract/js/src/jscntxtinlines.h
@@ -21,7 +21,6 @@
namespace js {
-#ifdef JS_CRASH_DIAGNOSTICS
class CompartmentChecker
{
JSCompartment* compartment;
@@ -143,7 +142,6 @@ class CompartmentChecker
check(desc.value());
}
};
-#endif /* JS_CRASH_DIAGNOSTICS */
/*
* Don't perform these checks when called from a finalizer. The checking
@@ -155,6 +153,13 @@ class CompartmentChecker
CompartmentChecker c(cx)
template <class T1> inline void
+releaseAssertSameCompartment(ExclusiveContext* cx, const T1& t1)
+{
+ START_ASSERT_SAME_COMPARTMENT();
+ c.check(t1);
+}
+
+template <class T1> inline void
assertSameCompartment(ExclusiveContext* cx, const T1& t1)
{
#ifdef JS_CRASH_DIAGNOSTICS
diff --git a/src/third_party/mozjs-45/extract/js/src/jsexn.cpp b/src/third_party/mozjs-45/extract/js/src/jsexn.cpp
index 43509f9706d..cc68f5d4836 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsexn.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsexn.cpp
@@ -141,8 +141,7 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
* array of copies of report->messageArgs
* char16_t array with characters for all messageArgs
* char16_t array with characters for ucmessage
- * char16_t array with characters for uclinebuf and uctokenptr
- * char array with characters for linebuf and tokenptr
+ * char16_t array with characters for linebuf
* char array with characters for filename
* Such layout together with the properties enforced by the following
* asserts does not need any extra alignment padding.
@@ -150,27 +149,20 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
JS_STATIC_ASSERT(sizeof(JSErrorReport) % sizeof(const char*) == 0);
JS_STATIC_ASSERT(sizeof(const char*) % sizeof(char16_t) == 0);
- size_t filenameSize;
- size_t linebufSize;
- size_t uclinebufSize;
- size_t ucmessageSize;
- size_t i, argsArraySize, argsCopySize, argSize;
- size_t mallocSize;
- JSErrorReport* copy;
- uint8_t* cursor;
-
#define JS_CHARS_SIZE(chars) ((js_strlen(chars) + 1) * sizeof(char16_t))
- filenameSize = report->filename ? strlen(report->filename) + 1 : 0;
- linebufSize = report->linebuf ? strlen(report->linebuf) + 1 : 0;
- uclinebufSize = report->uclinebuf ? JS_CHARS_SIZE(report->uclinebuf) : 0;
- ucmessageSize = 0;
- argsArraySize = 0;
- argsCopySize = 0;
+ size_t filenameSize = report->filename ? strlen(report->filename) + 1 : 0;
+ size_t linebufSize = 0;
+ if (report->linebuf())
+ linebufSize = (report->linebufLength() + 1) * sizeof(char16_t);
+ size_t ucmessageSize = 0;
+ size_t argsArraySize = 0;
+ size_t argsCopySize = 0;
if (report->ucmessage) {
ucmessageSize = JS_CHARS_SIZE(report->ucmessage);
if (report->messageArgs) {
- for (i = 0; report->messageArgs[i]; ++i)
+ size_t i = 0;
+ for (; report->messageArgs[i]; ++i)
argsCopySize += JS_CHARS_SIZE(report->messageArgs[i]);
/* Non-null messageArgs should have at least one non-null arg. */
@@ -183,22 +175,22 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
* The mallocSize can not overflow since it represents the sum of the
* sizes of already allocated objects.
*/
- mallocSize = sizeof(JSErrorReport) + argsArraySize + argsCopySize +
- ucmessageSize + uclinebufSize + linebufSize + filenameSize;
- cursor = cx->pod_malloc<uint8_t>(mallocSize);
+ size_t mallocSize = sizeof(JSErrorReport) + argsArraySize + argsCopySize +
+ ucmessageSize + linebufSize + filenameSize;
+ uint8_t* cursor = cx->pod_calloc<uint8_t>(mallocSize);
if (!cursor)
return nullptr;
- copy = (JSErrorReport*)cursor;
- memset(cursor, 0, sizeof(JSErrorReport));
+ JSErrorReport* copy = (JSErrorReport*)cursor;
cursor += sizeof(JSErrorReport);
if (argsArraySize != 0) {
copy->messageArgs = (const char16_t**)cursor;
cursor += argsArraySize;
- for (i = 0; report->messageArgs[i]; ++i) {
+ size_t i = 0;
+ for (; report->messageArgs[i]; ++i) {
copy->messageArgs[i] = (const char16_t*)cursor;
- argSize = JS_CHARS_SIZE(report->messageArgs[i]);
+ size_t argSize = JS_CHARS_SIZE(report->messageArgs[i]);
js_memcpy(cursor, report->messageArgs[i], argSize);
cursor += argSize;
}
@@ -212,24 +204,11 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
cursor += ucmessageSize;
}
- if (report->uclinebuf) {
- copy->uclinebuf = (const char16_t*)cursor;
- js_memcpy(cursor, report->uclinebuf, uclinebufSize);
- cursor += uclinebufSize;
- if (report->uctokenptr) {
- copy->uctokenptr = copy->uclinebuf + (report->uctokenptr -
- report->uclinebuf);
- }
- }
-
- if (report->linebuf) {
- copy->linebuf = (const char*)cursor;
- js_memcpy(cursor, report->linebuf, linebufSize);
+ if (report->linebuf()) {
+ const char16_t* linebufCopy = (const char16_t*)cursor;
+ js_memcpy(cursor, report->linebuf(), linebufSize);
cursor += linebufSize;
- if (report->tokenptr) {
- copy->tokenptr = copy->linebuf + (report->tokenptr -
- report->linebuf);
- }
+ copy->initLinebuf(linebufCopy, report->linebufLength(), report->tokenOffset());
}
if (report->filename) {
diff --git a/src/third_party/mozjs-45/extract/js/src/jsfriendapi.h b/src/third_party/mozjs-45/extract/js/src/jsfriendapi.h
index fe3f3dfd577..53518d3712b 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsfriendapi.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsfriendapi.h
@@ -1209,7 +1209,7 @@ NukeCrossCompartmentWrappers(JSContext* cx,
* * If DoesntShadowUnique is returned then the slot at listBaseExpandoSlot
* should contain a private pointer to a ExpandoAndGeneration, which contains
* a JS::Value that should either be undefined or point to an expando object,
- * and a uint32 value. If that value changes then the IC for getting a
+ * and a uint64 value. If that value changes then the IC for getting a
* property will be invalidated.
* * If Shadows is returned, that means the property is an own property of the
* proxy but doesn't live on the expando object.
@@ -1238,7 +1238,7 @@ struct ExpandoAndGeneration {
}
JS::Heap<JS::Value> expando;
- uint32_t generation;
+ uint64_t generation;
};
typedef enum DOMProxyShadowsResult {
diff --git a/src/third_party/mozjs-45/extract/js/src/jsmath.cpp b/src/third_party/mozjs-45/extract/js/src/jsmath.cpp
index 2008b0f7434..040269f63d9 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsmath.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsmath.cpp
@@ -484,23 +484,29 @@ js::math_floor(JSContext* cx, unsigned argc, Value* vp)
}
bool
-js::math_imul(JSContext* cx, unsigned argc, Value* vp)
+js::math_imul_handle(JSContext* cx, HandleValue lhs, HandleValue rhs, MutableHandleValue res)
{
- CallArgs args = CallArgsFromVp(argc, vp);
-
uint32_t a = 0, b = 0;
- if (args.hasDefined(0) && !ToUint32(cx, args[0], &a))
+ if (!lhs.isUndefined() && !ToUint32(cx, lhs, &a))
return false;
- if (args.hasDefined(1) && !ToUint32(cx, args[1], &b))
+ if (!rhs.isUndefined() && !ToUint32(cx, rhs, &b))
return false;
uint32_t product = a * b;
- args.rval().setInt32(product > INT32_MAX
- ? int32_t(INT32_MIN + (product - INT32_MAX - 1))
- : int32_t(product));
+ res.setInt32(product > INT32_MAX
+ ? int32_t(INT32_MIN + (product - INT32_MAX - 1))
+ : int32_t(product));
return true;
}
+bool
+js::math_imul(JSContext* cx, unsigned argc, Value* vp)
+{
+ CallArgs args = CallArgsFromVp(argc, vp);
+
+ return math_imul_handle(cx, args.get(0), args.get(1), args.rval());
+}
+
// Implements Math.fround (20.2.2.16) up to step 3
bool
js::RoundFloat32(JSContext* cx, HandleValue v, float* out)
diff --git a/src/third_party/mozjs-45/extract/js/src/jsmath.h b/src/third_party/mozjs-45/extract/js/src/jsmath.h
index 2250af8237c..e703c703c62 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsmath.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsmath.h
@@ -139,6 +139,9 @@ extern bool
math_sqrt_handle(JSContext* cx, js::HandleValue number, js::MutableHandleValue result);
extern bool
+math_imul_handle(JSContext* cx, HandleValue lhs, HandleValue rhs, MutableHandleValue res);
+
+extern bool
math_imul(JSContext* cx, unsigned argc, js::Value* vp);
extern bool
diff --git a/src/third_party/mozjs-45/extract/js/src/jsobj.cpp b/src/third_party/mozjs-45/extract/js/src/jsobj.cpp
index e3ef0309446..41ad7756ed2 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsobj.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsobj.cpp
@@ -932,8 +932,9 @@ CreateThisForFunctionWithGroup(JSContext* cx, HandleObjectGroup group,
if (!res)
return nullptr;
- if (newKind != SingletonObject)
- newScript->registerNewObject(res);
+ // Make sure group->newScript is still there.
+ if (newKind != SingletonObject && group->newScript())
+ group->newScript()->registerNewObject(res);
return res;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jsobjinlines.h b/src/third_party/mozjs-45/extract/js/src/jsobjinlines.h
index 0b352e6b3cc..eca5aa0d65d 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsobjinlines.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsobjinlines.h
@@ -284,7 +284,8 @@ SetNewObjectMetadata(ExclusiveContext* cxArg, JSObject* obj)
// thread, except when analysis/compilation is active, to avoid recursion.
if (JSContext* cx = cxArg->maybeJSContext()) {
if (MOZ_UNLIKELY((size_t)cx->compartment()->hasObjectMetadataCallback()) &&
- !cx->zone()->types.activeAnalysis)
+ !cx->zone()->types.activeAnalysis &&
+ !cx->zone()->usedByExclusiveThread)
{
// Use AutoEnterAnalysis to prohibit both any GC activity under the
// callback, and any reentering of JS via Invoke() etc.
diff --git a/src/third_party/mozjs-45/extract/js/src/jsscript.cpp b/src/third_party/mozjs-45/extract/js/src/jsscript.cpp
index 6568a65abba..788e38bf164 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsscript.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsscript.cpp
@@ -130,7 +130,10 @@ Bindings::initWithTemporaryStorage(ExclusiveContext* cx, MutableHandle<Bindings>
// any time, such accesses are mediated by DebugScopeProxy (see
// DebugScopeProxy::handleUnaliasedAccess).
uint32_t nslots = CallObject::RESERVED_SLOTS;
- uint32_t aliasedBodyLevelLexicalBegin = UINT16_MAX;
+
+ // Unless there are aliased body-level lexical bindings at all, set the
+ // begin index to an impossible slot number.
+ uint32_t aliasedBodyLevelLexicalBegin = LOCALNO_LIMIT;
for (BindingIter bi(self); bi; bi++) {
if (bi->aliased()) {
// Per ES6, lexical bindings cannot be accessed until
@@ -1705,7 +1708,7 @@ ScriptSourceObject::create(ExclusiveContext* cx, ScriptSource* source)
ScriptSourceObject::initFromOptions(JSContext* cx, HandleScriptSource source,
const ReadOnlyCompileOptions& options)
{
- assertSameCompartment(cx, source);
+ releaseAssertSameCompartment(cx, source);
MOZ_ASSERT(source->getReservedSlot(ELEMENT_SLOT).isMagic(JS_GENERIC_MAGIC));
MOZ_ASSERT(source->getReservedSlot(ELEMENT_PROPERTY_SLOT).isMagic(JS_GENERIC_MAGIC));
MOZ_ASSERT(source->getReservedSlot(INTRODUCTION_SCRIPT_SLOT).isMagic(JS_GENERIC_MAGIC));
@@ -4304,7 +4307,7 @@ LazyScript::CreateRaw(ExclusiveContext* cx, HandleFunction fun,
p.bindingsAccessedDynamically = false;
p.hasDebuggerStatement = false;
p.hasDirectEval = false;
- p.usesArgumentsApplyAndThis = false;
+ p.isLikelyConstructorWrapper = false;
p.isDerivedClassConstructor = false;
p.needsHomeObject = false;
diff --git a/src/third_party/mozjs-45/extract/js/src/jsscript.h b/src/third_party/mozjs-45/extract/js/src/jsscript.h
index 36e8e8e84cc..59b94dd34a9 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsscript.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsscript.h
@@ -226,8 +226,8 @@ class Bindings : public JS::Traceable
uint16_t numArgs_;
uint16_t numBlockScoped_;
uint16_t numBodyLevelLexicals_;
- uint16_t aliasedBodyLevelLexicalBegin_;
uint16_t numUnaliasedBodyLevelLexicals_;
+ uint32_t aliasedBodyLevelLexicalBegin_;
uint32_t numVars_;
uint32_t numUnaliasedVars_;
@@ -252,6 +252,7 @@ class Bindings : public JS::Traceable
}
public:
+ static const uint32_t BLOCK_SCOPED_LIMIT = UINT16_LIMIT;
Binding* bindingArray() const {
return reinterpret_cast<Binding*>(bindingArrayAndFlag_ & ~TEMPORARY_STORAGE_BIT);
@@ -354,6 +355,10 @@ class Bindings : public JS::Traceable
void trace(JSTracer* trc);
};
+// If this fails, add/remove padding within Bindings.
+static_assert(sizeof(Bindings) % js::gc::CellSize == 0,
+ "Size of Bindings must be an integral multiple of js::gc::CellSize");
+
template <class Outer>
class BindingsOperations
{
@@ -436,7 +441,7 @@ class MutableBindingsOperations : public BindingsOperations<Outer>
void setNumUnaliasedBodyLevelLexicals(uint16_t num) {
bindings().numUnaliasedBodyLevelLexicals_ = num;
}
- void setAliasedBodyLevelLexicalBegin(uint16_t offset) {
+ void setAliasedBodyLevelLexicalBegin(uint32_t offset) {
bindings().aliasedBodyLevelLexicalBegin_ = offset;
}
uint8_t* switchToScriptStorage(Binding* permanentStorage) {
@@ -1125,7 +1130,7 @@ class JSScript : public js::gc::TenuredCell
bool isCachedEval_:1;
// 'this', 'arguments' and f.apply() are used. This is likely to be a wrapper.
- bool usesArgumentsApplyAndThis_:1;
+ bool isLikelyConstructorWrapper_:1;
// IonMonkey compilation hints.
bool failedBoundsCheck_:1; /* script has had hoisted bounds checks fail */
@@ -1387,10 +1392,10 @@ class JSScript : public js::gc::TenuredCell
void setActiveEval() { isActiveEval_ = true; }
- bool usesArgumentsApplyAndThis() const {
- return usesArgumentsApplyAndThis_;
+ bool isLikelyConstructorWrapper() const {
+ return isLikelyConstructorWrapper_;
}
- void setUsesArgumentsApplyAndThis() { usesArgumentsApplyAndThis_ = true; }
+ void setLikelyConstructorWrapper() { isLikelyConstructorWrapper_ = true; }
bool isGeneratorExp() const { return isGeneratorExp_; }
@@ -2143,7 +2148,7 @@ class LazyScript : public gc::TenuredCell
uint32_t bindingsAccessedDynamically : 1;
uint32_t hasDebuggerStatement : 1;
uint32_t hasDirectEval : 1;
- uint32_t usesArgumentsApplyAndThis : 1;
+ uint32_t isLikelyConstructorWrapper : 1;
uint32_t hasBeenCloned : 1;
uint32_t treatAsRunOnce : 1;
uint32_t isDerivedClassConstructor : 1;
@@ -2297,11 +2302,11 @@ class LazyScript : public gc::TenuredCell
p_.hasDirectEval = true;
}
- bool usesArgumentsApplyAndThis() const {
- return p_.usesArgumentsApplyAndThis;
+ bool isLikelyConstructorWrapper() const {
+ return p_.isLikelyConstructorWrapper;
}
- void setUsesArgumentsApplyAndThis() {
- p_.usesArgumentsApplyAndThis = true;
+ void setLikelyConstructorWrapper() {
+ p_.isLikelyConstructorWrapper = true;
}
bool hasBeenCloned() const {
diff --git a/src/third_party/mozjs-45/extract/js/src/jsstr.cpp b/src/third_party/mozjs-45/extract/js/src/jsstr.cpp
index 5d434c68569..5d13c748b3d 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsstr.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsstr.cpp
@@ -2226,7 +2226,7 @@ class MOZ_STACK_CLASS StringRegExpGuard
if (obj_->is<RegExpObject>()) {
RegExpObject* nobj = &obj_->as<RegExpObject>();
if (nobj->lookup(cx, cx->names().lastIndex)->writable()) {
- nobj->zeroLastIndex();
+ nobj->zeroLastIndex(cx);
return true;
}
}
diff --git a/src/third_party/mozjs-45/extract/js/src/jsutil.h b/src/third_party/mozjs-45/extract/js/src/jsutil.h
index e28cb39e088..9d2ac61b142 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsutil.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsutil.h
@@ -291,6 +291,37 @@ PodSet(T* aDst, T aSrc, size_t aNElem)
} /* namespace mozilla */
+/*
+ * Patterns used by SpiderMonkey to overwrite unused memory. If you are
+ * accessing an object with one of these pattern, you probably have a dangling
+ * pointer. These values should be odd, see the comment in IsThingPoisoned.
+ *
+ * Note: new patterns should also be added to the array in IsThingPoisoned!
+ */
+#define JS_FRESH_NURSERY_PATTERN 0x2F
+#define JS_SWEPT_NURSERY_PATTERN 0x2B
+#define JS_ALLOCATED_NURSERY_PATTERN 0x2D
+#define JS_FRESH_TENURED_PATTERN 0x4F
+#define JS_MOVED_TENURED_PATTERN 0x49
+#define JS_SWEPT_TENURED_PATTERN 0x4B
+#define JS_ALLOCATED_TENURED_PATTERN 0x4D
+#define JS_FREED_HEAP_PTR_PATTERN 0x6B
+
+/*
+ * Ensure JS_SWEPT_CODE_PATTERN is a byte pattern that will crash immediately
+ * when executed, so either an undefined instruction or an instruction that's
+ * illegal in user mode.
+ */
+#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_NONE)
+# define JS_SWEPT_CODE_PATTERN 0xED // IN instruction, crashes in user mode.
+#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64)
+# define JS_SWEPT_CODE_PATTERN 0xA3 // undefined instruction
+#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
+# define JS_SWEPT_CODE_PATTERN 0x01 // undefined instruction
+#else
+# error "JS_SWEPT_CODE_PATTERN not defined for this platform"
+#endif
+
static inline void*
Poison(void* ptr, uint8_t value, size_t num)
{
diff --git a/src/third_party/mozjs-45/extract/js/src/jswatchpoint.cpp b/src/third_party/mozjs-45/extract/js/src/jswatchpoint.cpp
index 2321fadf84e..9713ebe5990 100644
--- a/src/third_party/mozjs-45/extract/js/src/jswatchpoint.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jswatchpoint.cpp
@@ -27,15 +27,15 @@ namespace {
class AutoEntryHolder {
typedef WatchpointMap::Map Map;
+ Generation gen;
Map& map;
Map::Ptr p;
- uint32_t gen;
RootedObject obj;
RootedId id;
public:
AutoEntryHolder(JSContext* cx, Map& map, Map::Ptr p)
- : map(map), p(p), gen(map.generation()), obj(cx, p->key().object), id(cx, p->key().id)
+ : gen(map.generation()), map(map), p(p), obj(cx, p->key().object), id(cx, p->key().id)
{
MOZ_ASSERT(!p->value().held);
p->value().held = true;
diff --git a/src/third_party/mozjs-45/extract/js/src/jsweakmap.cpp b/src/third_party/mozjs-45/extract/js/src/jsweakmap.cpp
index 004c04806bb..2249f46f71c 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsweakmap.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/jsweakmap.cpp
@@ -32,7 +32,7 @@ WeakMapBase::WeakMapBase(JSObject* memOf, Zone* zone)
WeakMapBase::~WeakMapBase()
{
- MOZ_ASSERT(CurrentThreadIsGCSweeping() || CurrentThreadIsHandlingInitFailure());
+ MOZ_ASSERT(CurrentThreadIsGCSweeping());
}
void
diff --git a/src/third_party/mozjs-45/extract/js/src/jsweakmap.h b/src/third_party/mozjs-45/extract/js/src/jsweakmap.h
index 99446a41710..3c17c78d415 100644
--- a/src/third_party/mozjs-45/extract/js/src/jsweakmap.h
+++ b/src/third_party/mozjs-45/extract/js/src/jsweakmap.h
@@ -414,4 +414,12 @@ class ObjectWeakMap
} /* namespace js */
+namespace JS {
+
+template <>
+struct DeletePolicy<js::ObjectValueMap> : public js::GCManagedDeletePolicy<js::ObjectValueMap>
+{};
+
+} /* namespace JS */
+
#endif /* jsweakmap_h */
diff --git a/src/third_party/mozjs-45/extract/js/src/mfbt/Unified_cpp_mfbt0.cpp b/src/third_party/mozjs-45/extract/js/src/mfbt/Unified_cpp_mfbt0.cpp
index 03fdd5d9306..27b6144c8ff 100644
--- a/src/third_party/mozjs-45/extract/js/src/mfbt/Unified_cpp_mfbt0.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/mfbt/Unified_cpp_mfbt0.cpp
@@ -142,4 +142,4 @@
#ifdef INITGUID
#error "unused.cpp defines INITGUID, so it cannot be built in unified mode."
#undef INITGUID
-#endif
+#endif \ No newline at end of file
diff --git a/src/third_party/mozjs-45/extract/js/src/selfhosted.out.h b/src/third_party/mozjs-45/extract/js/src/selfhosted.out.h
index 23e312f1d73..5aaec1d6771 100644
--- a/src/third_party/mozjs-45/extract/js/src/selfhosted.out.h
+++ b/src/third_party/mozjs-45/extract/js/src/selfhosted.out.h
@@ -4,16 +4,16 @@
namespace js {
namespace selfhosted {
- static const unsigned char data[] = { 120, 156, 237, 189, 107, 123, 219, 198, 174, 40, 252, 189, 191, 130, 213, 179, 119, 35, 47, 203, 222, 150, 115, 105, 234, 92, 122, 82, 231, 82, 239, 38, 77, 222, 56, 109, 215, 90, 62, 217, 57, 180, 68, 201, 140, 36, 82, 37, 41, 199, 118, 235, 255, 254, 14, 230, 10, 204, 133, 164, 100, 57, 241, 234, 94, 122, 218, 88, 34, 49, 24, 12, 6, 192, 96, 48, 152, 153, 211, 184, 136, 202, 106, 248, 225, 73, 81, 196, 231, 31, 210, 108, 152, 156, 189, 30, 69, 143, 34, 254, 251, 64, 252, 124, 240, 213, 169, 132, 58, 172, 138, 52, 27, 127, 40, 23, 199, 37, 255, 198, 0, 237, 71, 6, 248, 183, 36, 158, 188, 138, 231, 12, 70, 126, 195, 120, 242, 249, 65, 149, 20, 113, 149, 230, 25, 71, 130, 126, 27, 48, 86, 230, 67, 202, 31, 231, 197, 135, 44, 57, 171, 24, 40, 123, 118, 32, 31, 253, 204, 158, 60, 248, 106, 180, 200, 6, 28, 205, 203, 180, 172, 186, 27, 209, 31, 95, 69, 236, 83, 157, 164, 229, 246, 52, 201, 198, 213, 9, 43, 180, 243, 224, 171, 203, 175, 94, 197, 147, 100, 63, 207, 24, 153, 11, 86, 224, 120, 154, 116, 161, 68, 47, 250, 227, 195, 135, 121, 145, 87, 249, 135, 15, 123, 81, 182, 152, 78, 47, 55, 16, 210, 183, 201, 32, 47, 134, 26, 109, 145, 84, 139, 34, 227, 196, 189, 62, 254, 152, 12, 170, 15, 131, 34, 137, 171, 164, 11, 5, 55, 252, 181, 8, 20, 172, 30, 130, 248, 199, 184, 124, 83, 228, 243, 164, 168, 206, 187, 121, 47, 154, 91, 53, 204, 163, 52, 139, 114, 64, 168, 75, 188, 203, 127, 200, 243, 105, 18, 103, 221, 83, 11, 248, 235, 175, 79, 45, 200, 159, 23, 179, 227, 164, 112, 0, 55, 41, 220, 219, 228, 247, 69, 90, 36, 162, 37, 251, 121, 82, 12, 56, 193, 186, 84, 58, 138, 186, 167, 209, 163, 71, 143, 162, 5, 147, 132, 81, 154, 37, 195, 232, 207, 63, 35, 241, 136, 183, 152, 131, 193, 231, 221, 73, 145, 127, 122, 119, 62, 79, 158, 21, 69, 94, 116, 251, 187, 61, 70, 133, 144, 13, 134, 175, 23, 117, 114, 94, 73, 103, 195, 34, 244, 37, 239, 34, 83, 37, 195, 205, 158, 30, 100, 85, 50, 230, 244, 63, 64, 132, 60, 100, 29, 105, 106, 148, 77, 218, 121, 96, 119, 204, 171, 184, 58, 249, 48, 75, 25, 155, 122, 209, 206, 89, 127, 132, 63, 180, 250, 195, 120, 150, 252, 26, 79, 23, 201, 63, 147, 34, 239, 158, 245, 162, 115, 139, 95, 103, 188, 165, 231, 208, 232, 238, 89, 244, 53, 251, 126, 22, 125, 243, 13, 123, 0, 95, 207, 41, 178, 23, 73, 245, 42, 169, 78, 242, 97, 247, 117, 47, 122, 163, 16, 45, 251, 17, 173, 1, 5, 0, 196, 156, 25, 162, 123, 186, 175, 55, 142, 222, 188, 55, 236, 16, 175, 237, 174, 209, 79, 105, 239, 200, 230, 104, 80, 131, 230, 235, 131, 114, 63, 158, 78, 99, 232, 119, 40, 188, 17, 238, 210, 157, 94, 84, 177, 95, 249, 136, 215, 178, 65, 248, 14, 79, 8, 55, 14, 180, 116, 255, 148, 156, 119, 227, 98, 188, 152, 37, 89, 165, 123, 153, 181, 15, 112, 177, 246, 73, 148, 10, 130, 96, 21, 32, 172, 53, 29, 97, 91, 58, 208, 68, 244, 240, 124, 118, 156, 79, 59, 118, 47, 40, 243, 208, 101, 34, 215, 139, 102, 188, 79, 176, 68, 171, 170, 140, 125, 96, 200, 250, 166, 221, 162, 4, 35, 205, 244, 40, 199, 4, 178, 165, 172, 209, 134, 233, 39, 245, 136, 21, 24, 48, 78, 62, 151, 148, 116, 5, 154, 94, 196, 202, 110, 16, 126, 203, 254, 212, 168, 130, 28, 191, 123, 7, 41, 145, 1, 39, 44, 82, 143, 169, 92, 207, 147, 65, 154, 148, 218, 12, 41, 94, 176, 222, 143, 23, 211, 10, 61, 95, 73, 76, 77, 219, 7, 162, 221, 12, 249, 246, 192, 32, 53, 173, 21, 239, 177, 144, 58, 50, 233, 210, 228, 99, 214, 160, 150, 81, 119, 118, 181, 129, 185, 85, 70, 183, 16, 41, 183, 162, 185, 20, 195, 14, 234, 178, 50, 122, 228, 211, 133, 210, 213, 167, 50, 172, 76, 117, 132, 31, 16, 222, 151, 27, 78, 225, 82, 192, 218, 42, 214, 103, 237, 248, 63, 255, 167, 20, 221, 167, 73, 143, 152, 126, 232, 214, 161, 198, 89, 198, 52, 95, 48, 89, 176, 71, 42, 253, 54, 205, 50, 244, 22, 65, 116, 70, 121, 222, 17, 228, 92, 98, 116, 216, 3, 232, 150, 73, 92, 12, 78, 158, 77, 19, 80, 156, 8, 171, 241, 107, 108, 163, 96, 212, 69, 124, 102, 250, 197, 222, 118, 187, 175, 165, 166, 109, 68, 143, 31, 63, 102, 54, 220, 48, 138, 67, 60, 242, 217, 245, 173, 190, 193, 3, 88, 28, 173, 125, 28, 245, 163, 239, 209, 88, 161, 1, 142, 250, 239, 55, 162, 61, 53, 48, 64, 45, 89, 244, 248, 17, 16, 83, 91, 201, 196, 130, 71, 36, 77, 88, 253, 153, 120, 157, 76, 203, 4, 241, 16, 222, 64, 27, 54, 213, 123, 133, 98, 18, 61, 196, 24, 20, 236, 142, 98, 180, 145, 148, 55, 241, 96, 146, 12, 57, 183, 153, 141, 199, 29, 52, 98, 202, 211, 125, 16, 1, 42, 86, 7, 251, 178, 185, 105, 235, 43, 160, 120, 125, 52, 121, 207, 153, 72, 58, 137, 214, 141, 218, 60, 49, 132, 10, 50, 46, 237, 70, 181, 172, 119, 2, 46, 202, 107, 24, 15, 175, 76, 1, 150, 88, 232, 19, 91, 12, 15, 43, 230, 25, 14, 148, 48, 78, 185, 219, 230, 23, 73, 175, 129, 127, 136, 205, 187, 109, 59, 152, 206, 177, 145, 237, 22, 175, 103, 91, 58, 192, 183, 144, 16, 143, 138, 124, 198, 107, 246, 11, 225, 46, 19, 66, 35, 122, 187, 239, 141, 228, 201, 246, 144, 65, 1, 43, 85, 47, 242, 52, 164, 103, 234, 219, 112, 249, 240, 50, 46, 171, 127, 97, 149, 4, 212, 91, 81, 80, 231, 212, 251, 13, 71, 189, 116, 33, 46, 169, 2, 252, 161, 173, 161, 68, 15, 1, 208, 167, 191, 173, 117, 14, 44, 0, 251, 187, 181, 245, 121, 85, 174, 182, 218, 207, 174, 113, 88, 222, 174, 81, 235, 166, 166, 26, 175, 230, 61, 8, 87, 194, 20, 144, 116, 159, 79, 89, 153, 86, 62, 240, 179, 221, 209, 22, 104, 228, 198, 3, 242, 190, 94, 99, 236, 74, 137, 180, 18, 46, 187, 118, 0, 113, 119, 5, 91, 240, 236, 52, 41, 206, 187, 128, 245, 152, 73, 243, 40, 91, 163, 9, 240, 122, 200, 59, 45, 59, 147, 207, 165, 193, 73, 223, 78, 128, 194, 91, 212, 249, 213, 147, 13, 67, 120, 253, 148, 227, 41, 155, 61, 207, 230, 233, 52, 121, 82, 140, 187, 236, 55, 46, 103, 218, 244, 46, 108, 142, 176, 17, 98, 54, 232, 52, 79, 135, 202, 66, 115, 173, 227, 118, 40, 18, 106, 23, 24, 241, 140, 238, 249, 180, 242, 107, 210, 179, 134, 62, 230, 188, 247, 184, 162, 246, 162, 9, 251, 178, 17, 212, 206, 81, 204, 164, 178, 86, 67, 153, 195, 151, 132, 116, 84, 200, 129, 16, 31, 143, 52, 4, 84, 115, 183, 101, 111, 174, 191, 15, 251, 75, 246, 161, 103, 128, 197, 125, 24, 212, 46, 206, 23, 165, 87, 164, 87, 60, 202, 116, 152, 207, 146, 27, 173, 75, 37, 35, 240, 175, 175, 74, 87, 213, 36, 161, 39, 53, 138, 36, 85, 205, 175, 73, 92, 8, 174, 75, 145, 214, 222, 129, 159, 75, 143, 128, 43, 109, 213, 232, 121, 94, 60, 139, 7, 39, 55, 90, 147, 70, 130, 198, 191, 182, 50, 181, 84, 164, 90, 93, 81, 20, 249, 149, 69, 117, 245, 117, 233, 203, 117, 116, 211, 154, 85, 198, 213, 21, 201, 148, 182, 234, 242, 42, 158, 223, 104, 85, 153, 197, 243, 155, 172, 38, 80, 242, 9, 43, 169, 215, 175, 96, 238, 186, 177, 46, 21, 130, 194, 140, 1, 243, 100, 200, 151, 8, 236, 240, 110, 27, 165, 130, 207, 135, 167, 60, 154, 248, 52, 174, 98, 189, 222, 243, 132, 67, 34, 228, 245, 138, 248, 36, 164, 131, 32, 63, 215, 165, 127, 235, 238, 251, 207, 53, 92, 49, 158, 180, 30, 173, 210, 41, 68, 76, 87, 214, 64, 19, 232, 208, 154, 184, 254, 209, 138, 211, 248, 175, 160, 133, 71, 239, 125, 154, 215, 139, 170, 252, 42, 26, 56, 81, 202, 7, 10, 246, 192, 121, 93, 38, 83, 214, 61, 201, 176, 65, 59, 5, 22, 175, 126, 242, 192, 191, 196, 226, 250, 149, 1, 237, 173, 242, 205, 77, 133, 117, 69, 221, 149, 194, 119, 109, 195, 231, 250, 229, 230, 115, 105, 176, 224, 76, 91, 37, 126, 155, 12, 23, 131, 155, 61, 119, 43, 56, 137, 159, 71, 135, 209, 34, 3, 252, 140, 7, 131, 197, 108, 49, 141, 201, 234, 148, 79, 199, 177, 238, 161, 66, 36, 140, 214, 15, 133, 209, 2, 97, 99, 79, 67, 110, 127, 135, 212, 165, 41, 22, 235, 210, 194, 140, 192, 230, 38, 50, 3, 14, 37, 154, 13, 111, 138, 164, 132, 8, 229, 35, 59, 186, 2, 159, 22, 11, 28, 138, 62, 191, 101, 10, 82, 103, 153, 40, 245, 65, 228, 208, 41, 42, 1, 218, 220, 244, 191, 56, 46, 146, 120, 226, 190, 186, 252, 42, 252, 139, 11, 153, 170, 213, 54, 107, 117, 125, 130, 77, 88, 3, 155, 194, 236, 161, 108, 49, 130, 218, 69, 47, 218, 207, 67, 136, 12, 251, 141, 169, 52, 2, 182, 197, 88, 147, 45, 189, 6, 253, 245, 218, 210, 96, 128, 91, 163, 13, 218, 76, 193, 0, 159, 205, 196, 22, 120, 195, 179, 54, 178, 52, 202, 160, 13, 126, 155, 142, 79, 170, 127, 27, 226, 200, 24, 98, 103, 189, 235, 175, 103, 142, 183, 182, 214, 104, 142, 131, 139, 95, 138, 188, 207, 105, 141, 183, 182, 62, 143, 53, 94, 193, 30, 123, 249, 116, 227, 204, 177, 176, 7, 215, 106, 147, 121, 21, 255, 2, 134, 153, 211, 121, 13, 214, 57, 128, 215, 59, 215, 205, 134, 221, 57, 227, 90, 58, 136, 171, 228, 70, 78, 116, 179, 97, 168, 39, 53, 221, 203, 25, 102, 84, 108, 149, 73, 174, 149, 33, 214, 54, 162, 84, 51, 107, 117, 150, 56, 52, 133, 238, 44, 149, 154, 9, 181, 142, 207, 33, 30, 184, 74, 137, 104, 245, 245, 60, 95, 67, 254, 119, 247, 127, 142, 238, 111, 232, 227, 224, 42, 22, 205, 212, 104, 204, 207, 216, 207, 231, 231, 191, 165, 172, 187, 178, 110, 197, 8, 79, 32, 119, 128, 125, 97, 127, 146, 108, 136, 211, 27, 215, 212, 213, 0, 82, 36, 204, 234, 167, 167, 201, 59, 94, 33, 129, 22, 52, 32, 88, 30, 245, 177, 10, 60, 140, 118, 24, 155, 77, 138, 118, 124, 214, 21, 57, 59, 20, 174, 103, 59, 45, 190, 207, 30, 77, 245, 182, 49, 152, 64, 48, 38, 252, 16, 56, 68, 232, 230, 60, 179, 82, 78, 16, 225, 162, 64, 35, 221, 135, 130, 243, 45, 200, 14, 209, 45, 49, 248, 201, 126, 198, 123, 148, 247, 43, 201, 79, 253, 30, 224, 155, 171, 212, 53, 155, 102, 51, 92, 184, 209, 105, 22, 79, 81, 171, 161, 190, 198, 54, 51, 160, 171, 116, 20, 47, 78, 155, 59, 200, 23, 220, 39, 35, 240, 130, 182, 45, 222, 49, 61, 233, 80, 87, 57, 50, 20, 188, 199, 30, 130, 188, 125, 243, 13, 252, 251, 80, 62, 218, 20, 248, 104, 114, 151, 232, 93, 252, 222, 248, 231, 240, 225, 82, 203, 254, 241, 190, 252, 116, 194, 108, 11, 83, 110, 254, 6, 230, 39, 158, 5, 108, 142, 154, 251, 96, 14, 99, 94, 31, 85, 249, 123, 62, 36, 0, 144, 229, 154, 146, 65, 95, 125, 134, 201, 52, 97, 198, 154, 23, 180, 60, 102, 134, 193, 246, 79, 171, 220, 126, 194, 41, 197, 15, 3, 201, 103, 55, 172, 97, 118, 24, 4, 130, 173, 237, 26, 134, 141, 230, 107, 111, 188, 127, 202, 76, 56, 31, 99, 75, 105, 10, 118, 62, 135, 193, 108, 182, 59, 19, 159, 209, 33, 109, 94, 193, 0, 173, 221, 214, 44, 111, 67, 156, 174, 95, 201, 166, 180, 179, 33, 40, 92, 197, 169, 113, 134, 102, 145, 52, 25, 157, 6, 124, 40, 143, 196, 28, 100, 131, 233, 98, 152, 148, 221, 80, 94, 30, 72, 208, 178, 2, 35, 183, 60, 121, 124, 169, 112, 234, 45, 154, 53, 171, 236, 91, 211, 19, 56, 75, 80, 11, 148, 193, 42, 179, 217, 173, 172, 245, 12, 115, 96, 157, 89, 237, 210, 154, 72, 255, 200, 118, 141, 232, 150, 43, 139, 173, 208, 65, 126, 183, 136, 206, 211, 117, 164, 180, 33, 183, 103, 159, 239, 205, 19, 61, 41, 247, 201, 60, 169, 196, 86, 152, 73, 10, 194, 147, 225, 190, 19, 91, 105, 146, 161, 232, 61, 220, 145, 102, 11, 143, 181, 225, 231, 231, 228, 19, 193, 222, 149, 96, 191, 100, 101, 60, 74, 14, 147, 234, 45, 155, 242, 23, 167, 201, 240, 112, 154, 155, 29, 63, 220, 3, 166, 181, 181, 44, 215, 7, 146, 219, 129, 238, 138, 54, 182, 216, 45, 228, 225, 146, 225, 145, 181, 157, 164, 145, 163, 59, 158, 185, 39, 222, 175, 217, 197, 243, 127, 179, 191, 135, 171, 10, 108, 184, 97, 143, 40, 37, 252, 141, 103, 219, 10, 241, 177, 97, 170, 64, 138, 137, 125, 91, 7, 163, 223, 10, 190, 200, 222, 227, 251, 65, 123, 181, 206, 74, 199, 161, 85, 109, 25, 186, 212, 93, 31, 179, 62, 23, 140, 127, 145, 84, 130, 244, 231, 76, 249, 72, 23, 240, 154, 116, 244, 146, 11, 140, 180, 20, 186, 164, 7, 190, 79, 5, 108, 246, 83, 202, 13, 177, 46, 194, 116, 253, 246, 110, 160, 174, 93, 98, 199, 203, 197, 20, 132, 247, 15, 97, 231, 208, 60, 166, 23, 13, 243, 140, 61, 224, 122, 18, 93, 26, 3, 33, 232, 123, 12, 33, 216, 216, 10, 193, 98, 198, 251, 37, 78, 146, 15, 91, 45, 209, 38, 75, 211, 89, 64, 206, 54, 84, 236, 68, 219, 100, 71, 10, 16, 204, 233, 134, 138, 4, 185, 155, 154, 101, 188, 9, 154, 101, 124, 47, 31, 17, 23, 78, 193, 169, 156, 144, 199, 71, 188, 248, 251, 22, 100, 56, 120, 119, 237, 105, 254, 60, 78, 193, 10, 8, 148, 61, 141, 251, 189, 211, 126, 85, 59, 20, 104, 81, 243, 50, 31, 165, 223, 164, 158, 212, 100, 205, 91, 149, 216, 186, 201, 109, 113, 201, 116, 56, 107, 165, 233, 186, 19, 124, 49, 38, 129, 203, 222, 129, 230, 51, 47, 70, 230, 157, 172, 246, 172, 42, 210, 101, 144, 236, 122, 144, 252, 148, 156, 47, 129, 193, 103, 178, 64, 211, 120, 231, 151, 60, 79, 103, 148, 61, 66, 106, 4, 197, 158, 20, 227, 71, 94, 151, 113, 31, 228, 156, 1, 24, 149, 132, 60, 31, 177, 87, 158, 99, 226, 123, 135, 61, 187, 15, 21, 24, 155, 198, 224, 224, 7, 47, 179, 92, 0, 83, 22, 161, 65, 15, 73, 180, 121, 184, 40, 89, 109, 7, 102, 44, 51, 187, 93, 101, 187, 61, 251, 93, 129, 78, 90, 142, 52, 198, 214, 15, 72, 11, 161, 91, 33, 247, 55, 152, 7, 152, 37, 159, 162, 253, 46, 108, 8, 58, 66, 170, 98, 13, 173, 120, 35, 175, 36, 136, 212, 108, 237, 210, 64, 110, 8, 124, 164, 19, 2, 6, 199, 151, 85, 34, 207, 18, 32, 99, 136, 170, 123, 27, 94, 246, 162, 212, 173, 71, 113, 192, 12, 91, 0, 234, 201, 70, 182, 247, 241, 222, 243, 32, 129, 162, 220, 46, 250, 86, 51, 158, 152, 163, 11, 60, 75, 13, 38, 181, 4, 63, 189, 244, 182, 82, 5, 34, 121, 117, 200, 243, 197, 112, 52, 203, 77, 201, 225, 247, 214, 118, 102, 16, 42, 45, 251, 61, 131, 156, 141, 252, 208, 149, 250, 55, 197, 31, 74, 127, 131, 252, 153, 230, 4, 184, 107, 249, 24, 21, 136, 249, 46, 156, 116, 146, 96, 103, 143, 11, 91, 216, 109, 215, 101, 220, 233, 94, 173, 184, 115, 95, 120, 239, 74, 185, 138, 36, 178, 204, 201, 36, 209, 229, 149, 187, 114, 130, 251, 113, 98, 117, 226, 50, 249, 139, 162, 211, 144, 240, 66, 43, 176, 17, 246, 100, 67, 233, 13, 238, 216, 136, 114, 38, 215, 76, 165, 228, 217, 8, 28, 108, 251, 99, 158, 162, 205, 125, 53, 7, 26, 248, 60, 71, 116, 146, 71, 37, 41, 233, 9, 188, 212, 115, 38, 133, 0, 175, 129, 186, 228, 231, 149, 12, 217, 232, 242, 46, 157, 37, 207, 243, 98, 22, 87, 251, 241, 224, 68, 168, 221, 39, 125, 132, 8, 58, 252, 131, 25, 55, 14, 49, 20, 208, 221, 17, 255, 211, 99, 149, 241, 3, 57, 134, 122, 171, 126, 217, 106, 131, 62, 114, 255, 22, 89, 197, 136, 120, 42, 74, 191, 204, 25, 217, 64, 198, 91, 207, 227, 46, 150, 113, 120, 242, 238, 159, 32, 192, 47, 229, 87, 252, 90, 144, 199, 12, 98, 105, 248, 236, 105, 239, 182, 183, 118, 24, 33, 188, 47, 254, 252, 83, 183, 204, 135, 76, 211, 4, 8, 212, 15, 209, 153, 40, 162, 167, 41, 99, 164, 251, 176, 16, 0, 218, 27, 117, 149, 7, 248, 232, 123, 92, 143, 8, 113, 86, 125, 149, 186, 226, 217, 2, 218, 182, 41, 246, 180, 100, 52, 227, 43, 235, 250, 253, 145, 248, 138, 79, 11, 1, 136, 186, 161, 58, 159, 131, 96, 150, 92, 231, 158, 202, 202, 95, 139, 103, 93, 228, 250, 120, 4, 212, 180, 63, 68, 6, 119, 72, 171, 233, 135, 167, 164, 81, 24, 173, 172, 157, 152, 17, 53, 171, 159, 81, 175, 21, 144, 48, 85, 21, 188, 247, 152, 142, 51, 123, 92, 7, 13, 231, 133, 248, 232, 7, 91, 45, 145, 49, 1, 222, 136, 179, 114, 62, 164, 229, 207, 241, 207, 221, 51, 215, 94, 116, 14, 50, 86, 52, 29, 242, 170, 59, 150, 210, 36, 165, 127, 65, 105, 135, 44, 40, 237, 120, 22, 148, 40, 215, 87, 90, 147, 114, 237, 14, 138, 37, 41, 234, 72, 24, 143, 57, 151, 186, 206, 144, 56, 80, 140, 194, 21, 35, 214, 170, 67, 33, 58, 189, 168, 19, 103, 231, 252, 207, 116, 170, 39, 205, 182, 124, 215, 73, 152, 124, 231, 69, 228, 37, 201, 39, 79, 178, 197, 181, 210, 196, 203, 9, 120, 85, 218, 178, 100, 189, 200, 218, 108, 75, 4, 14, 126, 252, 91, 232, 190, 152, 208, 25, 129, 131, 95, 250, 239, 213, 68, 206, 135, 234, 70, 9, 29, 192, 253, 91, 232, 190, 136, 208, 85, 196, 202, 193, 47, 253, 247, 106, 66, 231, 67, 245, 165, 133, 142, 207, 86, 141, 63, 254, 21, 180, 137, 247, 221, 241, 71, 20, 212, 160, 51, 96, 8, 141, 11, 57, 178, 179, 216, 88, 227, 248, 55, 222, 74, 137, 20, 190, 115, 225, 20, 77, 230, 147, 212, 120, 6, 158, 21, 28, 33, 5, 95, 225, 177, 124, 212, 21, 127, 105, 231, 125, 175, 176, 242, 181, 40, 73, 42, 0, 106, 132, 179, 114, 44, 241, 205, 146, 178, 140, 199, 28, 165, 120, 216, 229, 127, 28, 132, 4, 23, 3, 217, 80, 205, 212, 4, 116, 58, 27, 152, 183, 12, 70, 129, 40, 140, 22, 132, 106, 10, 250, 25, 109, 70, 157, 189, 168, 195, 254, 240, 226, 248, 184, 174, 42, 46, 94, 36, 25, 10, 146, 51, 30, 89, 113, 242, 195, 69, 57, 79, 24, 213, 67, 2, 236, 70, 199, 195, 97, 117, 82, 16, 191, 247, 46, 184, 56, 225, 117, 82, 220, 31, 94, 135, 136, 51, 235, 96, 167, 57, 88, 190, 249, 26, 144, 75, 9, 155, 180, 77, 243, 50, 25, 214, 80, 20, 14, 104, 67, 148, 71, 197, 179, 85, 29, 26, 255, 65, 201, 38, 63, 25, 244, 172, 7, 181, 37, 179, 187, 247, 137, 38, 85, 197, 185, 187, 238, 0, 129, 212, 89, 66, 123, 64, 182, 252, 22, 196, 64, 110, 105, 187, 48, 136, 171, 193, 73, 212, 77, 156, 238, 89, 178, 253, 26, 244, 144, 89, 39, 4, 101, 26, 92, 65, 51, 34, 189, 166, 25, 18, 45, 222, 218, 191, 144, 108, 241, 246, 92, 81, 184, 4, 235, 24, 242, 27, 32, 62, 156, 150, 27, 44, 63, 111, 121, 19, 254, 66, 2, 36, 26, 180, 102, 243, 196, 235, 249, 156, 134, 137, 199, 125, 78, 121, 246, 69, 27, 34, 106, 5, 177, 16, 146, 56, 128, 214, 222, 44, 73, 124, 153, 140, 227, 193, 121, 211, 48, 233, 17, 45, 171, 160, 95, 184, 66, 130, 101, 21, 174, 21, 45, 15, 133, 29, 228, 124, 123, 233, 8, 113, 139, 247, 63, 57, 21, 185, 139, 80, 53, 203, 80, 72, 126, 214, 49, 164, 121, 228, 96, 169, 182, 173, 89, 18, 66, 163, 218, 13, 18, 5, 50, 80, 45, 45, 11, 214, 16, 245, 153, 5, 192, 55, 40, 221, 48, 9, 224, 197, 33, 25, 170, 200, 226, 105, 183, 85, 196, 188, 246, 227, 174, 184, 173, 245, 115, 77, 232, 215, 33, 29, 126, 65, 64, 14, 55, 29, 25, 150, 239, 121, 254, 20, 254, 97, 68, 213, 104, 227, 131, 166, 222, 110, 145, 70, 244, 25, 148, 221, 214, 115, 78, 218, 202, 122, 46, 104, 17, 133, 9, 65, 117, 226, 174, 99, 60, 248, 236, 109, 120, 55, 103, 232, 144, 163, 3, 253, 218, 29, 39, 153, 84, 107, 156, 218, 53, 202, 139, 65, 162, 203, 36, 5, 30, 105, 38, 42, 247, 165, 147, 241, 225, 236, 43, 202, 55, 91, 94, 76, 5, 18, 222, 135, 169, 18, 214, 176, 61, 170, 202, 246, 243, 151, 214, 138, 230, 58, 6, 170, 235, 16, 31, 171, 252, 201, 225, 254, 193, 193, 47, 172, 203, 139, 253, 152, 9, 93, 187, 213, 184, 48, 25, 36, 65, 171, 35, 3, 108, 122, 245, 55, 21, 171, 191, 105, 244, 48, 82, 177, 49, 246, 203, 93, 2, 134, 149, 207, 242, 40, 181, 246, 21, 117, 226, 14, 28, 144, 63, 128, 192, 215, 0, 190, 117, 46, 58, 212, 226, 14, 124, 241, 66, 121, 125, 67, 149, 235, 86, 246, 162, 1, 98, 181, 36, 119, 147, 21, 245, 4, 153, 76, 86, 145, 200, 115, 19, 50, 201, 100, 105, 250, 54, 25, 63, 59, 155, 151, 50, 157, 223, 123, 87, 130, 7, 124, 123, 145, 165, 131, 124, 152, 136, 184, 231, 179, 179, 42, 201, 74, 70, 233, 97, 242, 251, 34, 201, 6, 201, 219, 103, 145, 56, 140, 219, 95, 120, 26, 103, 227, 69, 60, 78, 222, 197, 227, 6, 200, 225, 98, 62, 229, 123, 114, 126, 141, 139, 52, 206, 170, 182, 224, 135, 140, 87, 211, 164, 202, 179, 134, 2, 105, 249, 91, 194, 24, 157, 23, 179, 100, 184, 191, 40, 10, 70, 252, 249, 62, 107, 87, 67, 177, 129, 4, 125, 154, 142, 211, 170, 68, 192, 90, 36, 199, 73, 245, 75, 3, 139, 236, 196, 167, 149, 216, 140, 214, 102, 217, 167, 187, 90, 87, 89, 211, 164, 113, 114, 54, 255, 160, 143, 47, 255, 144, 229, 31, 74, 190, 91, 180, 236, 118, 182, 22, 221, 239, 247, 182, 142, 226, 173, 139, 157, 173, 239, 222, 255, 177, 219, 187, 127, 185, 177, 217, 217, 160, 234, 88, 36, 179, 252, 52, 145, 205, 215, 21, 150, 50, 26, 138, 7, 132, 144, 148, 243, 172, 251, 18, 182, 77, 245, 100, 76, 155, 105, 254, 217, 86, 199, 29, 16, 166, 104, 105, 151, 103, 250, 229, 101, 141, 246, 164, 250, 16, 87, 133, 116, 11, 176, 26, 227, 7, 197, 73, 230, 180, 192, 39, 192, 149, 174, 235, 202, 166, 201, 200, 201, 78, 242, 221, 190, 98, 234, 131, 221, 110, 57, 78, 144, 40, 96, 99, 232, 114, 56, 40, 130, 68, 243, 215, 60, 107, 161, 156, 173, 228, 83, 96, 148, 41, 90, 93, 83, 19, 223, 62, 192, 165, 36, 57, 75, 6, 88, 64, 154, 106, 238, 113, 158, 109, 108, 240, 92, 1, 110, 94, 144, 205, 108, 96, 103, 145, 204, 167, 49, 63, 232, 128, 193, 245, 80, 195, 143, 118, 222, 247, 32, 174, 107, 140, 97, 19, 25, 230, 32, 99, 59, 41, 94, 236, 111, 154, 29, 243, 165, 137, 71, 130, 164, 77, 209, 75, 215, 236, 109, 234, 207, 53, 212, 67, 6, 87, 213, 60, 162, 179, 76, 30, 94, 98, 171, 76, 252, 182, 70, 27, 238, 168, 101, 99, 9, 35, 172, 79, 94, 190, 249, 17, 178, 46, 58, 96, 85, 158, 108, 253, 243, 61, 90, 207, 122, 122, 240, 226, 224, 29, 127, 7, 230, 6, 189, 136, 167, 243, 147, 56, 91, 192, 38, 177, 14, 179, 72, 16, 172, 23, 120, 54, 163, 206, 159, 240, 75, 148, 100, 191, 54, 58, 120, 72, 31, 47, 166, 113, 33, 11, 49, 19, 179, 53, 205, 63, 30, 199, 217, 159, 131, 100, 186, 53, 142, 23, 211, 180, 60, 249, 51, 203, 183, 142, 243, 9, 252, 201, 206, 179, 63, 47, 78, 182, 198, 139, 252, 124, 1, 95, 78, 226, 201, 36, 134, 47, 179, 52, 147, 127, 182, 178, 152, 127, 61, 99, 131, 211, 24, 87, 149, 22, 180, 178, 36, 219, 122, 241, 195, 86, 158, 12, 255, 76, 183, 226, 89, 202, 254, 61, 206, 50, 246, 175, 204, 206, 96, 223, 146, 44, 31, 156, 48, 52, 236, 43, 171, 136, 253, 59, 153, 50, 169, 207, 225, 247, 116, 113, 198, 254, 157, 193, 79, 246, 55, 139, 79, 227, 143, 240, 101, 254, 9, 94, 86, 113, 206, 255, 61, 135, 127, 203, 197, 159, 229, 56, 219, 250, 225, 217, 214, 243, 183, 234, 219, 207, 47, 249, 183, 253, 31, 183, 158, 62, 195, 36, 142, 139, 56, 27, 142, 226, 234, 36, 41, 184, 172, 43, 70, 26, 210, 21, 51, 209, 111, 140, 96, 94, 164, 167, 108, 172, 93, 148, 137, 44, 125, 70, 6, 135, 62, 31, 28, 112, 129, 82, 141, 202, 168, 54, 221, 81, 127, 30, 61, 217, 250, 237, 31, 91, 255, 140, 183, 62, 157, 111, 93, 188, 199, 229, 180, 170, 163, 114, 6, 215, 38, 127, 182, 5, 15, 181, 88, 176, 103, 114, 112, 194, 120, 78, 133, 19, 129, 176, 144, 2, 119, 89, 129, 63, 45, 178, 8, 192, 237, 203, 13, 75, 156, 40, 77, 90, 4, 255, 216, 189, 164, 82, 8, 69, 49, 35, 6, 69, 58, 175, 188, 37, 239, 92, 90, 45, 7, 181, 241, 66, 222, 190, 84, 205, 198, 207, 54, 254, 216, 233, 237, 18, 28, 74, 239, 252, 132, 246, 12, 26, 85, 25, 116, 243, 247, 127, 218, 100, 89, 15, 128, 89, 118, 45, 85, 12, 148, 234, 250, 80, 199, 200, 6, 115, 204, 234, 153, 100, 31, 126, 230, 177, 124, 170, 207, 0, 236, 111, 136, 82, 41, 16, 228, 49, 18, 72, 142, 213, 195, 132, 119, 156, 196, 206, 255, 72, 70, 40, 170, 149, 164, 83, 12, 252, 17, 85, 19, 192, 251, 31, 29, 98, 79, 155, 205, 227, 18, 30, 22, 42, 199, 198, 180, 212, 118, 173, 152, 153, 126, 234, 184, 196, 141, 182, 218, 245, 162, 91, 25, 108, 183, 216, 23, 177, 218, 107, 214, 90, 187, 85, 168, 115, 188, 248, 193, 140, 108, 49, 39, 23, 73, 103, 167, 11, 80, 88, 50, 183, 232, 235, 32, 154, 191, 17, 184, 255, 251, 127, 251, 86, 185, 175, 237, 114, 27, 45, 100, 205, 55, 73, 106, 45, 112, 118, 225, 38, 169, 67, 51, 171, 246, 114, 135, 10, 45, 39, 121, 168, 224, 23, 145, 189, 85, 71, 44, 183, 1, 88, 204, 182, 186, 206, 8, 214, 44, 65, 155, 215, 45, 61, 100, 206, 188, 188, 252, 232, 226, 62, 9, 130, 133, 67, 40, 185, 40, 152, 115, 15, 251, 143, 210, 33, 114, 55, 173, 153, 225, 58, 62, 94, 203, 175, 102, 62, 150, 167, 139, 98, 164, 178, 165, 85, 82, 134, 172, 50, 159, 195, 8, 114, 235, 54, 255, 174, 103, 118, 107, 246, 225, 173, 105, 110, 11, 211, 174, 45, 116, 219, 203, 84, 37, 76, 95, 101, 14, 235, 13, 210, 4, 70, 170, 58, 21, 113, 202, 17, 91, 67, 36, 57, 212, 81, 46, 41, 186, 183, 162, 111, 190, 193, 210, 213, 136, 1, 85, 174, 113, 208, 237, 184, 113, 150, 179, 121, 38, 147, 229, 139, 228, 122, 133, 25, 73, 116, 99, 135, 65, 46, 226, 39, 21, 32, 212, 100, 7, 69, 82, 6, 252, 78, 226, 242, 245, 167, 76, 237, 27, 233, 113, 165, 97, 109, 121, 37, 246, 165, 148, 97, 145, 183, 0, 143, 4, 220, 123, 100, 65, 23, 199, 204, 193, 170, 19, 220, 146, 49, 188, 194, 98, 139, 111, 0, 76, 205, 4, 93, 198, 33, 120, 216, 85, 32, 213, 123, 96, 105, 220, 85, 188, 133, 136, 166, 0, 115, 66, 176, 226, 57, 185, 85, 18, 162, 177, 12, 53, 100, 73, 194, 109, 130, 18, 3, 68, 193, 207, 58, 214, 130, 152, 117, 174, 156, 31, 225, 29, 187, 255, 53, 81, 173, 34, 187, 2, 250, 104, 231, 253, 134, 215, 41, 142, 162, 54, 10, 43, 144, 152, 45, 203, 240, 185, 52, 55, 115, 165, 220, 26, 236, 64, 203, 93, 250, 119, 215, 65, 191, 179, 89, 108, 21, 49, 60, 228, 168, 140, 36, 74, 212, 65, 250, 220, 50, 71, 226, 157, 123, 254, 225, 50, 164, 200, 201, 81, 123, 58, 172, 2, 138, 136, 237, 121, 145, 140, 18, 54, 197, 30, 210, 56, 143, 232, 17, 45, 139, 117, 165, 83, 113, 219, 173, 146, 110, 16, 18, 215, 214, 56, 237, 18, 23, 71, 151, 39, 41, 4, 207, 100, 89, 207, 82, 77, 106, 31, 78, 115, 233, 233, 67, 163, 88, 90, 203, 144, 66, 208, 67, 31, 120, 238, 40, 228, 177, 78, 125, 194, 35, 168, 130, 157, 97, 189, 32, 201, 204, 30, 107, 145, 42, 197, 153, 12, 27, 182, 157, 32, 193, 73, 216, 62, 36, 46, 153, 110, 176, 28, 70, 246, 121, 91, 190, 150, 250, 110, 217, 19, 141, 91, 29, 15, 147, 122, 26, 187, 68, 61, 248, 248, 80, 42, 3, 24, 153, 29, 248, 88, 7, 235, 104, 75, 108, 62, 214, 136, 205, 124, 81, 158, 224, 144, 43, 250, 78, 18, 158, 66, 116, 228, 5, 137, 216, 162, 142, 147, 51, 238, 95, 68, 16, 169, 99, 134, 42, 143, 157, 55, 81, 121, 92, 104, 29, 140, 113, 5, 106, 160, 70, 119, 144, 39, 46, 190, 134, 52, 211, 16, 148, 93, 191, 129, 120, 168, 138, 110, 62, 2, 172, 112, 74, 85, 29, 141, 152, 173, 29, 234, 178, 233, 118, 226, 138, 156, 67, 236, 100, 117, 94, 98, 2, 4, 25, 204, 166, 239, 157, 35, 160, 48, 15, 236, 2, 214, 149, 121, 18, 144, 56, 72, 98, 68, 223, 207, 179, 42, 78, 179, 242, 231, 252, 42, 43, 66, 30, 239, 118, 193, 88, 197, 13, 33, 118, 104, 29, 199, 121, 21, 164, 143, 151, 117, 178, 87, 172, 127, 149, 137, 64, 240, 12, 29, 88, 210, 120, 154, 86, 131, 19, 181, 107, 148, 174, 46, 118, 120, 4, 186, 163, 150, 128, 243, 233, 240, 176, 58, 159, 98, 199, 85, 141, 53, 144, 158, 200, 75, 118, 230, 241, 214, 155, 159, 32, 23, 158, 125, 121, 82, 196, 199, 240, 75, 156, 205, 210, 185, 56, 217, 218, 255, 25, 94, 177, 47, 63, 198, 89, 9, 191, 204, 171, 31, 127, 50, 175, 42, 248, 101, 94, 29, 190, 192, 165, 216, 47, 243, 234, 221, 111, 184, 20, 251, 213, 251, 234, 242, 193, 87, 102, 95, 11, 115, 184, 135, 41, 108, 141, 80, 155, 118, 101, 3, 61, 123, 61, 113, 242, 185, 52, 76, 178, 108, 24, 204, 170, 107, 233, 42, 134, 117, 152, 205, 134, 33, 12, 117, 48, 102, 166, 133, 241, 252, 201, 105, 156, 242, 157, 208, 226, 177, 57, 19, 131, 79, 185, 87, 217, 44, 12, 98, 231, 47, 166, 54, 233, 90, 236, 244, 238, 164, 13, 44, 183, 90, 37, 253, 188, 37, 166, 84, 188, 71, 19, 237, 134, 128, 128, 151, 24, 108, 248, 52, 78, 238, 241, 89, 146, 47, 45, 148, 189, 225, 7, 151, 9, 77, 222, 188, 21, 63, 240, 162, 8, 45, 115, 107, 24, 43, 93, 185, 173, 167, 89, 163, 154, 61, 67, 192, 134, 99, 226, 53, 97, 53, 8, 142, 52, 220, 123, 108, 198, 91, 11, 68, 237, 214, 234, 37, 132, 131, 15, 219, 68, 42, 150, 255, 172, 113, 157, 148, 174, 143, 26, 194, 46, 3, 122, 251, 153, 244, 115, 105, 181, 132, 2, 195, 6, 37, 100, 132, 181, 180, 65, 40, 134, 134, 144, 1, 229, 63, 36, 101, 101, 193, 43, 52, 18, 183, 117, 67, 100, 62, 229, 231, 144, 171, 100, 56, 41, 236, 105, 82, 110, 199, 86, 181, 245, 103, 127, 213, 125, 194, 149, 108, 44, 133, 212, 168, 24, 14, 25, 45, 219, 228, 140, 111, 225, 20, 27, 248, 174, 181, 217, 245, 21, 125, 137, 166, 211, 221, 139, 215, 218, 248, 166, 170, 86, 109, 190, 125, 124, 197, 52, 96, 181, 156, 49, 70, 3, 134, 6, 165, 181, 24, 173, 43, 153, 190, 107, 203, 99, 161, 163, 192, 149, 134, 16, 199, 144, 233, 36, 44, 98, 170, 213, 35, 186, 86, 117, 16, 76, 234, 107, 147, 114, 87, 147, 18, 216, 34, 217, 174, 46, 161, 176, 245, 154, 74, 231, 232, 127, 248, 178, 150, 179, 136, 226, 199, 221, 85, 233, 136, 120, 211, 249, 128, 239, 107, 150, 123, 101, 53, 128, 49, 233, 98, 78, 203, 188, 31, 72, 253, 112, 18, 104, 7, 104, 152, 50, 144, 106, 130, 9, 113, 146, 219, 117, 171, 31, 13, 81, 250, 134, 62, 234, 33, 226, 40, 7, 226, 225, 240, 112, 158, 12, 210, 120, 250, 42, 45, 121, 106, 186, 113, 113, 202, 174, 109, 86, 48, 59, 180, 79, 164, 119, 200, 35, 15, 140, 209, 131, 60, 176, 159, 227, 25, 27, 253, 106, 156, 40, 251, 52, 40, 148, 15, 108, 85, 83, 151, 29, 76, 65, 177, 219, 38, 202, 58, 81, 107, 187, 121, 71, 117, 126, 30, 69, 246, 254, 61, 245, 22, 195, 168, 4, 120, 132, 143, 128, 52, 97, 60, 109, 211, 194, 246, 109, 229, 143, 40, 238, 16, 166, 171, 49, 52, 133, 150, 96, 120, 9, 30, 246, 155, 210, 254, 15, 158, 61, 224, 136, 176, 29, 56, 228, 171, 9, 9, 63, 87, 204, 126, 5, 72, 225, 66, 132, 124, 20, 97, 220, 29, 17, 124, 239, 216, 75, 108, 32, 113, 114, 113, 164, 68, 171, 35, 228, 24, 98, 69, 54, 242, 187, 106, 47, 92, 178, 142, 211, 11, 159, 231, 203, 1, 205, 93, 58, 63, 198, 165, 62, 33, 236, 53, 156, 38, 70, 229, 76, 223, 127, 227, 57, 143, 175, 230, 150, 71, 62, 173, 83, 44, 81, 112, 136, 35, 176, 174, 162, 247, 127, 200, 27, 25, 155, 143, 228, 187, 125, 175, 111, 73, 22, 144, 33, 34, 236, 218, 188, 57, 247, 59, 106, 122, 26, 166, 153, 60, 128, 239, 39, 225, 45, 3, 211, 52, 192, 237, 152, 100, 57, 3, 62, 130, 136, 208, 68, 210, 133, 247, 206, 1, 69, 28, 80, 135, 149, 64, 216, 68, 93, 78, 100, 75, 125, 106, 35, 180, 166, 188, 111, 233, 197, 127, 28, 51, 148, 33, 90, 229, 241, 247, 126, 76, 166, 76, 94, 28, 19, 100, 194, 86, 48, 142, 165, 195, 164, 160, 243, 148, 117, 175, 129, 122, 63, 215, 230, 207, 124, 145, 58, 248, 210, 184, 235, 24, 113, 225, 241, 242, 88, 83, 102, 251, 75, 193, 67, 228, 72, 236, 4, 213, 17, 56, 139, 211, 59, 246, 152, 56, 66, 96, 227, 183, 51, 185, 15, 182, 128, 111, 132, 81, 240, 250, 130, 169, 71, 180, 61, 158, 165, 94, 141, 212, 52, 231, 145, 85, 202, 213, 158, 48, 125, 6, 93, 115, 176, 150, 84, 130, 130, 50, 144, 115, 179, 101, 175, 23, 215, 87, 123, 73, 172, 116, 125, 138, 135, 206, 90, 7, 83, 161, 113, 217, 75, 56, 42, 215, 195, 103, 64, 220, 91, 136, 236, 82, 143, 31, 69, 187, 164, 71, 142, 224, 233, 86, 180, 251, 94, 88, 243, 45, 107, 179, 18, 127, 203, 202, 248, 99, 100, 45, 86, 169, 81, 59, 72, 102, 201, 101, 131, 73, 10, 26, 35, 203, 199, 95, 197, 154, 113, 21, 104, 178, 137, 246, 28, 248, 26, 233, 225, 174, 181, 181, 217, 50, 207, 39, 139, 249, 43, 216, 229, 235, 45, 10, 7, 0, 178, 154, 146, 161, 199, 25, 70, 73, 21, 198, 203, 176, 11, 56, 187, 93, 172, 58, 236, 232, 16, 120, 237, 38, 10, 250, 210, 181, 43, 169, 112, 76, 64, 184, 44, 84, 225, 131, 159, 244, 116, 218, 166, 142, 120, 199, 110, 197, 53, 225, 89, 146, 19, 3, 31, 135, 152, 150, 210, 230, 214, 138, 149, 208, 93, 4, 215, 27, 10, 221, 211, 45, 61, 38, 54, 124, 96, 179, 60, 66, 92, 179, 198, 219, 47, 10, 235, 212, 32, 243, 208, 235, 241, 240, 214, 187, 119, 8, 99, 214, 203, 156, 92, 104, 175, 180, 135, 200, 230, 182, 83, 133, 200, 191, 64, 213, 29, 237, 120, 46, 37, 215, 32, 106, 43, 16, 45, 179, 141, 78, 103, 183, 152, 239, 173, 168, 30, 210, 169, 227, 128, 98, 15, 220, 249, 99, 247, 182, 119, 84, 15, 236, 245, 36, 214, 235, 121, 90, 45, 111, 45, 36, 202, 165, 141, 13, 169, 253, 109, 82, 230, 211, 211, 176, 34, 217, 165, 245, 113, 105, 240, 106, 154, 156, 198, 89, 165, 197, 0, 78, 140, 87, 2, 0, 71, 29, 99, 179, 54, 19, 244, 193, 84, 90, 148, 151, 92, 147, 116, 27, 131, 85, 240, 35, 198, 20, 52, 140, 106, 83, 222, 64, 107, 104, 251, 126, 249, 118, 147, 242, 123, 43, 240, 221, 16, 57, 202, 153, 246, 27, 107, 182, 141, 61, 53, 91, 214, 139, 109, 75, 8, 93, 233, 198, 201, 31, 110, 58, 136, 120, 242, 18, 89, 124, 146, 231, 16, 54, 70, 142, 120, 23, 219, 33, 1, 183, 107, 107, 78, 9, 212, 37, 108, 23, 199, 79, 56, 86, 174, 67, 146, 57, 178, 132, 41, 86, 23, 97, 48, 217, 210, 204, 71, 93, 129, 226, 2, 139, 249, 60, 47, 88, 215, 61, 67, 29, 209, 217, 90, 224, 77, 96, 254, 113, 214, 35, 210, 132, 78, 58, 94, 58, 19, 249, 228, 60, 132, 133, 12, 138, 150, 12, 129, 178, 104, 127, 31, 126, 116, 209, 203, 141, 7, 118, 21, 164, 144, 133, 230, 136, 189, 183, 42, 82, 247, 89, 144, 146, 196, 230, 250, 89, 246, 100, 56, 76, 43, 201, 186, 142, 7, 229, 155, 188, 164, 227, 153, 35, 68, 65, 201, 68, 141, 121, 227, 247, 170, 173, 185, 183, 171, 31, 172, 168, 103, 14, 47, 17, 202, 84, 106, 207, 20, 23, 1, 109, 70, 125, 214, 139, 1, 113, 165, 9, 201, 250, 99, 67, 31, 25, 92, 40, 117, 108, 215, 157, 100, 248, 39, 219, 66, 222, 165, 153, 81, 225, 155, 186, 58, 252, 115, 93, 213, 29, 45, 24, 73, 132, 160, 103, 85, 30, 136, 19, 2, 207, 116, 21, 97, 214, 18, 106, 176, 91, 232, 185, 209, 0, 127, 234, 37, 143, 103, 68, 129, 94, 109, 202, 239, 158, 251, 23, 212, 199, 93, 192, 241, 94, 166, 125, 117, 182, 117, 96, 18, 18, 58, 76, 195, 199, 174, 70, 102, 9, 140, 46, 194, 208, 141, 216, 116, 106, 42, 199, 84, 37, 65, 242, 167, 101, 11, 128, 46, 2, 72, 212, 211, 150, 248, 37, 57, 130, 17, 111, 56, 173, 118, 3, 3, 14, 33, 167, 162, 164, 219, 83, 167, 180, 81, 1, 97, 106, 109, 190, 66, 108, 20, 99, 11, 103, 89, 244, 200, 22, 50, 207, 120, 178, 249, 168, 166, 206, 224, 92, 67, 36, 164, 219, 197, 176, 229, 176, 70, 148, 121, 145, 224, 49, 172, 197, 156, 29, 13, 8, 124, 214, 78, 135, 124, 107, 52, 97, 83, 250, 234, 42, 248, 131, 200, 169, 135, 68, 90, 177, 233, 101, 39, 37, 133, 186, 206, 212, 203, 118, 70, 252, 176, 111, 45, 124, 196, 67, 85, 157, 202, 158, 88, 110, 70, 222, 114, 10, 14, 44, 74, 148, 223, 98, 47, 84, 180, 94, 10, 8, 79, 170, 237, 91, 74, 174, 54, 177, 246, 4, 13, 214, 52, 185, 110, 156, 46, 183, 49, 51, 50, 98, 206, 89, 234, 153, 83, 250, 131, 229, 1, 92, 38, 159, 184, 20, 247, 34, 251, 166, 95, 87, 144, 17, 50, 15, 91, 5, 15, 61, 199, 120, 121, 4, 230, 8, 107, 119, 194, 101, 38, 12, 234, 72, 237, 160, 83, 134, 207, 220, 86, 7, 83, 147, 163, 177, 225, 211, 106, 30, 167, 170, 84, 192, 181, 126, 160, 193, 104, 142, 143, 22, 143, 60, 254, 29, 198, 168, 38, 134, 16, 180, 34, 207, 143, 25, 115, 162, 81, 90, 117, 218, 44, 31, 237, 246, 34, 183, 58, 124, 125, 18, 209, 109, 50, 51, 53, 99, 231, 159, 127, 70, 100, 202, 90, 67, 1, 155, 185, 94, 65, 228, 92, 116, 123, 87, 18, 60, 192, 224, 61, 59, 139, 55, 56, 180, 68, 238, 187, 206, 72, 169, 87, 170, 52, 141, 77, 120, 234, 19, 124, 118, 206, 118, 250, 209, 159, 236, 79, 127, 135, 255, 217, 221, 33, 17, 147, 186, 74, 58, 130, 176, 78, 143, 18, 26, 174, 143, 213, 117, 223, 91, 151, 90, 103, 227, 104, 136, 34, 194, 229, 148, 92, 196, 205, 129, 243, 115, 157, 7, 10, 75, 169, 61, 225, 37, 148, 60, 4, 60, 61, 142, 7, 19, 172, 127, 150, 219, 114, 164, 202, 162, 251, 100, 78, 93, 47, 204, 94, 219, 129, 122, 164, 72, 229, 249, 52, 137, 51, 75, 162, 84, 45, 239, 242, 31, 196, 123, 129, 20, 79, 199, 213, 102, 42, 131, 202, 89, 6, 167, 152, 164, 18, 250, 16, 213, 246, 167, 249, 80, 43, 32, 184, 228, 120, 155, 141, 30, 166, 226, 174, 244, 12, 125, 75, 38, 174, 58, 223, 198, 189, 100, 55, 65, 118, 118, 232, 238, 98, 213, 141, 182, 24, 136, 27, 31, 194, 194, 48, 75, 179, 116, 182, 152, 129, 33, 57, 19, 95, 108, 129, 88, 237, 115, 149, 133, 205, 207, 177, 40, 26, 225, 117, 209, 171, 203, 187, 145, 64, 193, 112, 71, 2, 157, 219, 55, 164, 100, 48, 235, 43, 202, 62, 84, 93, 97, 30, 61, 86, 157, 210, 32, 56, 119, 191, 11, 138, 139, 190, 54, 123, 196, 6, 28, 74, 85, 80, 124, 240, 73, 126, 229, 171, 120, 46, 221, 194, 223, 146, 120, 194, 126, 145, 107, 204, 24, 197, 85, 202, 83, 20, 32, 87, 13, 221, 8, 177, 182, 5, 122, 20, 244, 82, 36, 69, 53, 71, 10, 114, 86, 43, 192, 109, 97, 54, 96, 155, 73, 1, 100, 118, 236, 247, 211, 248, 226, 92, 134, 162, 196, 49, 123, 244, 117, 138, 210, 62, 75, 2, 227, 168, 191, 100, 206, 7, 49, 140, 32, 230, 245, 34, 126, 55, 178, 126, 68, 77, 183, 126, 76, 212, 182, 132, 147, 4, 4, 101, 58, 23, 176, 84, 118, 91, 209, 44, 110, 231, 184, 174, 207, 231, 80, 193, 85, 235, 168, 233, 69, 245, 53, 32, 8, 240, 199, 230, 180, 155, 219, 139, 121, 78, 68, 224, 122, 89, 190, 70, 158, 95, 67, 239, 53, 233, 6, 249, 221, 168, 103, 168, 11, 102, 241, 249, 113, 82, 215, 9, 215, 192, 245, 207, 52, 192, 52, 147, 32, 146, 31, 53, 115, 92, 142, 153, 1, 200, 232, 189, 66, 161, 114, 11, 181, 85, 186, 70, 66, 109, 123, 181, 109, 245, 55, 234, 208, 180, 60, 208, 163, 194, 208, 63, 44, 132, 230, 188, 202, 138, 158, 196, 165, 199, 138, 58, 103, 7, 25, 228, 74, 126, 74, 113, 19, 253, 96, 26, 151, 37, 164, 219, 50, 183, 134, 31, 220, 12, 223, 175, 45, 105, 204, 63, 68, 5, 27, 55, 246, 14, 17, 87, 77, 115, 93, 130, 82, 124, 170, 146, 125, 105, 22, 243, 61, 44, 171, 9, 46, 143, 230, 103, 240, 0, 241, 219, 119, 239, 5, 216, 142, 30, 183, 25, 251, 198, 9, 237, 204, 107, 178, 185, 55, 184, 207, 150, 182, 12, 95, 7, 77, 67, 80, 93, 237, 198, 91, 143, 229, 112, 73, 37, 193, 84, 104, 102, 99, 251, 114, 107, 20, 154, 143, 217, 3, 67, 33, 22, 233, 247, 173, 77, 84, 165, 101, 208, 60, 83, 61, 122, 231, 89, 115, 21, 79, 189, 123, 118, 124, 21, 53, 97, 250, 217, 179, 245, 9, 225, 17, 156, 88, 210, 119, 240, 202, 190, 182, 158, 226, 120, 88, 193, 162, 159, 146, 115, 103, 203, 244, 36, 219, 139, 254, 80, 211, 146, 189, 168, 147, 45, 102, 73, 145, 14, 58, 194, 43, 220, 51, 83, 236, 75, 17, 71, 152, 140, 40, 252, 32, 46, 147, 231, 105, 81, 86, 166, 68, 169, 46, 100, 19, 115, 213, 189, 232, 168, 179, 128, 125, 26, 112, 69, 219, 20, 142, 250, 129, 47, 60, 65, 172, 243, 254, 146, 108, 53, 174, 237, 82, 245, 116, 125, 62, 106, 64, 92, 219, 78, 3, 56, 240, 246, 162, 20, 39, 85, 218, 36, 138, 23, 166, 10, 245, 14, 172, 65, 112, 223, 159, 1, 215, 48, 229, 97, 206, 94, 101, 227, 96, 21, 50, 124, 193, 160, 240, 233, 145, 120, 53, 220, 193, 229, 231, 221, 247, 154, 198, 109, 192, 102, 22, 178, 252, 224, 123, 8, 60, 137, 11, 181, 175, 194, 152, 16, 177, 142, 235, 89, 245, 135, 36, 116, 85, 212, 11, 128, 202, 195, 174, 84, 146, 141, 67, 76, 169, 70, 227, 198, 245, 212, 171, 218, 13, 117, 14, 71, 157, 40, 242, 50, 133, 217, 44, 191, 14, 222, 159, 26, 84, 87, 129, 73, 26, 242, 73, 158, 89, 21, 113, 82, 109, 38, 201, 185, 19, 242, 233, 169, 75, 219, 173, 116, 143, 222, 26, 210, 60, 218, 166, 120, 200, 68, 3, 33, 178, 131, 188, 99, 187, 78, 138, 228, 136, 191, 6, 214, 50, 44, 214, 58, 165, 94, 73, 223, 30, 228, 28, 17, 168, 38, 92, 182, 40, 115, 156, 225, 206, 69, 120, 135, 2, 215, 190, 245, 110, 117, 131, 253, 35, 159, 121, 180, 22, 137, 45, 210, 100, 209, 109, 245, 40, 64, 159, 7, 137, 136, 214, 139, 210, 77, 81, 76, 140, 235, 212, 108, 78, 177, 150, 196, 209, 49, 85, 88, 56, 76, 164, 201, 93, 183, 245, 100, 122, 150, 62, 235, 82, 196, 159, 14, 161, 31, 171, 244, 52, 85, 141, 228, 75, 181, 225, 236, 87, 145, 50, 111, 89, 27, 231, 192, 41, 232, 93, 121, 22, 105, 167, 161, 151, 248, 230, 2, 156, 217, 84, 160, 68, 39, 155, 239, 24, 212, 205, 30, 50, 239, 44, 247, 74, 222, 138, 142, 10, 50, 131, 102, 181, 219, 176, 235, 210, 163, 137, 8, 28, 6, 15, 159, 178, 166, 144, 123, 157, 188, 1, 195, 181, 136, 229, 10, 188, 195, 113, 7, 200, 135, 233, 24, 86, 122, 245, 37, 174, 86, 98, 124, 200, 13, 192, 110, 176, 59, 188, 242, 185, 141, 59, 161, 177, 189, 216, 186, 153, 145, 241, 216, 8, 166, 235, 153, 124, 132, 7, 238, 230, 73, 191, 59, 85, 145, 33, 24, 133, 220, 207, 66, 167, 31, 234, 60, 80, 215, 169, 190, 14, 215, 14, 221, 202, 163, 166, 197, 138, 20, 173, 132, 106, 153, 216, 93, 14, 93, 141, 231, 156, 111, 129, 121, 184, 170, 51, 124, 27, 212, 237, 187, 223, 110, 184, 125, 39, 162, 60, 158, 120, 175, 70, 72, 103, 46, 88, 101, 154, 124, 53, 146, 75, 38, 199, 116, 123, 15, 28, 127, 74, 182, 97, 138, 178, 141, 206, 129, 39, 33, 193, 93, 89, 14, 236, 223, 52, 235, 202, 127, 200, 27, 20, 201, 252, 161, 113, 217, 153, 103, 190, 71, 143, 124, 11, 114, 29, 238, 22, 130, 147, 173, 61, 241, 35, 225, 31, 194, 35, 238, 170, 117, 224, 254, 9, 254, 40, 212, 86, 229, 214, 46, 76, 117, 249, 220, 159, 128, 234, 243, 131, 196, 154, 135, 41, 107, 214, 179, 125, 4, 147, 213, 114, 139, 112, 185, 158, 221, 67, 235, 199, 239, 241, 15, 73, 4, 67, 70, 23, 221, 185, 49, 176, 210, 168, 229, 228, 70, 101, 132, 249, 72, 49, 243, 31, 61, 44, 147, 107, 202, 76, 87, 154, 174, 38, 104, 3, 105, 29, 86, 213, 228, 231, 247, 209, 45, 24, 213, 111, 49, 199, 229, 22, 159, 23, 221, 50, 109, 154, 100, 22, 52, 154, 34, 168, 169, 87, 93, 123, 240, 252, 12, 179, 53, 56, 35, 115, 155, 200, 201, 24, 241, 40, 6, 174, 208, 16, 82, 6, 234, 70, 195, 34, 174, 61, 96, 126, 142, 58, 199, 12, 63, 0, 198, 131, 65, 146, 113, 130, 7, 242, 137, 242, 22, 60, 212, 53, 184, 45, 102, 60, 230, 38, 103, 30, 32, 213, 25, 121, 131, 2, 160, 118, 54, 121, 235, 246, 141, 242, 233, 92, 219, 126, 223, 226, 11, 30, 56, 157, 105, 174, 125, 249, 218, 244, 131, 122, 253, 161, 180, 82, 27, 94, 143, 244, 150, 113, 114, 140, 128, 54, 36, 113, 49, 102, 98, 148, 85, 232, 8, 192, 62, 19, 61, 253, 248, 168, 255, 62, 218, 179, 253, 9, 79, 70, 148, 19, 207, 186, 150, 179, 114, 106, 206, 198, 185, 186, 101, 151, 35, 234, 149, 178, 138, 236, 224, 138, 75, 168, 142, 177, 208, 217, 244, 158, 46, 114, 72, 158, 247, 164, 148, 208, 169, 52, 130, 182, 222, 8, 248, 15, 54, 205, 123, 124, 62, 36, 94, 186, 239, 148, 48, 117, 237, 243, 98, 76, 208, 0, 232, 134, 155, 255, 182, 29, 212, 116, 30, 167, 88, 74, 186, 148, 28, 115, 130, 10, 24, 212, 41, 145, 98, 187, 10, 188, 13, 171, 254, 236, 12, 218, 163, 168, 238, 174, 159, 120, 61, 25, 208, 219, 53, 123, 82, 22, 60, 147, 86, 136, 89, 177, 233, 41, 211, 206, 73, 214, 121, 79, 98, 84, 254, 206, 179, 14, 134, 52, 130, 33, 149, 143, 183, 90, 147, 180, 175, 95, 209, 28, 196, 64, 242, 199, 34, 147, 135, 224, 26, 148, 189, 8, 57, 57, 234, 158, 104, 205, 137, 65, 190, 135, 97, 205, 52, 61, 131, 134, 9, 67, 175, 242, 181, 223, 11, 102, 16, 75, 19, 18, 57, 171, 149, 222, 122, 143, 128, 176, 247, 13, 117, 154, 215, 104, 140, 216, 51, 118, 190, 134, 166, 253, 124, 54, 143, 139, 228, 93, 254, 67, 154, 13, 187, 103, 189, 136, 28, 34, 243, 119, 156, 172, 115, 134, 76, 197, 63, 240, 139, 115, 199, 179, 6, 145, 228, 120, 5, 68, 41, 239, 39, 253, 123, 47, 250, 71, 157, 17, 30, 136, 66, 16, 198, 239, 214, 204, 154, 220, 25, 130, 188, 229, 83, 150, 239, 120, 102, 37, 114, 162, 39, 201, 10, 79, 185, 161, 186, 231, 40, 138, 65, 248, 243, 128, 128, 29, 123, 239, 105, 84, 63, 62, 28, 179, 2, 189, 232, 185, 190, 247, 83, 43, 123, 128, 34, 134, 15, 199, 17, 156, 165, 1, 12, 93, 195, 67, 57, 139, 26, 138, 49, 185, 92, 137, 143, 22, 142, 14, 25, 35, 228, 206, 169, 63, 44, 99, 180, 135, 215, 62, 68, 230, 182, 134, 224, 222, 47, 6, 224, 15, 2, 82, 107, 160, 208, 99, 3, 235, 248, 4, 184, 132, 243, 82, 73, 190, 33, 223, 31, 64, 173, 25, 116, 107, 66, 170, 190, 172, 198, 218, 184, 159, 239, 28, 160, 101, 246, 115, 161, 168, 153, 21, 248, 251, 30, 71, 248, 162, 189, 96, 20, 206, 19, 101, 243, 37, 65, 138, 110, 198, 65, 79, 205, 100, 19, 11, 171, 223, 124, 42, 103, 8, 53, 103, 211, 105, 41, 154, 162, 241, 25, 23, 249, 107, 140, 206, 120, 149, 234, 38, 143, 208, 217, 194, 26, 155, 27, 87, 217, 240, 27, 188, 25, 247, 234, 159, 21, 215, 146, 2, 94, 172, 143, 86, 39, 252, 96, 207, 204, 189, 133, 200, 44, 28, 191, 21, 211, 202, 26, 97, 15, 44, 38, 97, 28, 219, 230, 77, 235, 37, 27, 82, 222, 117, 184, 241, 235, 198, 165, 155, 70, 22, 45, 141, 160, 97, 9, 135, 16, 255, 153, 214, 115, 40, 144, 232, 51, 166, 106, 135, 231, 172, 157, 51, 14, 157, 161, 32, 77, 80, 122, 74, 56, 45, 205, 135, 145, 191, 64, 97, 107, 29, 225, 239, 168, 67, 248, 200, 50, 13, 45, 172, 64, 66, 181, 170, 247, 174, 55, 65, 203, 63, 77, 203, 249, 52, 110, 68, 35, 193, 176, 25, 167, 248, 100, 170, 43, 72, 243, 56, 41, 196, 109, 199, 33, 164, 62, 88, 31, 131, 36, 220, 243, 34, 230, 18, 220, 10, 41, 5, 246, 98, 21, 25, 184, 45, 177, 250, 128, 77, 127, 117, 100, 173, 135, 204, 157, 72, 71, 108, 246, 155, 85, 2, 164, 195, 42, 245, 98, 252, 44, 7, 93, 133, 58, 61, 68, 109, 3, 79, 29, 248, 32, 126, 193, 173, 246, 248, 3, 240, 97, 49, 91, 148, 201, 139, 34, 95, 204, 205, 186, 188, 131, 20, 129, 92, 203, 42, 142, 127, 144, 91, 199, 74, 14, 198, 252, 57, 86, 115, 140, 168, 220, 148, 21, 29, 63, 111, 191, 216, 170, 14, 38, 135, 28, 211, 188, 190, 213, 29, 218, 15, 117, 171, 60, 184, 254, 181, 173, 244, 16, 164, 116, 181, 199, 86, 172, 235, 94, 241, 105, 244, 41, 190, 244, 170, 79, 221, 50, 140, 207, 159, 185, 153, 75, 49, 193, 53, 3, 240, 70, 172, 122, 135, 108, 138, 49, 139, 167, 240, 148, 41, 151, 94, 27, 80, 222, 9, 208, 160, 64, 234, 120, 97, 57, 58, 234, 204, 97, 239, 170, 137, 194, 141, 9, 105, 88, 5, 26, 184, 155, 185, 190, 14, 31, 128, 108, 171, 14, 217, 118, 115, 191, 23, 13, 80, 143, 15, 236, 241, 190, 214, 63, 227, 164, 4, 228, 207, 167, 169, 247, 238, 226, 235, 34, 162, 154, 179, 149, 131, 156, 69, 94, 224, 0, 225, 210, 163, 238, 190, 118, 223, 224, 129, 198, 135, 46, 176, 31, 54, 116, 132, 116, 252, 44, 193, 128, 253, 220, 252, 209, 249, 236, 56, 231, 242, 145, 177, 97, 74, 44, 110, 138, 71, 27, 53, 76, 107, 215, 38, 227, 153, 14, 208, 154, 200, 44, 75, 37, 201, 254, 125, 112, 29, 159, 115, 201, 8, 236, 247, 162, 221, 190, 185, 224, 174, 181, 95, 10, 42, 196, 170, 196, 4, 140, 134, 242, 100, 45, 136, 173, 184, 18, 241, 189, 230, 255, 30, 62, 210, 7, 202, 181, 33, 156, 186, 154, 29, 126, 104, 194, 46, 251, 31, 213, 219, 162, 13, 142, 119, 11, 197, 17, 49, 103, 26, 89, 155, 126, 66, 224, 114, 20, 224, 59, 208, 152, 251, 214, 5, 188, 61, 213, 226, 13, 99, 90, 49, 70, 101, 59, 150, 64, 184, 179, 225, 177, 210, 141, 165, 110, 111, 208, 38, 214, 243, 219, 231, 218, 119, 4, 163, 37, 203, 207, 218, 177, 60, 48, 161, 128, 226, 184, 255, 203, 97, 100, 246, 169, 215, 187, 214, 162, 1, 180, 64, 173, 175, 204, 243, 219, 160, 134, 175, 157, 157, 224, 103, 246, 83, 108, 180, 36, 85, 141, 82, 233, 78, 112, 28, 149, 18, 61, 212, 132, 46, 208, 10, 206, 247, 114, 40, 48, 238, 246, 155, 236, 94, 205, 68, 6, 208, 52, 149, 14, 79, 83, 160, 1, 182, 141, 28, 7, 179, 61, 244, 68, 35, 184, 104, 45, 143, 7, 13, 146, 66, 231, 51, 227, 250, 5, 107, 107, 126, 224, 157, 94, 234, 213, 81, 98, 249, 117, 252, 244, 135, 31, 159, 238, 69, 183, 69, 172, 228, 135, 131, 231, 204, 66, 201, 239, 255, 120, 171, 191, 239, 191, 100, 207, 239, 168, 239, 111, 244, 243, 167, 255, 109, 224, 95, 252, 108, 190, 31, 252, 127, 6, 231, 193, 225, 79, 250, 249, 127, 191, 54, 207, 255, 251, 205, 63, 244, 243, 159, 94, 153, 178, 63, 189, 253, 205, 124, 255, 205, 192, 191, 252, 135, 249, 254, 250, 213, 91, 253, 253, 205, 63, 94, 104, 248, 183, 191, 25, 60, 239, 126, 54, 240, 191, 188, 248, 187, 126, 254, 203, 63, 14, 244, 247, 95, 1, 70, 125, 255, 229, 87, 253, 253, 239, 79, 12, 158, 191, 191, 70, 223, 223, 192, 119, 18, 231, 132, 165, 16, 194, 216, 118, 23, 69, 12, 172, 50, 109, 174, 135, 112, 202, 44, 113, 41, 196, 255, 28, 193, 165, 16, 127, 220, 190, 252, 15, 251, 98, 8, 219, 33, 176, 174, 131, 88, 237, 115, 77, 179, 83, 228, 225, 181, 188, 15, 139, 242, 204, 252, 118, 111, 201, 163, 144, 71, 234, 231, 123, 50, 69, 220, 117, 23, 207, 72, 132, 254, 230, 100, 130, 92, 219, 21, 66, 13, 87, 6, 221, 156, 140, 16, 55, 66, 163, 67, 181, 246, 229, 145, 232, 220, 116, 11, 82, 173, 195, 88, 177, 94, 154, 43, 32, 41, 62, 210, 60, 244, 227, 50, 60, 238, 196, 69, 124, 204, 211, 171, 216, 223, 228, 140, 207, 161, 142, 25, 87, 196, 124, 78, 12, 30, 195, 228, 52, 70, 9, 90, 157, 17, 155, 87, 127, 74, 133, 147, 61, 94, 124, 44, 196, 223, 98, 1, 127, 79, 98, 230, 144, 38, 60, 83, 110, 114, 50, 43, 112, 177, 73, 54, 140, 121, 110, 89, 156, 231, 226, 111, 197, 19, 170, 166, 233, 140, 83, 48, 155, 158, 207, 48, 252, 44, 23, 213, 207, 206, 103, 188, 138, 188, 56, 231, 229, 171, 120, 54, 149, 85, 84, 201, 116, 129, 139, 84, 39, 49, 167, 188, 74, 143, 101, 186, 192, 123, 194, 127, 255, 170, 92, 83, 2, 67, 182, 216, 171, 235, 57, 49, 34, 7, 235, 17, 255, 202, 204, 4, 114, 116, 27, 244, 245, 89, 20, 56, 197, 1, 103, 33, 8, 20, 18, 72, 44, 110, 159, 121, 18, 16, 136, 254, 143, 196, 159, 134, 28, 4, 127, 76, 75, 174, 159, 143, 228, 78, 184, 96, 26, 130, 138, 84, 54, 101, 33, 132, 216, 97, 37, 34, 140, 214, 145, 136, 160, 163, 167, 199, 163, 230, 60, 4, 1, 220, 192, 201, 37, 82, 17, 106, 217, 185, 238, 116, 4, 203, 16, 96, 208, 44, 164, 238, 60, 218, 65, 146, 19, 224, 129, 121, 239, 155, 101, 98, 112, 223, 123, 167, 52, 157, 108, 120, 138, 83, 0, 84, 222, 55, 89, 33, 229, 125, 0, 56, 65, 67, 59, 172, 52, 77, 67, 63, 86, 186, 170, 24, 47, 172, 180, 181, 154, 111, 172, 39, 10, 249, 184, 207, 116, 244, 1, 153, 172, 224, 132, 4, 193, 132, 102, 25, 202, 94, 193, 31, 239, 165, 76, 14, 173, 117, 249, 24, 115, 61, 61, 195, 37, 156, 125, 87, 109, 189, 23, 228, 234, 207, 173, 139, 33, 106, 19, 47, 72, 198, 69, 67, 170, 133, 189, 98, 223, 176, 195, 22, 189, 91, 247, 226, 213, 21, 214, 237, 41, 97, 98, 19, 81, 237, 221, 126, 129, 21, 117, 138, 103, 149, 53, 117, 11, 131, 235, 180, 80, 128, 198, 117, 117, 151, 229, 75, 175, 172, 123, 80, 136, 134, 189, 174, 95, 97, 183, 154, 242, 69, 214, 216, 225, 57, 243, 96, 10, 14, 54, 136, 125, 32, 77, 203, 240, 13, 123, 214, 40, 50, 184, 90, 240, 159, 121, 166, 118, 17, 123, 88, 167, 32, 76, 5, 98, 196, 126, 173, 19, 63, 60, 133, 52, 136, 41, 53, 143, 43, 168, 152, 7, 121, 225, 192, 189, 131, 253, 95, 222, 136, 71, 104, 123, 92, 207, 32, 247, 242, 208, 32, 145, 223, 174, 101, 125, 51, 100, 18, 214, 177, 194, 105, 29, 0, 240, 153, 214, 56, 111, 218, 42, 103, 136, 195, 159, 103, 157, 83, 106, 9, 167, 0, 146, 68, 153, 116, 103, 98, 99, 137, 9, 19, 125, 74, 146, 201, 48, 62, 231, 185, 94, 113, 81, 228, 159, 120, 176, 255, 68, 110, 101, 154, 194, 172, 65, 166, 18, 39, 69, 220, 2, 234, 60, 137, 11, 0, 219, 221, 26, 194, 64, 220, 65, 251, 125, 36, 4, 155, 137, 84, 39, 1, 16, 190, 188, 80, 139, 95, 210, 26, 70, 127, 146, 47, 154, 8, 72, 179, 69, 149, 212, 195, 148, 201, 32, 207, 134, 245, 48, 202, 98, 128, 76, 3, 164, 69, 175, 186, 59, 222, 233, 129, 22, 23, 77, 6, 122, 13, 31, 223, 102, 150, 142, 169, 144, 89, 55, 237, 174, 127, 253, 218, 104, 89, 221, 26, 54, 165, 98, 109, 171, 216, 22, 90, 186, 142, 237, 26, 232, 235, 94, 201, 110, 49, 138, 7, 215, 178, 241, 74, 180, 194, 163, 102, 69, 38, 244, 28, 103, 124, 69, 14, 218, 141, 231, 56, 122, 160, 15, 174, 83, 215, 121, 7, 58, 13, 148, 140, 92, 214, 130, 178, 238, 177, 181, 172, 97, 123, 68, 206, 89, 213, 214, 52, 57, 107, 219, 228, 183, 161, 184, 186, 64, 203, 38, 116, 0, 231, 199, 209, 92, 132, 151, 67, 120, 81, 103, 25, 86, 111, 95, 168, 46, 54, 172, 3, 32, 37, 178, 206, 47, 239, 246, 59, 77, 135, 129, 222, 97, 243, 234, 11, 226, 158, 55, 56, 29, 64, 203, 133, 223, 243, 104, 221, 187, 184, 144, 199, 47, 73, 69, 226, 54, 154, 17, 161, 217, 144, 107, 163, 66, 179, 33, 192, 129, 252, 112, 83, 192, 201, 75, 63, 13, 111, 153, 4, 36, 88, 102, 2, 230, 142, 103, 149, 123, 246, 35, 202, 22, 136, 22, 10, 160, 136, 28, 193, 112, 105, 113, 178, 157, 76, 19, 88, 75, 166, 143, 227, 82, 238, 88, 93, 78, 164, 129, 134, 147, 162, 191, 27, 88, 88, 130, 193, 170, 191, 187, 212, 78, 88, 142, 45, 176, 3, 86, 51, 101, 91, 32, 102, 181, 2, 120, 253, 90, 147, 227, 169, 5, 102, 132, 196, 123, 116, 124, 91, 25, 79, 241, 157, 8, 94, 78, 216, 12, 163, 34, 23, 34, 148, 159, 248, 141, 193, 138, 19, 219, 210, 11, 81, 165, 96, 79, 170, 246, 4, 246, 76, 188, 69, 33, 218, 100, 152, 158, 193, 7, 157, 109, 113, 204, 140, 251, 228, 1, 42, 46, 134, 227, 80, 233, 186, 146, 124, 252, 174, 169, 182, 131, 165, 204, 110, 10, 115, 147, 150, 105, 198, 11, 248, 172, 220, 140, 218, 146, 117, 205, 8, 215, 234, 111, 21, 184, 117, 180, 89, 202, 47, 10, 84, 112, 126, 94, 71, 154, 242, 164, 66, 133, 151, 33, 141, 251, 147, 75, 209, 246, 234, 213, 21, 104, 171, 47, 91, 219, 215, 175, 224, 179, 114, 95, 55, 148, 173, 235, 237, 112, 189, 126, 150, 58, 170, 216, 192, 208, 225, 240, 10, 12, 13, 148, 53, 54, 28, 108, 217, 161, 44, 177, 127, 194, 99, 6, 157, 143, 234, 60, 96, 147, 16, 168, 108, 94, 237, 185, 230, 20, 150, 142, 227, 190, 122, 78, 16, 113, 206, 65, 228, 190, 2, 63, 214, 26, 7, 40, 177, 12, 103, 157, 26, 54, 157, 71, 43, 51, 190, 21, 162, 128, 202, 241, 25, 212, 82, 34, 50, 155, 93, 65, 68, 2, 101, 253, 196, 137, 169, 219, 82, 196, 149, 229, 21, 136, 11, 148, 245, 19, 135, 231, 140, 148, 196, 90, 221, 191, 88, 85, 243, 47, 216, 167, 142, 62, 188, 48, 38, 67, 77, 108, 200, 87, 98, 161, 71, 117, 133, 147, 58, 1, 53, 243, 22, 152, 242, 164, 5, 248, 48, 114, 205, 244, 234, 211, 206, 43, 70, 141, 28, 123, 209, 156, 64, 108, 78, 231, 93, 46, 133, 216, 0, 184, 147, 79, 55, 217, 56, 75, 18, 149, 123, 198, 119, 30, 22, 11, 52, 133, 233, 42, 70, 138, 252, 58, 62, 13, 132, 92, 47, 250, 24, 38, 137, 27, 248, 34, 45, 219, 177, 114, 147, 197, 240, 192, 238, 188, 53, 156, 38, 131, 108, 24, 139, 83, 197, 134, 189, 189, 210, 106, 37, 223, 172, 142, 5, 209, 211, 88, 208, 149, 165, 26, 11, 22, 45, 76, 163, 48, 90, 45, 218, 42, 12, 200, 26, 218, 67, 96, 190, 249, 38, 234, 14, 117, 1, 210, 153, 244, 113, 60, 157, 118, 54, 154, 110, 61, 49, 83, 8, 232, 64, 28, 156, 66, 115, 164, 250, 130, 188, 75, 87, 42, 57, 20, 89, 194, 86, 185, 214, 237, 214, 253, 122, 165, 118, 67, 103, 175, 214, 110, 46, 7, 43, 21, 21, 146, 17, 108, 187, 52, 166, 18, 158, 222, 246, 4, 243, 199, 231, 120, 130, 105, 208, 138, 89, 27, 153, 50, 241, 235, 180, 226, 233, 155, 132, 205, 209, 248, 206, 238, 254, 238, 142, 153, 111, 198, 242, 182, 55, 243, 26, 191, 133, 225, 224, 101, 82, 150, 230, 237, 125, 250, 242, 21, 108, 135, 215, 47, 239, 161, 245, 108, 24, 130, 104, 81, 251, 45, 45, 123, 27, 45, 123, 144, 53, 223, 142, 180, 59, 192, 42, 54, 33, 234, 32, 57, 213, 98, 55, 164, 171, 189, 170, 63, 77, 247, 24, 110, 227, 81, 179, 243, 222, 84, 122, 170, 98, 217, 75, 7, 147, 13, 14, 152, 177, 31, 14, 114, 126, 218, 194, 214, 65, 54, 130, 176, 227, 57, 125, 173, 18, 27, 212, 51, 239, 21, 174, 178, 23, 151, 184, 180, 117, 164, 150, 110, 100, 81, 39, 130, 82, 74, 178, 118, 30, 120, 202, 189, 209, 193, 28, 248, 232, 37, 238, 143, 34, 168, 243, 145, 85, 105, 186, 68, 7, 115, 62, 210, 96, 142, 213, 121, 208, 165, 166, 208, 209, 71, 207, 237, 216, 82, 104, 223, 136, 40, 80, 238, 191, 115, 5, 17, 37, 9, 117, 215, 167, 212, 103, 153, 101, 243, 145, 140, 104, 171, 234, 54, 220, 211, 60, 73, 149, 226, 71, 136, 58, 228, 10, 8, 120, 123, 107, 9, 194, 85, 123, 145, 24, 87, 14, 222, 85, 91, 143, 108, 221, 164, 85, 94, 154, 132, 121, 92, 179, 179, 169, 5, 183, 162, 117, 205, 212, 102, 120, 43, 118, 75, 91, 125, 170, 46, 108, 14, 156, 146, 227, 92, 145, 132, 138, 122, 86, 245, 168, 176, 46, 139, 219, 148, 12, 160, 30, 38, 83, 29, 225, 215, 219, 3, 204, 143, 52, 235, 218, 149, 111, 57, 109, 237, 69, 187, 27, 189, 104, 107, 215, 83, 5, 244, 146, 172, 130, 245, 129, 231, 106, 93, 194, 125, 203, 176, 186, 232, 116, 207, 27, 156, 129, 235, 89, 53, 78, 219, 226, 182, 66, 26, 186, 244, 149, 98, 69, 86, 190, 29, 214, 54, 237, 15, 34, 245, 221, 123, 202, 119, 141, 240, 210, 143, 141, 13, 182, 5, 28, 27, 103, 14, 252, 192, 121, 253, 156, 90, 209, 7, 190, 170, 188, 183, 54, 98, 203, 238, 222, 203, 216, 110, 172, 150, 168, 218, 140, 238, 110, 94, 28, 141, 177, 222, 160, 28, 227, 166, 36, 155, 43, 100, 25, 55, 161, 190, 65, 121, 198, 120, 237, 54, 68, 110, 228, 59, 173, 134, 22, 250, 107, 156, 87, 99, 201, 234, 13, 62, 177, 102, 16, 11, 31, 208, 58, 183, 38, 212, 41, 141, 231, 173, 197, 123, 246, 201, 114, 50, 117, 73, 167, 44, 227, 36, 210, 101, 115, 155, 41, 89, 36, 187, 153, 36, 177, 51, 48, 191, 198, 239, 16, 141, 223, 9, 104, 60, 140, 187, 93, 129, 132, 250, 19, 223, 243, 209, 19, 122, 247, 67, 150, 127, 98, 117, 238, 153, 4, 106, 128, 15, 230, 79, 43, 129, 168, 201, 160, 182, 100, 166, 93, 14, 117, 40, 99, 102, 221, 89, 212, 97, 198, 83, 103, 251, 6, 229, 81, 91, 252, 92, 34, 147, 186, 129, 169, 235, 206, 165, 86, 201, 125, 24, 70, 61, 187, 90, 198, 181, 154, 8, 98, 96, 245, 76, 105, 151, 96, 44, 111, 17, 90, 159, 52, 240, 50, 204, 217, 147, 109, 163, 18, 78, 143, 42, 75, 7, 11, 89, 30, 2, 228, 239, 114, 189, 62, 173, 25, 242, 108, 47, 50, 115, 93, 254, 228, 197, 158, 156, 242, 242, 95, 112, 226, 162, 152, 249, 242, 159, 175, 246, 244, 4, 152, 255, 126, 105, 253, 30, 238, 225, 121, 241, 201, 158, 154, 22, 243, 159, 63, 210, 159, 19, 250, 243, 39, 250, 115, 182, 103, 166, 210, 252, 65, 185, 103, 102, 212, 252, 193, 197, 158, 53, 177, 22, 143, 79, 253, 143, 127, 181, 31, 251, 78, 5, 67, 252, 182, 185, 188, 74, 244, 215, 59, 227, 70, 115, 106, 89, 135, 52, 134, 182, 150, 15, 76, 246, 228, 17, 243, 0, 237, 84, 109, 17, 116, 186, 229, 220, 143, 17, 196, 15, 19, 51, 141, 239, 189, 72, 6, 185, 229, 185, 80, 66, 123, 155, 222, 7, 193, 43, 24, 6, 76, 245, 65, 174, 250, 15, 86, 34, 7, 90, 51, 240, 113, 217, 33, 7, 62, 188, 50, 251, 197, 165, 67, 147, 117, 171, 5, 124, 212, 130, 134, 83, 151, 88, 139, 120, 129, 22, 34, 204, 211, 103, 222, 167, 23, 222, 167, 167, 222, 167, 191, 90, 79, 121, 203, 248, 77, 24, 192, 181, 135, 143, 162, 219, 254, 249, 137, 74, 66, 145, 241, 159, 154, 185, 142, 228, 63, 99, 227, 157, 6, 84, 60, 130, 228, 199, 84, 95, 80, 70, 163, 220, 162, 104, 89, 134, 54, 251, 220, 203, 140, 161, 247, 233, 137, 247, 233, 143, 222, 167, 51, 239, 211, 210, 251, 116, 226, 125, 250, 83, 109, 135, 212, 204, 152, 53, 55, 84, 196, 110, 37, 78, 202, 16, 223, 18, 172, 124, 229, 109, 198, 203, 198, 102, 4, 166, 211, 45, 72, 241, 136, 214, 213, 120, 98, 33, 251, 171, 137, 188, 92, 14, 160, 29, 66, 141, 210, 82, 155, 108, 66, 131, 55, 156, 252, 226, 182, 183, 110, 227, 77, 16, 213, 209, 224, 189, 123, 125, 179, 38, 84, 12, 49, 39, 124, 173, 67, 254, 248, 201, 51, 96, 212, 213, 108, 50, 196, 208, 249, 2, 152, 253, 184, 166, 31, 113, 77, 147, 149, 107, 194, 199, 239, 155, 46, 184, 148, 62, 209, 148, 205, 230, 216, 76, 206, 185, 229, 174, 19, 23, 213, 214, 52, 255, 120, 28, 103, 29, 230, 43, 124, 60, 206, 165, 231, 208, 25, 36, 211, 173, 49, 235, 217, 180, 60, 129, 55, 248, 167, 132, 72, 178, 173, 241, 241, 86, 158, 12, 225, 61, 251, 241, 226, 7, 254, 67, 190, 77, 183, 226, 89, 10, 111, 224, 143, 126, 118, 156, 241, 122, 224, 143, 126, 166, 174, 167, 218, 195, 63, 244, 219, 36, 203, 7, 39, 169, 32, 15, 253, 210, 239, 79, 226, 9, 188, 130, 63, 250, 217, 100, 202, 26, 153, 243, 34, 213, 244, 196, 60, 159, 46, 206, 224, 217, 244, 216, 60, 154, 1, 164, 192, 45, 190, 234, 55, 25, 155, 59, 126, 228, 175, 178, 83, 243, 116, 254, 137, 163, 133, 63, 250, 89, 21, 115, 48, 248, 131, 158, 157, 139, 103, 231, 232, 89, 185, 224, 207, 74, 181, 97, 183, 243, 49, 222, 130, 45, 192, 91, 39, 201, 252, 152, 57, 178, 240, 151, 185, 229, 188, 39, 226, 173, 151, 240, 38, 158, 198, 211, 193, 119, 223, 170, 2, 89, 190, 117, 156, 243, 6, 103, 199, 232, 89, 118, 206, 169, 50, 92, 45, 199, 217, 214, 113, 178, 53, 42, 224, 113, 57, 58, 182, 158, 103, 83, 120, 126, 58, 174, 200, 115, 14, 124, 124, 81, 226, 135, 131, 19, 214, 37, 28, 201, 120, 76, 158, 243, 38, 15, 74, 82, 163, 128, 28, 151, 4, 114, 200, 201, 29, 150, 83, 252, 48, 41, 57, 206, 114, 142, 31, 10, 106, 71, 20, 114, 124, 204, 169, 26, 165, 228, 97, 33, 42, 34, 164, 166, 188, 246, 148, 214, 158, 10, 185, 42, 19, 252, 240, 227, 156, 179, 152, 86, 52, 227, 178, 49, 27, 17, 156, 25, 23, 225, 108, 64, 31, 78, 69, 139, 8, 206, 76, 136, 10, 197, 57, 231, 181, 207, 203, 2, 63, 44, 5, 63, 63, 17, 200, 5, 103, 72, 76, 113, 94, 196, 162, 251, 116, 237, 23, 39, 91, 131, 25, 239, 106, 248, 67, 30, 50, 69, 200, 74, 249, 102, 235, 71, 248, 238, 188, 174, 208, 235, 10, 189, 30, 11, 237, 26, 199, 24, 229, 120, 145, 159, 47, 220, 154, 152, 158, 77, 98, 75, 225, 216, 99, 166, 59, 240, 80, 126, 35, 207, 153, 34, 9, 225, 36, 232, 63, 45, 56, 114, 248, 99, 30, 158, 49, 205, 30, 115, 228, 37, 134, 61, 95, 112, 142, 193, 159, 158, 218, 159, 1, 6, 237, 112, 113, 92, 249, 108, 218, 15, 191, 0, 248, 171, 87, 10, 197, 211, 167, 240, 251, 233, 51, 245, 251, 249, 223, 225, 247, 243, 183, 234, 247, 187, 55, 240, 251, 221, 75, 245, 251, 31, 28, 254, 31, 26, 254, 159, 111, 225, 247, 254, 83, 245, 59, 62, 231, 162, 146, 45, 52, 145, 199, 31, 185, 17, 28, 22, 186, 79, 7, 131, 223, 225, 73, 49, 209, 114, 59, 248, 200, 133, 118, 150, 207, 244, 19, 193, 201, 129, 62, 35, 128, 125, 229, 202, 114, 54, 208, 70, 107, 88, 112, 243, 59, 57, 153, 152, 39, 159, 184, 80, 21, 186, 135, 199, 241, 41, 175, 61, 209, 118, 234, 164, 40, 132, 17, 209, 244, 164, 199, 92, 146, 243, 121, 172, 159, 8, 147, 106, 12, 54, 71, 123, 162, 5, 240, 35, 47, 112, 174, 233, 255, 200, 223, 127, 212, 117, 76, 198, 130, 178, 153, 174, 99, 42, 218, 60, 159, 235, 246, 204, 184, 82, 20, 218, 46, 206, 74, 46, 131, 179, 66, 91, 197, 217, 185, 253, 164, 28, 8, 249, 154, 106, 74, 42, 161, 217, 69, 172, 91, 92, 77, 56, 159, 170, 79, 154, 151, 213, 148, 147, 247, 41, 209, 117, 85, 217, 200, 226, 211, 249, 241, 208, 234, 147, 243, 25, 175, 107, 90, 20, 70, 178, 146, 179, 10, 132, 203, 51, 84, 114, 51, 255, 199, 188, 72, 70, 73, 81, 36, 48, 235, 135, 71, 176, 178, 201, 6, 232, 51, 248, 89, 168, 219, 96, 59, 241, 241, 137, 3, 124, 124, 18, 4, 62, 117, 129, 79, 67, 192, 131, 153, 3, 204, 30, 133, 128, 127, 119, 129, 127, 15, 2, 127, 114, 129, 63, 5, 129, 207, 92, 224, 179, 32, 240, 185, 11, 124, 30, 2, 30, 142, 28, 96, 246, 40, 4, 92, 186, 192, 37, 6, 102, 134, 212, 64, 39, 199, 14, 116, 114, 28, 66, 157, 12, 92, 224, 65, 16, 120, 232, 2, 15, 195, 116, 100, 46, 116, 22, 132, 30, 185, 84, 143, 130, 84, 143, 198, 46, 240, 56, 136, 154, 15, 133, 20, 250, 227, 60, 132, 122, 238, 50, 100, 30, 100, 200, 220, 101, 200, 124, 24, 2, 46, 220, 22, 22, 193, 22, 22, 174, 76, 23, 65, 153, 46, 92, 249, 40, 202, 32, 176, 43, 166, 69, 80, 76, 139, 11, 23, 248, 34, 4, 204, 7, 125, 10, 204, 239, 125, 241, 247, 74, 233, 106, 64, 57, 10, 67, 187, 125, 88, 206, 195, 208, 46, 247, 202, 223, 195, 208, 174, 73, 40, 63, 5, 161, 23, 46, 75, 22, 65, 150, 156, 78, 29, 224, 211, 105, 8, 248, 220, 53, 167, 231, 65, 115, 122, 238, 98, 62, 15, 99, 118, 85, 241, 60, 11, 2, 187, 172, 62, 15, 169, 203, 241, 177, 195, 13, 120, 20, 0, 30, 165, 14, 48, 248, 188, 126, 70, 31, 143, 38, 46, 244, 36, 8, 253, 209, 105, 34, 60, 66, 208, 179, 210, 0, 231, 142, 253, 128, 71, 33, 212, 191, 187, 168, 127, 15, 26, 178, 227, 223, 29, 253, 130, 71, 33, 232, 234, 163, 3, 205, 30, 5, 200, 62, 117, 20, 12, 30, 133, 128, 29, 1, 57, 166, 162, 71, 232, 56, 93, 184, 208, 139, 16, 234, 11, 199, 222, 240, 25, 149, 31, 245, 96, 232, 184, 20, 240, 8, 65, 95, 156, 32, 96, 7, 245, 32, 60, 212, 13, 62, 58, 188, 134, 71, 1, 212, 51, 167, 27, 185, 219, 239, 7, 206, 99, 7, 56, 143, 3, 252, 24, 204, 29, 55, 1, 30, 5, 48, 151, 206, 0, 3, 143, 66, 45, 44, 157, 17, 6, 30, 5, 161, 29, 1, 25, 132, 45, 240, 192, 181, 192, 131, 176, 5, 30, 148, 142, 206, 192, 163, 32, 180, 35, 125, 240, 40, 8, 237, 118, 77, 25, 212, 176, 129, 107, 221, 7, 97, 235, 62, 40, 11, 23, 186, 8, 66, 95, 56, 54, 24, 30, 5, 186, 242, 194, 149, 236, 139, 144, 100, 15, 115, 135, 106, 120, 20, 160, 99, 232, 246, 228, 48, 220, 147, 67, 151, 219, 195, 48, 183, 135, 11, 199, 192, 15, 23, 243, 128, 108, 39, 3, 71, 33, 225, 81, 0, 117, 226, 18, 146, 132, 9, 73, 220, 110, 79, 194, 221, 158, 148, 14, 183, 225, 81, 8, 186, 114, 58, 50, 169, 78, 66, 208, 35, 183, 149, 163, 112, 43, 71, 110, 231, 140, 194, 157, 51, 114, 121, 50, 10, 243, 100, 84, 186, 148, 148, 65, 74, 68, 84, 131, 64, 243, 8, 135, 87, 2, 199, 174, 109, 29, 135, 109, 235, 56, 119, 166, 96, 240, 8, 65, 79, 242, 137, 129, 118, 89, 50, 14, 179, 100, 236, 218, 146, 113, 216, 150, 140, 75, 151, 146, 114, 22, 134, 118, 91, 89, 195, 192, 133, 11, 189, 8, 66, 159, 196, 142, 11, 127, 18, 31, 135, 161, 29, 251, 10, 143, 130, 208, 142, 187, 195, 195, 79, 222, 174, 60, 113, 187, 242, 36, 220, 149, 39, 31, 29, 191, 11, 30, 249, 21, 254, 100, 226, 162, 158, 132, 81, 231, 46, 116, 30, 134, 158, 187, 208, 243, 48, 116, 233, 168, 48, 60, 10, 66, 59, 106, 118, 18, 86, 179, 19, 215, 244, 156, 148, 33, 197, 73, 7, 14, 106, 120, 20, 64, 157, 78, 157, 70, 194, 163, 16, 116, 230, 226, 206, 194, 184, 51, 23, 119, 22, 198, 237, 42, 101, 26, 86, 202, 212, 85, 202, 52, 172, 148, 169, 59, 172, 166, 225, 97, 245, 163, 43, 220, 31, 169, 112, 35, 9, 252, 24, 59, 238, 20, 60, 10, 0, 187, 150, 251, 99, 216, 114, 127, 60, 113, 161, 79, 194, 208, 110, 79, 126, 12, 247, 228, 71, 87, 21, 62, 134, 85, 225, 163, 43, 174, 31, 195, 226, 250, 209, 53, 83, 31, 195, 102, 106, 50, 118, 244, 29, 30, 133, 160, 51, 71, 21, 224, 81, 192, 208, 79, 78, 29, 19, 8, 143, 252, 157, 51, 57, 117, 186, 29, 30, 133, 8, 57, 117, 68, 10, 30, 5, 80, 159, 57, 142, 49, 60, 242, 3, 79, 143, 29, 246, 193, 163, 0, 29, 211, 129, 163, 54, 240, 40, 128, 122, 224, 24, 121, 120, 20, 0, 78, 157, 72, 3, 60, 10, 0, 187, 210, 55, 13, 75, 223, 212, 213, 222, 105, 88, 123, 167, 174, 244, 77, 195, 210, 55, 117, 61, 175, 105, 216, 243, 154, 186, 161, 154, 105, 56, 84, 51, 229, 209, 114, 11, 186, 10, 67, 59, 19, 62, 120, 20, 130, 174, 92, 158, 84, 132, 39, 211, 83, 3, 124, 234, 178, 251, 180, 12, 1, 187, 211, 132, 105, 112, 154, 48, 115, 237, 217, 44, 104, 207, 102, 67, 167, 103, 224, 81, 160, 133, 179, 196, 233, 25, 120, 20, 64, 61, 114, 230, 180, 240, 40, 4, 236, 232, 249, 108, 20, 210, 115, 88, 80, 116, 128, 131, 162, 42, 214, 209, 40, 116, 26, 10, 213, 204, 50, 71, 154, 224, 81, 128, 211, 191, 59, 29, 14, 143, 2, 152, 11, 71, 205, 225, 81, 136, 104, 119, 34, 62, 11, 79, 196, 103, 165, 99, 129, 225, 81, 128, 16, 119, 40, 157, 133, 135, 210, 217, 194, 69, 189, 8, 162, 190, 112, 130, 13, 240, 40, 132, 250, 194, 101, 223, 69, 208, 134, 204, 46, 28, 93, 132, 71, 1, 232, 204, 157, 169, 100, 193, 153, 74, 230, 218, 235, 44, 108, 175, 51, 215, 5, 200, 194, 46, 64, 230, 118, 77, 86, 6, 7, 199, 204, 53, 148, 89, 216, 80, 102, 174, 233, 203, 194, 166, 47, 115, 251, 61, 11, 247, 123, 230, 6, 221, 178, 112, 208, 45, 159, 56, 116, 195, 163, 16, 116, 225, 116, 14, 60, 242, 203, 84, 238, 174, 54, 228, 116, 181, 1, 1, 207, 19, 135, 14, 120, 20, 0, 30, 59, 6, 10, 30, 249, 131, 201, 115, 119, 158, 50, 15, 207, 83, 230, 133, 75, 71, 17, 228, 199, 220, 93, 246, 152, 211, 101, 15, 2, 237, 70, 244, 230, 225, 136, 222, 220, 53, 36, 243, 176, 33, 153, 187, 46, 252, 188, 12, 249, 34, 115, 215, 7, 152, 135, 125, 128, 185, 43, 218, 243, 176, 104, 207, 93, 31, 96, 30, 246, 1, 230, 174, 34, 204, 195, 138, 48, 119, 21, 97, 30, 86, 132, 249, 185, 219, 241, 231, 193, 142, 47, 102, 14, 52, 60, 10, 65, 187, 198, 161, 8, 27, 135, 194, 229, 96, 17, 230, 96, 233, 142, 236, 101, 120, 100, 47, 221, 241, 183, 28, 5, 67, 13, 165, 59, 0, 151, 225, 1, 24, 210, 156, 108, 232, 113, 80, 78, 202, 177, 227, 190, 192, 163, 16, 244, 137, 179, 144, 0, 143, 252, 58, 92, 78, 29, 231, 25, 30, 133, 80, 187, 14, 113, 25, 118, 136, 203, 223, 157, 185, 7, 60, 10, 66, 187, 184, 127, 15, 227, 118, 35, 19, 101, 25, 90, 169, 43, 93, 93, 40, 195, 186, 80, 186, 186, 80, 134, 117, 161, 116, 39, 88, 101, 120, 130, 85, 126, 114, 12, 21, 60, 194, 208, 159, 16, 176, 219, 198, 79, 39, 65, 96, 87, 182, 63, 133, 101, 251, 220, 241, 28, 224, 81, 0, 186, 154, 57, 147, 38, 120, 228, 55, 129, 149, 107, 47, 171, 112, 200, 163, 114, 35, 139, 85, 56, 178, 88, 185, 235, 14, 85, 120, 221, 161, 114, 227, 144, 85, 56, 14, 89, 185, 19, 155, 42, 60, 177, 169, 46, 156, 129, 18, 30, 5, 160, 23, 99, 103, 116, 135, 71, 65, 104, 135, 18, 120, 20, 130, 118, 253, 140, 69, 216, 207, 88, 184, 99, 246, 34, 60, 102, 47, 10, 71, 184, 225, 145, 191, 227, 23, 23, 110, 35, 47, 72, 35, 23, 23, 8, 216, 165, 131, 250, 82, 8, 24, 50, 72, 45, 96, 158, 84, 234, 39, 250, 116, 226, 16, 13, 143, 252, 68, 159, 78, 92, 212, 147, 42, 4, 236, 142, 77, 167, 225, 177, 233, 212, 29, 155, 78, 195, 99, 211, 105, 233, 36, 103, 193, 163, 0, 180, 200, 107, 36, 208, 60, 199, 209, 235, 203, 159, 77, 28, 178, 225, 81, 0, 245, 217, 204, 33, 27, 30, 5, 161, 29, 253, 133, 71, 126, 254, 157, 185, 158, 192, 89, 216, 19, 56, 119, 35, 236, 231, 225, 8, 251, 185, 203, 237, 243, 48, 183, 69, 174, 39, 133, 94, 36, 1, 254, 93, 164, 142, 35, 0, 143, 2, 168, 47, 166, 14, 71, 224, 145, 159, 35, 23, 51, 167, 107, 224, 81, 0, 216, 109, 226, 69, 184, 137, 23, 174, 101, 189, 40, 61, 116, 224, 173, 122, 7, 85, 82, 196, 85, 94, 28, 12, 147, 172, 74, 171, 115, 251, 86, 59, 216, 19, 170, 246, 63, 190, 76, 198, 241, 224, 92, 149, 248, 173, 136, 225, 160, 228, 87, 241, 92, 30, 75, 12, 155, 47, 126, 75, 226, 9, 123, 210, 197, 71, 147, 211, 98, 63, 39, 103, 85, 55, 46, 198, 100, 127, 106, 197, 143, 117, 118, 182, 114, 72, 108, 176, 73, 184, 23, 172, 157, 108, 182, 173, 138, 115, 180, 17, 77, 109, 223, 22, 123, 50, 246, 104, 5, 80, 233, 118, 198, 168, 233, 241, 250, 123, 176, 111, 122, 163, 23, 13, 249, 126, 82, 190, 233, 65, 109, 31, 189, 100, 5, 249, 46, 183, 196, 62, 63, 50, 137, 210, 172, 172, 226, 108, 144, 228, 35, 222, 254, 195, 42, 159, 11, 18, 89, 21, 222, 173, 245, 154, 24, 116, 176, 175, 168, 19, 182, 116, 168, 42, 121, 91, 224, 32, 233, 72, 31, 35, 118, 25, 226, 40, 63, 112, 186, 155, 156, 101, 55, 131, 165, 156, 108, 197, 83, 160, 234, 95, 145, 167, 188, 41, 230, 68, 198, 0, 19, 203, 102, 38, 10, 70, 208, 237, 240, 162, 196, 139, 36, 147, 170, 119, 141, 117, 186, 106, 139, 15, 232, 175, 59, 15, 159, 220, 44, 96, 161, 32, 155, 203, 231, 109, 110, 239, 153, 139, 59, 92, 152, 182, 181, 135, 220, 86, 219, 198, 92, 3, 226, 128, 38, 124, 223, 29, 156, 199, 64, 79, 223, 67, 32, 131, 60, 27, 165, 227, 133, 2, 50, 7, 43, 34, 152, 79, 69, 90, 249, 223, 31, 1, 209, 169, 36, 225, 125, 171, 70, 208, 34, 186, 53, 182, 197, 13, 151, 168, 109, 148, 5, 91, 223, 58, 11, 216, 219, 76, 87, 84, 222, 20, 121, 149, 123, 155, 250, 34, 169, 8, 80, 117, 62, 79, 186, 27, 61, 81, 153, 228, 193, 171, 120, 146, 236, 171, 91, 74, 83, 86, 91, 151, 98, 183, 165, 152, 35, 34, 66, 32, 148, 181, 149, 188, 112, 208, 128, 192, 112, 251, 232, 2, 215, 139, 140, 128, 105, 144, 25, 1, 212, 192, 77, 71, 207, 175, 135, 173, 78, 53, 189, 218, 250, 37, 182, 176, 109, 216, 78, 137, 157, 16, 45, 67, 70, 236, 231, 228, 147, 199, 100, 246, 162, 79, 194, 24, 41, 11, 1, 22, 253, 235, 118, 181, 24, 211, 238, 53, 57, 228, 96, 6, 240, 55, 100, 77, 221, 144, 129, 85, 101, 15, 79, 210, 153, 237, 214, 184, 212, 235, 195, 91, 249, 208, 103, 11, 103, 43, 3, 126, 149, 138, 28, 100, 214, 245, 189, 92, 64, 224, 120, 35, 141, 39, 134, 115, 210, 84, 109, 211, 164, 138, 148, 126, 179, 222, 130, 90, 49, 172, 100, 222, 47, 89, 25, 143, 146, 195, 164, 122, 155, 148, 73, 113, 154, 12, 15, 167, 121, 213, 77, 181, 192, 236, 128, 19, 4, 88, 219, 129, 247, 205, 117, 237, 80, 191, 180, 238, 230, 136, 34, 107, 96, 255, 250, 160, 196, 45, 135, 205, 169, 236, 17, 161, 147, 191, 240, 14, 241, 100, 60, 220, 103, 63, 112, 185, 87, 252, 50, 169, 131, 145, 24, 8, 135, 106, 20, 236, 96, 24, 24, 54, 240, 209, 158, 64, 209, 19, 134, 238, 52, 121, 110, 8, 134, 83, 28, 68, 171, 95, 88, 173, 22, 24, 119, 55, 60, 119, 125, 152, 219, 107, 118, 191, 131, 179, 134, 228, 77, 175, 226, 134, 43, 246, 205, 220, 34, 194, 91, 135, 14, 85, 98, 76, 227, 252, 142, 80, 173, 130, 69, 207, 139, 124, 230, 169, 127, 199, 42, 157, 202, 67, 244, 234, 104, 238, 91, 141, 22, 101, 30, 195, 113, 197, 47, 249, 209, 17, 66, 146, 212, 177, 25, 246, 65, 14, 126, 33, 144, 168, 217, 127, 255, 181, 99, 109, 67, 94, 218, 39, 51, 123, 186, 27, 234, 18, 148, 111, 146, 22, 217, 181, 241, 182, 28, 113, 200, 247, 126, 199, 179, 157, 108, 239, 246, 184, 60, 171, 147, 133, 228, 115, 229, 193, 100, 218, 7, 81, 111, 28, 255, 0, 203, 30, 29, 234, 213, 49, 63, 242, 37, 181, 44, 158, 82, 93, 98, 75, 151, 86, 162, 117, 41, 144, 34, 167, 67, 45, 177, 154, 32, 234, 38, 48, 55, 244, 121, 94, 60, 139, 7, 39, 124, 111, 254, 113, 60, 152, 140, 50, 129, 241, 73, 49, 142, 60, 7, 49, 193, 88, 249, 74, 158, 90, 246, 192, 211, 210, 87, 53, 247, 69, 49, 34, 89, 133, 29, 113, 22, 20, 84, 202, 190, 194, 176, 201, 230, 14, 175, 188, 19, 24, 199, 177, 6, 167, 250, 36, 102, 173, 85, 240, 254, 169, 201, 10, 21, 95, 226, 182, 0, 203, 193, 75, 64, 76, 9, 55, 171, 207, 44, 241, 211, 100, 144, 207, 230, 233, 52, 97, 92, 235, 178, 223, 184, 156, 241, 49, 88, 159, 20, 169, 123, 102, 159, 106, 152, 17, 104, 69, 148, 60, 65, 134, 159, 31, 96, 29, 145, 163, 79, 119, 170, 69, 245, 65, 204, 153, 101, 197, 150, 113, 17, 40, 182, 65, 239, 168, 165, 180, 14, 120, 80, 164, 159, 139, 203, 241, 160, 140, 117, 186, 12, 161, 193, 35, 72, 130, 130, 243, 163, 254, 123, 245, 109, 231, 61, 234, 67, 117, 100, 147, 242, 1, 147, 25, 132, 41, 254, 136, 102, 177, 153, 75, 190, 229, 21, 191, 137, 211, 34, 18, 167, 238, 69, 56, 50, 242, 74, 65, 202, 152, 5, 150, 214, 215, 53, 210, 250, 90, 41, 37, 66, 192, 30, 54, 43, 36, 130, 119, 244, 241, 181, 16, 55, 223, 96, 6, 244, 4, 90, 245, 136, 180, 127, 219, 15, 133, 218, 224, 7, 48, 148, 95, 165, 26, 56, 150, 153, 159, 108, 200, 57, 141, 78, 92, 102, 236, 248, 53, 158, 66, 231, 212, 13, 24, 232, 94, 225, 161, 184, 33, 235, 3, 27, 238, 128, 15, 140, 45, 207, 160, 255, 159, 163, 153, 52, 99, 87, 160, 45, 168, 181, 92, 72, 45, 21, 96, 13, 153, 253, 196, 70, 15, 60, 166, 30, 100, 213, 237, 221, 192, 128, 140, 79, 138, 53, 42, 100, 13, 184, 26, 39, 243, 46, 118, 236, 241, 85, 43, 157, 159, 96, 38, 213, 206, 105, 81, 14, 210, 254, 178, 72, 251, 46, 210, 21, 14, 228, 114, 62, 182, 35, 32, 137, 56, 10, 54, 45, 212, 77, 140, 64, 76, 97, 131, 0, 194, 57, 135, 248, 122, 134, 26, 200, 190, 11, 41, 228, 79, 207, 29, 237, 30, 148, 175, 165, 208, 57, 7, 251, 235, 131, 226, 0, 202, 30, 7, 249, 193, 151, 73, 25, 138, 169, 26, 208, 124, 184, 152, 130, 168, 61, 59, 19, 135, 148, 138, 107, 31, 19, 254, 235, 176, 138, 11, 230, 167, 0, 31, 223, 111, 124, 213, 228, 9, 8, 84, 210, 7, 112, 227, 118, 174, 209, 225, 240, 129, 241, 159, 16, 208, 171, 21, 144, 142, 191, 13, 244, 68, 124, 112, 89, 103, 28, 206, 177, 159, 132, 48, 126, 4, 244, 65, 54, 152, 46, 134, 137, 67, 134, 196, 224, 26, 212, 35, 41, 50, 190, 99, 109, 44, 20, 228, 167, 244, 124, 53, 98, 51, 163, 73, 112, 83, 120, 7, 160, 217, 14, 60, 219, 151, 167, 180, 237, 152, 231, 252, 244, 67, 193, 131, 103, 122, 108, 22, 152, 183, 221, 119, 162, 28, 63, 174, 157, 251, 243, 230, 14, 62, 23, 54, 116, 7, 31, 167, 84, 29, 140, 74, 74, 144, 35, 228, 195, 108, 145, 13, 236, 161, 54, 109, 110, 50, 38, 109, 139, 215, 232, 146, 94, 211, 141, 204, 244, 164, 5, 19, 190, 64, 75, 189, 175, 195, 141, 245, 130, 55, 181, 215, 91, 232, 26, 155, 92, 50, 113, 9, 52, 215, 121, 21, 110, 170, 3, 218, 212, 76, 167, 0, 105, 34, 64, 233, 131, 139, 95, 41, 221, 250, 49, 47, 43, 121, 123, 249, 193, 76, 180, 87, 26, 6, 65, 48, 180, 84, 124, 123, 43, 202, 90, 243, 74, 168, 83, 9, 61, 209, 76, 171, 170, 237, 177, 165, 239, 61, 155, 152, 122, 171, 161, 63, 68, 33, 233, 189, 142, 130, 131, 232, 34, 3, 77, 92, 221, 61, 6, 92, 69, 37, 247, 56, 176, 115, 127, 1, 191, 154, 68, 156, 219, 168, 206, 134, 130, 67, 20, 191, 110, 182, 68, 70, 120, 90, 30, 28, 86, 43, 115, 153, 231, 108, 45, 248, 87, 90, 53, 82, 214, 51, 106, 200, 110, 22, 189, 208, 53, 226, 219, 83, 167, 112, 170, 177, 195, 178, 122, 95, 110, 60, 177, 169, 171, 23, 17, 203, 114, 119, 60, 173, 110, 53, 200, 248, 116, 209, 208, 80, 167, 132, 69, 244, 8, 65, 18, 237, 227, 83, 158, 109, 85, 219, 35, 101, 15, 64, 142, 10, 100, 74, 248, 43, 100, 89, 124, 241, 18, 227, 148, 92, 6, 71, 49, 196, 51, 151, 246, 94, 244, 135, 168, 125, 47, 210, 74, 174, 171, 220, 67, 223, 47, 55, 254, 5, 70, 43, 190, 18, 104, 49, 112, 187, 129, 133, 78, 251, 225, 56, 230, 52, 27, 75, 6, 136, 6, 113, 14, 252, 75, 142, 102, 77, 44, 241, 88, 192, 148, 24, 255, 43, 14, 12, 54, 179, 56, 158, 5, 55, 69, 214, 40, 65, 171, 221, 46, 176, 178, 246, 44, 162, 90, 14, 16, 228, 195, 122, 100, 230, 181, 36, 193, 113, 68, 241, 207, 67, 59, 140, 0, 124, 61, 201, 33, 68, 159, 199, 109, 151, 241, 27, 108, 79, 255, 232, 145, 197, 137, 36, 29, 158, 103, 85, 124, 38, 162, 61, 119, 250, 119, 156, 136, 209, 26, 252, 97, 99, 81, 214, 231, 17, 195, 112, 74, 250, 221, 84, 114, 163, 93, 164, 181, 42, 130, 240, 185, 62, 167, 240, 7, 6, 206, 160, 184, 203, 80, 156, 166, 144, 95, 168, 54, 59, 78, 199, 139, 124, 81, 118, 188, 198, 179, 240, 72, 183, 133, 70, 107, 138, 101, 105, 248, 221, 45, 150, 96, 4, 64, 225, 227, 200, 144, 175, 106, 174, 13, 161, 200, 4, 165, 75, 141, 191, 64, 30, 197, 173, 222, 224, 107, 253, 72, 203, 53, 32, 210, 91, 15, 154, 208, 184, 3, 31, 127, 220, 68, 50, 21, 49, 253, 129, 3, 71, 207, 178, 181, 47, 197, 33, 78, 32, 165, 135, 120, 129, 108, 198, 45, 100, 137, 59, 136, 243, 120, 160, 36, 88, 249, 118, 122, 178, 10, 239, 140, 62, 234, 71, 102, 14, 46, 195, 215, 8, 24, 228, 70, 135, 227, 58, 142, 234, 89, 211, 99, 162, 6, 179, 208, 4, 129, 216, 20, 133, 106, 145, 105, 78, 217, 147, 109, 248, 248, 172, 4, 169, 61, 100, 33, 48, 3, 162, 71, 180, 12, 49, 18, 10, 48, 172, 215, 51, 175, 62, 43, 107, 145, 153, 25, 163, 250, 120, 148, 208, 63, 206, 120, 6, 132, 239, 234, 113, 125, 93, 167, 208, 240, 241, 89, 124, 155, 199, 61, 135, 235, 218, 238, 91, 173, 49, 178, 137, 5, 201, 18, 59, 177, 68, 173, 205, 167, 141, 219, 119, 53, 34, 146, 65, 103, 94, 19, 194, 43, 186, 176, 84, 210, 29, 184, 62, 172, 228, 157, 163, 96, 81, 212, 166, 20, 171, 227, 126, 149, 177, 75, 132, 197, 174, 118, 72, 34, 194, 230, 142, 69, 210, 43, 189, 178, 124, 173, 243, 99, 48, 63, 25, 14, 45, 230, 252, 32, 232, 237, 102, 114, 234, 170, 253, 234, 109, 203, 207, 222, 70, 254, 182, 183, 187, 125, 243, 215, 167, 201, 96, 26, 139, 56, 237, 1, 207, 251, 171, 210, 88, 222, 112, 180, 212, 220, 244, 106, 51, 211, 78, 61, 49, 29, 36, 66, 129, 0, 166, 182, 195, 207, 178, 211, 180, 200, 51, 184, 129, 71, 89, 98, 235, 194, 64, 139, 84, 129, 67, 136, 121, 16, 5, 10, 74, 102, 167, 172, 242, 186, 234, 12, 172, 21, 140, 65, 238, 152, 253, 166, 110, 146, 76, 33, 107, 167, 202, 250, 106, 94, 167, 152, 55, 106, 5, 176, 75, 184, 100, 170, 8, 82, 4, 39, 58, 101, 80, 110, 15, 3, 189, 217, 179, 234, 254, 215, 12, 110, 94, 101, 180, 242, 196, 57, 149, 28, 55, 142, 88, 158, 209, 234, 238, 50, 24, 131, 227, 150, 7, 241, 189, 166, 40, 244, 204, 223, 65, 179, 118, 29, 51, 107, 217, 33, 41, 95, 60, 38, 224, 235, 152, 97, 164, 176, 88, 26, 152, 99, 240, 201, 42, 123, 111, 38, 186, 130, 121, 127, 115, 110, 168, 177, 253, 59, 143, 67, 72, 105, 179, 134, 17, 97, 120, 28, 107, 207, 204, 140, 160, 80, 71, 77, 122, 166, 26, 236, 27, 248, 156, 244, 207, 63, 67, 226, 60, 35, 252, 90, 163, 55, 246, 109, 111, 105, 220, 181, 222, 153, 167, 138, 251, 13, 85, 136, 94, 18, 130, 84, 215, 69, 206, 180, 136, 60, 114, 7, 104, 222, 133, 72, 171, 140, 161, 148, 99, 145, 234, 53, 52, 52, 150, 102, 160, 113, 134, 243, 103, 176, 142, 250, 229, 6, 112, 83, 125, 139, 33, 91, 90, 139, 68, 148, 113, 7, 102, 251, 234, 188, 67, 61, 230, 170, 18, 93, 180, 79, 226, 223, 227, 109, 162, 153, 95, 59, 194, 74, 230, 42, 38, 146, 58, 125, 34, 165, 77, 211, 51, 145, 177, 205, 38, 3, 109, 69, 203, 152, 192, 53, 202, 152, 75, 143, 149, 18, 231, 73, 214, 181, 75, 138, 169, 129, 206, 8, 21, 201, 74, 226, 158, 59, 113, 43, 223, 126, 60, 56, 73, 228, 198, 170, 183, 201, 32, 47, 134, 100, 79, 149, 184, 147, 241, 67, 149, 139, 171, 43, 101, 130, 41, 78, 81, 242, 222, 173, 44, 139, 241, 92, 7, 184, 92, 25, 137, 47, 189, 64, 116, 229, 171, 37, 215, 112, 31, 45, 102, 131, 81, 86, 77, 155, 125, 59, 182, 174, 49, 116, 199, 35, 95, 232, 179, 89, 187, 141, 159, 88, 101, 137, 225, 109, 42, 41, 110, 193, 252, 25, 61, 83, 164, 226, 251, 99, 125, 216, 120, 244, 180, 14, 185, 84, 26, 123, 128, 93, 181, 126, 251, 146, 73, 117, 119, 167, 188, 223, 19, 163, 117, 110, 240, 148, 130, 147, 150, 207, 33, 97, 31, 54, 96, 204, 112, 86, 170, 138, 28, 45, 102, 34, 52, 33, 112, 117, 28, 125, 67, 233, 51, 58, 72, 61, 139, 182, 248, 191, 60, 59, 202, 95, 233, 207, 241, 207, 235, 173, 81, 68, 50, 103, 254, 218, 14, 227, 81, 2, 151, 98, 142, 53, 83, 252, 21, 179, 23, 28, 209, 45, 241, 253, 86, 93, 221, 220, 80, 121, 152, 8, 200, 235, 202, 169, 219, 59, 199, 124, 55, 223, 187, 220, 162, 203, 32, 87, 64, 178, 101, 240, 178, 129, 28, 125, 53, 122, 124, 92, 170, 226, 27, 112, 119, 222, 119, 59, 59, 223, 246, 191, 251, 110, 247, 238, 157, 111, 239, 236, 124, 247, 93, 223, 65, 100, 118, 185, 80, 204, 56, 42, 57, 205, 143, 227, 169, 233, 58, 196, 68, 181, 49, 2, 119, 174, 190, 100, 86, 177, 196, 143, 140, 242, 205, 143, 78, 194, 212, 99, 20, 3, 198, 97, 197, 6, 171, 193, 147, 178, 76, 199, 89, 183, 98, 134, 9, 66, 234, 163, 180, 40, 171, 195, 124, 81, 12, 18, 108, 78, 249, 142, 29, 179, 117, 131, 3, 35, 246, 59, 198, 238, 33, 190, 220, 77, 241, 45, 71, 163, 190, 186, 199, 178, 47, 70, 125, 27, 129, 51, 220, 115, 203, 152, 156, 73, 210, 176, 125, 117, 22, 9, 49, 152, 116, 115, 97, 84, 180, 30, 7, 236, 221, 32, 103, 222, 95, 134, 51, 113, 161, 230, 81, 145, 207, 48, 3, 12, 46, 43, 1, 114, 146, 156, 131, 241, 71, 87, 175, 193, 77, 204, 93, 40, 223, 139, 118, 206, 238, 71, 127, 178, 127, 251, 59, 252, 207, 46, 222, 58, 160, 153, 2, 168, 15, 228, 190, 134, 157, 30, 115, 93, 96, 254, 0, 104, 53, 103, 12, 196, 67, 120, 141, 30, 184, 193, 95, 133, 145, 81, 33, 209, 28, 105, 104, 79, 66, 72, 232, 54, 185, 185, 108, 204, 65, 249, 76, 111, 27, 235, 69, 162, 85, 18, 189, 179, 115, 2, 62, 85, 126, 36, 95, 67, 226, 33, 192, 235, 223, 214, 90, 71, 93, 248, 31, 4, 199, 145, 94, 54, 207, 211, 155, 196, 94, 143, 186, 249, 241, 71, 75, 195, 128, 252, 183, 201, 104, 10, 244, 143, 41, 176, 238, 71, 40, 229, 83, 13, 214, 78, 113, 147, 54, 100, 172, 187, 168, 181, 203, 197, 95, 177, 65, 24, 215, 149, 218, 101, 61, 248, 235, 60, 23, 154, 92, 237, 243, 212, 94, 111, 87, 114, 79, 77, 47, 122, 237, 67, 47, 162, 223, 204, 95, 175, 192, 2, 240, 137, 81, 201, 127, 224, 122, 114, 14, 138, 150, 63, 88, 157, 68, 97, 244, 3, 143, 170, 136, 194, 140, 210, 49, 55, 78, 2, 11, 185, 0, 81, 67, 208, 13, 95, 104, 60, 64, 155, 2, 36, 117, 193, 13, 1, 187, 76, 19, 58, 2, 8, 231, 125, 79, 184, 84, 191, 203, 145, 174, 117, 81, 164, 152, 103, 75, 39, 37, 92, 125, 107, 68, 243, 3, 8, 115, 149, 127, 248, 128, 111, 154, 231, 212, 107, 201, 22, 41, 215, 230, 13, 222, 6, 105, 191, 99, 68, 237, 73, 230, 10, 193, 21, 85, 35, 221, 17, 188, 211, 203, 16, 130, 47, 61, 160, 189, 199, 169, 11, 119, 224, 11, 220, 129, 227, 27, 221, 129, 227, 54, 29, 56, 190, 137, 29, 56, 134, 14, 28, 175, 187, 3, 95, 230, 249, 100, 49, 71, 26, 136, 59, 174, 69, 171, 107, 153, 63, 204, 173, 129, 81, 242, 8, 209, 204, 26, 132, 198, 160, 167, 236, 125, 145, 206, 97, 38, 134, 168, 183, 194, 109, 188, 41, 158, 165, 237, 182, 55, 140, 66, 121, 161, 165, 29, 79, 94, 160, 180, 99, 0, 180, 205, 64, 168, 245, 247, 199, 27, 120, 111, 184, 226, 88, 99, 215, 5, 140, 222, 199, 36, 247, 250, 200, 146, 122, 249, 62, 216, 93, 47, 254, 23, 118, 215, 184, 185, 187, 198, 55, 174, 187, 126, 133, 9, 124, 9, 91, 141, 108, 107, 136, 187, 224, 53, 53, 52, 62, 191, 76, 177, 215, 120, 102, 168, 12, 15, 19, 224, 165, 120, 243, 208, 74, 124, 39, 30, 173, 140, 99, 17, 151, 205, 227, 204, 78, 140, 71, 102, 59, 176, 95, 47, 231, 134, 97, 25, 105, 227, 204, 170, 173, 30, 162, 220, 209, 132, 56, 99, 190, 149, 115, 209, 230, 30, 110, 59, 100, 238, 226, 155, 126, 137, 191, 38, 224, 60, 253, 38, 23, 15, 174, 187, 227, 204, 166, 64, 220, 115, 242, 233, 255, 174, 174, 147, 141, 238, 145, 214, 67, 231, 29, 241, 225, 139, 227, 123, 239, 235, 195, 68, 173, 30, 161, 78, 84, 106, 204, 76, 137, 158, 47, 206, 77, 175, 4, 246, 233, 138, 185, 98, 208, 51, 184, 179, 235, 238, 245, 84, 101, 136, 11, 140, 106, 138, 210, 76, 194, 88, 244, 141, 159, 157, 205, 159, 79, 227, 113, 41, 77, 57, 150, 179, 183, 78, 0, 220, 16, 249, 182, 158, 190, 183, 198, 173, 250, 30, 98, 45, 211, 105, 39, 218, 83, 219, 93, 223, 34, 201, 211, 123, 190, 58, 29, 83, 205, 219, 109, 225, 99, 225, 9, 49, 7, 219, 100, 112, 99, 2, 200, 102, 226, 121, 145, 236, 199, 101, 226, 5, 78, 9, 240, 140, 61, 78, 167, 105, 230, 135, 157, 17, 216, 146, 205, 244, 39, 231, 94, 192, 243, 14, 97, 179, 218, 0, 230, 240, 85, 239, 227, 87, 209, 231, 207, 197, 212, 185, 184, 108, 156, 213, 196, 218, 193, 39, 221, 230, 221, 8, 58, 155, 191, 225, 223, 72, 75, 110, 253, 215, 173, 104, 83, 151, 222, 148, 191, 37, 28, 106, 158, 104, 214, 135, 114, 113, 92, 138, 6, 66, 186, 25, 223, 226, 171, 227, 168, 111, 69, 56, 95, 52, 108, 63, 79, 138, 1, 159, 221, 89, 241, 99, 86, 156, 155, 49, 124, 222, 1, 138, 46, 39, 98, 67, 70, 161, 76, 139, 126, 147, 102, 60, 135, 177, 34, 33, 46, 78, 196, 6, 1, 122, 198, 55, 102, 50, 157, 30, 218, 209, 222, 239, 57, 246, 61, 84, 28, 136, 71, 108, 74, 179, 120, 170, 234, 208, 145, 175, 89, 154, 153, 48, 216, 44, 62, 235, 42, 66, 224, 164, 5, 30, 122, 176, 81, 8, 10, 106, 17, 48, 16, 111, 113, 30, 43, 80, 33, 32, 16, 20, 68, 211, 67, 141, 29, 155, 90, 25, 116, 49, 112, 198, 212, 241, 112, 148, 42, 19, 136, 19, 227, 226, 26, 138, 22, 70, 88, 137, 241, 59, 84, 162, 240, 19, 147, 156, 100, 202, 218, 88, 136, 104, 7, 140, 53, 61, 54, 211, 202, 163, 45, 254, 123, 3, 30, 108, 120, 165, 137, 7, 215, 136, 80, 137, 9, 187, 43, 92, 129, 0, 90, 63, 172, 61, 125, 126, 86, 201, 45, 81, 213, 182, 174, 227, 22, 53, 152, 100, 40, 178, 133, 28, 8, 113, 8, 10, 171, 133, 210, 9, 121, 74, 198, 26, 213, 162, 149, 240, 151, 233, 69, 18, 80, 158, 68, 40, 133, 100, 155, 163, 23, 188, 36, 86, 12, 217, 2, 18, 58, 86, 82, 184, 99, 88, 142, 200, 242, 170, 8, 179, 36, 128, 218, 156, 73, 98, 204, 255, 75, 73, 74, 141, 158, 36, 74, 73, 56, 121, 91, 186, 182, 13, 77, 21, 65, 245, 240, 17, 38, 77, 37, 215, 82, 187, 237, 149, 89, 77, 45, 151, 91, 130, 179, 149, 224, 218, 82, 75, 187, 127, 61, 130, 219, 90, 106, 29, 145, 213, 93, 233, 105, 197, 52, 29, 36, 127, 69, 67, 46, 140, 26, 21, 90, 16, 115, 44, 93, 128, 98, 51, 194, 198, 156, 97, 36, 194, 104, 222, 81, 43, 205, 77, 163, 180, 226, 245, 168, 165, 153, 247, 32, 230, 111, 40, 218, 114, 30, 103, 182, 34, 105, 27, 106, 84, 168, 157, 245, 229, 200, 154, 164, 87, 118, 255, 181, 153, 92, 192, 223, 70, 112, 1, 174, 181, 169, 29, 228, 195, 228, 77, 206, 88, 248, 164, 234, 206, 243, 114, 57, 153, 61, 172, 145, 88, 134, 44, 149, 153, 72, 70, 176, 160, 6, 199, 194, 30, 18, 153, 6, 54, 233, 178, 76, 28, 32, 168, 168, 127, 63, 126, 196, 11, 53, 101, 141, 8, 223, 161, 40, 189, 7, 171, 168, 134, 159, 196, 197, 62, 107, 252, 19, 198, 156, 195, 158, 174, 2, 25, 105, 129, 129, 145, 112, 246, 244, 254, 14, 167, 67, 60, 121, 12, 79, 126, 120, 254, 156, 80, 182, 25, 245, 185, 94, 121, 201, 227, 229, 80, 187, 217, 212, 131, 107, 227, 146, 180, 161, 115, 152, 248, 106, 162, 64, 195, 9, 220, 23, 4, 202, 71, 156, 194, 231, 207, 159, 215, 17, 34, 159, 200, 86, 110, 201, 86, 110, 68, 127, 99, 223, 238, 48, 108, 155, 186, 130, 45, 89, 193, 6, 123, 6, 179, 94, 246, 81, 233, 19, 131, 124, 58, 133, 100, 139, 134, 212, 9, 217, 172, 34, 153, 39, 113, 213, 29, 192, 124, 112, 125, 130, 70, 37, 76, 32, 55, 76, 202, 232, 16, 203, 85, 236, 109, 156, 141, 165, 142, 221, 223, 65, 176, 95, 51, 232, 191, 105, 113, 100, 5, 187, 253, 232, 225, 195, 104, 247, 254, 134, 61, 171, 192, 24, 212, 121, 36, 124, 107, 86, 244, 77, 212, 213, 165, 24, 231, 250, 136, 208, 119, 104, 142, 198, 67, 0, 15, 30, 56, 57, 19, 172, 124, 159, 78, 202, 223, 193, 132, 233, 208, 120, 146, 76, 9, 30, 195, 18, 38, 45, 71, 203, 28, 90, 101, 72, 140, 29, 62, 232, 104, 32, 226, 132, 190, 243, 153, 8, 117, 210, 76, 119, 125, 125, 70, 207, 205, 19, 48, 43, 156, 156, 119, 216, 18, 180, 239, 216, 123, 239, 73, 96, 148, 14, 114, 2, 81, 56, 235, 201, 34, 190, 245, 174, 109, 90, 206, 159, 254, 68, 250, 204, 254, 116, 92, 114, 233, 174, 108, 213, 9, 250, 84, 29, 81, 160, 225, 156, 59, 225, 46, 88, 103, 220, 213, 157, 199, 211, 111, 178, 232, 36, 72, 17, 62, 163, 142, 28, 25, 71, 78, 205, 227, 54, 149, 176, 84, 159, 120, 21, 225, 3, 64, 17, 187, 241, 145, 50, 134, 27, 194, 174, 138, 88, 92, 127, 229, 161, 130, 211, 229, 140, 19, 140, 78, 57, 80, 124, 243, 141, 196, 248, 240, 145, 26, 41, 216, 35, 125, 146, 30, 236, 182, 180, 26, 180, 202, 160, 224, 59, 153, 15, 141, 10, 130, 156, 125, 65, 142, 26, 41, 30, 169, 113, 193, 138, 225, 99, 190, 236, 218, 145, 245, 203, 26, 21, 115, 206, 9, 212, 152, 180, 186, 153, 131, 198, 106, 218, 134, 166, 136, 170, 105, 117, 56, 67, 65, 35, 137, 77, 36, 99, 237, 231, 179, 121, 92, 128, 89, 138, 215, 56, 218, 188, 59, 137, 43, 250, 58, 198, 142, 118, 109, 58, 95, 187, 92, 188, 218, 116, 190, 93, 130, 98, 55, 128, 66, 13, 203, 70, 70, 175, 150, 202, 71, 134, 249, 109, 245, 171, 62, 165, 197, 95, 66, 36, 193, 237, 203, 223, 117, 105, 123, 168, 140, 31, 89, 32, 4, 179, 108, 93, 110, 138, 158, 20, 28, 209, 193, 165, 110, 60, 23, 205, 119, 162, 187, 131, 147, 0, 152, 50, 236, 43, 151, 186, 171, 157, 235, 18, 7, 133, 85, 216, 192, 77, 64, 50, 1, 134, 105, 194, 95, 72, 151, 10, 242, 90, 213, 176, 232, 79, 218, 113, 50, 116, 104, 214, 142, 63, 175, 137, 100, 52, 249, 82, 116, 20, 224, 254, 27, 46, 242, 42, 189, 203, 28, 210, 169, 4, 68, 2, 193, 250, 25, 74, 152, 227, 15, 249, 56, 73, 211, 10, 197, 115, 207, 78, 20, 236, 86, 245, 209, 41, 174, 170, 132, 183, 82, 57, 71, 144, 191, 30, 115, 23, 245, 57, 113, 126, 175, 136, 31, 172, 230, 115, 159, 213, 244, 239, 131, 156, 47, 202, 147, 158, 238, 193, 158, 36, 204, 218, 91, 224, 46, 181, 152, 101, 204, 150, 120, 187, 93, 69, 225, 150, 114, 203, 55, 162, 255, 18, 222, 187, 136, 17, 114, 127, 157, 123, 245, 15, 150, 70, 238, 162, 254, 79, 61, 49, 144, 211, 1, 143, 254, 56, 216, 213, 143, 15, 204, 173, 153, 158, 247, 34, 100, 243, 185, 170, 200, 49, 77, 156, 80, 104, 8, 168, 83, 177, 34, 254, 196, 23, 156, 15, 153, 15, 215, 139, 182, 183, 69, 72, 39, 173, 22, 66, 171, 145, 162, 137, 60, 196, 215, 163, 67, 12, 0, 49, 1, 252, 219, 209, 189, 65, 158, 79, 120, 122, 191, 94, 27, 84, 181, 225, 168, 91, 252, 137, 64, 240, 50, 219, 236, 41, 30, 11, 184, 147, 57, 61, 76, 198, 74, 151, 245, 241, 191, 12, 112, 219, 9, 10, 218, 240, 181, 17, 56, 227, 84, 9, 238, 160, 185, 133, 107, 28, 248, 227, 154, 83, 72, 121, 106, 97, 50, 198, 227, 26, 163, 16, 153, 4, 36, 64, 86, 165, 228, 231, 166, 194, 228, 42, 210, 129, 118, 127, 96, 212, 176, 154, 26, 58, 29, 65, 99, 118, 77, 18, 235, 211, 80, 37, 15, 253, 29, 111, 229, 152, 11, 28, 184, 201, 68, 44, 252, 141, 119, 38, 82, 6, 141, 226, 126, 75, 30, 97, 242, 145, 153, 86, 58, 21, 148, 126, 234, 219, 48, 167, 169, 207, 67, 61, 187, 87, 141, 50, 201, 217, 196, 54, 193, 223, 105, 235, 217, 180, 115, 75, 106, 61, 155, 219, 4, 197, 109, 15, 138, 154, 152, 23, 161, 154, 51, 68, 178, 165, 23, 121, 134, 125, 151, 185, 199, 233, 120, 137, 217, 173, 82, 197, 135, 172, 216, 227, 14, 235, 81, 234, 44, 178, 7, 157, 135, 255, 197, 223, 121, 235, 154, 166, 217, 100, 165, 218, 160, 96, 184, 62, 241, 214, 91, 99, 62, 29, 174, 84, 97, 184, 50, 127, 69, 163, 244, 44, 89, 169, 166, 170, 10, 86, 5, 175, 252, 81, 137, 120, 154, 14, 202, 85, 106, 75, 131, 149, 165, 254, 186, 202, 25, 147, 185, 85, 106, 226, 5, 131, 181, 201, 183, 254, 177, 174, 72, 39, 201, 74, 85, 242, 146, 225, 58, 229, 235, 192, 178, 219, 74, 53, 46, 194, 130, 194, 223, 249, 235, 154, 175, 86, 215, 188, 166, 174, 185, 85, 215, 179, 114, 16, 207, 217, 132, 153, 129, 30, 47, 170, 132, 167, 112, 117, 79, 201, 157, 77, 217, 124, 1, 150, 25, 143, 3, 167, 36, 18, 194, 222, 191, 228, 139, 47, 10, 212, 113, 24, 242, 69, 165, 145, 224, 49, 120, 112, 178, 200, 38, 106, 109, 166, 38, 245, 71, 213, 225, 228, 253, 136, 32, 136, 192, 125, 148, 190, 231, 35, 231, 173, 206, 45, 219, 15, 53, 245, 111, 182, 154, 97, 43, 148, 61, 68, 33, 123, 10, 92, 188, 245, 205, 239, 139, 188, 122, 112, 203, 114, 86, 113, 67, 82, 24, 196, 253, 49, 2, 62, 85, 68, 176, 143, 124, 14, 140, 170, 253, 129, 175, 136, 97, 6, 202, 26, 94, 67, 243, 168, 24, 105, 140, 62, 193, 140, 179, 193, 73, 78, 19, 50, 175, 22, 53, 80, 153, 33, 15, 99, 190, 153, 251, 81, 7, 50, 66, 188, 146, 41, 234, 100, 189, 208, 121, 12, 48, 135, 66, 172, 227, 128, 173, 101, 51, 8, 54, 53, 205, 33, 228, 205, 254, 93, 51, 173, 128, 61, 226, 136, 107, 232, 149, 21, 219, 4, 67, 217, 48, 205, 16, 251, 234, 226, 0, 216, 58, 41, 6, 188, 53, 4, 139, 106, 219, 211, 203, 71, 234, 69, 49, 93, 187, 32, 156, 20, 201, 168, 134, 78, 94, 101, 163, 28, 36, 213, 10, 151, 62, 28, 214, 36, 79, 29, 214, 95, 250, 192, 42, 244, 222, 189, 160, 162, 240, 13, 151, 62, 176, 226, 226, 210, 7, 5, 223, 250, 210, 135, 166, 138, 63, 199, 165, 15, 58, 49, 215, 219, 46, 179, 212, 160, 104, 90, 233, 206, 7, 140, 74, 222, 249, 32, 234, 181, 34, 19, 203, 92, 249, 64, 15, 89, 95, 254, 202, 7, 94, 64, 255, 49, 44, 167, 146, 216, 246, 216, 117, 96, 253, 144, 135, 28, 246, 243, 249, 249, 111, 41, 3, 48, 251, 0, 205, 82, 181, 79, 122, 195, 75, 48, 6, 105, 251, 229, 23, 83, 38, 176, 243, 220, 37, 170, 97, 57, 198, 215, 52, 119, 65, 38, 63, 254, 72, 52, 208, 36, 119, 152, 242, 50, 72, 32, 246, 113, 213, 213, 185, 252, 7, 7, 15, 166, 49, 92, 197, 244, 142, 183, 147, 172, 161, 146, 173, 150, 58, 69, 195, 42, 240, 144, 239, 78, 247, 36, 106, 80, 184, 30, 118, 1, 66, 31, 43, 161, 195, 198, 64, 19, 59, 212, 219, 230, 172, 23, 153, 184, 66, 11, 52, 210, 173, 19, 88, 154, 89, 31, 160, 219, 155, 230, 162, 94, 138, 60, 28, 39, 13, 71, 100, 225, 180, 238, 237, 134, 180, 75, 212, 106, 153, 85, 83, 223, 102, 153, 89, 179, 106, 71, 121, 210, 111, 6, 114, 57, 137, 192, 11, 218, 84, 10, 14, 144, 176, 21, 233, 123, 241, 150, 253, 172, 170, 26, 43, 171, 20, 242, 88, 121, 227, 30, 99, 142, 189, 202, 153, 188, 106, 13, 126, 38, 227, 152, 160, 195, 144, 129, 42, 178, 136, 76, 62, 145, 64, 240, 167, 189, 42, 205, 160, 3, 214, 82, 237, 98, 88, 250, 70, 28, 100, 27, 95, 95, 213, 48, 194, 141, 56, 14, 73, 212, 196, 145, 227, 56, 196, 25, 186, 232, 130, 152, 221, 141, 80, 243, 78, 147, 226, 188, 173, 27, 243, 153, 7, 2, 223, 168, 216, 118, 36, 224, 237, 114, 7, 129, 215, 109, 135, 0, 181, 43, 197, 27, 213, 179, 230, 87, 129, 184, 222, 127, 26, 164, 255, 185, 61, 87, 59, 161, 182, 19, 76, 217, 245, 186, 78, 239, 100, 107, 25, 144, 53, 9, 158, 136, 73, 240, 68, 109, 42, 159, 120, 246, 189, 252, 42, 253, 151, 215, 71, 19, 107, 101, 170, 74, 248, 97, 58, 30, 95, 10, 119, 217, 187, 158, 196, 193, 254, 138, 173, 203, 10, 7, 111, 181, 65, 226, 13, 66, 135, 46, 159, 113, 238, 230, 52, 92, 126, 158, 78, 167, 93, 233, 46, 149, 106, 246, 127, 83, 188, 26, 76, 215, 114, 78, 13, 52, 107, 13, 146, 188, 220, 8, 62, 241, 13, 223, 132, 226, 21, 134, 242, 181, 143, 218, 203, 143, 198, 14, 211, 87, 26, 157, 219, 141, 198, 34, 213, 140, 43, 25, 167, 198, 81, 51, 208, 44, 70, 34, 154, 25, 16, 81, 127, 29, 150, 115, 216, 238, 180, 196, 220, 243, 179, 15, 88, 171, 25, 240, 142, 221, 70, 87, 236, 63, 187, 185, 30, 17, 66, 62, 179, 189, 22, 251, 135, 249, 169, 250, 250, 26, 100, 158, 96, 241, 1, 253, 124, 158, 23, 164, 235, 76, 209, 125, 200, 8, 19, 243, 67, 4, 15, 254, 128, 139, 20, 235, 126, 50, 175, 60, 249, 15, 220, 185, 140, 231, 76, 22, 248, 34, 173, 29, 87, 189, 218, 144, 82, 38, 176, 217, 80, 174, 254, 254, 144, 231, 211, 36, 206, 186, 173, 135, 22, 39, 19, 75, 32, 91, 42, 111, 0, 90, 173, 208, 218, 57, 3, 178, 213, 106, 149, 208, 136, 164, 17, 204, 39, 146, 99, 251, 93, 5, 237, 164, 141, 200, 116, 17, 198, 32, 5, 194, 126, 81, 46, 61, 57, 202, 192, 34, 0, 45, 236, 155, 199, 38, 60, 9, 218, 132, 108, 216, 157, 51, 148, 233, 32, 134, 213, 249, 155, 227, 197, 185, 68, 45, 49, 242, 101, 195, 27, 233, 195, 141, 16, 97, 182, 73, 208, 237, 93, 206, 34, 160, 98, 215, 235, 192, 57, 199, 6, 160, 14, 114, 244, 202, 231, 153, 9, 8, 143, 108, 162, 85, 227, 160, 140, 242, 213, 246, 191, 164, 160, 242, 150, 221, 88, 105, 37, 212, 221, 72, 145, 109, 144, 75, 16, 226, 90, 169, 244, 8, 228, 86, 63, 36, 137, 203, 133, 239, 151, 20, 196, 107, 241, 151, 58, 14, 245, 215, 45, 107, 129, 77, 81, 6, 25, 22, 49, 65, 210, 173, 86, 110, 210, 103, 156, 207, 214, 121, 16, 72, 162, 86, 48, 102, 92, 161, 94, 143, 152, 175, 17, 23, 131, 19, 25, 118, 18, 145, 38, 157, 254, 245, 133, 12, 89, 136, 164, 214, 230, 76, 182, 109, 77, 2, 198, 65, 188, 43, 210, 91, 104, 43, 0, 221, 76, 164, 105, 38, 27, 138, 30, 63, 226, 179, 171, 58, 52, 19, 11, 158, 92, 65, 12, 82, 146, 225, 54, 89, 25, 204, 240, 94, 76, 0, 173, 123, 129, 38, 116, 47, 147, 130, 221, 193, 184, 208, 108, 47, 100, 222, 196, 124, 15, 246, 170, 225, 30, 186, 186, 57, 251, 239, 28, 182, 28, 39, 243, 152, 199, 251, 190, 152, 212, 201, 250, 73, 172, 18, 72, 91, 83, 240, 130, 85, 0, 97, 109, 85, 141, 19, 15, 232, 244, 58, 60, 30, 160, 146, 10, 53, 63, 218, 136, 34, 78, 31, 145, 185, 176, 59, 220, 117, 218, 65, 135, 202, 188, 197, 235, 203, 10, 202, 118, 243, 39, 124, 139, 75, 173, 103, 6, 75, 193, 111, 97, 79, 121, 50, 167, 179, 32, 137, 211, 59, 67, 146, 121, 227, 118, 253, 104, 170, 2, 228, 29, 202, 52, 71, 143, 248, 188, 13, 72, 15, 63, 98, 231, 6, 133, 183, 129, 158, 101, 98, 219, 214, 222, 96, 36, 67, 113, 89, 181, 48, 211, 95, 218, 239, 188, 178, 185, 70, 237, 252, 236, 38, 27, 49, 210, 19, 158, 219, 138, 250, 36, 68, 103, 155, 117, 165, 47, 194, 84, 147, 88, 28, 179, 104, 153, 90, 169, 234, 195, 206, 115, 98, 152, 181, 177, 125, 44, 198, 253, 173, 173, 207, 101, 107, 95, 197, 243, 191, 96, 228, 13, 139, 19, 107, 225, 103, 140, 187, 221, 10, 76, 90, 102, 241, 188, 157, 55, 233, 199, 254, 47, 23, 116, 51, 241, 35, 43, 128, 220, 114, 182, 63, 227, 253, 255, 171, 111, 187, 95, 147, 223, 11, 159, 39, 34, 20, 141, 176, 44, 17, 124, 122, 155, 12, 23, 3, 220, 47, 209, 10, 166, 116, 189, 66, 223, 177, 169, 195, 25, 245, 55, 96, 78, 94, 16, 162, 174, 79, 194, 137, 53, 135, 109, 135, 222, 102, 132, 55, 41, 220, 254, 206, 50, 213, 59, 230, 103, 60, 24, 44, 102, 11, 181, 231, 175, 221, 182, 75, 38, 124, 155, 155, 239, 157, 245, 17, 159, 84, 83, 244, 65, 137, 70, 219, 153, 81, 137, 166, 233, 29, 2, 173, 21, 234, 183, 233, 248, 164, 186, 217, 146, 205, 73, 188, 145, 226, 77, 40, 251, 23, 146, 113, 233, 117, 92, 89, 210, 183, 182, 108, 73, 247, 186, 43, 95, 92, 208, 79, 147, 162, 76, 90, 156, 184, 112, 45, 238, 111, 199, 161, 100, 77, 243, 197, 89, 58, 28, 78, 19, 156, 9, 53, 154, 230, 57, 63, 19, 44, 250, 175, 104, 215, 30, 99, 167, 249, 39, 126, 239, 4, 235, 31, 241, 21, 246, 212, 10, 28, 242, 137, 59, 232, 46, 88, 67, 10, 45, 48, 162, 216, 22, 78, 210, 215, 136, 77, 44, 158, 255, 180, 230, 118, 28, 143, 1, 225, 63, 17, 136, 42, 4, 78, 166, 134, 196, 175, 69, 1, 32, 68, 215, 229, 17, 5, 186, 158, 252, 107, 154, 124, 146, 204, 251, 97, 49, 26, 37, 197, 193, 232, 109, 146, 142, 82, 184, 232, 41, 134, 167, 190, 35, 254, 87, 253, 152, 94, 57, 94, 140, 34, 116, 190, 5, 61, 212, 128, 215, 107, 78, 196, 88, 18, 189, 108, 38, 171, 129, 52, 244, 160, 124, 154, 84, 176, 129, 125, 40, 218, 217, 61, 230, 127, 176, 184, 139, 39, 158, 123, 210, 220, 100, 148, 213, 91, 15, 21, 29, 148, 135, 39, 113, 65, 216, 174, 200, 217, 248, 202, 83, 27, 207, 100, 144, 167, 94, 54, 156, 9, 34, 208, 244, 162, 219, 52, 179, 173, 43, 138, 127, 3, 123, 136, 197, 221, 156, 59, 78, 50, 59, 67, 245, 115, 158, 97, 237, 150, 249, 159, 178, 63, 196, 207, 215, 163, 81, 9, 15, 197, 175, 151, 242, 246, 92, 241, 235, 7, 194, 210, 213, 63, 40, 218, 83, 12, 34, 180, 207, 87, 72, 36, 121, 173, 79, 222, 211, 155, 123, 217, 67, 186, 185, 87, 108, 6, 158, 165, 146, 118, 176, 34, 168, 41, 16, 129, 81, 104, 208, 72, 130, 224, 31, 147, 198, 134, 143, 34, 186, 125, 255, 110, 216, 77, 74, 101, 159, 235, 218, 5, 179, 244, 153, 215, 48, 98, 249, 228, 130, 112, 86, 160, 83, 185, 237, 184, 17, 15, 113, 11, 157, 53, 64, 177, 255, 63, 66, 135, 8, 176, 38, 179, 1, 3, 16, 114, 67, 175, 168, 243, 157, 46, 78, 200, 165, 183, 156, 211, 87, 13, 198, 100, 76, 238, 107, 135, 207, 165, 83, 151, 163, 165, 164, 249, 192, 122, 103, 212, 230, 102, 194, 96, 18, 5, 142, 48, 115, 248, 90, 186, 104, 183, 169, 127, 130, 151, 241, 49, 180, 217, 4, 12, 255, 214, 174, 3, 72, 173, 241, 168, 76, 165, 31, 213, 233, 205, 85, 53, 197, 72, 87, 193, 247, 70, 56, 244, 60, 153, 51, 103, 12, 150, 184, 26, 233, 106, 77, 7, 166, 31, 101, 208, 174, 229, 99, 212, 143, 183, 199, 23, 121, 178, 246, 36, 27, 216, 71, 209, 46, 102, 39, 99, 197, 211, 180, 252, 8, 135, 127, 112, 118, 232, 140, 96, 205, 9, 172, 61, 60, 41, 216, 240, 134, 108, 183, 247, 85, 43, 100, 131, 213, 241, 154, 185, 42, 83, 230, 200, 164, 217, 120, 229, 106, 90, 46, 53, 177, 218, 186, 57, 84, 151, 199, 67, 240, 155, 114, 162, 234, 60, 33, 83, 109, 37, 8, 133, 154, 164, 18, 122, 252, 56, 121, 248, 246, 149, 60, 185, 90, 57, 80, 252, 112, 91, 64, 124, 63, 216, 106, 228, 248, 125, 132, 135, 120, 125, 72, 178, 192, 52, 213, 50, 137, 53, 7, 207, 221, 190, 255, 29, 171, 120, 23, 79, 152, 86, 52, 102, 237, 204, 22, 162, 194, 49, 94, 164, 126, 51, 158, 217, 94, 173, 167, 214, 55, 121, 9, 119, 14, 157, 203, 46, 64, 61, 106, 248, 236, 206, 60, 195, 102, 11, 247, 78, 141, 217, 34, 114, 91, 235, 58, 180, 67, 104, 249, 15, 33, 5, 8, 156, 239, 250, 165, 22, 43, 80, 18, 47, 17, 97, 32, 115, 233, 208, 233, 191, 243, 114, 63, 119, 94, 174, 127, 151, 12, 171, 68, 237, 146, 153, 208, 67, 249, 190, 100, 48, 24, 159, 170, 105, 146, 8, 177, 51, 168, 211, 139, 61, 121, 132, 116, 21, 145, 56, 62, 153, 215, 219, 9, 69, 120, 15, 243, 89, 242, 23, 220, 37, 2, 205, 186, 145, 41, 91, 37, 34, 236, 127, 239, 30, 145, 134, 45, 34, 230, 252, 73, 34, 195, 238, 5, 157, 168, 195, 23, 199, 124, 38, 217, 61, 78, 198, 105, 230, 12, 38, 246, 30, 81, 42, 202, 252, 254, 63, 71, 146, 249, 173, 130, 235, 16, 100, 67, 82, 123, 249, 149, 205, 113, 101, 88, 69, 52, 80, 219, 165, 131, 98, 54, 183, 58, 243, 104, 91, 190, 41, 168, 178, 166, 63, 0, 157, 100, 144, 226, 148, 35, 72, 254, 91, 45, 175, 211, 98, 158, 13, 145, 134, 132, 77, 10, 220, 110, 43, 168, 248, 4, 44, 191, 196, 163, 171, 88, 106, 32, 51, 132, 133, 135, 179, 68, 166, 86, 186, 35, 90, 155, 102, 182, 221, 253, 25, 110, 32, 199, 224, 107, 30, 27, 62, 116, 199, 218, 183, 17, 8, 138, 183, 80, 63, 209, 1, 79, 166, 150, 28, 158, 164, 163, 138, 200, 197, 51, 244, 194, 21, 164, 31, 206, 171, 196, 248, 234, 70, 238, 244, 99, 171, 8, 175, 158, 20, 162, 72, 54, 163, 46, 146, 164, 135, 15, 9, 93, 171, 143, 207, 148, 136, 1, 41, 229, 25, 171, 249, 70, 210, 224, 104, 173, 238, 89, 102, 131, 53, 194, 164, 131, 113, 86, 19, 123, 166, 91, 66, 190, 174, 188, 237, 236, 75, 187, 184, 29, 155, 162, 101, 50, 114, 250, 161, 198, 29, 100, 131, 233, 98, 200, 154, 119, 227, 179, 38, 107, 85, 210, 164, 232, 208, 172, 73, 209, 184, 107, 207, 193, 177, 226, 195, 245, 153, 147, 95, 54, 41, 18, 249, 168, 224, 127, 91, 57, 58, 135, 241, 76, 156, 187, 242, 207, 164, 200, 109, 153, 0, 151, 194, 159, 234, 77, 207, 157, 158, 120, 29, 217, 90, 39, 128, 31, 232, 7, 83, 215, 174, 184, 97, 170, 7, 121, 15, 163, 12, 59, 179, 141, 137, 61, 251, 62, 165, 196, 118, 99, 191, 198, 59, 235, 91, 222, 25, 251, 189, 143, 157, 178, 145, 72, 197, 24, 101, 6, 251, 136, 199, 139, 201, 9, 194, 216, 41, 28, 45, 225, 11, 178, 218, 70, 214, 117, 107, 40, 185, 28, 216, 178, 79, 86, 27, 21, 147, 70, 154, 41, 33, 253, 230, 133, 145, 29, 52, 135, 121, 164, 85, 50, 43, 37, 159, 13, 26, 139, 159, 168, 228, 213, 99, 139, 107, 137, 78, 94, 17, 201, 85, 138, 27, 105, 152, 137, 48, 163, 146, 9, 42, 8, 53, 158, 60, 95, 89, 44, 209, 73, 245, 12, 224, 69, 82, 9, 251, 215, 149, 61, 2, 190, 129, 58, 249, 6, 89, 31, 90, 142, 212, 104, 79, 2, 82, 130, 93, 143, 3, 18, 63, 65, 132, 252, 123, 40, 169, 143, 246, 177, 183, 26, 194, 39, 112, 142, 143, 42, 43, 211, 97, 137, 157, 87, 148, 108, 139, 19, 124, 82, 183, 86, 213, 60, 51, 174, 240, 51, 149, 93, 15, 204, 210, 161, 187, 247, 60, 72, 160, 168, 231, 40, 32, 248, 88, 199, 1, 193, 167, 118, 243, 161, 186, 116, 147, 163, 60, 181, 182, 32, 94, 18, 166, 137, 161, 67, 20, 32, 39, 226, 41, 0, 25, 109, 227, 83, 25, 59, 163, 12, 62, 109, 39, 120, 10, 159, 158, 228, 137, 58, 201, 76, 79, 193, 208, 236, 51, 37, 176, 223, 211, 70, 75, 229, 199, 115, 62, 72, 236, 156, 88, 203, 217, 240, 209, 109, 8, 164, 165, 81, 182, 168, 113, 65, 21, 178, 199, 95, 62, 71, 122, 153, 78, 18, 188, 162, 200, 229, 19, 175, 19, 138, 33, 89, 173, 37, 234, 50, 238, 138, 98, 29, 131, 87, 154, 61, 235, 186, 156, 89, 244, 58, 249, 218, 196, 83, 122, 204, 130, 225, 101, 205, 24, 250, 122, 212, 141, 176, 17, 23, 60, 12, 159, 174, 206, 121, 142, 33, 104, 164, 236, 42, 227, 41, 132, 77, 242, 17, 27, 70, 201, 20, 104, 133, 78, 50, 17, 50, 94, 92, 48, 139, 19, 206, 190, 90, 62, 191, 151, 63, 66, 190, 152, 41, 228, 183, 54, 23, 114, 221, 231, 53, 76, 35, 114, 103, 145, 182, 205, 7, 136, 230, 12, 65, 232, 15, 202, 39, 149, 88, 119, 232, 42, 244, 146, 63, 246, 74, 195, 125, 113, 79, 69, 249, 41, 229, 71, 190, 53, 100, 17, 72, 146, 119, 164, 79, 61, 136, 153, 47, 216, 223, 115, 92, 5, 221, 198, 67, 38, 137, 113, 17, 108, 233, 3, 133, 99, 183, 6, 199, 219, 132, 205, 149, 146, 108, 144, 52, 163, 185, 91, 71, 74, 58, 27, 54, 99, 184, 179, 167, 190, 221, 174, 193, 245, 52, 41, 216, 228, 186, 30, 221, 229, 82, 157, 104, 245, 103, 243, 210, 95, 107, 90, 150, 94, 74, 70, 245, 255, 156, 124, 146, 232, 81, 157, 53, 173, 110, 34, 242, 96, 20, 42, 12, 71, 47, 169, 96, 155, 74, 77, 225, 119, 163, 124, 191, 108, 115, 209, 241, 212, 117, 20, 189, 158, 199, 191, 47, 194, 34, 181, 18, 215, 120, 140, 144, 227, 85, 117, 69, 252, 30, 165, 215, 228, 153, 102, 33, 23, 19, 161, 167, 248, 29, 197, 16, 144, 46, 117, 48, 21, 129, 109, 108, 238, 26, 248, 223, 196, 183, 150, 236, 111, 48, 12, 156, 14, 62, 152, 178, 55, 205, 201, 77, 18, 205, 125, 98, 202, 160, 40, 50, 83, 59, 68, 159, 95, 230, 49, 115, 108, 179, 234, 126, 55, 108, 11, 250, 218, 22, 220, 119, 203, 46, 26, 10, 239, 122, 171, 235, 223, 171, 41, 114, 219, 95, 75, 109, 153, 59, 222, 106, 110, 239, 214, 20, 185, 235, 175, 166, 182, 204, 61, 183, 204, 104, 154, 199, 245, 133, 190, 13, 20, 186, 119, 199, 95, 104, 5, 139, 185, 164, 173, 108, 30, 74, 62, 143, 224, 61, 201, 206, 155, 228, 142, 22, 80, 81, 174, 101, 196, 173, 148, 7, 221, 126, 25, 86, 215, 14, 183, 215, 192, 101, 169, 60, 128, 20, 194, 132, 181, 34, 10, 87, 165, 32, 71, 240, 188, 5, 252, 29, 4, 127, 209, 2, 254, 62, 130, 255, 212, 2, 190, 175, 18, 142, 37, 139, 25, 47, 158, 11, 232, 179, 59, 192, 216, 167, 192, 130, 238, 70, 247, 172, 23, 157, 247, 162, 139, 94, 244, 201, 177, 1, 110, 211, 61, 138, 86, 219, 116, 63, 252, 125, 63, 101, 247, 238, 156, 237, 218, 148, 25, 154, 118, 12, 77, 229, 142, 170, 196, 107, 50, 45, 138, 202, 126, 19, 52, 185, 215, 110, 183, 9, 122, 23, 67, 223, 110, 130, 190, 141, 161, 239, 52, 65, 99, 161, 40, 239, 54, 65, 227, 28, 208, 242, 94, 19, 244, 61, 12, 253, 109, 19, 244, 183, 24, 250, 126, 19, 52, 22, 206, 242, 187, 38, 232, 239, 72, 239, 52, 118, 102, 159, 246, 102, 115, 119, 146, 254, 236, 55, 118, 104, 159, 244, 104, 191, 177, 75, 251, 164, 79, 251, 141, 157, 218, 39, 189, 218, 111, 236, 214, 254, 93, 71, 63, 152, 21, 187, 127, 214, 191, 135, 181, 163, 132, 203, 138, 225, 238, 147, 93, 246, 255, 109, 246, 255, 29, 246, 255, 93, 246, 255, 61, 246, 255, 183, 45, 178, 44, 203, 251, 12, 240, 59, 64, 194, 49, 1, 170, 62, 224, 234, 3, 178, 62, 96, 147, 132, 224, 33, 196, 81, 63, 143, 47, 81, 167, 127, 126, 240, 221, 144, 2, 250, 193, 239, 132, 52, 208, 15, 126, 47, 164, 130, 126, 240, 251, 33, 29, 244, 131, 83, 233, 188, 215, 12, 191, 27, 210, 195, 0, 252, 29, 159, 52, 244, 239, 157, 221, 111, 47, 13, 206, 168, 78, 44, 187, 223, 85, 11, 217, 245, 32, 180, 119, 64, 11, 66, 123, 135, 179, 32, 180, 103, 48, 227, 3, 123, 237, 80, 182, 180, 75, 178, 140, 67, 114, 24, 14, 183, 244, 248, 237, 15, 98, 145, 81, 156, 238, 198, 157, 138, 27, 16, 81, 161, 244, 215, 207, 152, 48, 253, 152, 247, 182, 40, 81, 156, 141, 254, 176, 203, 28, 47, 242, 187, 94, 130, 107, 60, 192, 70, 140, 200, 167, 81, 9, 83, 81, 183, 37, 47, 191, 219, 216, 64, 9, 232, 208, 145, 148, 48, 177, 52, 44, 129, 167, 42, 209, 180, 134, 66, 21, 244, 51, 52, 162, 16, 62, 246, 62, 233, 218, 129, 139, 0, 197, 253, 69, 178, 99, 50, 29, 254, 204, 24, 76, 246, 239, 136, 210, 245, 78, 48, 42, 207, 213, 105, 9, 4, 223, 217, 8, 68, 238, 193, 18, 24, 250, 206, 161, 38, 232, 210, 28, 211, 38, 21, 222, 165, 183, 231, 144, 118, 179, 98, 6, 254, 40, 213, 209, 109, 218, 56, 5, 37, 90, 234, 3, 211, 25, 34, 184, 65, 62, 64, 21, 42, 215, 93, 115, 164, 235, 215, 192, 150, 217, 48, 85, 187, 66, 194, 108, 29, 170, 177, 103, 26, 211, 67, 213, 121, 50, 35, 148, 189, 179, 3, 213, 187, 30, 71, 64, 68, 174, 145, 48, 121, 96, 154, 110, 146, 86, 29, 183, 17, 12, 201, 172, 162, 22, 198, 78, 6, 69, 222, 78, 73, 224, 75, 213, 10, 70, 165, 66, 194, 242, 225, 20, 109, 161, 242, 21, 210, 91, 105, 119, 240, 130, 2, 100, 252, 40, 17, 89, 65, 127, 160, 248, 161, 184, 25, 187, 193, 178, 232, 138, 122, 100, 138, 0, 143, 181, 236, 9, 6, 133, 53, 195, 171, 14, 150, 176, 161, 122, 12, 231, 77, 45, 234, 58, 78, 35, 190, 169, 185, 5, 17, 17, 179, 249, 72, 183, 205, 8, 223, 165, 25, 47, 253, 167, 100, 175, 48, 212, 44, 23, 38, 85, 49, 210, 235, 138, 173, 28, 86, 121, 145, 248, 29, 245, 144, 135, 221, 69, 34, 43, 238, 102, 253, 134, 223, 42, 27, 138, 198, 136, 42, 252, 193, 191, 160, 23, 79, 42, 121, 252, 248, 177, 175, 154, 251, 102, 192, 59, 101, 188, 217, 159, 198, 179, 249, 187, 252, 23, 94, 209, 166, 127, 176, 172, 109, 111, 116, 26, 10, 14, 233, 82, 30, 15, 182, 93, 19, 16, 159, 112, 19, 110, 7, 56, 181, 76, 61, 53, 188, 194, 85, 221, 241, 183, 200, 227, 142, 182, 111, 81, 40, 66, 106, 26, 178, 12, 122, 95, 67, 66, 241, 84, 81, 67, 40, 58, 212, 139, 172, 254, 247, 4, 87, 17, 6, 79, 16, 199, 193, 112, 205, 225, 191, 213, 60, 203, 107, 15, 189, 10, 38, 249, 98, 175, 126, 55, 215, 158, 73, 171, 27, 155, 76, 199, 234, 93, 175, 209, 247, 166, 44, 79, 7, 118, 199, 67, 143, 230, 6, 162, 186, 138, 154, 83, 74, 137, 79, 139, 3, 49, 94, 133, 65, 159, 6, 103, 209, 113, 253, 253, 223, 214, 249, 175, 245, 33, 120, 62, 167, 154, 126, 225, 37, 50, 219, 205, 104, 227, 71, 181, 243, 164, 150, 243, 165, 36, 233, 194, 49, 125, 246, 251, 34, 61, 85, 175, 17, 181, 102, 206, 139, 200, 254, 210, 116, 175, 77, 207, 168, 237, 143, 26, 108, 25, 132, 41, 122, 52, 24, 174, 155, 213, 83, 22, 178, 21, 154, 59, 97, 52, 119, 150, 64, 115, 63, 140, 230, 254, 18, 104, 32, 20, 23, 194, 211, 223, 53, 136, 208, 4, 16, 143, 99, 81, 131, 1, 183, 217, 198, 64, 26, 217, 22, 8, 230, 135, 209, 220, 15, 147, 185, 67, 201, 12, 198, 241, 123, 40, 84, 90, 71, 96, 48, 150, 26, 64, 208, 111, 139, 96, 55, 128, 96, 183, 45, 130, 219, 1, 4, 183, 219, 34, 184, 19, 64, 224, 8, 101, 112, 153, 32, 128, 224, 110, 91, 4, 247, 2, 8, 238, 181, 69, 240, 109, 0, 193, 183, 109, 17, 220, 15, 32, 112, 52, 42, 184, 228, 16, 64, 240, 93, 107, 65, 10, 137, 98, 191, 189, 44, 6, 133, 177, 181, 52, 246, 67, 226, 216, 111, 45, 143, 253, 144, 64, 246, 91, 75, 100, 63, 36, 146, 253, 214, 50, 217, 15, 9, 101, 255, 110, 216, 104, 244, 29, 163, 17, 88, 125, 232, 225, 152, 122, 131, 217, 8, 172, 72, 132, 80, 248, 248, 28, 88, 165, 8, 161, 240, 49, 41, 176, 114, 17, 66, 225, 211, 188, 192, 106, 70, 8, 133, 79, 117, 66, 43, 28, 33, 28, 94, 217, 15, 45, 123, 4, 145, 180, 103, 105, 63, 200, 83, 44, 121, 182, 216, 236, 58, 98, 83, 239, 71, 8, 128, 6, 177, 169, 247, 33, 28, 20, 190, 62, 175, 247, 31, 28, 20, 190, 14, 107, 240, 29, 28, 28, 1, 207, 65, 238, 54, 83, 124, 90, 234, 35, 188, 127, 228, 182, 239, 231, 217, 105, 82, 84, 79, 178, 33, 220, 142, 250, 46, 7, 127, 175, 18, 33, 168, 26, 252, 0, 164, 92, 220, 38, 184, 215, 13, 19, 229, 8, 133, 77, 235, 128, 180, 251, 251, 213, 50, 65, 167, 7, 203, 114, 73, 123, 245, 254, 197, 31, 220, 242, 250, 5, 32, 119, 249, 73, 242, 149, 114, 15, 243, 136, 4, 144, 209, 92, 20, 245, 23, 28, 53, 114, 46, 55, 38, 249, 187, 73, 188, 11, 246, 142, 120, 253, 186, 109, 154, 99, 59, 254, 53, 48, 141, 146, 84, 207, 54, 111, 194, 45, 105, 176, 221, 66, 218, 36, 103, 82, 202, 11, 241, 201, 89, 60, 77, 178, 170, 155, 87, 39, 73, 193, 31, 250, 102, 159, 102, 35, 33, 158, 120, 138, 249, 27, 58, 175, 211, 38, 254, 219, 239, 204, 116, 208, 236, 8, 71, 53, 249, 49, 34, 136, 90, 188, 146, 41, 120, 162, 41, 182, 37, 34, 4, 161, 217, 184, 58, 11, 52, 157, 37, 89, 9, 27, 2, 178, 228, 19, 127, 246, 78, 79, 226, 218, 176, 96, 136, 223, 46, 193, 4, 90, 155, 159, 13, 4, 166, 22, 55, 79, 177, 157, 14, 53, 180, 218, 38, 105, 79, 181, 245, 245, 238, 178, 128, 220, 55, 40, 139, 96, 12, 46, 208, 190, 60, 252, 163, 175, 26, 211, 48, 67, 198, 216, 96, 248, 137, 190, 126, 196, 70, 144, 186, 86, 200, 205, 75, 205, 120, 17, 217, 28, 51, 196, 155, 238, 40, 173, 181, 41, 254, 219, 35, 171, 165, 100, 131, 133, 143, 9, 24, 54, 49, 223, 85, 136, 72, 238, 146, 160, 197, 112, 95, 61, 112, 128, 8, 239, 218, 53, 147, 214, 32, 155, 105, 90, 105, 227, 254, 219, 35, 139, 38, 210, 74, 31, 185, 13, 173, 132, 30, 182, 89, 201, 15, 223, 163, 21, 43, 122, 2, 93, 170, 48, 145, 96, 144, 221, 131, 148, 152, 141, 22, 40, 219, 26, 223, 218, 132, 125, 220, 101, 106, 63, 179, 117, 45, 2, 196, 235, 222, 192, 249, 34, 135, 38, 162, 40, 200, 107, 21, 90, 237, 200, 148, 167, 78, 96, 217, 164, 35, 147, 96, 204, 251, 93, 231, 61, 228, 135, 152, 247, 116, 49, 161, 163, 147, 33, 13, 196, 29, 15, 4, 36, 37, 118, 150, 141, 112, 54, 134, 54, 129, 57, 192, 59, 189, 251, 107, 73, 238, 244, 239, 5, 216, 114, 159, 178, 195, 211, 240, 59, 129, 230, 238, 94, 79, 35, 243, 67, 62, 148, 118, 215, 58, 44, 244, 162, 206, 225, 193, 171, 167, 29, 246, 183, 146, 21, 116, 244, 142, 44, 98, 168, 135, 114, 45, 183, 222, 164, 183, 48, 201, 58, 171, 6, 108, 241, 221, 171, 146, 5, 207, 138, 100, 94, 44, 25, 44, 133, 162, 115, 163, 83, 112, 126, 132, 71, 203, 0, 177, 19, 91, 229, 15, 181, 115, 38, 69, 138, 56, 107, 58, 87, 207, 217, 56, 10, 141, 250, 32, 245, 241, 67, 114, 86, 21, 241, 160, 122, 25, 103, 137, 90, 60, 54, 250, 111, 97, 219, 93, 29, 91, 223, 197, 118, 123, 117, 108, 187, 46, 182, 59, 171, 99, 187, 237, 98, 187, 187, 58, 182, 59, 46, 182, 123, 171, 99, 187, 235, 98, 251, 118, 117, 108, 247, 92, 108, 247, 87, 199, 246, 173, 139, 237, 187, 181, 202, 27, 207, 37, 94, 159, 192, 245, 175, 160, 13, 30, 137, 235, 95, 65, 29, 60, 34, 215, 191, 130, 62, 120, 100, 174, 127, 5, 133, 240, 8, 93, 255, 10, 26, 225, 145, 186, 254, 21, 84, 130, 138, 157, 28, 178, 254, 31, 148, 221, 254, 143, 63, 144, 57, 189, 236, 254, 199, 31, 101, 255, 178, 23, 177, 63, 187, 226, 207, 109, 241, 231, 142, 248, 115, 87, 252, 185, 39, 254, 124, 43, 254, 220, 23, 127, 190, 19, 127, 250, 59, 242, 175, 196, 211, 151, 136, 250, 18, 83, 95, 162, 234, 75, 92, 253, 123, 151, 27, 255, 79, 145, 119, 137, 173, 115, 127, 89, 235, 12, 222, 208, 250, 172, 115, 61, 182, 101, 173, 115, 61, 182, 101, 173, 115, 61, 182, 101, 173, 115, 61, 182, 101, 173, 115, 61, 182, 101, 173, 115, 61, 182, 101, 173, 115, 61, 182, 235, 86, 147, 128, 156, 239, 186, 114, 126, 86, 215, 8, 112, 217, 151, 17, 243, 243, 213, 145, 185, 82, 126, 177, 58, 50, 87, 200, 63, 173, 142, 236, 246, 18, 125, 117, 198, 59, 224, 156, 255, 123, 193, 255, 253, 20, 234, 139, 219, 203, 244, 133, 158, 64, 173, 167, 55, 90, 160, 91, 166, 63, 90, 160, 91, 166, 71, 90, 160, 187, 166, 62, 185, 179, 116, 159, 192, 148, 117, 141, 125, 82, 143, 174, 191, 66, 171, 105, 75, 91, 207, 57, 209, 132, 243, 214, 247, 183, 200, 84, 211, 201, 151, 233, 247, 196, 212, 111, 119, 201, 132, 210, 54, 52, 172, 21, 153, 108, 80, 171, 92, 155, 62, 176, 155, 71, 236, 90, 129, 239, 58, 7, 227, 113, 54, 173, 48, 37, 111, 12, 86, 203, 115, 233, 172, 153, 111, 135, 231, 155, 117, 54, 150, 104, 167, 17, 42, 68, 182, 56, 0, 230, 36, 47, 170, 147, 56, 27, 118, 183, 183, 183, 135, 233, 172, 92, 127, 172, 93, 29, 106, 197, 200, 67, 241, 130, 87, 249, 112, 49, 77, 186, 58, 80, 0, 117, 155, 51, 119, 213, 137, 116, 53, 40, 249, 141, 72, 232, 180, 25, 146, 202, 141, 177, 193, 77, 62, 236, 161, 184, 179, 41, 221, 218, 18, 152, 85, 113, 56, 84, 230, 221, 182, 14, 187, 117, 249, 243, 30, 71, 160, 146, 182, 241, 21, 76, 52, 20, 83, 229, 69, 60, 78, 94, 143, 112, 128, 37, 135, 227, 101, 21, 15, 201, 161, 179, 248, 68, 68, 197, 72, 247, 200, 137, 92, 47, 188, 152, 35, 106, 152, 101, 120, 224, 20, 125, 87, 196, 89, 57, 143, 11, 25, 165, 28, 122, 106, 170, 93, 236, 193, 21, 249, 120, 125, 223, 24, 161, 198, 152, 79, 174, 15, 227, 20, 192, 199, 231, 85, 162, 207, 45, 109, 23, 139, 49, 134, 94, 182, 250, 15, 121, 250, 237, 30, 174, 18, 157, 126, 235, 172, 152, 153, 74, 247, 208, 119, 47, 152, 88, 131, 162, 152, 233, 249, 166, 209, 165, 32, 71, 217, 82, 175, 36, 90, 11, 57, 109, 5, 1, 78, 253, 243, 197, 230, 76, 143, 184, 139, 107, 46, 175, 155, 245, 10, 71, 170, 242, 81, 164, 9, 146, 99, 96, 39, 231, 37, 58, 123, 186, 186, 109, 129, 3, 173, 242, 119, 84, 3, 235, 161, 68, 126, 43, 134, 17, 150, 8, 195, 100, 252, 2, 23, 12, 35, 147, 219, 48, 144, 142, 121, 98, 184, 39, 217, 57, 93, 81, 119, 94, 93, 214, 173, 169, 193, 239, 31, 22, 233, 116, 216, 141, 123, 199, 189, 193, 245, 88, 184, 73, 202, 15, 32, 110, 144, 117, 236, 44, 168, 222, 129, 146, 40, 36, 125, 199, 108, 81, 147, 253, 22, 243, 193, 201, 244, 132, 101, 29, 120, 211, 120, 155, 15, 147, 223, 15, 102, 243, 169, 172, 5, 254, 221, 86, 251, 131, 216, 32, 23, 75, 5, 227, 7, 131, 186, 232, 101, 247, 128, 108, 202, 23, 199, 107, 168, 55, 238, 69, 199, 173, 234, 85, 200, 3, 44, 22, 197, 235, 97, 72, 190, 69, 112, 173, 166, 65, 80, 248, 217, 151, 64, 117, 47, 186, 38, 73, 89, 100, 60, 185, 228, 32, 155, 47, 96, 5, 206, 160, 142, 195, 81, 251, 88, 143, 147, 184, 52, 217, 98, 117, 54, 159, 166, 131, 180, 122, 154, 204, 197, 38, 204, 99, 121, 93, 162, 25, 56, 40, 8, 191, 174, 202, 156, 70, 111, 143, 57, 175, 226, 249, 47, 162, 42, 213, 187, 177, 62, 170, 223, 238, 80, 132, 231, 120, 9, 60, 199, 173, 123, 246, 18, 159, 102, 235, 109, 45, 21, 89, 37, 83, 171, 183, 253, 157, 69, 241, 241, 170, 141, 183, 17, 245, 125, 173, 119, 73, 92, 131, 58, 212, 138, 58, 220, 127, 205, 117, 243, 26, 242, 10, 248, 82, 12, 131, 106, 181, 238, 175, 29, 20, 254, 156, 185, 39, 218, 19, 83, 40, 154, 147, 24, 86, 51, 100, 129, 62, 18, 189, 35, 133, 84, 172, 196, 138, 174, 10, 216, 175, 101, 176, 246, 49, 86, 161, 211, 109, 252, 10, 43, 65, 4, 46, 105, 254, 203, 244, 93, 236, 30, 136, 172, 249, 251, 181, 135, 191, 117, 249, 38, 139, 138, 25, 69, 73, 185, 162, 192, 206, 36, 144, 253, 35, 216, 232, 233, 34, 131, 68, 15, 94, 53, 189, 241, 60, 157, 86, 112, 90, 55, 123, 255, 151, 232, 13, 201, 122, 104, 207, 50, 220, 151, 76, 21, 220, 240, 48, 149, 243, 135, 48, 242, 231, 95, 94, 125, 248, 225, 31, 239, 158, 29, 118, 143, 211, 170, 164, 231, 217, 193, 19, 126, 86, 78, 244, 248, 113, 116, 155, 206, 184, 158, 189, 251, 240, 195, 193, 187, 238, 48, 174, 88, 231, 164, 252, 128, 116, 189, 31, 237, 83, 94, 128, 11, 198, 159, 202, 162, 234, 248, 213, 18, 142, 8, 237, 195, 229, 3, 93, 241, 26, 182, 42, 138, 208, 44, 160, 58, 130, 162, 239, 163, 63, 31, 113, 80, 82, 227, 139, 245, 215, 168, 218, 137, 106, 254, 134, 151, 224, 171, 224, 244, 94, 79, 215, 201, 138, 77, 134, 8, 115, 178, 32, 32, 51, 7, 71, 203, 136, 224, 245, 126, 244, 124, 157, 15, 164, 15, 225, 170, 102, 38, 223, 93, 241, 91, 110, 57, 5, 201, 145, 191, 255, 168, 119, 198, 4, 183, 254, 16, 71, 60, 179, 246, 30, 206, 99, 56, 162, 124, 92, 196, 105, 38, 179, 96, 242, 42, 158, 138, 153, 220, 101, 244, 136, 99, 219, 207, 103, 76, 69, 147, 3, 82, 8, 243, 69, 178, 68, 157, 20, 11, 85, 20, 234, 14, 27, 152, 239, 107, 208, 174, 126, 207, 250, 40, 29, 120, 14, 177, 150, 207, 117, 100, 66, 224, 118, 226, 13, 114, 235, 184, 120, 137, 119, 142, 203, 242, 71, 233, 251, 72, 158, 169, 175, 26, 173, 219, 8, 231, 227, 178, 142, 229, 183, 38, 96, 253, 61, 76, 225, 41, 39, 83, 195, 106, 122, 203, 86, 219, 225, 17, 31, 111, 99, 51, 169, 247, 194, 239, 232, 150, 160, 86, 32, 150, 147, 182, 112, 231, 149, 97, 127, 189, 168, 222, 192, 189, 140, 137, 21, 14, 192, 199, 87, 162, 154, 5, 235, 123, 166, 222, 246, 119, 85, 170, 143, 203, 171, 13, 53, 105, 172, 57, 141, 91, 242, 190, 103, 17, 45, 139, 114, 169, 240, 197, 104, 213, 143, 15, 241, 124, 62, 61, 23, 154, 69, 14, 210, 151, 120, 27, 72, 200, 231, 54, 36, 191, 235, 210, 58, 132, 93, 185, 112, 134, 139, 144, 131, 92, 203, 61, 25, 40, 86, 237, 56, 200, 6, 5, 31, 225, 44, 125, 208, 173, 167, 202, 37, 75, 25, 33, 216, 124, 196, 133, 73, 137, 166, 52, 78, 162, 218, 7, 52, 3, 189, 189, 218, 125, 6, 67, 100, 127, 214, 26, 67, 190, 70, 228, 218, 226, 16, 62, 186, 134, 135, 188, 246, 216, 31, 10, 112, 180, 195, 239, 13, 79, 50, 237, 54, 24, 37, 166, 47, 180, 108, 69, 143, 140, 33, 180, 189, 36, 98, 220, 250, 65, 227, 38, 143, 236, 113, 28, 14, 99, 175, 232, 129, 50, 252, 249, 75, 126, 186, 184, 6, 177, 14, 191, 183, 154, 197, 237, 166, 42, 166, 96, 112, 219, 254, 230, 190, 198, 45, 52, 213, 88, 45, 180, 38, 149, 53, 51, 45, 235, 76, 142, 63, 44, 18, 247, 172, 223, 196, 186, 233, 234, 247, 208, 152, 134, 1, 80, 83, 246, 72, 187, 46, 233, 229, 231, 75, 42, 249, 90, 244, 79, 73, 76, 38, 92, 28, 60, 14, 110, 145, 196, 97, 124, 185, 131, 26, 240, 178, 247, 96, 89, 250, 198, 242, 161, 23, 15, 237, 94, 206, 222, 251, 142, 110, 90, 75, 3, 8, 69, 250, 90, 27, 113, 135, 14, 190, 150, 7, 87, 156, 69, 91, 146, 116, 50, 135, 118, 67, 25, 105, 38, 175, 98, 198, 179, 134, 89, 124, 126, 156, 60, 191, 14, 119, 236, 218, 77, 156, 108, 79, 132, 239, 87, 200, 236, 27, 149, 175, 169, 106, 235, 122, 68, 195, 69, 255, 22, 124, 207, 205, 136, 168, 136, 18, 93, 62, 145, 121, 100, 222, 32, 31, 72, 219, 70, 211, 119, 200, 20, 73, 160, 23, 200, 148, 32, 56, 203, 150, 56, 14, 166, 1, 237, 98, 183, 235, 151, 44, 173, 218, 157, 99, 132, 171, 182, 124, 183, 23, 75, 248, 141, 24, 188, 193, 255, 179, 60, 89, 205, 32, 199, 224, 167, 76, 74, 148, 160, 80, 235, 46, 185, 194, 173, 5, 127, 109, 157, 236, 149, 47, 170, 176, 195, 72, 91, 188, 186, 207, 232, 229, 16, 89, 155, 226, 231, 148, 49, 89, 232, 38, 234, 142, 170, 180, 23, 97, 77, 214, 208, 53, 14, 155, 227, 178, 53, 209, 111, 121, 109, 151, 174, 23, 134, 4, 164, 217, 25, 179, 227, 75, 154, 126, 233, 132, 97, 131, 244, 185, 166, 134, 158, 207, 181, 90, 172, 47, 82, 235, 114, 243, 223, 166, 224, 78, 154, 153, 136, 21, 252, 161, 43, 136, 216, 246, 122, 230, 201, 123, 105, 118, 16, 154, 56, 179, 119, 90, 28, 235, 231, 205, 154, 4, 45, 59, 178, 90, 124, 99, 14, 13, 107, 33, 220, 161, 165, 16, 12, 210, 200, 133, 240, 252, 127, 143, 170, 85, 235, 96, 0, 22, 127, 71, 35, 112, 195, 26, 102, 241, 200, 123, 57, 112, 28, 83, 232, 102, 199, 93, 109, 8, 220, 183, 26, 42, 16, 243, 90, 24, 121, 204, 234, 117, 142, 19, 105, 70, 135, 9, 239, 216, 193, 1, 75, 190, 100, 209, 23, 8, 213, 28, 5, 188, 171, 62, 191, 223, 174, 235, 109, 15, 147, 155, 176, 173, 22, 245, 163, 241, 210, 170, 227, 123, 166, 118, 123, 77, 131, 40, 170, 214, 26, 67, 175, 136, 216, 55, 58, 155, 108, 160, 28, 217, 102, 129, 91, 95, 3, 234, 147, 182, 80, 180, 197, 30, 83, 233, 184, 73, 27, 167, 173, 191, 234, 179, 141, 127, 143, 187, 254, 113, 55, 50, 98, 189, 249, 8, 137, 152, 122, 91, 55, 34, 91, 119, 107, 169, 81, 89, 60, 174, 235, 127, 33, 91, 102, 140, 70, 93, 174, 194, 75, 2, 217, 234, 114, 162, 153, 107, 92, 47, 202, 95, 124, 219, 75, 11, 46, 11, 122, 196, 244, 187, 184, 74, 227, 127, 38, 119, 224, 210, 48, 235, 47, 252, 36, 5, 117, 158, 233, 92, 223, 206, 246, 191, 90, 77, 226, 98, 12, 252, 57, 146, 77, 210, 30, 116, 99, 156, 210, 14, 127, 2, 34, 59, 4, 217, 16, 49, 85, 69, 60, 58, 185, 100, 184, 244, 52, 79, 135, 112, 244, 7, 96, 188, 249, 122, 189, 106, 20, 181, 70, 37, 184, 211, 64, 198, 22, 178, 62, 124, 37, 43, 65, 125, 80, 158, 229, 209, 128, 187, 139, 23, 158, 188, 74, 106, 29, 94, 225, 172, 142, 198, 110, 160, 67, 208, 148, 50, 78, 166, 241, 244, 243, 79, 48, 62, 247, 220, 66, 47, 189, 84, 113, 81, 201, 83, 31, 85, 79, 72, 38, 88, 119, 207, 51, 231, 39, 70, 158, 52, 179, 98, 253, 198, 21, 216, 160, 131, 38, 217, 78, 178, 72, 189, 213, 154, 158, 224, 148, 70, 58, 10, 23, 233, 147, 49, 57, 85, 71, 59, 239, 189, 129, 80, 85, 106, 199, 46, 133, 92, 85, 213, 233, 88, 13, 136, 213, 230, 72, 132, 229, 198, 44, 64, 94, 181, 23, 47, 31, 194, 78, 197, 169, 58, 177, 28, 199, 54, 220, 20, 160, 171, 180, 221, 114, 186, 21, 43, 54, 150, 227, 133, 172, 125, 45, 237, 247, 54, 218, 10, 1, 72, 105, 67, 58, 234, 89, 108, 151, 58, 250, 101, 230, 251, 215, 160, 142, 74, 227, 244, 50, 133, 119, 150, 28, 235, 57, 114, 56, 3, 66, 99, 104, 158, 140, 38, 228, 88, 138, 224, 10, 9, 143, 46, 78, 227, 49, 246, 101, 238, 11, 87, 198, 228, 54, 224, 174, 55, 65, 201, 129, 60, 123, 67, 79, 160, 218, 45, 230, 38, 248, 132, 138, 219, 193, 105, 154, 207, 121, 114, 69, 16, 249, 100, 167, 174, 215, 68, 170, 138, 189, 62, 19, 63, 33, 158, 11, 46, 247, 51, 69, 39, 24, 169, 83, 137, 26, 156, 69, 12, 194, 248, 31, 208, 120, 122, 215, 59, 30, 185, 241, 82, 100, 115, 130, 179, 153, 77, 203, 238, 178, 179, 249, 73, 67, 120, 213, 254, 89, 184, 65, 210, 245, 132, 5, 122, 209, 199, 22, 188, 4, 142, 188, 176, 155, 109, 150, 23, 184, 63, 253, 113, 115, 243, 189, 182, 191, 34, 58, 90, 31, 231, 251, 45, 137, 39, 204, 29, 250, 16, 15, 135, 194, 68, 224, 158, 59, 140, 60, 151, 237, 74, 173, 56, 20, 145, 153, 131, 82, 98, 96, 15, 176, 119, 207, 235, 35, 190, 28, 68, 222, 37, 172, 184, 90, 252, 96, 244, 91, 193, 47, 23, 86, 25, 139, 210, 68, 117, 16, 77, 42, 197, 114, 202, 122, 143, 241, 185, 72, 233, 21, 25, 193, 220, 103, 73, 173, 44, 18, 188, 17, 248, 182, 169, 13, 54, 190, 64, 133, 250, 228, 135, 195, 13, 95, 179, 79, 201, 61, 30, 14, 194, 59, 187, 238, 178, 193, 41, 62, 247, 217, 113, 111, 161, 122, 230, 46, 125, 224, 62, 167, 164, 87, 179, 130, 47, 124, 61, 192, 190, 215, 161, 183, 247, 6, 211, 36, 46, 186, 95, 176, 235, 58, 132, 146, 207, 219, 107, 162, 74, 167, 223, 130, 156, 230, 240, 154, 215, 148, 189, 254, 35, 81, 84, 227, 134, 76, 221, 171, 228, 198, 233, 137, 32, 235, 243, 50, 93, 214, 185, 164, 182, 216, 55, 122, 248, 57, 128, 59, 75, 212, 99, 107, 198, 134, 183, 123, 78, 226, 242, 198, 245, 13, 163, 233, 243, 118, 12, 84, 120, 237, 189, 194, 42, 241, 117, 201, 255, 15, 194, 227, 229, 184 };
+ static const unsigned char data[] = { 120, 156, 237, 189, 105, 123, 219, 70, 178, 40, 252, 61, 191, 2, 225, 115, 78, 76, 141, 40, 29, 81, 94, 98, 203, 75, 174, 35, 47, 209, 137, 183, 215, 114, 146, 153, 209, 245, 241, 133, 72, 144, 130, 73, 2, 12, 0, 202, 162, 18, 253, 247, 183, 171, 215, 170, 94, 0, 144, 146, 109, 77, 206, 240, 177, 69, 162, 81, 93, 93, 93, 93, 85, 93, 93, 189, 157, 198, 69, 84, 86, 195, 15, 143, 139, 34, 94, 126, 72, 179, 97, 114, 246, 122, 20, 61, 140, 248, 243, 129, 120, 188, 255, 205, 169, 132, 58, 172, 138, 52, 27, 127, 40, 23, 199, 37, 255, 197, 0, 237, 36, 3, 252, 91, 18, 79, 94, 198, 115, 6, 35, 127, 97, 60, 249, 252, 160, 74, 138, 184, 74, 243, 140, 35, 65, 207, 6, 140, 229, 249, 144, 242, 228, 188, 248, 144, 37, 103, 21, 3, 101, 105, 7, 50, 233, 21, 75, 185, 255, 205, 104, 145, 13, 56, 154, 23, 105, 89, 117, 55, 162, 63, 190, 137, 216, 167, 58, 73, 203, 237, 105, 146, 141, 171, 19, 150, 105, 231, 254, 55, 23, 223, 188, 140, 39, 201, 126, 158, 49, 50, 23, 44, 195, 241, 52, 233, 66, 142, 94, 244, 199, 135, 15, 243, 34, 175, 242, 15, 31, 246, 162, 108, 49, 157, 94, 108, 32, 164, 111, 147, 65, 94, 12, 53, 218, 34, 169, 22, 69, 198, 137, 123, 125, 252, 49, 25, 84, 31, 6, 69, 18, 87, 73, 23, 50, 110, 248, 75, 17, 40, 88, 57, 4, 241, 79, 113, 249, 166, 200, 231, 73, 81, 45, 187, 121, 47, 154, 91, 37, 204, 163, 52, 139, 114, 64, 168, 115, 188, 203, 127, 204, 243, 105, 18, 103, 221, 83, 11, 248, 219, 111, 79, 45, 200, 87, 139, 217, 113, 82, 56, 128, 155, 20, 238, 109, 242, 251, 34, 45, 18, 81, 147, 253, 60, 41, 6, 156, 96, 157, 43, 29, 69, 221, 211, 232, 225, 195, 135, 209, 130, 73, 194, 40, 205, 146, 97, 244, 231, 159, 145, 72, 226, 53, 230, 96, 240, 121, 119, 82, 228, 159, 222, 45, 231, 201, 211, 162, 200, 139, 110, 127, 183, 199, 168, 16, 178, 193, 240, 245, 162, 78, 206, 11, 233, 108, 88, 132, 190, 224, 77, 100, 138, 100, 184, 89, 234, 65, 86, 37, 99, 78, 255, 125, 68, 200, 3, 214, 144, 166, 68, 89, 165, 157, 251, 118, 195, 188, 140, 171, 147, 15, 179, 148, 177, 169, 23, 237, 156, 245, 71, 248, 67, 139, 63, 140, 103, 201, 175, 241, 116, 145, 252, 51, 41, 242, 238, 89, 47, 90, 90, 252, 58, 227, 53, 93, 66, 165, 187, 103, 209, 183, 236, 247, 89, 244, 221, 119, 44, 1, 126, 46, 41, 178, 231, 73, 245, 50, 169, 78, 242, 97, 247, 117, 47, 122, 163, 16, 9, 234, 64, 160, 1, 144, 87, 78, 176, 187, 251, 122, 227, 232, 205, 123, 83, 61, 241, 218, 102, 181, 78, 165, 220, 150, 228, 105, 80, 131, 230, 219, 131, 114, 63, 158, 78, 99, 104, 71, 200, 188, 17, 110, 162, 157, 94, 84, 177, 167, 124, 196, 75, 217, 32, 124, 132, 20, 82, 187, 3, 45, 173, 63, 39, 203, 110, 92, 140, 23, 179, 36, 171, 116, 171, 177, 250, 1, 46, 86, 63, 137, 82, 65, 16, 172, 2, 132, 213, 166, 35, 108, 69, 7, 170, 136, 18, 151, 179, 227, 124, 218, 177, 185, 170, 212, 189, 203, 68, 168, 23, 205, 56, 143, 177, 132, 170, 162, 140, 190, 51, 100, 125, 83, 111, 145, 131, 145, 102, 90, 136, 99, 2, 89, 81, 214, 101, 195, 180, 147, 74, 98, 25, 6, 140, 147, 207, 36, 37, 93, 129, 166, 23, 177, 188, 27, 132, 223, 178, 61, 53, 170, 32, 199, 111, 223, 66, 74, 97, 192, 9, 139, 84, 50, 149, 211, 121, 50, 72, 147, 82, 155, 21, 197, 11, 214, 250, 241, 98, 90, 161, 116, 87, 236, 6, 162, 42, 12, 126, 123, 96, 224, 76, 5, 196, 123, 44, 119, 142, 152, 185, 197, 248, 234, 63, 168, 173, 251, 173, 93, 109, 3, 110, 148, 209, 13, 68, 202, 141, 104, 46, 37, 171, 131, 90, 161, 140, 30, 250, 196, 187, 116, 85, 164, 12, 235, 71, 29, 225, 7, 132, 157, 229, 134, 147, 185, 20, 176, 182, 214, 244, 89, 61, 254, 207, 255, 41, 69, 139, 104, 210, 35, 38, 242, 186, 118, 168, 114, 150, 189, 203, 23, 172, 121, 237, 206, 68, 191, 77, 179, 12, 189, 69, 16, 157, 81, 158, 119, 4, 57, 23, 24, 29, 238, 164, 187, 101, 18, 23, 131, 147, 167, 211, 4, 116, 33, 194, 154, 249, 26, 155, 29, 232, 24, 17, 159, 153, 202, 176, 183, 221, 238, 107, 169, 60, 27, 209, 163, 71, 143, 152, 153, 53, 140, 226, 16, 15, 125, 166, 119, 171, 111, 240, 0, 22, 71, 17, 31, 69, 253, 232, 7, 100, 206, 53, 192, 81, 255, 253, 70, 180, 167, 108, 55, 148, 146, 69, 143, 30, 2, 49, 181, 133, 76, 44, 120, 68, 210, 132, 149, 159, 137, 215, 201, 180, 76, 16, 15, 225, 13, 212, 97, 83, 189, 87, 40, 38, 209, 3, 140, 65, 193, 238, 40, 70, 27, 73, 121, 19, 15, 38, 201, 144, 115, 155, 153, 109, 220, 64, 35, 166, 60, 221, 251, 17, 160, 98, 101, 176, 31, 155, 155, 248, 181, 66, 241, 250, 104, 242, 158, 51, 145, 52, 18, 45, 27, 213, 121, 98, 8, 21, 100, 92, 216, 149, 106, 89, 238, 4, 188, 136, 215, 208, 101, 93, 154, 2, 44, 177, 208, 38, 182, 24, 30, 86, 204, 121, 27, 40, 97, 156, 114, 207, 202, 47, 146, 94, 155, 253, 0, 91, 108, 219, 118, 48, 157, 99, 157, 213, 13, 94, 206, 182, 244, 81, 111, 32, 33, 30, 21, 249, 140, 151, 236, 23, 194, 93, 38, 132, 70, 244, 118, 223, 27, 201, 147, 245, 33, 118, 30, 43, 85, 47, 242, 84, 164, 103, 202, 219, 112, 249, 240, 34, 46, 171, 127, 97, 149, 4, 212, 91, 81, 80, 231, 212, 251, 13, 71, 189, 116, 38, 46, 169, 2, 252, 129, 173, 161, 68, 15, 1, 208, 167, 191, 173, 117, 14, 44, 0, 251, 222, 218, 250, 178, 42, 87, 91, 236, 23, 215, 56, 44, 111, 159, 81, 235, 166, 166, 24, 175, 230, 221, 15, 23, 194, 20, 144, 52, 159, 79, 89, 153, 86, 222, 247, 179, 221, 209, 22, 168, 228, 198, 125, 242, 190, 94, 99, 236, 66, 137, 180, 18, 46, 187, 118, 0, 113, 119, 13, 91, 240, 244, 52, 41, 150, 93, 192, 122, 204, 164, 121, 148, 93, 161, 9, 240, 58, 189, 59, 45, 27, 147, 15, 119, 193, 239, 222, 78, 128, 194, 27, 212, 159, 213, 227, 7, 67, 120, 253, 40, 226, 9, 27, 224, 206, 230, 233, 52, 121, 92, 140, 187, 236, 25, 231, 51, 117, 122, 23, 54, 71, 216, 8, 49, 27, 116, 154, 167, 67, 101, 161, 185, 214, 113, 59, 20, 9, 181, 11, 244, 120, 70, 247, 124, 90, 249, 45, 105, 89, 67, 31, 243, 199, 123, 92, 81, 123, 209, 132, 253, 216, 8, 106, 231, 40, 102, 82, 89, 171, 161, 204, 225, 75, 66, 58, 42, 228, 64, 136, 143, 71, 26, 2, 170, 185, 219, 178, 53, 175, 190, 13, 251, 43, 182, 161, 167, 131, 197, 109, 24, 212, 46, 206, 23, 165, 87, 164, 85, 60, 202, 116, 152, 207, 146, 107, 173, 75, 37, 35, 240, 175, 175, 74, 151, 213, 36, 161, 39, 53, 138, 36, 85, 205, 175, 73, 92, 8, 62, 151, 34, 93, 121, 3, 126, 41, 61, 2, 174, 180, 85, 163, 103, 121, 241, 52, 30, 156, 92, 107, 77, 26, 9, 26, 255, 218, 202, 212, 82, 145, 106, 117, 69, 81, 228, 87, 22, 213, 212, 159, 75, 95, 62, 71, 51, 93, 177, 202, 184, 186, 34, 153, 210, 86, 93, 94, 198, 243, 107, 173, 42, 179, 120, 126, 157, 213, 4, 114, 62, 102, 57, 245, 20, 19, 140, 93, 55, 174, 74, 133, 32, 51, 99, 192, 60, 25, 242, 40, 190, 29, 177, 109, 163, 84, 240, 249, 240, 132, 71, 19, 159, 196, 85, 172, 167, 100, 30, 115, 72, 132, 188, 94, 17, 31, 135, 116, 16, 228, 231, 115, 233, 223, 85, 183, 253, 151, 234, 174, 24, 79, 90, 247, 86, 233, 20, 34, 166, 107, 107, 160, 9, 116, 104, 77, 188, 250, 222, 138, 211, 248, 175, 160, 133, 71, 239, 125, 154, 215, 139, 170, 252, 50, 26, 56, 81, 202, 7, 10, 118, 223, 121, 93, 38, 83, 214, 60, 201, 176, 65, 59, 5, 22, 175, 126, 242, 192, 191, 196, 226, 250, 149, 1, 237, 173, 242, 205, 77, 133, 117, 77, 221, 149, 194, 247, 217, 186, 207, 171, 151, 155, 47, 165, 193, 130, 51, 109, 149, 248, 109, 50, 92, 12, 174, 247, 216, 173, 224, 36, 126, 25, 29, 70, 147, 12, 240, 24, 15, 6, 139, 217, 98, 26, 147, 217, 41, 159, 142, 99, 221, 67, 153, 72, 24, 173, 31, 10, 163, 5, 194, 198, 158, 138, 220, 188, 135, 212, 165, 41, 22, 235, 210, 194, 140, 192, 230, 38, 50, 3, 14, 37, 154, 13, 111, 138, 164, 132, 8, 229, 67, 59, 186, 2, 159, 22, 19, 28, 138, 62, 191, 101, 10, 82, 103, 153, 40, 245, 65, 228, 208, 33, 42, 1, 218, 220, 244, 191, 56, 46, 146, 120, 226, 190, 186, 248, 38, 252, 196, 133, 76, 149, 106, 155, 181, 186, 54, 193, 38, 172, 129, 77, 97, 246, 80, 182, 24, 65, 237, 162, 23, 237, 199, 33, 68, 134, 253, 198, 84, 26, 1, 219, 98, 92, 145, 45, 253, 12, 250, 235, 181, 165, 193, 0, 183, 70, 27, 180, 153, 130, 1, 62, 155, 137, 45, 240, 134, 103, 110, 100, 101, 148, 65, 27, 252, 54, 29, 159, 84, 255, 54, 196, 145, 49, 196, 206, 124, 215, 95, 207, 28, 111, 109, 93, 161, 57, 14, 78, 126, 41, 242, 190, 164, 53, 222, 218, 250, 50, 214, 120, 13, 123, 236, 229, 211, 181, 51, 199, 194, 30, 124, 86, 155, 204, 139, 248, 23, 48, 204, 156, 206, 207, 96, 157, 3, 120, 189, 99, 221, 108, 216, 157, 51, 174, 165, 131, 184, 74, 174, 229, 64, 55, 27, 134, 90, 82, 211, 189, 154, 97, 70, 217, 214, 25, 228, 90, 43, 196, 218, 70, 148, 106, 70, 173, 206, 20, 135, 166, 208, 29, 165, 82, 51, 161, 230, 241, 57, 196, 125, 87, 41, 17, 173, 190, 150, 231, 115, 200, 255, 110, 254, 47, 209, 252, 13, 109, 28, 156, 197, 162, 43, 53, 26, 215, 103, 236, 231, 243, 229, 111, 41, 107, 174, 172, 91, 49, 194, 19, 88, 59, 192, 126, 176, 175, 36, 27, 226, 229, 141, 87, 212, 212, 0, 82, 36, 204, 234, 167, 167, 201, 59, 94, 32, 129, 22, 52, 32, 88, 30, 245, 177, 50, 60, 136, 118, 24, 155, 205, 42, 234, 248, 172, 43, 214, 236, 80, 184, 158, 237, 180, 248, 62, 123, 116, 53, 182, 141, 193, 4, 130, 49, 225, 135, 192, 33, 66, 55, 231, 153, 181, 228, 4, 17, 46, 50, 52, 210, 125, 40, 56, 223, 130, 236, 16, 221, 18, 131, 159, 236, 167, 188, 69, 121, 187, 146, 245, 169, 63, 0, 124, 115, 145, 186, 100, 83, 109, 134, 11, 87, 58, 205, 226, 41, 170, 53, 148, 215, 88, 103, 6, 116, 153, 134, 226, 217, 105, 117, 7, 249, 130, 251, 100, 4, 94, 208, 182, 197, 27, 166, 39, 29, 234, 42, 71, 134, 130, 183, 216, 3, 144, 183, 239, 190, 131, 191, 15, 100, 210, 166, 192, 71, 23, 119, 137, 214, 197, 239, 141, 127, 14, 31, 46, 181, 236, 143, 247, 229, 167, 19, 102, 91, 152, 114, 243, 55, 48, 62, 241, 76, 96, 115, 212, 220, 7, 115, 24, 243, 250, 168, 202, 223, 243, 46, 1, 128, 44, 215, 148, 116, 250, 234, 51, 76, 166, 9, 51, 214, 60, 163, 229, 49, 51, 12, 182, 127, 90, 229, 118, 10, 167, 20, 39, 6, 22, 159, 93, 179, 138, 217, 97, 16, 8, 182, 182, 171, 24, 54, 154, 175, 189, 241, 254, 41, 51, 225, 188, 143, 45, 165, 41, 216, 249, 18, 6, 179, 217, 238, 76, 124, 70, 135, 212, 121, 13, 3, 116, 229, 182, 102, 117, 27, 226, 52, 253, 90, 54, 165, 157, 13, 65, 225, 42, 78, 141, 211, 53, 139, 69, 147, 209, 105, 192, 135, 242, 72, 204, 65, 54, 152, 46, 134, 73, 217, 13, 173, 203, 3, 9, 90, 85, 96, 228, 174, 36, 143, 47, 21, 94, 122, 139, 70, 205, 106, 245, 173, 105, 9, 188, 74, 80, 11, 148, 193, 42, 87, 179, 91, 171, 214, 51, 204, 129, 171, 92, 213, 46, 173, 137, 244, 143, 108, 215, 136, 238, 138, 178, 216, 10, 13, 228, 119, 139, 232, 56, 93, 71, 74, 27, 214, 246, 236, 243, 237, 115, 162, 37, 229, 214, 151, 199, 149, 216, 221, 50, 73, 65, 120, 50, 220, 118, 98, 119, 76, 50, 20, 173, 135, 27, 210, 236, 202, 177, 246, 240, 188, 74, 62, 17, 236, 93, 9, 246, 75, 86, 198, 163, 228, 48, 169, 222, 178, 33, 127, 113, 154, 12, 15, 167, 185, 217, 196, 195, 61, 96, 90, 90, 203, 124, 125, 32, 185, 29, 232, 174, 168, 99, 139, 13, 64, 30, 46, 25, 30, 89, 219, 73, 26, 57, 186, 227, 25, 123, 226, 45, 149, 93, 60, 254, 55, 251, 123, 184, 170, 192, 134, 27, 150, 68, 41, 225, 111, 60, 219, 86, 136, 143, 13, 67, 5, 146, 77, 108, 197, 58, 24, 253, 86, 240, 73, 246, 30, 223, 178, 217, 171, 117, 86, 58, 14, 173, 106, 203, 208, 133, 110, 250, 152, 181, 185, 96, 252, 243, 164, 18, 164, 63, 99, 202, 71, 154, 128, 151, 164, 163, 151, 92, 96, 164, 165, 208, 57, 61, 240, 125, 42, 96, 179, 159, 83, 110, 136, 117, 22, 166, 235, 55, 119, 3, 101, 237, 18, 59, 94, 46, 166, 32, 188, 127, 8, 59, 135, 198, 49, 189, 104, 152, 103, 44, 129, 235, 73, 116, 97, 12, 132, 160, 239, 17, 132, 96, 99, 43, 4, 139, 25, 239, 151, 56, 73, 62, 236, 134, 68, 251, 32, 77, 99, 1, 57, 219, 80, 176, 19, 109, 147, 13, 41, 64, 48, 167, 27, 10, 18, 228, 110, 106, 150, 241, 42, 104, 150, 241, 237, 121, 68, 92, 56, 5, 167, 114, 64, 30, 31, 241, 236, 239, 91, 144, 225, 224, 221, 181, 135, 249, 243, 56, 5, 43, 32, 80, 246, 52, 238, 247, 78, 253, 85, 233, 144, 161, 69, 201, 74, 103, 73, 222, 212, 172, 132, 183, 50, 218, 250, 198, 237, 107, 201, 244, 50, 107, 165, 189, 154, 177, 190, 184, 145, 192, 101, 239, 42, 243, 153, 12, 35, 199, 206, 74, 245, 172, 42, 210, 85, 144, 236, 122, 144, 252, 156, 44, 87, 192, 224, 51, 67, 160, 61, 188, 65, 75, 190, 246, 102, 148, 61, 68, 170, 1, 217, 30, 23, 227, 135, 94, 55, 112, 31, 100, 151, 1, 24, 53, 131, 181, 59, 98, 139, 58, 199, 196, 183, 236, 122, 118, 20, 42, 48, 54, 52, 193, 1, 13, 158, 103, 181, 160, 164, 204, 66, 3, 25, 146, 104, 147, 184, 40, 89, 105, 7, 166, 127, 50, 155, 82, 101, 189, 61, 219, 82, 129, 78, 154, 143, 84, 198, 150, 121, 88, 234, 65, 183, 55, 238, 111, 48, 175, 46, 75, 62, 69, 251, 93, 216, 228, 115, 132, 196, 223, 234, 46, 241, 126, 91, 73, 16, 41, 217, 218, 121, 129, 92, 11, 248, 72, 199, 2, 140, 136, 111, 165, 136, 220, 194, 79, 250, 5, 85, 246, 54, 188, 236, 69, 169, 91, 142, 226, 128, 233, 138, 0, 212, 179, 194, 216, 222, 110, 123, 199, 131, 4, 178, 114, 91, 231, 155, 161, 120, 108, 78, 12, 240, 76, 31, 152, 229, 34, 56, 245, 194, 91, 75, 21, 92, 228, 197, 33, 111, 22, 195, 209, 149, 107, 74, 14, 127, 176, 118, 29, 131, 80, 105, 217, 239, 25, 228, 172, 55, 135, 166, 212, 207, 20, 127, 104, 73, 27, 172, 137, 105, 94, 212, 102, 164, 53, 230, 155, 96, 210, 73, 130, 125, 45, 46, 23, 97, 175, 89, 231, 113, 71, 91, 181, 146, 201, 93, 209, 189, 75, 45, 21, 36, 129, 93, 78, 38, 9, 238, 174, 205, 245, 9, 102, 249, 196, 226, 247, 42, 203, 7, 5, 127, 145, 156, 65, 45, 176, 189, 244, 44, 70, 210, 91, 198, 177, 189, 227, 76, 174, 25, 201, 200, 211, 6, 56, 216, 246, 199, 60, 69, 123, 235, 106, 142, 8, 240, 57, 110, 232, 172, 139, 74, 82, 210, 19, 120, 169, 227, 74, 50, 1, 94, 3, 117, 193, 79, 244, 24, 178, 142, 224, 93, 58, 75, 158, 229, 197, 44, 174, 246, 227, 193, 137, 208, 144, 79, 250, 144, 13, 116, 60, 6, 179, 67, 28, 98, 40, 160, 187, 35, 254, 213, 99, 133, 241, 35, 43, 134, 122, 243, 123, 25, 154, 106, 36, 31, 228, 125, 45, 178, 138, 17, 241, 68, 228, 126, 145, 51, 178, 129, 140, 183, 158, 228, 46, 150, 113, 72, 121, 247, 79, 16, 224, 23, 242, 39, 126, 45, 200, 99, 182, 171, 52, 124, 246, 212, 119, 219, 91, 58, 24, 115, 239, 139, 63, 255, 212, 53, 243, 33, 211, 52, 1, 2, 245, 32, 26, 19, 5, 212, 52, 101, 140, 116, 31, 22, 2, 64, 91, 163, 174, 240, 0, 31, 125, 201, 245, 136, 16, 103, 213, 79, 169, 43, 158, 29, 152, 109, 171, 98, 143, 10, 70, 51, 62, 177, 173, 223, 31, 137, 159, 248, 252, 13, 128, 168, 235, 85, 243, 57, 8, 102, 201, 117, 238, 137, 44, 252, 181, 72, 235, 34, 47, 197, 35, 160, 166, 254, 33, 50, 184, 239, 88, 77, 63, 60, 33, 149, 194, 104, 101, 233, 196, 140, 168, 65, 245, 140, 58, 152, 128, 132, 169, 170, 224, 189, 199, 116, 156, 217, 93, 48, 104, 56, 207, 196, 59, 42, 216, 233, 136, 140, 9, 240, 70, 156, 38, 243, 33, 45, 95, 197, 175, 186, 103, 174, 189, 232, 28, 100, 44, 107, 58, 228, 69, 119, 44, 165, 73, 74, 255, 124, 206, 14, 153, 207, 217, 241, 204, 231, 80, 174, 175, 53, 37, 228, 218, 29, 20, 202, 81, 212, 145, 40, 26, 243, 3, 117, 153, 33, 113, 160, 24, 133, 215, 68, 172, 85, 135, 66, 116, 122, 81, 39, 206, 150, 252, 107, 58, 213, 99, 86, 91, 190, 235, 36, 76, 190, 243, 34, 242, 146, 228, 147, 39, 89, 227, 90, 105, 226, 249, 4, 188, 202, 109, 89, 178, 94, 100, 237, 117, 37, 2, 7, 15, 255, 22, 186, 175, 38, 116, 70, 224, 224, 73, 127, 95, 78, 228, 124, 168, 174, 149, 208, 1, 220, 191, 133, 238, 171, 8, 93, 69, 172, 28, 60, 233, 239, 203, 9, 157, 15, 213, 215, 22, 58, 62, 176, 52, 254, 248, 55, 80, 39, 222, 118, 199, 31, 81, 252, 129, 14, 86, 33, 50, 45, 228, 200, 94, 68, 198, 42, 199, 127, 241, 90, 74, 164, 240, 155, 11, 167, 168, 50, 31, 79, 198, 51, 240, 172, 224, 4, 39, 248, 9, 201, 50, 169, 43, 190, 105, 227, 253, 160, 176, 242, 169, 32, 73, 42, 0, 106, 132, 179, 114, 44, 241, 205, 146, 178, 140, 199, 28, 165, 72, 236, 242, 47, 7, 33, 193, 197, 64, 54, 84, 53, 53, 1, 157, 206, 6, 230, 45, 131, 81, 32, 10, 163, 5, 161, 170, 130, 30, 163, 205, 168, 179, 23, 117, 216, 23, 207, 142, 15, 192, 170, 226, 226, 121, 146, 161, 24, 53, 227, 145, 21, 166, 62, 92, 148, 243, 132, 81, 61, 36, 192, 110, 112, 58, 28, 213, 38, 25, 241, 123, 239, 124, 135, 19, 221, 38, 217, 253, 209, 109, 8, 248, 178, 6, 118, 170, 131, 229, 155, 79, 193, 184, 148, 176, 65, 219, 52, 47, 147, 97, 13, 69, 225, 120, 50, 4, 100, 84, 56, 89, 149, 161, 241, 31, 148, 108, 240, 147, 65, 203, 122, 80, 91, 50, 187, 123, 151, 104, 82, 85, 44, 221, 176, 63, 196, 60, 103, 9, 109, 1, 89, 243, 27, 16, 174, 184, 161, 237, 194, 32, 174, 6, 39, 81, 55, 113, 154, 103, 197, 250, 107, 208, 67, 102, 157, 16, 148, 169, 112, 5, 213, 136, 244, 148, 98, 72, 180, 120, 109, 255, 66, 178, 197, 235, 115, 73, 225, 18, 172, 99, 200, 175, 129, 248, 112, 90, 174, 177, 252, 188, 229, 85, 248, 11, 9, 144, 168, 208, 21, 155, 39, 94, 206, 151, 52, 76, 60, 238, 115, 202, 23, 63, 180, 33, 162, 86, 16, 11, 33, 137, 3, 168, 237, 245, 146, 196, 23, 201, 56, 30, 44, 155, 186, 73, 143, 104, 89, 25, 253, 194, 21, 18, 44, 43, 115, 173, 104, 121, 40, 236, 32, 231, 219, 75, 71, 136, 91, 188, 253, 201, 185, 193, 93, 132, 170, 89, 134, 66, 242, 115, 21, 93, 154, 71, 14, 86, 170, 219, 21, 75, 66, 168, 87, 187, 70, 162, 64, 58, 170, 149, 101, 193, 234, 162, 190, 176, 0, 248, 58, 165, 107, 38, 1, 60, 59, 172, 69, 42, 178, 120, 170, 135, 200, 247, 157, 191, 151, 227, 156, 159, 73, 200, 25, 165, 86, 115, 117, 174, 240, 84, 248, 195, 136, 170, 145, 212, 251, 77, 156, 104, 177, 194, 229, 11, 40, 130, 173, 3, 156, 180, 181, 117, 64, 208, 34, 50, 19, 130, 234, 68, 65, 199, 63, 240, 73, 207, 240, 110, 206, 208, 33, 39, 0, 218, 181, 59, 78, 50, 41, 242, 120, 213, 209, 40, 47, 6, 137, 206, 147, 20, 216, 10, 79, 212, 178, 140, 78, 198, 77, 253, 55, 148, 111, 182, 188, 152, 2, 36, 188, 15, 83, 37, 44, 69, 123, 84, 21, 54, 45, 100, 198, 170, 38, 211, 64, 181, 5, 98, 76, 149, 63, 62, 220, 63, 56, 248, 133, 181, 97, 177, 31, 51, 41, 42, 169, 34, 145, 181, 61, 29, 25, 28, 210, 51, 151, 169, 152, 185, 76, 163, 7, 145, 138, 235, 176, 39, 119, 250, 18, 102, 237, 202, 163, 212, 218, 146, 210, 137, 59, 112, 252, 249, 0, 130, 54, 3, 248, 213, 57, 239, 80, 107, 49, 240, 197, 186, 228, 225, 252, 85, 174, 137, 238, 69, 3, 100, 64, 36, 185, 155, 44, 171, 39, 64, 98, 22, 175, 136, 37, 82, 66, 102, 88, 91, 79, 223, 38, 227, 167, 103, 243, 82, 174, 4, 247, 158, 132, 239, 1, 223, 94, 100, 233, 32, 31, 38, 34, 102, 247, 244, 172, 74, 178, 146, 81, 122, 152, 252, 190, 72, 178, 65, 242, 246, 105, 36, 206, 113, 246, 103, 158, 198, 217, 120, 17, 143, 147, 119, 241, 184, 1, 114, 184, 152, 79, 249, 118, 142, 95, 227, 34, 141, 179, 170, 45, 248, 33, 227, 213, 52, 169, 242, 172, 33, 67, 90, 254, 150, 48, 70, 231, 197, 44, 25, 238, 47, 138, 130, 17, 191, 220, 103, 245, 106, 200, 54, 144, 160, 79, 210, 113, 90, 149, 8, 88, 75, 216, 56, 169, 126, 105, 96, 145, 189, 190, 102, 45, 54, 163, 121, 69, 246, 233, 174, 215, 84, 150, 139, 63, 78, 206, 230, 31, 244, 201, 215, 31, 178, 252, 67, 201, 55, 26, 150, 221, 206, 214, 162, 251, 195, 222, 214, 81, 188, 117, 190, 179, 117, 239, 253, 31, 187, 189, 187, 23, 27, 155, 157, 13, 170, 93, 69, 50, 203, 79, 19, 89, 125, 93, 96, 41, 35, 121, 216, 96, 135, 164, 156, 47, 216, 46, 97, 199, 77, 79, 198, 99, 153, 34, 159, 109, 117, 92, 131, 61, 69, 211, 146, 124, 145, 88, 94, 214, 104, 79, 170, 207, 255, 84, 72, 183, 0, 171, 49, 78, 144, 157, 44, 186, 21, 248, 4, 184, 210, 117, 93, 216, 52, 25, 57, 139, 96, 124, 119, 107, 152, 242, 96, 163, 84, 142, 39, 247, 11, 216, 83, 184, 26, 14, 138, 32, 209, 252, 53, 105, 45, 148, 179, 149, 124, 10, 140, 114, 37, 80, 215, 148, 196, 87, 158, 115, 41, 73, 206, 146, 1, 22, 144, 166, 146, 123, 156, 103, 108, 156, 252, 173, 58, 232, 29, 217, 204, 6, 118, 22, 201, 124, 26, 243, 61, 242, 12, 174, 135, 42, 126, 180, 243, 190, 7, 49, 73, 99, 12, 155, 200, 48, 103, 224, 218, 235, 169, 197, 214, 152, 217, 49, 15, 171, 63, 20, 36, 109, 138, 86, 194, 221, 206, 149, 126, 72, 79, 166, 10, 39, 26, 197, 90, 235, 5, 182, 153, 196, 235, 105, 180, 176, 142, 210, 52, 230, 48, 162, 244, 248, 197, 155, 159, 96, 62, 191, 3, 58, 255, 120, 235, 159, 239, 209, 76, 201, 147, 131, 231, 7, 239, 248, 59, 48, 6, 232, 69, 60, 157, 159, 196, 217, 2, 118, 255, 116, 152, 189, 128, 48, 176, 192, 179, 25, 117, 254, 132, 39, 145, 147, 61, 109, 116, 112, 135, 59, 94, 76, 227, 66, 102, 98, 6, 96, 107, 154, 127, 60, 142, 179, 63, 7, 201, 116, 107, 28, 47, 166, 105, 121, 242, 103, 150, 111, 29, 231, 19, 248, 202, 150, 217, 159, 231, 39, 91, 227, 69, 190, 92, 192, 143, 147, 120, 50, 137, 225, 199, 44, 205, 228, 215, 86, 22, 243, 159, 103, 172, 235, 24, 227, 162, 210, 130, 22, 150, 100, 91, 207, 127, 220, 202, 147, 225, 159, 233, 86, 60, 75, 217, 223, 227, 44, 99, 127, 229, 188, 63, 251, 149, 100, 249, 224, 132, 161, 97, 63, 89, 65, 236, 239, 100, 202, 100, 50, 135, 231, 233, 226, 140, 253, 157, 193, 35, 251, 206, 226, 211, 248, 35, 252, 152, 127, 130, 151, 85, 156, 243, 191, 75, 248, 91, 46, 254, 44, 199, 217, 214, 143, 79, 183, 158, 189, 85, 191, 94, 189, 224, 191, 246, 127, 218, 122, 242, 20, 147, 56, 46, 226, 108, 56, 138, 171, 147, 164, 224, 146, 168, 24, 105, 72, 87, 204, 68, 207, 24, 193, 188, 72, 79, 89, 79, 184, 40, 19, 153, 251, 140, 152, 238, 62, 55, 221, 56, 67, 169, 250, 76, 84, 154, 110, 168, 63, 143, 30, 111, 253, 246, 143, 173, 127, 198, 91, 159, 150, 91, 231, 239, 113, 62, 173, 136, 40, 159, 193, 181, 201, 211, 182, 32, 81, 139, 5, 75, 147, 93, 7, 198, 115, 42, 186, 120, 132, 133, 100, 184, 205, 50, 252, 105, 145, 69, 0, 110, 94, 108, 88, 226, 68, 105, 210, 34, 248, 199, 238, 5, 149, 66, 200, 138, 25, 49, 40, 210, 121, 229, 205, 121, 235, 194, 170, 57, 168, 141, 23, 242, 230, 133, 170, 54, 78, 219, 248, 99, 167, 183, 75, 112, 40, 189, 243, 19, 218, 51, 104, 84, 97, 208, 204, 63, 252, 105, 147, 101, 37, 0, 179, 236, 82, 170, 24, 40, 213, 229, 161, 134, 145, 21, 230, 152, 85, 154, 100, 31, 78, 243, 88, 62, 213, 102, 0, 246, 55, 68, 169, 20, 8, 146, 140, 4, 146, 99, 245, 48, 225, 29, 39, 177, 243, 63, 146, 17, 138, 106, 37, 233, 20, 3, 79, 162, 106, 2, 120, 255, 163, 67, 236, 105, 179, 121, 92, 193, 255, 65, 249, 88, 143, 147, 218, 142, 15, 51, 211, 79, 28, 135, 181, 209, 86, 187, 62, 110, 43, 131, 237, 102, 251, 42, 86, 251, 138, 181, 214, 174, 21, 106, 28, 47, 126, 48, 35, 91, 204, 5, 69, 210, 217, 233, 2, 20, 150, 204, 45, 250, 58, 136, 230, 111, 4, 238, 255, 254, 223, 190, 149, 239, 91, 59, 223, 70, 11, 89, 243, 13, 97, 90, 11, 156, 157, 185, 73, 234, 208, 184, 167, 189, 220, 161, 76, 171, 73, 30, 202, 248, 85, 100, 111, 221, 30, 203, 173, 0, 22, 179, 173, 174, 211, 131, 53, 75, 208, 230, 231, 150, 30, 50, 162, 93, 93, 126, 116, 118, 159, 4, 193, 148, 20, 228, 92, 20, 204, 245, 134, 77, 40, 233, 16, 185, 155, 214, 184, 205, 107, 181, 213, 152, 194, 242, 82, 81, 116, 80, 82, 89, 37, 101, 200, 162, 242, 209, 129, 40, 170, 110, 71, 230, 213, 140, 27, 205, 230, 168, 43, 26, 53, 194, 128, 102, 11, 93, 193, 49, 85, 203, 104, 47, 51, 58, 244, 134, 63, 2, 189, 76, 157, 120, 59, 249, 136, 157, 32, 82, 24, 106, 40, 151, 20, 221, 90, 209, 119, 223, 97, 129, 108, 196, 128, 10, 215, 56, 232, 30, 201, 56, 203, 217, 8, 142, 201, 225, 121, 210, 36, 136, 141, 124, 134, 133, 101, 159, 84, 196, 76, 151, 22, 148, 36, 25, 1, 59, 137, 203, 215, 159, 50, 181, 9, 160, 199, 101, 157, 145, 240, 82, 108, 50, 40, 195, 146, 106, 1, 30, 9, 184, 247, 200, 104, 45, 142, 153, 79, 83, 39, 111, 37, 227, 83, 133, 165, 13, 223, 166, 150, 154, 17, 171, 28, 152, 243, 56, 164, 64, 170, 247, 19, 210, 64, 164, 120, 11, 33, 62, 1, 230, 196, 36, 69, 58, 185, 116, 15, 194, 147, 12, 53, 44, 121, 131, 155, 217, 36, 6, 8, 219, 158, 117, 172, 217, 13, 235, 140, 46, 63, 194, 91, 246, 226, 126, 77, 84, 171, 80, 167, 128, 102, 35, 253, 13, 175, 31, 26, 69, 109, 244, 76, 32, 49, 219, 63, 225, 115, 97, 110, 57, 74, 185, 18, 239, 64, 205, 93, 250, 119, 175, 130, 126, 103, 147, 206, 58, 98, 120, 200, 81, 25, 73, 148, 168, 131, 244, 185, 121, 142, 196, 59, 247, 44, 185, 85, 72, 145, 227, 145, 246, 116, 88, 25, 20, 17, 219, 243, 34, 25, 37, 108, 84, 59, 164, 161, 21, 209, 34, 90, 22, 235, 114, 167, 226, 114, 79, 37, 221, 32, 36, 127, 56, 66, 226, 212, 75, 220, 147, 91, 158, 164, 16, 77, 146, 121, 173, 109, 102, 156, 14, 251, 160, 143, 11, 79, 27, 26, 197, 210, 90, 134, 20, 130, 110, 160, 231, 11, 1, 97, 81, 226, 212, 39, 60, 130, 42, 216, 230, 211, 11, 146, 204, 204, 168, 22, 169, 82, 236, 111, 223, 176, 237, 4, 137, 214, 193, 94, 16, 113, 167, 110, 131, 229, 48, 178, 207, 235, 242, 173, 212, 119, 203, 158, 104, 220, 234, 168, 141, 212, 83, 217, 21, 202, 193, 71, 49, 82, 25, 192, 200, 236, 88, 195, 85, 176, 142, 214, 196, 230, 99, 141, 216, 204, 23, 229, 9, 142, 65, 162, 223, 100, 245, 74, 136, 142, 188, 32, 33, 76, 212, 112, 114, 144, 251, 139, 136, 219, 116, 76, 87, 229, 177, 243, 38, 76, 141, 51, 93, 5, 99, 92, 129, 26, 168, 78, 25, 228, 137, 139, 175, 33, 205, 84, 4, 45, 149, 222, 64, 60, 84, 89, 55, 31, 2, 86, 56, 241, 167, 142, 70, 204, 214, 14, 245, 180, 116, 61, 113, 65, 206, 129, 96, 178, 56, 47, 49, 1, 130, 12, 102, 211, 246, 206, 113, 58, 152, 7, 118, 6, 235, 250, 49, 9, 72, 252, 26, 209, 163, 239, 231, 89, 21, 167, 89, 249, 42, 191, 204, 20, 137, 199, 41, 93, 48, 86, 113, 67, 136, 253, 80, 199, 223, 93, 7, 233, 163, 85, 125, 227, 53, 203, 95, 199, 127, 15, 158, 71, 2, 49, 254, 39, 105, 53, 56, 81, 91, 0, 233, 116, 91, 135, 7, 125, 59, 106, 78, 52, 159, 14, 15, 171, 229, 20, 251, 155, 170, 175, 129, 181, 102, 60, 103, 103, 30, 111, 189, 249, 25, 22, 54, 179, 31, 143, 139, 248, 24, 158, 196, 57, 23, 157, 243, 147, 173, 253, 87, 240, 138, 253, 248, 41, 206, 74, 120, 50, 175, 126, 250, 217, 188, 170, 224, 201, 188, 58, 124, 142, 115, 177, 39, 243, 234, 221, 111, 56, 23, 123, 234, 125, 115, 33, 174, 84, 151, 146, 20, 103, 195, 20, 214, 185, 171, 29, 152, 178, 130, 158, 141, 123, 120, 37, 177, 52, 76, 50, 111, 24, 204, 42, 107, 229, 34, 134, 117, 152, 205, 238, 15, 12, 117, 48, 102, 166, 133, 241, 252, 241, 105, 156, 242, 109, 173, 34, 217, 156, 69, 192, 71, 185, 235, 236, 252, 4, 177, 243, 103, 83, 59, 46, 45, 118, 122, 183, 69, 6, 230, 31, 173, 156, 126, 222, 18, 83, 42, 222, 163, 241, 113, 195, 24, 220, 75, 12, 54, 124, 26, 39, 247, 248, 44, 201, 151, 22, 202, 222, 189, 129, 243, 132, 198, 92, 222, 130, 239, 123, 81, 132, 230, 125, 53, 140, 181, 246, 180, 173, 167, 89, 163, 154, 61, 67, 192, 134, 99, 226, 53, 97, 53, 8, 142, 52, 220, 123, 108, 198, 91, 11, 68, 237, 62, 217, 21, 132, 131, 119, 219, 68, 42, 86, 255, 92, 225, 212, 36, 157, 146, 52, 132, 93, 4, 244, 246, 11, 233, 231, 202, 106, 9, 25, 134, 13, 74, 200, 8, 107, 105, 131, 80, 232, 11, 33, 3, 202, 127, 76, 202, 202, 130, 87, 104, 36, 110, 235, 182, 189, 124, 202, 207, 116, 86, 171, 183, 164, 176, 167, 73, 185, 29, 91, 197, 214, 159, 163, 84, 247, 9, 23, 178, 177, 18, 82, 163, 98, 56, 210, 179, 106, 149, 51, 190, 31, 79, 236, 198, 250, 172, 213, 174, 47, 232, 107, 84, 157, 110, 69, 251, 172, 149, 111, 42, 106, 221, 234, 219, 103, 17, 76, 3, 86, 203, 233, 99, 52, 96, 168, 83, 186, 18, 163, 117, 41, 211, 247, 25, 150, 116, 96, 196, 77, 198, 171, 85, 23, 226, 24, 50, 189, 42, 137, 152, 106, 149, 68, 167, 135, 14, 130, 171, 220, 218, 172, 65, 171, 89, 35, 215, 98, 245, 89, 221, 10, 187, 214, 211, 24, 157, 163, 255, 225, 51, 73, 206, 188, 133, 31, 119, 87, 173, 207, 195, 59, 136, 7, 124, 147, 170, 220, 248, 168, 1, 140, 73, 23, 99, 90, 230, 253, 192, 106, 11, 103, 129, 232, 0, 117, 83, 6, 82, 13, 48, 33, 78, 114, 179, 110, 210, 162, 33, 184, 222, 208, 70, 61, 68, 28, 229, 64, 60, 28, 30, 206, 147, 65, 26, 79, 95, 166, 37, 95, 75, 109, 92, 156, 178, 107, 155, 21, 204, 14, 237, 19, 233, 237, 206, 200, 3, 99, 244, 32, 15, 236, 85, 60, 99, 189, 95, 141, 19, 101, 31, 237, 131, 22, 200, 90, 197, 212, 45, 151, 165, 160, 216, 109, 19, 121, 157, 168, 181, 93, 189, 163, 58, 63, 143, 34, 123, 255, 158, 122, 139, 97, 84, 2, 60, 194, 199, 233, 153, 48, 158, 182, 105, 97, 251, 182, 246, 71, 100, 119, 8, 211, 197, 24, 154, 66, 51, 39, 60, 7, 15, 251, 77, 105, 251, 7, 55, 146, 59, 34, 108, 7, 14, 249, 108, 66, 194, 15, 137, 178, 95, 1, 82, 56, 92, 62, 31, 69, 24, 119, 71, 4, 223, 59, 246, 204, 24, 72, 156, 156, 28, 41, 209, 236, 8, 189, 31, 94, 146, 141, 252, 174, 218, 203, 107, 172, 99, 204, 194, 103, 163, 114, 64, 115, 47, 201, 79, 113, 169, 143, 123, 122, 13, 71, 67, 81, 57, 211, 119, 137, 120, 206, 65, 171, 185, 49, 143, 15, 235, 20, 75, 20, 28, 226, 8, 204, 171, 232, 13, 11, 242, 118, 187, 230, 163, 208, 110, 222, 233, 91, 146, 5, 100, 136, 8, 187, 54, 111, 206, 93, 121, 154, 158, 134, 97, 38, 15, 224, 251, 73, 120, 203, 192, 52, 13, 112, 211, 32, 153, 206, 128, 143, 32, 34, 52, 144, 116, 225, 189, 99, 64, 17, 7, 212, 97, 37, 16, 54, 81, 150, 19, 217, 82, 159, 218, 8, 173, 201, 239, 155, 122, 241, 31, 109, 11, 121, 136, 86, 121, 252, 189, 159, 146, 41, 147, 23, 199, 4, 153, 176, 21, 244, 99, 233, 48, 41, 232, 56, 37, 184, 93, 135, 207, 219, 186, 221, 63, 103, 145, 23, 147, 174, 131, 237, 21, 4, 207, 189, 34, 17, 2, 84, 70, 224, 164, 63, 175, 133, 53, 163, 229, 192, 94, 85, 103, 8, 27, 172, 1, 223, 255, 160, 224, 245, 149, 52, 15, 105, 125, 60, 19, 154, 70, 114, 116, 117, 30, 90, 185, 130, 55, 150, 7, 134, 216, 109, 67, 146, 164, 16, 20, 122, 128, 197, 28, 91, 246, 172, 104, 125, 177, 23, 196, 22, 213, 175, 63, 208, 139, 149, 65, 33, 52, 46, 123, 162, 66, 45, 68, 240, 169, 137, 123, 111, 137, 157, 235, 209, 195, 104, 151, 180, 200, 17, 164, 110, 69, 187, 239, 133, 205, 218, 178, 246, 168, 240, 183, 44, 143, 63, 18, 212, 98, 46, 22, 213, 131, 44, 123, 184, 104, 80, 188, 160, 202, 89, 158, 236, 58, 58, 203, 85, 160, 73, 243, 237, 145, 222, 103, 164, 135, 59, 144, 214, 30, 184, 60, 159, 44, 230, 47, 97, 99, 162, 55, 43, 156, 89, 198, 74, 74, 134, 30, 151, 15, 45, 29, 48, 125, 169, 157, 193, 217, 228, 96, 149, 97, 199, 64, 192, 55, 53, 177, 190, 23, 174, 93, 73, 69, 247, 11, 194, 101, 161, 10, 159, 85, 163, 7, 141, 54, 117, 196, 7, 116, 11, 174, 9, 66, 146, 149, 31, 240, 113, 136, 105, 41, 109, 110, 169, 88, 9, 221, 169, 94, 189, 143, 204, 61, 144, 207, 99, 98, 195, 199, 193, 202, 3, 138, 53, 107, 188, 237, 162, 176, 78, 13, 50, 15, 189, 30, 63, 230, 106, 183, 140, 96, 204, 122, 50, 143, 11, 237, 165, 182, 142, 216, 220, 118, 138, 16, 171, 12, 80, 113, 71, 59, 158, 107, 140, 53, 136, 218, 1, 66, 243, 108, 163, 179, 159, 45, 230, 123, 11, 170, 135, 116, 202, 56, 160, 216, 3, 183, 132, 216, 173, 237, 237, 213, 3, 91, 252, 136, 245, 122, 150, 86, 171, 91, 11, 137, 114, 101, 99, 67, 74, 127, 155, 148, 249, 244, 52, 172, 72, 118, 110, 125, 194, 19, 188, 154, 38, 167, 113, 86, 105, 49, 128, 243, 168, 149, 0, 192, 233, 172, 216, 172, 205, 4, 125, 48, 96, 20, 249, 37, 215, 36, 221, 198, 96, 21, 252, 84, 36, 5, 13, 189, 218, 148, 87, 208, 234, 218, 126, 88, 189, 222, 36, 255, 222, 26, 124, 55, 68, 142, 114, 166, 253, 198, 154, 109, 99, 79, 205, 150, 245, 98, 219, 18, 66, 87, 186, 241, 18, 7, 119, 209, 131, 72, 121, 129, 44, 62, 153, 205, 15, 27, 35, 71, 188, 139, 237, 144, 128, 219, 165, 53, 47, 124, 211, 57, 108, 23, 199, 79, 56, 86, 174, 67, 178, 62, 98, 5, 83, 172, 142, 206, 103, 178, 165, 153, 143, 154, 2, 141, 126, 23, 243, 121, 94, 176, 166, 123, 138, 26, 162, 179, 181, 192, 187, 139, 252, 253, 172, 71, 164, 9, 157, 180, 191, 116, 134, 171, 201, 50, 132, 133, 116, 138, 150, 12, 129, 178, 104, 127, 31, 30, 186, 232, 229, 198, 125, 187, 8, 146, 201, 66, 115, 196, 222, 91, 5, 169, 211, 242, 73, 78, 98, 115, 253, 44, 123, 60, 28, 166, 149, 100, 93, 199, 131, 242, 77, 94, 210, 254, 204, 17, 162, 160, 100, 162, 202, 188, 241, 123, 213, 214, 8, 211, 213, 15, 150, 213, 51, 82, 149, 8, 229, 58, 95, 207, 2, 51, 4, 180, 25, 245, 89, 43, 6, 196, 149, 174, 150, 213, 31, 27, 250, 200, 224, 66, 11, 164, 118, 221, 65, 134, 75, 137, 226, 129, 54, 51, 42, 72, 81, 87, 134, 63, 92, 165, 154, 163, 5, 35, 137, 16, 244, 172, 194, 3, 209, 48, 224, 153, 46, 34, 204, 90, 66, 13, 118, 11, 61, 231, 165, 227, 79, 189, 228, 241, 117, 63, 160, 87, 155, 242, 183, 231, 116, 119, 245, 113, 167, 41, 188, 215, 239, 94, 158, 109, 29, 24, 132, 116, 86, 96, 87, 35, 179, 4, 70, 23, 97, 232, 14, 93, 58, 52, 149, 125, 170, 146, 32, 249, 104, 217, 2, 160, 139, 0, 18, 245, 180, 37, 126, 69, 142, 96, 196, 27, 78, 173, 221, 192, 128, 67, 200, 169, 200, 233, 182, 212, 41, 173, 84, 64, 152, 90, 155, 175, 16, 27, 69, 223, 194, 89, 22, 61, 180, 133, 204, 211, 159, 108, 62, 172, 41, 51, 56, 214, 16, 203, 174, 237, 108, 216, 114, 88, 61, 202, 188, 72, 112, 31, 214, 98, 204, 142, 58, 4, 62, 106, 167, 93, 190, 213, 155, 176, 33, 125, 117, 25, 252, 65, 228, 212, 67, 34, 181, 216, 244, 178, 147, 146, 66, 93, 103, 234, 101, 59, 61, 126, 216, 183, 22, 62, 226, 161, 42, 78, 173, 17, 88, 109, 68, 222, 114, 8, 14, 44, 74, 148, 223, 98, 135, 227, 91, 7, 188, 195, 131, 106, 251, 98, 133, 203, 13, 172, 61, 65, 131, 43, 26, 92, 55, 14, 151, 219, 152, 25, 25, 23, 230, 44, 245, 140, 41, 253, 33, 225, 0, 46, 179, 106, 182, 20, 55, 169, 250, 134, 95, 151, 144, 17, 50, 14, 91, 7, 15, 61, 122, 117, 117, 4, 230, 212, 93, 119, 192, 101, 6, 12, 234, 20, 224, 160, 83, 134, 143, 9, 86, 103, 233, 146, 211, 124, 225, 211, 106, 28, 167, 138, 84, 192, 181, 126, 160, 193, 104, 78, 188, 21, 73, 30, 255, 14, 99, 84, 3, 67, 8, 90, 145, 244, 99, 198, 156, 104, 148, 86, 157, 54, 147, 36, 187, 189, 200, 45, 14, 95, 206, 66, 116, 155, 140, 76, 77, 223, 249, 231, 159, 17, 25, 178, 214, 80, 192, 70, 174, 151, 16, 57, 23, 221, 222, 165, 4, 15, 48, 120, 143, 76, 226, 21, 14, 77, 4, 251, 110, 96, 81, 234, 149, 42, 77, 99, 3, 158, 250, 101, 44, 59, 103, 59, 253, 232, 79, 246, 213, 223, 225, 95, 187, 59, 36, 98, 82, 87, 72, 71, 16, 214, 233, 81, 66, 195, 229, 177, 178, 238, 122, 203, 82, 179, 73, 28, 13, 81, 68, 184, 206, 142, 139, 184, 57, 35, 123, 174, 87, 59, 194, 132, 97, 79, 120, 9, 37, 15, 1, 243, 107, 230, 177, 254, 89, 110, 203, 145, 202, 139, 174, 192, 56, 117, 189, 48, 123, 110, 7, 202, 145, 34, 149, 231, 211, 36, 206, 44, 137, 82, 165, 188, 203, 127, 20, 239, 5, 82, 60, 28, 87, 91, 134, 12, 42, 103, 178, 151, 98, 146, 74, 232, 67, 68, 114, 80, 93, 23, 188, 112, 124, 202, 70, 63, 82, 241, 80, 250, 127, 190, 137, 17, 87, 105, 111, 226, 182, 176, 9, 149, 77, 26, 186, 211, 84, 53, 150, 221, 216, 226, 40, 250, 112, 147, 207, 210, 44, 157, 45, 102, 96, 46, 206, 196, 15, 187, 217, 253, 19, 134, 151, 23, 4, 211, 52, 130, 70, 167, 105, 156, 147, 244, 37, 51, 153, 89, 18, 121, 31, 40, 234, 77, 210, 35, 85, 143, 6, 94, 223, 190, 23, 228, 176, 190, 129, 118, 196, 44, 49, 165, 42, 200, 113, 124, 178, 89, 249, 50, 158, 75, 127, 233, 183, 36, 158, 176, 39, 114, 37, 17, 163, 184, 74, 249, 12, 53, 44, 85, 66, 167, 187, 59, 123, 156, 53, 194, 168, 230, 128, 52, 206, 40, 5, 184, 45, 180, 1, 246, 8, 20, 80, 72, 199, 126, 63, 141, 207, 151, 50, 194, 34, 14, 13, 163, 175, 83, 180, 102, 175, 36, 48, 142, 188, 203, 170, 125, 16, 214, 17, 85, 189, 23, 241, 75, 66, 117, 18, 181, 72, 58, 153, 200, 105, 9, 187, 183, 5, 101, 122, 33, 87, 169, 204, 145, 162, 89, 156, 147, 239, 61, 111, 210, 87, 63, 245, 51, 192, 34, 248, 178, 105, 112, 151, 44, 98, 106, 8, 115, 218, 16, 99, 115, 147, 60, 55, 182, 12, 34, 109, 22, 47, 143, 147, 58, 226, 124, 212, 136, 53, 66, 26, 169, 91, 146, 81, 84, 195, 97, 75, 21, 76, 251, 251, 27, 113, 219, 170, 18, 162, 57, 45, 15, 180, 160, 15, 253, 146, 30, 242, 111, 149, 104, 157, 196, 165, 71, 180, 156, 3, 40, 12, 114, 197, 162, 82, 220, 83, 59, 152, 198, 101, 9, 11, 200, 152, 113, 227, 103, 103, 194, 239, 122, 53, 11, 210, 50, 246, 138, 57, 57, 14, 18, 159, 117, 97, 95, 146, 193, 236, 147, 37, 129, 96, 22, 53, 129, 193, 67, 81, 111, 222, 190, 19, 168, 7, 74, 110, 163, 97, 227, 132, 114, 135, 74, 204, 85, 178, 97, 5, 185, 251, 54, 40, 120, 65, 9, 179, 169, 181, 146, 165, 114, 83, 94, 155, 2, 141, 179, 176, 47, 215, 167, 35, 119, 193, 86, 215, 66, 204, 33, 237, 91, 43, 217, 75, 75, 93, 60, 158, 8, 189, 69, 164, 185, 136, 39, 222, 133, 211, 190, 130, 154, 48, 189, 242, 172, 63, 71, 120, 4, 39, 86, 180, 116, 94, 233, 210, 10, 47, 14, 173, 19, 44, 250, 57, 89, 58, 251, 214, 38, 217, 94, 244, 135, 114, 14, 246, 162, 78, 182, 152, 37, 69, 58, 232, 8, 235, 190, 103, 60, 192, 11, 225, 230, 78, 70, 20, 126, 16, 151, 201, 179, 180, 40, 43, 147, 163, 84, 87, 156, 8, 39, 107, 47, 58, 234, 44, 96, 177, 44, 92, 122, 50, 133, 243, 22, 224, 7, 95, 191, 208, 121, 127, 65, 246, 123, 213, 54, 169, 74, 117, 251, 26, 71, 224, 218, 118, 200, 28, 120, 123, 81, 138, 51, 182, 236, 66, 196, 11, 83, 132, 122, 7, 10, 24, 220, 62, 97, 192, 53, 76, 121, 200, 70, 72, 226, 142, 90, 127, 17, 210, 63, 102, 80, 248, 220, 43, 60, 221, 226, 224, 242, 15, 57, 126, 208, 52, 110, 3, 54, 19, 41, 245, 131, 239, 33, 112, 126, 255, 187, 201, 96, 232, 240, 78, 43, 193, 90, 62, 149, 213, 11, 128, 242, 195, 230, 30, 50, 221, 75, 172, 151, 70, 227, 14, 28, 213, 171, 218, 125, 9, 14, 71, 157, 48, 197, 42, 153, 153, 183, 92, 7, 239, 159, 123, 174, 43, 192, 204, 74, 251, 36, 207, 132, 221, 156, 185, 220, 73, 178, 116, 70, 27, 61, 117, 145, 169, 53, 159, 216, 187, 130, 121, 196, 182, 115, 136, 114, 38, 75, 136, 236, 32, 239, 216, 113, 21, 69, 114, 196, 95, 3, 107, 25, 22, 43, 16, 174, 167, 106, 182, 7, 57, 71, 4, 170, 9, 23, 16, 201, 69, 116, 112, 15, 17, 188, 67, 145, 17, 223, 132, 138, 185, 250, 217, 99, 224, 172, 89, 8, 139, 52, 153, 117, 91, 37, 5, 232, 243, 32, 65, 151, 73, 111, 55, 13, 147, 49, 174, 83, 179, 198, 215, 154, 115, 65, 167, 125, 96, 225, 48, 35, 54, 119, 98, 192, 179, 148, 168, 244, 89, 151, 34, 254, 116, 8, 237, 88, 165, 167, 169, 170, 36, 159, 11, 8, 47, 175, 18, 107, 50, 45, 107, 227, 156, 219, 1, 173, 43, 79, 81, 235, 52, 180, 18, 95, 189, 138, 167, 206, 11, 52, 147, 110, 243, 29, 131, 186, 211, 211, 230, 157, 21, 163, 147, 55, 133, 162, 140, 204, 160, 89, 245, 54, 236, 186, 240, 104, 34, 2, 135, 206, 195, 167, 172, 41, 44, 238, 75, 222, 128, 225, 90, 196, 114, 138, 199, 225, 184, 3, 228, 195, 116, 12, 83, 9, 250, 98, 51, 107, 229, 101, 168, 35, 199, 174, 162, 219, 65, 114, 135, 218, 245, 162, 109, 199, 177, 206, 29, 55, 62, 23, 193, 100, 251, 142, 118, 71, 219, 60, 248, 113, 221, 111, 57, 68, 83, 205, 226, 175, 178, 195, 183, 58, 159, 207, 117, 99, 63, 135, 51, 133, 78, 207, 87, 99, 39, 69, 138, 86, 26, 53, 111, 224, 198, 199, 17, 31, 2, 131, 47, 133, 35, 124, 11, 195, 205, 219, 223, 111, 184, 109, 33, 70, 175, 158, 184, 133, 70, 72, 125, 127, 44, 178, 77, 190, 18, 89, 44, 32, 251, 84, 123, 41, 63, 79, 37, 187, 73, 68, 222, 198, 206, 217, 51, 227, 228, 78, 29, 4, 182, 161, 152, 137, 131, 63, 228, 173, 62, 196, 3, 111, 156, 87, 224, 75, 27, 163, 135, 190, 136, 107, 135, 187, 101, 224, 166, 106, 95, 246, 72, 248, 103, 144, 196, 93, 165, 14, 156, 43, 205, 147, 66, 117, 85, 110, 229, 194, 20, 151, 207, 253, 43, 140, 124, 126, 136, 136, 221, 153, 188, 102, 194, 194, 71, 48, 153, 14, 177, 8, 151, 19, 22, 61, 52, 65, 240, 30, 63, 72, 34, 24, 50, 58, 171, 194, 149, 219, 90, 39, 39, 135, 7, 106, 202, 223, 71, 138, 25, 65, 232, 110, 145, 92, 15, 98, 154, 210, 52, 53, 65, 27, 152, 183, 179, 138, 38, 143, 63, 68, 55, 160, 87, 189, 193, 28, 135, 27, 124, 100, 113, 195, 212, 105, 146, 89, 208, 200, 69, 87, 131, 151, 186, 250, 224, 17, 14, 102, 107, 112, 76, 227, 86, 145, 147, 49, 226, 3, 119, 92, 160, 33, 164, 12, 148, 141, 186, 37, 92, 122, 192, 227, 60, 234, 28, 51, 252, 252, 218, 224, 193, 32, 201, 56, 193, 3, 153, 162, 122, 107, 15, 117, 13, 110, 131, 233, 15, 185, 201, 153, 7, 72, 117, 122, 190, 160, 0, 168, 165, 235, 222, 178, 125, 189, 108, 58, 215, 182, 220, 23, 134, 196, 29, 151, 51, 80, 180, 47, 61, 153, 126, 80, 175, 63, 148, 214, 220, 213, 235, 145, 222, 249, 70, 118, 67, 94, 254, 198, 86, 123, 108, 99, 135, 112, 62, 203, 150, 255, 154, 45, 254, 151, 183, 236, 178, 135, 188, 212, 180, 177, 29, 158, 112, 9, 213, 81, 10, 58, 154, 221, 211, 89, 14, 73, 122, 79, 74, 9, 29, 202, 34, 104, 235, 141, 128, 255, 96, 211, 188, 199, 199, 35, 226, 165, 251, 78, 9, 83, 215, 222, 246, 110, 6, 237, 64, 55, 220, 184, 179, 237, 160, 166, 227, 40, 197, 82, 210, 164, 100, 183, 54, 202, 96, 80, 167, 68, 138, 237, 34, 240, 58, 251, 250, 45, 192, 180, 69, 81, 217, 93, 63, 241, 218, 25, 215, 251, 113, 122, 82, 22, 60, 131, 70, 136, 250, 176, 225, 33, 211, 206, 73, 214, 121, 79, 162, 60, 254, 198, 179, 206, 183, 50, 130, 33, 149, 143, 215, 90, 147, 180, 175, 95, 209, 69, 38, 129, 121, 191, 69, 38, 207, 242, 51, 40, 123, 17, 114, 114, 212, 221, 133, 154, 19, 131, 124, 15, 195, 154, 97, 114, 6, 21, 19, 134, 94, 45, 200, 123, 47, 152, 65, 44, 77, 72, 228, 172, 90, 122, 203, 61, 2, 194, 222, 55, 148, 105, 94, 163, 62, 98, 207, 216, 249, 26, 154, 246, 243, 217, 60, 46, 146, 119, 249, 143, 105, 54, 236, 158, 245, 34, 178, 23, 254, 239, 120, 54, 246, 12, 153, 138, 127, 224, 23, 75, 199, 83, 6, 145, 228, 120, 5, 68, 41, 239, 5, 251, 123, 47, 250, 71, 157, 17, 30, 136, 76, 16, 185, 238, 214, 140, 90, 92, 143, 95, 222, 174, 37, 243, 119, 60, 163, 12, 57, 208, 146, 100, 133, 135, 188, 80, 220, 51, 20, 69, 32, 252, 185, 79, 192, 142, 189, 247, 47, 169, 135, 15, 199, 44, 67, 47, 122, 70, 238, 27, 231, 84, 5, 40, 98, 248, 240, 56, 222, 9, 174, 99, 232, 26, 30, 202, 81, 209, 80, 221, 174, 189, 14, 31, 45, 28, 29, 210, 71, 200, 165, 241, 127, 88, 198, 104, 15, 207, 30, 136, 165, 121, 26, 130, 123, 191, 24, 128, 39, 4, 164, 214, 64, 161, 100, 3, 235, 248, 4, 56, 135, 243, 82, 73, 190, 33, 223, 31, 192, 172, 233, 116, 107, 66, 154, 190, 101, 43, 181, 113, 55, 223, 113, 6, 171, 44, 216, 71, 81, 43, 43, 240, 246, 3, 142, 176, 69, 123, 193, 40, 152, 39, 202, 229, 91, 229, 34, 154, 25, 7, 29, 53, 147, 77, 44, 170, 126, 119, 145, 28, 33, 212, 28, 177, 163, 165, 104, 138, 250, 103, 156, 229, 175, 209, 59, 227, 121, 158, 235, 220, 67, 103, 11, 171, 111, 110, 156, 167, 194, 111, 240, 110, 171, 53, 103, 98, 2, 62, 168, 175, 36, 39, 120, 96, 143, 171, 189, 153, 200, 24, 26, 191, 21, 131, 194, 26, 81, 13, 76, 197, 96, 28, 219, 230, 77, 235, 9, 15, 146, 223, 117, 151, 241, 235, 198, 137, 143, 70, 22, 173, 140, 160, 97, 2, 132, 16, 255, 133, 102, 67, 40, 144, 104, 51, 166, 40, 135, 75, 86, 207, 25, 135, 206, 80, 136, 37, 40, 61, 37, 28, 217, 226, 195, 200, 95, 160, 160, 175, 142, 143, 119, 212, 73, 64, 100, 146, 131, 102, 86, 32, 161, 82, 213, 123, 215, 23, 160, 249, 159, 164, 229, 124, 26, 55, 162, 145, 96, 216, 8, 83, 124, 114, 193, 21, 72, 243, 56, 41, 196, 29, 132, 33, 164, 62, 88, 31, 131, 36, 220, 179, 34, 230, 18, 220, 10, 41, 5, 246, 98, 21, 235, 192, 90, 98, 245, 1, 155, 246, 234, 200, 82, 15, 153, 51, 144, 142, 216, 216, 53, 171, 4, 72, 135, 21, 234, 197, 136, 91, 52, 212, 54, 33, 164, 13, 85, 119, 224, 131, 248, 69, 165, 218, 227, 15, 192, 135, 165, 97, 81, 38, 207, 139, 124, 49, 55, 147, 207, 14, 82, 4, 242, 89, 166, 42, 252, 61, 201, 85, 76, 87, 96, 204, 215, 127, 202, 194, 207, 135, 175, 54, 109, 129, 201, 33, 199, 47, 94, 102, 250, 2, 227, 185, 178, 41, 12, 130, 148, 78, 99, 216, 194, 252, 185, 167, 50, 26, 187, 219, 175, 61, 157, 81, 55, 191, 224, 235, 234, 175, 231, 28, 67, 48, 24, 14, 29, 181, 85, 238, 144, 249, 206, 179, 120, 10, 169, 76, 73, 116, 208, 91, 117, 220, 64, 131, 2, 169, 227, 133, 229, 3, 168, 51, 1, 189, 211, 1, 10, 55, 38, 164, 97, 122, 99, 224, 46, 80, 255, 54, 124, 64, 161, 173, 58, 100, 93, 244, 93, 115, 181, 51, 167, 210, 238, 10, 107, 93, 23, 78, 74, 64, 254, 124, 154, 122, 231, 54, 62, 206, 57, 170, 57, 251, 48, 200, 89, 228, 32, 13, 16, 46, 221, 211, 237, 147, 235, 146, 53, 62, 116, 227, 234, 176, 161, 33, 164, 79, 100, 9, 6, 236, 68, 227, 73, 203, 217, 113, 206, 229, 35, 99, 93, 131, 152, 181, 19, 73, 27, 53, 76, 107, 87, 39, 227, 180, 13, 80, 176, 127, 150, 165, 146, 100, 255, 218, 254, 142, 207, 239, 98, 4, 246, 123, 209, 110, 223, 92, 64, 211, 218, 101, 3, 21, 98, 69, 98, 2, 70, 67, 121, 38, 8, 4, 13, 92, 137, 248, 65, 243, 127, 15, 31, 70, 0, 249, 218, 16, 78, 189, 176, 14, 223, 238, 185, 203, 254, 163, 114, 91, 212, 193, 113, 252, 32, 59, 34, 230, 76, 35, 107, 211, 78, 8, 92, 246, 2, 124, 139, 0, 115, 153, 186, 128, 183, 167, 106, 188, 97, 76, 43, 198, 168, 108, 199, 10, 8, 119, 54, 60, 86, 186, 49, 215, 205, 13, 90, 197, 122, 126, 251, 188, 222, 142, 96, 180, 100, 249, 89, 59, 150, 7, 124, 109, 200, 142, 219, 191, 28, 70, 102, 135, 93, 189, 59, 43, 42, 64, 51, 212, 250, 167, 124, 225, 20, 148, 240, 173, 179, 135, 237, 204, 78, 197, 70, 75, 82, 213, 40, 149, 174, 239, 239, 168, 148, 104, 161, 38, 116, 129, 90, 112, 190, 151, 67, 129, 113, 183, 223, 100, 247, 106, 6, 15, 128, 166, 41, 119, 120, 104, 0, 21, 176, 109, 228, 56, 184, 140, 65, 59, 247, 193, 217, 88, 121, 176, 89, 144, 20, 58, 134, 24, 215, 207, 196, 90, 62, 185, 119, 228, 165, 167, 253, 136, 229, 215, 129, 193, 31, 127, 122, 178, 23, 221, 20, 97, 132, 31, 15, 158, 49, 11, 37, 127, 255, 227, 173, 254, 189, 255, 130, 165, 223, 82, 191, 223, 232, 244, 39, 255, 109, 224, 159, 191, 50, 191, 15, 254, 63, 131, 243, 224, 240, 103, 157, 254, 223, 175, 77, 250, 127, 191, 249, 135, 78, 255, 249, 165, 201, 251, 243, 219, 223, 204, 239, 223, 12, 252, 139, 127, 152, 223, 175, 95, 190, 213, 191, 223, 252, 227, 185, 134, 127, 251, 155, 193, 243, 238, 149, 129, 255, 229, 249, 223, 117, 250, 47, 255, 56, 208, 191, 127, 5, 24, 245, 251, 151, 95, 245, 239, 191, 63, 54, 120, 254, 254, 26, 253, 126, 3, 191, 73, 0, 15, 98, 252, 132, 177, 237, 14, 114, 30, 88, 121, 218, 28, 223, 236, 228, 89, 225, 208, 230, 255, 57, 130, 67, 155, 255, 184, 121, 241, 31, 246, 193, 205, 182, 67, 96, 29, 215, 140, 199, 118, 171, 92, 20, 65, 137, 53, 207, 238, 245, 49, 20, 242, 72, 61, 190, 39, 99, 172, 93, 119, 58, 134, 196, 124, 175, 207, 218, 130, 207, 118, 182, 126, 195, 89, 250, 215, 103, 141, 129, 27, 142, 208, 225, 67, 251, 86, 37, 116, 212, 170, 5, 169, 34, 251, 86, 252, 145, 206, 62, 75, 138, 143, 52, 15, 253, 184, 12, 143, 59, 113, 17, 31, 243, 5, 59, 236, 59, 57, 227, 131, 151, 99, 198, 21, 49, 144, 18, 86, 123, 152, 156, 198, 104, 201, 79, 103, 196, 6, 180, 159, 82, 225, 221, 142, 23, 31, 11, 241, 93, 44, 224, 251, 36, 102, 158, 96, 194, 215, 94, 77, 78, 102, 5, 206, 54, 201, 134, 49, 95, 173, 20, 231, 185, 248, 174, 248, 18, 157, 105, 58, 227, 20, 204, 166, 203, 25, 134, 159, 229, 162, 248, 217, 114, 198, 139, 200, 139, 37, 207, 95, 197, 179, 169, 44, 162, 74, 166, 11, 156, 165, 58, 137, 57, 229, 85, 122, 44, 39, 160, 223, 19, 254, 251, 231, 121, 154, 166, 196, 179, 197, 94, 93, 203, 137, 174, 48, 88, 142, 248, 43, 231, 186, 201, 105, 47, 208, 214, 103, 81, 96, 127, 43, 158, 215, 22, 40, 36, 144, 152, 46, 61, 243, 76, 105, 19, 253, 31, 137, 175, 134, 89, 109, 127, 80, 72, 206, 200, 142, 228, 238, 164, 224, 196, 182, 10, 203, 53, 205, 107, 135, 216, 97, 77, 109, 143, 174, 98, 106, 91, 135, 10, 143, 71, 205, 51, 219, 2, 184, 129, 147, 43, 76, 110, 215, 178, 243, 170, 39, 184, 45, 67, 128, 65, 179, 144, 186, 243, 48, 3, 153, 238, 134, 4, 243, 222, 55, 188, 195, 224, 190, 247, 78, 110, 234, 229, 123, 178, 83, 0, 148, 223, 55, 74, 32, 249, 125, 0, 120, 202, 95, 123, 138, 116, 226, 95, 39, 43, 93, 85, 140, 23, 86, 218, 154, 31, 54, 214, 19, 197, 90, 220, 52, 61, 236, 71, 38, 43, 56, 18, 64, 48, 33, 247, 94, 217, 43, 248, 242, 222, 86, 224, 208, 90, 55, 195, 63, 215, 227, 34, 156, 195, 217, 73, 211, 214, 123, 65, 62, 246, 220, 58, 75, 186, 118, 42, 159, 204, 225, 55, 76, 222, 219, 115, 192, 13, 187, 30, 209, 187, 43, 154, 7, 166, 72, 197, 150, 142, 218, 11, 107, 2, 51, 180, 20, 207, 58, 115, 180, 22, 6, 215, 225, 160, 0, 141, 243, 180, 46, 187, 86, 158, 169, 245, 160, 16, 21, 123, 93, 63, 99, 107, 85, 229, 171, 204, 217, 66, 58, 243, 62, 10, 14, 54, 136, 125, 32, 77, 211, 186, 13, 59, 136, 40, 50, 184, 47, 231, 159, 121, 166, 246, 116, 122, 88, 167, 32, 76, 1, 162, 183, 125, 173, 23, 18, 120, 50, 105, 16, 147, 107, 30, 87, 80, 48, 143, 140, 194, 249, 58, 7, 251, 191, 188, 17, 73, 104, 179, 82, 207, 32, 247, 242, 208, 32, 145, 191, 62, 203, 68, 92, 72, 157, 175, 98, 42, 206, 218, 80, 125, 237, 39, 227, 66, 188, 248, 50, 211, 113, 82, 158, 57, 5, 176, 184, 143, 201, 97, 38, 54, 4, 152, 40, 200, 167, 36, 153, 12, 227, 37, 95, 163, 19, 23, 69, 254, 137, 199, 178, 79, 228, 22, 148, 41, 248, 230, 114, 9, 104, 82, 196, 45, 160, 150, 73, 92, 0, 216, 238, 214, 16, 186, 187, 14, 218, 167, 33, 33, 152, 191, 95, 157, 4, 64, 120, 244, 188, 22, 191, 164, 53, 140, 254, 36, 95, 52, 17, 144, 102, 139, 42, 169, 135, 41, 147, 65, 158, 13, 235, 97, 148, 110, 131, 244, 1, 164, 69, 175, 186, 186, 212, 105, 129, 22, 247, 28, 5, 90, 13, 31, 31, 99, 102, 70, 169, 144, 89, 23, 189, 93, 102, 154, 149, 98, 186, 178, 137, 86, 11, 45, 157, 106, 117, 205, 225, 231, 158, 108, 109, 209, 103, 6, 167, 91, 241, 100, 169, 194, 163, 198, 15, 38, 58, 26, 103, 124, 210, 8, 234, 141, 71, 3, 186, 91, 13, 78, 165, 214, 245, 197, 122, 9, 30, 233, 39, 172, 57, 79, 221, 98, 87, 50, 205, 234, 233, 189, 157, 137, 87, 77, 147, 51, 253, 74, 158, 13, 197, 213, 57, 138, 236, 211, 238, 146, 31, 166, 113, 30, 142, 216, 243, 172, 206, 76, 161, 94, 58, 94, 157, 111, 88, 135, 72, 73, 100, 157, 95, 222, 237, 119, 154, 206, 224, 186, 197, 70, 160, 231, 196, 145, 109, 232, 226, 129, 150, 115, 127, 63, 223, 186, 117, 113, 38, 143, 23, 144, 138, 69, 179, 104, 236, 128, 198, 13, 174, 157, 9, 141, 27, 0, 7, 242, 122, 77, 6, 103, 77, 240, 105, 120, 187, 26, 32, 193, 50, 19, 48, 89, 124, 69, 175, 103, 47, 152, 172, 129, 168, 161, 0, 138, 200, 246, 243, 11, 139, 147, 237, 100, 154, 192, 90, 50, 125, 28, 151, 114, 183, 224, 106, 34, 13, 52, 156, 20, 253, 221, 192, 220, 7, 116, 56, 253, 221, 149, 118, 33, 114, 108, 129, 221, 135, 154, 41, 219, 2, 49, 43, 21, 192, 235, 167, 67, 28, 191, 40, 48, 118, 34, 190, 154, 227, 73, 202, 200, 131, 239, 184, 205, 114, 194, 252, 249, 138, 156, 54, 92, 126, 226, 151, 206, 41, 78, 108, 75, 79, 66, 95, 194, 203, 116, 81, 247, 230, 123, 38, 50, 161, 16, 193, 165, 247, 79, 225, 131, 246, 245, 31, 51, 227, 62, 185, 143, 178, 139, 46, 53, 148, 187, 46, 39, 239, 131, 107, 138, 237, 96, 41, 179, 171, 194, 92, 157, 85, 170, 241, 28, 62, 107, 87, 163, 54, 103, 93, 53, 194, 165, 250, 107, 5, 174, 25, 173, 150, 242, 109, 2, 5, 44, 151, 117, 164, 41, 111, 40, 148, 121, 21, 210, 184, 79, 184, 18, 109, 47, 95, 94, 130, 182, 250, 188, 181, 109, 253, 18, 62, 107, 183, 117, 67, 222, 186, 214, 14, 151, 235, 103, 169, 163, 138, 13, 12, 29, 14, 47, 193, 208, 64, 94, 99, 195, 193, 150, 29, 202, 28, 251, 39, 124, 132, 222, 249, 168, 78, 37, 52, 107, 214, 148, 205, 171, 61, 52, 148, 194, 210, 126, 220, 87, 206, 9, 34, 206, 57, 229, 211, 151, 225, 167, 90, 227, 0, 57, 86, 225, 172, 83, 194, 166, 147, 180, 54, 227, 91, 33, 10, 168, 28, 31, 5, 173, 36, 34, 179, 217, 37, 68, 36, 144, 215, 79, 156, 24, 126, 173, 68, 92, 89, 94, 130, 184, 64, 94, 63, 113, 120, 220, 71, 73, 172, 213, 253, 243, 117, 53, 255, 156, 125, 234, 232, 195, 83, 72, 50, 176, 195, 186, 124, 37, 22, 186, 87, 87, 56, 169, 19, 80, 51, 110, 129, 33, 79, 90, 128, 15, 35, 103, 23, 203, 208, 220, 120, 235, 21, 167, 230, 28, 201, 213, 214, 156, 26, 0, 119, 40, 232, 174, 78, 205, 146, 68, 45, 86, 226, 123, 176, 244, 165, 185, 64, 107, 87, 85, 75, 44, 200, 226, 131, 50, 88, 28, 68, 147, 97, 200, 70, 174, 91, 183, 221, 28, 119, 117, 17, 238, 102, 157, 183, 198, 230, 144, 46, 47, 140, 197, 41, 194, 185, 253, 220, 170, 37, 186, 232, 249, 34, 84, 89, 144, 220, 149, 42, 11, 246, 37, 76, 163, 48, 33, 45, 234, 42, 212, 249, 10, 234, 67, 96, 190, 251, 46, 234, 14, 117, 6, 210, 152, 52, 57, 158, 78, 59, 27, 77, 7, 124, 27, 135, 30, 26, 16, 135, 123, 208, 136, 165, 62, 35, 111, 210, 181, 114, 14, 197, 178, 82, 43, 95, 235, 122, 235, 118, 189, 84, 189, 161, 177, 215, 171, 55, 151, 131, 181, 178, 10, 201, 8, 214, 93, 154, 54, 9, 79, 47, 54, 128, 209, 220, 51, 60, 220, 51, 104, 197, 24, 138, 12, 96, 248, 205, 17, 241, 244, 77, 194, 70, 76, 124, 143, 107, 127, 119, 199, 140, 254, 98, 121, 177, 137, 121, 141, 223, 130, 113, 126, 145, 148, 165, 121, 123, 151, 190, 124, 9, 27, 131, 245, 203, 59, 104, 30, 22, 58, 4, 154, 213, 126, 75, 243, 222, 68, 33, 127, 50, 87, 217, 145, 118, 7, 88, 197, 134, 39, 29, 36, 167, 90, 236, 134, 116, 150, 82, 181, 167, 105, 30, 195, 109, 220, 135, 117, 208, 213, 215, 167, 42, 58, 188, 114, 120, 214, 224, 128, 241, 243, 225, 32, 231, 251, 206, 183, 14, 178, 17, 4, 1, 151, 244, 181, 154, 144, 87, 105, 222, 219, 202, 100, 43, 174, 112, 63, 217, 72, 77, 91, 200, 172, 78, 60, 163, 148, 100, 237, 220, 247, 228, 123, 163, 67, 43, 240, 209, 83, 179, 31, 69, 136, 229, 35, 43, 210, 52, 137, 14, 173, 124, 164, 161, 21, 171, 241, 160, 73, 77, 166, 163, 143, 158, 139, 32, 165, 208, 190, 17, 49, 153, 220, 127, 138, 58, 34, 74, 18, 234, 206, 205, 168, 207, 42, 211, 189, 35, 25, 35, 86, 197, 121, 174, 15, 38, 69, 138, 135, 16, 117, 200, 21, 16, 240, 246, 94, 4, 132, 171, 246, 206, 12, 174, 28, 188, 169, 182, 30, 218, 186, 73, 139, 188, 48, 43, 172, 113, 201, 206, 46, 8, 92, 139, 214, 37, 83, 155, 225, 45, 216, 205, 109, 181, 169, 186, 155, 48, 112, 94, 136, 115, 79, 0, 202, 106, 157, 61, 168, 144, 155, 170, 172, 138, 219, 228, 12, 160, 30, 38, 83, 29, 111, 215, 235, 201, 205, 67, 154, 117, 237, 194, 183, 156, 186, 246, 162, 221, 141, 94, 180, 181, 235, 41, 2, 90, 73, 22, 193, 218, 192, 115, 139, 28, 225, 190, 101, 88, 93, 116, 186, 229, 13, 206, 192, 77, 100, 26, 167, 109, 113, 91, 33, 13, 221, 111, 70, 177, 34, 43, 223, 14, 107, 155, 250, 7, 145, 250, 174, 248, 226, 219, 12, 120, 238, 71, 198, 6, 219, 2, 142, 141, 51, 7, 190, 239, 188, 126, 70, 173, 232, 125, 95, 81, 222, 11, 138, 176, 101, 119, 175, 32, 106, 215, 87, 171, 155, 170, 91, 244, 238, 238, 122, 46, 26, 241, 188, 70, 107, 99, 155, 22, 152, 92, 98, 117, 108, 19, 234, 107, 180, 62, 22, 207, 134, 134, 200, 141, 124, 231, 118, 208, 76, 127, 141, 147, 59, 44, 89, 189, 198, 103, 119, 12, 98, 225, 3, 90, 39, 120, 132, 26, 165, 241, 228, 169, 120, 207, 62, 99, 75, 46, 219, 209, 75, 109, 241, 226, 199, 85, 215, 228, 82, 178, 200, 170, 92, 178, 248, 154, 129, 249, 53, 126, 135, 104, 252, 78, 64, 227, 161, 223, 237, 10, 36, 212, 159, 248, 129, 247, 158, 208, 186, 31, 178, 252, 19, 43, 115, 207, 44, 252, 5, 248, 224, 186, 95, 37, 16, 53, 43, 127, 45, 153, 105, 183, 246, 55, 180, 6, 229, 170, 87, 255, 134, 25, 79, 157, 237, 107, 180, 254, 215, 226, 231, 10, 43, 128, 27, 152, 122, 213, 107, 128, 213, 194, 54, 12, 163, 210, 46, 183, 82, 88, 13, 4, 49, 176, 74, 83, 218, 37, 24, 203, 107, 132, 102, 11, 13, 188, 12, 58, 246, 100, 221, 168, 132, 211, 67, 155, 210, 193, 66, 230, 135, 112, 245, 187, 92, 207, 22, 107, 134, 60, 221, 139, 204, 88, 151, 167, 60, 223, 147, 67, 94, 254, 4, 103, 207, 137, 145, 47, 127, 124, 185, 167, 7, 192, 252, 249, 133, 245, 60, 220, 195, 227, 226, 147, 61, 53, 44, 230, 143, 63, 209, 199, 9, 125, 252, 153, 62, 206, 246, 204, 80, 154, 39, 148, 123, 102, 68, 205, 19, 206, 247, 172, 129, 181, 72, 62, 245, 39, 255, 106, 39, 251, 206, 71, 66, 252, 182, 185, 236, 174, 131, 141, 236, 75, 56, 97, 152, 44, 179, 73, 251, 102, 43, 238, 192, 44, 6, 60, 98, 78, 157, 189, 106, 88, 196, 145, 110, 56, 135, 239, 7, 241, 195, 88, 75, 227, 123, 47, 86, 91, 220, 240, 156, 86, 175, 29, 72, 111, 66, 240, 124, 247, 1, 211, 102, 16, 149, 254, 253, 181, 200, 129, 218, 12, 188, 215, 102, 219, 228, 192, 135, 23, 102, 191, 184, 112, 104, 242, 92, 216, 172, 102, 12, 156, 178, 68, 176, 255, 57, 138, 244, 155, 212, 167, 222, 212, 115, 111, 234, 169, 55, 245, 87, 43, 149, 215, 140, 31, 179, 15, 92, 123, 240, 48, 186, 233, 31, 114, 232, 75, 154, 69, 72, 167, 102, 248, 34, 249, 207, 216, 120, 171, 1, 21, 15, 10, 249, 49, 213, 103, 148, 1, 38, 55, 43, 154, 247, 160, 213, 94, 122, 153, 49, 244, 166, 158, 120, 83, 127, 242, 166, 206, 188, 169, 165, 55, 117, 226, 77, 253, 185, 182, 65, 106, 6, 193, 154, 27, 42, 8, 183, 22, 39, 101, 212, 110, 5, 86, 190, 244, 86, 227, 69, 99, 53, 2, 35, 228, 22, 164, 120, 68, 235, 114, 60, 177, 144, 253, 213, 68, 94, 70, 248, 105, 131, 80, 163, 180, 210, 126, 143, 80, 127, 12, 167, 127, 184, 245, 173, 219, 3, 18, 68, 117, 52, 120, 239, 222, 177, 168, 9, 21, 93, 204, 9, 159, 190, 144, 15, 63, 123, 58, 140, 186, 146, 205, 18, 44, 180, 199, 28, 179, 31, 151, 244, 19, 46, 105, 178, 118, 73, 248, 108, 113, 211, 4, 23, 210, 205, 153, 178, 1, 26, 27, 156, 57, 151, 96, 117, 226, 162, 218, 154, 230, 31, 143, 227, 172, 195, 186, 255, 143, 199, 185, 116, 6, 58, 131, 100, 186, 53, 102, 45, 155, 150, 39, 240, 6, 63, 74, 136, 36, 219, 26, 31, 111, 229, 201, 16, 222, 179, 135, 231, 63, 242, 7, 249, 54, 221, 138, 103, 41, 188, 129, 47, 157, 118, 156, 241, 114, 224, 75, 167, 169, 187, 111, 246, 240, 131, 126, 155, 100, 249, 224, 36, 21, 228, 161, 39, 253, 254, 36, 158, 192, 43, 248, 210, 105, 147, 41, 171, 100, 206, 179, 84, 211, 19, 147, 62, 93, 156, 65, 218, 244, 216, 36, 205, 0, 82, 224, 22, 63, 245, 155, 140, 13, 7, 63, 242, 87, 217, 169, 73, 157, 127, 226, 104, 225, 75, 167, 85, 49, 7, 131, 47, 148, 182, 20, 105, 75, 148, 86, 46, 120, 90, 169, 246, 142, 118, 62, 198, 91, 176, 27, 117, 235, 36, 153, 31, 51, 223, 20, 190, 153, 167, 205, 91, 34, 222, 122, 1, 111, 226, 105, 60, 29, 220, 251, 94, 101, 200, 242, 173, 227, 156, 87, 56, 59, 70, 105, 217, 146, 83, 101, 184, 90, 142, 179, 173, 227, 100, 107, 84, 64, 114, 57, 58, 182, 210, 179, 41, 164, 159, 142, 43, 146, 206, 129, 143, 207, 75, 156, 56, 56, 97, 77, 194, 145, 140, 199, 36, 157, 87, 121, 80, 146, 18, 5, 228, 184, 36, 144, 67, 78, 238, 176, 156, 226, 196, 164, 228, 56, 203, 57, 78, 20, 212, 142, 40, 228, 248, 152, 83, 53, 74, 73, 98, 33, 10, 34, 164, 166, 188, 244, 148, 150, 158, 10, 185, 42, 19, 156, 248, 113, 206, 89, 76, 11, 154, 113, 217, 152, 141, 8, 206, 140, 139, 112, 54, 160, 137, 83, 81, 35, 130, 51, 19, 162, 66, 113, 206, 121, 233, 243, 178, 192, 137, 165, 224, 231, 39, 2, 185, 224, 12, 137, 41, 206, 243, 88, 52, 159, 46, 253, 252, 100, 107, 48, 227, 77, 13, 95, 36, 145, 41, 66, 86, 202, 55, 91, 63, 193, 111, 231, 117, 133, 94, 87, 232, 245, 88, 104, 215, 56, 198, 40, 199, 139, 124, 185, 112, 75, 98, 122, 54, 137, 45, 133, 99, 201, 76, 119, 32, 81, 254, 34, 233, 76, 145, 132, 112, 18, 244, 159, 22, 28, 57, 124, 153, 196, 51, 166, 217, 99, 142, 188, 196, 176, 203, 5, 231, 24, 124, 245, 212, 38, 6, 48, 104, 135, 139, 227, 202, 103, 211, 126, 252, 5, 192, 95, 190, 84, 40, 158, 60, 129, 231, 39, 79, 213, 243, 179, 191, 195, 243, 179, 183, 234, 249, 221, 27, 120, 126, 247, 66, 61, 255, 131, 195, 255, 67, 195, 255, 243, 45, 60, 239, 63, 81, 207, 241, 146, 139, 74, 182, 208, 68, 30, 127, 228, 70, 112, 88, 232, 54, 29, 12, 126, 135, 148, 98, 162, 229, 118, 240, 145, 11, 237, 44, 159, 233, 20, 193, 201, 129, 222, 174, 206, 126, 114, 101, 57, 27, 104, 163, 53, 44, 184, 249, 157, 156, 76, 76, 202, 39, 46, 84, 133, 110, 225, 113, 124, 202, 75, 79, 180, 157, 58, 41, 10, 97, 68, 52, 61, 233, 49, 151, 228, 124, 30, 235, 20, 97, 82, 141, 193, 230, 104, 79, 180, 0, 126, 228, 25, 150, 154, 254, 143, 252, 253, 71, 93, 198, 100, 44, 40, 155, 233, 50, 166, 162, 206, 243, 185, 174, 207, 140, 43, 69, 161, 237, 226, 172, 228, 50, 56, 43, 180, 85, 156, 45, 237, 148, 114, 32, 228, 107, 170, 41, 169, 132, 102, 23, 177, 174, 113, 53, 225, 124, 170, 62, 105, 94, 86, 83, 78, 222, 167, 68, 151, 85, 101, 35, 139, 79, 203, 227, 161, 213, 38, 203, 25, 47, 107, 90, 20, 70, 178, 146, 179, 10, 132, 203, 211, 85, 114, 51, 255, 199, 188, 72, 70, 73, 81, 36, 48, 144, 135, 36, 152, 172, 100, 29, 244, 25, 60, 22, 234, 178, 200, 78, 124, 124, 226, 0, 31, 159, 4, 129, 79, 93, 224, 211, 16, 240, 96, 230, 0, 179, 164, 16, 240, 239, 46, 240, 239, 65, 224, 79, 46, 240, 167, 32, 240, 153, 11, 124, 22, 4, 94, 186, 192, 203, 16, 240, 112, 228, 0, 179, 164, 16, 112, 233, 2, 151, 24, 152, 25, 82, 3, 157, 28, 59, 208, 201, 113, 8, 117, 50, 112, 129, 7, 65, 224, 161, 11, 60, 12, 211, 145, 185, 208, 89, 16, 122, 228, 82, 61, 10, 82, 61, 26, 187, 192, 227, 32, 106, 222, 21, 82, 232, 143, 243, 16, 234, 185, 203, 144, 121, 144, 33, 115, 151, 33, 243, 97, 8, 184, 112, 107, 88, 4, 107, 88, 184, 50, 93, 4, 101, 186, 112, 229, 163, 40, 131, 192, 174, 152, 22, 65, 49, 45, 206, 93, 224, 243, 16, 48, 239, 244, 41, 48, 191, 212, 194, 223, 42, 165, 171, 1, 229, 40, 12, 237, 182, 97, 57, 15, 67, 187, 220, 43, 127, 15, 67, 187, 38, 161, 252, 20, 132, 94, 184, 44, 89, 4, 89, 114, 58, 117, 128, 79, 167, 33, 224, 165, 107, 78, 151, 65, 115, 186, 116, 49, 47, 195, 152, 93, 85, 92, 102, 65, 96, 151, 213, 203, 144, 186, 28, 31, 59, 220, 128, 164, 0, 240, 40, 117, 128, 193, 231, 245, 51, 250, 120, 52, 113, 161, 39, 65, 232, 143, 78, 21, 33, 9, 65, 207, 74, 3, 156, 59, 246, 3, 146, 66, 168, 127, 119, 81, 255, 30, 52, 100, 199, 191, 59, 250, 5, 73, 33, 232, 234, 163, 3, 205, 146, 2, 100, 159, 58, 10, 6, 73, 33, 96, 71, 64, 142, 169, 232, 17, 58, 78, 23, 46, 244, 34, 132, 250, 220, 177, 55, 124, 68, 229, 71, 61, 24, 58, 46, 5, 36, 33, 232, 243, 19, 4, 236, 160, 30, 132, 187, 186, 193, 71, 135, 215, 144, 20, 64, 61, 115, 154, 145, 187, 253, 126, 224, 60, 118, 128, 243, 56, 192, 143, 193, 220, 113, 19, 32, 41, 128, 185, 116, 58, 24, 72, 10, 213, 176, 116, 122, 24, 72, 10, 66, 59, 2, 50, 8, 91, 224, 129, 107, 129, 7, 97, 11, 60, 40, 29, 157, 129, 164, 32, 180, 35, 125, 144, 20, 132, 118, 155, 166, 12, 106, 216, 192, 181, 238, 131, 176, 117, 31, 148, 133, 11, 93, 4, 161, 207, 29, 27, 12, 73, 129, 166, 60, 119, 37, 251, 60, 36, 217, 195, 220, 161, 26, 146, 2, 116, 12, 221, 150, 28, 134, 91, 114, 232, 114, 123, 24, 230, 246, 112, 225, 24, 248, 225, 98, 30, 144, 237, 100, 224, 40, 36, 36, 5, 80, 39, 46, 33, 73, 152, 144, 196, 109, 246, 36, 220, 236, 73, 233, 112, 27, 146, 66, 208, 149, 211, 144, 73, 117, 18, 130, 30, 185, 181, 28, 133, 107, 57, 114, 27, 103, 20, 110, 156, 145, 203, 147, 81, 152, 39, 163, 210, 165, 164, 12, 82, 34, 162, 26, 4, 154, 71, 56, 188, 18, 56, 118, 109, 235, 56, 108, 91, 199, 185, 51, 4, 131, 36, 4, 61, 201, 39, 6, 218, 101, 201, 56, 204, 146, 177, 107, 75, 198, 97, 91, 50, 46, 93, 74, 202, 89, 24, 218, 173, 101, 13, 3, 23, 46, 244, 34, 8, 125, 18, 59, 46, 252, 73, 124, 28, 134, 118, 236, 43, 36, 5, 161, 29, 119, 135, 135, 159, 188, 77, 121, 226, 54, 229, 73, 184, 41, 79, 62, 58, 126, 23, 36, 249, 21, 254, 100, 226, 162, 158, 132, 81, 231, 46, 116, 30, 134, 158, 187, 208, 243, 48, 116, 233, 168, 48, 36, 5, 161, 29, 53, 59, 9, 171, 217, 137, 107, 122, 78, 202, 144, 226, 164, 3, 7, 53, 36, 5, 80, 167, 83, 167, 146, 144, 20, 130, 206, 92, 220, 89, 24, 119, 230, 226, 206, 194, 184, 93, 165, 76, 195, 74, 153, 186, 74, 153, 134, 149, 50, 117, 187, 213, 52, 220, 173, 126, 116, 133, 251, 35, 21, 110, 36, 129, 31, 99, 199, 157, 130, 164, 0, 176, 107, 185, 63, 134, 45, 247, 199, 19, 23, 250, 36, 12, 237, 182, 228, 199, 112, 75, 126, 116, 85, 225, 99, 88, 21, 62, 186, 226, 250, 49, 44, 174, 31, 93, 51, 245, 49, 108, 166, 38, 99, 71, 223, 33, 41, 4, 157, 57, 170, 0, 73, 1, 67, 63, 57, 117, 76, 32, 36, 249, 27, 103, 114, 234, 52, 59, 36, 133, 8, 57, 117, 68, 10, 146, 2, 168, 207, 28, 199, 24, 146, 252, 192, 211, 99, 135, 125, 144, 20, 160, 99, 58, 112, 212, 6, 146, 2, 168, 7, 142, 145, 135, 164, 0, 112, 234, 68, 26, 32, 41, 0, 236, 74, 223, 52, 44, 125, 83, 87, 123, 167, 97, 237, 157, 186, 210, 55, 13, 75, 223, 212, 245, 188, 166, 97, 207, 107, 234, 134, 106, 166, 225, 80, 205, 148, 71, 203, 45, 232, 42, 12, 237, 12, 248, 32, 41, 4, 93, 185, 60, 169, 8, 79, 166, 167, 6, 248, 212, 101, 247, 105, 25, 2, 118, 135, 9, 211, 224, 48, 97, 230, 218, 179, 89, 208, 158, 205, 134, 78, 203, 64, 82, 160, 134, 179, 196, 105, 25, 72, 10, 160, 30, 57, 99, 90, 72, 10, 1, 59, 122, 62, 27, 133, 244, 28, 38, 20, 29, 224, 160, 168, 138, 121, 52, 10, 157, 134, 66, 53, 179, 204, 145, 38, 72, 10, 112, 250, 119, 167, 193, 33, 41, 128, 185, 112, 212, 28, 146, 66, 68, 187, 3, 241, 89, 120, 32, 62, 43, 29, 11, 12, 73, 1, 66, 220, 174, 116, 22, 238, 74, 103, 11, 23, 245, 34, 136, 250, 220, 9, 54, 64, 82, 8, 245, 185, 203, 190, 243, 160, 13, 153, 157, 59, 186, 8, 73, 1, 232, 204, 29, 169, 100, 193, 145, 74, 230, 218, 235, 44, 108, 175, 51, 215, 5, 200, 194, 46, 64, 230, 54, 77, 86, 6, 59, 199, 204, 53, 148, 89, 216, 80, 102, 174, 233, 203, 194, 166, 47, 115, 219, 61, 11, 183, 123, 230, 6, 221, 178, 112, 208, 45, 159, 56, 116, 67, 82, 8, 186, 112, 26, 7, 146, 252, 50, 149, 187, 179, 13, 57, 157, 109, 64, 192, 243, 196, 161, 3, 146, 2, 192, 99, 199, 64, 65, 146, 63, 152, 60, 119, 199, 41, 243, 240, 56, 101, 94, 184, 116, 20, 65, 126, 204, 221, 105, 143, 57, 157, 246, 32, 208, 110, 68, 111, 30, 142, 232, 205, 93, 67, 50, 15, 27, 146, 185, 235, 194, 207, 203, 144, 47, 50, 119, 125, 128, 121, 216, 7, 152, 187, 162, 61, 15, 139, 246, 220, 245, 1, 230, 97, 31, 96, 238, 42, 194, 60, 172, 8, 115, 87, 17, 230, 97, 69, 152, 47, 221, 134, 95, 6, 27, 190, 152, 57, 208, 144, 20, 130, 118, 141, 67, 17, 54, 14, 133, 203, 193, 34, 204, 193, 210, 237, 217, 203, 112, 207, 94, 186, 253, 111, 57, 10, 134, 26, 74, 183, 3, 46, 195, 29, 48, 44, 115, 178, 161, 199, 65, 57, 41, 199, 142, 251, 2, 73, 33, 232, 19, 103, 34, 1, 146, 252, 58, 92, 78, 29, 231, 25, 146, 66, 168, 93, 135, 184, 12, 59, 196, 229, 239, 206, 216, 3, 146, 130, 208, 46, 238, 223, 195, 184, 221, 200, 68, 89, 134, 102, 234, 74, 87, 23, 202, 176, 46, 148, 174, 46, 148, 97, 93, 40, 221, 1, 86, 25, 30, 96, 149, 159, 28, 67, 5, 73, 24, 250, 19, 2, 118, 235, 248, 233, 36, 8, 236, 202, 246, 167, 176, 108, 47, 29, 207, 1, 146, 2, 208, 213, 204, 25, 52, 65, 146, 223, 4, 86, 174, 189, 172, 194, 33, 143, 202, 141, 44, 86, 225, 200, 98, 229, 206, 59, 84, 225, 121, 135, 202, 141, 67, 86, 225, 56, 100, 229, 14, 108, 170, 240, 192, 166, 58, 119, 58, 74, 72, 10, 64, 47, 198, 78, 239, 14, 73, 65, 104, 135, 18, 72, 10, 65, 187, 126, 198, 34, 236, 103, 44, 220, 62, 123, 17, 238, 179, 23, 133, 35, 220, 144, 228, 111, 248, 197, 185, 91, 201, 115, 82, 201, 197, 57, 2, 118, 233, 160, 190, 20, 2, 134, 21, 164, 22, 48, 95, 84, 234, 39, 250, 116, 226, 16, 13, 73, 126, 162, 79, 39, 46, 234, 73, 21, 2, 118, 251, 166, 211, 112, 223, 116, 234, 246, 77, 167, 225, 190, 233, 180, 116, 22, 103, 65, 82, 0, 90, 172, 107, 36, 208, 124, 141, 163, 215, 151, 63, 155, 56, 100, 67, 82, 0, 245, 217, 204, 33, 27, 146, 130, 208, 142, 254, 66, 146, 159, 127, 103, 174, 39, 112, 22, 246, 4, 150, 110, 132, 125, 25, 142, 176, 47, 93, 110, 47, 195, 220, 22, 107, 61, 41, 244, 34, 9, 240, 239, 60, 117, 28, 1, 72, 10, 160, 62, 159, 58, 28, 129, 36, 63, 71, 206, 103, 78, 211, 64, 82, 0, 216, 173, 226, 121, 184, 138, 231, 174, 101, 61, 47, 61, 116, 224, 221, 119, 7, 85, 82, 196, 85, 94, 28, 12, 147, 172, 74, 171, 165, 125, 179, 25, 108, 243, 84, 91, 26, 95, 36, 227, 120, 176, 84, 57, 126, 43, 98, 56, 137, 248, 101, 60, 151, 231, 254, 194, 230, 139, 223, 146, 120, 194, 82, 186, 248, 252, 110, 154, 237, 85, 114, 86, 117, 227, 98, 76, 182, 156, 86, 252, 220, 100, 103, 43, 135, 196, 6, 251, 126, 123, 193, 210, 201, 254, 217, 170, 88, 162, 141, 104, 106, 71, 182, 216, 147, 177, 71, 11, 128, 66, 183, 51, 70, 77, 143, 151, 223, 131, 173, 208, 27, 189, 104, 200, 183, 136, 242, 77, 15, 106, 71, 232, 5, 203, 200, 119, 185, 37, 246, 1, 141, 73, 148, 102, 101, 21, 103, 131, 36, 31, 241, 250, 31, 86, 249, 92, 144, 200, 138, 240, 238, 150, 215, 196, 160, 147, 115, 69, 153, 176, 165, 67, 21, 201, 235, 2, 39, 53, 71, 250, 100, 176, 139, 16, 71, 249, 137, 206, 221, 228, 44, 187, 30, 44, 229, 100, 43, 158, 2, 85, 255, 138, 60, 229, 85, 49, 71, 30, 6, 152, 88, 54, 51, 81, 48, 130, 238, 112, 23, 57, 158, 39, 153, 84, 189, 207, 88, 166, 171, 182, 248, 4, 252, 186, 3, 231, 201, 241, 251, 22, 10, 178, 95, 124, 222, 230, 50, 154, 185, 184, 146, 132, 105, 91, 123, 200, 109, 181, 109, 204, 53, 32, 14, 104, 194, 247, 221, 193, 17, 11, 244, 64, 61, 4, 50, 200, 179, 81, 58, 94, 40, 32, 115, 86, 34, 130, 249, 84, 164, 149, 255, 253, 17, 16, 157, 74, 18, 222, 183, 170, 4, 205, 162, 107, 99, 91, 220, 112, 142, 218, 74, 89, 176, 245, 181, 179, 128, 189, 213, 116, 69, 229, 77, 145, 87, 185, 183, 170, 207, 147, 138, 0, 85, 203, 121, 210, 221, 232, 137, 194, 36, 15, 94, 198, 147, 100, 95, 221, 84, 153, 178, 210, 186, 20, 187, 45, 197, 28, 17, 17, 2, 161, 172, 173, 228, 133, 131, 6, 4, 134, 219, 71, 23, 184, 94, 100, 4, 76, 131, 204, 8, 160, 6, 110, 58, 122, 254, 121, 216, 234, 20, 211, 171, 45, 95, 98, 11, 219, 134, 237, 148, 216, 9, 81, 51, 100, 196, 94, 37, 159, 60, 38, 179, 23, 125, 18, 198, 72, 89, 8, 176, 232, 223, 182, 43, 197, 152, 118, 175, 201, 33, 103, 45, 128, 191, 33, 75, 234, 134, 12, 172, 202, 123, 120, 146, 206, 108, 183, 198, 165, 94, 159, 199, 202, 187, 62, 91, 56, 91, 25, 240, 203, 20, 228, 32, 179, 174, 112, 229, 2, 2, 39, 22, 105, 60, 49, 28, 125, 166, 74, 155, 38, 85, 164, 244, 155, 181, 22, 148, 138, 97, 37, 243, 126, 201, 202, 120, 148, 28, 38, 213, 219, 164, 76, 138, 211, 100, 120, 56, 205, 171, 110, 170, 5, 102, 7, 156, 32, 192, 218, 14, 188, 111, 174, 236, 134, 242, 165, 117, 55, 167, 14, 89, 29, 251, 183, 7, 37, 174, 57, 108, 78, 101, 73, 132, 78, 254, 194, 219, 197, 147, 254, 112, 159, 61, 224, 124, 47, 249, 221, 72, 7, 35, 209, 17, 14, 85, 47, 216, 193, 48, 208, 109, 224, 211, 58, 129, 162, 199, 12, 221, 105, 242, 204, 16, 12, 167, 56, 136, 90, 63, 183, 106, 45, 48, 238, 110, 120, 46, 211, 48, 215, 195, 236, 222, 131, 227, 131, 228, 165, 163, 226, 194, 38, 246, 203, 92, 211, 193, 107, 135, 206, 73, 98, 76, 227, 252, 142, 80, 169, 130, 69, 207, 138, 124, 230, 41, 127, 199, 202, 157, 202, 115, 241, 234, 104, 238, 91, 149, 22, 121, 30, 193, 9, 196, 47, 248, 209, 17, 66, 146, 212, 177, 25, 246, 65, 14, 126, 33, 144, 168, 217, 191, 255, 218, 177, 182, 33, 175, 236, 147, 153, 61, 221, 13, 101, 9, 202, 55, 73, 141, 236, 210, 120, 93, 142, 56, 228, 123, 191, 227, 217, 78, 182, 119, 123, 92, 158, 213, 97, 65, 50, 93, 121, 48, 153, 246, 65, 212, 27, 199, 63, 192, 178, 71, 187, 122, 117, 114, 143, 124, 73, 45, 139, 39, 87, 151, 216, 210, 149, 149, 232, 170, 20, 72, 145, 211, 161, 150, 88, 13, 16, 117, 21, 152, 27, 250, 44, 47, 158, 198, 131, 19, 190, 55, 255, 56, 30, 76, 70, 153, 192, 248, 184, 24, 71, 158, 179, 149, 160, 175, 124, 41, 15, 34, 187, 239, 169, 233, 203, 154, 11, 153, 24, 145, 172, 192, 142, 56, 222, 9, 10, 101, 63, 161, 219, 100, 99, 135, 151, 222, 1, 140, 227, 88, 131, 83, 125, 18, 179, 218, 42, 120, 255, 208, 100, 141, 130, 47, 112, 93, 128, 229, 224, 37, 32, 166, 132, 171, 213, 103, 150, 248, 73, 50, 200, 103, 243, 116, 154, 48, 174, 117, 217, 51, 206, 103, 124, 12, 214, 38, 69, 234, 30, 195, 167, 42, 102, 4, 90, 17, 37, 79, 144, 225, 231, 7, 88, 71, 228, 232, 3, 155, 106, 81, 125, 16, 99, 102, 89, 176, 101, 92, 4, 138, 109, 208, 59, 106, 41, 173, 3, 30, 20, 233, 75, 113, 131, 28, 228, 177, 78, 151, 33, 52, 120, 4, 73, 80, 176, 60, 234, 191, 87, 191, 118, 222, 163, 54, 84, 167, 48, 41, 31, 48, 153, 65, 152, 226, 143, 104, 22, 155, 177, 228, 91, 94, 240, 155, 56, 45, 34, 113, 144, 94, 132, 35, 35, 47, 21, 164, 140, 89, 96, 105, 125, 93, 35, 173, 175, 149, 82, 34, 4, 44, 177, 89, 33, 17, 188, 163, 143, 175, 133, 184, 249, 58, 51, 160, 39, 80, 171, 135, 164, 254, 219, 126, 40, 84, 7, 63, 128, 161, 252, 50, 197, 192, 73, 203, 252, 176, 66, 206, 105, 116, 136, 50, 99, 199, 175, 241, 20, 26, 167, 174, 195, 64, 87, 220, 14, 197, 21, 84, 31, 88, 119, 7, 124, 96, 108, 121, 10, 237, 255, 12, 141, 164, 25, 187, 2, 117, 65, 181, 229, 66, 106, 169, 0, 171, 200, 236, 103, 214, 123, 224, 62, 245, 32, 171, 110, 238, 6, 58, 100, 124, 248, 171, 81, 33, 171, 195, 213, 56, 153, 119, 177, 99, 247, 175, 90, 233, 252, 4, 51, 169, 118, 78, 139, 114, 144, 246, 87, 69, 218, 119, 145, 82, 4, 118, 151, 46, 209, 29, 5, 137, 12, 49, 156, 21, 133, 203, 106, 16, 37, 56, 132, 16, 223, 157, 80, 3, 217, 119, 33, 133, 36, 233, 81, 160, 221, 22, 242, 181, 20, 31, 231, 212, 125, 125, 138, 27, 64, 217, 61, 26, 63, 149, 50, 41, 67, 209, 81, 3, 154, 15, 23, 83, 16, 154, 167, 103, 226, 4, 81, 113, 203, 97, 194, 159, 14, 171, 184, 96, 30, 7, 240, 241, 253, 198, 55, 77, 125, 186, 64, 37, 123, 115, 55, 2, 231, 154, 15, 14, 31, 232, 201, 9, 1, 61, 210, 184, 246, 167, 227, 175, 3, 61, 174, 30, 156, 207, 25, 135, 115, 44, 33, 33, 140, 159, 207, 124, 144, 13, 166, 139, 97, 226, 144, 33, 49, 184, 166, 241, 72, 138, 140, 239, 128, 26, 11, 5, 121, 148, 62, 172, 70, 108, 198, 38, 9, 174, 10, 111, 0, 52, 110, 129, 180, 125, 121, 222, 218, 142, 73, 231, 71, 19, 10, 30, 60, 213, 189, 172, 192, 188, 237, 190, 19, 249, 248, 89, 234, 220, 51, 55, 215, 213, 185, 176, 161, 235, 234, 56, 165, 234, 212, 82, 146, 131, 156, 239, 30, 102, 139, 172, 96, 15, 213, 105, 115, 147, 49, 105, 91, 188, 70, 183, 199, 154, 102, 100, 70, 36, 45, 152, 240, 5, 106, 234, 125, 29, 174, 172, 23, 188, 169, 190, 222, 76, 159, 177, 202, 37, 19, 151, 64, 117, 157, 87, 225, 170, 58, 160, 77, 213, 116, 50, 144, 42, 2, 148, 62, 85, 248, 165, 210, 173, 159, 242, 178, 146, 215, 106, 31, 204, 68, 125, 165, 97, 16, 4, 67, 77, 197, 175, 183, 34, 175, 53, 66, 132, 50, 149, 208, 19, 205, 180, 138, 218, 30, 91, 250, 222, 179, 137, 169, 183, 26, 250, 67, 20, 146, 94, 129, 40, 56, 136, 110, 25, 208, 196, 213, 93, 50, 192, 85, 84, 114, 143, 3, 59, 151, 11, 240, 123, 67, 196, 9, 140, 234, 148, 39, 56, 14, 241, 219, 102, 75, 100, 132, 167, 229, 17, 96, 181, 50, 151, 121, 78, 201, 130, 191, 210, 170, 145, 188, 158, 94, 67, 54, 179, 104, 133, 174, 17, 223, 158, 58, 34, 83, 245, 29, 150, 213, 251, 122, 253, 137, 77, 93, 189, 136, 88, 150, 187, 227, 169, 117, 171, 78, 198, 167, 139, 134, 134, 58, 37, 44, 162, 135, 8, 146, 104, 31, 31, 188, 108, 171, 210, 30, 42, 123, 0, 114, 84, 32, 83, 194, 95, 33, 203, 226, 139, 124, 24, 167, 228, 34, 216, 139, 33, 158, 185, 180, 247, 162, 63, 68, 233, 123, 145, 86, 114, 93, 228, 30, 250, 125, 177, 241, 47, 208, 91, 241, 57, 61, 139, 129, 219, 13, 44, 116, 234, 15, 103, 37, 167, 217, 88, 50, 64, 84, 136, 115, 224, 95, 178, 55, 107, 98, 137, 199, 2, 166, 196, 248, 95, 178, 99, 176, 153, 197, 241, 44, 184, 41, 178, 122, 9, 90, 236, 118, 129, 149, 181, 103, 17, 213, 178, 131, 32, 31, 214, 34, 51, 175, 37, 9, 246, 35, 138, 127, 30, 218, 161, 7, 224, 51, 67, 14, 33, 250, 176, 108, 59, 143, 223, 96, 123, 218, 71, 247, 44, 78, 76, 232, 112, 153, 85, 241, 153, 136, 219, 220, 234, 223, 114, 98, 63, 87, 224, 15, 27, 139, 114, 117, 30, 49, 116, 167, 164, 221, 77, 33, 215, 218, 69, 186, 82, 69, 16, 62, 215, 151, 20, 254, 64, 199, 25, 20, 119, 25, 84, 211, 20, 242, 219, 206, 102, 199, 233, 120, 145, 47, 202, 142, 215, 120, 22, 30, 233, 182, 208, 104, 77, 177, 44, 13, 191, 88, 197, 18, 140, 0, 40, 124, 28, 25, 242, 21, 205, 181, 33, 116, 135, 16, 165, 75, 245, 191, 64, 30, 197, 173, 222, 224, 59, 247, 72, 205, 53, 32, 210, 91, 15, 154, 80, 191, 3, 31, 151, 58, 196, 84, 196, 244, 251, 14, 28, 61, 149, 214, 190, 177, 134, 56, 129, 148, 30, 226, 5, 178, 17, 183, 144, 37, 238, 32, 206, 227, 129, 146, 96, 229, 219, 233, 193, 42, 188, 51, 250, 168, 147, 204, 24, 92, 6, 162, 17, 48, 200, 141, 14, 172, 117, 28, 213, 179, 134, 199, 68, 13, 102, 161, 1, 2, 177, 41, 10, 213, 34, 211, 156, 178, 7, 219, 240, 241, 89, 9, 82, 122, 200, 66, 96, 6, 68, 15, 105, 30, 98, 36, 20, 96, 88, 175, 103, 94, 125, 86, 214, 34, 51, 35, 70, 245, 241, 40, 161, 191, 159, 241, 116, 8, 247, 234, 113, 125, 91, 167, 208, 240, 241, 89, 124, 155, 199, 61, 135, 235, 218, 238, 91, 181, 49, 178, 137, 5, 201, 18, 59, 49, 217, 172, 205, 167, 141, 219, 119, 111, 33, 146, 65, 103, 92, 19, 194, 43, 154, 176, 84, 210, 29, 184, 219, 171, 228, 141, 163, 96, 81, 212, 166, 20, 243, 220, 126, 149, 177, 115, 132, 197, 174, 182, 75, 34, 194, 230, 246, 69, 210, 43, 189, 148, 124, 153, 95, 143, 135, 67, 171, 50, 63, 10, 252, 221, 76, 14, 53, 181, 31, 188, 109, 249, 197, 219, 200, 63, 246, 54, 143, 111, 188, 249, 36, 25, 76, 99, 17, 87, 61, 224, 43, 238, 170, 52, 150, 215, 5, 173, 52, 150, 188, 220, 72, 178, 83, 79, 76, 7, 53, 121, 32, 224, 168, 237, 230, 211, 236, 52, 45, 242, 12, 174, 179, 81, 150, 211, 186, 125, 207, 34, 85, 224, 16, 98, 25, 68, 129, 130, 136, 217, 41, 43, 188, 174, 56, 3, 107, 5, 79, 144, 251, 100, 191, 169, 27, 212, 82, 200, 218, 161, 173, 190, 231, 214, 201, 230, 141, 50, 1, 236, 10, 46, 148, 202, 130, 4, 215, 137, 38, 25, 148, 219, 195, 64, 107, 246, 172, 178, 255, 53, 131, 145, 151, 233, 93, 60, 113, 73, 37, 199, 141, 61, 140, 167, 119, 185, 189, 10, 198, 96, 63, 227, 65, 124, 167, 41, 106, 60, 243, 55, 208, 172, 93, 195, 204, 90, 54, 72, 202, 167, 109, 9, 248, 85, 140, 8, 82, 152, 166, 12, 140, 9, 248, 224, 146, 189, 55, 3, 83, 193, 188, 191, 57, 119, 195, 216, 254, 152, 199, 129, 163, 180, 89, 174, 128, 48, 60, 142, 181, 103, 102, 70, 80, 168, 163, 28, 61, 83, 12, 238, 203, 125, 78, 245, 151, 31, 209, 112, 158, 17, 126, 93, 161, 247, 244, 125, 111, 101, 220, 181, 222, 148, 167, 136, 187, 13, 69, 136, 86, 18, 130, 84, 215, 68, 206, 48, 134, 36, 185, 29, 52, 111, 66, 164, 85, 198, 80, 202, 190, 72, 181, 26, 234, 26, 75, 211, 209, 56, 221, 249, 83, 152, 247, 252, 122, 29, 184, 41, 190, 69, 151, 45, 173, 69, 34, 242, 184, 29, 179, 125, 15, 221, 161, 238, 115, 85, 142, 46, 218, 161, 240, 239, 254, 54, 209, 204, 175, 237, 97, 37, 115, 21, 19, 73, 153, 62, 145, 210, 166, 233, 169, 88, 43, 205, 156, 247, 182, 162, 101, 76, 224, 21, 202, 152, 75, 143, 181, 24, 205, 179, 76, 214, 206, 41, 92, 121, 189, 22, 83, 44, 19, 18, 151, 198, 137, 43, 238, 246, 227, 193, 73, 34, 183, 52, 189, 77, 6, 121, 49, 36, 187, 153, 196, 5, 135, 31, 170, 92, 220, 3, 41, 151, 118, 226, 197, 65, 222, 139, 138, 101, 54, 190, 54, 1, 110, 42, 70, 226, 75, 111, 227, 92, 251, 158, 198, 43, 184, 220, 21, 179, 193, 40, 171, 166, 205, 190, 106, 90, 151, 24, 186, 48, 145, 79, 204, 217, 172, 221, 198, 41, 86, 94, 98, 120, 155, 114, 138, 43, 37, 95, 161, 52, 69, 42, 190, 140, 213, 135, 141, 71, 59, 235, 144, 75, 165, 177, 59, 216, 117, 203, 183, 111, 108, 84, 23, 97, 202, 203, 50, 49, 90, 231, 58, 76, 41, 56, 105, 249, 12, 150, 202, 195, 214, 135, 25, 94, 15, 170, 34, 61, 139, 153, 8, 37, 8, 92, 29, 71, 223, 208, 114, 23, 29, 84, 158, 69, 91, 252, 47, 95, 151, 228, 47, 244, 85, 252, 234, 106, 75, 20, 145, 199, 153, 191, 180, 195, 120, 148, 192, 13, 147, 99, 205, 20, 127, 193, 236, 5, 71, 116, 67, 252, 190, 81, 87, 54, 55, 84, 30, 38, 2, 242, 186, 124, 234, 42, 204, 49, 223, 71, 247, 46, 183, 232, 50, 200, 21, 144, 172, 25, 188, 108, 32, 71, 223, 51, 30, 31, 151, 42, 251, 6, 220, 90, 119, 111, 103, 231, 251, 254, 189, 123, 187, 183, 111, 125, 127, 107, 231, 222, 189, 190, 131, 200, 236, 47, 161, 152, 113, 20, 113, 154, 31, 199, 83, 211, 116, 136, 137, 106, 75, 2, 110, 92, 125, 99, 171, 98, 137, 31, 25, 229, 155, 31, 157, 132, 169, 199, 40, 58, 140, 195, 138, 117, 86, 131, 199, 101, 153, 142, 179, 110, 197, 12, 19, 132, 192, 71, 105, 81, 86, 135, 249, 162, 24, 36, 216, 156, 242, 189, 50, 102, 211, 4, 7, 70, 236, 119, 140, 221, 3, 124, 173, 154, 226, 91, 142, 122, 125, 117, 131, 100, 95, 244, 250, 54, 2, 167, 187, 231, 150, 49, 57, 147, 164, 97, 251, 234, 76, 234, 97, 48, 233, 230, 66, 175, 104, 37, 7, 236, 221, 32, 103, 222, 95, 134, 215, 192, 66, 201, 163, 34, 159, 97, 6, 24, 92, 214, 210, 195, 73, 178, 4, 227, 143, 46, 61, 131, 107, 141, 187, 144, 191, 23, 237, 156, 221, 141, 254, 100, 127, 251, 59, 252, 107, 23, 47, 218, 215, 76, 1, 212, 7, 114, 71, 193, 78, 143, 185, 46, 48, 126, 0, 180, 154, 51, 6, 226, 1, 188, 70, 9, 110, 176, 86, 97, 100, 84, 72, 52, 71, 26, 218, 179, 128, 35, 116, 143, 219, 92, 86, 230, 160, 124, 170, 55, 108, 245, 34, 81, 43, 137, 222, 217, 179, 0, 159, 42, 63, 146, 175, 97, 161, 32, 192, 235, 103, 107, 110, 162, 46, 92, 15, 130, 227, 72, 47, 27, 231, 233, 237, 89, 175, 71, 221, 252, 248, 163, 165, 97, 64, 254, 219, 100, 52, 5, 250, 199, 20, 88, 183, 35, 228, 242, 169, 6, 171, 167, 184, 150, 26, 214, 138, 187, 168, 181, 203, 197, 95, 177, 78, 24, 151, 149, 218, 121, 61, 248, 235, 60, 23, 186, 172, 217, 231, 169, 189, 222, 174, 228, 110, 150, 94, 244, 218, 135, 94, 68, 171, 153, 191, 94, 129, 5, 224, 3, 163, 146, 63, 144, 123, 232, 57, 40, 154, 174, 96, 101, 18, 133, 209, 9, 30, 85, 17, 153, 25, 165, 99, 110, 156, 4, 22, 114, 245, 160, 134, 160, 91, 173, 80, 127, 128, 150, 227, 75, 234, 130, 75, 241, 119, 153, 38, 116, 4, 16, 94, 113, 61, 225, 82, 253, 46, 71, 186, 214, 69, 145, 93, 190, 78, 57, 41, 225, 210, 89, 35, 154, 31, 64, 152, 171, 252, 195, 7, 124, 109, 59, 167, 94, 75, 182, 88, 236, 108, 222, 224, 13, 136, 246, 59, 70, 212, 158, 100, 174, 16, 92, 81, 52, 210, 29, 193, 59, 61, 109, 32, 248, 210, 3, 218, 123, 156, 186, 112, 3, 62, 199, 13, 56, 190, 214, 13, 56, 110, 211, 128, 227, 235, 216, 128, 99, 104, 192, 241, 85, 55, 224, 139, 60, 159, 44, 230, 72, 3, 113, 195, 181, 168, 117, 45, 243, 135, 185, 213, 49, 74, 30, 33, 154, 89, 133, 80, 31, 244, 132, 189, 47, 210, 57, 140, 196, 16, 245, 86, 184, 141, 87, 197, 51, 21, 221, 246, 110, 79, 200, 47, 180, 180, 227, 89, 199, 39, 237, 24, 0, 109, 51, 16, 106, 253, 253, 241, 6, 222, 26, 174, 56, 214, 216, 117, 1, 163, 119, 16, 201, 93, 54, 50, 167, 158, 110, 15, 54, 215, 243, 255, 133, 205, 53, 110, 110, 174, 241, 181, 107, 174, 95, 97, 0, 95, 194, 38, 31, 219, 26, 226, 38, 120, 77, 13, 141, 207, 47, 83, 236, 53, 158, 25, 202, 195, 195, 4, 120, 234, 220, 36, 90, 11, 213, 137, 71, 43, 227, 88, 196, 101, 243, 56, 179, 19, 227, 145, 217, 14, 236, 183, 171, 185, 97, 88, 70, 218, 56, 179, 106, 107, 134, 200, 119, 52, 33, 206, 152, 111, 166, 91, 212, 185, 135, 235, 14, 43, 109, 241, 29, 187, 196, 95, 19, 112, 158, 118, 147, 147, 7, 159, 187, 225, 204, 118, 60, 220, 114, 50, 245, 127, 87, 211, 201, 74, 247, 72, 237, 161, 241, 142, 120, 247, 197, 241, 189, 247, 181, 97, 162, 102, 143, 80, 35, 42, 53, 102, 166, 68, 143, 23, 231, 166, 85, 2, 59, 100, 197, 88, 49, 232, 25, 220, 218, 117, 119, 89, 170, 60, 196, 5, 70, 37, 69, 105, 38, 97, 44, 250, 198, 79, 207, 230, 207, 166, 241, 184, 148, 166, 28, 203, 217, 91, 39, 0, 110, 136, 124, 91, 79, 223, 91, 227, 86, 253, 0, 177, 150, 233, 180, 19, 237, 169, 141, 166, 111, 145, 228, 233, 61, 90, 157, 142, 41, 230, 237, 182, 240, 177, 240, 128, 152, 131, 109, 50, 184, 49, 1, 100, 35, 241, 188, 72, 246, 227, 50, 241, 2, 167, 4, 120, 198, 146, 211, 105, 154, 249, 97, 103, 4, 182, 100, 35, 253, 201, 210, 11, 184, 236, 16, 54, 171, 13, 91, 14, 95, 245, 14, 122, 21, 125, 254, 82, 76, 157, 139, 107, 190, 89, 73, 172, 30, 124, 208, 109, 222, 141, 160, 177, 249, 27, 254, 139, 212, 228, 198, 127, 221, 136, 54, 117, 238, 77, 249, 44, 225, 80, 245, 68, 181, 62, 148, 139, 227, 82, 84, 16, 150, 135, 241, 205, 181, 58, 142, 250, 86, 132, 243, 69, 197, 246, 243, 164, 24, 240, 209, 157, 21, 63, 102, 217, 185, 25, 195, 39, 13, 160, 232, 114, 34, 54, 80, 20, 202, 180, 232, 55, 105, 198, 215, 28, 86, 36, 196, 197, 137, 216, 32, 64, 79, 249, 150, 72, 166, 211, 67, 59, 218, 251, 3, 199, 190, 135, 178, 3, 241, 136, 77, 105, 22, 79, 85, 25, 58, 242, 53, 75, 51, 19, 6, 155, 197, 103, 93, 69, 8, 156, 113, 192, 67, 15, 54, 10, 65, 65, 45, 2, 6, 226, 205, 206, 99, 5, 42, 4, 4, 130, 130, 104, 122, 160, 177, 99, 83, 43, 131, 46, 6, 206, 152, 58, 30, 142, 82, 121, 2, 113, 98, 156, 93, 67, 209, 204, 8, 43, 49, 126, 135, 74, 20, 126, 102, 146, 147, 76, 89, 29, 11, 17, 237, 128, 190, 166, 199, 70, 90, 121, 180, 197, 159, 55, 32, 97, 195, 43, 77, 60, 184, 70, 132, 74, 12, 216, 93, 225, 10, 4, 208, 250, 97, 237, 233, 243, 83, 66, 110, 136, 162, 182, 117, 25, 55, 168, 193, 36, 93, 145, 45, 228, 64, 136, 67, 80, 88, 45, 148, 78, 200, 243, 41, 174, 80, 45, 90, 9, 127, 153, 158, 39, 1, 229, 73, 132, 82, 72, 182, 57, 122, 193, 115, 98, 197, 144, 53, 32, 161, 99, 37, 133, 59, 134, 229, 136, 44, 175, 138, 48, 75, 2, 168, 205, 105, 32, 198, 252, 191, 144, 164, 212, 232, 73, 162, 148, 132, 147, 183, 165, 75, 219, 208, 84, 17, 84, 15, 30, 98, 210, 212, 98, 88, 106, 183, 189, 50, 171, 169, 229, 114, 75, 112, 182, 18, 92, 91, 106, 105, 243, 95, 141, 224, 182, 150, 90, 71, 100, 117, 83, 122, 106, 49, 77, 7, 201, 95, 209, 144, 11, 163, 70, 133, 22, 196, 28, 75, 23, 160, 216, 140, 176, 49, 103, 24, 137, 48, 154, 119, 212, 74, 115, 211, 40, 173, 120, 61, 106, 105, 230, 61, 136, 249, 27, 138, 182, 156, 199, 153, 173, 72, 218, 134, 26, 21, 106, 103, 125, 57, 178, 38, 233, 149, 205, 255, 217, 76, 46, 224, 111, 35, 184, 0, 215, 218, 212, 14, 242, 97, 242, 38, 103, 44, 124, 92, 117, 231, 121, 185, 154, 204, 30, 214, 72, 44, 67, 150, 202, 149, 72, 70, 176, 160, 4, 199, 194, 30, 18, 153, 6, 54, 233, 188, 76, 28, 32, 168, 168, 159, 31, 61, 228, 153, 154, 86, 141, 8, 223, 161, 40, 189, 71, 154, 168, 138, 159, 196, 197, 62, 171, 252, 99, 198, 156, 195, 158, 46, 2, 25, 105, 129, 129, 145, 112, 246, 228, 238, 14, 167, 67, 164, 60, 130, 148, 31, 159, 61, 35, 148, 109, 70, 125, 174, 87, 94, 242, 120, 62, 84, 111, 54, 244, 224, 218, 184, 34, 109, 232, 4, 36, 62, 155, 40, 208, 112, 2, 247, 5, 129, 50, 137, 83, 248, 236, 217, 179, 58, 66, 100, 138, 172, 229, 150, 172, 229, 70, 244, 55, 246, 235, 22, 195, 182, 169, 11, 216, 146, 5, 108, 176, 52, 24, 245, 178, 143, 90, 62, 49, 200, 167, 83, 88, 108, 209, 176, 116, 66, 86, 171, 72, 230, 73, 92, 117, 7, 48, 30, 188, 58, 65, 163, 18, 38, 144, 27, 38, 101, 180, 139, 229, 42, 246, 54, 206, 198, 82, 199, 238, 238, 32, 216, 111, 25, 244, 223, 180, 56, 178, 140, 221, 126, 244, 224, 65, 180, 123, 119, 195, 30, 85, 96, 12, 234, 36, 16, 190, 149, 42, 250, 46, 234, 234, 92, 140, 115, 125, 68, 232, 59, 52, 70, 227, 33, 128, 251, 247, 157, 53, 19, 44, 127, 159, 14, 202, 223, 193, 128, 233, 208, 120, 146, 76, 9, 30, 193, 20, 38, 205, 71, 243, 28, 90, 121, 72, 140, 29, 62, 232, 80, 30, 226, 132, 190, 243, 153, 8, 117, 198, 75, 247, 234, 218, 140, 158, 88, 39, 96, 214, 56, 179, 238, 176, 37, 104, 223, 177, 247, 222, 51, 184, 40, 29, 228, 236, 159, 240, 170, 39, 139, 248, 214, 187, 172, 105, 62, 255, 242, 39, 210, 102, 246, 167, 227, 146, 75, 119, 81, 171, 70, 208, 231, 217, 136, 12, 13, 39, 204, 9, 119, 193, 58, 93, 174, 238, 36, 156, 126, 147, 69, 39, 65, 138, 240, 233, 112, 228, 176, 54, 114, 94, 29, 183, 169, 132, 165, 250, 172, 169, 8, 31, 189, 137, 216, 141, 143, 128, 49, 220, 16, 118, 85, 196, 226, 250, 107, 119, 21, 156, 46, 167, 159, 96, 116, 202, 142, 226, 187, 239, 36, 198, 7, 15, 85, 79, 193, 146, 244, 25, 118, 176, 59, 210, 170, 208, 58, 157, 130, 239, 76, 60, 212, 43, 8, 114, 246, 5, 57, 170, 167, 120, 168, 250, 5, 43, 134, 143, 249, 178, 107, 71, 214, 47, 106, 84, 204, 57, 161, 79, 99, 210, 234, 102, 142, 248, 170, 169, 27, 26, 34, 170, 170, 213, 225, 12, 5, 141, 36, 54, 177, 24, 107, 63, 159, 205, 227, 2, 204, 82, 124, 133, 189, 205, 187, 147, 184, 162, 175, 99, 236, 104, 215, 46, 231, 107, 183, 22, 175, 118, 57, 223, 46, 65, 177, 27, 64, 161, 186, 101, 35, 163, 151, 91, 202, 71, 186, 249, 109, 245, 84, 191, 164, 197, 159, 67, 44, 130, 219, 151, 207, 117, 203, 246, 80, 30, 63, 178, 64, 8, 102, 213, 178, 220, 37, 122, 82, 112, 68, 3, 151, 186, 242, 92, 52, 223, 137, 230, 14, 14, 2, 96, 200, 176, 175, 92, 234, 174, 118, 174, 75, 28, 20, 86, 97, 3, 119, 1, 146, 9, 48, 76, 19, 254, 66, 186, 84, 176, 174, 85, 117, 139, 254, 69, 59, 206, 10, 29, 186, 106, 199, 191, 174, 137, 172, 104, 242, 45, 209, 81, 128, 251, 111, 184, 200, 171, 229, 93, 230, 120, 76, 37, 32, 18, 8, 230, 207, 208, 130, 57, 158, 200, 251, 73, 186, 172, 80, 164, 123, 118, 162, 96, 183, 170, 143, 206, 79, 85, 57, 188, 133, 202, 49, 130, 124, 122, 196, 93, 212, 103, 196, 249, 189, 36, 126, 176, 154, 207, 124, 86, 211, 191, 111, 113, 190, 40, 79, 122, 186, 5, 123, 146, 48, 107, 111, 129, 59, 213, 98, 166, 49, 91, 226, 237, 118, 21, 133, 91, 202, 45, 223, 136, 254, 75, 120, 239, 34, 70, 200, 253, 117, 238, 213, 223, 95, 25, 185, 139, 250, 63, 245, 192, 64, 14, 7, 60, 250, 227, 96, 87, 15, 31, 152, 91, 51, 93, 246, 34, 100, 243, 185, 170, 200, 62, 77, 156, 13, 104, 8, 168, 83, 177, 34, 254, 196, 39, 156, 15, 153, 15, 215, 139, 182, 183, 69, 72, 39, 173, 22, 66, 171, 145, 162, 137, 117, 136, 175, 71, 135, 24, 0, 98, 2, 248, 217, 209, 189, 65, 158, 79, 248, 242, 126, 61, 55, 168, 74, 195, 81, 183, 248, 19, 129, 224, 121, 182, 89, 42, 238, 11, 184, 147, 57, 61, 76, 198, 74, 151, 245, 193, 187, 12, 112, 219, 9, 10, 218, 240, 181, 17, 56, 227, 84, 9, 238, 160, 177, 133, 107, 28, 120, 114, 205, 249, 159, 124, 105, 97, 50, 198, 253, 26, 163, 16, 153, 4, 36, 64, 86, 161, 228, 113, 83, 97, 114, 21, 233, 64, 187, 63, 208, 107, 88, 85, 13, 157, 102, 160, 49, 187, 38, 137, 181, 105, 168, 144, 7, 254, 134, 183, 214, 152, 11, 28, 184, 202, 68, 44, 252, 149, 119, 6, 82, 6, 141, 226, 126, 75, 30, 97, 242, 145, 153, 86, 58, 21, 148, 126, 234, 219, 48, 167, 169, 207, 67, 61, 187, 151, 141, 50, 201, 209, 196, 54, 193, 223, 105, 235, 217, 180, 115, 75, 106, 61, 155, 155, 4, 197, 77, 15, 138, 154, 152, 23, 161, 154, 51, 68, 178, 165, 23, 121, 186, 125, 151, 185, 199, 233, 120, 133, 209, 173, 82, 197, 7, 44, 219, 163, 14, 107, 81, 234, 44, 178, 132, 206, 131, 255, 226, 239, 188, 101, 77, 211, 108, 178, 86, 105, 144, 49, 92, 158, 120, 235, 45, 49, 159, 14, 215, 42, 48, 92, 152, 191, 160, 81, 122, 150, 172, 85, 82, 85, 5, 139, 130, 87, 254, 168, 68, 60, 77, 7, 229, 58, 165, 165, 193, 194, 82, 127, 89, 229, 140, 201, 220, 58, 37, 241, 140, 193, 210, 228, 91, 127, 95, 87, 164, 147, 100, 173, 34, 121, 206, 112, 153, 242, 117, 96, 218, 109, 173, 18, 23, 97, 65, 225, 239, 252, 101, 205, 215, 43, 107, 94, 83, 214, 220, 42, 235, 105, 57, 136, 231, 108, 192, 204, 64, 143, 23, 85, 194, 151, 112, 117, 79, 201, 109, 73, 217, 124, 1, 150, 25, 247, 3, 167, 36, 18, 194, 222, 191, 224, 147, 47, 10, 212, 113, 24, 242, 69, 165, 145, 224, 62, 120, 112, 178, 200, 38, 106, 110, 166, 102, 233, 143, 42, 195, 89, 247, 35, 130, 32, 2, 247, 81, 250, 158, 247, 156, 55, 58, 55, 108, 63, 212, 148, 191, 217, 106, 132, 173, 80, 246, 16, 133, 44, 21, 184, 120, 227, 187, 223, 23, 121, 117, 255, 134, 229, 172, 226, 138, 164, 208, 137, 251, 99, 4, 124, 168, 136, 96, 31, 250, 28, 24, 85, 250, 125, 95, 22, 195, 12, 180, 106, 248, 10, 170, 71, 197, 72, 99, 244, 9, 102, 156, 13, 78, 114, 186, 32, 243, 114, 81, 3, 181, 50, 228, 65, 204, 55, 115, 63, 236, 192, 138, 16, 175, 100, 138, 50, 89, 43, 116, 30, 1, 204, 161, 16, 235, 56, 96, 107, 217, 8, 130, 13, 77, 115, 8, 121, 179, 191, 87, 76, 43, 96, 143, 56, 226, 26, 122, 101, 193, 54, 193, 144, 55, 76, 51, 196, 190, 186, 56, 0, 118, 149, 20, 3, 222, 26, 130, 69, 177, 237, 233, 229, 61, 245, 162, 152, 94, 185, 32, 156, 20, 201, 168, 134, 78, 94, 100, 163, 28, 36, 213, 26, 215, 45, 28, 214, 44, 158, 58, 172, 191, 110, 129, 21, 232, 189, 245, 64, 69, 225, 27, 174, 91, 96, 217, 197, 117, 11, 10, 190, 245, 117, 11, 77, 5, 127, 137, 235, 22, 244, 194, 92, 111, 189, 204, 84, 131, 162, 105, 173, 219, 22, 48, 42, 121, 219, 130, 40, 215, 138, 76, 172, 114, 217, 2, 61, 20, 125, 245, 203, 22, 120, 6, 253, 101, 88, 78, 37, 177, 237, 49, 233, 192, 250, 33, 15, 57, 236, 231, 243, 229, 111, 41, 3, 48, 251, 0, 205, 84, 181, 79, 122, 195, 83, 48, 6, 105, 251, 233, 23, 147, 39, 176, 243, 220, 37, 170, 97, 58, 198, 87, 53, 119, 66, 38, 63, 254, 72, 52, 208, 44, 238, 48, 249, 101, 144, 64, 236, 227, 170, 43, 115, 245, 15, 14, 30, 76, 99, 184, 4, 233, 29, 175, 39, 153, 67, 37, 91, 45, 245, 18, 13, 43, 195, 3, 190, 59, 221, 179, 80, 131, 194, 245, 176, 11, 16, 250, 88, 11, 58, 108, 12, 116, 97, 135, 122, 219, 188, 234, 69, 46, 92, 161, 25, 26, 233, 214, 11, 88, 154, 89, 31, 160, 219, 187, 204, 69, 189, 20, 235, 112, 156, 101, 56, 98, 21, 78, 235, 214, 110, 88, 118, 137, 106, 45, 87, 213, 212, 215, 89, 174, 172, 89, 183, 161, 60, 203, 111, 6, 114, 58, 137, 192, 11, 218, 212, 18, 28, 32, 97, 43, 210, 55, 210, 173, 250, 89, 87, 53, 214, 86, 41, 228, 177, 242, 202, 61, 194, 28, 123, 153, 51, 121, 213, 26, 252, 84, 198, 49, 65, 135, 97, 5, 170, 88, 69, 100, 214, 19, 9, 4, 127, 218, 179, 210, 12, 58, 96, 45, 213, 46, 134, 149, 239, 162, 65, 182, 241, 245, 101, 13, 35, 220, 69, 227, 144, 68, 77, 28, 57, 142, 67, 156, 121, 139, 174, 102, 217, 221, 8, 85, 239, 52, 41, 150, 109, 221, 152, 47, 220, 17, 248, 122, 197, 182, 61, 1, 175, 151, 219, 9, 188, 110, 219, 5, 168, 93, 41, 222, 168, 158, 53, 190, 10, 196, 245, 254, 211, 32, 253, 207, 237, 185, 218, 9, 181, 157, 96, 202, 62, 175, 235, 244, 78, 214, 150, 1, 89, 131, 224, 137, 24, 4, 79, 212, 166, 242, 137, 103, 223, 203, 175, 210, 127, 121, 125, 52, 177, 102, 166, 170, 132, 31, 166, 227, 241, 165, 112, 147, 189, 235, 73, 28, 236, 91, 108, 93, 86, 56, 120, 173, 13, 18, 111, 16, 58, 116, 89, 140, 115, 43, 166, 225, 242, 179, 116, 58, 237, 74, 119, 169, 84, 163, 255, 235, 226, 213, 96, 186, 86, 115, 106, 160, 90, 87, 32, 201, 171, 245, 224, 19, 95, 247, 77, 40, 94, 163, 43, 191, 242, 94, 123, 245, 222, 216, 97, 250, 90, 189, 115, 187, 222, 88, 44, 53, 227, 74, 198, 169, 113, 212, 12, 52, 139, 145, 136, 70, 6, 68, 212, 95, 135, 229, 28, 182, 59, 173, 48, 246, 252, 226, 29, 214, 122, 6, 188, 99, 215, 209, 21, 251, 47, 110, 174, 71, 132, 144, 47, 108, 175, 197, 254, 97, 126, 10, 190, 190, 128, 152, 47, 176, 248, 128, 30, 159, 229, 5, 105, 58, 147, 117, 31, 86, 132, 137, 241, 33, 130, 7, 127, 192, 69, 138, 117, 63, 153, 87, 158, 245, 15, 220, 185, 140, 231, 76, 22, 248, 36, 173, 29, 87, 189, 92, 151, 82, 38, 176, 217, 80, 206, 254, 254, 152, 231, 211, 36, 206, 186, 173, 187, 22, 103, 37, 150, 64, 182, 210, 186, 1, 168, 181, 66, 107, 175, 25, 144, 181, 86, 179, 132, 70, 36, 141, 96, 62, 150, 28, 219, 239, 42, 104, 103, 217, 136, 92, 46, 194, 24, 164, 64, 216, 19, 229, 210, 227, 163, 12, 44, 2, 208, 194, 126, 121, 108, 194, 227, 160, 77, 200, 134, 221, 57, 67, 153, 14, 98, 152, 157, 191, 62, 94, 156, 75, 212, 10, 61, 95, 54, 188, 150, 62, 220, 8, 17, 102, 155, 4, 93, 223, 213, 44, 2, 202, 246, 121, 29, 56, 231, 216, 0, 212, 64, 142, 94, 249, 60, 51, 1, 225, 145, 77, 52, 107, 28, 148, 81, 62, 219, 254, 151, 20, 84, 94, 179, 107, 43, 173, 132, 186, 107, 41, 178, 13, 114, 9, 66, 92, 43, 149, 30, 129, 220, 234, 135, 36, 113, 181, 240, 253, 138, 130, 248, 89, 252, 165, 142, 67, 253, 231, 150, 181, 192, 166, 40, 131, 12, 139, 152, 32, 233, 70, 43, 55, 233, 11, 142, 103, 235, 60, 8, 36, 81, 107, 24, 51, 174, 80, 175, 71, 204, 215, 136, 139, 193, 137, 12, 59, 137, 72, 147, 94, 254, 245, 149, 12, 89, 136, 164, 214, 230, 76, 214, 237, 138, 4, 140, 131, 120, 103, 164, 183, 208, 86, 0, 186, 153, 72, 211, 76, 54, 20, 61, 122, 200, 71, 87, 117, 104, 38, 22, 60, 185, 252, 23, 164, 36, 195, 117, 178, 86, 48, 195, 123, 49, 0, 180, 238, 241, 153, 208, 189, 76, 10, 118, 7, 227, 66, 163, 189, 144, 121, 19, 227, 61, 216, 171, 134, 91, 232, 242, 230, 236, 191, 115, 216, 114, 156, 204, 99, 30, 239, 251, 106, 82, 39, 203, 39, 177, 74, 32, 237, 138, 130, 23, 172, 0, 8, 107, 171, 98, 156, 120, 64, 167, 215, 225, 241, 0, 181, 168, 80, 243, 163, 141, 40, 226, 229, 35, 114, 45, 236, 14, 119, 157, 118, 208, 161, 50, 111, 241, 252, 178, 130, 178, 221, 252, 9, 223, 226, 82, 235, 153, 193, 84, 240, 91, 216, 83, 158, 204, 233, 40, 72, 226, 244, 142, 144, 228, 186, 113, 187, 124, 52, 84, 1, 242, 14, 229, 50, 71, 143, 248, 188, 13, 72, 15, 63, 98, 231, 26, 133, 183, 129, 158, 85, 98, 219, 214, 222, 96, 36, 67, 113, 89, 181, 48, 211, 95, 219, 239, 188, 180, 185, 70, 245, 252, 226, 38, 27, 49, 210, 19, 158, 219, 138, 250, 36, 68, 103, 155, 117, 165, 47, 194, 84, 147, 88, 28, 179, 104, 153, 154, 169, 234, 195, 206, 115, 98, 152, 181, 177, 125, 36, 250, 253, 173, 173, 47, 101, 107, 95, 198, 243, 191, 96, 228, 13, 139, 19, 171, 225, 23, 140, 187, 221, 8, 12, 90, 102, 241, 188, 157, 55, 233, 199, 254, 47, 23, 116, 51, 241, 35, 43, 128, 220, 114, 180, 63, 227, 237, 255, 171, 111, 187, 95, 147, 223, 11, 159, 199, 34, 20, 141, 176, 172, 16, 124, 122, 155, 12, 23, 3, 220, 46, 209, 26, 166, 244, 106, 133, 190, 99, 83, 135, 87, 212, 95, 131, 49, 121, 65, 136, 250, 124, 18, 78, 172, 57, 108, 59, 244, 86, 35, 188, 73, 225, 230, 61, 203, 84, 239, 152, 199, 120, 48, 88, 204, 22, 106, 207, 95, 187, 109, 151, 76, 248, 54, 55, 223, 59, 243, 35, 62, 169, 166, 232, 131, 18, 141, 182, 51, 163, 28, 77, 195, 59, 4, 90, 43, 212, 111, 211, 241, 73, 117, 189, 37, 155, 147, 120, 45, 197, 155, 80, 246, 47, 36, 227, 210, 235, 184, 180, 164, 111, 109, 217, 146, 238, 117, 87, 190, 186, 160, 159, 38, 69, 153, 180, 56, 113, 225, 179, 184, 191, 29, 135, 146, 43, 26, 47, 206, 210, 225, 112, 154, 224, 149, 80, 163, 105, 158, 243, 51, 193, 162, 255, 138, 118, 237, 62, 118, 154, 127, 226, 247, 78, 176, 246, 17, 63, 97, 79, 173, 192, 33, 83, 220, 78, 119, 193, 42, 82, 104, 129, 17, 217, 182, 240, 34, 125, 141, 216, 196, 226, 249, 163, 53, 182, 227, 120, 12, 8, 127, 68, 32, 42, 19, 56, 153, 26, 18, 191, 22, 25, 128, 16, 93, 150, 71, 20, 232, 124, 242, 175, 105, 242, 73, 50, 239, 199, 197, 104, 148, 20, 7, 163, 183, 73, 58, 74, 225, 162, 167, 24, 82, 85, 101, 13, 71, 143, 23, 163, 8, 157, 77, 65, 15, 36, 224, 121, 204, 105, 22, 173, 63, 247, 49, 137, 172, 4, 66, 228, 65, 249, 36, 169, 96, 243, 249, 80, 208, 216, 61, 230, 95, 88, 84, 69, 138, 231, 142, 51, 119, 33, 201, 58, 31, 99, 98, 14, 202, 195, 147, 184, 32, 44, 83, 228, 108, 124, 227, 41, 141, 175, 66, 144, 39, 86, 54, 156, 231, 33, 208, 244, 162, 155, 116, 85, 90, 87, 100, 255, 14, 246, 255, 138, 123, 53, 119, 156, 133, 232, 12, 213, 171, 60, 195, 154, 41, 215, 110, 202, 246, 16, 143, 175, 71, 163, 18, 18, 197, 211, 11, 121, 83, 173, 120, 250, 145, 176, 116, 253, 15, 138, 212, 20, 131, 8, 237, 209, 21, 210, 68, 94, 235, 83, 243, 244, 198, 92, 150, 72, 55, 230, 138, 141, 188, 179, 84, 210, 14, 22, 0, 85, 5, 162, 39, 10, 13, 234, 5, 16, 252, 35, 82, 217, 240, 49, 66, 55, 239, 222, 14, 187, 56, 169, 108, 115, 93, 186, 96, 150, 62, 175, 26, 122, 27, 159, 92, 16, 206, 10, 116, 106, 93, 58, 174, 196, 3, 92, 67, 103, 254, 78, 236, 221, 143, 208, 1, 0, 172, 202, 204, 216, 3, 66, 110, 164, 21, 117, 190, 147, 193, 9, 185, 244, 70, 113, 250, 170, 193, 16, 140, 201, 221, 232, 240, 185, 112, 202, 114, 180, 148, 84, 31, 88, 239, 244, 184, 220, 76, 24, 76, 34, 195, 17, 102, 14, 159, 7, 23, 245, 54, 229, 79, 240, 20, 60, 134, 54, 27, 120, 225, 111, 109, 12, 95, 106, 141, 71, 101, 42, 157, 84, 167, 55, 151, 213, 20, 35, 93, 5, 223, 215, 224, 208, 243, 120, 206, 28, 41, 152, 158, 106, 164, 171, 53, 29, 152, 126, 180, 250, 245, 74, 62, 70, 253, 120, 125, 124, 81, 35, 107, 63, 177, 129, 125, 24, 237, 98, 118, 50, 86, 60, 73, 203, 143, 112, 112, 7, 103, 135, 94, 205, 171, 57, 129, 181, 135, 47, 232, 53, 188, 33, 91, 229, 125, 197, 10, 217, 96, 101, 188, 102, 110, 198, 148, 57, 33, 105, 54, 94, 187, 152, 150, 211, 68, 172, 180, 110, 14, 197, 229, 241, 16, 124, 158, 156, 168, 58, 95, 76, 169, 182, 1, 132, 194, 68, 82, 9, 61, 62, 152, 60, 56, 251, 82, 94, 88, 173, 28, 40, 126, 184, 53, 32, 126, 27, 108, 19, 114, 124, 54, 194, 67, 60, 183, 35, 89, 96, 170, 106, 153, 196, 154, 67, 227, 110, 222, 189, 199, 10, 222, 197, 131, 157, 53, 141, 89, 59, 179, 133, 168, 112, 140, 23, 41, 223, 244, 103, 182, 71, 234, 41, 245, 77, 94, 194, 125, 65, 75, 217, 4, 168, 69, 13, 159, 221, 81, 99, 216, 108, 225, 214, 169, 49, 91, 68, 110, 107, 93, 135, 118, 8, 45, 255, 33, 164, 0, 129, 179, 89, 191, 214, 68, 3, 90, 128, 75, 68, 24, 200, 92, 57, 236, 249, 239, 53, 181, 95, 122, 77, 173, 127, 135, 11, 43, 68, 237, 112, 153, 208, 3, 245, 190, 102, 32, 23, 159, 136, 105, 22, 0, 98, 103, 80, 47, 13, 246, 172, 1, 164, 51, 128, 196, 241, 201, 188, 222, 78, 40, 58, 123, 152, 207, 146, 191, 224, 14, 15, 168, 214, 181, 92, 110, 85, 34, 194, 254, 247, 238, 239, 104, 216, 222, 97, 206, 142, 36, 50, 236, 94, 174, 137, 26, 124, 113, 204, 71, 146, 221, 227, 100, 156, 102, 78, 103, 98, 239, 239, 164, 162, 204, 239, 238, 115, 36, 153, 223, 8, 120, 21, 130, 108, 72, 106, 47, 191, 178, 58, 174, 12, 171, 136, 6, 170, 187, 116, 80, 204, 198, 84, 103, 28, 109, 203, 55, 5, 85, 214, 244, 71, 160, 147, 116, 82, 156, 114, 4, 201, 159, 213, 212, 56, 205, 230, 217, 204, 104, 72, 216, 164, 192, 237, 182, 113, 138, 79, 192, 242, 75, 60, 186, 136, 149, 58, 50, 67, 88, 184, 59, 75, 228, 178, 72, 183, 71, 107, 83, 205, 182, 59, 55, 195, 21, 228, 24, 124, 213, 99, 221, 135, 110, 88, 251, 38, 1, 65, 241, 22, 106, 39, 218, 225, 201, 101, 33, 135, 39, 233, 168, 34, 114, 241, 20, 189, 112, 5, 233, 199, 101, 149, 24, 95, 221, 200, 157, 78, 182, 178, 240, 226, 73, 38, 138, 100, 51, 234, 34, 73, 122, 240, 128, 208, 181, 126, 255, 76, 137, 24, 144, 92, 158, 190, 154, 111, 2, 13, 246, 214, 234, 142, 100, 214, 89, 35, 76, 58, 24, 103, 85, 177, 103, 154, 37, 228, 235, 202, 155, 202, 190, 182, 139, 219, 177, 41, 90, 101, 53, 77, 63, 84, 185, 131, 108, 48, 93, 12, 89, 245, 174, 253, 138, 199, 90, 149, 52, 203, 107, 232, 138, 71, 81, 185, 207, 190, 126, 198, 138, 15, 215, 175, 122, 252, 186, 11, 26, 145, 143, 10, 254, 183, 181, 190, 230, 48, 158, 137, 51, 83, 254, 153, 20, 185, 45, 19, 224, 82, 248, 151, 105, 211, 51, 163, 39, 94, 71, 182, 214, 9, 224, 135, 241, 193, 208, 181, 43, 110, 135, 234, 193, 154, 133, 81, 134, 157, 217, 198, 69, 57, 251, 62, 165, 196, 118, 99, 191, 198, 59, 235, 91, 222, 25, 123, 222, 199, 78, 217, 72, 44, 163, 24, 101, 6, 251, 136, 199, 139, 201, 233, 191, 216, 41, 28, 173, 224, 11, 178, 210, 70, 214, 85, 105, 104, 97, 56, 176, 101, 159, 204, 20, 42, 38, 141, 52, 83, 66, 250, 205, 51, 35, 59, 104, 14, 226, 72, 171, 100, 86, 74, 62, 27, 52, 22, 63, 81, 206, 203, 199, 22, 175, 36, 58, 121, 73, 36, 151, 201, 110, 164, 97, 38, 194, 140, 74, 38, 168, 32, 212, 120, 242, 124, 86, 176, 68, 167, 204, 51, 128, 231, 73, 37, 236, 95, 87, 182, 8, 248, 6, 234, 212, 26, 100, 125, 104, 62, 82, 162, 61, 8, 72, 9, 118, 221, 15, 72, 252, 4, 17, 242, 239, 33, 167, 62, 150, 199, 222, 38, 8, 159, 192, 25, 60, 42, 175, 92, 202, 74, 236, 188, 162, 100, 91, 156, 190, 147, 186, 165, 170, 234, 153, 126, 133, 159, 135, 236, 122, 96, 150, 14, 221, 190, 227, 65, 2, 89, 61, 199, 248, 192, 199, 58, 202, 7, 62, 181, 27, 7, 213, 133, 153, 28, 229, 169, 181, 125, 240, 130, 48, 77, 116, 29, 34, 3, 57, 205, 78, 1, 200, 104, 27, 31, 202, 216, 171, 193, 224, 211, 118, 128, 167, 240, 233, 65, 158, 40, 147, 140, 244, 20, 12, 93, 57, 166, 4, 246, 7, 90, 105, 169, 252, 120, 204, 7, 139, 50, 39, 214, 84, 52, 124, 116, 29, 2, 75, 202, 40, 91, 84, 191, 160, 50, 217, 253, 47, 31, 35, 189, 72, 39, 9, 158, 81, 228, 242, 137, 231, 9, 69, 151, 172, 230, 18, 117, 30, 119, 70, 177, 142, 193, 107, 141, 158, 117, 89, 206, 40, 250, 42, 249, 218, 196, 83, 122, 68, 130, 225, 101, 77, 31, 250, 122, 212, 141, 176, 17, 23, 60, 12, 159, 140, 206, 121, 142, 33, 104, 164, 236, 50, 253, 41, 132, 77, 242, 17, 235, 70, 201, 16, 104, 141, 70, 50, 17, 50, 158, 93, 48, 139, 19, 206, 126, 90, 62, 191, 151, 63, 66, 190, 152, 41, 228, 55, 46, 23, 114, 222, 231, 53, 12, 35, 114, 103, 146, 182, 205, 7, 136, 230, 12, 65, 232, 15, 202, 199, 149, 152, 119, 232, 42, 244, 146, 63, 246, 76, 195, 93, 113, 199, 68, 249, 41, 229, 199, 181, 53, 172, 34, 144, 36, 239, 72, 159, 122, 16, 51, 95, 176, 191, 231, 184, 10, 186, 142, 135, 76, 18, 227, 34, 88, 211, 251, 10, 199, 110, 13, 142, 183, 9, 27, 43, 37, 217, 32, 105, 70, 115, 187, 142, 148, 116, 54, 108, 198, 112, 107, 79, 253, 186, 89, 131, 235, 73, 82, 176, 193, 117, 61, 58, 208, 23, 248, 110, 158, 197, 107, 141, 118, 229, 89, 97, 84, 254, 171, 228, 147, 68, 143, 202, 172, 169, 64, 19, 145, 7, 163, 80, 102, 56, 1, 73, 197, 205, 212, 42, 19, 126, 69, 201, 15, 171, 86, 23, 157, 18, 93, 71, 209, 235, 121, 252, 251, 34, 44, 29, 107, 113, 141, 135, 251, 56, 94, 85, 86, 196, 175, 51, 122, 77, 210, 52, 11, 121, 139, 11, 149, 195, 239, 40, 134, 128, 160, 168, 243, 161, 8, 108, 99, 117, 175, 128, 255, 77, 124, 107, 201, 254, 6, 29, 231, 116, 240, 126, 145, 189, 105, 94, 167, 36, 209, 220, 37, 86, 9, 178, 34, 139, 179, 67, 84, 243, 69, 30, 51, 31, 53, 171, 238, 118, 195, 106, 221, 215, 106, 125, 215, 205, 187, 104, 200, 188, 235, 45, 174, 127, 167, 38, 203, 77, 127, 41, 181, 121, 110, 121, 139, 185, 185, 91, 147, 229, 182, 191, 152, 218, 60, 119, 220, 60, 163, 105, 30, 215, 103, 250, 62, 144, 233, 206, 45, 127, 166, 53, 140, 95, 179, 153, 255, 50, 146, 244, 56, 91, 54, 9, 18, 205, 160, 34, 80, 171, 200, 79, 41, 15, 144, 189, 34, 222, 213, 246, 109, 159, 129, 109, 82, 188, 1, 41, 196, 228, 106, 133, 8, 238, 20, 65, 94, 215, 178, 5, 252, 45, 4, 127, 222, 2, 254, 46, 130, 255, 212, 2, 190, 175, 86, 230, 74, 22, 51, 94, 60, 19, 208, 103, 183, 128, 177, 79, 128, 5, 221, 141, 238, 89, 47, 90, 246, 162, 243, 94, 244, 201, 209, 82, 183, 234, 30, 85, 168, 173, 186, 31, 254, 174, 159, 178, 59, 183, 206, 118, 109, 202, 12, 77, 59, 134, 166, 114, 71, 21, 226, 53, 106, 22, 69, 101, 191, 9, 154, 92, 0, 183, 219, 4, 189, 139, 161, 111, 54, 65, 223, 196, 208, 183, 154, 160, 177, 80, 148, 183, 155, 160, 241, 130, 203, 242, 78, 19, 244, 29, 12, 253, 125, 19, 244, 247, 24, 250, 110, 19, 52, 22, 206, 242, 94, 19, 244, 61, 210, 58, 141, 141, 217, 167, 173, 217, 220, 156, 164, 61, 251, 141, 13, 218, 39, 45, 218, 111, 108, 210, 62, 105, 211, 126, 99, 163, 246, 73, 171, 246, 27, 155, 181, 127, 219, 209, 15, 102, 197, 238, 158, 245, 239, 96, 237, 40, 225, 86, 95, 184, 36, 100, 151, 253, 191, 201, 254, 223, 98, 255, 111, 179, 255, 119, 216, 255, 239, 91, 44, 105, 44, 239, 50, 192, 123, 128, 132, 99, 2, 84, 125, 192, 213, 7, 100, 125, 192, 38, 9, 193, 125, 130, 163, 126, 158, 222, 190, 78, 255, 252, 224, 187, 33, 5, 244, 131, 223, 10, 105, 160, 31, 252, 78, 72, 5, 253, 224, 119, 67, 58, 232, 7, 167, 210, 121, 167, 25, 126, 55, 164, 135, 1, 248, 91, 62, 105, 232, 223, 57, 187, 219, 94, 26, 156, 110, 154, 88, 118, 191, 51, 21, 178, 235, 65, 104, 111, 135, 22, 132, 246, 118, 103, 65, 104, 79, 103, 198, 59, 246, 218, 174, 108, 85, 31, 227, 48, 28, 174, 232, 241, 155, 15, 196, 36, 157, 56, 217, 140, 251, 9, 215, 32, 34, 65, 233, 175, 31, 166, 96, 250, 49, 59, 109, 233, 160, 56, 27, 125, 86, 151, 57, 94, 228, 183, 189, 4, 215, 56, 117, 141, 24, 145, 155, 162, 22, 28, 69, 221, 150, 188, 188, 183, 177, 129, 22, 112, 67, 67, 82, 194, 196, 212, 170, 4, 158, 170, 133, 154, 53, 20, 170, 160, 153, 161, 17, 133, 192, 177, 67, 73, 99, 239, 46, 2, 20, 55, 23, 139, 5, 147, 233, 240, 21, 99, 48, 217, 255, 34, 114, 215, 251, 181, 40, 63, 215, 144, 21, 16, 220, 179, 17, 136, 185, 251, 21, 48, 244, 157, 3, 61, 208, 133, 49, 166, 78, 42, 60, 74, 111, 142, 33, 245, 102, 217, 12, 252, 81, 170, 163, 195, 180, 114, 10, 74, 212, 212, 7, 166, 87, 88, 224, 10, 249, 0, 85, 168, 89, 55, 205, 145, 46, 95, 3, 91, 102, 195, 20, 237, 10, 9, 51, 95, 168, 196, 158, 169, 76, 15, 21, 231, 89, 89, 160, 76, 152, 29, 232, 221, 245, 244, 237, 34, 242, 139, 132, 201, 3, 211, 116, 139, 178, 106, 184, 141, 96, 28, 100, 29, 181, 48, 118, 50, 40, 242, 246, 148, 62, 159, 234, 85, 48, 106, 41, 33, 76, 191, 77, 209, 22, 36, 95, 38, 189, 141, 116, 7, 7, 228, 97, 197, 140, 18, 145, 53, 244, 7, 178, 31, 138, 91, 161, 27, 44, 139, 46, 168, 71, 188, 126, 72, 214, 178, 39, 24, 20, 214, 12, 175, 58, 88, 194, 134, 202, 49, 156, 55, 165, 168, 171, 40, 141, 248, 166, 230, 6, 64, 68, 204, 230, 67, 93, 55, 35, 124, 23, 166, 191, 244, 159, 16, 189, 70, 87, 179, 90, 108, 82, 5, 38, 63, 87, 252, 227, 176, 202, 139, 196, 239, 123, 135, 156, 230, 46, 18, 89, 113, 47, 233, 119, 252, 70, 213, 80, 196, 68, 20, 225, 143, 184, 5, 29, 115, 82, 200, 163, 71, 143, 124, 197, 220, 53, 29, 222, 41, 227, 205, 254, 52, 158, 205, 223, 229, 191, 240, 130, 54, 253, 157, 101, 109, 125, 163, 211, 80, 0, 71, 231, 242, 56, 165, 237, 170, 128, 248, 132, 171, 112, 51, 192, 169, 85, 202, 169, 225, 21, 46, 234, 150, 191, 70, 30, 15, 179, 125, 141, 66, 97, 73, 83, 145, 85, 208, 251, 42, 18, 10, 98, 138, 18, 66, 1, 159, 94, 100, 181, 191, 39, 162, 137, 48, 120, 226, 50, 14, 134, 53, 220, 231, 53, 92, 197, 207, 30, 239, 20, 181, 246, 5, 60, 253, 126, 171, 61, 218, 85, 215, 15, 153, 150, 210, 219, 64, 163, 31, 76, 94, 190, 62, 214, 237, 224, 60, 170, 24, 8, 165, 42, 106, 78, 41, 37, 62, 181, 12, 4, 86, 21, 6, 125, 180, 153, 69, 199, 26, 13, 218, 214, 61, 175, 237, 229, 249, 138, 69, 53, 64, 194, 51, 71, 182, 35, 208, 198, 211, 105, 231, 235, 172, 230, 237, 72, 210, 133, 235, 248, 244, 247, 69, 122, 170, 94, 35, 106, 205, 64, 19, 145, 253, 181, 233, 190, 50, 197, 161, 214, 57, 106, 176, 54, 16, 27, 232, 209, 8, 180, 174, 86, 79, 217, 176, 86, 104, 110, 133, 209, 220, 90, 1, 205, 221, 48, 154, 187, 43, 160, 129, 248, 87, 8, 79, 127, 215, 32, 66, 67, 52, 220, 211, 68, 13, 38, 214, 102, 27, 3, 105, 100, 91, 32, 130, 30, 70, 115, 55, 76, 230, 14, 37, 51, 24, 60, 239, 161, 248, 100, 29, 129, 193, 0, 102, 0, 65, 191, 45, 130, 221, 0, 130, 221, 182, 8, 110, 6, 16, 220, 108, 139, 224, 86, 0, 129, 35, 148, 193, 216, 124, 0, 193, 237, 182, 8, 238, 4, 16, 220, 105, 139, 224, 251, 0, 130, 239, 219, 34, 184, 27, 64, 224, 104, 84, 48, 206, 31, 64, 112, 175, 181, 32, 133, 68, 177, 223, 94, 22, 131, 194, 216, 90, 26, 251, 33, 113, 236, 183, 150, 199, 126, 72, 32, 251, 173, 37, 178, 31, 18, 201, 126, 107, 153, 236, 135, 132, 178, 127, 59, 108, 52, 250, 142, 209, 8, 132, 252, 123, 56, 144, 221, 96, 54, 2, 211, 0, 33, 20, 62, 62, 7, 166, 6, 66, 40, 124, 76, 10, 76, 23, 132, 80, 248, 52, 47, 48, 133, 16, 66, 225, 83, 157, 208, 180, 66, 8, 135, 87, 246, 67, 115, 13, 65, 36, 237, 89, 218, 15, 242, 20, 75, 158, 45, 54, 187, 142, 216, 212, 251, 17, 2, 160, 65, 108, 234, 125, 8, 7, 133, 175, 205, 235, 253, 7, 7, 133, 175, 193, 26, 124, 7, 7, 71, 192, 115, 144, 251, 169, 20, 159, 132, 135, 142, 60, 241, 253, 60, 59, 77, 138, 234, 113, 54, 132, 235, 56, 223, 229, 224, 194, 85, 34, 238, 83, 19, 79, 1, 32, 229, 181, 54, 193, 189, 110, 24, 157, 70, 40, 86, 89, 7, 164, 61, 218, 111, 86, 137, 244, 220, 95, 1, 86, 103, 168, 153, 113, 193, 53, 175, 159, 117, 113, 231, 124, 36, 95, 41, 247, 48, 143, 72, 212, 22, 141, 23, 81, 123, 193, 249, 24, 75, 185, 155, 198, 223, 76, 226, 93, 176, 117, 196, 235, 215, 109, 23, 244, 181, 227, 95, 3, 211, 40, 73, 245, 108, 243, 174, 18, 37, 21, 182, 107, 72, 171, 228, 140, 51, 121, 38, 62, 222, 138, 167, 73, 86, 117, 243, 234, 36, 41, 120, 162, 111, 64, 105, 118, 191, 225, 177, 164, 24, 146, 161, 3, 34, 109, 226, 191, 191, 103, 70, 120, 102, 27, 51, 42, 201, 143, 17, 65, 212, 226, 149, 76, 193, 99, 71, 177, 151, 14, 33, 8, 13, 176, 213, 225, 147, 233, 44, 201, 74, 88, 197, 158, 37, 159, 120, 218, 59, 61, 46, 107, 195, 130, 33, 126, 187, 2, 19, 104, 105, 126, 54, 16, 152, 90, 220, 124, 49, 233, 116, 168, 161, 213, 222, 62, 123, 244, 172, 239, 19, 151, 25, 228, 102, 55, 153, 5, 99, 112, 129, 246, 229, 137, 21, 125, 85, 153, 134, 65, 47, 198, 6, 61, 74, 244, 237, 67, 214, 41, 212, 213, 66, 238, 184, 105, 198, 139, 200, 230, 152, 33, 38, 116, 75, 105, 173, 77, 241, 223, 30, 90, 53, 37, 187, 2, 124, 76, 192, 176, 137, 249, 173, 194, 56, 114, 105, 63, 205, 134, 219, 234, 190, 3, 68, 120, 215, 174, 154, 180, 4, 89, 77, 83, 75, 27, 247, 223, 30, 90, 52, 145, 90, 250, 200, 109, 168, 37, 180, 176, 205, 74, 126, 98, 28, 45, 88, 209, 19, 104, 82, 133, 137, 196, 119, 236, 22, 164, 196, 108, 180, 64, 217, 214, 248, 214, 46, 77, 199, 77, 166, 54, 225, 90, 231, 240, 67, 8, 238, 13, 28, 138, 113, 104, 162, 126, 130, 188, 86, 225, 207, 142, 92, 58, 212, 9, 204, 85, 116, 228, 98, 18, 243, 126, 215, 121, 15, 235, 44, 204, 123, 26, 193, 239, 232, 69, 133, 6, 226, 150, 7, 2, 22, 247, 117, 90, 71, 33, 161, 210, 192, 19, 189, 21, 105, 197, 90, 247, 239, 4, 170, 123, 151, 86, 211, 83, 161, 91, 129, 106, 236, 174, 70, 124, 126, 200, 187, 190, 238, 149, 154, 241, 94, 212, 57, 60, 120, 249, 164, 195, 190, 43, 89, 64, 71, 111, 251, 33, 134, 117, 40, 39, 60, 235, 77, 112, 11, 19, 170, 151, 158, 128, 237, 188, 125, 89, 178, 32, 173, 72, 230, 197, 138, 241, 74, 200, 58, 55, 58, 0, 135, 20, 120, 180, 2, 16, 59, 225, 77, 158, 168, 157, 41, 41, 42, 196, 185, 210, 107, 212, 156, 221, 137, 80, 169, 15, 82, 127, 62, 36, 103, 85, 17, 15, 170, 23, 113, 150, 168, 25, 86, 163, 175, 22, 182, 221, 245, 177, 245, 93, 108, 55, 215, 199, 182, 235, 98, 187, 181, 62, 182, 155, 46, 182, 219, 235, 99, 187, 229, 98, 187, 179, 62, 182, 219, 46, 182, 239, 215, 199, 118, 199, 197, 118, 119, 125, 108, 223, 187, 216, 238, 93, 169, 188, 241, 53, 180, 87, 39, 112, 253, 75, 104, 131, 71, 226, 250, 151, 80, 7, 143, 200, 245, 47, 161, 15, 30, 153, 235, 95, 66, 33, 60, 66, 215, 191, 132, 70, 120, 164, 174, 127, 9, 149, 160, 98, 39, 187, 172, 255, 7, 121, 183, 255, 227, 15, 100, 78, 47, 186, 255, 241, 71, 217, 191, 232, 69, 236, 107, 87, 124, 221, 20, 95, 183, 196, 215, 109, 241, 117, 71, 124, 125, 47, 190, 238, 138, 175, 123, 226, 171, 191, 35, 191, 37, 158, 190, 68, 212, 151, 152, 250, 18, 85, 95, 226, 234, 223, 185, 216, 248, 127, 138, 188, 11, 108, 157, 251, 171, 90, 103, 240, 94, 174, 206, 58, 215, 99, 91, 213, 58, 215, 99, 91, 213, 58, 215, 99, 91, 213, 58, 215, 99, 91, 213, 58, 215, 99, 91, 213, 58, 215, 99, 91, 213, 58, 215, 99, 251, 220, 106, 18, 144, 243, 93, 87, 206, 207, 234, 42, 1, 46, 246, 42, 98, 190, 92, 31, 153, 43, 229, 231, 235, 35, 115, 133, 252, 211, 250, 200, 110, 174, 208, 86, 103, 188, 1, 150, 252, 239, 57, 255, 251, 41, 212, 22, 55, 87, 105, 11, 61, 224, 185, 154, 214, 104, 129, 110, 149, 246, 104, 129, 110, 149, 22, 105, 129, 238, 51, 181, 201, 173, 149, 219, 4, 134, 152, 87, 216, 38, 245, 232, 250, 107, 212, 154, 214, 212, 26, 75, 222, 248, 225, 6, 25, 69, 58, 171, 81, 250, 61, 49, 170, 147, 39, 125, 223, 167, 217, 91, 173, 27, 233, 3, 221, 60, 84, 213, 10, 124, 215, 57, 198, 140, 19, 181, 198, 216, 182, 49, 74, 43, 79, 17, 179, 134, 144, 29, 190, 24, 170, 179, 177, 66, 61, 77, 235, 32, 178, 197, 113, 29, 39, 121, 81, 157, 196, 217, 176, 187, 189, 189, 61, 76, 103, 229, 213, 7, 153, 213, 17, 68, 140, 60, 52, 240, 126, 153, 15, 23, 211, 164, 171, 71, 220, 80, 182, 57, 33, 85, 157, 31, 86, 131, 146, 223, 61, 131, 206, 6, 33, 11, 135, 49, 54, 184, 51, 133, 37, 138, 219, 113, 210, 173, 45, 129, 89, 101, 135, 35, 64, 222, 109, 235, 120, 83, 151, 167, 247, 56, 2, 181, 68, 24, 95, 118, 67, 99, 26, 85, 94, 196, 227, 228, 245, 8, 71, 42, 114, 56, 12, 84, 241, 144, 28, 17, 138, 207, 175, 83, 140, 116, 79, 21, 200, 245, 140, 131, 57, 80, 132, 169, 216, 125, 39, 235, 187, 34, 206, 202, 121, 92, 200, 240, 220, 208, 83, 82, 237, 44, 7, 46, 200, 199, 235, 187, 70, 155, 27, 131, 39, 185, 62, 58, 81, 0, 31, 47, 171, 68, 159, 50, 217, 46, 168, 97, 44, 166, 172, 245, 31, 242, 172, 210, 61, 92, 36, 58, 171, 212, 153, 42, 50, 133, 238, 161, 223, 94, 48, 49, 249, 66, 49, 211, 211, 40, 163, 11, 65, 142, 50, 74, 94, 73, 180, 102, 48, 218, 10, 2, 156, 209, 230, 11, 114, 153, 22, 113, 103, 149, 92, 94, 55, 235, 21, 14, 249, 228, 163, 72, 19, 36, 59, 147, 78, 206, 115, 116, 246, 116, 113, 219, 2, 7, 154, 177, 238, 168, 10, 214, 67, 137, 197, 151, 24, 70, 88, 34, 12, 147, 241, 235, 54, 48, 140, 92, 168, 133, 129, 116, 240, 16, 195, 61, 206, 150, 116, 118, 216, 121, 117, 81, 55, 153, 4, 207, 63, 46, 210, 233, 176, 27, 247, 142, 123, 131, 207, 99, 225, 38, 41, 63, 46, 182, 65, 214, 113, 175, 171, 90, 7, 114, 162, 152, 237, 45, 179, 33, 74, 182, 91, 204, 59, 39, 211, 18, 150, 117, 224, 85, 227, 117, 62, 76, 126, 63, 152, 205, 167, 178, 20, 248, 187, 173, 118, 163, 176, 78, 46, 150, 10, 198, 143, 113, 116, 209, 203, 230, 1, 217, 148, 47, 142, 175, 160, 220, 184, 23, 29, 183, 42, 87, 33, 15, 176, 88, 100, 175, 135, 33, 107, 7, 130, 147, 20, 13, 130, 194, 79, 42, 4, 170, 123, 209, 103, 146, 148, 69, 198, 23, 74, 28, 100, 243, 5, 76, 61, 25, 212, 113, 56, 252, 29, 235, 126, 18, 231, 38, 27, 122, 206, 230, 211, 116, 144, 86, 79, 146, 185, 216, 242, 119, 44, 47, 166, 51, 29, 7, 5, 225, 151, 11, 153, 179, 195, 237, 62, 231, 101, 60, 255, 69, 20, 165, 90, 55, 214, 7, 171, 219, 13, 138, 240, 28, 175, 128, 231, 184, 117, 203, 94, 224, 179, 71, 189, 181, 165, 34, 171, 100, 106, 253, 186, 191, 179, 40, 62, 94, 183, 242, 54, 162, 190, 175, 246, 46, 137, 87, 160, 14, 181, 162, 14, 55, 13, 115, 221, 252, 12, 19, 234, 124, 78, 131, 65, 181, 154, 240, 214, 14, 10, 79, 103, 238, 137, 246, 196, 20, 138, 230, 217, 251, 245, 12, 89, 160, 141, 68, 235, 72, 33, 21, 83, 144, 162, 169, 2, 246, 107, 21, 172, 125, 140, 85, 232, 116, 27, 191, 194, 90, 25, 1, 215, 225, 254, 101, 218, 46, 118, 143, 175, 213, 252, 253, 214, 195, 223, 186, 133, 22, 139, 138, 25, 69, 73, 185, 162, 192, 158, 66, 151, 237, 35, 216, 232, 105, 34, 131, 68, 119, 94, 53, 173, 241, 44, 157, 86, 112, 182, 50, 123, 255, 151, 104, 13, 201, 122, 168, 207, 42, 220, 151, 76, 21, 220, 240, 48, 149, 243, 135, 48, 242, 213, 47, 47, 63, 252, 248, 143, 119, 79, 15, 187, 199, 105, 85, 210, 35, 203, 32, 133, 31, 182, 18, 61, 122, 20, 221, 164, 35, 174, 167, 239, 62, 252, 120, 240, 174, 59, 140, 43, 214, 56, 41, 63, 206, 90, 111, 150, 250, 148, 23, 224, 130, 241, 84, 153, 85, 29, 150, 89, 194, 129, 142, 125, 56, 42, 190, 43, 94, 195, 198, 56, 17, 227, 4, 84, 71, 144, 245, 125, 244, 231, 67, 14, 74, 74, 124, 126, 245, 37, 170, 122, 162, 146, 191, 227, 57, 248, 116, 50, 189, 133, 209, 117, 178, 98, 179, 52, 130, 57, 89, 16, 254, 152, 131, 163, 101, 68, 80, 143, 168, 121, 87, 247, 0, 174, 173, 101, 18, 216, 21, 207, 114, 11, 34, 180, 173, 124, 254, 163, 222, 93, 18, 245, 249, 67, 28, 153, 203, 40, 58, 156, 199, 112, 228, 243, 184, 136, 211, 76, 46, 208, 200, 171, 120, 42, 198, 90, 23, 209, 67, 142, 109, 63, 159, 49, 37, 74, 14, 72, 38, 76, 185, 36, 90, 157, 188, 9, 69, 20, 234, 78, 16, 24, 145, 107, 208, 174, 126, 207, 184, 152, 14, 60, 135, 2, 203, 116, 29, 59, 16, 184, 157, 136, 128, 220, 74, 44, 94, 226, 157, 196, 50, 63, 27, 236, 71, 242, 140, 114, 85, 105, 93, 71, 56, 111, 148, 177, 158, 159, 66, 143, 53, 236, 48, 133, 84, 78, 166, 134, 213, 244, 150, 173, 182, 71, 35, 62, 222, 196, 134, 76, 239, 141, 222, 209, 53, 65, 181, 64, 44, 39, 117, 225, 238, 37, 195, 254, 122, 81, 189, 129, 123, 238, 18, 107, 192, 142, 207, 16, 68, 37, 11, 214, 247, 76, 185, 237, 239, 254, 83, 31, 151, 87, 27, 106, 88, 87, 115, 186, 177, 228, 125, 207, 34, 90, 102, 229, 82, 225, 11, 71, 170, 135, 15, 241, 124, 62, 93, 10, 217, 39, 7, 147, 75, 188, 13, 36, 228, 115, 27, 146, 223, 29, 104, 29, 106, 173, 156, 44, 195, 69, 88, 30, 91, 203, 61, 25, 19, 85, 245, 56, 200, 6, 5, 239, 131, 44, 125, 208, 181, 167, 202, 37, 115, 25, 33, 216, 124, 200, 133, 73, 137, 166, 52, 31, 162, 216, 251, 116, 113, 116, 123, 181, 35, 225, 82, 173, 99, 36, 167, 171, 106, 228, 181, 71, 227, 40, 192, 209, 14, 191, 53, 56, 201, 116, 87, 102, 196, 150, 190, 208, 220, 140, 30, 26, 213, 183, 123, 110, 162, 206, 253, 160, 58, 203, 67, 75, 156, 78, 208, 104, 40, 61, 82, 131, 167, 191, 224, 231, 19, 107, 16, 235, 248, 108, 171, 90, 220, 82, 168, 108, 10, 6, 215, 237, 111, 238, 107, 92, 67, 83, 140, 85, 67, 107, 160, 83, 227, 253, 91, 167, 18, 252, 97, 145, 184, 103, 61, 19, 125, 214, 197, 239, 33, 43, 142, 1, 80, 85, 246, 72, 189, 46, 232, 245, 201, 43, 138, 245, 165, 239, 0, 134, 143, 146, 152, 76, 116, 187, 216, 242, 111, 145, 85, 156, 248, 120, 120, 101, 226, 179, 247, 160, 75, 125, 163, 235, 232, 197, 3, 187, 149, 179, 247, 190, 195, 107, 174, 164, 2, 132, 34, 125, 49, 134, 184, 133, 3, 95, 236, 129, 11, 206, 162, 45, 73, 58, 25, 215, 185, 195, 235, 52, 147, 151, 185, 98, 79, 118, 22, 47, 143, 147, 103, 196, 69, 16, 125, 39, 135, 141, 240, 233, 231, 153, 185, 136, 84, 123, 149, 104, 140, 107, 48, 249, 183, 249, 122, 238, 23, 67, 89, 84, 243, 113, 7, 243, 161, 121, 131, 122, 62, 109, 31, 12, 253, 72, 29, 37, 208, 115, 164, 78, 8, 206, 210, 39, 199, 173, 48, 160, 93, 220, 217, 254, 146, 165, 85, 187, 211, 76, 112, 209, 86, 143, 253, 124, 5, 111, 1, 131, 55, 244, 250, 150, 255, 162, 25, 228, 24, 189, 148, 181, 166, 106, 80, 106, 225, 36, 87, 184, 198, 240, 215, 214, 249, 62, 249, 162, 10, 187, 9, 180, 198, 235, 123, 10, 94, 14, 145, 57, 3, 126, 90, 17, 147, 133, 110, 162, 110, 122, 73, 123, 17, 150, 102, 13, 93, 211, 77, 59, 29, 117, 19, 253, 86, 95, 125, 225, 246, 189, 72, 64, 154, 187, 96, 123, 220, 175, 233, 151, 93, 47, 86, 202, 145, 163, 143, 171, 185, 238, 77, 35, 199, 52, 51, 195, 97, 248, 162, 211, 19, 88, 209, 61, 46, 254, 94, 154, 29, 132, 124, 126, 246, 78, 243, 180, 222, 229, 215, 36, 104, 6, 200, 98, 241, 229, 9, 116, 204, 140, 112, 135, 226, 172, 24, 164, 145, 11, 225, 161, 203, 30, 149, 141, 214, 227, 24, 220, 134, 78, 179, 226, 138, 53, 12, 64, 80, 55, 116, 224, 120, 24, 208, 204, 142, 223, 209, 16, 21, 108, 101, 239, 16, 243, 90, 88, 42, 204, 234, 171, 52, 118, 105, 70, 109, 157, 215, 0, 114, 192, 146, 199, 67, 251, 2, 161, 114, 54, 161, 155, 236, 243, 171, 142, 186, 222, 250, 48, 185, 9, 27, 28, 81, 62, 50, 250, 86, 25, 63, 48, 181, 219, 107, 234, 9, 80, 177, 86, 71, 112, 73, 196, 190, 46, 198, 44, 53, 200, 145, 129, 17, 184, 245, 141, 112, 62, 105, 11, 13, 20, 237, 142, 129, 26, 127, 90, 57, 109, 194, 84, 155, 109, 252, 187, 243, 240, 119, 30, 145, 17, 235, 205, 135, 72, 196, 212, 219, 186, 110, 197, 186, 102, 69, 117, 45, 34, 185, 174, 253, 133, 108, 153, 142, 6, 53, 185, 26, 25, 11, 100, 235, 203, 137, 102, 174, 241, 31, 40, 127, 241, 109, 1, 45, 184, 44, 232, 17, 227, 168, 226, 50, 149, 127, 69, 174, 67, 164, 17, 162, 95, 248, 150, 99, 117, 52, 223, 92, 95, 212, 243, 191, 90, 77, 226, 98, 12, 252, 57, 146, 85, 210, 110, 96, 99, 136, 197, 142, 220, 0, 34, 59, 122, 210, 16, 236, 81, 89, 60, 58, 185, 98, 164, 231, 52, 79, 135, 176, 71, 30, 48, 94, 127, 189, 94, 55, 0, 84, 163, 18, 220, 105, 32, 125, 11, 153, 124, 186, 148, 149, 160, 62, 40, 159, 66, 110, 192, 221, 197, 81, 109, 175, 146, 90, 91, 194, 157, 169, 151, 216, 29, 177, 10, 154, 82, 198, 201, 84, 221, 96, 142, 35, 85, 165, 184, 130, 254, 84, 221, 82, 37, 220, 40, 14, 108, 93, 215, 203, 156, 132, 24, 121, 156, 76, 219, 251, 141, 211, 32, 65, 71, 70, 146, 71, 150, 114, 121, 139, 53, 22, 132, 83, 26, 233, 176, 67, 164, 207, 78, 227, 84, 29, 237, 188, 247, 70, 126, 84, 174, 29, 59, 23, 114, 233, 20, 115, 176, 184, 16, 235, 198, 145, 8, 11, 135, 89, 128, 188, 79, 47, 94, 110, 234, 79, 197, 49, 13, 177, 180, 247, 27, 238, 60, 252, 101, 234, 110, 57, 167, 138, 21, 27, 171, 241, 66, 150, 126, 37, 245, 247, 86, 218, 26, 239, 73, 105, 67, 178, 236, 153, 241, 146, 178, 236, 14, 238, 132, 253, 165, 27, 193, 233, 144, 44, 214, 3, 178, 240, 92, 158, 198, 208, 60, 242, 73, 200, 206, 226, 96, 92, 149, 199, 99, 166, 241, 24, 119, 156, 119, 69, 191, 105, 102, 233, 48, 255, 76, 24, 103, 32, 183, 79, 107, 111, 189, 221, 164, 71, 130, 55, 25, 223, 12, 142, 9, 124, 61, 181, 219, 142, 200, 1, 56, 117, 187, 104, 82, 84, 236, 237, 160, 249, 201, 186, 188, 245, 185, 83, 35, 26, 193, 200, 176, 154, 114, 228, 44, 98, 16, 166, 179, 131, 202, 211, 59, 102, 113, 55, 129, 67, 246, 205, 75, 245, 204, 208, 77, 54, 151, 189, 46, 149, 84, 132, 23, 237, 31, 242, 25, 36, 93, 207, 24, 180, 23, 125, 108, 193, 75, 224, 200, 115, 187, 218, 38, 40, 201, 157, 183, 143, 155, 155, 239, 181, 17, 19, 241, 164, 250, 200, 200, 111, 73, 60, 97, 125, 239, 135, 120, 56, 20, 122, 134, 91, 238, 48, 10, 223, 100, 125, 168, 110, 119, 150, 24, 88, 130, 115, 243, 177, 115, 171, 179, 132, 13, 92, 233, 44, 245, 188, 131, 104, 82, 139, 133, 166, 172, 245, 24, 159, 139, 148, 30, 45, 30, 92, 197, 39, 169, 149, 89, 130, 55, 17, 222, 52, 165, 193, 18, 110, 40, 80, 111, 6, 62, 220, 240, 85, 251, 148, 156, 127, 238, 32, 188, 181, 235, 6, 90, 79, 241, 241, 154, 142, 47, 5, 197, 179, 190, 249, 3, 119, 112, 36, 189, 154, 21, 60, 92, 126, 31, 119, 244, 135, 222, 214, 27, 76, 147, 184, 232, 126, 197, 166, 235, 16, 74, 190, 108, 171, 137, 34, 157, 118, 11, 114, 154, 195, 107, 94, 83, 246, 250, 119, 201, 171, 202, 13, 153, 186, 87, 201, 181, 211, 19, 65, 214, 151, 101, 186, 44, 115, 69, 109, 113, 111, 68, 247, 113, 0, 55, 150, 40, 199, 214, 140, 13, 111, 243, 156, 196, 229, 181, 107, 27, 70, 211, 151, 109, 24, 40, 240, 179, 183, 10, 43, 196, 215, 36, 255, 63, 168, 24, 45, 186 };
static const unsigned char * const compressedSources = reinterpret_cast<const unsigned char *>(data);
uint32_t GetCompressedSize() {
- return 27018;
+ return 26752;
}
uint32_t GetRawScriptsSize() {
- return 169837;
+ return 164270;
}
} // selfhosted
} // js
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/ArrayBufferObject.cpp b/src/third_party/mozjs-45/extract/js/src/vm/ArrayBufferObject.cpp
index 5cb626cdb2f..35aaadc1af6 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/ArrayBufferObject.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/ArrayBufferObject.cpp
@@ -512,6 +512,8 @@ ArrayBufferObject::neuterView(JSContext* cx, ArrayBufferViewObject* view,
ArrayBufferObject::neuter(JSContext* cx, Handle<ArrayBufferObject*> buffer,
BufferContents newContents)
{
+ assertSameCompartment(cx, buffer);
+
if (buffer->isAsmJS() && !OnDetachAsmJSArrayBuffer(cx, buffer))
return false;
@@ -932,6 +934,7 @@ ArrayBufferObject::stealContents(JSContext* cx, Handle<ArrayBufferObject*> buffe
bool hasStealableContents)
{
MOZ_ASSERT_IF(hasStealableContents, buffer->hasStealableContents());
+ assertSameCompartment(cx, buffer);
BufferContents oldContents(buffer->dataPointer(), buffer->bufferKind());
BufferContents newContents = AllocateArrayBufferContents(cx, buffer->byteLength());
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/Debugger.cpp b/src/third_party/mozjs-45/extract/js/src/vm/Debugger.cpp
index 5b00d8e225d..12de1145276 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/Debugger.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/Debugger.cpp
@@ -384,7 +384,6 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg)
{
assertSameCompartment(cx, dbg);
- cx->runtime()->debuggerList.insertBack(this);
JS_INIT_CLIST(&breakpoints);
JS_INIT_CLIST(&onNewGlobalObjectWatchersLink);
}
@@ -408,17 +407,21 @@ Debugger::~Debugger()
bool
Debugger::init(JSContext* cx)
{
- bool ok = debuggees.init() &&
- debuggeeZones.init() &&
- frames.init() &&
- scripts.init() &&
- sources.init() &&
- objects.init() &&
- observedGCs.init() &&
- environments.init();
- if (!ok)
+ if (!debuggees.init() ||
+ !debuggeeZones.init() ||
+ !frames.init() ||
+ !scripts.init() ||
+ !sources.init() ||
+ !objects.init() ||
+ !observedGCs.init() ||
+ !environments.init())
+ {
ReportOutOfMemory(cx);
- return ok;
+ return false;
+ }
+
+ cx->runtime()->debuggerList.insertBack(this);
+ return true;
}
JS_STATIC_ASSERT(unsigned(JSSLOT_DEBUGFRAME_OWNER) == unsigned(JSSLOT_DEBUGSCRIPT_OWNER));
@@ -3333,7 +3336,7 @@ Debugger::construct(JSContext* cx, unsigned argc, Value* vp)
Debugger* debugger;
{
/* Construct the underlying C++ object. */
- AutoInitGCManagedObject<Debugger> dbg(cx->make_unique<Debugger>(cx, obj.get()));
+ auto dbg = cx->make_unique<Debugger>(cx, obj.get());
if (!dbg || !dbg->init(cx))
return false;
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/Debugger.h b/src/third_party/mozjs-45/extract/js/src/vm/Debugger.h
index 0ab5e0508c0..ef7b94bc24f 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/Debugger.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/Debugger.h
@@ -1111,5 +1111,12 @@ bool ReportObjectRequired(JSContext* cx);
} /* namespace js */
+namespace JS {
+
+template <>
+struct DeletePolicy<js::Debugger> : public js::GCManagedDeletePolicy<js::Debugger>
+{};
+
+} /* namespace JS */
#endif /* vm_Debugger_h */
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/HelperThreads.cpp b/src/third_party/mozjs-45/extract/js/src/vm/HelperThreads.cpp
index 5a6ecc1586f..5d421058662 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/HelperThreads.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/HelperThreads.cpp
@@ -1050,7 +1050,7 @@ GlobalHelperThreadState::finishParseTask(JSContext* maybecx, JSRuntime* rt, void
return nullptr;
RootedScript script(rt, parseTask->script);
- assertSameCompartment(cx, script);
+ releaseAssertSameCompartment(cx, script);
// Report any error or warnings generated during the parse, and inform the
// debugger about the compiled scripts.
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/ObjectGroup.cpp b/src/third_party/mozjs-45/extract/js/src/vm/ObjectGroup.cpp
index ba50057352b..6ef50de88c3 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/ObjectGroup.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/ObjectGroup.cpp
@@ -147,12 +147,12 @@ ObjectGroup::useSingletonForClone(JSFunction* fun)
uint32_t begin, end;
if (fun->hasScript()) {
- if (!fun->nonLazyScript()->usesArgumentsApplyAndThis())
+ if (!fun->nonLazyScript()->isLikelyConstructorWrapper())
return false;
begin = fun->nonLazyScript()->sourceStart();
end = fun->nonLazyScript()->sourceEnd();
} else {
- if (!fun->lazyScript()->usesArgumentsApplyAndThis())
+ if (!fun->lazyScript()->isLikelyConstructorWrapper())
return false;
begin = fun->lazyScript()->begin();
end = fun->lazyScript()->end();
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.cpp b/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.cpp
index 89b3bf6ac34..fec090d3f19 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.cpp
@@ -45,10 +45,20 @@ js::RegExpAlloc(ExclusiveContext* cx, HandleObject proto /* = nullptr */)
{
// Note: RegExp objects are always allocated in the tenured heap. This is
// not strictly required, but simplifies embedding them in jitcode.
- RegExpObject* regexp = NewObjectWithClassProto<RegExpObject>(cx, proto, TenuredObject);
+ Rooted<RegExpObject*> regexp(cx);
+
+ regexp = NewObjectWithClassProto<RegExpObject>(cx, proto, TenuredObject);
if (!regexp)
return nullptr;
+
regexp->initPrivate(nullptr);
+
+ if (!EmptyShape::ensureInitialCustomShape<RegExpObject>(cx, regexp))
+ return nullptr;
+
+ MOZ_ASSERT(regexp->lookupPure(cx->names().lastIndex)->slot() ==
+ RegExpObject::lastIndexSlot());
+
return regexp;
}
@@ -137,7 +147,7 @@ RegExpObject::trace(JSTracer* trc, JSObject* obj)
// be a marking tracer.
// 2. When a write barrier executes, IsMarkingTracer is true, but
// isHeapBusy() will be false.
- if (trc->runtime()->isHeapBusy() &&
+ if (trc->runtime()->isHeapCollecting() &&
trc->isMarkingTracer() &&
!obj->asTenured().zone()->isPreservingCode())
{
@@ -147,13 +157,6 @@ RegExpObject::trace(JSTracer* trc, JSObject* obj)
}
}
-/* static */ bool
-RegExpObject::initFromAtom(ExclusiveContext* cx, Handle<RegExpObject*> regexp, HandleAtom source,
- RegExpFlag flags)
-{
- return regexp->init(cx, source, flags);
-}
-
const Class RegExpObject::class_ = {
js_RegExp_str,
JSCLASS_HAS_PRIVATE |
@@ -223,8 +226,7 @@ RegExpObject::createNoStatics(ExclusiveContext* cx, HandleAtom source, RegExpFla
if (!regexp)
return nullptr;
- if (!RegExpObject::initFromAtom(cx, regexp, source, flags))
- return nullptr;
+ regexp->initAndZeroLastIndex(source, flags, cx);
return regexp;
}
@@ -253,30 +255,25 @@ RegExpObject::assignInitialShape(ExclusiveContext* cx, Handle<RegExpObject*> sel
return self->addDataProperty(cx, cx->names().lastIndex, LAST_INDEX_SLOT, JSPROP_PERMANENT);
}
-bool
-RegExpObject::init(ExclusiveContext* cx, HandleAtom source, RegExpFlag flags)
+void
+RegExpObject::initIgnoringLastIndex(HandleAtom source, RegExpFlag flags)
{
- Rooted<RegExpObject*> self(cx, this);
-
- if (!EmptyShape::ensureInitialCustomShape<RegExpObject>(cx, self))
- return false;
-
- MOZ_ASSERT(self->lookup(cx, NameToId(cx->names().lastIndex))->slot() ==
- LAST_INDEX_SLOT);
+ // If this is a re-initialization with an existing RegExpShared, 'flags'
+ // may not match getShared()->flags, so forget the RegExpShared.
+ NativeObject::setPrivate(nullptr);
+
+ setSource(source);
+ setGlobal(flags & GlobalFlag);
+ setIgnoreCase(flags & IgnoreCaseFlag);
+ setMultiline(flags & MultilineFlag);
+ setSticky(flags & StickyFlag);
+}
- /*
- * If this is a re-initialization with an existing RegExpShared, 'flags'
- * may not match getShared()->flags, so forget the RegExpShared.
- */
- self->NativeObject::setPrivate(nullptr);
-
- self->zeroLastIndex();
- self->setSource(source);
- self->setGlobal(flags & GlobalFlag);
- self->setIgnoreCase(flags & IgnoreCaseFlag);
- self->setMultiline(flags & MultilineFlag);
- self->setSticky(flags & StickyFlag);
- return true;
+void
+RegExpObject::initAndZeroLastIndex(HandleAtom source, RegExpFlag flags, ExclusiveContext* cx)
+{
+ initIgnoringLastIndex(source, flags);
+ zeroLastIndex(cx);
}
static MOZ_ALWAYS_INLINE bool
@@ -880,46 +877,41 @@ js::CloneRegExpObject(JSContext* cx, JSObject* obj_)
{
Rooted<RegExpObject*> regex(cx, &obj_->as<RegExpObject>());
+ // Unlike RegExpAlloc, all clones must use |regex|'s group. Allocate
+ // in the tenured heap to simplify embedding them in JIT code.
+ RootedObjectGroup group(cx, regex->group());
+ Rooted<RegExpObject*> clone(cx, NewObjectWithGroup<RegExpObject>(cx, group, TenuredObject));
+ if (!clone)
+ return nullptr;
+ clone->initPrivate(nullptr);
+
+ if (!EmptyShape::ensureInitialCustomShape<RegExpObject>(cx, clone))
+ return nullptr;
+
+ Rooted<JSAtom*> source(cx, regex->getSource());
+
// Check that the RegExpShared for |regex| is okay to reuse in the clone.
- // If the |RegExpStatics| provides additional flags, we'll need a new
- // |RegExpShared|.
RegExpStatics* currentStatics = regex->getProto()->global().getRegExpStatics(cx);
if (!currentStatics)
return nullptr;
- Rooted<JSAtom*> source(cx, regex->getSource());
-
RegExpFlag origFlags = regex->getFlags();
RegExpFlag staticsFlags = currentStatics->getFlags();
if ((origFlags & staticsFlags) != staticsFlags) {
- Rooted<RegExpObject*> clone(cx, RegExpAlloc(cx));
- if (!clone)
- return nullptr;
-
- if (!RegExpObject::initFromAtom(cx, clone, source, RegExpFlag(origFlags | staticsFlags)))
+ // If |currentStatics| provides additional flags, we'll have to use a
+ // new |RegExpShared|.
+ clone->initAndZeroLastIndex(source, RegExpFlag(origFlags | staticsFlags), cx);
+ } else {
+ // Otherwise we can use |regexp|'s RegExpShared. Initialize using its
+ // flags and associate it with the clone.
+ RegExpGuard g(cx);
+ if (!regex->getShared(cx, &g))
return nullptr;
- return clone;
+ clone->initAndZeroLastIndex(source, g->getFlags(), cx);
+ clone->setShared(*g.re());
}
- // Otherwise, the clone can use |regexp|'s RegExpShared.
- RootedObjectGroup group(cx, regex->group());
-
- // Note: RegExp objects are always allocated in the tenured heap. This is
- // not strictly required, but it simplifies embedding them in jitcode.
- Rooted<RegExpObject*> clone(cx, NewObjectWithGroup<RegExpObject>(cx, group, TenuredObject));
- if (!clone)
- return nullptr;
- clone->initPrivate(nullptr);
-
- RegExpGuard g(cx);
- if (!regex->getShared(cx, &g))
- return nullptr;
-
- if (!RegExpObject::initFromAtom(cx, clone, source, g->getFlags()))
- return nullptr;
-
- clone->setShared(*g.re());
return clone;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.h b/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.h
index ad118914d9d..24e88deb55a 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/RegExpObject.h
@@ -386,7 +386,10 @@ class RegExpObject : public NativeObject
setSlot(LAST_INDEX_SLOT, NumberValue(d));
}
- void zeroLastIndex() {
+ void zeroLastIndex(ExclusiveContext* cx) {
+ MOZ_ASSERT(lookupPure(cx->names().lastIndex)->writable(),
+ "can't infallibly zero a non-writable lastIndex on a "
+ "RegExp that's been exposed to script");
setSlot(LAST_INDEX_SLOT, Int32Value(0));
}
@@ -443,12 +446,11 @@ class RegExpObject : public NativeObject
static void trace(JSTracer* trc, JSObject* obj);
- static bool initFromAtom(ExclusiveContext* cx, Handle<RegExpObject*> regexp, HandleAtom source,
- RegExpFlag flags);
+ void initIgnoringLastIndex(HandleAtom source, RegExpFlag flags);
- private:
- bool init(ExclusiveContext* cx, HandleAtom source, RegExpFlag flags);
+ void initAndZeroLastIndex(HandleAtom source, RegExpFlag flags, ExclusiveContext* cx);
+ private:
/*
* Precondition: the syntax for |source| has already been validated.
* Side effect: sets the private field.
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/Runtime.cpp b/src/third_party/mozjs-45/extract/js/src/vm/Runtime.cpp
index 23ecfd8cf6e..94909a2ed47 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/Runtime.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/Runtime.cpp
@@ -188,7 +188,6 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime)
profilingScripts(false),
suppressProfilerSampling(false),
hadOutOfMemory(false),
- handlingInitFailure(false),
haveCreatedContext(false),
allowRelazificationForTesting(false),
data(nullptr),
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/Runtime.h b/src/third_party/mozjs-45/extract/js/src/vm/Runtime.h
index f3ed3a256c4..51734df147a 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/Runtime.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/Runtime.h
@@ -1102,9 +1102,6 @@ struct JSRuntime : public JS::shadow::Runtime,
/* Had an out-of-memory error which did not populate an exception. */
bool hadOutOfMemory;
- /* We are currently deleting an object due to an initialization failure. */
- mozilla::DebugOnly<bool> handlingInitFailure;
-
/* A context has been created on this runtime. */
bool haveCreatedContext;
@@ -1863,75 +1860,43 @@ class MOZ_RAII AutoEnterIonCompilation
};
/*
- * AutoInitGCManagedObject is a wrapper for use when initializing a object whose
- * lifetime is managed by the GC. It ensures that the object is destroyed if
- * initialization fails but also allows us to assert the invariant that such
- * objects are only destroyed in this way or by the GC.
- *
- * It has a limited interface but is a drop-in replacement for UniquePtr<T> is
- * this situation. For example:
- *
- * AutoInitGCManagedObject<MyClass> ptr(cx->make_unique<MyClass>());
- * if (!ptr) {
- * ReportOutOfMemory(cx);
- * return nullptr;
- * }
+ * Provides a delete policy that can be used for objects which have their
+ * lifetime managed by the GC and can only safely be destroyed while the nursery
+ * is empty.
*
- * if (!ptr->init(cx))
- * return nullptr; // Object destroyed here if init() failed.
- *
- * object->setPrivate(ptr.release());
- * // Initialization successful, ptr is now owned through another object.
+ * This is necessary when initializing such an object may fail after the initial
+ * allocation. The partially-initialized object must be destroyed, but it may
+ * not be safe to do so at the current time. This policy puts the object on a
+ * queue to be destroyed at a safe time.
*/
template <typename T>
-class MOZ_STACK_CLASS AutoInitGCManagedObject
+struct GCManagedDeletePolicy
{
- typedef mozilla::UniquePtr<T, JS::DeletePolicy<T>> UniquePtrT;
-
- UniquePtrT ptr_;
-
- public:
- explicit AutoInitGCManagedObject(UniquePtrT&& ptr)
- : ptr_(mozilla::Move(ptr))
- {}
-
- ~AutoInitGCManagedObject() {
-#ifdef DEBUG
- if (ptr_) {
- JSRuntime* rt = TlsPerThreadData.get()->runtimeFromMainThread();
- MOZ_ASSERT(!rt->handlingInitFailure);
- rt->handlingInitFailure = true;
- ptr_.reset(nullptr);
- rt->handlingInitFailure = false;
+ void operator()(const T* ptr) {
+ if (ptr) {
+ JSRuntime* rt = TlsPerThreadData.get()->runtimeIfOnOwnerThread();
+ if (rt)
+ rt->gc.callAfterMinorGC(deletePtr, const_cast<T*>(ptr));
+ else
+ js_delete(const_cast<T*>(ptr));
}
-#endif
- }
-
- T& operator*() const {
- return *get();
- }
-
- T* operator->() const {
- return get();
}
- explicit operator bool() const {
- return get() != nullptr;
+ private:
+ static void deletePtr(void* data) {
+ js_delete(reinterpret_cast<T*>(data));
}
+};
- T* get() const {
- return ptr_.get();
- }
+} /* namespace js */
- T* release() {
- return ptr_.release();
- }
+namespace JS {
- AutoInitGCManagedObject(const AutoInitGCManagedObject<T>& other) = delete;
- AutoInitGCManagedObject& operator=(const AutoInitGCManagedObject<T>& other) = delete;
-};
+template <typename T>
+struct DeletePolicy<js::HeapPtr<T>> : public js::GCManagedDeletePolicy<js::HeapPtr<T>>
+{};
-} /* namespace js */
+} /* namespace JS */
#ifdef _MSC_VER
#pragma warning(pop)
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/SavedStacks.cpp b/src/third_party/mozjs-45/extract/js/src/vm/SavedStacks.cpp
index 235717fb0d9..2abe48ea3f4 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/SavedStacks.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/SavedStacks.cpp
@@ -156,6 +156,10 @@ struct SavedFrame::Lookup {
MOZ_ASSERT(source);
MOZ_ASSERT_IF(framePtr.isSome(), pc);
MOZ_ASSERT_IF(framePtr.isSome(), activation);
+
+#ifdef JS_MORE_DETERMINISTIC
+ column = 0;
+#endif
}
explicit Lookup(SavedFrame& savedFrame)
@@ -422,6 +426,9 @@ SavedFrame::initLine(uint32_t line)
void
SavedFrame::initColumn(uint32_t column)
{
+#ifdef JS_MORE_DETERMINISTIC
+ column = 0;
+#endif
initReservedSlot(JSSLOT_COLUMN, PrivateUint32Value(column));
}
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.cpp b/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.cpp
index 5aee1ae73ba..7ff9dc24a47 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.cpp
@@ -2451,15 +2451,14 @@ DebugScopes::ensureCompartmentData(JSContext* cx)
if (c->debugScopes)
return c->debugScopes;
- c->debugScopes = cx->runtime()->new_<DebugScopes>(cx);
- if (c->debugScopes && c->debugScopes->init())
- return c->debugScopes;
+ auto debugScopes = cx->make_unique<DebugScopes>(cx);
+ if (!debugScopes || !debugScopes->init()) {
+ ReportOutOfMemory(cx);
+ return nullptr;
+ }
- if (c->debugScopes)
- js_delete<DebugScopes>(c->debugScopes);
- c->debugScopes = nullptr;
- ReportOutOfMemory(cx);
- return nullptr;
+ c->debugScopes = debugScopes.release();
+ return c->debugScopes;
}
DebugScopeObject*
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.h b/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.h
index 26005a37621..77d7c5362ac 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/ScopeObject.h
@@ -1479,4 +1479,18 @@ AnalyzeEntrainedVariables(JSContext* cx, HandleScript script);
} // namespace js
+namespace JS {
+
+template <>
+struct DeletePolicy<js::DebugScopeObject>
+{
+ explicit DeletePolicy(JSRuntime* rt) : rt_(rt) {}
+ void operator()(const js::DebugScopeObject* ptr);
+
+ private:
+ JSRuntime* rt_;
+};
+
+} // namespace JS
+
#endif /* vm_ScopeObject_h */
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/Shape.cpp b/src/third_party/mozjs-45/extract/js/src/vm/Shape.cpp
index a05bbccb461..9c495a549b9 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/Shape.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/Shape.cpp
@@ -389,8 +389,10 @@ NativeObject::getChildPropertyOnDictionary(ExclusiveContext* cx, HandleNativeObj
if (!shape)
return nullptr;
if (child.hasSlot() && child.slot() >= obj->lastProperty()->base()->slotSpan()) {
- if (!obj->setSlotSpan(cx, child.slot() + 1))
+ if (!obj->setSlotSpan(cx, child.slot() + 1)) {
+ new (shape) Shape(obj->lastProperty()->base()->unowned(), 0);
return nullptr;
+ }
}
shape->initDictionaryShape(child, obj->numFixedSlots(), &obj->shape_);
}
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/StructuredClone.cpp b/src/third_party/mozjs-45/extract/js/src/vm/StructuredClone.cpp
index 94ebbc7b867..4b02c59b3c8 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/StructuredClone.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/StructuredClone.cpp
@@ -1286,6 +1286,7 @@ JSStructuredCloneWriter::transferOwnership()
// The current setup of the array buffer inheritance hierarchy doesn't
// lend itself well to generic manipulation via proxies.
Rooted<ArrayBufferObject*> arrayBuffer(context(), &CheckedUnwrap(obj)->as<ArrayBufferObject>());
+ JSAutoCompartment ac(context(), arrayBuffer);
size_t nbytes = arrayBuffer->byteLength();
// Structured cloning currently only has optimizations for mapped
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/TaggedProto.h b/src/third_party/mozjs-45/extract/js/src/vm/TaggedProto.h
index 72538802535..e301b4a5396 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/TaggedProto.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/TaggedProto.h
@@ -70,6 +70,11 @@ template <> struct InternalGCMethods<TaggedProto>
static bool isMarkable(TaggedProto proto) {
return proto.isObject();
}
+
+ static bool isInsideNursery(TaggedProto proto) {
+ return proto.isObject() &&
+ gc::IsInsideNursery(reinterpret_cast<gc::Cell*>(proto.toObject()));
+ }
};
template<class Outer>
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/TypeInference-inl.h b/src/third_party/mozjs-45/extract/js/src/vm/TypeInference-inl.h
index ef0b441369c..817c15b2dc0 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/TypeInference-inl.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/TypeInference-inl.h
@@ -274,7 +274,11 @@ TypeIdString(jsid id)
*/
struct AutoEnterAnalysis
{
- /* Prevent GC activity in the middle of analysis. */
+ // For use when initializing an UnboxedLayout. The UniquePtr's destructor
+ // must run when GC is not suppressed.
+ mozilla::UniquePtr<UnboxedLayout, JS::DeletePolicy<UnboxedLayout>> unboxedLayoutToCleanUp;
+
+ // Prevent GC activity in the middle of analysis.
gc::AutoSuppressGC suppressGC;
// Allow clearing inference info on OOM during incremental sweeping.
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/TypeInference.cpp b/src/third_party/mozjs-45/extract/js/src/vm/TypeInference.cpp
index f6bde8c4bbe..b289cfd62a7 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/TypeInference.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/TypeInference.cpp
@@ -3415,7 +3415,7 @@ PreliminaryObjectArrayWithTemplate::writeBarrierPre(PreliminaryObjectArrayWithTe
{
Shape* shape = objects->shape();
- if (!shape || shape->runtimeFromAnyThread()->isHeapBusy())
+ if (!shape || shape->runtimeFromAnyThread()->isHeapCollecting())
return;
JS::Zone* zone = shape->zoneFromAnyThread();
@@ -3498,7 +3498,7 @@ PreliminaryObjectArrayWithTemplate::maybeAnalyze(ExclusiveContext* cx, ObjectGro
}
}
- TryConvertToUnboxedLayout(cx, shape(), group, preliminaryObjects);
+ TryConvertToUnboxedLayout(cx, enter, shape(), group, preliminaryObjects);
if (group->maybeUnboxedLayout())
return;
@@ -3781,7 +3781,7 @@ TypeNewScript::maybeAnalyze(JSContext* cx, ObjectGroup* group, bool* regenerate,
}
// Try to use an unboxed representation for the group.
- if (!TryConvertToUnboxedLayout(cx, templateObject()->lastProperty(), group, preliminaryObjects))
+ if (!TryConvertToUnboxedLayout(cx, enter, templateObject()->lastProperty(), group, preliminaryObjects))
return false;
js_delete(preliminaryObjects);
@@ -3981,7 +3981,7 @@ TypeNewScript::trace(JSTracer* trc)
/* static */ void
TypeNewScript::writeBarrierPre(TypeNewScript* newScript)
{
- if (newScript->function()->runtimeFromAnyThread()->isHeapBusy())
+ if (newScript->function()->runtimeFromAnyThread()->isHeapCollecting())
return;
JS::Zone* zone = newScript->function()->zoneFromAnyThread();
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/UbiNodeCensus.cpp b/src/third_party/mozjs-45/extract/js/src/vm/UbiNodeCensus.cpp
index 93bb04b6499..4f6a912992c 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/UbiNodeCensus.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/UbiNodeCensus.cpp
@@ -688,7 +688,7 @@ ByAllocationStack::report(CountBase& countBase, MutableHandleValue report)
#ifdef DEBUG
// Check that nothing rehashes our table while we hold pointers into it.
- uint32_t generation = count.table.generation();
+ Generation generation = count.table.generation();
#endif
// Build a vector of pointers to entries; sort by total; and then use
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.cpp b/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.cpp
index 039a40f1052..504a5c418c4 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.cpp
+++ b/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.cpp
@@ -1896,7 +1896,7 @@ UnboxedPlainObject::fillAfterConvert(ExclusiveContext* cx,
}
bool
-js::TryConvertToUnboxedLayout(ExclusiveContext* cx, Shape* templateShape,
+js::TryConvertToUnboxedLayout(ExclusiveContext* cx, AutoEnterAnalysis& enter, Shape* templateShape,
ObjectGroup* group, PreliminaryObjectArray* objects)
{
bool isArray = !templateShape;
@@ -1991,7 +1991,9 @@ js::TryConvertToUnboxedLayout(ExclusiveContext* cx, Shape* templateShape,
return true;
}
- AutoInitGCManagedObject<UnboxedLayout> layout(group->zone()->make_unique<UnboxedLayout>());
+ auto& layout = enter.unboxedLayoutToCleanUp;
+ MOZ_ASSERT(!layout);
+ layout = group->zone()->make_unique<UnboxedLayout>();
if (!layout)
return false;
@@ -2065,7 +2067,6 @@ js::TryConvertToUnboxedLayout(ExclusiveContext* cx, Shape* templateShape,
}
MOZ_ASSERT(valueCursor == values.length());
- layout.release();
return true;
}
diff --git a/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.h b/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.h
index b08fcb5e1bd..ab98334a238 100644
--- a/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.h
+++ b/src/third_party/mozjs-45/extract/js/src/vm/UnboxedObject.h
@@ -10,6 +10,7 @@
#include "jsgc.h"
#include "jsobj.h"
+#include "vm/Runtime.h"
#include "vm/TypeInference.h"
namespace js {
@@ -320,7 +321,7 @@ class UnboxedPlainObject : public JSObject
// provided they all match the template shape. If successful, converts the
// preliminary objects and their group to the new unboxed representation.
bool
-TryConvertToUnboxedLayout(ExclusiveContext* cx, Shape* templateShape,
+TryConvertToUnboxedLayout(ExclusiveContext* cx, AutoEnterAnalysis& enter, Shape* templateShape,
ObjectGroup* group, PreliminaryObjectArray* objects);
inline gc::AllocKind
@@ -519,4 +520,12 @@ class UnboxedArrayObject : public JSObject
} // namespace js
+namespace JS {
+
+template <>
+struct DeletePolicy<js::UnboxedLayout> : public js::GCManagedDeletePolicy<js::UnboxedLayout>
+{};
+
+} /* namespace JS */
+
#endif /* vm_UnboxedObject_h */
diff --git a/src/third_party/mozjs-45/extract/mfbt/Opaque.h b/src/third_party/mozjs-45/extract/mfbt/Opaque.h
new file mode 100644
index 00000000000..d7239ee7c23
--- /dev/null
+++ b/src/third_party/mozjs-45/extract/mfbt/Opaque.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* An opaque integral type supporting only comparison operators. */
+
+#ifndef mozilla_Opaque_h
+#define mozilla_Opaque_h
+
+#include "mozilla/TypeTraits.h"
+
+namespace mozilla {
+
+/**
+ * Opaque<T> is a replacement for integral T in cases where only comparisons
+ * must be supported, and it's desirable to prevent accidental dependency on
+ * exact values.
+ */
+template<typename T>
+class Opaque final
+{
+ static_assert(mozilla::IsIntegral<T>::value,
+ "mozilla::Opaque only supports integral types");
+
+ T mValue;
+
+public:
+ Opaque() {}
+ explicit Opaque(T aValue) : mValue(aValue) {}
+
+ bool operator==(const Opaque& aOther) const {
+ return mValue == aOther.mValue;
+ }
+
+ bool operator!=(const Opaque& aOther) const {
+ return !(*this == aOther);
+ }
+};
+
+} // namespace mozilla
+
+#endif /* mozilla_Opaque_h */
diff --git a/src/third_party/mozjs-45/extract/mfbt/moz.build b/src/third_party/mozjs-45/extract/mfbt/moz.build
index 67c276df3d6..a0710405aca 100644
--- a/src/third_party/mozjs-45/extract/mfbt/moz.build
+++ b/src/third_party/mozjs-45/extract/mfbt/moz.build
@@ -60,6 +60,7 @@ EXPORTS.mozilla = [
'Move.h',
'NullPtr.h',
'NumericLimits.h',
+ 'Opaque.h',
'Pair.h',
'PodOperations.h',
'Poison.h',
diff --git a/src/third_party/mozjs-45/get-sources.sh b/src/third_party/mozjs-45/get-sources.sh
index dfbc4c410b2..ef7fa8e41a9 100644
--- a/src/third_party/mozjs-45/get-sources.sh
+++ b/src/third_party/mozjs-45/get-sources.sh
@@ -2,7 +2,7 @@
# how we got the last firefox sources
-VERSION=45.0.2esr
+VERSION=45.4.0esr
TARBALL=firefox-$VERSION.source.tar.xz
if [ ! -f $TARBALL ]; then
wget "https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/$VERSION/source/$TARBALL"
diff --git a/src/third_party/mozjs-45/include/js/GCHashTable.h b/src/third_party/mozjs-45/include/js/GCHashTable.h
index 9d2b83a626a..94d98f7bcfb 100644
--- a/src/third_party/mozjs-45/include/js/GCHashTable.h
+++ b/src/third_party/mozjs-45/include/js/GCHashTable.h
@@ -112,7 +112,6 @@ class GCHashMapOperations
bool empty() const { return map().empty(); }
uint32_t count() const { return map().count(); }
size_t capacity() const { return map().capacity(); }
- uint32_t generation() const { return map().generation(); }
bool has(const Lookup& l) const { return map().lookup(l).found(); }
};
@@ -253,7 +252,6 @@ class GCHashSetOperations
bool empty() const { return set().empty(); }
uint32_t count() const { return set().count(); }
size_t capacity() const { return set().capacity(); }
- uint32_t generation() const { return set().generation(); }
bool has(const Lookup& l) const { return set().lookup(l).found(); }
};
diff --git a/src/third_party/mozjs-45/include/js/HashTable.h b/src/third_party/mozjs-45/include/js/HashTable.h
index 1ddf83fa7c8..159315d36b6 100644
--- a/src/third_party/mozjs-45/include/js/HashTable.h
+++ b/src/third_party/mozjs-45/include/js/HashTable.h
@@ -13,6 +13,7 @@
#include "mozilla/Casting.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/Move.h"
+#include "mozilla/Opaque.h"
#include "mozilla/PodOperations.h"
#include "mozilla/ReentrancyGuard.h"
#include "mozilla/TemplateLib.h"
@@ -33,6 +34,8 @@ namespace detail {
/*****************************************************************************/
+using Generation = mozilla::Opaque<uint64_t>;
+
// A JS-friendly, STL-like container providing a hash-based map from keys to
// values. In particular, HashMap calls constructors and destructors of all
// objects added so non-PODs may be used safely.
@@ -207,7 +210,9 @@ class HashMap
// If |generation()| is the same before and after a HashMap operation,
// pointers into the table remain valid.
- uint32_t generation() const { return impl.generation(); }
+ Generation generation() const {
+ return impl.generation();
+ }
/************************************************** Shorthand operations */
@@ -443,7 +448,9 @@ class HashSet
// If |generation()| is the same before and after a HashSet operation,
// pointers into the table remain valid.
- uint32_t generation() const { return impl.generation(); }
+ Generation generation() const {
+ return impl.generation();
+ }
/************************************************** Shorthand operations */
@@ -799,7 +806,7 @@ class HashTable : private AllocPolicy
Entry* entry_;
#ifdef JS_DEBUG
const HashTable* table_;
- uint32_t generation;
+ Generation generation;
#endif
protected:
@@ -907,7 +914,7 @@ class HashTable : private AllocPolicy
#ifdef JS_DEBUG
const HashTable* table_;
uint64_t mutationCount;
- uint32_t generation;
+ Generation generation;
bool validEntry;
#endif
@@ -1056,9 +1063,9 @@ class HashTable : private AllocPolicy
static const size_t CAP_BITS = 30;
public:
- Entry* table; // entry storage
- uint32_t gen:24; // entry storage generation number
- uint32_t hashShift:8; // multiplicative hash shift
+ uint64_t gen:56; // entry storage generation number
+ uint64_t hashShift:8; // multiplicative hash shift
+ Entry* table; // entry storage
uint32_t entryCount; // number of entries in table
uint32_t removedCount; // removed entry sentinels in table
@@ -1155,9 +1162,9 @@ class HashTable : private AllocPolicy
public:
explicit HashTable(AllocPolicy ap)
: AllocPolicy(ap)
- , table(nullptr)
, gen(0)
, hashShift(sHashBits)
+ , table(nullptr)
, entryCount(0)
, removedCount(0)
#ifdef JS_DEBUG
@@ -1596,10 +1603,10 @@ class HashTable : private AllocPolicy
return JS_BIT(sHashBits - hashShift);
}
- uint32_t generation() const
+ Generation generation() const
{
MOZ_ASSERT(table);
- return gen;
+ return Generation(gen);
}
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
diff --git a/src/third_party/mozjs-45/include/js/HeapAPI.h b/src/third_party/mozjs-45/include/js/HeapAPI.h
index ba9fcbcf0ce..7f97d028e7a 100644
--- a/src/third_party/mozjs-45/include/js/HeapAPI.h
+++ b/src/third_party/mozjs-45/include/js/HeapAPI.h
@@ -401,7 +401,7 @@ IsIncrementalBarrierNeededOnTenuredGCThing(JS::shadow::Runtime* rt, const JS::GC
{
MOZ_ASSERT(thing);
MOZ_ASSERT(!js::gc::IsInsideNursery(thing.asCell()));
- if (rt->isHeapBusy())
+ if (rt->isHeapCollecting())
return false;
JS::Zone* zone = JS::GetTenuredGCThingZone(thing);
return JS::shadow::Zone::asShadowZone(zone)->needsIncrementalBarrier();
diff --git a/src/third_party/mozjs-45/include/js/Utility.h b/src/third_party/mozjs-45/include/js/Utility.h
index d62e62e42dd..318b80298cc 100644
--- a/src/third_party/mozjs-45/include/js/Utility.h
+++ b/src/third_party/mozjs-45/include/js/Utility.h
@@ -34,22 +34,6 @@ namespace mozilla {}
/* The private JS engine namespace. */
namespace js {}
-/*
- * Patterns used by SpiderMonkey to overwrite unused memory. If you are
- * accessing an object with one of these pattern, you probably have a dangling
- * pointer.
- */
-#define JS_FRESH_NURSERY_PATTERN 0x2F
-#define JS_SWEPT_NURSERY_PATTERN 0x2B
-#define JS_ALLOCATED_NURSERY_PATTERN 0x2D
-#define JS_FRESH_TENURED_PATTERN 0x4F
-#define JS_MOVED_TENURED_PATTERN 0x49
-#define JS_SWEPT_TENURED_PATTERN 0x4B
-#define JS_ALLOCATED_TENURED_PATTERN 0x4D
-#define JS_EMPTY_STOREBUFFER_PATTERN 0x1B
-#define JS_SWEPT_CODE_PATTERN 0x3B
-#define JS_SWEPT_FRAME_PATTERN 0x5B
-
#define JS_STATIC_ASSERT(cond) static_assert(cond, "JS_STATIC_ASSERT")
#define JS_STATIC_ASSERT_IF(cond, expr) MOZ_STATIC_ASSERT_IF(cond, expr, "JS_STATIC_ASSERT_IF")
diff --git a/src/third_party/mozjs-45/include/jsapi.h b/src/third_party/mozjs-45/include/jsapi.h
index 2fa1b9f370c..358d09b1ef0 100644
--- a/src/third_party/mozjs-45/include/jsapi.h
+++ b/src/third_party/mozjs-45/include/jsapi.h
@@ -307,10 +307,6 @@ class MOZ_RAII AutoHashMapRooter : protected AutoGCRooter
return map.sizeOfIncludingThis(mallocSizeOf);
}
- uint32_t generation() const {
- return map.generation();
- }
-
/************************************************** Shorthand operations */
bool has(const Lookup& l) const {
@@ -422,10 +418,6 @@ class MOZ_RAII AutoHashSetRooter : protected AutoGCRooter
return set.sizeOfIncludingThis(mallocSizeOf);
}
- uint32_t generation() const {
- return set.generation();
- }
-
/************************************************** Shorthand operations */
bool has(const Lookup& l) const {
@@ -4461,7 +4453,7 @@ class MOZ_RAII JSAutoByteString
}
~JSAutoByteString() {
- js_free(mBytes);
+ JS_free(nullptr, mBytes);
}
/* Take ownership of the given byte array. */
@@ -4506,7 +4498,7 @@ class MOZ_RAII JSAutoByteString
}
private:
- char* mBytes;
+ char* mBytes;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
/* Copy and assignment are not supported. */
@@ -4768,26 +4760,43 @@ JS_ReportAllocationOverflow(JSContext* cx);
class JSErrorReport
{
+ // Offending source line without final '\n'.
+ const char16_t* linebuf_;
+
+ // Number of chars in linebuf_. Does not include trailing '\0'.
+ size_t linebufLength_;
+
+ // The 0-based offset of error token in linebuf_.
+ size_t tokenOffset_;
+
public:
JSErrorReport()
- : filename(nullptr), lineno(0), column(0), isMuted(false), linebuf(nullptr),
- tokenptr(nullptr), uclinebuf(nullptr), uctokenptr(nullptr), flags(0), errorNumber(0),
- ucmessage(nullptr), messageArgs(nullptr), exnType(0)
+ : linebuf_(nullptr), linebufLength_(0), tokenOffset_(0),
+ filename(nullptr), lineno(0), column(0), isMuted(false),
+ flags(0), errorNumber(0), ucmessage(nullptr),
+ messageArgs(nullptr), exnType(0)
{}
const char* filename; /* source file name, URL, etc., or null */
unsigned lineno; /* source line number */
unsigned column; /* zero-based column index in line */
bool isMuted; /* See the comment in ReadOnlyCompileOptions. */
- const char* linebuf; /* offending source line without final \n */
- const char* tokenptr; /* pointer to error token in linebuf */
- const char16_t* uclinebuf; /* unicode (original) line buffer */
- const char16_t* uctokenptr; /* unicode (original) token pointer */
unsigned flags; /* error/warning, etc. */
unsigned errorNumber; /* the error number, e.g. see js.msg */
const char16_t* ucmessage; /* the (default) error message */
const char16_t** messageArgs; /* arguments for the error message */
int16_t exnType; /* One of the JSExnType constants */
+
+ const char16_t* linebuf() const {
+ return linebuf_;
+ }
+ size_t linebufLength() const {
+ return linebufLength_;
+ }
+ size_t tokenOffset() const {
+ return tokenOffset_;
+ }
+ void initLinebuf(const char16_t* linebuf, size_t linebufLength, size_t tokenOffset);
};
/*
diff --git a/src/third_party/mozjs-45/include/jsfriendapi.h b/src/third_party/mozjs-45/include/jsfriendapi.h
index fe3f3dfd577..53518d3712b 100644
--- a/src/third_party/mozjs-45/include/jsfriendapi.h
+++ b/src/third_party/mozjs-45/include/jsfriendapi.h
@@ -1209,7 +1209,7 @@ NukeCrossCompartmentWrappers(JSContext* cx,
* * If DoesntShadowUnique is returned then the slot at listBaseExpandoSlot
* should contain a private pointer to a ExpandoAndGeneration, which contains
* a JS::Value that should either be undefined or point to an expando object,
- * and a uint32 value. If that value changes then the IC for getting a
+ * and a uint64 value. If that value changes then the IC for getting a
* property will be invalidated.
* * If Shadows is returned, that means the property is an own property of the
* proxy but doesn't live on the expando object.
@@ -1238,7 +1238,7 @@ struct ExpandoAndGeneration {
}
JS::Heap<JS::Value> expando;
- uint32_t generation;
+ uint64_t generation;
};
typedef enum DOMProxyShadowsResult {
diff --git a/src/third_party/mozjs-45/include/mozilla/Opaque.h b/src/third_party/mozjs-45/include/mozilla/Opaque.h
new file mode 100644
index 00000000000..d7239ee7c23
--- /dev/null
+++ b/src/third_party/mozjs-45/include/mozilla/Opaque.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* An opaque integral type supporting only comparison operators. */
+
+#ifndef mozilla_Opaque_h
+#define mozilla_Opaque_h
+
+#include "mozilla/TypeTraits.h"
+
+namespace mozilla {
+
+/**
+ * Opaque<T> is a replacement for integral T in cases where only comparisons
+ * must be supported, and it's desirable to prevent accidental dependency on
+ * exact values.
+ */
+template<typename T>
+class Opaque final
+{
+ static_assert(mozilla::IsIntegral<T>::value,
+ "mozilla::Opaque only supports integral types");
+
+ T mValue;
+
+public:
+ Opaque() {}
+ explicit Opaque(T aValue) : mValue(aValue) {}
+
+ bool operator==(const Opaque& aOther) const {
+ return mValue == aOther.mValue;
+ }
+
+ bool operator!=(const Opaque& aOther) const {
+ return !(*this == aOther);
+ }
+};
+
+} // namespace mozilla
+
+#endif /* mozilla_Opaque_h */
diff --git a/src/third_party/mozjs-45/platform/aarch64/linux/build/js-confdefs.h b/src/third_party/mozjs-45/platform/aarch64/linux/build/js-confdefs.h
index 711eea8f23a..c3242d7314e 100644
--- a/src/third_party/mozjs-45/platform/aarch64/linux/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/aarch64/linux/build/js-confdefs.h
@@ -74,10 +74,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.2"
-#define MOZILLA_VERSION_U 45.0.2
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/aarch64/linux/include/js-config.h b/src/third_party/mozjs-45/platform/aarch64/linux/include/js-config.h
index 92178def938..7f8b392ce1f 100644
--- a/src/third_party/mozjs-45/platform/aarch64/linux/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/aarch64/linux/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/ppc64le/linux/build/js-confdefs.h b/src/third_party/mozjs-45/platform/ppc64le/linux/build/js-confdefs.h
index 3f04eaeebac..c3242d7314e 100644
--- a/src/third_party/mozjs-45/platform/ppc64le/linux/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/ppc64le/linux/build/js-confdefs.h
@@ -74,10 +74,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/ppc64le/linux/include/js-config.h b/src/third_party/mozjs-45/platform/ppc64le/linux/include/js-config.h
index 92178def938..7f8b392ce1f 100644
--- a/src/third_party/mozjs-45/platform/ppc64le/linux/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/ppc64le/linux/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/s390x/linux/build/js-confdefs.h b/src/third_party/mozjs-45/platform/s390x/linux/build/js-confdefs.h
index 02d7d5753f4..a295325228b 100644
--- a/src/third_party/mozjs-45/platform/s390x/linux/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/s390x/linux/build/js-confdefs.h
@@ -75,10 +75,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/s390x/linux/include/js-config.h b/src/third_party/mozjs-45/platform/s390x/linux/include/js-config.h
index 92178def938..7f8b392ce1f 100644
--- a/src/third_party/mozjs-45/platform/s390x/linux/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/s390x/linux/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/freebsd/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/freebsd/build/js-confdefs.h
index 7c3d52f87c4..552fab0f313 100644
--- a/src/third_party/mozjs-45/platform/x86_64/freebsd/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/freebsd/build/js-confdefs.h
@@ -69,10 +69,10 @@
#define MALLOC_H <malloc_np.h>
#define MALLOC_USABLE_SIZE_CONST_PTR const
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.2"
-#define MOZILLA_VERSION_U 45.0.2
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/freebsd/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/freebsd/include/js-config.h
index c7e64b5793e..174c0c99932 100644
--- a/src/third_party/mozjs-45/platform/x86_64/freebsd/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/freebsd/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/linux/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/linux/build/js-confdefs.h
index b7ba4aeb59e..44dcea5229b 100644
--- a/src/third_party/mozjs-45/platform/x86_64/linux/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/linux/build/js-confdefs.h
@@ -79,10 +79,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/linux/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/linux/include/js-config.h
index 92178def938..7f8b392ce1f 100644
--- a/src/third_party/mozjs-45/platform/x86_64/linux/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/linux/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/openbsd/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/openbsd/build/js-confdefs.h
index 53fc6de24c8..4e59d6bbd56 100644
--- a/src/third_party/mozjs-45/platform/x86_64/openbsd/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/openbsd/build/js-confdefs.h
@@ -67,10 +67,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR const
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.2"
-#define MOZILLA_VERSION_U 45.0.2
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so.1.0"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/openbsd/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/openbsd/include/js-config.h
index 25053876c3a..706dd192315 100644
--- a/src/third_party/mozjs-45/platform/x86_64/openbsd/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/openbsd/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/osx/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/osx/build/js-confdefs.h
index c3cd87d982b..394ca10e687 100644
--- a/src/third_party/mozjs-45/platform/x86_64/osx/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/osx/build/js-confdefs.h
@@ -62,10 +62,10 @@
#define MALLOC_H <malloc/malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR const
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".dylib"
#define MOZ_MEMORY 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/osx/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/osx/include/js-config.h
index c7e64b5793e..174c0c99932 100644
--- a/src/third_party/mozjs-45/platform/x86_64/osx/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/osx/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/solaris/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/solaris/build/js-confdefs.h
index b1c3865d4d7..f1d5db6d21e 100644
--- a/src/third_party/mozjs-45/platform/x86_64/solaris/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/solaris/build/js-confdefs.h
@@ -69,10 +69,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR const
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".so"
#define MOZ_GLUE_IN_PROGRAM 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/solaris/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/solaris/include/js-config.h
index 3988ff21079..875067318ca 100644
--- a/src/third_party/mozjs-45/platform/x86_64/solaris/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/solaris/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */
diff --git a/src/third_party/mozjs-45/platform/x86_64/windows/build/js-confdefs.h b/src/third_party/mozjs-45/platform/x86_64/windows/build/js-confdefs.h
index 888b75682f8..f36c7d92705 100644
--- a/src/third_party/mozjs-45/platform/x86_64/windows/build/js-confdefs.h
+++ b/src/third_party/mozjs-45/platform/x86_64/windows/build/js-confdefs.h
@@ -30,10 +30,10 @@
#define MALLOC_H <malloc.h>
#define MALLOC_USABLE_SIZE_CONST_PTR const
#define MOZILLA_UAVERSION "45.0"
-#define MOZILLA_VERSION "45.0.1"
-#define MOZILLA_VERSION_U 45.0.1
+#define MOZILLA_VERSION "45.4.0"
+#define MOZILLA_VERSION_U 45.4.0
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#define MOZ_DEBUG_SYMBOLS 1
#define MOZ_DLL_SUFFIX ".dll"
#define MOZ_MEMORY 1
diff --git a/src/third_party/mozjs-45/platform/x86_64/windows/include/js-config.h b/src/third_party/mozjs-45/platform/x86_64/windows/include/js-config.h
index cd2b8fc2e53..ad9f840ee22 100644
--- a/src/third_party/mozjs-45/platform/x86_64/windows/include/js-config.h
+++ b/src/third_party/mozjs-45/platform/x86_64/windows/include/js-config.h
@@ -54,6 +54,6 @@
/* MOZILLA JSAPI version number components */
#define MOZJS_MAJOR_VERSION 45
-#define MOZJS_MINOR_VERSION 0
+#define MOZJS_MINOR_VERSION 4
#endif /* js_config_h */