From b2d8f369693c4eda8651446eaa63bbda15d14d8f Mon Sep 17 00:00:00 2001 From: David Bailes Date: Wed, 10 May 2017 09:06:34 +0100 Subject: [PATCH 01/85] Fix for bugs in keyboard clip commands due to rounding errors When When two clips are immediately next to each other, the GetEndTime() of the first clip and the GetStartTime() of the second clip may not be exactly equal due to rounding errors. The existing code assumed they were equal, and this lead to the wrong clip boundaries or clips being found. There are a number of ways of fixing this which could be explored. The current solution involves changing only the code for the keyboard interaction with clips. The fix: 1. The test used for two clips being immediately next to each other is that GetEndSample() on the first clip is equal to to GetStartSample() on the second clip. 2. When searching for the start/end times of clips, the cases where GetEndTime() and GetStartTime() are not equal are taken into account. This is done in the two functions AudacityProject::AdjustForFindingStartTimes and AudacityProject::AdjustForFindingEndTimes. --- src/Menus.cpp | 114 ++++++++++++++++++++++++++++++++-------------- src/Menus.h | 2 + src/Project.h | 1 + src/WaveTrack.cpp | 20 ++++++-- 4 files changed, 100 insertions(+), 37 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 006cc9997..6b2f8a20c 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -5524,6 +5524,8 @@ AudacityProject::FoundClip AudacityProject::FindNextClip(const WaveTrack* wt, do result.waveTrack = wt; const auto clips = wt->SortedClipArray(); + t0 = AdjustForFindingStartTimes(clips, t0); + auto p = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { return clip->GetStartTime() == t0; }); if (p != clips.end() && (*p)->GetEndTime() > t1) { @@ -5552,6 +5554,8 @@ AudacityProject::FoundClip AudacityProject::FindPrevClip(const WaveTrack* wt, do result.waveTrack = wt; const auto clips = wt->SortedClipArray(); + t0 = AdjustForFindingStartTimes(clips, t0); + auto p = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { return clip->GetStartTime() == t0; }); if (p != clips.end() && (*p)->GetEndTime() < t1) { @@ -6527,27 +6531,19 @@ AudacityProject::FoundClipBoundary AudacityProject::FindNextClipBoundary(const W { AudacityProject::FoundClipBoundary result{}; result.waveTrack = wt; - const auto clips = wt->SortedClipArray(); + double timeStart = AdjustForFindingStartTimes(clips, time); + double timeEnd = AdjustForFindingEndTimes(clips, time); + auto pStart = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { - return clip->GetStartTime() > time; }); + return clip->GetStartTime() > timeStart; }); auto pEnd = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { - return clip->GetEndTime() > time; }); + return clip->GetEndTime() > timeEnd; }); if (pStart != clips.end() && pEnd != clips.end()) { - if ((*pStart)->GetStartTime() < (*pEnd)->GetEndTime()) { - result.nFound = 1; - result.time = (*pStart)->GetStartTime(); - result.index1 = std::distance(clips.begin(), pStart); - result.clipStart1 = true; - } - else if ((*pStart)->GetStartTime() > (*pEnd)->GetEndTime()) { - result.nFound = 1; - result.time = (*pEnd)->GetEndTime(); - result.index1 = std::distance(clips.begin(), pEnd); - result.clipStart1 = false; - } - else { // both the end of one clip and the start of the next clip + if ((*pStart)->GetStartSample() == (*pEnd)->GetEndSample()) { + // boundary between two clips which are immediately next to each other. Tested for + // using samples rather than times because of rounding errors result.nFound = 2; result.time = (*pEnd)->GetEndTime(); result.index1 = std::distance(clips.begin(), pEnd); @@ -6555,6 +6551,18 @@ AudacityProject::FoundClipBoundary AudacityProject::FindNextClipBoundary(const W result.index2 = std::distance(clips.begin(), pStart); result.clipStart2 = true; } + else if ((*pStart)->GetStartTime() < (*pEnd)->GetEndTime()) { + result.nFound = 1; + result.time = (*pStart)->GetStartTime(); + result.index1 = std::distance(clips.begin(), pStart); + result.clipStart1 = true; + } + else { + result.nFound = 1; + result.time = (*pEnd)->GetEndTime(); + result.index1 = std::distance(clips.begin(), pEnd); + result.clipStart1 = false; + } } else if (pEnd != clips.end()) { result.nFound = 1; @@ -6570,34 +6578,38 @@ AudacityProject::FoundClipBoundary AudacityProject::FindPrevClipBoundary(const W { AudacityProject::FoundClipBoundary result{}; result.waveTrack = wt; - const auto clips = wt->SortedClipArray(); + double timeStart = AdjustForFindingStartTimes(clips, time); + double timeEnd = AdjustForFindingEndTimes(clips, time); + auto pStart = std::find_if(clips.rbegin(), clips.rend(), [&] (const WaveClip* const& clip) { - return clip->GetStartTime() < time; }); + return clip->GetStartTime() < timeStart; }); auto pEnd = std::find_if(clips.rbegin(), clips.rend(), [&] (const WaveClip* const& clip) { - return clip->GetEndTime() < time; }); + return clip->GetEndTime() < timeEnd; }); if (pStart != clips.rend() && pEnd != clips.rend()) { - if ((*pStart)->GetStartTime() > (*pEnd)->GetEndTime()) { - result.nFound = 1; - result.time = (*pStart)->GetStartTime(); - result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pStart); - result.clipStart1 = true; - } - else if ((*pStart)->GetStartTime() < (*pEnd)->GetEndTime()) { - result.nFound = 1; - result.time = (*pEnd)->GetEndTime(); - result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pEnd); - result.clipStart1 = false; - } - else { - result.nFound = 2; // both the start of one clip and the end of the previous clip + if ((*pStart)->GetStartSample() == (*pEnd)->GetEndSample()) { + // boundary between two clips which are immediately next to each other. Tested for + // using samples rather than times because of rounding errors + result.nFound = 2; result.time = (*pStart)->GetStartTime(); result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pStart); result.clipStart1 = true; result.index2 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pEnd); result.clipStart2 = false; } + else if ((*pStart)->GetStartTime() > (*pEnd)->GetEndTime()) { + result.nFound = 1; + result.time = (*pStart)->GetStartTime(); + result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pStart); + result.clipStart1 = true; + } + else { + result.nFound = 1; + result.time = (*pEnd)->GetEndTime(); + result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pEnd); + result.clipStart1 = false; + } } else if (pStart != clips.rend()) { result.nFound = 1; @@ -6609,6 +6621,42 @@ AudacityProject::FoundClipBoundary AudacityProject::FindPrevClipBoundary(const W return result; } +// When two clips are immediately next to each other, the GetEndTime() of the first clip and the +// GetStartTime() of the second clip may not be exactly equal due to rounding errors. When searching +// for the next/prev start time from a given time, the following function adjusts that given time if +// necessary to take this into account. If the given time is the end time of the first of two clips which +// are next to each other, then the given time is changed to the start time of the second clip. +// This ensures that the correct next/prev start time is found. +double AudacityProject::AdjustForFindingStartTimes(const std::vector & clips, double time) +{ + auto q = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { + return clip->GetEndTime() == time; }); + if (q <= clips.end() - 2 && + (*q)->GetEndSample() == (*(q+1))->GetStartSample()) { + time = (*(q+1))->GetStartTime(); + } + + return time; +} + +// When two clips are immediately next to each other, the GetEndTime() of the first clip and the +// GetStartTime() of the second clip may not be exactly equal due to rounding errors. When searching +// for the next/prev end time from a given time, the following function adjusts that given time if +// necessary to take this into account. If the given time is the start time of the second of two clips which +// are next to each other, then the given time is changed to the end time of the first clip. +// This ensures that the correct next/prev end time is found. +double AudacityProject::AdjustForFindingEndTimes(const std::vector& clips, double time) +{ + auto q = std::find_if(clips.begin(), clips.end(), [&] (const WaveClip* const& clip) { + return clip->GetStartTime() == time; }); + if (q != clips.end() && q != clips.begin() && + (*(q - 1))->GetEndSample() == (*q)->GetStartSample()) { + time = (*(q-1))->GetEndTime(); + } + + return time; +} + int AudacityProject::FindClipBoundaries(double time, bool next, std::vector& finalResults) { const TrackList* tracks = GetTracks(); diff --git a/src/Menus.h b/src/Menus.h index 9ef8871dd..5aa72e64d 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -411,6 +411,8 @@ typedef struct FoundClipBoundary { } FoundClipBoundary; FoundClipBoundary FindNextClipBoundary(const WaveTrack* wt, double time); FoundClipBoundary FindPrevClipBoundary(const WaveTrack* wt, double time); +double AdjustForFindingStartTimes(const std::vector& clips, double time); +double AdjustForFindingEndTimes(const std::vector& clips, double time); int FindClipBoundaries(double time, bool next, std::vector& results); void OnCursorNextClipBoundary(); void OnCursorPrevClipBoundary(); diff --git a/src/Project.h b/src/Project.h index 1e445646c..e91af0eed 100644 --- a/src/Project.h +++ b/src/Project.h @@ -100,6 +100,7 @@ class UndoManager; enum class UndoPush : unsigned char; class Track; +class WaveClip; AudacityProject *CreateNewAudacityProject(); AUDACITY_DLL_API AudacityProject *GetActiveProject(); diff --git a/src/WaveTrack.cpp b/src/WaveTrack.cpp index 21decc67c..edbd46f5d 100644 --- a/src/WaveTrack.cpp +++ b/src/WaveTrack.cpp @@ -2212,15 +2212,27 @@ WaveClip* WaveTrack::GetClipAtSample(sampleCount sample) return NULL; } +// When the time is both the end of a clip and the start of the next clip, the +// latter clip is returned. WaveClip* WaveTrack::GetClipAtTime(double time) { - // When the time is both the end of a clip and the start of the next clip, the - // latter clip is returned. + const auto clips = SortedClipArray(); - auto result = std::find_if(clips.rbegin(), clips.rend(), [&] (WaveClip* const& clip) { + auto p = std::find_if(clips.rbegin(), clips.rend(), [&] (WaveClip* const& clip) { return time >= clip->GetStartTime() && time <= clip->GetEndTime(); }); - return result != clips.rend() ? *result : nullptr; + // When two clips are immediately next to each other, the GetEndTime() of the first clip + // and the GetStartTime() of the second clip may not be exactly equal due to rounding errors. + // If "time" is the end time of the first of two such clips, and the end time is slightly + // less than the start time of the second clip, then the first rather than the + // second clip is found by the above code. So correct this. + if (p != clips.rend() & p != clips.rbegin() && + time == (*p)->GetEndTime() && + (*p)->GetEndSample() == (*(p-1))->GetStartSample()) { + p--; + } + + return p != clips.rend() ? *p : nullptr; } Envelope* WaveTrack::GetEnvelopeAtX(int xcoord) From 6c0e8c7d868c050339ddabfbe171edd78da0d8e3 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Wed, 10 May 2017 13:36:42 +0100 Subject: [PATCH 02/85] Change default setting of "move selection with tracks" to be "off" --- src/Menus.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 6b2f8a20c..c3cc44626 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -999,7 +999,7 @@ void AudacityProject::CreateMenusAndCommands() c->AddSeparator(); c->AddCheck(wxT("MoveSelectionWithTracks"), _("&Move Selection with Tracks (on/off)"), FN(OnMoveSelectionWithTracks), - gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), 1L), + gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), 0L), AlwaysEnabledFlag, AlwaysEnabledFlag); c->EndSubMenu(); @@ -6940,7 +6940,7 @@ void AudacityProject::OnAlignNoSync(int index) void AudacityProject::OnAlign(int index) { bool bMoveWith; - gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), &bMoveWith, true); + gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), &bMoveWith, false); HandleAlign(index, bMoveWith); } /* @@ -7446,7 +7446,7 @@ int AudacityProject::DoAddLabel(const SelectedRegion ®ion, bool preserveFocus void AudacityProject::OnMoveSelectionWithTracks() { bool bMoveWith; - gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), &bMoveWith, true); + gPrefs->Read(wxT("/GUI/MoveSelectionWithTracks"), &bMoveWith, false); gPrefs->Write(wxT("/GUI/MoveSelectionWithTracks"), !bMoveWith); gPrefs->Flush(); From 495755b074baddf1179102dd0d7fd5c20e9d1277 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Thu, 11 May 2017 11:42:56 +0100 Subject: [PATCH 03/85] Fix for keyboard clip commands Fix bug in AudacityProject::AdjustForFindingStartTimes. Bug: When there is 0 or 1 clips, q - 2 is before the begin() of the vector, and caused crash. Fix: split the test into two tests. --- src/Menus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index c3cc44626..3fc50d95f 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -6631,7 +6631,7 @@ double AudacityProject::AdjustForFindingStartTimes(const std::vectorGetEndTime() == time; }); - if (q <= clips.end() - 2 && + if (q != clips.end() && q + 1 != clips.end() && (*q)->GetEndSample() == (*(q+1))->GetStartSample()) { time = (*(q+1))->GetStartTime(); } From ddb8db8dd7b6f0fc5701b95a94ce3a95b62183cb Mon Sep 17 00:00:00 2001 From: David Bailes Date: Thu, 11 May 2017 13:01:42 +0100 Subject: [PATCH 04/85] Modify the screen reader messages of some of the keyboard clip commands As suggested by Robert, add the word clip/clips to make the messages less confusing and noticeably different from the next/prev label messages. --- src/Menus.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 3fc50d95f..7f21ae22a 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -5681,10 +5681,10 @@ void AudacityProject::OnSelectClip(bool next) message += temp; } - if (result.waveTrack->GetNumClips() > 1 || nTracksSearched == 1) { - temp.Printf(wxT("%d %s %d "), result.index + 1, _("of"), result.waveTrack->GetNumClips()); - message += temp; - } + temp.Printf(wxT("%d %s %d %s "), result.index + 1, _("of"), result.waveTrack->GetNumClips(), + result.waveTrack->GetNumClips() == 1 ? _("clip") : _("clips")); + message += temp; + message += wxT(", "); } mTrackPanel->MessageForScreenReader(message); @@ -6745,10 +6745,11 @@ wxString AudacityProject::ClipBoundaryMessage(int nTracksSearched, const std::ve message += temp; } message += (result.clipStart1 ? _("start") : _("end")) + wxT(" "); - if (result.waveTrack->GetNumClips() > 1 ) { - temp.Printf(wxT("%d %s %d "), result.index1 + 1, _("of"), result.waveTrack->GetNumClips()); - message += temp; - } + + temp.Printf(wxT("%d %s %d %s "), result.index1 + 1, _("of"), result.waveTrack->GetNumClips(), + result.waveTrack->GetNumClips() == 1 ? _("clip") : _("clips")); + message += temp; + if (result.nFound == 2) { temp.Printf(wxT("%s %s %d "), _("and"), result.clipStart2 ? _("start") : _("end"), result.index2 + 1); From 35fe313f307ca9866378085fb31c25d63e8e73c5 Mon Sep 17 00:00:00 2001 From: James Crook Date: Thu, 11 May 2017 22:36:55 +0100 Subject: [PATCH 05/85] Smarter SelectAllIfNone Now if there is a time selection and no tracks selected, then just select all the tracks, preserving the time selection. This helps in the case a user has made a time selection, e.g. with selection toolbar, and then clicked on track panel, losing the selection of tracks but preserving the time selection. I also shortened some repeated cut-and-pasted code. --- src/Menus.cpp | 53 +++++++++++++++++++++++++++++-------------------- src/Menus.h | 1 + src/Project.cpp | 17 +++------------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 7f21ae22a..875b56525 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2082,7 +2082,7 @@ void AudacityProject::SelectAllIfNone() auto flags = GetUpdateFlags(); if(!(flags & TracksSelectedFlag) || (mViewInfo.selectedRegion.isPoint())) - OnSelectAll(); + OnSelectSomething(); } void AudacityProject::StopIfPaused() @@ -5374,17 +5374,27 @@ void AudacityProject::OnSplitNew() RedrawProject(); } +void AudacityProject::OnSelectSomething() +{ + if( mViewInfo.selectedRegion.isPoint() ) + OnSelectAll(); + else + OnSelectAllTracks(); +} + void AudacityProject::OnSelectAll() { - TrackListIterator iter(GetTracks()); - - Track *t = iter.First(); - while (t) { - t->SetSelected(true); - t = iter.Next(); - } mViewInfo.selectedRegion.setTimes( mTracks->GetMinOffset(), mTracks->GetEndTime()); + OnSelectAllTracks(); +} + +void AudacityProject::OnSelectAllTracks() +{ + TrackListIterator iter(GetTracks()); + for (Track *t = iter.First(); t; t = iter.Next()) { + t->SetSelected(true); + } ModifyState(false); @@ -5393,6 +5403,19 @@ void AudacityProject::OnSelectAll() mMixerBoard->Refresh(false); } +void AudacityProject::SelectNone() +{ + TrackListIterator iter(GetTracks()); + Track *t = iter.First(); + while (t) { + t->SetSelected(false); + t = iter.Next(); + } + mTrackPanel->Refresh(false); + if (mMixerBoard) + mMixerBoard->Refresh(false); +} + void AudacityProject::OnSelectNone() { mViewInfo.selectedRegion.collapseToT0(); @@ -5723,20 +5746,6 @@ void AudacityProject::OnSelectSyncLockSel() mMixerBoard->Refresh(false); } -void AudacityProject::OnSelectAllTracks() -{ - TrackListIterator iter(GetTracks()); - for (Track *t = iter.First(); t; t = iter.Next()) { - t->SetSelected(true); - } - - ModifyState(false); - - mTrackPanel->Refresh(false); - if (mMixerBoard) - mMixerBoard->Refresh(false); -} - // // View Menu // diff --git a/src/Menus.h b/src/Menus.h index 5aa72e64d..379b919c5 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -276,6 +276,7 @@ void OnJoinLabels(); void OnDisjoinLabels(); void OnSelectAll(); +void OnSelectSomething(); void OnSelectNone(); #ifdef EXPERIMENTAL_SPECTRAL_EDITING void OnToggleSpectralSelection(); diff --git a/src/Project.cpp b/src/Project.cpp index 8b712bfd1..164b4237c 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -2311,7 +2311,9 @@ bool AudacityProject::TryToMakeActionAllowed if( (MissingFlags & ~( TimeSelectedFlag | WaveTracksSelectedFlag)) ) return false; - OnSelectAll(); + // This was 'OnSelectAll'. Changing it to OnSelectSomething means if + // selecting all tracks is enough, we just do that. + OnSelectSomething(); flags = GetUpdateFlags(); bAllowed = ((flags & mask) == (flagsRqd & mask)); return bAllowed; @@ -4607,19 +4609,6 @@ void AudacityProject::Clear() RedrawProject(); } -void AudacityProject::SelectNone() -{ - TrackListIterator iter(GetTracks()); - Track *t = iter.First(); - while (t) { - t->SetSelected(false); - t = iter.Next(); - } - mTrackPanel->Refresh(false); - if (mMixerBoard) - mMixerBoard->Refresh(false); -} - // Utility function called by other zoom methods void AudacityProject::Zoom(double level) { From e66028de0a06f9e6fe8f22b4d076605ab5bdcc86 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 12 May 2017 15:58:49 -0400 Subject: [PATCH 06/85] Eliminate "Average RMS" redundancy in messages from Contrast... ... also gathered various formatting into some routines. Should we regularize the messages further? That is, consistently put "dB" before or after "RMS" Also added more i18n-hint comments --- src/effects/Contrast.cpp | 102 +++++++++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/src/effects/Contrast.cpp b/src/effects/Contrast.cpp index 55ffd0bb9..9bf8242a3 100644 --- a/src/effects/Contrast.cpp +++ b/src/effects/Contrast.cpp @@ -177,6 +177,7 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id, S.SetBorder(5); S.StartHorizontalLay(wxCENTER, false); { + /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ S.AddTitle(_("Contrast Analyzer, for measuring RMS volume differences between two selections of audio.")); } S.EndHorizontalLay(); @@ -362,6 +363,67 @@ void ContrastDialog::OnGetBackground(wxCommandEvent & /*event*/) results(); } +namespace { + // PRL: I gathered formatting into these functions, and eliminated some + // repetitions, and removed the redundant word "Average" as applied to RMS. + // Should these variations in formats be collapsed further? + + // Pass nullptr when value is not yet defined + wxString FormatRMSMessage( float *pValue ) + { + + /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ + wxString format0{ _("RMS = %s.") }; + + /* i18n-hint: dB abbreviates decibels */ + wxString format1{ _("%s dB") }; + + wxString value; + + if ( pValue ) + if( fabs( *pValue ) != std::numeric_limits::infinity() ) { + auto number = wxString::Format( _("%.2f"), *pValue ); + value = wxString::Format( format1, number ); + } + else + value = _("zero"); + else + value = wxString::Format( format1, "" ); + + return wxString::Format( format0, value ); + } + + wxString FormatDifference( float diffdB ) + { + if( diffdB != diffdB ) // test for NaN, reliant on IEEE implementation + return _("indeterminate"); + else { + if( diffdB != std::numeric_limits::infinity() ) + /* i18n-hint: dB abbreviates decibels */ + /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ + return wxString::Format(_("%.2f dB RMS"), diffdB); + else + /* i18n-hint: dB abbreviates decibels */ + return wxString::Format(_("Infinite dB difference")); + } + } + + wxString FormatDifferenceForExport( float diffdB ) + { + if( diffdB != diffdB ) //test for NaN, reliant on IEEE implementation + return _("Difference is indeterminate."); + else + if( fabs(diffdB) != std::numeric_limits::infinity() ) + /* i18n-hint: dB abbreviates decibels */ + /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ + return wxString::Format(_("Difference = %.2f RMS dB."), diffdB ); + else + /* i18n-hint: dB abbreviates decibels */ + /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ + return _("Difference = infinite RMS dB."); + } +} + void ContrastDialog::results() { mPassFailText->SetName(wxT("")); @@ -381,25 +443,17 @@ void ContrastDialog::results() mPassFailText->ChangeValue(_("Background higher than foreground")); } else if(diffdB > WCAG2_PASS) { + /* i18n-hint: WCAG abbreviates Web Content Accessibility Guidelines */ mPassFailText->ChangeValue(_("WCAG2 Pass")); } else { + /* i18n-hint: WCAG abbreviates Web Content Accessibility Guidelines */ mPassFailText->ChangeValue(_("WCAG2 Fail")); } /* i18n-hint: i.e. difference in loudness at the moment. */ mDiffText->SetName(_("Current difference")); - if( diffdB != diffdB ) { // test for NaN, reliant on IEEE implementation - mDiffText->ChangeValue(wxString::Format(_("indeterminate"))); - } - else { - if( diffdB != std::numeric_limits::infinity() ) { - mDiffText->ChangeValue(wxString::Format(_("%.2f dB Average RMS"), diffdB)); - } - else { - mDiffText->ChangeValue(wxString::Format(_("Infinite dB difference"))); - } - } + mDiffText->ChangeValue( FormatDifference( diffdB ) ); } if (mForegroundIsDefined) { @@ -459,6 +513,7 @@ void ContrastDialog::OnExport(wxCommandEvent & WXUNUSED(event)) } f.AddLine(wxT("===================================")); + /* i18n-hint: WCAG abbreviates Web Content Accessibility Guidelines */ f.AddLine(_("WCAG 2.0 Success Criteria 1.4.7 Contrast Results")); f.AddLine(wxT("")); f.AddLine(wxString::Format(_("Filename = %s."), project->GetFileName().c_str() )); @@ -474,13 +529,7 @@ void ContrastDialog::OnExport(wxCommandEvent & WXUNUSED(event)) m = (int)((t - h*3600)/60); s = t - h*3600.0 - m*60.0; f.AddLine(wxString::Format(_("Time ended = %2d hour(s), %2d minute(s), %.2f seconds."), h, m, s )); - if(mForegroundIsDefined) - if( fabs(foregrounddB) != std::numeric_limits::infinity() ) - f.AddLine(wxString::Format(_("Average RMS = %.2f dB."), foregrounddB )); - else - f.AddLine(wxString::Format(_("Average RMS = zero.") )); - else - f.AddLine(wxString::Format(_("Average RMS = dB."))); + f.AddLine( FormatRMSMessage( mForegroundIsDefined ? &foregrounddB : nullptr ) ); f.AddLine(wxT("")); f.AddLine(_("Background")); t = (float)mBackgroundStartT->GetValue(); @@ -493,23 +542,12 @@ void ContrastDialog::OnExport(wxCommandEvent & WXUNUSED(event)) m = (int)((t - h*3600)/60); s = t - h*3600.0 - m*60.0; f.AddLine(wxString::Format(_("Time ended = %2d hour(s), %2d minute(s), %.2f seconds."), h, m, s )); - if(mBackgroundIsDefined) - if( fabs(backgrounddB) != std::numeric_limits::infinity() ) - f.AddLine(wxString::Format(_("Average RMS = %.2f dB."), backgrounddB )); - else - f.AddLine(wxString::Format(_("Average RMS = zero.") )); - else - f.AddLine(wxString::Format(_("Average RMS = dB."))); + f.AddLine( FormatRMSMessage( mBackgroundIsDefined ? &backgrounddB : nullptr ) ); f.AddLine(wxT("")); f.AddLine(_("Results")); float diffdB = foregrounddB - backgrounddB; - if( diffdB != diffdB ) //test for NaN, reliant on IEEE implementation - f.AddLine(wxString::Format(_("Difference is indeterminate.") )); - else - if( fabs(diffdB) != std::numeric_limits::infinity() ) - f.AddLine(wxString::Format(_("Difference = %.2f Average RMS dB."), diffdB )); - else - f.AddLine(wxString::Format(_("Difference = infinite Average RMS dB."))); + + f.AddLine( FormatDifferenceForExport( diffdB ) ); if( diffdB > 20. ) f.AddLine(_("Success Criteria 1.4.7 of WCAG 2.0: Pass")); else From c42a111a42eba3831370575407fe141931fc5874 Mon Sep 17 00:00:00 2001 From: James Crook Date: Fri, 12 May 2017 22:40:14 +0100 Subject: [PATCH 07/85] Add accelerator keys for Ext-&Bar and Ext-Co&mmand --- src/Menus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 875b56525..58dc70a0f 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -1240,7 +1240,7 @@ void AudacityProject::CreateMenusAndCommands() // Ext-Bar Menu ///////////////////////////////////////////////////////////////////////////// - c->BeginMenu("Ext-Bar"); + c->BeginMenu("Ext-&Bar"); ////////////////////////////////////////////////////////////////////////// @@ -1399,7 +1399,7 @@ void AudacityProject::CreateMenusAndCommands() ///////////////////////////////////////////////////////////////////////////// c->SetDefaultFlags(AlwaysEnabledFlag, AlwaysEnabledFlag); - c->BeginMenu("Ext-Command"); + c->BeginMenu("Ext-Co&mmand"); c->AddGlobalCommand(wxT("PrevWindow"), _("Move backward thru active windows"), FN(PrevWindow), wxT("Alt+Shift+F6")); c->AddGlobalCommand(wxT("NextWindow"), _("Move forward thru active windows"), FN(NextWindow), wxT("Alt+F6")); From 0ac2d90d8a529ff515be45035f35a2d36780f0a5 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 13 May 2017 10:06:52 +0100 Subject: [PATCH 08/85] SelectAllIfNone now selects all time if none, and all tracks if none. This means you can now select just a time, and get all tracks selected, or some tracks, and get all time selected. One side effect of this is that if you select a label (only) and apply 'cut' you now just cut the label, rather than cutting all tracks. If you select a label and apply echo, you now get an error message, rather than applying echo to all tracks. --- src/Menus.cpp | 78 ++++++++++++++++++++++++++++++++++++++++----------- src/Menus.h | 8 +++++- 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 58dc70a0f..bf40705db 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -5374,33 +5374,77 @@ void AudacityProject::OnSplitNew() RedrawProject(); } -void AudacityProject::OnSelectSomething() +int AudacityProject::CountSelectedWaveTracks() { - if( mViewInfo.selectedRegion.isPoint() ) - OnSelectAll(); - else - OnSelectAllTracks(); + TrackListIterator iter(GetTracks()); + Track *t = iter.First(); + + int count =0; + for (Track *t = iter.First(); t; t = iter.Next()) { + if( (t->GetKind() == Track::Wave) && t->GetSelected() ) + count++; + } + return count; } -void AudacityProject::OnSelectAll() +int AudacityProject::CountSelectedTracks() { - mViewInfo.selectedRegion.setTimes( - mTracks->GetMinOffset(), mTracks->GetEndTime()); - OnSelectAllTracks(); + TrackListIterator iter(GetTracks()); + Track *t = iter.First(); + + int count =0; + for (Track *t = iter.First(); t; t = iter.Next()) { + if( t->GetSelected() ) + count++; + } + return count; +} + +void AudacityProject::OnSelectTimeAndTracks(bool bAllTime, bool bAllTracks) +{ + if( bAllTime ) + mViewInfo.selectedRegion.setTimes( + mTracks->GetMinOffset(), mTracks->GetEndTime()); + + if( bAllTracks ){ + TrackListIterator iter(GetTracks()); + for (Track *t = iter.First(); t; t = iter.Next()) { + t->SetSelected(true); + } + + ModifyState(false); + mTrackPanel->Refresh(false); + if (mMixerBoard) + mMixerBoard->Refresh(false);} +} + +void AudacityProject::OnSelectAllTime() +{ + OnSelectTimeAndTracks( true, false ); } void AudacityProject::OnSelectAllTracks() { - TrackListIterator iter(GetTracks()); - for (Track *t = iter.First(); t; t = iter.Next()) { - t->SetSelected(true); - } + OnSelectTimeAndTracks( false, true ); +} - ModifyState(false); +void AudacityProject::OnSelectAll() +{ + OnSelectTimeAndTracks( true, true ); +} - mTrackPanel->Refresh(false); - if (mMixerBoard) - mMixerBoard->Refresh(false); +// This function selects all tracks if no tracks selected, +// and all time if no time selected. +// There is an argument for making it just count wave tracks, +// However you could then not select a label and cut it, +// without this function selecting all tracks. +void AudacityProject::OnSelectSomething() +{ + bool bTime = mViewInfo.selectedRegion.isPoint(); + bool bTracks = CountSelectedTracks() == 0; + + if( bTime || bTracks ) + OnSelectTimeAndTracks(bTime,bTracks); } void AudacityProject::SelectNone() diff --git a/src/Menus.h b/src/Menus.h index 379b919c5..8291c2ba3 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -275,9 +275,16 @@ void OnSplitLabels(); void OnJoinLabels(); void OnDisjoinLabels(); +void OnSelectTimeAndTracks(bool bAllTime, bool bAllTracks); +void OnSelectAllTime(); +void OnSelectAllTracks(); void OnSelectAll(); void OnSelectSomething(); void OnSelectNone(); +private: +int CountSelectedWaveTracks(); +int CountSelectedTracks(); +public: #ifdef EXPERIMENTAL_SPECTRAL_EDITING void OnToggleSpectralSelection(); void DoNextPeakFrequency(bool up); @@ -304,7 +311,6 @@ void OnSelectNextClip(); void OnSelectClip(bool next); void OnSelectCursorStoredCursor(); void OnSelectSyncLockSel(); -void OnSelectAllTracks(); // View Menu From 978f09ba131c9d83a4fd6a5731a08456f066eea1 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 13 May 2017 18:34:48 +0100 Subject: [PATCH 09/85] Lose unused images from theme. --- src/AllThemeResources.h | 35 ++++++++++------------------------- src/Theme.cpp | 12 ++++++++---- src/Theme.h | 3 ++- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/src/AllThemeResources.h b/src/AllThemeResources.h index 1452949f2..8fa779934 100644 --- a/src/AllThemeResources.h +++ b/src/AllThemeResources.h @@ -85,11 +85,6 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpMic, wxImage( 25, 25 ), wxT("Mic")); DEFINE_IMAGE( bmpSpeaker, wxImage( 25, 25 ), wxT("Speaker")); - DEFINE_IMAGE( bmpPinnedPlayHead, wxImage( 27, 27 ), wxT("PinnedPlayHead")); - DEFINE_IMAGE( bmpUnpinnedPlayHead, wxImage( 27, 27 ), wxT("UnpinnedPlayHead")); - DEFINE_IMAGE( bmpPinnedRecordHead, wxImage( 27, 27 ), wxT("PinnedRecordHead")); - DEFINE_IMAGE( bmpUnpinnedRecordHead, wxImage( 27, 27 ), wxT("UnpinnedRecordHead")); - SET_THEME_FLAGS( resFlagPaired ); DEFINE_IMAGE( bmpZoomFit, wxImage( 27, 27 ), wxT("ZoomFit")); DEFINE_IMAGE( bmpZoomFitDisabled, wxImage( 27, 27 ), wxT("ZoomFitDisabled")); @@ -161,13 +156,21 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpPostfishLoop, wxImage( 29, 17 ), wxT("PostfishLoop")); SET_THEME_FLAGS( resFlagNone ); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockDown, wxImage( 15, 55 ), wxT("DockDown")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockDownShort, wxImage( 15, 27 ), wxT("DockDownShort")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockOver, wxImage( 15, 55 ), wxT("DockOver")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockOverShort, wxImage( 15, 27 ), wxT("DockOverShort")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockUp, wxImage( 15, 55 ), wxT("DockUp")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpDockUpShort, wxImage( 15, 27 ), wxT("DockUpShort")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpPinnedPlayRecordHead, wxImage( 27, 27 ), wxT("PinnedPlayRecordHead")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpUnpinnedPlayRecordHead, wxImage( 27, 27 ), wxT("UnpinnedPlayRecordHead")); DEFINE_IMAGE( bmpSyncLockSelTile, wxImage(20, 22), wxT("SyncLockSelTile")); @@ -176,7 +179,6 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpSyncLockTracksUp, wxImage( 20, 20 ), wxT("SyncLockTracksUp")); DEFINE_IMAGE( bmpSyncLockTracksDisabled, wxImage( 20, 20 ), wxT("SyncLockTracksDisabled")); DEFINE_IMAGE( bmpToggleScrubRuler, wxImage( 20, 20 ), wxT("ToggleScrubRuler")); -// DEFINE_IMAGE( bmpSliderThumb, wxImage( 11, 14 ), wxT("SliderThumb")); DEFINE_IMAGE( bmpSyncLockIcon, wxImage(12, 12), wxT("SyncLockIcon")); SET_THEME_FLAGS( resFlagNewLine ); @@ -189,7 +191,9 @@ from there. Audacity will look for a file called "Pause.png". SET_THEME_FLAGS( resFlagNone ); DEFINE_IMAGE( bmpSliderThumb, wxImage( 11, 20 ), wxT("SliderThumb")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpSlider, wxImage( 80, 20 ), wxT("Slider")); + SET_THEME_FLAGS( resFlagSkip ); DEFINE_IMAGE( bmpHiliteSlider, wxImage( 80, 20 ), wxT("HiliteSlider")); DEFINE_IMAGE( bmpUpButtonExpandSel, wxImage( 96, 18 ), wxT("UpButtonExpandSel")); DEFINE_IMAGE( bmpDownButtonExpandSel, wxImage( 96, 18 ), wxT("DownButtonExpandSel")); @@ -206,8 +210,6 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpUpButtonSmall, wxImage( 27, 27 ), wxT("UpButtonSmall")); DEFINE_IMAGE( bmpDownButtonSmall, wxImage( 27, 27 ), wxT("DownButtonSmall")); DEFINE_IMAGE( bmpHiliteButtonSmall, wxImage( 27, 27 ), wxT("HiliteButtonSmall")); - //DEFINE_IMAGE( bmpVolumeSlider, wxImage( 100, 28 ), wxT("VolumeSlider")); - //DEFINE_IMAGE( bmpVolumeSliderThumb, wxImage( 10, 28 ), wxT("VolumeSliderThumb")); SET_THEME_FLAGS( resFlagNone ); DEFINE_IMAGE( bmpMacUpButton, wxImage( 36, 36 ), wxT("MacUpButton")); @@ -216,8 +218,6 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpMacUpButtonSmall, wxImage( 27, 27 ), wxT("MacUpButtonSmall")); DEFINE_IMAGE( bmpMacDownButtonSmall, wxImage( 27, 27 ), wxT("MacDownButtonSmall")); DEFINE_IMAGE( bmpMacHiliteButtonSmall, wxImage( 27, 27 ), wxT("MacHiliteButtonSmall")); - DEFINE_IMAGE( bmpMacSlider, wxImage( 100, 28 ), wxT("MacSlider")); - DEFINE_IMAGE( bmpMacSliderThumb, wxImage( 17, 28 ), wxT("MacSliderThumb")); SET_THEME_FLAGS( resFlagInternal ); DEFINE_IMAGE( bmpRecoloredUpLarge, wxImage( 48, 48 ), wxT("RecoloredUpLarge")); @@ -240,19 +240,7 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpBottomFrequencyCursor, wxImage( 32, 32 ), wxT("BottomFrequencyCursor")); DEFINE_IMAGE( bmpTopFrequencyCursor, wxImage( 32, 32 ), wxT("TopFrequencyCursor")); DEFINE_IMAGE( bmpBandWidthCursor, wxImage(32, 32), wxT("BandWidthCursor")); - - - /* - DEFINE_IMAGE( bmpToolBarToggle, wxImage( 43, 35 ), wxT("ToolBarToggle")); - DEFINE_IMAGE( bmpToolBarTarget, wxImage( 17, 26 ), wxT("ToolBarTarget")); - DEFINE_IMAGE( bmpToolBarGrabber, wxImage( 17, 8 ), wxT("ToolBarGrabber")); - DEFINE_IMAGE( bmpArrow, wxImage( 9, 16 ), wxT("Arrow")); - DEFINE_IMAGE( bmpUploadFile, wxImage( 16, 16 ), wxT("UploadFile")); - DEFINE_IMAGE( bmpUploadFolder, wxImage( 16, 16 ), wxT("UploadFolder")); - DEFINE_IMAGE( bmpUploadMp3, wxImage( 16, 16 ), wxT("UploadMp3")); - DEFINE_IMAGE( bmpUploadUp, wxImage( 16, 16 ), wxT("UploadUp")); -*/ SET_THEME_FLAGS( resFlagNewLine ); // DA: The logo with name xpm has a different width. @@ -264,9 +252,6 @@ from there. Audacity will look for a file called "Pause.png". #define LOGOWITHNAME_HEIGHT 200 - DEFINE_IMAGE( bmpAudacityLogo, wxImage( 215, 190 ), wxT("AudacityLogo")); - DEFINE_IMAGE( bmpAudacityLogo48x48, wxImage( 48, 48 ), wxT("AudacityLogo48x48")); - DEFINE_COLOUR( clrBlank, wxColour( 64, 64, 64), wxT("Blank")); DEFINE_COLOUR( clrUnselected, wxColour( 30, 30, 30), wxT("Unselected")); DEFINE_COLOUR( clrSelected, wxColour( 93, 65, 93), wxT("Selected")); diff --git a/src/Theme.cpp b/src/Theme.cpp index 00358f98a..760e24db7 100644 --- a/src/Theme.cpp +++ b/src/Theme.cpp @@ -490,6 +490,7 @@ void ThemeBase::RegisterImage( int &iIndex, const wxImage &Image, const wxString mBitmapNames.Add( Name ); mBitmapFlags.Add( mFlow.mFlags ); + mFlow.mFlags &= ~resFlagSkip; iIndex = mBitmaps.GetCount()-1; } @@ -541,7 +542,7 @@ void FlowPacker::GetNextPosition( int xSize, int ySize ) xSize += 2*mBorderWidth; ySize += 2*mBorderWidth; // if the height has increased, then we are on a NEW group. - if(( ySize > myHeight )||(mFlags != mOldFlags )) + if(( ySize > myHeight )||(((mFlags ^ mOldFlags )& ~resFlagSkip)!=0)) { SetNewGroup( ((mFlags & resFlagPaired)!=0) ? 2 : 1 ); myHeight = ySize; @@ -690,9 +691,12 @@ void ThemeBase::CreateImageCache( bool bBinarySave ) { mFlow.GetNextPosition( SrcImage.GetWidth(), SrcImage.GetHeight()); ImageCache.SetRGB( mFlow.Rect(), 0xf2, 0xb0, 0x27 ); - PasteSubImage( &ImageCache, &SrcImage, - mFlow.mxPos + mFlow.mBorderWidth, - mFlow.myPos + mFlow.mBorderWidth); + if( (mFlow.mFlags & resFlagSkip) == 0 ) + PasteSubImage( &ImageCache, &SrcImage, + mFlow.mxPos + mFlow.mBorderWidth, + mFlow.myPos + mFlow.mBorderWidth); + else + ImageCache.SetRGB( mFlow.RectInner(), 1,1,1); #ifdef IMAGE_MAP // No href in html. Uses title not alt. wxRect R( mFlow.Rect() ); diff --git a/src/Theme.h b/src/Theme.h index d72a14921..97043e8af 100644 --- a/src/Theme.h +++ b/src/Theme.h @@ -41,7 +41,8 @@ enum teResourceFlags resFlagPaired =0x01, resFlagCursor =0x02, resFlagNewLine = 0x04, - resFlagInternal = 0x08 // For image manipulation. Don't save or load. + resFlagInternal = 0x08, // For image manipulation. Don't save or load. + resFlagSkip = 0x10 }; enum teThemeType From 07ce60218c31dd32757a525c86a681ef0aa0f54f Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 13 May 2017 19:46:04 +0100 Subject: [PATCH 10/85] Reinstate 48x48 Logo (for Linux/Mac use) --- src/AllThemeResources.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/AllThemeResources.h b/src/AllThemeResources.h index 8fa779934..bb49e89d1 100644 --- a/src/AllThemeResources.h +++ b/src/AllThemeResources.h @@ -241,7 +241,7 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpTopFrequencyCursor, wxImage( 32, 32 ), wxT("TopFrequencyCursor")); DEFINE_IMAGE( bmpBandWidthCursor, wxImage(32, 32), wxT("BandWidthCursor")); - SET_THEME_FLAGS( resFlagNewLine ); + //SET_THEME_FLAGS( resFlagNewLine ); // DA: The logo with name xpm has a different width. #ifdef EXPERIMENTAL_DA @@ -252,6 +252,11 @@ from there. Audacity will look for a file called "Pause.png". #define LOGOWITHNAME_HEIGHT 200 + SET_THEME_FLAGS( resFlagSkip | resFlagNewLine ); + DEFINE_IMAGE( bmpAudacityLogo, wxImage( 215, 190 ), wxT("AudacityLogo")); + DEFINE_IMAGE( bmpAudacityLogo48x48, wxImage( 48, 48 ), wxT("AudacityLogo48x48")); + + DEFINE_COLOUR( clrBlank, wxColour( 64, 64, 64), wxT("Blank")); DEFINE_COLOUR( clrUnselected, wxColour( 30, 30, 30), wxT("Unselected")); DEFINE_COLOUR( clrSelected, wxColour( 93, 65, 93), wxT("Selected")); From 4c3455c2c7beb16d370549ffb226eaf56268437c Mon Sep 17 00:00:00 2001 From: Richard Bunel Date: Sun, 14 May 2017 10:52:30 +0100 Subject: [PATCH 11/85] Bug 1523 - OK in Preferences changes language from "System" to the specific system locale --- src/prefs/GUIPrefs.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/prefs/GUIPrefs.cpp b/src/prefs/GUIPrefs.cpp index 4138a243e..9a6c0240b 100644 --- a/src/prefs/GUIPrefs.cpp +++ b/src/prefs/GUIPrefs.cpp @@ -215,8 +215,9 @@ bool GUIPrefs::Apply() // If language has changed, we want to change it now, not on the next reboot. wxString lang = gPrefs->Read(wxT("/Locale/Language"), wxT("")); wxString usedLang = wxGetApp().InitLang(lang); - if (lang != usedLang) { - // lang was not usable. We got overridden. + // Bug 1523: Previously didn't check no-language (=System Language) + if (!(lang.empty()) && (lang != usedLang)) { + // lang was not usable and is not system language. We got overridden. gPrefs->Write(wxT("/Locale/Language"), usedLang); gPrefs->Flush(); } From cc38ba34a42466611d1243b7b48776c46da5ec22 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 14:25:40 +0100 Subject: [PATCH 12/85] Bug 1607 - Some dialogs appear on primary monitor when Audacity is running on secondary monitor --- src/FreqWindow.cpp | 3 +++ src/export/Export.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/src/FreqWindow.cpp b/src/FreqWindow.cpp index 9bc82700d..9110edac1 100644 --- a/src/FreqWindow.cpp +++ b/src/FreqWindow.cpp @@ -493,6 +493,9 @@ FreqWindow::FreqWindow(wxWindow * parent, wxWindowID id, Layout(); Fit(); + // Bug 1607: + Center(); + SetMinSize(GetSize()); mAlgChoice->SetFocus(); diff --git a/src/export/Export.cpp b/src/export/Export.cpp index a4dde5947..70df95f18 100644 --- a/src/export/Export.cpp +++ b/src/export/Export.cpp @@ -1326,6 +1326,7 @@ ExportMixerDialog::ExportMixerDialog( const TrackList *tracks, bool selectedOnly SetSizeHints( 640, 480, 20000, 20000 ); SetSize( 640, 480 ); + Center(); } ExportMixerDialog::~ExportMixerDialog() From 6478895a3903a2a06761944b69fdf0d92746315b Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 14:58:50 +0100 Subject: [PATCH 13/85] Bug 1565 - Windows: Toolbars don't show tooltips when button is disabled --- src/widgets/AButton.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/widgets/AButton.cpp b/src/widgets/AButton.cpp index da19a9657..1f19def72 100644 --- a/src/widgets/AButton.cpp +++ b/src/widgets/AButton.cpp @@ -536,7 +536,13 @@ void AButton::Enable() void AButton::Disable() { + // Bug 1565: Tooltips not showing on disabled buttons. + // The fix is to NOT tell windows that the button is disabled. + // The button's appearance will still change to show it is disabled + // since we control that rather than windows. +#ifndef __WXMSW__ wxWindow::Enable(false); +#endif mEnabled = false; if (GetCapture()==this) ReleaseMouse(); From 2f10c1ce25d6f76a3832e3f5cc0fe63ed27a27f2 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 16:08:02 +0100 Subject: [PATCH 14/85] Bug 1532 - Toolbars fail to arrange correctly when maximizing or restoring main window size --- src/Project.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Project.cpp b/src/Project.cpp index 164b4237c..181f928bf 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -2052,8 +2052,10 @@ void AudacityProject::UpdateLayout() if (!mTrackPanel) return; - mToolManager->LayoutToolBars(); + // Layout first to get our new width, + // Then and only then we can arrange the toolbars. Layout(); + mToolManager->LayoutToolBars(); // Retrieve size of this projects window wxSize mainsz = GetSize(); @@ -2107,7 +2109,6 @@ void AudacityProject::RefreshAllTitles(bool bShowProjectNumbers ) void AudacityProject::OnIconize(wxIconizeEvent &event) { - int VisibleProjectCount = 0; //JKC: On Iconizing we get called twice. Don't know From c8b2cc9d3151d65b7e0a4368555416cf1716de2d Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 17:26:33 +0100 Subject: [PATCH 15/85] Bug 641 - ASSERT when adding recording not at start of track. Cause by testing the track length before setting the track length. --- src/Envelope.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Envelope.cpp b/src/Envelope.cpp index 67eff8799..537bad9ff 100644 --- a/src/Envelope.cpp +++ b/src/Envelope.cpp @@ -933,14 +933,15 @@ void Envelope::InsertSpace( double t0, double tlen ) point.SetT( point.GetT() + tlen ); } + // increase track len, before insert or replace, + // since it range chacks the values. + mTrackLen += tlen; // Preserve the right-side limit. if ( 1 + range.first < range.second ) // There was a control point already. ; else InsertOrReplaceRelative( t0 + tlen, val ); - - mTrackLen += tlen; } int Envelope::Reassign(double when, double value) From 18cec363c374fdc6f0ef9633d6bd808f9008248c Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 17:36:18 +0100 Subject: [PATCH 16/85] Bug 1607 - 2nd Screen issue with MixerBoard and Karaoke Window Also Screenshot tools. No joy for log-window, as that is created before Audacity starts up and recognises it is on the second screen. --- src/LyricsWindow.cpp | 1 + src/MixerBoard.cpp | 3 ++- src/Screenshot.cpp | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/LyricsWindow.cpp b/src/LyricsWindow.cpp index 600e07de7..5ad5e1e13 100644 --- a/src/LyricsWindow.cpp +++ b/src/LyricsWindow.cpp @@ -130,6 +130,7 @@ LyricsWindow::LyricsWindow(AudacityProject *parent): wxCommandEventHandler(LyricsWindow::OnTimer), NULL, this); + Center(); } LyricsWindow::~LyricsWindow() diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index b85e85906..56b48918c 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -1512,7 +1512,8 @@ MixerBoardFrame::MixerBoardFrame(AudacityProject* parent) #endif SetIcon(ic); } - #endif +#endif + Center(); } MixerBoardFrame::~MixerBoardFrame() diff --git a/src/Screenshot.cpp b/src/Screenshot.cpp index 7a9ac8e6d..08698cdba 100644 --- a/src/Screenshot.cpp +++ b/src/Screenshot.cpp @@ -120,7 +120,7 @@ ScreenFramePtr mFrame; void OpenScreenshotTools() { if (!mFrame) { - mFrame = ScreenFramePtr{ safenew ScreenFrame(NULL, -1) }; + mFrame = ScreenFramePtr{ safenew ScreenFrame(wxGetApp().GetTopWindow(), -1) }; } mFrame->Show(); mFrame->Raise(); @@ -298,6 +298,7 @@ ScreenFrame::ScreenFrame(wxWindow * parent, wxWindowID id) // The monitoring will switch off temporarily // because we've switched monitor mid play. mContext.GetProject()->GetToolManager()->Reset(); + Center(); } ScreenFrame::~ScreenFrame() From a9c417854c044e5b91d6997b231aff8b496e6674 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 18:14:39 +0100 Subject: [PATCH 17/85] Bug 509 - Soloing/unsoloing in Mixer Board does not repaint waveform colour until window or Track Panel refresh --- src/MixerBoard.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index 56b48918c..6a4ad754d 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -776,11 +776,9 @@ void MixerTrackCluster::OnButton_Solo(wxCommandEvent& WXUNUSED(event)) // Have to refresh all tracks. mMixerBoard->UpdateMute(); mMixerBoard->UpdateSolo(); - mProject->RedrawProject(); } - else - // Update only the changed track. - mProject->RefreshTPTrack(mTrack); + // Bug 509: Must repaint all, as many tracks can change with one Solo change. + mProject->RedrawProject(); } From b196c7de8dff792f8f8ad848e64be4e6c49a292f Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 18:44:53 +0100 Subject: [PATCH 18/85] Bug 1541 - Skip to Start/End buttons don't show that they respect SHIFT usage --- src/toolbars/ControlToolBar.cpp | 12 ++++++++++-- src/toolbars/TranscriptionToolBar.cpp | 8 +++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 716ac7441..a27db471b 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -256,10 +256,18 @@ void ControlToolBar::RegenerateTooltips() commands.push_back(wxT("Stop")); break; case ID_FF_BUTTON: - commands.push_back(wxT("SkipEnd")); + commands.push_back(wxT("CursProjectEnd")); + // With shift + commands.push_back(_("Select to End")); + // For the shortcut tooltip. + commands.push_back(wxT("SelCursorEnd")); break; case ID_REW_BUTTON: - commands.push_back(wxT("SkipStart")); + commands.push_back(wxT("CursProjectStart")); + // With shift + commands.push_back(_("Select to Start")); + // For the shortcut tooltip. + commands.push_back(wxT("SelStartCursor")); break; } ToolBar::SetButtonToolTip(*pCtrl, commands); diff --git a/src/toolbars/TranscriptionToolBar.cpp b/src/toolbars/TranscriptionToolBar.cpp index 5d9d99744..662e35443 100644 --- a/src/toolbars/TranscriptionToolBar.cpp +++ b/src/toolbars/TranscriptionToolBar.cpp @@ -302,8 +302,12 @@ void TranscriptionToolBar::RegenerateTooltips() int tool; wxString commandName; wxString untranslatedLabel; + wxString commandName2; + wxString untranslatedLabel2; } table[] = { - { TTB_PlaySpeed, wxT("PlayAtSpeed"), XO("Play-at-Speed") }, + { TTB_PlaySpeed, wxT("PlayAtSpeed"), XO("Play-at-Speed"), + wxT("PlayAtSpeedLooped"), XO("Looped-Play-at-Speed") + }, }; std::vector commands; @@ -311,6 +315,8 @@ void TranscriptionToolBar::RegenerateTooltips() commands.clear(); commands.push_back(wxGetTranslation(entry.untranslatedLabel)); commands.push_back(entry.commandName); + commands.push_back(wxGetTranslation(entry.untranslatedLabel2)); + commands.push_back(entry.commandName2); ToolBar::SetButtonToolTip(*mButtons[entry.tool], commands); } From e16f6f922161be2f05a6334383f545b1c21b558a Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sun, 14 May 2017 16:19:54 +0100 Subject: [PATCH 19/85] Add small help button to Prefs pages --- images/Help.xpm | 55 ++++++++++++++++++++++++++++++ src/ShuttleGui.cpp | 11 +++++- src/effects/Effect.cpp | 2 ++ src/prefs/DevicePrefs.cpp | 5 +++ src/prefs/DevicePrefs.h | 1 + src/prefs/DirectoriesPrefs.cpp | 5 +++ src/prefs/DirectoriesPrefs.h | 1 + src/prefs/EffectsPrefs.cpp | 5 +++ src/prefs/EffectsPrefs.h | 1 + src/prefs/ExtImportPrefs.cpp | 5 +++ src/prefs/ExtImportPrefs.h | 1 + src/prefs/GUIPrefs.cpp | 5 +++ src/prefs/GUIPrefs.h | 1 + src/prefs/ImportExportPrefs.cpp | 5 +++ src/prefs/ImportExportPrefs.h | 1 + src/prefs/KeyConfigPrefs.cpp | 10 ++++++ src/prefs/KeyConfigPrefs.h | 2 ++ src/prefs/ModulePrefs.cpp | 5 +++ src/prefs/ModulePrefs.h | 1 + src/prefs/MousePrefs.cpp | 5 +++ src/prefs/MousePrefs.h | 1 + src/prefs/PlaybackPrefs.cpp | 5 +++ src/prefs/PlaybackPrefs.h | 1 + src/prefs/PrefsDialog.cpp | 37 +++++++++++++++++++- src/prefs/PrefsDialog.h | 1 + src/prefs/PrefsPanel.h | 4 +++ src/prefs/ProjectsPrefs.cpp | 5 +++ src/prefs/ProjectsPrefs.h | 1 + src/prefs/QualityPrefs.cpp | 5 +++ src/prefs/QualityPrefs.h | 1 + src/prefs/RecordingPrefs.cpp | 5 +++ src/prefs/RecordingPrefs.h | 1 + src/prefs/SpectrumPrefs.cpp | 5 +++ src/prefs/SpectrumPrefs.h | 1 + src/prefs/TracksBehaviorsPrefs.cpp | 5 +++ src/prefs/TracksBehaviorsPrefs.h | 1 + src/prefs/TracksPrefs.cpp | 5 +++ src/prefs/TracksPrefs.h | 1 + src/prefs/WarningsPrefs.cpp | 5 +++ src/prefs/WarningsPrefs.h | 1 + 40 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 images/Help.xpm diff --git a/images/Help.xpm b/images/Help.xpm new file mode 100644 index 000000000..572cdf7ae --- /dev/null +++ b/images/Help.xpm @@ -0,0 +1,55 @@ +/* XPM */ +static const char * Help_xpm[] = { +"21 21 31 1", +" c None", +". c #6699FF", +"+ c #8CB2FE", +"@ c #CDDDFE", +"# c #F0F5FE", +"$ c #F9FAFE", +"% c #E4ECFE", +"& c #A4C2FE", +"* c #6698FE", +"= c #FFFFFF", +"- c #A9C5FE", +"; c #DAE6FE", +"> c #95B8FE", +", c #6D9DFE", +"' c #71A0FE", +") c #BFD4FE", +"! c #E9F0FE", +"~ c #F7F9FE", +"{ c #90B4FE", +"] c #C8DAFE", +"^ c #78A5FE", +"/ c #EEF3FE", +"( c #E3ECFE", +"_ c #6F9FFE", +": c #7CA7FE", +"< c #EDF2FE", +"[ c #E6EEFE", +"} c #DBE7FE", +"| c #87AEFE", +"1 c #FBFCFE", +"2 c #6799FE", +" ..... ", +" ......... ", +" ............. ", +" ............... ", +" .....+@#$%&*..... ", +" .....======-..... ", +" ......;>,')=!...... ", +" ..........,=~...... ", +"...........{=].......", +"..........^/(_.......", +".........:<['........", +".........}=|.........", +".........1=2.........", +" ........==......... ", +" ................... ", +" .......==........ ", +" .......==........ ", +" ............... ", +" ............. ", +" ......... ", +" ..... "}; diff --git a/src/ShuttleGui.cpp b/src/ShuttleGui.cpp index c8d376759..9580c62ab 100644 --- a/src/ShuttleGui.cpp +++ b/src/ShuttleGui.cpp @@ -103,14 +103,20 @@ for registering for changes. #include #include #include +#include #include "Internat.h" #include "Experimental.h" #include "Shuttle.h" #include "WrappedType.h" #include "widgets/wxPanelWrapper.h" +#include "../images/Help.xpm" + ShuttleGuiBase::ShuttleGuiBase(wxWindow * pParent, teShuttleMode ShuttleMode ) { + // Suppress warnings about the header file + wxUnusedVar(Help_xpm); + wxASSERT( (pParent != NULL ) || ( ShuttleMode != eIsCreating)); mpParent = pParent; @@ -2168,7 +2174,10 @@ std::unique_ptr CreateStdButtonSizer(wxWindow *parent, long buttons, wx if( buttons & eHelpButton ) { - bs->AddButton(safenew wxButton(parent, wxID_HELP)); + // Replace standard Help button with smaller icon button. + // bs->AddButton(safenew wxButton(parent, wxID_HELP)); + b = new wxBitmapButton(parent, wxID_HELP, Help_xpm); + bs->AddButton( b ); } if (buttons & ePreviewButton) diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 7257a99e7..328cfa466 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -3039,6 +3039,8 @@ bool EffectUIHost::Initialize() bar->SetSizerAndFit(bs.release()); } + // TODO: Add Help button + // long buttons = eApplyButton + eCloseButton + eHelpButton; long buttons = eApplyButton + eCloseButton; if (mEffect->mUIDebug) { diff --git a/src/prefs/DevicePrefs.cpp b/src/prefs/DevicePrefs.cpp index 843fb4361..ae2f44e8f 100644 --- a/src/prefs/DevicePrefs.cpp +++ b/src/prefs/DevicePrefs.cpp @@ -407,6 +407,11 @@ bool DevicePrefs::Apply() return true; } +wxString DevicePrefs::HelpPageName() +{ + return "Devices_Preferences"; +} + PrefsPanel *DevicePrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/DevicePrefs.h b/src/prefs/DevicePrefs.h index 9a51acec8..148bd7b1a 100644 --- a/src/prefs/DevicePrefs.h +++ b/src/prefs/DevicePrefs.h @@ -29,6 +29,7 @@ class DevicePrefs final : public PrefsPanel DevicePrefs(wxWindow * parent); virtual ~DevicePrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/DirectoriesPrefs.cpp b/src/prefs/DirectoriesPrefs.cpp index 2327e3b96..d76cb25ec 100644 --- a/src/prefs/DirectoriesPrefs.cpp +++ b/src/prefs/DirectoriesPrefs.cpp @@ -264,6 +264,11 @@ bool DirectoriesPrefs::Apply() return true; } +wxString DirectoriesPrefs::HelpPageName() +{ + return "Directories_Preferences"; +} + PrefsPanel *DirectoriesPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/DirectoriesPrefs.h b/src/prefs/DirectoriesPrefs.h index d9ebdcc04..6735f402d 100644 --- a/src/prefs/DirectoriesPrefs.h +++ b/src/prefs/DirectoriesPrefs.h @@ -25,6 +25,7 @@ class DirectoriesPrefs final : public PrefsPanel ~DirectoriesPrefs(); bool Apply() override; bool Validate() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/EffectsPrefs.cpp b/src/prefs/EffectsPrefs.cpp index 8d42b74eb..7c421cced 100644 --- a/src/prefs/EffectsPrefs.cpp +++ b/src/prefs/EffectsPrefs.cpp @@ -168,6 +168,11 @@ bool EffectsPrefs::Apply() return true; } +wxString EffectsPrefs::HelpPageName() +{ + return "Effects_Preferences"; +} + PrefsPanel *EffectsPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/EffectsPrefs.h b/src/prefs/EffectsPrefs.h index 6a914685d..946240201 100644 --- a/src/prefs/EffectsPrefs.h +++ b/src/prefs/EffectsPrefs.h @@ -28,6 +28,7 @@ class EffectsPrefs final : public PrefsPanel EffectsPrefs(wxWindow * parent); ~EffectsPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/ExtImportPrefs.cpp b/src/prefs/ExtImportPrefs.cpp index e54eb9ed2..2dd7478b0 100644 --- a/src/prefs/ExtImportPrefs.cpp +++ b/src/prefs/ExtImportPrefs.cpp @@ -668,6 +668,11 @@ void ExtImportPrefs::OnRuleTableCellClick (wxGridEvent& event) event.Skip(); } +wxString ExtImportPrefs::HelpPageName() +{ + return "Extended_Import_Preferences"; +} + ExtImportPrefsDropTarget::ExtImportPrefsDropTarget(wxDataObject *dataObject) : wxDropTarget(dataObject) { diff --git a/src/prefs/ExtImportPrefs.h b/src/prefs/ExtImportPrefs.h index 7d27d0fb1..3f531ce10 100644 --- a/src/prefs/ExtImportPrefs.h +++ b/src/prefs/ExtImportPrefs.h @@ -49,6 +49,7 @@ class ExtImportPrefs final : public PrefsPanel ExtImportPrefs(wxWindow * parent); ~ExtImportPrefs(); bool Apply() override; + wxString HelpPageName() override; void OnPluginKeyDown(wxListEvent& event); void OnPluginBeginDrag(wxListEvent& event); diff --git a/src/prefs/GUIPrefs.cpp b/src/prefs/GUIPrefs.cpp index 9a6c0240b..f46b66ebe 100644 --- a/src/prefs/GUIPrefs.cpp +++ b/src/prefs/GUIPrefs.cpp @@ -225,6 +225,11 @@ bool GUIPrefs::Apply() return true; } +wxString GUIPrefs::HelpPageName() +{ + return "Interface_Preferences"; +} + PrefsPanel *GUIPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/GUIPrefs.h b/src/prefs/GUIPrefs.h index 66c22cd7d..0a67a66a3 100644 --- a/src/prefs/GUIPrefs.h +++ b/src/prefs/GUIPrefs.h @@ -28,6 +28,7 @@ class GUIPrefs final : public PrefsPanel GUIPrefs(wxWindow * parent); ~GUIPrefs(); bool Apply() override; + wxString HelpPageName() override; static void GetRangeChoices(wxArrayString *pChoices, wxArrayString *pCodes); diff --git a/src/prefs/ImportExportPrefs.cpp b/src/prefs/ImportExportPrefs.cpp index 01a5e0d14..6817573d0 100644 --- a/src/prefs/ImportExportPrefs.cpp +++ b/src/prefs/ImportExportPrefs.cpp @@ -110,6 +110,11 @@ bool ImportExportPrefs::Apply() return true; } +wxString ImportExportPrefs::HelpPageName() +{ + return "Import_-_Export_Preferences"; +} + PrefsPanel *ImportExportPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/ImportExportPrefs.h b/src/prefs/ImportExportPrefs.h index daa5710bd..3e194d953 100644 --- a/src/prefs/ImportExportPrefs.h +++ b/src/prefs/ImportExportPrefs.h @@ -27,6 +27,7 @@ class ImportExportPrefs final : public PrefsPanel ImportExportPrefs(wxWindow * parent); ~ImportExportPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/KeyConfigPrefs.cpp b/src/prefs/KeyConfigPrefs.cpp index 7d6a1cfaa..ad24b574e 100644 --- a/src/prefs/KeyConfigPrefs.cpp +++ b/src/prefs/KeyConfigPrefs.cpp @@ -656,6 +656,11 @@ void KeyConfigPrefs::Cancel() return; } +wxString KeyConfigPrefs::HelpPageName() +{ + return "Keyboard_Preferences"; +} + #else // // KeyConfigPrefs @@ -1187,6 +1192,11 @@ void KeyConfigPrefs::Cancel() return; } +wxString KeyConfigPrefs::HelpPageName() +{ + return "Keyboard_Preferences"; +} + #endif PrefsPanel *KeyConfigPrefsFactory::Create(wxWindow *parent) diff --git a/src/prefs/KeyConfigPrefs.h b/src/prefs/KeyConfigPrefs.h index 1823ba40f..07dceb2a4 100644 --- a/src/prefs/KeyConfigPrefs.h +++ b/src/prefs/KeyConfigPrefs.h @@ -41,6 +41,7 @@ public: ~KeyConfigPrefs(); bool Apply() override; void Cancel() override; + wxString HelpPageName() override; private: void Populate(); @@ -109,6 +110,7 @@ class KeyConfigPrefs final : public PrefsPanel ~KeyConfigPrefs(); bool Apply() override; void Cancel() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/ModulePrefs.cpp b/src/prefs/ModulePrefs.cpp index 676d6ff0a..579f6f88a 100644 --- a/src/prefs/ModulePrefs.cpp +++ b/src/prefs/ModulePrefs.cpp @@ -161,6 +161,11 @@ void ModulePrefs::SetModuleStatus(const wxString &fname, int iStatus){ gPrefs->Flush(); } +wxString ModulePrefs::HelpPageName() +{ + return "Modules_Preferences"; +} + PrefsPanel *ModulePrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/ModulePrefs.h b/src/prefs/ModulePrefs.h index 3cf574d2b..5d6ead6fc 100644 --- a/src/prefs/ModulePrefs.h +++ b/src/prefs/ModulePrefs.h @@ -37,6 +37,7 @@ class ModulePrefs final : public PrefsPanel ModulePrefs(wxWindow * parent); ~ModulePrefs(); bool Apply() override; + wxString HelpPageName() override; static int GetModuleStatus( const wxString &fname ); static void SetModuleStatus( const wxString &fname, int iStatus ); diff --git a/src/prefs/MousePrefs.cpp b/src/prefs/MousePrefs.cpp index 61057b36b..abf49f6a4 100644 --- a/src/prefs/MousePrefs.cpp +++ b/src/prefs/MousePrefs.cpp @@ -197,6 +197,11 @@ bool MousePrefs::Apply() return true; } +wxString MousePrefs::HelpPageName() +{ + return "Mouse_Preferences"; +} + PrefsPanel *MousePrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/MousePrefs.h b/src/prefs/MousePrefs.h index 4cb91d2dd..a772fa4e8 100644 --- a/src/prefs/MousePrefs.h +++ b/src/prefs/MousePrefs.h @@ -25,6 +25,7 @@ class MousePrefs final : public PrefsPanel MousePrefs(wxWindow * parent); ~MousePrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/PlaybackPrefs.cpp b/src/prefs/PlaybackPrefs.cpp index b84942c10..598bb7d76 100644 --- a/src/prefs/PlaybackPrefs.cpp +++ b/src/prefs/PlaybackPrefs.cpp @@ -123,6 +123,11 @@ bool PlaybackPrefs::Apply() return true; } +wxString PlaybackPrefs::HelpPageName() +{ + return "Playback_Preferences"; +} + PrefsPanel *PlaybackPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/PlaybackPrefs.h b/src/prefs/PlaybackPrefs.h index 0385498d6..dd0823965 100644 --- a/src/prefs/PlaybackPrefs.h +++ b/src/prefs/PlaybackPrefs.h @@ -26,6 +26,7 @@ class PlaybackPrefs final : public PrefsPanel PlaybackPrefs(wxWindow * parent); virtual ~PlaybackPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index fb9b65515..de3c28539 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -70,11 +70,13 @@ #endif #include "../Theme.h" +#include "../widgets/HelpSystem.h" BEGIN_EVENT_TABLE(PrefsDialog, wxDialogWrapper) EVT_BUTTON(wxID_OK, PrefsDialog::OnOK) EVT_BUTTON(wxID_CANCEL, PrefsDialog::OnCancel) EVT_BUTTON(wxID_APPLY, PrefsDialog::OnApply) + EVT_BUTTON(wxID_HELP, PrefsDialog::OnHelp) EVT_TREE_KEY_DOWN(wxID_ANY, PrefsDialog::OnTreeKeyDown) // Handles key events when tree has focus END_EVENT_TABLE() @@ -110,8 +112,30 @@ int wxTreebookExt::SetSelection(size_t n) static_cast(GetParent())->SetName( Temp ); PrefsPanel *const panel = static_cast(GetPage(n)); + const bool showHelp = (panel->HelpPageName() != wxEmptyString); const bool showApply = panel->ShowsApplyButton(); + wxWindow *const helpButton = wxWindow::FindWindowById(wxID_HELP, GetParent()); wxWindow *const applyButton = wxWindow::FindWindowById(wxID_APPLY, GetParent()); + + if (helpButton) { +#if defined(__WXMAC__) + // We don't appear to have accelerators on wxMac +#else + if (showHelp) { + wxAcceleratorEntry entries[1]; + entries[0].Set(wxACCEL_ALT, (int) 'H', wxID_HELP); + wxAcceleratorTable accel(1, entries); + this->SetAcceleratorTable(accel); + } + else { + this->SetAcceleratorTable(wxNullAcceleratorTable); + } +#endif + const bool changed = helpButton->Show(showHelp); + if (changed) + GetParent()->Layout(); + } + if (applyButton) { // might still be NULL during population const bool changed = applyButton->Show(showApply); if (changed) @@ -265,7 +289,7 @@ PrefsDialog::PrefsDialog } S.EndVerticalLay(); - S.AddStandardButtons(eOkButton | eCancelButton | eApplyButton); + S.AddStandardButtons(eOkButton | eCancelButton | eApplyButton | eHelpButton); static_cast(wxWindow::FindWindowById(wxID_OK, this))->SetDefault(); if (mUniquePage && !mUniquePage->ShowsApplyButton()) { @@ -370,6 +394,12 @@ void PrefsDialog::OnApply(wxCommandEvent & WXUNUSED(event)) mUniquePage->Apply(); } +void PrefsDialog::OnHelp(wxCommandEvent & WXUNUSED(event)) +{ + PrefsPanel* panel = static_cast(mCategories->GetCurrentPage()); + HelpSystem::ShowHelpDialog(this, panel->HelpPageName(), true); +} + void PrefsDialog::OnTreeKeyDown(wxTreeEvent & event) { if(event.GetKeyCode() == WXK_RETURN) @@ -526,3 +556,8 @@ bool PrefsPanel::ShowsApplyButton() { return false; } + +wxString PrefsPanel::HelpPageName() +{ + return wxEmptyString; +} diff --git a/src/prefs/PrefsDialog.h b/src/prefs/PrefsDialog.h index 766b43d14..b545d985e 100644 --- a/src/prefs/PrefsDialog.h +++ b/src/prefs/PrefsDialog.h @@ -60,6 +60,7 @@ class PrefsDialog /* not final */ : public wxDialogWrapper void OnOK(wxCommandEvent & e); void OnCancel(wxCommandEvent & e); void OnApply(wxCommandEvent & e); + void OnHelp(wxCommandEvent & e); void OnTreeKeyDown(wxTreeEvent & e); // Used to dismiss the dialog when enter is pressed with focus on tree void SelectPageByName(const wxString &pageName); diff --git a/src/prefs/PrefsPanel.h b/src/prefs/PrefsPanel.h index 364d88013..eddd78cd4 100644 --- a/src/prefs/PrefsPanel.h +++ b/src/prefs/PrefsPanel.h @@ -59,6 +59,10 @@ class PrefsPanel /* not final */ : public wxPanelWrapper // Default returns false virtual bool ShowsApplyButton(); + // If not empty string, the Help button is added below the panel + // Default returns empty string. + virtual wxString HelpPageName(); + virtual void Cancel(); }; diff --git a/src/prefs/ProjectsPrefs.cpp b/src/prefs/ProjectsPrefs.cpp index 2238a4fc7..1dc78cae4 100644 --- a/src/prefs/ProjectsPrefs.cpp +++ b/src/prefs/ProjectsPrefs.cpp @@ -80,6 +80,11 @@ bool ProjectsPrefs::Apply() return true; } +wxString ProjectsPrefs::HelpPageName() +{ + return "Projects_Preferences"; +} + PrefsPanel *ProjectsPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/ProjectsPrefs.h b/src/prefs/ProjectsPrefs.h index c5e040b87..4de10ab75 100644 --- a/src/prefs/ProjectsPrefs.h +++ b/src/prefs/ProjectsPrefs.h @@ -27,6 +27,7 @@ class ProjectsPrefs final : public PrefsPanel ProjectsPrefs(wxWindow * parent); ~ProjectsPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/QualityPrefs.cpp b/src/prefs/QualityPrefs.cpp index 91c3b20af..f27454b7c 100644 --- a/src/prefs/QualityPrefs.cpp +++ b/src/prefs/QualityPrefs.cpp @@ -228,6 +228,11 @@ bool QualityPrefs::Apply() return true; } +wxString QualityPrefs::HelpPageName() +{ + return "Quality_Preferences"; +} + PrefsPanel *QualityPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/QualityPrefs.h b/src/prefs/QualityPrefs.h index 3d37a5a22..d328c70ca 100644 --- a/src/prefs/QualityPrefs.h +++ b/src/prefs/QualityPrefs.h @@ -30,6 +30,7 @@ class QualityPrefs final : public PrefsPanel virtual ~QualityPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/RecordingPrefs.cpp b/src/prefs/RecordingPrefs.cpp index c29c1a159..7162ca8e3 100644 --- a/src/prefs/RecordingPrefs.cpp +++ b/src/prefs/RecordingPrefs.cpp @@ -245,6 +245,11 @@ void RecordingPrefs::OnToggleCustomName(wxCommandEvent & /* Evt */) mToggleCustomName->Enable(mUseCustomTrackName); } +wxString RecordingPrefs::HelpPageName() +{ + return "Recording_Preferences"; +} + PrefsPanel *RecordingPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/RecordingPrefs.h b/src/prefs/RecordingPrefs.h index 4ad617400..5ab947564 100644 --- a/src/prefs/RecordingPrefs.h +++ b/src/prefs/RecordingPrefs.h @@ -27,6 +27,7 @@ class RecordingPrefs final : public PrefsPanel RecordingPrefs(wxWindow * parent); virtual ~RecordingPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/SpectrumPrefs.cpp b/src/prefs/SpectrumPrefs.cpp index 5693778d0..94d8467cd 100644 --- a/src/prefs/SpectrumPrefs.cpp +++ b/src/prefs/SpectrumPrefs.cpp @@ -490,6 +490,11 @@ void SpectrumPrefs::EnableDisableSTFTOnlyControls() #endif } +wxString SpectrumPrefs::HelpPageName() +{ + return "Spectrograms_Preferences"; +} + BEGIN_EVENT_TABLE(SpectrumPrefs, PrefsPanel) EVT_CHOICE(ID_WINDOW_SIZE, SpectrumPrefs::OnWindowSize) EVT_CHECKBOX(ID_DEFAULTS, SpectrumPrefs::OnDefaults) diff --git a/src/prefs/SpectrumPrefs.h b/src/prefs/SpectrumPrefs.h index 53a3d72b4..d1a9e6255 100644 --- a/src/prefs/SpectrumPrefs.h +++ b/src/prefs/SpectrumPrefs.h @@ -46,6 +46,7 @@ class SpectrumPrefs final : public PrefsPanel bool Apply() override; bool ShowsApplyButton() override; bool Validate() override; + wxString HelpPageName() override; private: void Populate(size_t windowSize); diff --git a/src/prefs/TracksBehaviorsPrefs.cpp b/src/prefs/TracksBehaviorsPrefs.cpp index f759ac12b..293e0e162 100644 --- a/src/prefs/TracksBehaviorsPrefs.cpp +++ b/src/prefs/TracksBehaviorsPrefs.cpp @@ -109,6 +109,11 @@ bool TracksBehaviorsPrefs::Apply() return true; } +wxString TracksBehaviorsPrefs::HelpPageName() +{ + return "Tracks_Behaviors_Preferences"; +} + TracksBehaviorsPrefsFactory::TracksBehaviorsPrefsFactory() { } diff --git a/src/prefs/TracksBehaviorsPrefs.h b/src/prefs/TracksBehaviorsPrefs.h index 7a4c58ae1..50ac4a080 100644 --- a/src/prefs/TracksBehaviorsPrefs.h +++ b/src/prefs/TracksBehaviorsPrefs.h @@ -24,6 +24,7 @@ class TracksBehaviorsPrefs final : public PrefsPanel TracksBehaviorsPrefs(wxWindow * parent); ~TracksBehaviorsPrefs(); bool Apply() override; + wxString HelpPageName() override; static const wxChar *ScrollingPreferenceKey(); static inline bool ScrollingPreferenceDefault() { return false; } diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index 62d2b3cd6..c7ca98e58 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -166,6 +166,11 @@ bool TracksPrefs::Apply() return true; } +wxString TracksPrefs::HelpPageName() +{ + return "Tracks_Preferences"; +} + PrefsPanel *TracksPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/TracksPrefs.h b/src/prefs/TracksPrefs.h index f554e5944..06a4f8fcd 100644 --- a/src/prefs/TracksPrefs.h +++ b/src/prefs/TracksPrefs.h @@ -28,6 +28,7 @@ class TracksPrefs final : public PrefsPanel TracksPrefs(wxWindow * parent); ~TracksPrefs(); bool Apply() override; + wxString HelpPageName() override; static bool GetPinnedHeadPreference(); static void SetPinnedHeadPreference(bool value, bool flush = false); diff --git a/src/prefs/WarningsPrefs.cpp b/src/prefs/WarningsPrefs.cpp index 0ba2ba3f3..6a0268652 100644 --- a/src/prefs/WarningsPrefs.cpp +++ b/src/prefs/WarningsPrefs.cpp @@ -87,6 +87,11 @@ bool WarningsPrefs::Apply() return true; } +wxString WarningsPrefs::HelpPageName() +{ + return "Warnings_Preferences"; +} + PrefsPanel *WarningsPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/WarningsPrefs.h b/src/prefs/WarningsPrefs.h index 7c7fd59a4..06e5440cb 100644 --- a/src/prefs/WarningsPrefs.h +++ b/src/prefs/WarningsPrefs.h @@ -27,6 +27,7 @@ class WarningsPrefs final : public PrefsPanel WarningsPrefs(wxWindow * parent); ~WarningsPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); From a532d99289ef39e100ffff0c3794cb3bb84f33e0 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sun, 14 May 2017 19:01:45 +0100 Subject: [PATCH 20/85] Add Midi Prefs and Libraries Prefs help pages --- src/prefs/LibraryPrefs.cpp | 5 +++++ src/prefs/LibraryPrefs.h | 1 + src/prefs/MidiIOPrefs.cpp | 5 +++++ src/prefs/MidiIOPrefs.h | 1 + 4 files changed, 12 insertions(+) diff --git a/src/prefs/LibraryPrefs.cpp b/src/prefs/LibraryPrefs.cpp index 6e7bae99a..7f068484e 100644 --- a/src/prefs/LibraryPrefs.cpp +++ b/src/prefs/LibraryPrefs.cpp @@ -239,6 +239,11 @@ bool LibraryPrefs::Apply() return true; } +wxString LibraryPrefs::HelpPageName() +{ + return "Libraries_Preferences"; +} + PrefsPanel *LibraryPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/LibraryPrefs.h b/src/prefs/LibraryPrefs.h index 2de4c9cf8..2825c2c3e 100644 --- a/src/prefs/LibraryPrefs.h +++ b/src/prefs/LibraryPrefs.h @@ -28,6 +28,7 @@ class LibraryPrefs final : public PrefsPanel LibraryPrefs(wxWindow * parent); ~LibraryPrefs(); bool Apply() override; + wxString HelpPageName() override; private: void Populate(); diff --git a/src/prefs/MidiIOPrefs.cpp b/src/prefs/MidiIOPrefs.cpp index 06910194e..58673ad7b 100644 --- a/src/prefs/MidiIOPrefs.cpp +++ b/src/prefs/MidiIOPrefs.cpp @@ -286,6 +286,11 @@ bool MidiIOPrefs::Validate() return true; } +wxString MidiIOPrefs::HelpPageName() +{ + return "MIDI_Devices_Preferences"; +} + PrefsPanel *MidiIOPrefsFactory::Create(wxWindow *parent) { wxASSERT(parent); // to justify safenew diff --git a/src/prefs/MidiIOPrefs.h b/src/prefs/MidiIOPrefs.h index 637208208..9874d1ffc 100644 --- a/src/prefs/MidiIOPrefs.h +++ b/src/prefs/MidiIOPrefs.h @@ -33,6 +33,7 @@ class MidiIOPrefs final : public PrefsPanel virtual ~MidiIOPrefs(); bool Apply() override; bool Validate() override; + wxString HelpPageName() override; private: void Populate(); From 83d38647385b17572b77d2eae858c84164d62f66 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 19:32:46 +0100 Subject: [PATCH 21/85] Bug 1583 - "Pinned" play head preference requires restart --- src/prefs/TracksPrefs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index c7ca98e58..35d75aaca 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -160,6 +160,8 @@ void TracksPrefs::SetPinnedHeadPreference(bool value, bool flush) bool TracksPrefs::Apply() { + // Bug 1583: Clear the caching of the preference pinned state. + iPreferencePinned = -1; ShuttleGui S(this, eIsSavingToPrefs); PopulateOrExchange(S); From 4be26f5baeeb9cbc3210d3a1503f40b97ed5119f Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 20:21:16 +0100 Subject: [PATCH 22/85] Bug 1552 - Record button greyed out while playback paused --- src/toolbars/ControlToolBar.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index a27db471b..5e1e68a14 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -435,6 +435,7 @@ void ControlToolBar::EnableDisableButtons() AudacityProject *p = GetActiveProject(); bool tracks = false; + bool paused = mPause->IsDown(); bool playing = mPlay->IsDown(); bool recording = mRecord->IsDown(); bool busy = gAudioIO->IsBusy(); @@ -459,8 +460,8 @@ void ControlToolBar::EnableDisableButtons() mPlay->SetEnabled(CanStopAudioStream() && tracks && !recording); mRecord->SetEnabled( CanStopAudioStream() && - !(busy && !recording) && - !playing + !(busy && !recording && !paused) && + !(playing && !paused) ); mStop->SetEnabled(CanStopAudioStream() && (playing || recording)); mRewind->SetEnabled(IsPauseDown() || (!playing && !recording)); @@ -876,6 +877,29 @@ void ControlToolBar::Pause() void ControlToolBar::OnRecord(wxCommandEvent &evt) // STRONG-GUARANTEE (for state of current project's tracks) { + // TODO: It would be neater if Menu items and Toolbar buttons used the same code for + // enabling/disabling, and all fell into the same action routines. + // Here instead we reduplicate some logic (from CommandHandler) because it isn't + // normally used for buttons. + + // Code from CommandHandler start... + AudacityProject * proj = GetActiveProject(); + wxASSERT( proj ); + if( !proj ) + return; + + CommandFlag flags = AlwaysEnabledFlag; // 0 means recalc flags. + + // NB: The call may have the side effect of changing flags. + bool allowed = proj->TryToMakeActionAllowed( + flags, + AudioIONotBusyFlag | CanStopAudioStreamFlag, + AudioIONotBusyFlag | CanStopAudioStreamFlag); + + if( !allowed ) + return; + // ...end of code from CommandHandler. + if (gAudioIO->IsBusy()) { if (!CanStopAudioStream() || 0 == gAudioIO->GetNumCaptureChannels()) mRecord->PopUp(); From a0ea5d64db415e478cc1382628e762138da38d2f Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 14 May 2017 22:14:13 +0100 Subject: [PATCH 23/85] Bug 1469 - Shift key does not modify Play/Record buttons when Karaoke view has focus --- src/Lyrics.cpp | 1 + src/commands/CommandManager.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Lyrics.cpp b/src/Lyrics.cpp index 2faae7421..3f51fa081 100644 --- a/src/Lyrics.cpp +++ b/src/Lyrics.cpp @@ -461,6 +461,7 @@ void Lyrics::OnKeyEvent(wxKeyEvent & event) { AudacityProject *project = GetActiveProject(); project->GetCommandManager()->FilterKeyEvent(project, event, true); + event.Skip(); } void Lyrics::OnPaint(wxPaintEvent & WXUNUSED(event)) diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 4cb906efc..17ba4d187 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -1204,12 +1204,17 @@ bool CommandManager::FilterKeyEvent(AudacityProject *project, const wxKeyEvent & { wxWindow * pWnd = wxWindow::FindFocus(); wxWindow * pTrackPanel = (wxWindow*)GetActiveProject()->GetTrackPanel(); + bool bIntercept = pWnd != pTrackPanel; + // Intercept keys from windows that are NOT panels + if( bIntercept ){ + bIntercept = pWnd && ( dynamic_cast(pWnd) == NULL ); + } //wxLogDebug("Focus: %p TrackPanel: %p", pWnd, pTrackPanel ); // We allow the keystrokes below to be handled by wxWidgets controls IF we are // in some sub window rather than in the TrackPanel itself. // Otherwise they will go to our command handler and if it handles them // they will NOT be available to wxWidgets. - if( pWnd != pTrackPanel ){ + if( bIntercept ){ switch( evt.GetKeyCode() ){ case WXK_LEFT: case WXK_RIGHT: From 349b66bbdd42aa5674aa3b177dd6e44363472cfe Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 10:18:05 +0100 Subject: [PATCH 24/85] Bug 1584 - Pinned / Unpinned tool tip inconsistency --- src/widgets/Ruler.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/widgets/Ruler.cpp b/src/widgets/Ruler.cpp index 0f367082b..85976ebd5 100644 --- a/src/widgets/Ruler.cpp +++ b/src/widgets/Ruler.cpp @@ -2853,11 +2853,10 @@ void AdornedRulerPanel::UpdateButtonStates() else pinButton->PushDown(); pinButton->SetAlternateIdx(state ? 0 : 1); + // Bug 1584: Toltip now shows what clicking will do. const auto label = state - // Label descibes the present state, not what the click does - // (which is, to toggle the state) - ? _("Pinned Record/Play head") - : _("Unpinned Record/Play head"); + ? _("Click to unpin") + : _("Click to pin"); common(*pinButton, wxT("PinnedHead"), label); } } From 8b14ac035925a66e31996ef0fa1df2f05d206e8b Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 10:45:49 +0100 Subject: [PATCH 25/85] Bug 718 - On dual monitors the splash screen is positioned incorrectly --- src/AudacityApp.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index 16196f9f7..f16d25058 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -1508,15 +1508,26 @@ bool AudacityApp::OnInit() AudacityProject *project; { + // Bug 718: Position splash screen on same screen + // as where Audacity project will appear. + wxRect wndRect; + bool bMaximized = false; + bool bIconized = false; + GetNextWindowPlacement(&wndRect, &bMaximized, &bIconized); + wxSplashScreen temporarywindow( logo, - wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, + wxSPLASH_NO_CENTRE | wxSPLASH_NO_TIMEOUT, 0, NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTAY_ON_TOP); + // Possibly move it on to the second screen... + temporarywindow.SetPosition( wndRect.GetTopLeft() ); + // Centered on whichever screen it is on. + temporarywindow.Center(); temporarywindow.SetTitle(_("Audacity is starting up...")); SetTopWindow(&temporarywindow); From 0caad3efe63cc7d3fd78501bd1e31c8704a4bc55 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 11:06:28 +0100 Subject: [PATCH 26/85] Bug 502 - Labels may disappear if partly before time zero --- src/LabelTrack.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/LabelTrack.cpp b/src/LabelTrack.cpp index 2c5cf8398..bf63eba8c 100644 --- a/src/LabelTrack.cpp +++ b/src/LabelTrack.cpp @@ -33,6 +33,7 @@ for drawing different aspects of the label and its text box. #include #include +#include #include #include @@ -473,7 +474,9 @@ void LabelTrack::ComputeLayout(const wxRect & r, const ZoomInfo &zoomInfo) const // Initially none of the rows have been used. // So set a value that is less than any valid value. { - const int xStart = zoomInfo.TimeToPosition(0.0, r.x) - 100; + // Bug 502: With dragging left of zeros, labels can be in + // negative space. So set least possible value as starting point. + const int xStart = INT_MIN; for (auto &x : xUsed) x = xStart; } From b91160795dedce54745102027f8bb0908828772a Mon Sep 17 00:00:00 2001 From: David Bailes Date: Mon, 15 May 2017 13:05:35 +0100 Subject: [PATCH 27/85] Fix for keyboard commands for time shifting clips Commands didn't update history etc. Fix: Commands now call TrackPanel::MakeParentPushState. --- src/Menus.cpp | 24 ++++++++++++++++++------ src/Menus.h | 4 ++-- src/TrackPanel.cpp | 23 +++++++++++++++++++++-- src/TrackPanel.h | 4 +++- 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index bf40705db..36f536ea6 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -1438,8 +1438,8 @@ void AudacityProject::CreateMenusAndCommands() c->AddItem(wxT("CursorLongJumpLeft"), _("Cursor Long Jump Left"), FN(OnCursorLongJumpLeft), wxT("Shift+,")); c->AddItem(wxT("CursorLongJumpRight"), _("Cursor Long Jump Right"), FN(OnCursorLongJumpRight), wxT("Shift+.")); - c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("")); - c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("")); + c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("\twantKeyup")); + c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("\twantKeyup")); c->EndSubMenu(); ////////////////////////////////////////////////////////////////////////// @@ -3081,14 +3081,26 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) OnCursorLeft( true, true, bKeyUp ); } -void AudacityProject::OnClipLeft() +void AudacityProject::OnClipLeft(const wxEvent* evt) { - mTrackPanel->OnClipMove(false); + if (evt) { + mTrackPanel->OnClipMove(false, evt->GetEventType() == wxEVT_KEY_UP); + } + else { // called from menu item, so simulate keydown and keyup + mTrackPanel->OnClipMove(false, false); + mTrackPanel->OnClipMove(false, true); + } } -void AudacityProject::OnClipRight() +void AudacityProject::OnClipRight(const wxEvent* evt) { - mTrackPanel->OnClipMove(true); + if (evt) { + mTrackPanel->OnClipMove(true, evt->GetEventType() == wxEVT_KEY_UP); + } + else { // called from menu item, so simulate keydown and keyup + mTrackPanel->OnClipMove(true, false); + mTrackPanel->OnClipMove(true, true); + } } //this pops up a dialog which allows the left selection to be set. diff --git a/src/Menus.h b/src/Menus.h index 8291c2ba3..f4828db7a 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -160,8 +160,8 @@ void OnSelExtendRight(const wxEvent * evt); void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); -void OnClipLeft(); -void OnClipRight(); +void OnClipLeft(const wxEvent* evt); +void OnClipRight(const wxEvent* evt); void OnCursorShortJumpLeft(); void OnCursorShortJumpRight(); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 94f1fd2bb..7c2f194f6 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -455,6 +455,7 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, mMouseCapture = IsUncaptured; mSlideUpDownOnly = false; + mHSlideAmountTotal = 0.0; mLabelTrackStartXPos=-1; mCircularTrackNavigation = false; @@ -3983,10 +3984,27 @@ void TrackPanel::DoSlideHorizontal() } } -void TrackPanel::OnClipMove(bool right) +void TrackPanel::OnClipMove(bool right, bool keyUp) { - auto track = GetFocusedTrack(); + if (keyUp) { + if (mHSlideAmountTotal != 0.0) { + wxString message; + message.Printf(wxT("%s %s %.03f %s"), + _("Time shifted clips"), + mHSlideAmountTotal > 0 ? + /* i18n-hint: a direction as in left or right */ + _("right") : + /* i18n-hint: a direction as in left or right */ + _("left"), + fabs(mHSlideAmountTotal), + _("seconds")); + MakeParentPushState(message, _("Time-Shift"), UndoPush::CONSOLIDATE); + mHSlideAmountTotal = 0.0; + } + return; + } + auto track = GetFocusedTrack(); // just dealing with clips in wave tracks for the moment. Note tracks?? if (track && track->GetKind() == Track::Wave) { @@ -4012,6 +4030,7 @@ void TrackPanel::OnClipMove(bool right) desiredSlideAmount *= -1; mHSlideAmount = desiredSlideAmount; DoSlideHorizontal(); + mHSlideAmountTotal += mHSlideAmount; // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 6c765f9a6..d9b30de03 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -256,7 +256,7 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { // (ignoring any fisheye) virtual double GetScreenEndTime() const; - virtual void OnClipMove(bool right); + virtual void OnClipMove(bool right, bool keyUp); protected: virtual MixerBoard* GetMixerBoard(); @@ -682,6 +682,8 @@ protected: // us to undo the slide and then slide it by another amount double mHSlideAmount; + double mHSlideAmountTotal; // used for sliding horizontally using the keyboard + bool mDidSlideVertically; bool mRedrawAfterStop; From bc55087968601b39095e5cc19e4f79a341df7d5e Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 17:52:56 +0100 Subject: [PATCH 28/85] Bug 1492 - Using Scrub Ruler to start Scrub or then change to Seek removes the selection --- src/tracks/ui/Scrubbing.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 4f3daffa0..b86fefcd3 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -277,7 +277,11 @@ void Scrubber::MarkScrubStart( ControlToolBar * const ctb = mProject->GetControlToolBar(); // Stop any play in progress + // Bug 1492: mCancelled to stop us collapsing the selected region. + mCancelled = true; ctb->StopPlaying(); + mCancelled = false; + // Usually the timer handler of TrackPanel does this, but we do this now, // so that same timer does not StopPlaying() again after this function and destroy // scrubber state @@ -495,7 +499,8 @@ void Scrubber::ContinueScrubbingUI() if (mDragging && !state.LeftIsDown()) { // Dragging scrub can stop with mouse up // Stop and set cursor - mProject->DoPlayStopSelect(true, state.ShiftDown()); + bool bShift = state.ShiftDown(); + mProject->DoPlayStopSelect(true, bShift); wxCommandEvent evt; mProject->GetControlToolBar()->OnStop(evt); return; @@ -538,7 +543,8 @@ void Scrubber::StopScrubbing() if (HasStartedScrubbing() && !mCancelled) { const wxMouseState state(::wxGetMouseState()); // Stop and set cursor - mProject->DoPlayStopSelect(true, state.ShiftDown()); + bool bShift = state.ShiftDown(); + mProject->DoPlayStopSelect(true, bShift); } mScrubStartPosition = -1; From 52caef9775e1396392ef0c8ee5c4c992452d208e Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 21:52:30 +0100 Subject: [PATCH 29/85] Add tooltip for iconic help button. --- src/ShuttleGui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ShuttleGui.cpp b/src/ShuttleGui.cpp index 9580c62ab..9020f079a 100644 --- a/src/ShuttleGui.cpp +++ b/src/ShuttleGui.cpp @@ -2177,6 +2177,7 @@ std::unique_ptr CreateStdButtonSizer(wxWindow *parent, long buttons, wx // Replace standard Help button with smaller icon button. // bs->AddButton(safenew wxButton(parent, wxID_HELP)); b = new wxBitmapButton(parent, wxID_HELP, Help_xpm); + b->SetToolTip( _("Help") ); bs->AddButton( b ); } From 97cdd3194891e1b5fd95e4c9ec6e36ff9427dcf9 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 22:36:53 +0100 Subject: [PATCH 30/85] Bug 1541 - Residual: Wrong commands shown in tooltip I assumed that we had more than one binding to the same command. In fact the commands are different and I picked the wrong one. --- src/toolbars/ControlToolBar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 5e1e68a14..94058ea7d 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -260,14 +260,14 @@ void ControlToolBar::RegenerateTooltips() // With shift commands.push_back(_("Select to End")); // For the shortcut tooltip. - commands.push_back(wxT("SelCursorEnd")); + commands.push_back(wxT("SelEnd")); break; case ID_REW_BUTTON: commands.push_back(wxT("CursProjectStart")); // With shift commands.push_back(_("Select to Start")); // For the shortcut tooltip. - commands.push_back(wxT("SelStartCursor")); + commands.push_back(wxT("SelStart")); break; } ToolBar::SetButtonToolTip(*pCtrl, commands); From eaec68a0146c8506956f270f34d952425b83dab3 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 15 May 2017 23:17:10 +0100 Subject: [PATCH 31/85] Bug 1642 - (Windows) Adding a shortcut or toggling Extra Menus causes ENTER on dropdown to open new project --- src/Project.cpp | 14 +++++++++++++- src/commands/CommandManager.cpp | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Project.cpp b/src/Project.cpp index 181f928bf..48f60ff7c 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -2322,7 +2322,19 @@ bool AudacityProject::TryToMakeActionAllowed void AudacityProject::OnMenu(wxCommandEvent & event) { - +#ifdef __WXMSW__ + // Bug 1642: We can arrive here with bogus menu IDs, which we + // proceed to process. So if bogus, don't. + // The bogus menu IDs are probably generated by controls on the TrackPanel, + // such as the Project Rate. + // 17000 is the magic number at which we start our menu. + // This code would probably NOT be OK on Mac, since we assign + // some specific ID numbers. + if( event.GetId() < 17000){ + event.Skip(); + return; + } +#endif bool handled = mCommandManager.HandleMenuID(event.GetId(), GetUpdateFlags(), NoFlagsSpecifed); diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 17ba4d187..56eff575d 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -448,7 +448,7 @@ void CommandManager::PurgeData() mCommandIDHash.clear(); mCurrentMenuName = COMMAND; - mCurrentID = 0; + mCurrentID = 17000; } From 9da999d40c1b4f4f15ffe69d7d4e34cf181ac228 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 16 May 2017 03:05:34 -0400 Subject: [PATCH 32/85] Use OffsetTimeByPixels correctly... That is, don't assume uniformity of pixels per second, but supply the correct first argument. This will matter when there is a magnifier. But that will not be in the next version. --- src/TrackPanel.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 7c2f194f6..99bc6cd87 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -4017,17 +4017,21 @@ void TrackPanel::OnClipMove(bool right, bool keyUp) mCapturedClipIsSelection = track->GetSelected() && !mViewInfo->selectedRegion.isPoint(); mTrackExclusions.clear(); - CreateListOfCapturedClips(mViewInfo->selectedRegion.t0()); + auto t0 = mViewInfo->selectedRegion.t0(); + CreateListOfCapturedClips( t0 ); - double desiredSlideAmount = mViewInfo->OffsetTimeByPixels(0.0, 1); + auto newT0 = mViewInfo->OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); + auto desiredSlideAmount = newT0 - t0; // set it to a sample point, and minimum of 1 sample point + if (!right) + desiredSlideAmount *= -1; double nSamples = rint(wt->GetRate() * desiredSlideAmount); nSamples = std::max(nSamples, 1.0); desiredSlideAmount = nSamples / wt->GetRate(); - if (!right) desiredSlideAmount *= -1; + mHSlideAmount = desiredSlideAmount; DoSlideHorizontal(); mHSlideAmountTotal += mHSlideAmount; @@ -4035,12 +4039,11 @@ void TrackPanel::OnClipMove(bool right, bool keyUp) // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, // so t0 is adjusted so that it is. - double newT0 = mViewInfo->selectedRegion.t0() + mHSlideAmount; if (newT0 < mCapturedClip->GetStartTime()) newT0 = mCapturedClip->GetStartTime(); if (newT0 > mCapturedClip->GetEndTime()) newT0 = mCapturedClip->GetEndTime(); - double diff = mViewInfo->selectedRegion.t1() - mViewInfo->selectedRegion.t0(); + double diff = mViewInfo->selectedRegion.duration(); mViewInfo->selectedRegion.setTimes(newT0, newT0 + diff); ScrollIntoView(mViewInfo->selectedRegion.t0()); From ff2838e98d1eac948e250a2cd71f0bef5e2965ea Mon Sep 17 00:00:00 2001 From: David Bailes Date: Tue, 16 May 2017 10:26:12 +0100 Subject: [PATCH 33/85] Clip boundary command: minor change to Cursor to next clip boundary The command "cursor to next clip boundary" now finds the next clip boundary after selection end, rather than selection start. --- src/Menus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 36f536ea6..e0b23c4d6 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -6777,7 +6777,8 @@ void AudacityProject::OnCursorPrevClipBoundary() void AudacityProject::OnCursorClipBoundary(bool next) { std::vector results; - int nTracksSearched = FindClipBoundaries(mViewInfo.selectedRegion.t0(), next, results); + int nTracksSearched = FindClipBoundaries(next ? mViewInfo.selectedRegion.t1() : + mViewInfo.selectedRegion.t0(), next, results); if (results.size() > 0) { // note that if there is more than one result, each has the same time value. From 6d75d945726d666f46e1a5051dc19507a72a2da6 Mon Sep 17 00:00:00 2001 From: James Crook Date: Tue, 16 May 2017 12:28:20 +0100 Subject: [PATCH 34/85] Make Stem plots the default (when zoomed in) --- src/TrackArtist.cpp | 4 ++-- src/prefs/TracksPrefs.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 440990552..0e1840129 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -273,7 +273,7 @@ TrackArtist::TrackArtist() mdBrange = ENV_DB_RANGE; mShowClipping = false; - mSampleDisplay = 0; + mSampleDisplay = 1;// Stem plots by default. UpdatePrefs(); SetColours(); @@ -3214,7 +3214,7 @@ void TrackArtist::UpdatePrefs() { mdBrange = gPrefs->Read(ENV_DB_KEY, mdBrange); mShowClipping = gPrefs->Read(wxT("/GUI/ShowClipping"), mShowClipping); - gPrefs->Read(wxT("/GUI/SampleView"), &mSampleDisplay, 0); + gPrefs->Read(wxT("/GUI/SampleView"), &mSampleDisplay, 1); SetColours(); } diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index 35d75aaca..bfdfd8cfa 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -120,7 +120,7 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S) S.TieChoice(_("Display &samples:"), wxT("/GUI/SampleView"), - 0, + 1, mSampleDisplayChoice, mSampleDisplayCodes); S.SetSizeHints(mSampleDisplayChoice); From 7900aa51ba8c6ff9675a991b5405f9ae6f757980 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Tue, 16 May 2017 14:23:07 +0100 Subject: [PATCH 35/85] Update for commands which interact with clips using the keyboard. Changed the criterion for deciding when two clips are immediately next to each other, and made it into a function: WaveClip::SharesBoundaryWithNextClip. --- src/Menus.cpp | 14 ++++++-------- src/WaveClip.cpp | 14 ++++++++++++++ src/WaveClip.h | 3 +++ src/WaveTrack.cpp | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index e0b23c4d6..fa1829805 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -6606,9 +6606,8 @@ AudacityProject::FoundClipBoundary AudacityProject::FindNextClipBoundary(const W return clip->GetEndTime() > timeEnd; }); if (pStart != clips.end() && pEnd != clips.end()) { - if ((*pStart)->GetStartSample() == (*pEnd)->GetEndSample()) { - // boundary between two clips which are immediately next to each other. Tested for - // using samples rather than times because of rounding errors + if ((*pEnd)->SharesBoundaryWithNextClip(*pStart)) { + // boundary between two clips which are immediately next to each other. result.nFound = 2; result.time = (*pEnd)->GetEndTime(); result.index1 = std::distance(clips.begin(), pEnd); @@ -6653,9 +6652,8 @@ AudacityProject::FoundClipBoundary AudacityProject::FindPrevClipBoundary(const W return clip->GetEndTime() < timeEnd; }); if (pStart != clips.rend() && pEnd != clips.rend()) { - if ((*pStart)->GetStartSample() == (*pEnd)->GetEndSample()) { - // boundary between two clips which are immediately next to each other. Tested for - // using samples rather than times because of rounding errors + if ((*pEnd)->SharesBoundaryWithNextClip(*pStart)) { + // boundary between two clips which are immediately next to each other. result.nFound = 2; result.time = (*pStart)->GetStartTime(); result.index1 = static_cast(clips.size()) - 1 - std::distance(clips.rbegin(), pStart); @@ -6697,7 +6695,7 @@ double AudacityProject::AdjustForFindingStartTimes(const std::vectorGetEndTime() == time; }); if (q != clips.end() && q + 1 != clips.end() && - (*q)->GetEndSample() == (*(q+1))->GetStartSample()) { + (*q)->SharesBoundaryWithNextClip(*(q+1))) { time = (*(q+1))->GetStartTime(); } @@ -6715,7 +6713,7 @@ double AudacityProject::AdjustForFindingEndTimes(const std::vectorGetStartTime() == time; }); if (q != clips.end() && q != clips.begin() && - (*(q - 1))->GetEndSample() == (*q)->GetStartSample()) { + (*(q - 1))->SharesBoundaryWithNextClip(*q)) { time = (*(q-1))->GetEndTime(); } diff --git a/src/WaveClip.cpp b/src/WaveClip.cpp index aea155503..71ce8d494 100644 --- a/src/WaveClip.cpp +++ b/src/WaveClip.cpp @@ -1948,3 +1948,17 @@ void WaveClip::Resample(int rate, ProgressDialog *progress) mRate = rate; } } + +// Used by commands which interact with clips using the keyboard. +// When two clips are immediately next to each other, the GetEndTime() +// of the first clip and the GetStartTime() of the second clip may not +// be exactly equal due to rounding errors. +bool WaveClip::SharesBoundaryWithNextClip(const WaveClip* next) const +{ + double endThis = GetRate() * GetOffset() + GetNumSamples().as_double(); + double startNext = next->GetRate() * next->GetOffset(); + + // given that a double has about 15 significant digits, using a criterion + // of half a sample should be safe in all normal usage. + return fabs(startNext - endThis) < 0.5; +} diff --git a/src/WaveClip.h b/src/WaveClip.h index 0438b34d8..a4a9d41a2 100644 --- a/src/WaveClip.h +++ b/src/WaveClip.h @@ -378,6 +378,9 @@ public: bool GetIsPlaceholder() const { return mIsPlaceholder; } void SetIsPlaceholder(bool val) { mIsPlaceholder = val; } + // used by commands which interact with clips using the keyboard + bool SharesBoundaryWithNextClip(const WaveClip* next) const; + public: // Cache of values to colour pixels of Spectrogram - used by TrackArtist mutable std::unique_ptr mSpecPxCache; diff --git a/src/WaveTrack.cpp b/src/WaveTrack.cpp index edbd46f5d..f56e56ef0 100644 --- a/src/WaveTrack.cpp +++ b/src/WaveTrack.cpp @@ -2228,7 +2228,7 @@ WaveClip* WaveTrack::GetClipAtTime(double time) // second clip is found by the above code. So correct this. if (p != clips.rend() & p != clips.rbegin() && time == (*p)->GetEndTime() && - (*p)->GetEndSample() == (*(p-1))->GetStartSample()) { + (*p)->SharesBoundaryWithNextClip(*(p-1))) { p--; } From d36ac2cedbee316a8298e239b02846b4aff9b544 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 18 May 2017 07:06:22 -0400 Subject: [PATCH 36/85] Revert "Fix for keyboard commands for time shifting clips" This reverts commit b91160795dedce54745102027f8bb0908828772a. --- src/Menus.cpp | 24 ++++++------------------ src/Menus.h | 4 ++-- src/TrackPanel.cpp | 23 ++--------------------- src/TrackPanel.h | 4 +--- 4 files changed, 11 insertions(+), 44 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index fa1829805..1883194ac 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -1438,8 +1438,8 @@ void AudacityProject::CreateMenusAndCommands() c->AddItem(wxT("CursorLongJumpLeft"), _("Cursor Long Jump Left"), FN(OnCursorLongJumpLeft), wxT("Shift+,")); c->AddItem(wxT("CursorLongJumpRight"), _("Cursor Long Jump Right"), FN(OnCursorLongJumpRight), wxT("Shift+.")); - c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("\twantKeyup")); - c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("\twantKeyup")); + c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("")); + c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("")); c->EndSubMenu(); ////////////////////////////////////////////////////////////////////////// @@ -3081,26 +3081,14 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) OnCursorLeft( true, true, bKeyUp ); } -void AudacityProject::OnClipLeft(const wxEvent* evt) +void AudacityProject::OnClipLeft() { - if (evt) { - mTrackPanel->OnClipMove(false, evt->GetEventType() == wxEVT_KEY_UP); - } - else { // called from menu item, so simulate keydown and keyup - mTrackPanel->OnClipMove(false, false); - mTrackPanel->OnClipMove(false, true); - } + mTrackPanel->OnClipMove(false); } -void AudacityProject::OnClipRight(const wxEvent* evt) +void AudacityProject::OnClipRight() { - if (evt) { - mTrackPanel->OnClipMove(true, evt->GetEventType() == wxEVT_KEY_UP); - } - else { // called from menu item, so simulate keydown and keyup - mTrackPanel->OnClipMove(true, false); - mTrackPanel->OnClipMove(true, true); - } + mTrackPanel->OnClipMove(true); } //this pops up a dialog which allows the left selection to be set. diff --git a/src/Menus.h b/src/Menus.h index f4828db7a..8291c2ba3 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -160,8 +160,8 @@ void OnSelExtendRight(const wxEvent * evt); void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); -void OnClipLeft(const wxEvent* evt); -void OnClipRight(const wxEvent* evt); +void OnClipLeft(); +void OnClipRight(); void OnCursorShortJumpLeft(); void OnCursorShortJumpRight(); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 99bc6cd87..088b78fa7 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -455,7 +455,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, mMouseCapture = IsUncaptured; mSlideUpDownOnly = false; - mHSlideAmountTotal = 0.0; mLabelTrackStartXPos=-1; mCircularTrackNavigation = false; @@ -3984,28 +3983,11 @@ void TrackPanel::DoSlideHorizontal() } } -void TrackPanel::OnClipMove(bool right, bool keyUp) +void TrackPanel::OnClipMove(bool right) { - if (keyUp) { - if (mHSlideAmountTotal != 0.0) { - wxString message; - message.Printf(wxT("%s %s %.03f %s"), - _("Time shifted clips"), - mHSlideAmountTotal > 0 ? - /* i18n-hint: a direction as in left or right */ - _("right") : - /* i18n-hint: a direction as in left or right */ - _("left"), - fabs(mHSlideAmountTotal), - _("seconds")); - MakeParentPushState(message, _("Time-Shift"), UndoPush::CONSOLIDATE); - mHSlideAmountTotal = 0.0; - } - return; - } - auto track = GetFocusedTrack(); + // just dealing with clips in wave tracks for the moment. Note tracks?? if (track && track->GetKind() == Track::Wave) { auto wt = static_cast(track); @@ -4034,7 +4016,6 @@ void TrackPanel::OnClipMove(bool right, bool keyUp) mHSlideAmount = desiredSlideAmount; DoSlideHorizontal(); - mHSlideAmountTotal += mHSlideAmount; // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, diff --git a/src/TrackPanel.h b/src/TrackPanel.h index d9b30de03..6c765f9a6 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -256,7 +256,7 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { // (ignoring any fisheye) virtual double GetScreenEndTime() const; - virtual void OnClipMove(bool right, bool keyUp); + virtual void OnClipMove(bool right); protected: virtual MixerBoard* GetMixerBoard(); @@ -682,8 +682,6 @@ protected: // us to undo the slide and then slide it by another amount double mHSlideAmount; - double mHSlideAmountTotal; // used for sliding horizontally using the keyboard - bool mDidSlideVertically; bool mRedrawAfterStop; From 282abfce7fbae87f3a1469eab31cf7e203ffad35 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 15 May 2017 19:12:18 -0400 Subject: [PATCH 37/85] Abstract TrackPanel::GetSnapLeft() and ::GetSnapRight() --- src/TrackPanel.cpp | 24 +++++++++--------------- src/TrackPanel.h | 10 ++++++++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 088b78fa7..59a7bd199 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -534,8 +534,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, // This is used to snap the cursor to the nearest track that // lines up with it. mSnapManager = NULL; - mSnapLeft = -1; - mSnapRight = -1; // Register for tracklist updates mTracks->Connect(EVT_TRACKLIST_RESIZED, @@ -2064,8 +2062,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, // We create a NEW snap manager in case any snap-points have changed mSnapManager = std::make_unique(GetTracks(), mViewInfo); - mSnapLeft = -1; - mSnapRight = -1; + mSnapLeft = mSnapRight = -1; #ifdef USE_MIDI mStretching = false; @@ -2346,8 +2343,7 @@ void TrackPanel::StartSelection(int mouseXCoordinate, int trackLeftEdge) double s = mSelStart; if (mSnapManager) { - mSnapLeft = -1; - mSnapRight = -1; + mSnapLeft = mSnapRight = -1; bool snappedPoint, snappedTime; if (mSnapManager->Snap(mCapturedTrack, mSelStart, false, &s, &snappedPoint, &snappedTime)) { @@ -2393,8 +2389,7 @@ void TrackPanel::ExtendSelection(int mouseXCoordinate, int trackLeftEdge, origSel1 = sel1; if (mSnapManager) { - mSnapLeft = -1; - mSnapRight = -1; + mSnapLeft = mSnapRight = -1; bool snappedPoint, snappedTime; if (mSnapManager->Snap(mCapturedTrack, sel0, false, &sel0, &snappedPoint, &snappedTime)) { @@ -2413,8 +2408,7 @@ void TrackPanel::ExtendSelection(int mouseXCoordinate, int trackLeftEdge, !snappedTime) { sel0 = origSel0; sel1 = origSel1; - mSnapLeft = -1; - mSnapRight = -1; + mSnapLeft = mSnapRight = -1; } } @@ -7192,13 +7186,13 @@ void TrackPanel::DrawEverythingElse(wxDC * dc, } // Draw snap guidelines if we have any - if (mSnapManager && (mSnapLeft >= 0 || mSnapRight >= 0)) { + if ( mSnapManager && ( GetSnapLeft() >= 0 || GetSnapRight() >= 0 )) { AColor::SnapGuidePen(dc); - if (mSnapLeft >= 0) { - AColor::Line(*dc, (int)mSnapLeft, 0, mSnapLeft, 30000); + if ( GetSnapLeft() >= 0 ) { + AColor::Line(*dc, (int)GetSnapLeft(), 0, GetSnapLeft(), 30000); } - if (mSnapRight >= 0) { - AColor::Line(*dc, (int)mSnapRight, 0, mSnapRight, 30000); + if ( GetSnapRight() >= 0 ) { + AColor::Line(*dc, (int)GetSnapRight(), 0, GetSnapRight(), 30000); } } } diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 6c765f9a6..b3157c218 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -702,10 +702,16 @@ protected: // are the horizontal index of pixels to display user feedback // guidelines so the user knows when such snapping is taking place. std::unique_ptr mSnapManager; - wxInt64 mSnapLeft; - wxInt64 mSnapRight; + wxInt64 mSnapLeft { -1 }; + wxInt64 mSnapRight { -1 }; bool mSnapPreferRightEdge; +public: + wxInt64 GetSnapLeft () const { return mSnapLeft ; } + wxInt64 GetSnapRight() const { return mSnapRight; } + +protected: + NumericConverter mConverter; WaveTrack * mDrawingTrack; // Keeps track of which track you are drawing on between events cf. HandleDraw() From 227850f9cd6bfd275748baa9c9772e913356d82d Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 16 May 2017 04:06:06 -0400 Subject: [PATCH 38/85] Group some member variables into ClipMoveState --- src/TrackPanel.cpp | 284 ++++++++++++++++++++++++--------------------- src/TrackPanel.h | 34 ++++-- 2 files changed, 178 insertions(+), 140 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 59a7bd199..36246b858 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1881,7 +1881,7 @@ void TrackPanel::HandleSelect(wxMouseEvent & event) selectedClip->GetOffset(), selectedClip->GetEndTime()); } //Also, capture this track for dragging until we up-click. - mCapturedClipArray.push_back(TrackClip(w, selectedClip)); + mClipMoveState.capturedClipArray.push_back(TrackClip(w, selectedClip)); mMouseCapture = IsSliding; @@ -3325,7 +3325,7 @@ void TrackPanel::ForwardEventToEnvelope(wxMouseEvent & event) } } -void TrackPanel::HandleSlide(wxMouseEvent & event) +void TrackPanel::HandleSlide( wxMouseEvent & event ) { if (event.LeftDown()) StartSlide(event); @@ -3343,17 +3343,17 @@ void TrackPanel::HandleSlide(wxMouseEvent & event) mSnapManager.reset(); // Do not draw yellow lines - if (mSnapLeft != -1 || mSnapRight != -1) { - mSnapLeft = mSnapRight = -1; + if ( mClipMoveState.snapLeft != -1 || mClipMoveState.snapRight != -1) { + mClipMoveState.snapLeft = mClipMoveState.snapRight = -1; Refresh(false); } - if (!mDidSlideVertically && mHSlideAmount==0) + if (!mDidSlideVertically && mClipMoveState.hSlideAmount == 0) return; - for (size_t i = 0; i < mCapturedClipArray.size(); i++) + for (size_t i = 0; i < mClipMoveState.capturedClipArray.size(); i++) { - TrackClip &trackClip = mCapturedClipArray[i]; + TrackClip &trackClip = mClipMoveState.capturedClipArray[i]; WaveClip* pWaveClip = trackClip.clip; // Note that per TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1), // in the non-WaveTrack case, the code adds a NULL clip to mCapturedClipArray, @@ -3380,14 +3380,14 @@ void TrackPanel::HandleSlide(wxMouseEvent & event) consolidate = false; } else { - wxString direction = mHSlideAmount>0 ? + wxString direction = mClipMoveState.hSlideAmount > 0 ? /* i18n-hint: a direction as in left or right.*/ _("right") : /* i18n-hint: a direction as in left or right.*/ _("left"); /* i18n-hint: %s is a direction like left or right */ msg.Printf(_("Time shifted tracks/clips %s %.02f seconds"), - direction.c_str(), fabs(mHSlideAmount)); + direction.c_str(), fabs( mClipMoveState.hSlideAmount )); consolidate = true; } MakeParentPushState(msg, _("Time-Shift"), @@ -3443,10 +3443,9 @@ namespace { /// Prepare for sliding. void TrackPanel::StartSlide(wxMouseEvent & event) { - mHSlideAmount = 0.0; - mDidSlideVertically = false; + mClipMoveState = ClipMoveState{}; - mTrackExclusions.clear(); + mDidSlideVertically = false; const auto foundCell = FindCell(event.m_x, event.m_y); auto &vt = foundCell.pTrack; @@ -3459,7 +3458,7 @@ void TrackPanel::StartSlide(wxMouseEvent & event) double clickTime = mViewInfo->PositionToTime(event.m_x, GetLeftOffset()); - mCapturedClipIsSelection = + mClipMoveState.capturedClipIsSelection = (vt->GetSelected() && clickTime > mViewInfo->selectedRegion.t0() && clickTime < mViewInfo->selectedRegion.t1()); @@ -3475,12 +3474,12 @@ void TrackPanel::StartSlide(wxMouseEvent & event) { #ifdef USE_MIDI if (!wt) - mCapturedClip = NULL; + mClipMoveState.capturedClip = NULL; else #endif { - mCapturedClip = wt->GetClipAtX(event.m_x); - if (mCapturedClip == NULL) + mClipMoveState.capturedClip = wt->GetClipAtX(event.m_x); + if (mClipMoveState.capturedClip == NULL) return; } @@ -3488,8 +3487,8 @@ void TrackPanel::StartSlide(wxMouseEvent & event) CreateListOfCapturedClips(clickTime); } else { - mCapturedClip = NULL; - mCapturedClipArray.clear(); + mClipMoveState.capturedClip = NULL; + mClipMoveState.capturedClipArray.clear(); mCapturedTrack = vt; } @@ -3505,15 +3504,15 @@ void TrackPanel::StartSlide(wxMouseEvent & event) mSnapManager = std::make_unique(GetTracks(), mViewInfo, - &mCapturedClipArray, - &mTrackExclusions, + &mClipMoveState.capturedClipArray, + &mClipMoveState.trackExclusions, true); // don't snap to time - mSnapLeft = -1; - mSnapRight = -1; + mClipMoveState.snapLeft = -1; + mClipMoveState.snapRight = -1; mSnapPreferRightEdge = false; - if (mCapturedClip) { - if (fabs(mSelStart - mCapturedClip->GetEndTime()) < - fabs(mSelStart - mCapturedClip->GetStartTime())) + if (mClipMoveState.capturedClip) { + if (fabs(mSelStart - mClipMoveState.capturedClip->GetEndTime()) < + fabs(mSelStart - mClipMoveState.capturedClip->GetStartTime())) mSnapPreferRightEdge = true; } @@ -3522,36 +3521,41 @@ void TrackPanel::StartSlide(wxMouseEvent & event) void TrackPanel::CreateListOfCapturedClips(double clickTime) { + auto &state = mClipMoveState; + auto &trackList = *GetTracks(); + auto &capturedTrack = *mCapturedTrack; + // The captured clip is the focus, but we need to create a list // of all clips that have to move, also... - mCapturedClipArray.clear(); + state.capturedClipArray.clear(); // First, if click was in selection, capture selected clips; otherwise // just the clicked-on clip - if (mCapturedClipIsSelection) { - TrackListIterator iter(GetTracks()); + if ( state.capturedClipIsSelection ) { + TrackListIterator iter( &trackList ); for (Track *t = iter.First(); t; t = iter.Next()) { if (t->GetSelected()) { AddClipsToCaptured(t, true); if (t->GetKind() != Track::Wave) - mTrackExclusions.push_back(t); + state.trackExclusions.push_back(t); } } } else { - mCapturedClipArray.push_back(TrackClip(mCapturedTrack, mCapturedClip)); + state.capturedClipArray.push_back + (TrackClip( &capturedTrack, state.capturedClip )); // Check for stereo partner - Track *partner = mCapturedTrack->GetLink(); + Track *partner = capturedTrack.GetLink(); WaveTrack *wt; - if (mCapturedClip && + if (state.capturedClip && // Assume linked track is wave or null nullptr != (wt = static_cast(partner))) { WaveClip *const clip = FindClipAtTime(wt, clickTime); if (clip) - mCapturedClipArray.push_back(TrackClip(partner, clip)); + state.capturedClipArray.push_back(TrackClip(partner, clip)); } } @@ -3562,34 +3566,34 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) // clips are considered (the effect is like recursion and terminates // because AddClipsToCaptured doesn't add duplicate clips); to remove // this behavior just store the array size beforehand. - for (unsigned int i = 0; i < mCapturedClipArray.size(); ++i) { + for (unsigned int i = 0; i < state.capturedClipArray.size(); ++i) { // Capture based on tracks that have clips -- that means we // don't capture based on links to label tracks for now (until // we can treat individual labels as clips) - if (mCapturedClipArray[i].clip) { + if ( state.capturedClipArray[i].clip ) { // Iterate over sync-lock group tracks. - SyncLockedTracksIterator git(GetTracks()); - for (Track *t = git.StartWith(mCapturedClipArray[i].track); + SyncLockedTracksIterator git( &trackList ); + for (Track *t = git.StartWith( state.capturedClipArray[i].track ); t; t = git.Next() ) { AddClipsToCaptured(t, - mCapturedClipArray[i].clip->GetStartTime(), - mCapturedClipArray[i].clip->GetEndTime() ); + state.capturedClipArray[i].clip->GetStartTime(), + state.capturedClipArray[i].clip->GetEndTime() ); if (t->GetKind() != Track::Wave) - mTrackExclusions.push_back(t); + state.trackExclusions.push_back(t); } } #ifdef USE_MIDI // Capture additional clips from NoteTracks - Track *nt = mCapturedClipArray[i].track; + Track *nt = state.capturedClipArray[i].track; if (nt->GetKind() == Track::Note) { // Iterate over sync-lock group tracks. - SyncLockedTracksIterator git(GetTracks()); + SyncLockedTracksIterator git( &trackList ); for (Track *t = git.StartWith(nt); t; t = git.Next()) { AddClipsToCaptured(t, nt->GetStartTime(), nt->GetEndTime()); if (t->GetKind() != Track::Wave) - mTrackExclusions.push_back(t); + state.trackExclusions.push_back(t); } } #endif @@ -3611,6 +3615,8 @@ void TrackPanel::AddClipsToCaptured(Track *t, bool withinSelection) // Adds a track's clips to mCapturedClipArray within a specified time void TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1) { + auto &state = mClipMoveState; + if (t->GetKind() == Track::Wave) { for(const auto &clip: static_cast(t)->GetClips()) @@ -3619,15 +3625,15 @@ void TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1) { // Avoid getting clips that were already captured bool newClip = true; - for (unsigned int i = 0; i < mCapturedClipArray.size(); ++i) { - if (mCapturedClipArray[i].clip == clip.get()) { + for (unsigned int i = 0; i < state.capturedClipArray.size(); ++i) { + if ( state.capturedClipArray[i].clip == clip.get() ) { newClip = false; break; } } if (newClip) - mCapturedClipArray.push_back(TrackClip(t, clip.get())); + state.capturedClipArray.push_back( TrackClip(t, clip.get()) ); } } } @@ -3638,8 +3644,8 @@ void TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1) // Avoid adding a track twice bool newClip = true; - for (unsigned int i = 0; i < mCapturedClipArray.size(); ++i) { - if (mCapturedClipArray[i].track == t) { + for ( unsigned int i = 0; i < state.capturedClipArray.size(); ++i ) { + if ( state.capturedClipArray[i].track == t ) { newClip = false; break; } @@ -3653,7 +3659,7 @@ void TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1) return; } #endif - mCapturedClipArray.push_back(TrackClip(t, NULL)); + state.capturedClipArray.push_back(TrackClip(t, NULL)); } } } @@ -3686,30 +3692,32 @@ void TrackPanel::DoSlide(wxMouseEvent & event) // happens relative to the original horizontal position of // each clip... #ifdef USE_MIDI - if (mCapturedClipArray.size()) + if ( mClipMoveState.capturedClipArray.size() ) #else - if (mCapturedClip) + if ( mClipMoveState.capturedClip ) #endif { - for(i=0; iOffset(-mHSlideAmount); + for ( i = 0; i < mClipMoveState.capturedClipArray.size(); ++i ) { + if ( mClipMoveState.capturedClipArray[i].clip ) + mClipMoveState.capturedClipArray[i].clip->Offset + ( -mClipMoveState.hSlideAmount ); else - mCapturedClipArray[i].track->Offset(-mHSlideAmount); + mClipMoveState.capturedClipArray[i].track->Offset + ( -mClipMoveState.hSlideAmount ); } } else { - mCapturedTrack->Offset(-mHSlideAmount); + mCapturedTrack->Offset( -mClipMoveState.hSlideAmount ); Track* link = mCapturedTrack->GetLink(); if (link) - link->Offset(-mHSlideAmount); + link->Offset( -mClipMoveState.hSlideAmount ); } - if (mCapturedClipIsSelection) { + if ( mClipMoveState.capturedClipIsSelection ) { // Slide the selection, too - mViewInfo->selectedRegion.move(-mHSlideAmount); + mViewInfo->selectedRegion.move( -mClipMoveState.hSlideAmount ); } - mHSlideAmount = 0.0; + mClipMoveState.hSlideAmount = 0.0; // Implement sliding within the track(s) double desiredSlideAmount; @@ -3729,11 +3737,13 @@ void TrackPanel::DoSlide(wxMouseEvent & event) mtw->GetRate(); // set it to a sample point } // Adjust desiredSlideAmount using SnapManager - if (mSnapManager && mCapturedClipArray.size()) { + if (mSnapManager && mClipMoveState.capturedClipArray.size()) { trySnap = true; - if (mCapturedClip) { - clipLeft = mCapturedClip->GetStartTime() + desiredSlideAmount; - clipRight = mCapturedClip->GetEndTime() + desiredSlideAmount; + if ( mClipMoveState.capturedClip ) { + clipLeft = mClipMoveState.capturedClip->GetStartTime() + + desiredSlideAmount; + clipRight = mClipMoveState.capturedClip->GetEndTime() + + desiredSlideAmount; } else { clipLeft = mCapturedTrack->GetStartTime() + desiredSlideAmount; @@ -3748,9 +3758,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) desiredSlideAmount = rint(mtw->GetRate() * desiredSlideAmount) / mtw->GetRate(); // set it to a sample point } - if (mSnapManager && mCapturedClip) { - clipLeft = mCapturedClip->GetStartTime() + desiredSlideAmount; - clipRight = mCapturedClip->GetEndTime() + desiredSlideAmount; + if (mSnapManager && mClipMoveState.capturedClip) { + clipLeft = mClipMoveState.capturedClip->GetStartTime() + desiredSlideAmount; + clipRight = mClipMoveState.capturedClip->GetEndTime() + desiredSlideAmount; } } #endif @@ -3773,17 +3783,19 @@ void TrackPanel::DoSlide(wxMouseEvent & event) } // Take whichever one snapped (if any) and compute the NEW desiredSlideAmount - mSnapLeft = -1; - mSnapRight = -1; + mClipMoveState.snapLeft = -1; + mClipMoveState.snapRight = -1; if (newClipLeft != clipLeft) { double difference = (newClipLeft - clipLeft); desiredSlideAmount += difference; - mSnapLeft = mViewInfo->TimeToPosition(newClipLeft, GetLeftOffset()); + mClipMoveState.snapLeft = + mViewInfo->TimeToPosition(newClipLeft, GetLeftOffset()); } else if (newClipRight != clipRight) { double difference = (newClipRight - clipRight); desiredSlideAmount += difference; - mSnapRight = mViewInfo->TimeToPosition(newClipRight, GetLeftOffset()); + mClipMoveState.snapRight = + mViewInfo->TimeToPosition(newClipRight, GetLeftOffset()); } } } @@ -3794,14 +3806,14 @@ void TrackPanel::DoSlide(wxMouseEvent & event) // If the mouse is over a track that isn't the captured track, // decide which tracks the captured clips should go to. - if (mCapturedClip && mouseTrack != mCapturedTrack /*&& - !mCapturedClipIsSelection*/) + if ( mClipMoveState.capturedClip && mouseTrack != mCapturedTrack /*&& + !mCapturedClipIsSelection*/ ) { const int diff = TrackPosition(*mTracks, mouseTrack) - TrackPosition(*mTracks, mCapturedTrack); - for (unsigned ii = 0, nn = mCapturedClipArray.size(); ii < nn; ++ii) { - TrackClip &trackClip = mCapturedClipArray[ii]; + for ( unsigned ii = 0, nn = mClipMoveState.capturedClipArray.size(); ii < nn; ++ii ) { + TrackClip &trackClip = mClipMoveState.capturedClipArray[ii]; if (trackClip.clip) { // Move all clips up or down by an equal count of audio tracks. Track *const pSrcTrack = trackClip.track; @@ -3826,8 +3838,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) // Having passed that test, remove clips temporarily from their // tracks, so moving clips don't interfere with each other // when we call CanInsertClip() - for (unsigned ii = 0, nn = mCapturedClipArray.size(); ii < nn; ++ii) { - TrackClip &trackClip = mCapturedClipArray[ii]; + for ( unsigned ii = 0, + nn = mClipMoveState.capturedClipArray.size(); ii < nn; ++ii ) { + TrackClip &trackClip = mClipMoveState.capturedClipArray[ii]; WaveClip *const pSrcClip = trackClip.clip; if (pSrcClip) trackClip.holder = @@ -3838,8 +3851,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) // Now check that the move is possible bool ok = true; - for (unsigned ii = 0, nn = mCapturedClipArray.size(); ok && ii < nn; ++ii) { - TrackClip &trackClip = mCapturedClipArray[ii]; + for ( unsigned ii = 0, + nn = mClipMoveState.capturedClipArray.size(); ok && ii < nn; ++ii) { + TrackClip &trackClip = mClipMoveState.capturedClipArray[ii]; WaveClip *const pSrcClip = trackClip.clip; if (pSrcClip) ok = trackClip.dstTrack->CanInsertClip(pSrcClip); @@ -3847,8 +3861,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) if (!ok) { // Failure -- put clips back where they were - for (unsigned ii = 0, nn = mCapturedClipArray.size(); ii < nn; ++ii) { - TrackClip &trackClip = mCapturedClipArray[ii]; + for ( unsigned ii = 0, + nn = mClipMoveState.capturedClipArray.size(); ii < nn; ++ii) { + TrackClip &trackClip = mClipMoveState.capturedClipArray[ii]; WaveClip *const pSrcClip = trackClip.clip; if (pSrcClip) // Assume track is wave because it has a clip @@ -3859,8 +3874,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) } else { // Do the vertical moves of clips - for (unsigned ii = 0, nn = mCapturedClipArray.size(); ii < nn; ++ii) { - TrackClip &trackClip = mCapturedClipArray[ii]; + for ( unsigned ii = 0, + nn = mClipMoveState.capturedClipArray.size(); ii < nn; ++ii) { + TrackClip &trackClip = mClipMoveState.capturedClipArray[ii]; WaveClip *const pSrcClip = trackClip.clip; if (pSrcClip) { const auto dstTrack = trackClip.dstTrack; @@ -3885,19 +3901,19 @@ void TrackPanel::DoSlide(wxMouseEvent & event) return; } - mHSlideAmount = desiredSlideAmount; + mClipMoveState.hSlideAmount = desiredSlideAmount; DoSlideHorizontal(); - if (mCapturedClipIsSelection) { + if ( mClipMoveState.capturedClipIsSelection ) { // Slide the selection, too - mViewInfo->selectedRegion.move(mHSlideAmount); + mViewInfo->selectedRegion.move( mClipMoveState.hSlideAmount ); } if (slidVertically) { // NEW origin - mHSlideAmount = 0; + mClipMoveState.hSlideAmount = 0; } Refresh(false); @@ -3905,98 +3921,106 @@ void TrackPanel::DoSlide(wxMouseEvent & event) void TrackPanel::DoSlideHorizontal() { + auto &state = mClipMoveState; + auto &trackList = *GetTracks(); + auto &capturedTrack = *mCapturedTrack; + #ifdef USE_MIDI - if (mCapturedClipArray.size()) + if ( state.capturedClipArray.size() ) #else - if (mCapturedClip) + if ( state.capturedClip ) #endif { double allowed; double initialAllowed; - double safeBigDistance = 1000 + 2.0 * (mTracks->GetEndTime() - - mTracks->GetStartTime()); + double safeBigDistance = 1000 + 2.0 * ( trackList.GetEndTime() - + trackList.GetStartTime() ); do { // loop to compute allowed, does not actually move anything yet - initialAllowed = mHSlideAmount; + initialAllowed = state.hSlideAmount; unsigned int i, j; - for(i=0; iOffset(-safeBigDistance); } - if (track->CanOffsetClip(clip, mHSlideAmount, &allowed)) { - if (mHSlideAmount != allowed) { - mHSlideAmount = allowed; - mSnapLeft = mSnapRight = -1; // see bug 1067 + if ( track->CanOffsetClip(clip, state.hSlideAmount, &allowed) ) { + if ( state.hSlideAmount != allowed ) { + state.hSlideAmount = allowed; + state.snapLeft = state.snapRight = -1; // see bug 1067 } } else { - mHSlideAmount = 0.0; - mSnapLeft = mSnapRight = -1; // see bug 1067 + state.hSlideAmount = 0.0; + state.snapLeft = state.snapRight = -1; // see bug 1067 } - for(j=0; jOffset(safeBigDistance); } } } - } while (mHSlideAmount != initialAllowed); + } while ( state.hSlideAmount != initialAllowed ); - if (mHSlideAmount != 0.0) { // finally, here is where clips are moved + if ( state.hSlideAmount != 0.0 ) { // finally, here is where clips are moved unsigned int i; - for(i=0; iOffset(mHSlideAmount); + clip->Offset( state.hSlideAmount ); else - track->Offset(mHSlideAmount); + track->Offset( state.hSlideAmount ); } } } else { // For Shift key down, or // For non wavetracks, specifically label tracks ... - mCapturedTrack->Offset(mHSlideAmount); - Track* link = mCapturedTrack->GetLink(); + capturedTrack.Offset( state.hSlideAmount ); + Track* link = capturedTrack.GetLink(); if (link) - link->Offset(mHSlideAmount); + link->Offset( state.hSlideAmount ); } } void TrackPanel::OnClipMove(bool right) { + auto &viewInfo = *mViewInfo; + auto &state = mClipMoveState; auto track = GetFocusedTrack(); // just dealing with clips in wave tracks for the moment. Note tracks?? if (track && track->GetKind() == Track::Wave) { auto wt = static_cast(track); - mCapturedClip = wt->GetClipAtTime(mViewInfo->selectedRegion.t0()); - if (mCapturedClip == nullptr) + auto t0 = viewInfo.selectedRegion.t0(); + + state.capturedClip = wt->GetClipAtTime( t0 ); + if (state.capturedClip == nullptr) return; mCapturedTrack = track; - mCapturedClipIsSelection = track->GetSelected() && !mViewInfo->selectedRegion.isPoint(); - mTrackExclusions.clear(); + state.capturedClipIsSelection = + track->GetSelected() && !viewInfo.selectedRegion.isPoint(); + state.trackExclusions.clear(); - auto t0 = mViewInfo->selectedRegion.t0(); CreateListOfCapturedClips( t0 ); - auto newT0 = mViewInfo->OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); + auto newT0 = viewInfo.OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); auto desiredSlideAmount = newT0 - t0; // set it to a sample point, and minimum of 1 sample point @@ -4008,23 +4032,23 @@ void TrackPanel::OnClipMove(bool right) if (!right) desiredSlideAmount *= -1; - mHSlideAmount = desiredSlideAmount; + state.hSlideAmount = desiredSlideAmount; DoSlideHorizontal(); // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, // so t0 is adjusted so that it is. - if (newT0 < mCapturedClip->GetStartTime()) - newT0 = mCapturedClip->GetStartTime(); - if (newT0 > mCapturedClip->GetEndTime()) - newT0 = mCapturedClip->GetEndTime(); - double diff = mViewInfo->selectedRegion.duration(); - mViewInfo->selectedRegion.setTimes(newT0, newT0 + diff); + if (newT0 < state.capturedClip->GetStartTime()) + newT0 = state.capturedClip->GetStartTime(); + if (newT0 > state.capturedClip->GetEndTime()) + newT0 = state.capturedClip->GetEndTime(); + double diff = viewInfo.selectedRegion.duration(); + viewInfo.selectedRegion.setTimes(newT0, newT0 + diff); - ScrollIntoView(mViewInfo->selectedRegion.t0()); + ScrollIntoView( newT0 ); Refresh(false); - if (mHSlideAmount == 0.0) + if (state.hSlideAmount == 0.0) MessageForScreenReader( _("clip not moved")); } } diff --git a/src/TrackPanel.h b/src/TrackPanel.h index b3157c218..6a3eb11e3 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -155,6 +155,15 @@ private: const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click. +struct ClipMoveState { + WaveClip *capturedClip {}; + bool capturedClipIsSelection {}; + TrackArray trackExclusions {}; + double hSlideAmount {}; + TrackClipArray capturedClipArray {}; + wxInt64 snapLeft { -1 }, snapRight { -1 }; +}; + class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { public: @@ -658,10 +667,7 @@ protected: Track *mCapturedTrack; Envelope *mCapturedEnvelope; - WaveClip *mCapturedClip; - TrackClipArray mCapturedClipArray; - TrackArray mTrackExclusions; - bool mCapturedClipIsSelection; + ClipMoveState mClipMoveState; WaveTrackLocation mCapturedTrackLocation; wxRect mCapturedTrackLocationRect; wxRect mCapturedRect; @@ -678,10 +684,6 @@ protected: wxBaseArrayDouble mSlideSnapToPoints; wxArrayInt mSlideSnapLinePixels; - // The amount that clips are sliding horizontally; this allows - // us to undo the slide and then slide it by another amount - double mHSlideAmount; - bool mDidSlideVertically; bool mRedrawAfterStop; @@ -707,8 +709,20 @@ protected: bool mSnapPreferRightEdge; public: - wxInt64 GetSnapLeft () const { return mSnapLeft ; } - wxInt64 GetSnapRight() const { return mSnapRight; } + wxInt64 GetSnapLeft () const + { + if ( mMouseCapture == IsSliding ) + return mClipMoveState.snapLeft ; + else + return mSnapLeft ; + } + wxInt64 GetSnapRight() const + { + if ( mMouseCapture == IsSliding ) + return mClipMoveState.snapRight; + else + return mSnapRight; + } protected: From f7578193b42fcb72305fd168c03e9dbf918ed905 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 16 May 2017 04:11:51 -0400 Subject: [PATCH 39/85] TrackPanel::OnClipMove is a static function --- src/Menus.cpp | 19 +++++++++++-- src/Menus.h | 1 + src/TrackPanel.cpp | 70 ++++++++++++++++++++++------------------------ src/TrackPanel.h | 18 ++++++++---- 4 files changed, 64 insertions(+), 44 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 1883194ac..57ce81c07 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -3081,14 +3081,29 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) OnCursorLeft( true, true, bKeyUp ); } +void AudacityProject::DoClipLeftOrRight( bool right ) +{ + auto &panel = *GetTrackPanel(); + + auto amount = TrackPanel::OnClipMove + ( mViewInfo, panel.GetFocusedTrack(), + *GetTracks(), IsSyncLocked(), right ); + + panel.ScrollIntoView(mViewInfo.selectedRegion.t0()); + panel.Refresh(false); + + if ( amount == 0.0 ) + panel.MessageForScreenReader( _("clip not moved")); +} + void AudacityProject::OnClipLeft() { - mTrackPanel->OnClipMove(false); + DoClipLeftOrRight( false ); } void AudacityProject::OnClipRight() { - mTrackPanel->OnClipMove(true); + DoClipLeftOrRight( true ); } //this pops up a dialog which allows the left selection to be set. diff --git a/src/Menus.h b/src/Menus.h index 8291c2ba3..9d20aa76b 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -160,6 +160,7 @@ void OnSelExtendRight(const wxEvent * evt); void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); +void DoClipLeftOrRight( bool right ); void OnClipLeft(); void OnClipRight(); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 36246b858..7322b0fae 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -3484,7 +3484,9 @@ void TrackPanel::StartSlide(wxMouseEvent & event) } mCapturedTrack = vt; - CreateListOfCapturedClips(clickTime); + CreateListOfCapturedClips + ( mClipMoveState, *mViewInfo, *mCapturedTrack, *GetTracks(), + GetProject()->IsSyncLocked(), clickTime ); } else { mClipMoveState.capturedClip = NULL; @@ -3519,12 +3521,10 @@ void TrackPanel::StartSlide(wxMouseEvent & event) mMouseCapture = IsSliding; } -void TrackPanel::CreateListOfCapturedClips(double clickTime) +void TrackPanel::CreateListOfCapturedClips + ( ClipMoveState &state, const ViewInfo &viewInfo, Track &capturedTrack, + TrackList &trackList, bool syncLocked, double clickTime ) { - auto &state = mClipMoveState; - auto &trackList = *GetTracks(); - auto &capturedTrack = *mCapturedTrack; - // The captured clip is the focus, but we need to create a list // of all clips that have to move, also... @@ -3536,7 +3536,7 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) TrackListIterator iter( &trackList ); for (Track *t = iter.First(); t; t = iter.Next()) { if (t->GetSelected()) { - AddClipsToCaptured(t, true); + AddClipsToCaptured( state, viewInfo, t, true ); if (t->GetKind() != Track::Wave) state.trackExclusions.push_back(t); } @@ -3561,7 +3561,7 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) // Now, if sync-lock is enabled, capture any clip that's linked to a // captured clip. - if (GetProject()->IsSyncLocked()) { + if ( syncLocked ) { // AWD: mCapturedClipArray expands as the loop runs, so newly-added // clips are considered (the effect is like recursion and terminates // because AddClipsToCaptured doesn't add duplicate clips); to remove @@ -3576,7 +3576,7 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) for (Track *t = git.StartWith( state.capturedClipArray[i].track ); t; t = git.Next() ) { - AddClipsToCaptured(t, + AddClipsToCaptured(state, t, state.capturedClipArray[i].clip->GetStartTime(), state.capturedClipArray[i].clip->GetEndTime() ); if (t->GetKind() != Track::Wave) @@ -3591,7 +3591,8 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) SyncLockedTracksIterator git( &trackList ); for (Track *t = git.StartWith(nt); t; t = git.Next()) { - AddClipsToCaptured(t, nt->GetStartTime(), nt->GetEndTime()); + AddClipsToCaptured + ( state, t, nt->GetStartTime(), nt->GetEndTime() ); if (t->GetKind() != Track::Wave) state.trackExclusions.push_back(t); } @@ -3603,20 +3604,21 @@ void TrackPanel::CreateListOfCapturedClips(double clickTime) // Helper for the above, adds a track's clips to mCapturedClipArray (eliminates // duplication of this logic) -void TrackPanel::AddClipsToCaptured(Track *t, bool withinSelection) +void TrackPanel::AddClipsToCaptured + ( ClipMoveState &state, const ViewInfo &viewInfo, + Track *t, bool withinSelection ) { if (withinSelection) - AddClipsToCaptured(t, mViewInfo->selectedRegion.t0(), - mViewInfo->selectedRegion.t1()); + AddClipsToCaptured( state, t, viewInfo.selectedRegion.t0(), + viewInfo.selectedRegion.t1() ); else - AddClipsToCaptured(t, t->GetStartTime(), t->GetEndTime()); + AddClipsToCaptured( state, t, t->GetStartTime(), t->GetEndTime() ); } // Adds a track's clips to mCapturedClipArray within a specified time -void TrackPanel::AddClipsToCaptured(Track *t, double t0, double t1) +void TrackPanel::AddClipsToCaptured + ( ClipMoveState &state, Track *t, double t0, double t1 ) { - auto &state = mClipMoveState; - if (t->GetKind() == Track::Wave) { for(const auto &clip: static_cast(t)->GetClips()) @@ -3903,7 +3905,7 @@ void TrackPanel::DoSlide(wxMouseEvent & event) mClipMoveState.hSlideAmount = desiredSlideAmount; - DoSlideHorizontal(); + DoSlideHorizontal( mClipMoveState, *GetTracks(), *mCapturedTrack ); if ( mClipMoveState.capturedClipIsSelection ) { @@ -3919,12 +3921,9 @@ void TrackPanel::DoSlide(wxMouseEvent & event) Refresh(false); } -void TrackPanel::DoSlideHorizontal() +void TrackPanel::DoSlideHorizontal + ( ClipMoveState &state, TrackList &trackList, Track &capturedTrack ) { - auto &state = mClipMoveState; - auto &trackList = *GetTracks(); - auto &capturedTrack = *mCapturedTrack; - #ifdef USE_MIDI if ( state.capturedClipArray.size() ) #else @@ -3997,15 +3996,14 @@ void TrackPanel::DoSlideHorizontal() } } -void TrackPanel::OnClipMove(bool right) +double TrackPanel::OnClipMove + ( ViewInfo &viewInfo, Track *track, + TrackList &trackList, bool syncLocked, bool right ) { - auto &viewInfo = *mViewInfo; - auto &state = mClipMoveState; - auto track = GetFocusedTrack(); - - // just dealing with clips in wave tracks for the moment. Note tracks?? if (track && track->GetKind() == Track::Wave) { + ClipMoveState state; + auto wt = static_cast(track); auto t0 = viewInfo.selectedRegion.t0(); @@ -4013,12 +4011,12 @@ void TrackPanel::OnClipMove(bool right) if (state.capturedClip == nullptr) return; - mCapturedTrack = track; state.capturedClipIsSelection = track->GetSelected() && !viewInfo.selectedRegion.isPoint(); state.trackExclusions.clear(); - CreateListOfCapturedClips( t0 ); + CreateListOfCapturedClips + ( state, viewInfo, *track, trackList, syncLocked, t0 ); auto newT0 = viewInfo.OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); auto desiredSlideAmount = newT0 - t0; @@ -4033,7 +4031,7 @@ void TrackPanel::OnClipMove(bool right) desiredSlideAmount *= -1; state.hSlideAmount = desiredSlideAmount; - DoSlideHorizontal(); + DoSlideHorizontal( state, trackList, *track ); // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, @@ -4045,12 +4043,10 @@ void TrackPanel::OnClipMove(bool right) double diff = viewInfo.selectedRegion.duration(); viewInfo.selectedRegion.setTimes(newT0, newT0 + diff); - ScrollIntoView( newT0 ); - Refresh(false); - - if (state.hSlideAmount == 0.0) - MessageForScreenReader( _("clip not moved")); + return state.hSlideAmount; } + + return 0.0; } diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 6a3eb11e3..364d86faa 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -265,7 +265,9 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { // (ignoring any fisheye) virtual double GetScreenEndTime() const; - virtual void OnClipMove(bool right); + static double OnClipMove + (ViewInfo &viewInfo, Track *track, + TrackList &trackList, bool syncLocked, bool right); protected: virtual MixerBoard* GetMixerBoard(); @@ -392,10 +394,16 @@ protected: virtual void HandleSlide(wxMouseEvent & event); virtual void StartSlide(wxMouseEvent &event); virtual void DoSlide(wxMouseEvent &event); - virtual void DoSlideHorizontal(); - virtual void CreateListOfCapturedClips(double clickTime); - virtual void AddClipsToCaptured(Track *t, bool withinSelection); - virtual void AddClipsToCaptured(Track *t, double t0, double t1); + static void DoSlideHorizontal + ( ClipMoveState &state, TrackList &trackList, Track &capturedTrack ); + static void CreateListOfCapturedClips + ( ClipMoveState &state, const ViewInfo &viewInfo, Track &capturedTrack, + TrackList &trackList, bool syncLocked, double clickTime ); + static void AddClipsToCaptured + ( ClipMoveState &state, const ViewInfo &viewInfo, + Track *t, bool withinSelection ); + static void AddClipsToCaptured + ( ClipMoveState &state, Track *t, double t0, double t1 ); // AS: Handle zooming into tracks virtual void HandleZoom(wxMouseEvent & event); From 63ae687bafd1123bf4bf7d00070e1dd9f38dc8a2 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 18 May 2017 08:59:52 -0400 Subject: [PATCH 40/85] Consolidation of Undo items not limited to three --- src/UndoManager.cpp | 16 +++++++--------- src/UndoManager.h | 7 ++++--- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/UndoManager.cpp b/src/UndoManager.cpp index 4b6f564d0..2eca7c1f8 100644 --- a/src/UndoManager.cpp +++ b/src/UndoManager.cpp @@ -61,7 +61,6 @@ UndoManager::UndoManager() { current = -1; saved = -1; - consolidationCount = 0; ResetODChangesFlag(); } @@ -257,10 +256,9 @@ void UndoManager::PushState(const TrackList * l, { unsigned int i; - // If consolidate is set to true, group up to 3 identical operations. - if (((flags & UndoPush::CONSOLIDATE) != UndoPush::MINIMAL) && lastAction == longDescription && - consolidationCount < 2) { - consolidationCount++; + if ( ((flags & UndoPush::CONSOLIDATE) != UndoPush::MINIMAL) && + lastAction == longDescription && + mayConsolidate ) { ModifyState(l, selectedRegion, tags); // MB: If the "saved" state was modified by ModifyState, reset // it so that UnsavedChanges returns true. @@ -270,7 +268,7 @@ void UndoManager::PushState(const TrackList * l, return; } - consolidationCount = 0; + mayConsolidate = true; i = current + 1; while (i < stack.size()) { @@ -319,7 +317,7 @@ const UndoState &UndoManager::SetStateTo } lastAction = wxT(""); - consolidationCount = 0; + mayConsolidate = false; return stack[current]->state; } @@ -333,7 +331,7 @@ const UndoState &UndoManager::Undo(SelectedRegion *selectedRegion) *selectedRegion = stack[current]->state.selectedRegion; lastAction = wxT(""); - consolidationCount = 0; + mayConsolidate = false; return stack[current]->state; } @@ -360,7 +358,7 @@ const UndoState &UndoManager::Redo(SelectedRegion *selectedRegion) */ lastAction = wxT(""); - consolidationCount = 0; + mayConsolidate = false; return stack[current]->state; } diff --git a/src/UndoManager.h b/src/UndoManager.h index f4108ea3f..d64474203 100644 --- a/src/UndoManager.h +++ b/src/UndoManager.h @@ -30,8 +30,9 @@ UndoManager can also automatically consolidate actions into a single state change. If the "consolidate" argument to - PushState is true, then up to 3 identical events in a row - will result in one PushState and 2 ModifyStates. + PushState is true, then new changes may accumulate into the most + recent Undo state, if descriptions match and if no Undo or Redo or rollback + operation intervened since that state was pushed. Undo() temporarily moves down one state and returns the track hierarchy. If another PushState is called, the redo information @@ -143,7 +144,7 @@ class AUDACITY_DLL_API UndoManager { UndoStack stack; wxString lastAction; - int consolidationCount; + bool mayConsolidate { false }; SpaceArray space; unsigned long long mClipboardSpaceUsage {}; From a6310d770df110b41e024b70a7c7a9a60f590f17 Mon Sep 17 00:00:00 2001 From: James Crook Date: Thu, 18 May 2017 20:43:24 +0100 Subject: [PATCH 41/85] Fix Travis build Add return 0.0 This does not fix the windows build, which is complaining about deleted functions. --- src/TrackPanel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 7322b0fae..29232d419 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -3996,6 +3996,7 @@ void TrackPanel::DoSlideHorizontal } } +// This function returns the amount moved. Possibly 0.0. double TrackPanel::OnClipMove ( ViewInfo &viewInfo, Track *track, TrackList &trackList, bool syncLocked, bool right ) @@ -4009,7 +4010,7 @@ double TrackPanel::OnClipMove state.capturedClip = wt->GetClipAtTime( t0 ); if (state.capturedClip == nullptr) - return; + return 0.0; state.capturedClipIsSelection = track->GetSelected() && !viewInfo.selectedRegion.isPoint(); @@ -4045,7 +4046,6 @@ double TrackPanel::OnClipMove return state.hSlideAmount; } - return 0.0; } @@ -8300,7 +8300,7 @@ void TrackPanel::OnSpectrogramSettings(wxCommandEvent &) // Get here only from the wave track menu const auto wt = static_cast(mPopupMenuTarget); // WaveformPrefsFactory waveformFactory(wt); - TracksBehaviorsPrefsFactory tracksBehaviorsFactory(); + //TracksBehaviorsPrefsFactory tracksBehaviorsFactory(); SpectrumPrefsFactory spectrumFactory(wt); PrefsDialog::Factories factories; From 01f853f174e43e5d671b2f44775f17e2a51410de Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 18 May 2017 19:01:46 -0400 Subject: [PATCH 42/85] Fix Windows build --- src/TrackPanel.cpp | 2 +- src/TrackPanel.h | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 29232d419..59f4f7828 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -3443,7 +3443,7 @@ namespace { /// Prepare for sliding. void TrackPanel::StartSlide(wxMouseEvent & event) { - mClipMoveState = ClipMoveState{}; + mClipMoveState.clear(); mDidSlideVertically = false; diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 364d86faa..d786f03e3 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -162,6 +162,16 @@ struct ClipMoveState { double hSlideAmount {}; TrackClipArray capturedClipArray {}; wxInt64 snapLeft { -1 }, snapRight { -1 }; + + void clear() + { + capturedClip = nullptr; + capturedClipIsSelection = false; + trackExclusions.clear(); + hSlideAmount = 0; + capturedClipArray.clear(); + snapLeft = snapRight = -1; + } }; class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { From 4e187d0ce0ce436a11b77c6e431e41c185e39563 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 20 May 2017 09:25:18 +0100 Subject: [PATCH 43/85] Bug 1648 - Crash clicking Help icon in Spectrograms Settings --- src/prefs/PrefsDialog.cpp | 23 +++++++++++++++++------ src/prefs/PrefsDialog.h | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index de3c28539..6e4b9abb8 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -280,6 +280,10 @@ PrefsDialog::PrefsDialog S.EndHorizontalLay(); } else { + // TODO: Look into getting rid of mUniquePage and instead + // adding into mCategories, so there is just one page in mCategories. + // And then hiding the trrebook. + // Unique page, don't show the factory const PrefsNode &node = factories[0]; PrefsPanelFactory &factory = *node.pFactory; @@ -386,18 +390,25 @@ void PrefsDialog::OnCancel(wxCommandEvent & WXUNUSED(event)) EndModal(false); } +PrefsPanel * PrefsDialog::GetCurrentPanel() +{ + if( mCategories) + return static_cast(mCategories->GetCurrentPage()); + else + { + wxASSERT( mUniquePage ); + return mUniquePage; + } +} + void PrefsDialog::OnApply(wxCommandEvent & WXUNUSED(event)) { - if (mCategories) - static_cast(mCategories->GetCurrentPage())->Apply(); - else - mUniquePage->Apply(); + GetCurrentPanel()->Apply(); } void PrefsDialog::OnHelp(wxCommandEvent & WXUNUSED(event)) { - PrefsPanel* panel = static_cast(mCategories->GetCurrentPage()); - HelpSystem::ShowHelpDialog(this, panel->HelpPageName(), true); + HelpSystem::ShowHelpDialog(this, GetCurrentPanel()->HelpPageName(), true); } void PrefsDialog::OnTreeKeyDown(wxTreeEvent & event) diff --git a/src/prefs/PrefsDialog.h b/src/prefs/PrefsDialog.h index b545d985e..893e2d6d6 100644 --- a/src/prefs/PrefsDialog.h +++ b/src/prefs/PrefsDialog.h @@ -78,6 +78,7 @@ class PrefsDialog /* not final */ : public wxDialogWrapper private: void RecordExpansionState(); + PrefsPanel * GetCurrentPanel(); wxTreebook *mCategories{}; PrefsPanel *mUniquePage{}; Factories &mFactories; From f9827a57a728ed28a3d8cfffc50c362f32f3b5e9 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Sat, 20 May 2017 11:26:59 +0100 Subject: [PATCH 44/85] Minor fix for commands for shifting clips using the keyboard. Fix for minor bug introduced in commit 9da999d. The selection wasn't being updated by the actual slide amount. --- src/TrackPanel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 59f4f7828..b7ddadc8c 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -4019,8 +4019,8 @@ double TrackPanel::OnClipMove CreateListOfCapturedClips ( state, viewInfo, *track, trackList, syncLocked, t0 ); - auto newT0 = viewInfo.OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); - auto desiredSlideAmount = newT0 - t0; + auto desiredT0 = viewInfo.OffsetTimeByPixels( t0, ( right ? 1 : -1 ) ); + auto desiredSlideAmount = desiredT0 - t0; // set it to a sample point, and minimum of 1 sample point if (!right) @@ -4037,6 +4037,7 @@ double TrackPanel::OnClipMove // update t0 and t1. There is the possibility that the updated // t0 may no longer be within the clip due to rounding errors, // so t0 is adjusted so that it is. + double newT0 = t0 + state.hSlideAmount; if (newT0 < state.capturedClip->GetStartTime()) newT0 = state.capturedClip->GetStartTime(); if (newT0 > state.capturedClip->GetEndTime()) From c0b30e897d3d0c7f1923cfd7b47c238a0f4f321f Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 20 May 2017 13:01:33 +0100 Subject: [PATCH 45/85] Update HiContrast Theme The wave is now green, to match the known-good black/green contrast for this theme. Corresponding changes were made to the buttons, slider pips, label shading and draggers. Time before zero is now also a lighter blue which shows up better against black than the dark blue did. Sliders are now (almost) white rather than grey. Selection in label tracks now matches selection in wave tracks. Envelopes are now (almost) white. --- src/HiContrastThemeAsCeeCode.h | 7800 ++++++++++++++------------------ 1 file changed, 3495 insertions(+), 4305 deletions(-) diff --git a/src/HiContrastThemeAsCeeCode.h b/src/HiContrastThemeAsCeeCode.h index 2fb09961c..637d47473 100644 --- a/src/HiContrastThemeAsCeeCode.h +++ b/src/HiContrastThemeAsCeeCode.h @@ -7,4308 +7,3498 @@ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,184, 0,0,3,68,8,6,0,0,0,194,5,58,248,0,0,0,4,115,66,73, 84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236, - 157,121,124,84,213,249,255,63,207,93,102,159,201,14,33,64,88,68,131,236, - 171,136,251,130,8,174,32,26,183,10,213,214,221,106,107,213,86,91,43,46, - 95,171,184,116,177,86,173,86,69,127,106,155,74,1,87,20,173,80,21,53, - 236,59,1,100,39,9,217,183,89,239,242,252,254,184,119,38,147,144,73,38, - 201,4,209,222,55,175,97,38,103,206,61,203,157,153,251,156,115,238,115,158, - 15,53,44,42,96,88,88,88,28,21,164,205,220,254,93,55,193,194,226,7, - 131,4,0,190,25,37,212,214,155,204,76,68,196,209,231,68,133,68,141,228, - 200,71,30,202,142,240,29,207,138,178,176,120,220,143,199,126,94,191,163,161, - 38,189,95,90,104,241,47,222,211,147,105,76,180,156,104,123,102,60,115,161, - 16,105,138,184,250,142,233,147,81,181,179,122,88,195,161,198,15,9,52,94, - 118,201,27,212,144,218,7,132,127,103,228,103,220,152,57,48,253,208,190,149, - 7,234,236,94,123,104,225,173,239,232,173,203,233,42,223,195,114,196,139,243, - 250,200,0,176,184,180,76,1,160,181,87,206,154,252,231,79,112,219,60,197, - 7,66,251,46,63,164,29,218,224,243,251,170,52,187,86,115,205,201,115,186, - 244,121,117,183,61,173,203,185,254,235,203,68,17,82,122,77,164,234,134,134, - 234,198,138,140,236,244,183,0,160,182,170,238,74,95,150,183,87,166,45,251, - 111,26,212,186,23,79,252,151,214,81,121,55,127,115,149,171,73,109,56,189, - 182,190,182,95,70,90,198,27,175,159,252,94,32,62,189,186,166,38,47,43, - 51,243,45,0,168,174,169,185,50,43,51,179,212,35,249,150,63,55,233,205, - 0,0,92,243,229,5,174,218,250,218,171,51,210,50,14,68,211,37,151,40, - 48,243,132,218,183,142,253,166,189,243,176,234,133,23,228,129,161,144,19,0, - 178,142,61,54,140,233,211,21,34,58,236,28,91,131,77,11,139,212,34,69, - 95,48,243,72,0,111,2,104,138,166,17,209,100,243,153,153,121,6,128,95, - 154,199,200,0,62,4,240,8,17,133,163,249,101,123,190,212,247,164,1,211, - 11,46,58,246,242,245,175,109,172,24,112,74,254,84,173,73,43,155,48,123, - 92,125,223,241,121,202,226,59,146,51,116,0,48,227,207,23,8,129,154,64, - 90,175,130,156,190,7,214,149,126,51,106,198,112,215,250,127,111,130,211,231, - 240,53,85,250,179,115,10,178,51,106,118,215,76,28,124,218,192,213,27,222, - 222,88,149,53,36,235,148,202,146,170,3,0,2,241,229,48,179,7,192,40, - 36,184,184,182,130,0,84,1,216,213,250,2,196,204,130,249,62,136,168,195, - 178,218,27,20,116,52,96,136,203,39,38,89,95,238,211,163,70,157,208,199, - 225,24,14,194,104,0,184,178,127,255,117,165,161,208,150,59,215,111,40,6, - 80,222,214,65,117,161,90,236,109,220,131,242,172,178,127,246,169,204,67,131, - 167,126,154,93,115,238,254,180,248,211,234,128,232,175,189,112,252,69,73,127, - 94,169,104,79,60,215,124,121,129,232,20,221,158,160,230,191,35,215,217,247, - 142,204,62,225,45,26,212,34,0,72,235,147,241,83,155,104,31,22,212,252, - 78,167,232,126,234,154,47,47,104,122,253,228,247,18,158,163,91,190,249,145, - 232,20,157,189,37,146,159,244,100,249,52,130,80,116,203,55,63,18,0,80, - 44,189,151,47,2,224,109,0,240,244,242,221,38,145,108,179,9,182,11,110, - 249,230,71,251,0,48,0,217,147,229,251,153,68,178,24,77,159,127,201,219, - 8,213,68,18,246,97,132,219,221,251,245,211,78,155,156,249,249,242,179,194, - 233,153,83,72,32,42,221,185,179,216,182,186,120,69,112,239,222,165,206,1, - 3,118,117,230,164,90,88,88,116,14,41,238,181,7,192,8,24,63,102,0, - 104,125,113,203,6,48,17,128,13,198,133,126,135,249,220,92,128,215,105,19, - 100,129,92,57,46,156,120,251,196,94,85,59,106,214,110,89,184,109,221,241, - 23,23,252,72,173,85,43,198,93,61,166,126,205,27,235,148,142,26,117,201, - 95,47,22,154,42,155,210,178,6,103,14,172,218,85,189,122,236,101,163,73, - 215,117,20,156,115,44,182,188,191,245,51,128,134,86,110,175,122,101,252,143, - 198,32,210,20,161,227,207,27,154,179,249,189,173,107,115,10,178,71,159,251, - 240,148,253,192,254,248,226,198,0,248,188,19,231,100,49,128,43,0,132,90, - 165,63,6,96,54,128,93,0,78,106,175,0,102,238,15,224,12,0,175,39, - 200,50,155,153,255,69,68,129,4,239,131,153,251,192,184,224,30,15,32,51, - 81,190,9,233,25,51,254,48,102,212,173,233,178,60,57,93,150,221,113,86, - 243,242,122,69,241,127,113,198,233,43,238,92,191,225,207,197,181,181,239,181, - 62,182,54,88,75,154,164,65,113,71,176,221,190,21,114,165,125,201,36,233, - 36,84,201,21,147,122,41,185,223,2,168,110,175,159,169,110,79,148,217,95, - 94,36,248,228,52,87,93,164,230,186,28,123,239,59,101,193,230,102,102,175, - 12,155,205,204,226,117,137,110,159,76,242,157,149,225,67,181,105,114,198,75, - 179,191,188,200,255,218,201,239,28,102,144,175,255,250,50,65,18,36,143,95, - 109,186,43,221,150,57,52,164,5,203,0,216,67,90,176,209,38,218,227,211, - 15,232,208,237,0,32,64,200,116,136,206,126,117,145,154,187,108,162,253,190, - 136,22,110,116,136,78,59,128,76,135,232,236,19,77,207,25,155,209,180,255, - 211,67,109,246,225,220,222,189,207,255,253,240,225,247,166,131,243,245,202,170, - 190,74,101,149,96,190,53,84,217,37,93,25,218,177,107,163,191,184,248,81, - 247,9,39,44,232,236,57,182,176,176,72,14,33,238,53,199,61,115,220,223, - 104,149,135,91,229,143,225,112,200,130,36,73,4,6,116,6,50,6,165,211, - 25,15,156,58,22,2,111,220,178,164,228,149,1,83,242,7,156,243,224,89, - 25,35,47,25,46,182,215,40,127,101,147,35,231,184,236,190,181,251,235,86, - 143,153,53,146,148,144,2,45,162,161,177,188,17,36,16,152,217,157,63,177, - 95,225,134,183,55,87,145,104,216,216,227,167,23,184,42,74,42,63,6,35, - 173,85,113,170,249,172,39,241,0,90,205,0,227,56,30,64,111,0,199,38, - 106,55,51,75,204,124,57,128,109,0,110,109,167,139,175,2,248,43,51,159, - 220,78,158,28,0,125,1,100,36,202,112,86,78,206,172,151,39,140,123,62, - 223,233,156,226,149,36,183,198,12,61,238,225,149,36,119,127,167,243,156,191, - 79,24,255,226,244,220,222,231,183,62,94,137,40,34,131,161,177,10,85,211, - 16,78,15,226,27,239,151,200,84,178,191,1,144,245,233,87,159,10,109,84, - 11,0,88,126,236,177,135,125,134,221,109,207,200,219,143,177,95,184,244,20, - 193,35,249,92,21,161,242,75,51,109,217,115,29,162,211,45,9,18,136,136, - 96,12,168,136,136,72,18,36,56,68,167,59,211,150,61,183,34,84,126,169, - 71,242,185,174,93,49,243,176,246,58,4,151,173,60,120,240,68,183,228,185, - 86,18,36,129,136,4,34,18,100,193,214,34,29,128,40,64,32,1,2,1, - 16,37,65,18,220,146,231,218,242,224,193,19,101,193,102,139,30,23,159,62, - 244,218,1,246,182,206,205,196,244,244,11,158,24,53,242,165,44,187,237,100, - 2,255,7,160,179,65,244,13,4,1,16,4,64,215,101,173,226,208,184,234, - 121,143,63,27,218,188,121,70,162,115,108,97,97,209,61,18,94,192,186,84, - 152,8,184,92,46,56,37,7,4,115,114,71,0,114,71,247,22,206,121,236, - 204,11,154,170,154,182,124,251,229,174,95,31,119,193,144,252,179,239,61,195, - 123,214,175,79,143,213,127,193,19,211,98,175,25,200,172,222,89,253,205,232, - 75,70,144,26,209,12,163,166,51,88,7,88,103,128,161,30,92,87,86,209, - 107,104,206,164,173,31,150,236,139,30,39,74,98,126,90,158,175,111,42,251, - 20,135,10,195,8,170,109,189,201,204,4,224,31,48,140,151,11,128,191,157, - 178,106,0,204,1,240,14,51,223,206,204,238,54,242,36,172,11,0,6,123, - 220,131,31,30,62,236,190,52,89,238,221,222,90,39,3,240,73,82,238,163, - 195,135,223,59,54,45,189,119,252,123,254,234,6,59,27,109,7,192,80,89, - 133,174,107,208,160,0,64,186,170,171,244,202,39,47,103,69,31,127,91,246, - 188,0,0,31,205,56,95,96,34,103,170,219,35,218,4,111,142,167,151,163, - 78,169,62,51,215,217,119,158,67,116,250,36,161,121,145,129,136,96,216,57, - 3,211,200,249,114,157,125,231,213,41,213,103,58,69,183,227,186,175,46,137, - 125,143,110,43,190,70,150,4,41,51,215,217,247,121,135,232,116,10,16,192, - 204,196,204,146,36,72,217,241,233,173,17,32,192,33,58,157,185,206,190,207, - 75,130,148,109,14,94,40,62,61,47,47,47,203,230,149,91,27,250,220,63, - 140,25,125,123,154,36,229,70,207,195,160,143,62,90,102,215,244,179,25,124, - 31,71,63,83,34,232,77,77,189,43,159,152,119,171,57,91,183,176,176,72, - 49,41,53,112,81,100,200,240,72,30,56,101,39,64,4,54,127,233,199,156, - 51,72,62,235,161,51,238,41,43,41,223,120,96,235,193,75,211,6,251,242, - 78,190,109,178,107,202,111,207,20,66,141,225,216,76,37,45,207,151,47,218, - 69,23,216,48,104,74,80,129,18,82,160,70,84,232,26,131,153,25,204,129, - 138,146,202,210,236,99,178,206,222,252,254,214,0,235,140,33,103,12,22,107, - 15,212,173,236,137,62,181,133,105,212,192,204,179,0,108,5,48,11,64,155, - 163,250,86,16,12,3,150,9,224,105,0,11,204,123,124,201,34,252,250,184, - 130,115,114,29,142,145,201,120,37,48,128,116,155,109,194,203,39,79,158,28, - 159,30,169,247,123,155,231,225,198,11,214,57,250,10,10,43,0,144,193,224, - 170,176,20,26,23,150,66,67,222,248,244,255,101,215,158,58,148,52,89,138, - 95,158,142,182,199,206,192,159,97,60,158,2,48,15,192,19,0,158,55,31, - 127,3,48,159,129,249,233,54,91,126,235,246,216,211,109,153,65,53,48,33, - 219,222,251,57,151,232,206,182,139,29,159,74,187,104,135,75,116,103,103,219, - 123,63,87,167,84,143,147,72,118,196,26,69,162,39,172,133,255,224,18,221, - 3,226,13,37,0,79,88,11,63,221,70,250,97,6,212,37,186,7,132,181, - 240,211,48,150,240,91,164,75,36,63,149,54,196,227,137,63,254,201,145,35, - 79,72,147,164,147,226,150,57,194,0,208,103,233,82,255,160,15,63,250,61, - 24,167,2,252,177,89,25,244,198,198,201,85,79,61,53,177,195,142,90,88, - 88,116,26,169,227,44,93,71,38,25,178,44,35,164,134,16,209,35,96,102, - 136,118,1,163,174,24,225,14,213,133,94,94,255,198,166,10,214,180,57,233, - 67,124,27,2,101,193,244,232,113,117,165,245,95,142,154,57,2,97,127,4, - 59,62,221,201,186,206,65,93,209,156,154,170,131,117,6,129,234,35,1,5, - 255,249,253,39,161,105,15,159,83,238,233,229,158,178,253,147,29,95,14,58, - 121,16,137,146,208,238,242,103,42,49,157,111,22,1,152,6,227,222,100,116, - 153,51,89,111,73,221,204,59,5,134,19,76,82,199,253,100,224,64,185,143, - 195,113,146,44,8,178,206,201,152,56,128,152,237,153,89,89,103,237,123,252, - 177,247,129,87,140,180,96,196,219,110,227,88,19,64,200,208,161,227,144,187, - 244,227,129,141,199,160,198,85,61,205,54,38,127,119,198,216,17,21,192,250, - 104,123,36,179,61,199,234,204,87,13,252,112,201,134,246,202,221,51,125,218, - 25,196,124,77,235,246,216,51,109,35,178,237,189,31,119,137,238,60,155,96, - 107,175,136,22,152,121,243,178,108,189,94,217,219,176,107,118,52,189,46,82, - 51,61,199,222,251,98,155,96,139,63,175,228,215,26,199,250,164,244,139,162, - 233,166,81,139,13,48,226,141,156,77,176,145,83,116,94,212,160,214,45,116, - 139,94,138,79,247,74,190,139,242,207,237,189,49,206,127,73,236,235,114,12, - 75,179,217,220,209,207,133,184,165,179,210,160,37,75,190,222,116,217,101,23, - 122,155,26,110,214,65,143,160,169,201,163,86,85,12,103,230,247,27,23,15, - 77,186,207,22,22,22,29,211,35,51,184,214,56,36,7,124,54,31,98,23, - 45,98,216,211,236,56,245,182,147,122,157,120,197,137,31,86,172,174,92,238, - 74,115,197,126,221,162,40,34,84,31,198,246,79,118,176,205,109,155,174,134, - 212,137,154,162,15,99,141,71,19,209,0,6,55,1,192,89,247,158,46,8, - 18,5,27,202,26,155,52,77,135,174,38,109,35,186,141,185,100,245,49,128, - 139,97,120,149,118,199,197,155,0,104,108,176,56,90,69,162,204,5,94,143, - 29,224,19,58,85,3,51,228,140,204,41,46,217,22,91,90,20,245,246,103, - 155,198,194,37,147,46,104,80,237,26,182,245,222,140,10,173,124,73,150,208, - 167,164,114,96,243,82,112,129,215,227,48,219,99,3,112,223,158,233,211,18, - 126,8,123,166,79,115,3,120,12,204,66,235,246,244,25,153,243,176,67,116, - 30,35,9,18,197,27,153,142,32,34,72,130,68,46,201,117,76,158,167,223, - 115,209,116,143,228,251,189,83,114,217,227,203,34,34,182,11,142,71,227,211, - 141,37,218,102,167,42,142,27,52,16,17,156,146,203,110,23,28,143,198,123, - 190,18,17,108,162,221,222,251,164,204,155,163,105,167,15,24,32,51,211,152, - 142,218,59,226,95,255,138,12,248,240,163,63,9,58,159,8,198,66,2,141, - 193,178,101,114,210,29,182,176,176,72,138,35,98,224,162,68,13,157,87,240, - 33,199,150,133,44,33,27,57,233,57,152,242,211,179,135,212,237,173,155,31, - 159,87,87,53,104,154,14,127,85,160,84,178,75,37,186,170,111,103,157,55, - 131,209,36,8,130,71,16,133,225,162,44,30,167,134,181,2,111,111,79,158, - 40,10,16,164,35,54,121,3,128,159,3,56,59,133,229,69,175,194,167,153, - 91,50,194,237,101,238,98,13,20,111,255,117,93,79,234,243,103,6,20,53, - 130,176,63,140,128,30,192,151,145,255,34,60,116,216,166,4,217,47,7,112, - 73,59,197,221,14,96,82,91,237,177,11,142,65,48,207,3,39,57,51,109, - 149,151,16,231,4,36,146,216,71,99,173,117,89,76,16,242,218,72,111,93, - 86,236,111,141,53,16,132,60,196,13,58,140,85,114,134,108,147,114,218,109, - 27,161,49,209,123,3,62,250,104,51,3,175,1,156,208,155,214,194,194,162, - 235,28,89,3,71,14,100,201,89,200,181,245,65,134,158,13,173,65,69,217, - 214,50,126,247,169,15,190,74,203,79,187,170,69,195,36,17,162,40,192,215, - 199,235,97,141,157,255,249,253,114,99,132,77,240,48,120,175,32,11,235,69, - 187,176,69,180,139,43,67,141,161,15,135,95,52,140,4,73,128,166,38,179, - 221,173,251,16,209,147,0,174,2,80,143,238,159,71,50,203,120,1,192,45, - 68,180,8,128,51,81,230,109,141,77,97,128,138,59,93,11,163,88,30,56, - 40,102,56,21,93,79,232,196,18,119,12,160,3,106,131,134,96,69,16,56, - 0,156,227,158,14,231,206,237,83,219,105,207,67,123,166,79,107,237,205,138, - 61,211,167,157,8,224,161,68,237,241,171,77,91,67,90,80,87,244,8,116, - 232,73,25,57,102,134,14,29,138,30,65,64,13,232,65,61,16,51,188,33, - 61,176,55,164,5,91,151,69,33,61,176,187,141,116,227,205,184,217,94,180, - 236,144,22,68,72,15,236,70,156,241,141,165,215,135,203,162,249,151,239,221, - 171,0,88,223,98,238,201,109,207,196,119,79,157,58,116,247,180,115,231,19, - 97,33,3,219,113,198,25,29,110,159,177,176,176,232,28,71,102,137,146,28, - 200,146,179,145,46,100,64,14,217,16,169,143,160,108,71,25,23,255,107,205, - 78,61,162,143,234,59,170,207,204,166,154,166,146,104,126,77,213,52,81,22, - 112,220,148,99,169,169,218,255,73,175,227,115,114,207,123,236,92,135,205,37, - 131,136,210,4,73,192,200,139,135,209,232,89,35,105,212,140,225,174,130,115, - 142,163,72,147,130,111,63,251,22,190,94,222,246,92,239,83,10,17,253,19, - 192,89,0,254,11,227,92,118,101,153,50,186,129,252,38,24,198,237,45,51, - 61,97,89,47,239,217,163,148,133,66,43,20,93,79,254,162,40,73,138,148, - 147,189,194,55,99,70,236,24,85,106,222,135,119,152,45,225,216,148,146,5, - 22,160,151,2,167,201,103,162,127,90,254,180,253,85,223,22,228,30,82,215, - 183,211,158,97,102,127,98,236,153,62,205,6,224,65,68,239,251,182,209,158, - 67,107,171,239,174,83,170,55,7,212,0,39,99,228,90,25,55,174,87,106, - 55,151,151,150,199,234,173,14,87,222,19,84,3,129,176,22,134,110,174,64, - 50,51,5,212,192,221,173,211,209,198,61,56,29,58,194,90,24,65,53,16, - 8,168,129,187,163,78,69,209,244,128,230,15,28,92,86,245,231,184,38,105, - 165,193,224,230,186,72,36,230,65,75,64,139,101,133,111,167,76,73,219,59, - 109,218,175,32,208,106,34,154,77,30,143,95,202,238,181,57,153,224,1,22, - 22,22,157,163,71,13,156,67,112,32,219,150,141,12,49,19,182,136,13,74, - 125,4,101,59,203,248,243,55,191,216,89,87,91,63,86,200,192,41,95,191, - 183,114,103,56,28,174,180,187,237,177,145,112,70,191,244,137,59,151,237,210, - 72,32,12,63,255,120,87,213,183,213,159,246,42,200,206,3,193,69,2,145, - 32,9,16,237,18,116,157,13,175,74,48,26,203,26,160,134,213,64,195,161, - 198,125,237,181,41,213,16,209,26,24,247,225,78,133,113,49,235,148,55,36, - 140,200,41,231,17,209,11,109,133,111,74,128,254,216,246,146,165,229,161,208, - 198,164,238,84,49,67,202,206,222,152,126,221,117,75,227,235,144,211,220,13, - 113,153,204,101,55,196,76,43,65,208,9,84,43,176,128,33,105,199,78,45, - 247,151,23,244,151,243,87,123,15,214,124,75,95,124,29,111,92,219,106,207, - 239,246,76,159,22,239,53,113,51,128,169,237,181,71,13,106,91,234,154,234, - 230,52,169,13,155,2,106,128,85,93,141,55,64,135,159,4,232,80,117,21, - 1,53,192,77,106,195,166,218,64,205,156,244,222,105,91,163,239,167,201,25, - 203,252,90,227,11,65,205,175,199,149,197,153,182,236,146,54,210,91,220,131, - 139,150,29,212,252,186,95,107,124,33,211,150,93,2,128,227,211,155,212,134, - 23,14,126,86,185,46,190,77,119,109,220,88,92,167,42,95,69,207,3,19, - 100,227,236,130,246,76,159,58,75,144,197,21,76,120,140,136,92,96,134,228, - 245,126,149,253,203,95,30,49,207,95,11,139,255,37,82,106,224,162,251,169, - 236,112,32,199,150,131,12,49,19,114,216,152,177,85,238,169,196,138,133,223, - 84,212,213,212,143,69,6,78,249,234,157,175,75,252,141,254,202,45,239,108, - 13,45,123,226,115,221,225,179,199,70,189,245,165,13,7,53,85,139,25,170, - 227,167,21,228,31,218,86,249,77,175,161,189,122,193,156,1,176,174,3,58, - 67,141,168,168,223,95,143,3,235,15,178,43,219,61,9,140,154,86,205,138, - 94,107,132,36,30,128,97,164,58,229,169,66,68,117,68,244,5,128,241,0, - 118,38,121,24,3,88,74,68,57,68,244,97,167,234,3,132,93,77,254,93, - 127,44,45,123,40,44,138,229,135,79,191,226,107,97,8,94,239,161,140,91, - 111,123,212,214,175,127,139,208,80,158,172,52,127,52,143,174,49,212,144,138, - 96,67,0,208,1,102,174,147,4,145,193,168,21,72,200,118,216,28,107,92, - 118,247,206,89,83,47,171,186,234,214,185,154,24,10,55,135,116,107,187,61, - 46,0,247,2,192,158,233,211,134,3,120,164,163,246,132,107,34,117,46,151, - 107,107,117,160,106,142,95,107,220,238,87,155,88,213,85,168,230,74,106,244, - 190,23,0,68,211,253,106,19,251,181,198,237,213,129,170,57,233,174,244,45, - 204,28,139,157,165,178,210,224,22,189,143,5,52,127,113,64,243,199,202,33, - 162,38,183,232,125,188,117,122,180,142,104,249,1,205,143,128,230,47,118,139, - 222,199,137,168,169,117,122,68,143,204,107,220,235,111,189,223,177,252,231,107, - 215,63,91,167,40,135,162,95,162,111,167,77,27,181,119,218,185,111,1,194, - 219,4,26,102,158,51,132,37,169,188,106,230,37,127,33,162,50,88,88,88, - 164,156,148,110,19,32,81,208,123,103,228,34,83,202,4,135,24,161,166,16, - 234,14,213,99,235,23,219,42,194,170,114,157,148,46,172,45,94,178,178,46, - 35,63,61,180,249,157,173,45,134,230,239,222,245,161,142,69,5,102,65,168, - 239,85,144,51,117,235,135,37,235,135,157,55,212,165,107,58,10,166,30,155, - 189,249,157,173,69,32,92,165,171,58,194,77,17,8,162,128,134,178,6,28, - 88,119,144,157,105,206,241,254,202,166,131,178,219,214,58,196,86,3,128,213, - 48,156,54,58,90,66,148,1,108,65,219,27,172,163,46,154,9,167,20,68, - 180,134,153,39,3,120,45,65,25,81,170,0,60,64,68,207,180,19,151,50, - 97,61,108,190,247,175,237,219,23,255,110,222,60,184,23,47,186,77,107,108, - 156,172,55,54,182,216,48,46,120,189,126,193,235,253,42,251,238,187,159,117, - 12,27,190,168,117,57,46,175,59,162,233,26,212,136,14,165,81,69,168,54, - 4,169,78,194,186,236,53,147,38,120,39,85,139,36,225,218,115,174,107,51, - 92,215,105,59,118,40,13,40,232,168,61,179,247,156,59,117,33,116,125,54, - 0,79,71,237,129,128,200,63,79,253,88,191,230,203,11,182,86,135,170,102, - 171,54,245,13,0,199,56,68,39,197,47,85,70,29,63,66,90,144,235,149, - 218,111,235,35,117,179,211,156,105,91,95,63,249,189,48,0,188,100,126,143, - 94,63,249,61,109,206,138,139,235,131,106,224,106,1,194,151,54,193,150,171, - 67,103,0,122,132,195,117,77,74,99,44,29,230,236,204,104,134,192,42,43, - 8,168,77,229,77,74,227,213,30,25,117,54,216,51,116,232,45,210,171,74, - 106,235,212,160,118,216,210,226,234,250,250,69,119,172,223,32,62,50,108,216, - 125,125,156,246,179,101,18,110,2,53,239,123,80,116,93,41,11,134,54,254, - 161,172,236,161,5,23,95,188,184,245,241,22,22,22,169,33,222,192,105,230, - 35,234,245,213,250,162,171,194,48,22,54,24,134,32,216,186,48,214,67,108, - 35,27,71,26,85,212,87,52,96,243,178,205,213,161,80,104,142,224,163,245, - 251,215,238,175,113,103,57,67,27,222,222,212,225,50,220,71,247,127,18,158, - 246,200,57,165,57,199,101,143,221,242,254,182,47,242,70,229,102,31,88,87, - 74,153,3,51,175,173,221,83,91,239,206,114,157,89,242,241,142,101,125,70, - 244,70,233,198,242,128,59,211,61,169,169,162,233,160,236,144,235,63,248,213, - 71,205,134,210,96,7,12,175,190,100,103,101,141,68,212,214,189,173,5,48, - 130,4,87,180,119,48,17,85,1,56,143,153,219,115,23,63,143,136,118,118, - 16,116,185,20,192,124,0,253,218,171,111,228,140,25,139,153,185,184,234,169, - 39,39,106,85,85,195,97,196,222,4,128,117,98,118,246,230,236,95,222,181, - 50,209,12,65,132,4,77,209,17,169,137,32,92,30,198,72,26,141,253,182, - 125,147,14,84,28,216,37,233,114,237,221,211,126,213,233,96,203,109,180,231, - 98,0,10,128,251,58,106,207,218,199,183,235,0,240,250,201,239,133,174,254, - 226,252,13,245,145,186,171,69,18,223,34,162,129,138,30,81,53,24,30,68, - 34,36,149,136,244,38,181,97,79,125,164,238,106,143,236,221,240,250,201,239, - 181,30,216,0,0,230,159,180,56,124,237,138,153,229,141,106,195,61,14,209, - 249,34,128,136,170,171,170,162,71,20,167,228,138,165,107,172,69,152,89,3, - 0,34,138,168,44,134,27,213,134,123,220,146,167,28,128,18,209,194,138,36, - 72,145,144,22,140,165,111,126,126,101,194,123,160,203,42,43,23,92,187,238, - 235,181,119,13,30,118,78,31,167,243,36,130,126,2,0,48,132,226,178,96, - 112,197,147,187,182,44,221,81,31,182,130,45,91,88,244,32,49,3,71,68, - 43,209,106,70,23,127,1,38,162,87,97,132,161,74,136,206,90,164,177,162, - 33,180,242,221,85,92,125,160,250,78,239,64,207,71,165,219,15,214,216,125, - 142,208,166,133,155,59,117,177,92,242,219,165,129,105,143,156,115,32,163,95, - 250,168,218,221,117,189,73,165,151,61,245,222,240,136,99,71,168,159,151,124, - 190,95,211,53,110,216,213,116,70,94,255,188,3,213,7,171,43,250,230,244, - 15,188,250,179,215,14,171,131,136,34,0,186,117,95,206,60,15,111,1,120, - 43,238,239,118,103,131,68,180,174,157,247,118,154,207,9,203,32,162,58,0, - 15,39,211,62,211,96,188,195,204,239,251,151,27,251,169,220,167,159,161,16, - 145,134,187,238,78,120,92,182,59,27,181,77,181,24,92,125,44,42,237,135, - 166,87,133,42,119,13,18,142,169,217,47,239,173,233,138,113,235,110,123,226, - 9,105,193,136,91,118,111,170,172,171,184,46,236,11,253,41,164,5,183,107, - 154,166,2,128,40,138,37,14,209,201,13,13,13,119,248,124,190,77,33,45, - 152,56,164,63,128,136,30,9,185,37,207,7,53,145,170,55,195,90,184,87, - 36,18,209,106,183,54,82,214,200,180,112,150,35,59,154,158,17,85,198,96, - 230,13,118,209,190,220,45,121,62,8,107,225,208,27,167,188,175,95,250,223, - 179,35,204,188,209,46,218,255,19,77,175,255,182,189,104,108,192,142,250,240, - 174,27,215,174,125,241,178,97,195,94,57,37,18,113,0,192,78,32,252,204, - 206,157,10,140,89,175,128,118,102,234,22,22,22,221,131,44,13,42,11,139, - 163,7,75,240,212,194,34,117,28,209,125,112,22,22,22,22,22,22,71,138, - 118,21,189,139,138,138,168,176,176,144,163,207,137,10,137,206,2,143,249,229, - 121,217,42,191,242,172,32,210,226,65,103,12,250,60,80,30,172,113,103,186, - 66,43,231,175,238,146,66,244,196,235,198,11,106,72,117,101,14,204,200,104, - 44,111,28,22,172,15,125,8,96,188,100,147,54,104,138,214,7,132,127,187, - 179,221,55,122,114,220,135,170,190,173,174,147,29,114,168,248,239,171,254,167, - 21,189,39,102,100,200,0,176,178,182,182,67,5,237,167,75,174,56,193,46, - 57,138,107,148,170,203,235,244,250,13,174,176,179,74,151,244,154,103,238,127, - 54,85,138,222,73,145,168,156,83,254,60,90,36,162,116,165,73,189,33,82, - 175,84,216,51,228,183,0,32,92,171,92,105,75,147,123,201,30,233,111,204, - 92,247,197,237,235,59,84,244,62,237,217,49,46,197,175,157,30,169,87,250, - 217,210,228,55,190,186,103,99,32,62,61,92,23,201,179,167,219,140,242,235, - 34,87,218,211,109,165,178,91,92,254,223,91,215,5,0,96,242,188,145,174, - 72,189,114,181,45,77,62,16,77,79,86,209,251,133,27,110,144,67,126,191, - 177,113,63,51,51,92,147,153,169,60,248,224,131,150,162,183,133,69,15,19, - 187,231,86,84,84,116,152,162,119,97,97,225,100,243,153,139,138,138,218,84, - 244,46,44,44,140,69,162,16,165,108,41,179,32,103,122,222,132,220,203,247, - 44,223,87,145,51,52,123,170,30,210,203,142,57,125,80,125,230,224,76,101, - 229,43,201,25,58,0,152,120,237,120,33,210,20,73,243,229,249,250,214,236, - 169,253,38,127,98,63,215,222,226,253,176,57,101,95,168,33,156,237,203,243, - 102,52,85,52,77,236,125,124,175,213,123,191,222,87,229,205,245,156,210,80, - 218,120,152,162,119,81,81,81,151,20,189,11,11,11,91,180,181,168,168,40, - 166,232,93,88,88,216,97,89,237,13,10,58,26,48,196,229,19,147,172,47, - 119,206,128,1,39,164,203,114,76,65,251,228,236,172,117,181,17,101,203,252, - 189,123,19,42,104,251,21,63,42,67,149,168,243,212,254,51,163,33,19,1, - 71,96,154,172,219,118,255,238,247,191,171,14,11,225,218,199,127,245,120,151, - 238,15,185,221,238,220,25,121,121,39,248,100,121,56,96,180,135,128,117,245, - 170,178,101,209,193,210,98,191,223,223,161,162,247,172,217,179,68,219,22,217, - 163,69,180,59,68,187,116,135,166,104,91,184,146,139,0,128,136,126,42,214, - 139,195,180,176,234,20,109,226,83,179,102,15,105,90,240,218,130,132,231,232, - 138,235,47,23,229,45,114,111,85,213,158,212,117,93,67,37,138,242,111,24, - 38,16,131,226,210,35,168,52,20,189,1,220,38,84,11,54,73,18,47,184, - 226,250,130,125,76,96,236,132,12,198,207,132,42,65,140,166,47,126,243,29, - 132,130,109,250,182,0,0,70,244,234,213,123,214,192,254,147,235,182,109,61, - 75,116,185,167,16,17,113,117,117,113,186,199,179,226,175,79,63,189,244,150, - 59,239,180,156,76,44,44,122,144,148,42,122,59,156,54,27,137,68,54,159, - 29,199,157,55,164,87,67,89,211,218,3,197,251,214,245,157,152,247,35,221, - 175,85,12,58,117,96,253,238,207,247,116,24,125,99,210,79,39,10,161,134, - 80,154,167,183,103,96,227,161,198,213,131,38,15,32,157,25,121,163,250,224, - 192,154,3,159,1,52,180,161,172,241,149,193,167,14,132,26,82,169,223,216, - 188,156,253,107,14,174,245,229,121,71,143,190,124,228,126,160,133,207,193,17, - 87,244,46,42,42,234,80,209,187,168,168,232,95,133,133,133,9,99,16,22, - 21,21,37,165,232,125,140,219,61,99,206,192,1,183,186,69,113,178,75,148, - 226,183,9,92,30,208,84,255,195,195,135,173,152,191,103,239,159,119,250,253, - 135,41,104,251,35,126,210,69,29,154,67,69,153,124,0,98,131,188,228,88, - 177,0,141,98,253,36,159,150,222,37,69,239,161,217,57,51,102,246,205,187, - 213,41,10,147,157,162,216,162,61,65,77,243,223,49,100,200,138,69,165,165, - 127,222,82,89,153,80,209,123,214,143,103,9,146,93,114,69,130,202,117,14, - 143,237,78,65,18,221,172,179,23,198,119,15,0,188,146,77,244,9,2,238, - 12,53,69,106,37,167,244,210,172,31,207,242,47,120,117,193,97,6,249,178, - 235,46,19,72,18,60,145,176,114,151,205,37,13,213,84,42,99,102,187,174, - 234,141,45,210,21,28,96,83,234,136,128,76,81,22,250,69,2,202,93,130, - 44,220,199,170,222,40,72,130,157,136,50,69,137,250,68,211,179,123,101,53, - 29,216,115,176,205,62,140,239,221,251,252,11,242,250,220,235,212,144,79,129, - 64,95,221,31,136,41,122,107,213,213,87,106,85,149,27,255,122,255,253,143, - 222,242,240,195,150,162,183,133,69,15,145,82,69,111,89,22,5,81,20,99, - 138,222,158,94,46,26,126,217,208,177,32,222,120,96,93,233,43,57,35,179, - 7,140,42,28,145,145,63,169,127,187,81,145,67,13,33,135,175,143,183,175, - 191,202,191,122,224,137,249,164,42,26,116,85,71,176,46,8,34,67,209,59, - 251,152,172,194,189,95,239,175,34,179,7,125,199,228,185,234,75,27,62,6, - 190,59,69,239,162,162,34,169,168,168,40,105,69,239,162,162,162,110,41,122, - 143,240,249,102,221,60,120,240,243,217,54,219,20,135,40,186,117,48,226,31, - 14,81,116,103,217,108,231,220,124,204,224,23,199,166,167,29,166,160,173,169, - 170,200,96,232,172,67,211,117,40,238,8,118,56,182,193,163,249,190,1,144, - 245,187,255,251,93,194,123,180,15,246,233,115,216,114,220,152,222,189,103,93, - 213,191,223,243,25,178,60,197,33,136,110,102,35,4,88,244,225,16,68,119, - 186,44,159,115,69,255,126,47,78,232,147,123,88,123,30,232,211,199,254,163, - 153,231,8,146,77,114,133,155,194,151,218,220,182,185,130,44,186,65,4,16, - 76,185,83,50,66,52,19,65,144,69,183,205,109,155,27,110,10,95,42,217, - 36,215,37,215,30,174,232,45,201,162,45,212,16,60,81,180,139,215,146,32, - 8,32,8,36,144,32,8,66,171,116,18,201,4,68,34,9,130,32,218,197, - 107,67,13,193,19,5,65,176,145,64,230,177,205,233,67,71,31,223,166,26, - 195,240,236,236,11,46,206,235,243,146,91,148,78,22,136,254,67,140,179,153, - 232,27,163,31,4,98,150,245,166,166,113,77,255,249,244,217,103,31,122,200, - 82,244,182,176,232,33,82,171,232,45,0,54,187,13,54,81,110,81,112,250, - 192,52,97,212,85,195,47,8,53,134,182,28,42,57,244,235,62,227,114,243, - 71,206,28,238,29,49,99,88,44,219,248,107,198,196,31,146,217,88,222,248, - 205,128,73,253,73,83,117,35,54,160,206,209,8,27,0,160,214,236,169,173, - 72,235,235,155,116,96,109,105,108,11,128,32,10,249,174,12,215,119,162,232, - 93,84,84,212,37,69,239,162,162,162,219,139,138,138,58,173,232,221,219,97, - 31,124,121,255,126,247,185,36,177,67,5,109,167,40,230,94,217,191,255,189, - 131,92,238,22,10,218,161,198,160,29,104,142,222,161,179,6,54,130,81,1, - 64,186,166,107,116,203,253,55,103,69,31,55,206,189,94,0,128,223,76,28, - 39,112,171,24,139,249,153,25,131,207,203,205,189,207,33,138,45,234,104,11, - 135,32,230,94,144,155,123,111,65,86,118,139,188,186,36,122,181,116,183,35, - 20,12,158,233,244,57,231,73,178,232,19,12,227,102,64,104,241,90,32,130, - 36,139,62,167,207,57,47,20,12,158,41,202,146,227,146,159,52,27,185,194, - 27,47,147,73,18,50,29,62,231,243,162,36,58,137,0,48,8,204,18,73, - 148,29,159,30,31,19,153,193,32,2,68,73,116,58,124,206,231,73,162,108, - 48,75,96,227,171,24,77,247,101,250,178,108,118,91,139,243,224,114,185,114, - 47,206,203,187,221,33,74,185,209,180,187,87,175,94,38,68,34,103,235,192, - 125,96,86,99,29,8,135,123,7,63,251,236,214,23,94,120,193,82,244,182, - 176,232,1,122,196,139,82,130,4,135,232,128,77,180,1,198,213,3,0,208, - 123,84,47,121,68,225,240,123,234,74,235,54,86,31,168,185,212,213,219,153, - 87,48,237,56,215,200,89,195,133,72,80,137,205,84,92,25,206,124,65,22, - 92,70,36,123,134,22,81,161,42,26,52,85,3,235,48,174,64,204,129,250, - 210,134,82,95,174,247,236,253,107,14,6,192,140,220,97,189,69,127,181,255, - 136,197,245,51,141,26,138,138,138,186,173,232,109,222,227,75,22,97,70,159, - 188,115,210,101,57,105,69,111,183,36,77,184,185,224,184,22,10,218,106,32, - 124,184,162,55,55,79,205,53,227,182,101,6,3,85,138,168,140,83,68,101, - 200,237,191,251,89,182,255,248,190,164,75,98,139,61,147,83,114,122,157,227, - 147,37,59,146,80,244,6,48,223,41,74,249,87,14,30,216,162,61,97,143, - 43,179,73,85,38,56,221,206,231,36,155,152,45,8,29,251,174,8,2,65, - 178,137,217,78,183,243,185,96,56,48,78,132,24,167,232,45,120,20,69,249, - 131,36,139,3,4,161,197,146,131,71,81,148,167,15,79,143,139,48,13,99, - 192,38,201,226,0,69,81,98,138,222,241,233,36,226,41,95,134,175,133,162, - 247,204,254,125,78,176,75,98,243,18,54,115,24,0,238,222,176,193,255,235, - 85,171,126,175,51,159,202,128,161,232,13,130,30,10,77,14,252,247,191,150, - 162,183,133,69,15,208,163,138,222,34,73,112,138,18,20,45,2,21,170,17, - 135,80,38,228,159,220,223,173,248,149,151,247,126,177,175,130,117,125,142,59, - 215,185,33,92,27,137,41,122,251,107,3,95,14,56,161,63,212,176,138,178, - 141,229,204,140,160,174,233,78,93,107,86,244,86,35,26,54,253,115,99,104, - 204,229,163,202,29,105,246,41,165,27,203,191,236,85,208,139,4,145,142,152, - 40,156,233,124,115,196,21,189,207,202,201,145,211,109,182,147,36,18,100,61, - 89,1,3,102,187,199,235,61,235,185,171,175,126,31,88,101,52,50,162,182, - 171,232,205,172,11,32,100,48,116,212,219,107,63,206,9,245,70,147,189,105, - 154,52,48,123,183,123,96,255,3,25,104,64,228,0,0,32,0,73,68,65, - 84,136,11,251,233,147,229,147,68,162,99,153,113,213,61,171,86,181,171,232, - 61,111,194,132,51,8,124,141,203,229,62,235,137,43,174,120,31,88,11,0, - 56,148,145,54,194,227,242,60,46,218,164,60,74,194,184,69,33,129,32,217, - 164,60,47,123,94,105,172,105,138,41,122,43,33,101,186,195,237,184,152,196, - 120,245,84,38,53,164,142,181,57,229,139,162,233,134,6,14,132,232,217,23, - 226,5,82,69,34,155,44,95,164,4,149,133,146,67,162,248,116,187,205,118, - 81,254,224,254,27,227,39,235,105,162,125,152,75,52,150,103,141,140,45,3, - 104,255,122,205,154,175,31,24,54,236,66,151,203,117,51,1,143,32,18,241, - 232,13,13,195,1,188,147,116,135,45,44,44,146,226,136,236,131,147,69,27, - 156,146,11,18,153,246,148,24,178,75,194,208,105,5,189,142,61,233,184,15, - 235,119,53,44,183,187,236,177,200,243,130,32,32,18,80,81,186,177,156,37, - 135,52,93,83,180,137,186,170,15,131,142,22,138,222,35,102,14,19,72,164, - 96,176,54,212,164,235,58,88,139,218,139,158,199,188,223,150,82,69,239,162, - 162,34,46,42,42,234,80,209,59,207,233,232,130,162,55,32,121,60,83,236, - 146,20,211,153,19,56,25,69,111,16,147,14,77,214,81,154,182,31,245,122, - 221,18,47,165,151,52,244,114,181,90,86,107,86,244,158,55,97,66,194,15, - 97,222,132,9,166,162,55,4,209,229,158,34,139,98,172,61,234,128,220,135, - 69,155,116,140,32,10,157,208,243,54,197,244,68,129,68,155,116,140,51,205, - 21,83,244,150,108,242,239,5,89,180,183,40,139,136,73,22,30,141,79,55, - 66,245,52,59,85,233,241,138,222,0,4,89,180,147,44,60,138,120,69,111, - 0,130,36,218,123,245,237,29,83,244,6,0,189,57,84,90,66,30,220,178, - 37,242,171,85,171,254,164,19,157,200,192,66,80,199,42,224,22,22,22,157, - 231,136,110,244,142,26,58,39,185,224,147,188,240,146,23,62,183,15,163,206, - 30,57,196,95,229,111,161,232,205,154,14,93,215,17,110,136,148,138,146,88, - 194,58,111,103,54,20,189,73,32,15,9,52,92,16,133,227,116,69,47,112, - 164,59,242,4,65,0,137,71,180,59,61,166,232,109,110,201,72,189,162,119, - 43,235,207,156,164,162,55,0,77,83,161,132,85,68,244,48,182,169,91,161, - 230,245,75,164,154,144,188,162,55,90,42,122,67,146,12,69,111,238,220,104, - 129,99,255,129,4,18,98,78,64,2,81,31,112,75,197,81,2,88,128,144, - 215,58,189,249,221,182,202,102,8,16,242,226,223,53,23,116,33,138,98,187, - 138,222,96,78,168,232,253,235,149,43,55,3,120,141,18,59,54,89,88,88, - 116,131,35,107,224,72,134,87,244,32,93,74,135,155,189,208,131,58,234,14, - 214,242,170,119,215,126,229,202,118,181,80,244,38,81,128,32,8,112,102,56, - 60,172,179,115,211,194,45,49,69,111,0,123,5,81,88,47,200,180,69,144, - 133,149,74,48,242,97,255,9,253,72,16,9,186,118,100,66,251,21,22,22, - 246,152,162,119,97,97,97,187,138,222,7,131,161,174,41,122,3,197,98,175, - 94,49,195,169,234,156,180,162,183,22,212,17,169,143,0,53,192,40,199,88, - 216,202,75,71,181,234,66,11,69,239,121,19,38,28,166,232,61,111,194,132, - 150,138,222,64,177,152,153,21,107,143,30,86,182,106,17,77,143,126,134,201, - 222,95,4,0,93,211,161,69,52,93,83,212,152,162,183,170,104,123,117,85, - 67,43,131,73,154,170,238,110,35,29,241,247,224,98,101,51,160,171,26,52, - 85,109,86,244,54,255,211,20,29,74,40,210,34,112,52,1,235,227,255,230, - 4,241,70,159,28,63,126,232,227,19,38,204,39,96,33,51,91,241,185,44, - 44,122,128,35,179,68,73,50,188,162,23,110,114,67,84,36,168,1,21,181, - 101,117,188,243,171,93,59,117,149,71,101,14,72,159,25,106,10,197,20,189, - 117,77,215,4,145,144,55,50,151,66,141,225,79,210,250,249,114,199,94,61, - 218,33,217,68,128,144,70,2,33,127,98,63,26,48,41,159,242,39,246,115, - 229,141,202,35,53,164,162,124,211,33,56,211,156,71,76,209,187,176,176,48, - 229,138,222,133,133,133,29,42,122,127,86,89,169,212,69,34,43,84,238,132, - 162,183,40,40,130,207,187,194,57,113,98,236,24,93,76,78,209,155,32,128, - 107,129,227,197,225,200,114,101,79,171,110,40,47,72,175,215,91,108,0,107, - 80,148,21,26,115,66,69,239,121,19,38,180,84,244,22,4,69,240,184,87, - 56,70,142,140,181,71,222,91,118,119,36,164,108,86,35,42,235,106,199,70, - 46,102,220,84,29,106,68,229,72,72,217,220,80,211,24,171,55,28,12,223, - 163,132,213,64,252,160,135,25,164,70,212,187,91,167,131,155,127,11,241,11, - 164,186,166,67,9,171,1,53,162,222,205,220,108,254,116,77,135,26,86,3, - 165,251,202,226,21,189,209,16,14,111,14,104,90,66,69,239,199,198,143,79, - 123,124,252,248,95,233,68,171,9,152,13,155,205,47,248,124,155,219,233,166, - 133,133,69,23,233,81,3,39,147,12,175,228,133,71,240,64,82,37,104,1, - 21,181,229,117,188,245,139,109,59,3,254,192,88,114,227,148,29,171,119,238, - 84,21,181,82,182,203,177,145,176,59,203,61,177,124,203,33,13,68,232,63, - 174,175,171,161,188,241,211,180,60,159,161,232,77,68,36,18,4,73,48,60, - 254,116,195,169,50,88,27,132,174,106,129,96,125,240,136,42,122,23,22,22, - 166,68,209,187,176,176,240,133,214,209,83,218,65,95,84,86,186,180,78,81, - 146,86,244,22,189,190,141,238,51,207,92,26,95,135,232,178,183,82,244,70, - 11,69,111,128,116,2,106,5,38,228,186,114,167,214,133,235,10,178,196,236, - 213,206,154,166,111,177,109,123,83,124,21,159,84,86,44,109,80,212,141,113, - 73,191,155,55,97,66,219,138,222,96,8,30,247,70,231,164,73,75,175,191, - 254,250,88,123,178,3,129,45,74,83,120,142,18,81,55,169,17,141,147,153, - 141,235,154,14,53,162,177,18,81,55,69,2,145,57,110,159,59,166,232,109, - 115,200,203,84,69,123,65,137,168,58,235,177,233,26,219,93,246,146,54,210, - 117,192,116,111,53,211,88,103,40,17,85,87,21,237,5,187,203,94,2,115, - 55,65,52,93,137,40,47,28,220,119,176,133,106,196,194,178,178,226,144,170, - 125,213,124,86,155,21,189,231,77,152,48,139,128,21,68,244,24,0,23,192, - 16,28,142,175,92,167,157,102,41,122,91,88,244,0,169,85,244,54,175,20, - 18,100,248,36,159,97,216,204,25,91,67,101,3,74,138,119,86,4,154,2, - 99,225,198,41,219,87,109,47,9,135,194,149,7,86,29,12,109,126,103,171, - 46,59,229,216,168,55,80,27,56,168,107,122,204,80,245,27,147,151,95,127, - 176,225,155,180,190,105,205,138,222,108,236,38,215,84,13,129,234,0,106,246, - 214,176,205,107,255,78,20,189,11,11,11,235,10,11,11,187,164,232,93,88, - 88,152,83,88,88,216,105,69,239,67,161,240,174,15,106,106,31,82,4,161, - 99,69,111,167,243,144,103,218,180,71,175,188,233,230,22,161,161,28,94,151, - 63,218,20,214,1,77,209,16,9,134,77,239,18,174,19,73,96,0,181,68, - 148,45,75,182,53,118,217,190,243,169,71,158,174,250,211,223,255,165,9,138, - 218,162,210,125,53,181,187,150,215,215,63,164,10,84,110,90,140,152,162,247, - 188,9,19,154,21,189,193,32,187,253,144,235,148,83,31,189,233,174,187,91, - 180,199,217,224,175,179,57,196,173,145,166,200,28,37,162,108,87,195,170,97, - 228,116,142,245,37,214,87,157,163,179,40,86,34,202,246,72,83,100,142,236, - 146,183,32,78,209,91,215,185,65,146,165,199,180,136,86,172,70,84,112,180, - 28,129,154,36,89,122,60,62,61,230,112,98,78,211,216,84,139,215,34,90, - 177,36,75,143,67,48,20,189,227,211,85,93,155,215,88,223,216,98,191,99, - 32,16,40,95,116,176,252,217,160,166,29,138,166,205,27,59,118,212,19,227, - 199,191,5,224,109,34,67,209,27,0,20,129,202,253,35,70,252,229,198,27, - 111,180,20,189,45,44,122,128,148,26,56,18,4,61,221,157,14,143,104,204, - 216,162,134,109,251,55,59,42,246,108,222,119,1,59,244,177,59,215,237,220, - 17,14,134,43,247,175,58,24,218,242,238,182,216,16,125,245,235,107,227,135, - 235,245,105,121,190,169,7,215,149,6,152,141,81,122,222,232,220,236,218,125, - 117,69,32,248,89,99,40,33,21,154,162,33,80,19,64,205,158,26,182,185, - 108,227,195,13,161,131,162,93,76,164,232,189,2,192,151,29,60,138,209,13, - 69,111,115,54,55,25,70,156,206,246,54,122,87,1,248,69,97,97,225,212, - 232,94,186,54,232,80,209,251,171,178,178,197,234,89,103,223,36,101,100,124, - 34,216,237,126,99,51,124,243,67,176,219,253,98,70,198,39,105,133,133,55, - 253,232,222,123,15,11,9,101,119,216,35,96,134,174,50,180,144,134,72,189, - 2,165,74,193,158,224,238,73,58,184,90,32,17,127,125,248,185,234,191,62, - 252,92,245,115,15,63,87,253,183,223,191,24,107,211,3,101,101,135,45,143, - 126,185,103,207,98,117,242,73,55,137,62,223,39,100,179,249,193,60,123,222, - 248,241,51,192,252,48,152,61,100,44,199,125,226,153,62,253,166,54,67,84, - 17,69,222,126,99,113,200,230,178,109,85,253,234,108,37,172,126,171,133,85, - 142,206,178,216,252,23,157,69,105,97,149,149,176,250,173,234,87,103,219,92, - 182,173,255,158,255,239,240,194,55,22,197,218,248,239,249,255,214,116,85,175, - 231,16,95,173,132,213,114,93,211,193,204,70,240,22,141,235,226,211,1,48, - 235,28,53,130,108,46,77,150,115,136,175,102,141,235,192,208,153,185,69,122, - 125,85,125,157,170,168,135,197,192,220,90,93,177,104,209,129,3,183,214,42, - 202,26,157,245,179,73,18,87,146,64,151,155,129,76,160,129,149,90,69,89, - 243,126,69,213,77,15,60,243,140,165,232,109,97,209,67,196,239,131,43,5, - 112,0,205,23,230,94,173,242,38,161,232,29,97,137,36,86,131,26,2,245, - 65,28,216,178,191,58,18,81,230,8,46,90,95,181,187,186,198,225,181,133, - 246,126,189,191,195,117,167,245,255,220,24,30,115,197,168,131,190,62,222,177, - 7,214,28,252,34,99,64,122,118,205,158,90,242,228,120,174,245,87,250,235, - 237,94,219,153,165,235,203,150,101,228,167,163,118,95,93,192,238,177,79,10, - 213,135,14,138,178,84,191,246,141,245,58,46,235,158,162,119,97,97,97,151, - 21,189,11,11,11,171,0,156,87,84,84,212,174,162,119,97,97,225,206,14, - 130,46,39,165,232,253,203,39,158,88,92,84,84,84,220,248,238,187,19,245, - 198,134,22,138,222,130,215,183,217,123,225,133,43,11,11,11,219,156,33,8, - 16,107,116,149,151,169,77,106,129,82,167,32,31,3,80,45,85,157,95,93, - 95,189,95,100,177,246,245,255,123,163,211,30,59,191,251,211,159,22,191,248, - 226,139,197,254,207,62,155,168,251,155,90,40,122,11,110,207,102,247,153,103, - 174,188,254,250,235,219,108,207,255,237,217,171,3,192,130,249,11,66,179,174, - 153,181,65,13,168,87,19,209,91,32,26,200,154,166,234,166,226,182,64,164, - 106,10,116,37,162,237,81,3,234,213,146,93,218,176,96,254,130,54,163,30, - 191,253,234,219,225,75,175,189,180,92,15,107,247,104,146,246,34,192,17,214, - 89,213,116,85,17,236,98,44,157,153,35,48,203,7,81,132,136,194,122,88, - 187,71,112,136,229,0,20,93,83,21,34,138,104,90,115,250,230,53,155,19, - 222,3,93,91,89,185,160,58,18,89,123,78,110,238,57,94,89,62,137,217, - 80,244,38,18,138,27,21,101,197,210,242,242,165,251,234,235,173,96,203,22, - 22,61,8,53,44,42,224,84,201,157,140,255,253,143,109,189,7,189,51,82, - 39,228,54,86,55,238,118,230,56,14,84,236,170,8,202,46,89,219,241,233, - 183,29,58,96,180,150,57,25,115,197,40,193,157,229,22,149,64,68,10,55, - 70,134,102,121,178,183,231,120,179,149,109,165,219,36,157,245,51,93,30,215, - 74,167,199,25,108,172,105,84,188,46,95,100,217,203,203,245,182,202,233,110, - 191,150,68,30,22,226,13,81,178,106,0,137,250,213,221,246,180,35,111,36, - 134,183,108,150,1,192,62,108,184,146,72,133,32,90,206,163,27,103,248,252, - 33,255,136,144,18,110,106,160,186,253,172,112,40,157,50,212,191,61,245,98, - 199,222,149,73,180,39,89,18,149,51,243,154,153,212,16,106,144,124,14,111, - 174,166,234,186,202,74,25,0,72,36,143,20,37,65,106,8,53,238,243,57, - 124,53,186,170,235,139,223,90,204,137,202,155,57,103,6,9,18,73,122,68, - 63,78,87,245,112,80,15,237,45,173,59,160,245,201,206,99,159,195,39,235, - 17,125,180,174,66,214,4,117,37,0,22,117,233,4,65,66,141,96,19,118, - 233,42,43,11,231,47,226,11,175,62,95,18,116,233,68,65,66,157,96,19, - 74,22,252,125,161,2,0,68,36,213,47,60,78,73,213,121,176,4,79,45, - 44,82,135,165,232,109,97,113,20,97,25,56,11,139,212,97,25,56,11,11, - 11,139,30,194,26,176,124,183,72,0,224,157,81,146,6,227,30,155,138,150, - 194,160,45,238,193,144,225,195,22,141,223,151,180,97,140,139,60,207,141,139, - 10,52,179,206,232,254,175,248,24,241,50,154,239,11,234,205,135,199,94,107, - 230,223,98,220,123,241,222,143,102,211,98,105,42,0,173,113,81,65,200,172, - 211,97,190,167,153,207,106,92,25,209,254,8,113,109,72,228,132,163,183,241, - 90,48,95,11,0,244,198,69,5,65,160,251,203,86,157,33,85,75,134,86, - 157,63,252,186,172,58,143,92,157,22,223,29,209,11,121,211,165,179,102,117, - 248,97,204,2,232,210,184,215,0,176,96,193,130,14,143,35,64,155,53,107, - 22,1,192,43,48,2,77,92,58,107,22,112,184,182,92,24,201,133,168,106, - 207,249,225,176,246,196,213,25,57,44,55,128,221,187,119,235,107,214,172,137, - 79,138,207,23,95,158,14,0,227,198,141,163,65,131,6,181,219,192,104,157, - 22,22,201,192,115,231,10,141,48,246,248,51,32,124,2,208,233,48,55,209, - 197,194,130,182,24,112,197,15,10,163,191,135,104,192,111,17,45,7,134,173, - 53,17,99,222,192,209,56,98,230,32,84,66,243,32,146,112,248,111,41,58, - 120,212,227,242,180,232,70,92,27,181,184,99,226,223,143,175,243,7,213,207, - 101,0,159,217,254,181,201,226,8,35,1,0,1,58,22,244,172,176,112,212, - 16,190,114,77,65,139,191,209,189,32,197,73,209,70,157,45,96,102,55,90, - 254,168,162,95,218,248,141,219,209,253,113,42,17,213,183,50,136,9,235,180, - 176,72,134,86,222,64,60,165,141,223,5,29,150,13,64,203,45,45,135,13, - 14,219,90,113,225,56,17,171,232,78,127,179,236,54,157,146,58,73,194,50, - 24,16,30,5,240,179,184,164,31,98,63,45,142,30,58,37,151,195,204,237, - 238,155,163,86,210,32,223,23,136,40,200,204,215,193,144,189,233,136,87,0, - 124,128,35,96,152,127,168,48,243,112,24,225,188,0,96,11,17,245,120,168, - 42,102,206,4,240,9,128,77,0,238,33,162,242,35,80,167,11,0,136,168, - 195,96,202,143,0,184,211,124,221,153,229,255,142,104,171,172,84,150,223,201, - 182,232,0,132,159,53,255,253,131,236,167,197,209,67,210,6,142,153,179,0, - 100,0,72,195,225,247,166,116,0,245,219,182,109,171,29,58,116,104,117,10, - 219,119,196,32,162,255,50,243,139,73,228,187,15,109,47,107,252,224,48,103, - 182,58,128,8,17,165,114,196,122,25,128,7,204,215,15,2,232,81,3,199, - 204,231,32,38,50,138,177,0,46,97,230,51,137,168,71,66,100,49,243,96, - 34,218,5,67,109,226,29,102,46,131,17,152,123,37,17,181,25,0,192,158, - 237,138,189,30,88,120,188,32,200,2,118,189,177,249,187,28,48,118,247,59, - 222,230,241,142,94,205,226,245,151,228,228,8,118,34,188,85,81,241,131,235, - 167,197,209,65,103,5,79,119,116,240,126,118,87,27,210,26,102,30,12,224, - 70,0,247,196,37,31,132,161,20,253,87,34,74,165,156,140,14,160,154,136, - 38,49,243,55,137,50,17,209,36,0,213,248,31,88,103,103,230,113,48,34, - 192,0,192,45,0,158,107,39,251,81,11,51,15,0,240,54,90,126,102,110, - 0,143,50,243,133,68,212,230,6,241,110,212,55,18,192,6,24,23,190,90, - 0,101,0,250,0,248,12,192,7,204,124,51,17,29,22,47,245,222,219,238, - 209,111,93,100,44,107,239,41,218,218,214,247,107,211,136,137,5,195,43,131, - 181,173,52,134,90,213,15,70,142,51,3,155,86,150,108,6,48,162,59,93, - 113,186,236,60,232,248,252,230,16,103,73,64,2,97,247,214,125,8,6,194, - 109,54,50,84,225,111,142,52,83,89,217,102,63,39,251,124,195,235,53,173, - 221,48,75,58,128,52,81,196,87,13,13,221,239,167,32,240,72,183,187,227, - 156,173,216,232,247,35,168,235,71,204,105,197,162,243,116,214,192,29,11,99, - 22,55,16,64,145,153,86,8,96,15,140,31,115,183,97,102,17,192,125,104, - 150,85,137,192,144,164,145,1,244,5,240,52,128,71,152,249,152,20,47,51, - 213,2,216,149,200,200,153,198,109,23,82,212,207,163,25,102,62,19,192,127, - 208,236,21,58,143,153,9,192,11,41,158,201,117,212,14,1,0,83,2,201, - 153,36,25,131,195,239,151,48,12,21,117,27,128,148,25,56,102,62,21,198, - 242,117,244,194,189,22,192,117,0,10,0,252,17,192,121,0,254,31,51,95, - 68,68,117,157,44,190,233,227,226,55,177,100,255,231,216,133,196,161,43,7, - 163,15,206,239,127,58,122,211,216,166,132,153,146,36,167,111,54,222,94,245, - 2,26,2,77,104,80,253,29,26,86,159,228,134,207,229,193,180,227,174,193, - 190,29,7,19,230,237,128,166,127,204,157,139,166,117,235,160,249,19,71,187, - 19,221,110,120,199,142,69,254,47,126,209,237,126,246,183,219,81,244,219,223, - 66,107,108,132,30,234,248,235,32,56,28,16,189,94,76,157,59,23,219,131, - 135,5,116,178,56,138,72,218,192,17,81,53,51,215,194,112,182,136,73,128, - 236,220,185,115,255,144,33,67,214,1,208,134,14,29,218,173,153,141,121,17, - 189,22,205,198,237,53,0,37,0,214,193,88,26,29,6,224,14,0,94,0, - 27,152,249,84,34,42,105,171,172,46,160,3,70,160,230,4,70,110,151,249, - 126,235,62,70,183,59,164,199,165,125,47,151,105,227,8,192,8,75,150,11, - 163,191,30,0,207,2,120,29,205,14,105,9,97,230,52,0,103,194,152,189, - 172,38,162,164,34,163,196,29,47,2,184,13,128,3,198,61,207,118,195,163, - 117,64,123,6,57,101,75,75,204,124,50,128,127,195,56,87,26,0,152,203, - 145,75,0,44,97,230,98,24,241,80,79,130,33,150,59,183,147,85,108,186, - 124,250,205,250,246,131,123,70,142,59,105,132,167,34,80,3,138,147,245,97, - 102,244,114,101,226,197,21,155,154,94,238,251,230,70,24,49,85,187,197,190, - 29,7,87,47,93,244,249,248,9,167,143,194,146,210,175,58,204,63,43,239, - 76,44,253,248,115,236,219,113,112,117,135,153,19,179,233,182,71,31,213,119, - 7,131,35,207,204,200,240,212,169,42,196,184,126,106,204,72,151,36,124,86, - 91,219,52,232,131,15,82,210,207,237,193,224,234,131,255,252,231,248,94,103, - 157,133,198,181,107,59,204,239,29,59,22,229,31,124,128,237,193,96,119,250, - 105,113,4,232,212,12,142,136,116,54,162,185,199,46,242,154,166,233,235,215, - 175,215,198,140,25,147,138,101,187,12,52,27,183,39,137,232,238,214,25,152, - 249,19,0,203,0,228,192,88,190,252,73,10,234,141,114,152,145,139,155,185, - 197,27,183,168,81,203,0,144,9,195,184,165,49,243,199,68,116,44,58,49, - 203,99,230,151,136,232,167,169,202,215,29,152,121,38,12,209,213,161,0,78, - 0,176,17,198,192,66,67,231,164,128,250,194,56,87,95,3,88,201,204,183, - 19,209,215,73,182,225,116,0,79,2,152,96,38,125,201,204,85,71,179,3, - 19,51,23,0,248,20,128,29,113,191,13,102,62,9,128,155,136,150,18,209, - 87,204,124,46,128,143,0,252,130,153,151,17,209,178,78,84,243,211,207,151, - 20,3,192,215,207,109,248,191,73,207,236,248,7,108,130,28,123,51,162,43, - 248,217,177,87,96,32,77,222,120,104,99,197,73,41,232,22,0,156,125,199, - 204,7,234,150,238,123,19,195,125,131,176,173,113,111,194,140,199,123,7,66, - 146,36,220,49,243,1,70,247,148,238,127,250,110,85,21,0,124,253,254,131, - 15,78,170,253,244,83,144,216,44,169,199,154,134,140,179,207,198,51,119,221, - 181,113,147,223,159,178,126,158,188,102,77,221,214,9,19,96,239,219,23,145, - 242,196,11,67,182,220,92,144,44,227,228,53,107,186,219,79,139,35,192,17, - 85,244,78,130,57,48,238,87,172,7,240,39,192,88,166,98,102,50,71,245, - 32,162,229,0,142,55,243,159,204,204,237,5,53,238,10,58,12,3,85,7, - 224,239,204,124,3,154,13,154,8,227,62,227,16,24,210,56,227,153,185,132, - 153,191,97,230,168,19,67,70,178,21,49,243,75,72,222,64,255,196,204,223, - 35,48,243,68,24,51,144,108,24,51,208,32,128,225,48,102,97,34,128,83, - 137,168,62,137,114,68,24,70,49,26,37,127,34,128,21,204,60,159,153,251, - 180,115,92,1,51,47,130,49,120,153,16,247,214,63,145,194,123,187,221,133, - 153,243,153,249,21,102,254,130,153,255,203,204,203,97,124,95,163,123,179,226, - 241,1,248,152,153,175,50,87,39,62,7,176,210,76,111,29,204,60,89,62, - 89,188,240,99,228,10,153,80,195,106,236,145,43,100,98,241,194,143,1,227, - 254,95,170,104,32,129,166,222,118,193,111,49,185,239,40,200,212,246,120,152, - 193,24,157,115,28,110,187,240,183,32,129,126,14,227,150,66,119,249,100,223, - 155,111,66,112,185,160,71,34,177,135,224,114,97,223,155,111,2,41,238,39, - 128,169,87,189,249,38,220,199,31,15,8,137,47,139,206,65,131,112,243,11, - 47,0,198,44,60,21,253,180,232,65,142,54,3,119,133,249,252,47,34,58, - 0,24,179,70,243,30,140,169,105,194,2,17,109,51,243,21,192,184,128,118, - 134,142,52,225,68,0,89,204,92,66,68,63,33,162,159,48,243,31,96,26, - 52,180,52,106,75,218,40,63,169,47,125,39,141,91,148,30,49,114,204,124, - 60,12,169,160,232,198,86,29,64,37,140,31,254,116,0,231,18,209,23,201, - 148,101,222,163,219,0,224,81,52,223,223,34,0,179,1,148,48,243,61,48, - 140,65,148,108,102,254,11,140,217,226,197,113,233,126,24,203,120,199,17,81, - 119,150,40,83,205,64,0,51,1,156,12,67,228,246,52,24,253,73,180,220, - 169,0,120,3,64,30,17,5,1,252,159,153,254,75,102,238,148,225,254,166, - 238,93,2,240,219,59,46,121,160,250,172,1,19,161,154,226,7,42,107,56, - 107,192,68,220,113,201,3,213,104,165,164,222,77,152,117,94,90,178,97,215, - 210,23,159,252,7,79,202,26,14,141,91,218,112,6,99,98,250,48,124,177, - 164,24,43,151,175,95,205,58,255,57,65,89,73,179,243,87,191,34,0,191, - 61,117,205,154,106,239,232,209,96,205,232,39,107,26,188,163,71,227,212,53, - 107,82,222,79,0,75,215,54,53,45,93,242,234,171,236,28,52,40,86,103, - 60,142,252,124,148,189,251,46,150,214,212,172,6,208,237,126,90,244,60,157, - 117,50,57,140,130,130,130,1,235,215,175,79,149,187,117,166,249,28,83,154, - 54,71,190,135,189,6,208,4,227,126,135,163,19,229,103,153,143,52,180,35, - 159,195,204,119,196,223,223,32,162,171,152,249,170,246,10,38,162,169,0,246, - 34,9,47,203,46,26,183,40,63,97,102,116,119,185,146,153,137,136,216,92, - 18,92,134,195,219,172,195,144,236,241,117,214,201,195,188,247,244,27,102,254, - 59,12,175,215,25,230,91,94,0,143,163,229,125,177,91,91,29,174,1,120, - 21,192,253,68,212,105,33,80,115,0,212,147,203,153,58,12,163,21,125,221, - 17,209,47,210,185,0,94,6,16,21,66,157,0,67,20,182,51,196,92,210, - 101,65,142,9,12,51,24,114,220,114,101,15,48,245,207,247,253,157,79,61, - 247,4,100,185,210,80,167,52,223,134,181,9,50,142,77,203,199,229,51,111, - 76,229,146,93,179,235,189,36,1,186,14,136,162,241,44,117,251,146,213,30, - 83,111,46,41,225,245,35,70,64,244,122,161,7,226,182,47,10,2,108,121, - 121,56,249,165,151,172,165,201,239,17,169,152,193,237,24,51,102,76,170,110, - 214,71,127,57,222,104,2,17,197,188,232,204,215,209,139,74,212,176,37,212, - 228,106,131,44,115,246,85,108,206,192,218,124,192,216,179,148,20,68,52,141, - 136,10,96,120,204,237,68,7,14,38,109,25,55,102,190,161,157,199,93,204, - 220,122,180,218,173,153,92,156,113,43,68,219,198,45,26,138,232,150,238,120, - 48,18,209,46,34,154,9,96,42,90,58,3,136,9,14,249,8,192,88,34, - 250,105,87,140,155,89,167,110,46,135,254,218,76,146,144,120,48,67,204,236, - 96,230,231,153,249,87,204,156,158,32,95,42,136,150,29,31,243,52,105,23, - 243,43,87,93,69,39,164,93,192,0,30,249,227,130,185,89,171,14,110,142, - 45,25,202,36,97,213,193,205,248,227,130,185,89,48,149,211,239,222,252,243, - 68,231,184,43,144,174,243,184,91,46,188,15,231,13,57,25,138,110,248,12, - 105,172,227,148,220,49,184,225,252,95,165,108,105,242,155,9,19,200,121,204, - 49,12,224,145,229,227,198,101,5,182,109,3,201,134,241,38,89,70,96,219, - 54,44,31,55,46,214,207,181,83,167,166,180,159,12,140,187,224,189,247,144, - 54,105,18,88,49,46,45,172,105,112,23,20,224,166,191,252,5,176,150,38, - 191,87,116,219,192,149,148,148,148,175,91,183,46,85,123,65,158,55,159,103, - 49,115,14,112,216,172,13,102,218,4,24,23,174,45,48,238,107,36,75,90, - 178,25,77,103,154,195,94,3,49,163,54,201,52,108,171,97,24,182,42,116, - 125,230,246,66,59,143,199,208,246,30,180,46,27,185,56,227,246,26,14,95, - 90,139,6,179,62,139,136,94,111,235,252,119,161,190,165,48,220,245,255,145, - 32,139,10,160,208,60,175,27,187,91,31,140,229,208,153,230,235,181,56,252, - 115,33,24,30,141,10,140,239,209,141,48,70,229,61,57,13,138,186,179,71, - 127,115,10,58,225,197,249,230,248,55,96,14,54,166,204,184,228,92,108,12, - 238,130,100,151,98,143,141,193,93,152,113,201,185,128,177,253,1,79,12,255, - 99,42,183,115,48,51,175,45,223,95,249,204,179,247,190,138,227,125,3,1, - 0,89,182,52,236,90,190,27,171,150,111,72,201,210,36,0,244,187,225,6, - 244,189,225,6,6,48,101,224,85,87,33,82,81,1,193,102,139,61,34,21, - 21,24,120,213,85,128,217,207,177,31,127,156,210,126,2,88,187,47,28,126, - 230,141,23,95,132,45,47,15,0,32,122,189,168,252,252,115,107,105,242,123, - 72,42,230,251,249,48,220,184,83,49,139,91,12,99,159,219,56,0,127,5, - 112,153,121,49,142,46,229,4,152,57,15,134,227,1,0,108,237,100,152,167, - 78,141,188,218,50,108,0,118,195,240,168,172,69,203,64,175,61,69,42,71, - 168,0,0,102,62,11,198,57,140,6,183,109,93,223,36,34,42,6,128,238, - 204,224,226,234,59,14,198,210,228,140,4,89,36,0,127,102,102,15,128,249, - 41,88,98,172,7,208,135,153,39,18,209,74,102,254,45,140,239,83,116,95, - 159,10,224,14,51,68,219,112,243,152,157,68,84,217,205,122,219,227,95,230, - 96,161,175,249,247,122,24,219,49,146,130,136,134,143,24,95,240,106,157,218, - 88,112,243,77,191,65,91,219,4,182,185,54,161,223,232,188,225,233,178,119, - 213,166,85,37,63,6,82,30,241,251,142,151,30,255,199,236,233,87,157,149, - 182,69,80,48,62,107,40,166,205,184,58,165,75,118,125,111,184,97,248,36, - 159,239,213,160,166,21,60,249,199,63,162,205,109,2,155,54,97,148,219,61, - 220,45,138,171,190,106,104,248,49,122,160,159,191,217,181,107,246,69,227,198, - 165,177,162,192,57,96,0,70,47,90,100,45,77,126,15,233,209,5,237,206, - 66,68,135,152,249,118,0,127,7,48,147,153,247,3,152,78,68,155,0,128, - 153,31,130,113,115,57,27,192,183,68,49,113,131,100,169,54,103,93,237,222, - 131,75,64,29,12,195,214,214,94,184,164,32,162,159,154,70,179,245,44,238, - 111,237,28,86,9,195,51,243,150,86,233,127,239,202,125,56,243,130,254,41, - 218,238,131,0,224,252,168,113,235,46,166,19,197,3,48,102,72,29,205,142, - 114,97,220,163,186,201,220,86,144,48,162,76,18,60,12,99,171,193,207,153, - 121,14,17,61,199,204,171,1,188,5,99,128,242,51,34,218,202,70,40,178, - 77,48,150,198,147,218,198,0,99,166,190,26,198,192,46,122,14,179,1,244, - 70,219,51,69,134,177,228,93,15,195,25,229,54,243,189,135,136,168,170,19, - 125,242,105,154,54,190,120,221,187,9,55,123,15,70,31,252,189,255,19,158, - 179,199,94,62,30,134,167,102,170,97,34,58,251,182,139,238,95,181,112,211, - 139,184,253,194,251,65,2,253,156,117,78,229,146,157,79,99,30,255,238,195, - 15,39,220,236,45,186,221,184,107,204,24,207,172,7,30,232,177,126,2,56, - 251,162,247,222,91,181,244,23,191,176,188,38,191,199,28,85,6,14,0,136, - 232,101,102,238,7,227,194,152,7,96,99,171,153,148,14,99,185,39,159,141, - 55,110,37,162,191,38,89,124,53,58,222,163,22,53,124,89,173,142,75,201, - 108,173,45,35,71,68,55,118,116,28,51,199,27,184,174,26,183,49,48,150, - 236,52,180,52,240,100,166,221,72,68,31,116,182,220,54,234,113,0,184,29, - 70,68,154,248,101,225,168,3,137,6,224,6,51,109,25,140,8,57,209,153, - 205,9,0,190,98,230,215,0,220,219,149,123,113,68,244,20,51,207,128,97, - 88,246,49,243,71,230,158,179,99,204,246,101,152,203,220,203,205,67,158,37, - 162,215,162,247,38,59,40,123,27,90,5,229,54,183,63,172,130,241,125,141, - 255,142,84,195,88,234,253,194,204,119,46,128,211,97,12,90,58,27,12,64, - 5,80,50,113,244,5,249,163,38,31,239,76,180,209,251,254,175,30,15,250, - 68,247,62,180,140,190,159,50,152,121,117,217,222,67,15,222,122,222,111,30, - 88,253,249,198,158,88,178,83,1,148,156,127,255,253,249,103,102,100,56,19, - 110,244,94,176,32,232,18,132,30,235,39,128,213,187,67,161,7,111,120,254, - 249,7,254,83,91,107,45,77,126,79,57,234,12,156,121,145,121,200,28,113, - 223,15,195,179,50,218,206,16,128,74,34,58,157,153,87,194,240,68,123,150, - 153,235,136,232,205,36,171,232,200,72,9,102,157,3,185,121,163,119,108,3, - 120,42,104,103,38,151,12,157,50,110,113,14,37,231,3,120,15,205,58,89, - 45,154,4,195,161,228,165,100,46,242,29,212,103,3,48,15,45,84,81,0, - 24,193,142,239,38,162,13,204,60,55,46,125,57,128,11,96,24,195,59,97, - 56,15,17,140,61,145,151,48,243,67,68,244,100,23,154,50,29,192,2,0, - 191,6,240,107,102,126,0,198,32,69,133,225,226,127,190,153,239,33,34,122, - 0,232,250,114,44,17,149,49,243,52,0,31,194,48,212,209,72,38,177,153, - 176,233,40,244,28,140,243,255,119,34,90,17,95,198,220,185,115,9,166,30, - 92,2,138,183,174,219,57,20,0,14,110,136,217,252,185,187,121,197,3,131, - 232,164,7,17,23,25,165,203,65,178,146,103,238,234,207,55,78,71,114,234, - 27,45,160,120,171,220,54,197,171,26,27,135,2,192,166,230,217,219,220,189, - 79,62,249,192,128,187,238,106,209,207,35,192,220,255,212,214,118,169,159,22, - 71,7,93,145,203,105,17,209,66,20,69,97,244,232,209,162,233,186,158,138, - 25,14,155,23,217,247,1,188,207,204,189,96,184,83,51,128,253,113,117,76, - 6,240,95,243,249,13,102,118,19,209,139,221,188,64,71,141,219,96,211,155, - 18,113,70,14,232,198,242,100,107,186,104,228,58,61,115,51,207,231,143,1, - 188,136,182,189,37,69,0,51,136,104,113,119,141,155,89,95,132,153,231,3, - 24,9,224,12,24,75,128,119,19,81,91,123,6,163,199,196,111,43,120,26, - 205,251,225,188,48,66,93,117,165,29,77,204,124,53,140,217,225,187,48,84, - 11,226,121,27,192,203,68,244,97,87,202,111,163,190,141,108,132,235,218,8, - 35,152,115,212,65,106,60,128,155,1,252,216,204,186,1,166,7,96,235,34, - 218,43,255,238,205,63,151,73,32,77,9,171,194,31,198,60,147,112,214,242, - 203,53,183,139,100,35,34,34,219,19,195,255,152,244,61,190,46,48,169,227, - 44,109,210,110,63,215,78,157,42,67,16,52,61,20,18,198,47,91,150,176, - 159,171,79,59,77,20,108,54,130,32,216,198,126,252,241,209,216,79,139,163, - 128,174,200,229,100,0,232,31,77,31,50,100,72,127,24,35,214,218,84,201, - 229,196,95,100,19,109,242,37,34,213,156,149,188,3,224,20,0,127,99,230, - 28,34,122,180,139,23,234,195,140,91,148,35,96,228,146,161,75,203,146,38, - 231,195,248,172,227,219,29,53,110,147,201,12,163,149,10,135,18,147,157,48, - 102,78,46,0,255,165,36,3,52,147,33,49,51,131,13,121,155,63,193,144, - 213,217,218,213,70,152,247,184,170,152,121,40,140,123,128,165,48,54,180,255, - 4,198,61,220,148,70,202,37,162,189,166,247,111,116,131,251,25,48,130,146, - 103,193,184,176,47,7,48,133,58,25,155,211,40,27,174,181,239,108,107,44, - 221,117,200,142,230,101,57,169,188,190,146,17,247,59,222,248,135,109,250,199, - 175,127,204,232,185,165,187,158,69,16,92,75,119,236,104,220,17,12,182,232, - 167,82,217,178,159,207,239,220,169,191,88,90,250,253,237,167,197,17,33,21, - 114,57,69,113,175,143,104,72,37,34,170,53,47,134,171,96,132,149,154,203, - 204,185,68,116,123,23,138,203,64,27,198,45,74,156,145,99,164,48,152,114, - 178,70,171,27,198,13,104,59,224,176,8,224,52,74,50,70,100,103,32,162, - 122,102,94,217,213,25,61,17,45,53,157,97,220,41,90,21,168,2,98,94, - 177,33,0,165,169,54,110,113,117,133,153,57,215,252,211,14,99,255,91,45, - 128,155,137,168,40,241,145,237,51,111,216,31,235,1,160,239,180,99,226,219, - 253,222,99,119,60,251,27,24,75,207,0,0,211,184,125,111,25,187,100,73, - 61,0,76,201,200,104,209,207,39,255,223,255,107,209,79,211,184,89,88,180, - 75,87,228,114,18,10,158,166,164,69,157,132,12,61,175,17,204,92,10,35, - 0,243,182,14,14,105,11,1,198,38,240,118,61,247,76,35,87,0,227,130, - 117,212,6,255,109,131,232,178,80,252,231,118,53,17,117,102,15,97,231,42, - 236,166,97,50,103,147,221,150,66,105,131,246,54,126,167,4,34,138,70,43, - 249,2,134,145,142,116,167,188,83,79,63,77,214,161,209,151,223,126,165,128, - 33,162,249,187,247,245,226,249,31,239,67,27,30,160,125,207,25,44,30,92, - 186,235,136,73,27,165,130,233,153,153,50,0,90,211,212,164,0,45,251,249, - 252,193,131,109,246,243,172,140,12,241,63,181,181,223,171,126,90,28,57,186, - 34,151,147,144,238,202,229,116,7,34,202,99,230,217,68,244,90,87,142,103, - 35,100,213,45,48,54,224,6,0,140,78,144,239,18,34,154,215,245,150,126, - 39,172,133,113,63,43,186,15,236,35,34,122,51,21,247,220,190,103,252,19, - 134,244,82,74,69,78,19,65,68,41,49,208,159,238,6,11,19,0,0,32, - 0,73,68,65,84,47,255,111,44,90,207,193,3,223,182,142,220,147,223,214, - 49,223,55,227,6,0,31,214,212,196,250,118,40,18,73,170,159,150,113,179, - 104,143,78,203,229,244,84,67,82,65,178,174,222,173,49,55,146,191,129,230, - 81,35,35,110,57,196,36,122,174,108,166,67,75,135,186,104,71,3,108,196, - 102,124,12,70,68,148,248,244,239,210,184,253,13,134,227,7,128,118,212,59, - 83,12,17,93,209,113,174,239,29,255,43,138,210,255,43,253,180,72,33,71, - 221,54,129,238,210,149,139,118,220,72,91,128,97,220,218,250,49,113,171,231, - 239,5,137,6,37,223,229,204,141,136,74,97,56,124,88,36,128,136,36,0, - 58,51,31,213,131,202,20,16,117,126,250,161,247,211,226,59,224,7,103,224, - 186,73,244,71,246,189,50,98,255,171,52,44,42,56,98,159,83,207,215,117, - 216,30,184,255,137,25,75,116,95,92,39,188,137,45,44,146,198,50,112,22, - 223,75,210,102,110,255,174,155,208,35,212,47,60,46,250,242,7,121,111,169, - 13,67,246,131,236,167,197,209,1,29,201,81,176,133,69,170,248,31,48,112, - 22,63,0,126,168,223,211,239,11,150,129,179,176,176,176,72,33,150,81,59, - 122,144,0,192,55,163,228,136,173,247,71,13,170,85,167,85,103,170,234,51, - 61,69,117,102,150,112,120,196,150,246,80,59,242,12,62,82,253,139,246,33, - 90,159,231,162,173,50,0,93,16,132,30,117,190,248,174,62,63,239,197,219, - 68,34,210,117,93,151,208,131,253,252,174,250,103,113,116,96,221,131,179,232, - 81,152,249,36,24,123,240,214,38,10,187,214,205,242,163,198,109,43,140,141, - 254,157,97,47,140,88,145,169,108,79,52,184,245,113,48,66,130,237,135,17, - 243,178,221,120,137,109,24,218,168,71,239,15,146,104,127,5,65,176,66,109, - 89,244,24,150,129,179,232,17,152,217,137,86,130,158,204,252,14,140,8,42, - 237,110,128,102,102,25,45,245,227,20,34,106,189,241,23,128,113,161,100,230, - 151,1,12,237,66,51,221,93,56,166,93,76,227,118,19,12,101,132,99,97, - 4,14,152,205,204,103,117,102,227,183,32,8,221,138,126,98,97,97,97,25, - 56,11,147,126,253,250,181,8,191,118,224,192,129,46,47,25,49,243,40,52, - 135,85,218,3,160,28,192,96,0,23,193,16,53,45,108,231,88,17,192,124, - 0,87,198,37,95,7,224,149,118,170,28,18,61,156,136,90,135,145,235,168, - 173,182,174,132,210,138,155,169,157,138,102,181,11,134,33,106,250,40,140,216, - 166,128,97,168,39,2,248,11,51,199,75,58,73,48,102,181,71,108,163,187, - 133,197,255,26,150,129,251,31,231,205,55,223,20,38,78,156,152,73,68,153, - 68,148,198,204,96,230,122,77,211,106,190,254,250,235,154,31,255,248,199,93, - 49,116,119,1,112,194,80,190,190,154,136,74,76,229,135,249,0,46,51,3, - 98,151,39,56,246,69,24,198,45,26,86,236,113,34,106,207,184,181,9,51, - 251,0,140,64,18,223,113,211,117,157,0,236,35,162,221,201,148,111,26,183, - 29,104,54,174,241,232,0,106,137,40,147,153,111,4,240,60,12,125,187,57, - 109,212,221,167,157,115,97,97,97,209,13,146,30,237,50,243,96,102,126,156, - 91,114,128,153,127,193,204,246,84,55,236,72,215,103,214,89,104,214,17,207, - 59,204,220,219,212,246,234,17,190,139,190,2,192,236,217,179,93,54,155,173, - 239,103,159,45,27,166,168,74,73,67,67,125,113,67,67,125,113,32,16,40, - 89,178,100,201,48,175,215,219,119,206,156,57,174,46,20,29,109,243,77,166, - 113,139,234,251,109,54,211,71,196,103,142,158,91,102,94,4,224,90,52,27, - 183,95,17,209,175,59,91,185,233,108,242,58,128,47,97,72,212,36,243,88, - 6,160,152,153,143,73,178,142,217,0,122,155,109,253,26,134,68,16,208,236, - 224,226,96,230,235,1,12,136,75,215,1,4,1,172,128,161,75,170,163,123, - 161,202,178,136,196,44,34,91,86,159,62,63,105,243,183,236,241,140,17,96, - 200,245,68,31,93,166,242,173,41,66,197,43,99,179,162,143,214,239,183,247, - 158,133,197,119,65,135,6,142,153,69,102,190,31,192,183,0,238,1,16,1, - 80,9,160,14,134,122,241,211,0,106,226,36,66,186,197,145,174,207,172,83, - 96,230,34,24,193,120,251,194,80,11,168,134,113,15,233,66,24,75,108,83, - 153,217,145,170,58,205,122,143,120,95,163,204,158,61,219,53,121,242,228,126, - 139,23,47,222,60,108,216,241,203,239,186,235,78,188,244,210,31,67,55,222, - 120,13,102,207,190,18,39,157,52,121,249,194,133,11,55,93,116,209,69,89, - 175,190,250,234,255,103,239,188,195,172,40,210,61,252,86,247,9,147,243,144, - 36,14,73,201,32,130,8,8,38,68,93,118,213,189,168,187,106,171,171,32, - 34,10,186,238,94,199,132,225,186,227,174,1,76,40,138,32,205,26,16,87, - 89,93,36,40,58,32,130,160,12,40,40,32,217,33,195,36,38,159,208,117, - 255,168,62,51,103,134,57,147,193,176,231,247,60,253,244,76,159,174,250,170, - 170,187,235,171,250,98,131,196,126,84,26,71,220,5,21,187,157,174,64,27, - 251,122,69,208,238,32,81,223,23,168,68,167,1,230,54,5,104,76,38,111, - 128,169,168,231,214,80,164,0,159,212,243,222,64,204,82,75,8,49,4,149, - 212,52,24,17,168,152,155,233,84,117,102,254,81,8,49,20,120,30,213,207, - 198,138,130,53,208,18,165,244,31,75,72,24,145,150,154,122,85,202,128,1, - 95,38,15,24,240,165,110,159,83,6,12,248,50,57,62,126,152,16,194,149, - 8,28,3,45,145,6,44,106,131,145,187,232,38,77,143,110,153,36,220,241, - 105,169,55,102,29,75,189,49,235,216,145,57,253,43,234,58,50,167,191,150, - 122,99,214,177,242,17,111,28,3,18,143,206,59,167,81,116,194,8,163,57, - 81,171,248,198,94,89,223,4,60,106,95,50,129,109,168,136,236,241,64,15, - 96,50,202,74,238,91,41,229,112,33,196,182,198,54,230,84,211,179,105,234, - 40,253,206,88,20,67,123,27,88,138,98,54,167,1,151,218,199,18,187,93, - 83,155,66,15,96,238,220,185,194,48,12,56,197,125,13,162,175,197,196,196, - 36,47,92,184,240,235,155,111,190,57,246,170,171,175,34,42,210,226,173,171, - 90,68,48,216,193,173,139,219,151,93,121,229,149,17,239,189,247,126,220,154, - 53,171,59,93,114,201,165,165,192,177,6,144,216,10,148,3,87,75,21,75, - 241,17,224,105,42,197,121,21,58,47,155,185,173,70,101,78,14,48,183,251, - 132,16,207,54,161,139,61,81,34,71,9,212,39,143,94,46,74,52,154,130, - 122,230,245,65,117,11,199,56,251,92,211,196,174,7,253,29,248,230,26,179, - 51,174,218,0,233,223,14,144,243,206,232,62,90,204,219,235,128,65,168,180, - 85,241,168,196,174,131,176,124,5,254,130,65,29,82,174,253,28,96,187,16, - 66,15,89,97,16,114,23,221,164,161,244,136,149,146,11,205,145,166,199,180, - 174,53,165,148,141,68,61,190,83,82,238,162,238,160,198,41,15,32,233,178, - 57,225,120,147,97,156,82,212,165,159,72,164,114,2,126,74,8,241,151,234, - 55,72,41,63,65,137,119,82,81,187,144,155,155,208,158,83,77,15,224,47, - 192,245,192,97,224,1,33,196,172,106,244,230,2,127,4,102,2,247,72,41, - 179,132,16,255,110,10,193,213,171,87,107,134,97,196,115,234,251,202,83,79, - 61,165,101,101,101,69,141,24,49,162,245,164,73,147,98,199,141,187,17,151, - 211,67,92,156,134,138,10,40,216,185,115,125,196,121,231,13,42,189,245,214, - 155,34,223,124,243,221,21,154,166,117,207,206,206,206,109,215,174,93,157,19, - 148,189,35,123,88,74,57,24,56,15,184,206,62,160,114,183,242,141,148,114, - 164,16,98,165,148,242,109,96,72,208,111,207,11,33,50,154,216,205,138,29, - 147,16,98,118,125,10,72,41,167,163,24,92,99,77,243,203,80,140,187,174, - 208,83,205,158,104,85,139,76,10,188,179,235,128,81,192,178,138,255,133,54, - 90,143,107,183,164,17,213,38,162,12,131,214,161,22,31,32,180,250,48,55, - 132,51,58,1,205,145,6,172,165,146,233,230,228,46,186,9,188,171,79,184, - 95,74,25,15,68,253,28,12,110,236,5,111,48,172,80,129,201,165,148,9, - 192,80,91,252,30,198,207,16,117,137,17,110,0,90,3,223,0,207,66,133, - 56,79,4,94,4,33,196,10,224,12,251,254,161,82,202,126,77,104,79,77, - 244,34,165,148,139,165,148,255,123,18,232,1,220,103,159,95,170,206,220,108, - 122,69,66,136,87,80,59,152,40,212,78,175,73,240,120,60,58,167,126,108, - 49,12,35,170,99,199,142,167,117,232,208,161,243,103,159,125,182,188,172,172, - 20,93,247,243,237,163,109,88,113,87,43,219,14,80,178,252,142,22,188,120, - 209,238,200,97,195,206,42,43,45,45,65,8,17,95,95,26,246,142,76,8, - 33,46,1,158,68,165,29,250,16,181,51,62,66,229,59,183,80,74,57,20, - 120,31,37,150,213,128,87,26,153,141,253,231,128,197,168,247,35,182,142,163, - 169,239,107,40,252,217,62,7,242,166,77,1,64,104,109,27,90,145,189,123, - 75,70,49,55,80,140,170,3,128,229,41,154,82,103,5,122,68,66,16,51, - 92,103,151,61,70,165,101,105,117,156,13,188,34,165,140,173,254,131,148,178, - 143,148,114,130,148,242,65,41,229,195,246,241,144,148,114,172,148,242,116,251, - 158,38,233,199,109,85,65,23,41,229,25,40,189,109,54,42,219,197,54,224, - 1,41,101,87,41,101,114,181,50,209,40,17,250,29,77,161,29,198,201,69, - 93,12,46,144,63,107,129,16,98,31,40,191,35,123,69,99,65,133,163,109, - 32,139,118,119,148,73,116,99,113,2,61,192,135,218,193,36,217,244,244,102, - 164,7,106,210,249,17,88,94,199,125,23,218,103,103,173,119,213,129,43,174, - 184,66,179,25,220,41,29,219,96,157,219,136,17,35,54,250,124,62,205,231, - 11,229,99,171,22,172,171,87,175,137,144,178,225,145,222,131,152,220,131,66, - 136,49,66,136,223,10,33,254,128,218,9,231,218,4,18,81,140,111,43,48, - 14,152,42,132,168,174,199,250,197,64,8,33,133,16,254,250,28,39,169,9, - 213,243,19,54,53,217,106,96,81,19,96,104,74,4,235,247,212,89,175,208, - 244,128,184,54,80,54,192,116,67,45,148,156,192,111,128,25,129,197,157,148, - 210,45,165,92,5,188,139,90,0,6,212,3,83,81,34,239,153,192,123,82, - 202,133,129,29,86,99,24,157,148,178,59,240,0,234,61,252,30,181,91,109, - 13,180,0,58,219,116,127,0,222,146,82,222,36,165,140,178,153,219,211,40, - 137,74,173,73,160,195,248,105,81,151,136,50,201,62,31,15,92,8,126,137, - 170,189,80,69,64,12,74,185,222,88,84,161,39,165,60,96,95,115,2,125, - 164,148,127,69,137,77,118,55,19,189,0,118,2,95,73,41,47,64,125,80, - 129,58,117,212,202,115,160,16,226,27,123,162,111,178,242,220,178,44,56,133, - 99,91,93,231,118,249,229,151,115,193,5,231,11,151,203,141,101,57,232,243, - 208,1,146,146,4,43,238,106,13,192,136,105,135,200,205,181,136,143,79,65, - 215,117,164,148,5,13,165,89,147,88,71,8,241,153,148,178,55,202,130,112, - 29,106,215,243,57,48,90,8,241,104,245,251,195,168,138,1,3,190,172,120, - 247,14,28,152,113,130,40,173,62,117,180,106,101,232,109,218,76,4,32,43, - 235,236,250,148,9,201,208,180,168,22,122,238,162,155,20,241,162,3,53,233, - 246,234,203,100,3,237,184,14,40,147,82,22,2,6,181,91,125,38,2,9, - 192,233,82,202,221,192,244,134,234,109,165,148,183,1,119,82,53,72,64,62, - 234,253,212,80,174,46,29,237,235,23,217,199,40,212,78,253,183,246,245,255, - 138,180,70,191,84,212,53,89,7,86,133,21,162,3,123,165,42,131,254,174, - 48,139,182,207,53,70,156,168,39,170,211,75,67,189,96,59,128,23,81,12, - 103,111,51,210,11,160,3,208,87,8,177,28,101,100,208,202,62,82,129,14, - 66,136,3,82,202,30,246,189,77,10,159,244,254,251,239,91,150,101,249,57, - 133,99,187,122,245,234,8,160,245,164,73,147,98,239,188,115,34,110,183,7, - 40,98,238,220,87,74,158,126,250,89,202,203,29,228,230,74,212,110,13,114, - 115,45,32,154,151,94,154,205,129,3,251,175,113,56,154,213,93,242,95,168, - 49,236,139,90,225,199,2,43,154,65,212,252,171,198,128,1,95,38,163,190, - 135,254,64,255,86,173,110,234,223,152,122,236,114,253,129,52,187,206,80,168, - 147,249,105,209,173,2,117,245,183,255,110,42,44,148,81,208,93,40,6,230, - 71,237,144,150,2,78,97,3,37,205,88,10,20,163,222,165,14,192,19,82, - 202,235,106,172,181,6,72,41,167,0,207,81,201,220,118,161,194,182,13,65, - 25,149,93,2,92,128,18,41,255,111,80,209,107,80,204,45,108,48,243,11, - 64,93,51,215,203,40,81,192,239,165,148,175,10,33,142,6,204,186,131,111, - 146,82,14,180,235,250,30,181,34,111,44,106,162,151,135,82,204,251,3,19, - 126,51,210,3,101,237,151,6,12,5,214,213,18,51,240,61,251,220,228,21, - 155,165,182,112,167,108,108,61,30,79,212,178,101,203,62,249,227,31,255,128, - 174,251,200,122,168,37,66,236,136,188,111,93,143,146,55,223,156,91,98,154, - 243,162,238,185,231,78,70,76,43,3,32,33,161,5,207,61,247,50,9,9, - 9,180,107,215,238,109,41,229,16,32,169,190,134,38,65,109,143,68,49,48, - 135,189,72,248,4,37,2,146,168,197,138,155,74,203,201,13,82,202,190,66, - 136,111,27,211,199,255,6,188,53,233,233,237,85,175,140,108,112,29,75,30, - 254,103,133,161,200,165,143,142,75,105,82,131,130,141,78,26,22,64,166,54, - 4,191,95,51,133,16,183,159,64,86,136,31,128,209,0,82,202,21,40,67, - 150,8,96,150,148,114,191,16,226,179,218,8,72,41,59,1,211,168,92,172, - 94,11,188,35,132,168,81,102,47,165,220,4,44,2,254,141,18,91,134,153, - 219,47,4,117,49,184,127,163,124,177,6,0,51,128,177,182,126,37,96,226, - 92,34,165,108,131,242,31,3,216,34,132,248,174,134,122,234,139,154,232,149, - 75,41,111,194,222,241,52,51,61,80,126,74,207,0,233,82,202,5,66,136, - 125,213,25,141,148,242,31,168,85,99,30,202,112,162,73,88,176,96,129,143, - 83,56,182,30,143,39,210,233,116,10,159,175,82,253,35,165,228,241,179,190, - 139,186,117,113,231,146,217,179,103,151,188,240,194,43,81,30,79,57,14,135, - 3,167,211,197,27,111,188,81,114,231,157,119,70,249,253,126,116,93,95,131, - 109,73,215,0,107,202,118,40,221,102,5,61,27,1,134,54,19,248,39,74, - 36,220,218,190,190,70,74,121,177,16,98,85,99,250,249,107,199,31,94,248, - 115,87,108,61,150,101,149,234,27,110,162,94,86,141,193,24,253,240,117,131, - 53,45,210,143,178,108,108,26,164,53,24,161,249,237,191,117,168,179,61,13, - 225,130,229,128,87,74,25,39,132,56,94,211,13,246,119,58,66,74,57,21, - 184,31,181,96,122,78,74,57,80,8,81,94,75,221,155,169,116,188,255,139, - 16,226,205,90,238,5,37,146,188,131,48,115,251,197,161,214,23,78,8,113, - 216,178,172,201,246,191,87,72,41,179,165,148,189,132,16,37,66,136,18,41, - 229,163,40,191,173,78,192,78,33,196,255,52,165,49,66,136,195,40,153,120, - 117,122,27,132,16,59,154,155,158,141,185,192,71,40,113,228,55,82,202,79, - 130,148,214,103,73,41,191,66,137,210,36,240,190,16,98,93,232,170,234,15, - 33,196,97,159,207,23,80,194,159,212,177,181,44,11,143,199,35,221,110,165, - 115,235,253,224,1,122,61,176,155,46,247,236,100,241,226,101,81,249,249,249, - 98,214,172,89,165,255,250,215,123,37,239,190,251,175,162,29,59,118,156,87, - 82,82,226,159,62,125,122,113,121,121,57,126,191,31,212,228,149,134,218,201, - 213,250,222,72,149,65,32,176,219,216,128,90,45,111,177,255,215,128,103,132, - 16,19,133,16,171,129,27,169,180,162,140,2,222,145,82,142,104,108,95,127, - 173,200,202,58,59,7,37,70,219,0,108,56,116,104,206,134,122,22,173,242, - 172,236,114,27,128,93,118,157,245,69,76,245,11,86,241,161,64,93,27,236, - 191,235,93,182,30,136,64,205,5,47,216,146,128,19,16,36,206,127,4,229, - 56,15,42,74,206,57,161,42,149,82,206,160,50,118,232,2,33,196,244,218, - 140,83,164,148,49,40,107,201,91,9,103,31,255,197,161,206,21,149,174,235, - 175,121,60,158,199,80,162,185,54,192,38,105,3,120,16,165,8,46,2,218, - 219,151,39,54,165,65,182,223,210,212,83,72,47,23,101,69,245,3,74,238, - 127,126,16,189,117,40,185,188,68,233,254,254,36,165,220,96,139,56,154,12, - 167,211,57,235,84,140,173,101,89,37,30,143,199,122,249,229,151,139,159,126, - 250,185,10,157,91,78,78,41,69,69,229,172,89,179,38,114,245,234,213,145, - 227,199,143,143,186,252,242,203,199,90,150,117,8,232,125,252,248,113,255,180, - 105,211,26,195,228,38,160,86,211,171,128,43,133,16,119,163,34,125,4,252, - 156,166,65,197,10,124,25,74,167,17,208,73,182,6,222,144,42,136,113,125, - 17,216,141,252,106,211,203,128,50,10,9,28,135,14,153,161,38,219,234,204, - 164,138,233,253,161,67,166,63,80,71,29,228,2,99,26,216,133,79,7,144, - 150,191,98,55,101,149,28,241,39,93,54,199,74,186,108,142,101,149,28,169, - 108,143,238,10,180,225,120,112,89,66,239,26,3,6,42,90,208,33,236,227, - 122,224,77,89,119,200,186,57,40,227,51,80,18,145,80,216,3,124,108,211, - 156,10,53,27,68,1,72,41,123,1,111,162,152,91,160,157,193,109,132,147, - 144,145,34,140,230,67,125,66,117,9,183,219,253,16,106,18,250,10,181,50, - 223,109,31,91,128,203,174,187,238,186,54,192,249,118,145,23,165,148,127,108, - 108,131,236,73,239,209,90,232,173,18,66,196,161,252,199,154,76,15,192,222, - 33,118,7,94,178,105,236,178,233,237,64,125,16,93,132,16,157,80,19,104, - 63,96,182,172,103,204,194,218,176,107,215,243,250,130,5,55,62,108,89,254, - 223,81,173,175,82,202,173,126,191,127,205,117,215,93,55,80,74,25,208,75, - 53,170,175,150,101,149,250,124,190,222,126,191,223,255,250,235,175,23,207,155, - 55,143,54,109,218,112,218,105,109,105,211,166,13,45,90,180,224,181,215,94, - 195,229,114,209,173,91,183,197,35,71,142,76,184,226,138,43,208,117,189,79, - 97,97,225,9,76,78,74,153,102,89,86,40,159,38,168,26,139,114,15,84, - 248,244,237,180,175,159,110,95,11,172,192,191,68,141,107,96,146,60,13,248, - 143,148,114,80,61,187,248,119,212,179,155,86,207,251,127,125,144,86,192,173, - 38,192,76,2,140,233,233,134,86,101,71,28,201,67,57,190,239,69,233,184, - 148,72,210,95,150,95,87,121,205,21,19,104,195,94,2,78,226,170,142,80, - 59,198,61,192,66,224,141,16,135,160,210,234,184,70,8,33,54,3,147,80, - 209,114,250,214,114,235,211,40,11,205,209,66,136,237,181,220,7,106,209,53, - 7,53,23,213,116,252,142,202,96,13,97,252,12,81,69,7,87,56,175,175, - 204,31,217,47,9,197,248,242,218,181,155,107,5,249,52,45,2,22,73,41, - 91,0,81,126,127,137,216,191,255,222,162,141,27,115,245,151,71,111,46,252, - 199,63,254,17,247,215,191,254,117,13,202,10,233,13,41,101,180,16,226,213, - 154,12,39,106,67,40,122,40,230,146,29,100,89,56,4,88,217,84,122,1, - 216,229,110,151,42,80,111,43,148,107,66,177,168,154,164,243,14,224,9,148, - 118,127,182,148,242,79,66,136,157,39,214,86,59,178,179,111,208,128,132,132, - 204,89,57,35,207,59,59,245,192,129,155,63,2,214,36,100,110,60,166,93, - 249,242,0,183,187,79,126,102,230,162,236,153,51,23,56,117,93,143,157,48, - 97,194,164,153,51,103,62,211,216,190,46,88,176,160,100,236,216,177,248,253, - 254,94,192,230,185,115,231,22,191,246,218,107,209,229,229,74,231,230,114,157, - 168,115,235,219,183,239,16,33,196,193,5,11,22,244,41,44,44,252,118,218, - 180,105,197,119,221,117,87,180,195,225,64,215,245,181,223,125,247,93,251,229, - 203,151,231,81,88,227,166,50,240,140,30,192,78,123,35,165,76,67,249,22, - 65,13,43,121,33,196,46,169,226,85,110,65,49,200,24,20,51,237,44,132, - 216,85,91,255,108,157,221,127,157,222,78,211,28,131,222,121,103,193,186,145, - 229,217,163,244,248,78,123,17,218,32,2,33,186,212,24,15,2,214,89,165, - 185,183,60,241,196,83,179,238,187,239,222,250,46,24,72,186,108,78,142,237, - 240,157,135,146,108,164,98,249,144,222,226,250,73,47,148,126,46,240,220,82, - 9,10,217,85,29,66,136,77,192,21,245,109,91,40,8,33,62,170,199,61, - 126,84,108,217,58,51,56,8,33,246,82,105,181,29,198,47,16,21,12,46, - 59,251,6,141,204,141,36,100,110,204,205,31,217,239,52,32,33,59,251,134, - 2,64,238,219,119,35,217,217,55,8,128,125,251,110,60,134,90,81,197,107, - 26,73,231,31,223,188,29,224,251,239,55,20,1,151,1,31,0,195,80,145, - 9,82,133,16,127,107,12,147,11,250,187,198,44,208,66,8,159,84,41,88, - 154,76,47,152,166,109,73,181,47,196,61,47,74,41,125,40,67,147,115,129, - 183,165,148,255,99,127,8,117,194,102,108,2,24,152,144,185,241,75,0,41, - 203,146,128,130,118,237,230,230,20,206,235,139,245,222,132,172,131,35,251,245, - 233,216,81,202,155,111,118,149,191,245,150,87,43,44,60,254,253,130,5,11, - 174,31,59,118,236,235,141,237,107,48,147,19,66,108,122,237,181,215,10,93, - 46,151,0,228,208,161,67,199,148,148,148,124,56,125,250,244,226,41,83,166, - 68,187,221,110,116,93,95,211,167,79,159,33,64,21,38,55,121,242,228,232, - 103,159,125,182,240,178,203,46,147,135,14,29,10,37,160,201,2,46,7,174, - 145,82,150,163,204,190,159,2,186,1,249,66,136,175,66,140,239,110,169,162, - 155,44,166,50,59,247,78,41,101,87,33,196,142,154,202,252,55,67,74,153, - 55,118,236,149,8,225,218,221,166,77,191,221,45,91,94,151,64,37,51,201, - 7,18,124,190,130,150,217,217,79,117,200,203,251,11,160,53,200,41,57,40, - 118,100,14,128,29,64,57,161,174,114,254,162,131,131,244,152,211,118,163,187, - 114,171,199,159,60,190,176,123,67,154,16,70,24,77,66,141,34,202,132,204, - 141,251,81,62,87,14,84,2,71,71,208,225,66,237,110,244,132,204,141,21, - 91,252,184,56,137,16,34,15,229,12,25,176,246,123,88,74,249,92,99,118, - 84,245,193,169,166,103,211,156,137,242,139,41,1,6,2,75,235,35,74,203, - 206,190,33,17,229,56,170,7,152,91,224,39,170,41,175,19,50,55,126,235, - 118,139,150,61,123,58,18,166,78,141,176,116,221,239,121,239,189,247,14,208, - 196,190,46,88,176,160,68,74,153,227,247,251,59,151,151,151,247,44,46,46, - 238,225,241,120,210,150,47,95,254,157,199,227,57,65,231,166,105,218,154,62, - 125,250,180,30,59,118,44,186,174,247,57,126,252,184,239,177,199,30,43,56, - 243,204,51,7,254,251,223,255,206,189,246,218,107,107,212,227,8,33,158,68, - 69,210,183,80,33,201,114,81,43,244,67,212,17,141,69,8,177,222,46,243, - 1,202,52,251,3,106,23,57,213,10,41,101,187,122,28,14,154,193,129,255, - 20,195,2,43,15,72,145,210,147,87,80,176,74,102,101,157,157,147,149,117, - 246,49,251,236,207,202,58,59,231,232,209,119,142,229,231,175,216,37,132,158, - 98,223,223,104,43,192,212,235,87,91,64,222,209,215,7,164,28,125,125,64, - 74,139,155,54,84,212,213,226,166,13,214,209,215,7,164,184,87,92,155,34, - 203,11,118,249,139,15,159,192,220,194,8,227,84,163,102,55,1,41,73,200, - 220,88,163,105,110,40,92,117,149,147,231,159,7,33,68,25,208,75,170,40, - 36,169,168,16,56,39,13,167,154,158,77,243,37,169,82,231,60,9,68,215, - 199,178,50,33,115,99,110,136,235,37,0,133,243,250,86,191,190,63,240,247, - 249,231,159,161,47,94,236,119,92,117,213,85,190,5,11,22,52,169,175,11, - 22,44,40,1,74,174,184,226,138,42,171,121,135,195,81,162,235,122,175,194, - 194,194,205,1,113,100,96,39,215,187,119,239,193,150,101,29,124,251,237,183, - 187,88,150,37,63,253,244,211,210,183,222,122,43,148,191,96,64,220,59,89, - 170,132,160,129,240,76,2,88,90,215,78,204,46,187,24,181,139,171,126,189, - 190,204,60,144,249,64,16,228,170,80,79,20,55,240,126,164,138,161,120,66, - 28,197,90,80,70,165,49,72,83,252,42,43,116,90,69,69,27,107,188,225, - 224,193,215,44,66,235,190,26,140,22,55,109,8,89,87,109,191,133,17,198, - 79,129,154,25,156,16,228,143,236,23,143,114,176,22,84,77,247,161,161,118, - 28,177,9,153,27,43,196,135,173,90,105,213,170,16,109,164,148,134,16,194, - 108,238,70,215,132,159,128,222,52,41,101,169,16,226,229,250,220,159,63,178, - 95,10,42,218,124,105,66,230,70,111,208,245,54,128,163,93,187,185,217,133, - 243,250,202,160,235,137,168,93,180,247,79,237,230,90,84,77,49,211,228,190, - 190,255,254,251,213,87,215,37,99,199,142,5,168,194,228,2,58,55,93,215, - 219,15,31,62,60,119,226,196,137,117,174,202,131,196,189,47,52,180,93,161, - 152,88,3,119,229,233,40,83,241,62,13,36,239,161,50,70,104,93,248,30, - 197,12,227,8,10,183,214,8,44,108,66,217,48,194,8,163,22,212,200,224, - 236,73,87,80,153,212,177,186,135,191,0,100,254,200,126,131,18,50,55,174, - 3,136,136,56,113,33,42,132,48,27,107,244,209,24,156,74,122,54,157,122, - 49,55,128,118,237,230,230,216,58,56,242,71,246,235,159,144,185,49,224,55, - 228,69,165,234,169,64,254,200,126,221,81,22,92,178,157,98,110,39,224,100, - 244,53,160,167,35,136,201,5,235,220,226,227,235,157,84,224,39,133,16,34, - 95,74,121,53,112,37,74,164,94,31,232,192,55,182,219,66,125,104,108,144, - 82,222,141,114,254,109,44,28,66,136,71,106,122,142,150,101,9,64,104,154, - 22,22,243,133,17,70,35,33,142,47,236,46,227,46,223,38,160,194,138,50, - 5,181,67,59,30,106,114,133,10,131,137,68,192,155,144,185,177,32,246,250, - 111,234,37,106,57,190,176,187,4,8,208,60,21,248,185,209,180,199,46,222, - 54,232,73,65,233,168,146,18,50,55,30,179,173,88,11,106,27,251,198,208, - 108,8,198,142,29,27,165,235,122,178,166,105,155,0,206,59,239,188,65,107, - 215,174,221,55,107,214,172,19,196,146,1,154,97,132,17,134,66,252,21,63, - 252,212,77,8,195,70,149,29,156,98,82,223,132,186,183,10,236,9,56,32, - 115,15,71,212,110,0,236,177,203,3,130,199,59,167,218,255,63,25,130,44, - 46,59,107,154,70,93,58,183,240,7,29,70,24,97,252,28,209,172,97,226, - 195,248,245,32,96,140,242,83,183,35,140,48,194,8,163,177,16,97,17,83, - 24,77,69,120,7,23,70,24,97,252,28,17,102,112,97,132,17,70,24,205, - 136,240,130,239,231,3,7,252,124,140,47,194,52,195,52,27,67,207,52,77, - 205,48,12,203,52,205,64,48,130,250,26,232,248,12,195,168,245,222,159,67, - 255,194,244,126,121,244,194,248,121,32,172,131,11,227,164,194,52,205,115,80, - 78,208,27,12,195,168,49,236,90,19,235,15,48,183,45,84,134,247,170,47, - 246,162,178,69,52,103,123,132,97,24,210,52,205,110,192,205,168,72,53,179, - 13,195,104,144,62,211,52,77,23,224,55,12,35,156,162,37,140,48,26,137, - 48,131,11,227,164,192,52,205,72,170,25,169,152,166,249,1,112,173,97,24, - 69,117,148,117,162,194,193,5,224,53,12,195,91,211,189,54,115,155,141,157, - 161,160,129,104,246,84,39,54,115,155,0,220,13,116,69,249,57,26,166,105, - 158,95,87,191,171,213,227,169,251,174,48,194,8,163,54,52,137,193,37,37, - 37,85,9,95,146,155,155,27,118,74,109,38,36,37,37,85,17,169,228,230, - 230,158,84,209,71,115,62,75,211,52,251,0,129,120,155,127,67,69,250,184, - 27,149,98,100,54,112,85,45,101,117,84,18,218,63,4,93,254,19,42,109, - 73,40,116,177,207,210,48,140,6,197,148,52,77,211,213,24,102,18,180,83, - 27,78,101,182,11,137,114,44,255,27,202,71,20,20,163,62,11,120,193,52, - 205,224,204,209,14,212,174,246,32,97,132,17,198,73,65,163,24,220,248,241, - 227,181,206,157,59,199,105,154,22,71,101,12,190,66,41,229,241,61,123,246, - 28,159,49,99,70,152,209,53,17,39,155,161,5,48,113,226,68,173,83,167, - 78,73,66,136,36,33,68,188,148,18,41,101,129,101,89,185,59,119,238,204, - 125,229,149,87,26,243,44,239,1,34,79,95,186,116,79,247,143,63,246,198, - 31,57,242,119,211,52,55,163,24,215,88,211,52,91,25,134,17,42,93,201, - 171,40,230,102,161,194,194,253,221,48,140,218,152,91,21,72,184,9,104,61, - 207,52,95,64,5,44,16,192,128,218,202,152,166,137,125,223,143,134,97,236, - 174,237,222,0,108,230,182,29,197,92,111,0,126,3,140,181,127,182,128,60, - 195,48,146,76,211,188,21,120,217,190,231,134,26,104,183,174,101,44,126,22, - 8,140,169,80,140,59,76,43,140,95,12,234,205,224,50,50,50,210,80,153, - 109,255,10,96,89,22,126,191,255,176,148,114,182,215,235,125,195,233,116,186, - 119,236,216,233,141,137,137,214,134,13,27,38,87,173,90,213,164,9,218,52, - 205,42,244,108,236,71,37,44,156,97,24,70,121,83,234,15,65,243,42,224, - 25,84,194,205,0,62,4,198,1,71,12,195,104,22,166,83,253,195,170,62, - 182,54,42,250,154,158,158,222,108,125,13,166,61,108,216,48,167,174,235,173, - 182,108,217,218,169,123,247,110,43,188,94,15,82,74,52,77,103,203,150,45, - 35,146,146,146,118,15,27,54,44,103,213,170,85,13,245,135,115,39,236,219, - 199,89,111,188,209,1,152,42,97,173,48,140,69,166,105,126,135,74,51,212, - 139,160,124,92,65,187,161,133,168,36,146,1,230,246,191,134,97,252,163,190, - 68,19,178,179,1,94,3,196,240,23,95,188,229,243,219,111,31,106,24,198, - 65,211,52,139,128,245,245,168,226,152,105,154,103,27,134,81,103,142,63,211, - 52,13,160,101,231,149,43,101,252,129,3,215,103,93,115,205,100,20,131,11, - 44,8,34,76,211,28,7,116,176,255,15,92,47,7,54,216,215,91,163,178, - 156,55,216,0,66,194,77,199,160,115,11,161,77,3,141,248,248,161,121,249, - 249,43,78,88,140,68,68,116,208,202,202,246,6,39,167,109,80,64,100,169, - 158,213,107,128,176,160,245,75,227,58,60,140,138,81,27,121,251,171,123,171, - 212,245,226,184,14,201,129,191,171,255,214,80,90,18,90,9,184,179,161,117, - 252,28,105,133,241,211,33,164,56,71,194,77,18,238,203,200,200,208,50,50, - 50,186,162,178,224,254,21,21,144,246,40,42,175,87,75,77,211,210,221,110, - 247,58,77,211,10,231,204,153,93,252,252,243,207,251,26,195,220,2,244,108, - 17,21,192,232,234,244,80,140,231,25,32,215,52,205,86,13,165,81,11,77, - 205,52,205,177,192,124,155,70,30,106,34,40,1,198,160,38,227,81,166,105, - 70,52,3,205,192,135,245,184,5,207,219,151,239,160,150,190,102,100,100,52, - 185,175,213,105,151,11,49,163,75,151,46,100,101,101,93,119,218,105,109,86, - 188,245,214,27,100,102,46,45,155,51,103,38,51,103,206,160,107,215,46,43, - 214,175,95,191,121,192,128,1,201,227,199,143,111,104,42,25,153,223,182,45, - 71,186,118,13,228,213,251,215,174,179,207,78,48,12,99,132,253,127,69,38, - 131,32,230,246,5,85,153,219,20,84,14,185,122,35,191,93,59,176,131,23, - 183,205,202,234,148,188,115,231,127,76,211,236,8,124,75,253,140,73,82,128, - 79,234,73,206,74,248,241,71,49,100,214,44,209,243,163,143,46,28,115,239, - 189,101,134,97,4,51,170,8,84,202,160,116,170,166,67,250,209,48,140,161, - 168,103,175,209,136,244,53,129,231,152,2,247,63,43,173,99,81,81,167,167, - 197,198,14,78,233,216,113,106,114,199,142,83,117,251,156,210,177,227,212,228, - 200,200,110,66,8,71,34,112,12,68,34,13,76,11,36,96,51,149,1,161, - 111,25,182,246,248,133,177,195,31,59,63,118,248,99,199,94,28,215,161,162, - 174,23,199,117,208,98,135,63,118,204,123,250,109,199,128,196,25,19,186,54, - 56,253,80,117,90,50,144,73,252,36,224,84,210,10,227,167,67,141,59,184, - 224,213,205,117,47,189,212,175,221,143,63,94,149,145,145,241,54,208,9,216, - 6,108,68,165,65,233,1,76,70,137,41,191,205,200,200,24,158,158,158,190, - 173,161,141,8,166,119,241,163,143,94,96,154,230,191,128,47,0,179,54,122, - 166,105,14,55,12,163,193,244,170,211,28,241,236,179,215,175,152,60,249,28, - 20,131,43,6,150,162,152,205,105,192,165,246,177,4,149,158,126,106,99,232, - 5,32,96,179,84,31,214,21,82,211,110,125,125,194,4,223,65,197,220,146, - 56,9,99,27,138,182,83,202,155,92,235,215,63,49,98,204,152,183,94,120, - 225,5,183,203,101,77,157,56,56,46,130,206,26,115,190,77,46,123,246,217, - 103,35,38,79,158,18,183,125,251,246,78,125,251,246,45,165,50,5,77,125, - 176,21,40,95,250,224,131,109,206,123,230,153,237,109,55,110,236,218,102,211, - 166,197,11,158,123,238,246,82,120,132,160,204,8,54,115,91,13,12,166,146, - 185,221,103,24,198,179,141,236,227,149,123,7,12,216,221,62,43,171,227,200, - 233,211,7,172,152,60,121,232,177,46,93,62,69,45,86,110,14,81,44,23, - 37,26,77,161,234,238,189,54,200,252,246,237,173,236,51,207,148,237,215,175, - 23,113,7,15,6,50,145,159,197,137,187,197,224,108,28,129,111,46,170,158, - 116,78,128,128,205,126,248,183,6,151,223,230,116,210,103,96,238,239,182,14, - 252,114,62,42,64,119,50,234,253,81,153,189,165,191,192,42,73,235,16,115, - 206,3,0,219,13,195,208,107,169,186,2,47,255,249,220,64,172,89,49,19, - 198,223,244,220,23,133,46,175,223,232,188,179,104,218,15,249,249,127,41,77, - 72,184,191,150,226,137,90,100,106,210,203,127,110,13,65,153,188,39,60,189, - 178,238,76,20,112,165,132,153,192,120,96,161,132,51,133,218,229,54,59,78, - 37,173,48,126,26,212,200,224,130,39,194,86,7,14,252,207,235,19,39,202, - 27,211,211,5,53,232,16,50,50,50,62,1,50,81,38,218,127,37,244,36, - 18,18,193,244,146,247,238,61,47,121,231,206,243,115,58,119,110,107,24,70, - 77,58,139,38,211,171,78,179,205,183,223,158,158,186,125,251,179,71,187,118, - 93,98,24,198,235,213,232,205,5,254,136,250,16,238,49,77,51,203,48,140, - 127,55,134,102,0,103,15,30,60,118,101,86,214,107,46,175,247,134,223,207, - 155,55,229,237,155,111,254,118,220,244,233,39,101,108,171,227,143,127,248,195, - 255,188,62,127,254,44,151,101,221,244,212,238,221,123,207,123,253,181,254,186, - 238,219,19,25,41,16,2,64,112,248,240,158,136,51,206,72,43,157,61,251, - 149,200,137,19,239,92,33,132,232,62,125,250,244,220,41,83,166,212,57,65, - 217,59,178,135,77,211,28,12,156,151,121,231,157,93,71,61,241,4,45,126, - 248,225,236,115,159,127,254,183,31,167,167,127,102,57,28,223,152,166,57,210, - 48,140,149,166,105,190,13,12,161,114,39,243,188,97,24,25,77,128,92,115, - 164,0,0,32,0,73,68,65,84,233,227,231,183,223,158,117,209,223,255,222, - 177,197,15,63,112,201,163,143,222,6,44,176,39,174,144,249,243,76,211,156, - 142,98,112,13,146,62,172,152,60,217,127,189,97,204,214,164,28,95,18,31, - 111,45,202,203,59,163,52,49,241,116,148,24,178,38,148,54,164,254,80,208, - 225,247,219,70,142,244,119,203,204,100,224,215,71,239,255,241,244,118,103,149, - 196,184,255,4,180,7,86,216,183,173,67,136,209,90,100,242,146,70,144,72, - 4,210,80,140,114,240,91,183,156,53,115,212,7,223,27,173,247,31,111,125, - 238,243,207,63,249,113,122,250,197,161,10,10,221,157,128,166,165,1,107,81, - 59,163,2,32,231,229,63,159,75,181,196,25,0,152,166,25,15,68,5,25, - 220,76,66,45,240,134,1,11,36,140,20,39,102,52,105,46,84,161,181,103, - 208,160,139,86,78,154,20,80,9,8,192,10,165,154,48,77,51,1,24,106, - 24,198,162,147,212,182,48,154,136,144,98,4,1,87,238,107,223,126,141,195, - 231,19,99,95,127,125,221,231,23,92,16,1,96,139,44,69,70,70,134,14, - 144,158,158,190,2,56,195,46,54,52,35,35,163,95,99,26,34,224,202,35, - 93,186,172,209,189,94,113,254,211,79,123,251,188,255,126,75,80,230,230,166, - 105,46,54,77,243,127,1,12,195,168,66,207,52,205,70,209,11,208,220,126, - 238,185,94,135,215,203,5,79,62,121,249,245,134,177,180,250,61,134,97,20, - 25,134,241,10,106,7,19,69,165,33,65,163,225,243,249,244,231,31,120,96, - 115,118,135,14,196,20,22,114,227,11,47,220,38,193,117,178,198,54,128,97, - 195,134,69,165,164,164,156,118,215,239,126,247,226,119,241,241,254,216,162,34, - 94,206,201,157,248,196,229,241,95,220,63,58,222,182,3,148,164,143,138,227, - 134,94,71,35,187,117,75,43,243,120,202,17,66,212,59,79,142,189,35,19, - 134,97,92,2,60,41,29,142,255,124,49,126,252,178,242,232,232,210,22,219, - 183,79,237,63,127,126,166,109,233,248,136,105,154,67,129,247,81,98,89,13, - 120,197,48,140,38,235,66,44,167,211,90,49,105,18,37,9,9,0,67,129, - 39,154,90,103,29,152,4,172,138,44,40,16,191,159,60,121,246,185,47,188, - 176,7,181,243,174,233,104,210,51,12,198,58,195,224,72,183,110,68,23,123, - 185,252,205,141,93,53,191,117,3,176,19,197,204,167,168,187,180,182,13,173, - 215,222,189,37,163,152,27,192,218,178,40,215,105,31,143,233,129,215,161,21, - 180,216,190,189,117,255,249,243,191,13,89,129,230,76,0,109,109,160,153,40, - 125,227,49,42,45,75,171,227,108,224,21,211,52,99,1,132,114,173,24,11, - 28,0,134,30,238,222,253,239,166,105,118,48,77,243,60,211,52,31,54,77, - 243,33,211,52,199,154,166,121,58,168,69,85,67,251,24,128,0,111,113,82, - 210,53,150,166,29,1,134,122,35,34,118,217,206,255,3,80,18,149,7,76, - 211,236,106,154,102,114,112,57,211,52,163,81,34,244,59,26,75,59,140,147, - 143,90,229,228,111,142,27,231,200,238,208,129,168,146,146,65,195,150,47,255, - 68,130,43,61,61,221,74,79,79,151,216,43,238,140,140,12,45,61,61,61, - 176,50,238,142,18,209,52,10,31,167,167,59,142,116,235,70,68,81,145,179, - 239,251,239,63,39,149,201,181,23,181,131,73,2,101,70,110,24,70,179,208, - 3,88,123,227,141,206,99,105,105,229,206,178,178,88,212,106,49,84,254,176, - 11,237,179,51,196,239,245,66,207,158,61,53,191,223,175,123,93,174,177,11, - 175,189,150,114,183,187,208,225,243,157,5,60,113,50,199,118,216,176,97,81, - 93,186,116,105,155,149,149,245,93,171,254,253,191,126,164,119,111,207,241,152, - 24,6,150,123,199,13,90,155,95,4,76,168,188,91,45,88,183,111,223,17, - 33,37,72,217,48,149,106,16,147,123,208,48,140,49,87,222,115,207,197,238, - 226,226,11,165,16,190,30,75,151,178,106,220,184,1,192,109,40,3,158,173, - 40,35,158,169,134,97,220,214,216,254,85,71,89,66,2,43,239,184,67,162, - 196,161,119,201,26,164,15,205,133,224,9,89,192,57,29,214,173,203,48,12, - 195,31,234,104,46,186,210,225,96,197,164,73,20,71,59,137,45,44,239,52, - 120,229,238,199,1,57,225,233,149,109,128,122,251,220,133,64,96,81,99,51, - 74,226,74,163,93,172,29,210,114,134,95,215,233,177,116,41,19,102,237,53, - 106,44,169,172,171,131,203,182,175,86,103,117,56,81,86,168,51,2,58,248, - 121,166,153,247,201,95,254,114,204,210,117,217,114,219,182,187,211,62,255,124, - 144,97,24,159,161,220,79,30,65,73,84,222,51,77,115,97,96,135,213,24, - 70,103,154,102,247,247,166,79,191,101,217,125,247,165,248,117,157,46,43,87, - 182,90,53,110,220,1,187,77,217,40,181,196,15,192,91,166,105,222,100,154, - 102,148,205,220,158,70,73,84,242,66,215,30,198,79,141,90,25,156,229,112, - 36,46,188,246,90,60,46,87,1,246,74,216,222,97,8,128,192,217,70,224, - 131,106,180,33,134,229,116,38,174,152,52,9,175,219,93,0,12,221,118,193, - 5,185,40,75,179,103,128,107,76,211,148,84,126,44,77,166,7,106,146,88, - 57,105,210,215,82,173,122,135,110,189,232,162,227,166,105,14,52,77,115,145, - 105,154,30,211,52,15,152,166,217,198,48,140,64,30,155,6,43,207,79,160, - 169,24,70,82,113,108,44,153,163,71,207,194,158,132,253,66,220,120,50,198, - 118,252,248,241,218,128,1,3,146,183,111,223,254,245,136,17,35,98,167,79, - 159,206,33,1,111,255,254,247,120,128,222,155,138,14,108,125,247,232,87,227, - 102,102,11,4,60,190,164,128,251,254,149,143,101,129,166,105,72,41,11,26, - 74,179,186,88,71,192,106,33,229,159,1,6,191,254,250,250,212,109,219,52, - 160,27,240,57,112,212,48,140,71,27,211,183,218,112,180,107,87,128,191,216, - 255,190,36,235,112,23,104,10,132,50,68,26,203,73,100,168,29,59,78,213, - 2,71,124,252,48,29,20,35,255,248,55,221,145,224,235,147,181,159,115,151, - 253,112,207,203,127,62,183,51,240,113,77,117,196,199,15,211,3,117,212,147, - 108,21,70,185,169,111,202,206,172,63,40,23,69,77,50,195,235,208,6,190, - 252,231,115,53,225,142,171,73,183,87,95,38,27,16,79,95,7,188,108,154, - 230,51,192,254,131,189,123,247,89,255,135,63,8,128,193,175,191,254,206,127, - 30,125,244,28,148,126,51,19,181,27,60,29,248,173,105,154,187,77,211,156, - 220,80,43,103,211,52,111,67,169,41,30,62,218,173,155,22,232,215,217,115, - 230,180,76,217,190,189,13,240,176,77,11,224,34,148,15,231,107,192,155,40, - 171,103,8,167,10,251,89,163,174,151,188,176,56,54,150,143,199,140,121,27, - 251,195,189,55,61,221,176,119,25,164,167,167,203,244,244,244,10,179,104,251, - 92,99,196,137,122,162,176,44,33,129,175,174,191,254,109,192,211,125,249,242, - 232,203,239,185,103,20,74,132,53,9,165,172,223,219,140,244,0,40,78,73, - 105,189,237,194,11,31,2,60,167,127,252,177,251,127,38,77,26,136,210,187, - 165,2,29,12,195,56,96,154,102,15,251,246,38,185,10,124,247,221,119,150, - 148,210,143,50,8,96,195,217,103,31,195,158,132,53,41,103,220,155,158,222, - 31,154,119,108,119,236,216,17,1,180,190,232,162,139,98,231,205,155,139,211, - 233,7,202,121,107,239,142,146,165,23,94,0,192,99,199,202,214,3,72,201, - 153,69,69,18,112,115,227,141,227,200,207,207,187,70,215,235,101,151,80,39, - 4,60,183,119,224,192,163,14,175,151,225,47,191,108,186,143,31,79,2,70, - 2,43,154,34,106,174,139,38,202,73,60,18,120,79,42,61,219,73,129,128, - 213,156,36,134,218,177,227,212,100,148,78,172,63,208,63,33,225,220,254,129, - 223,14,183,137,101,87,183,148,5,0,221,55,31,186,61,229,112,225,231,40, - 113,250,159,171,215,99,151,235,15,164,217,117,134,66,72,125,235,214,81,163, - 216,49,124,56,64,164,144,242,131,246,59,115,206,211,220,241,189,104,186,129, - 134,5,220,2,220,133,98,96,254,173,163,70,229,101,247,239,191,223,225,245, - 114,217,67,15,189,121,189,114,202,191,30,101,8,86,140,250,30,59,0,79, - 152,166,121,93,125,9,153,166,57,5,245,110,4,34,224,236,218,58,106,212, - 153,165,113,113,239,233,62,159,118,241,227,143,63,219,37,51,243,160,221,158, - 255,13,42,122,13,42,96,65,216,215,247,23,128,186,24,220,203,0,155,6, - 14,60,171,40,54,246,17,251,218,9,31,110,70,70,198,64,148,193,202,247, - 168,21,121,99,241,50,192,206,115,207,61,171,36,62,254,17,128,216,35,71, - 158,79,253,225,135,169,64,127,195,48,44,59,52,83,115,209,3,229,151,148, - 246,149,97,196,98,79,78,145,199,143,63,115,189,97,116,54,12,163,32,40, - 68,212,123,246,185,201,43,54,41,165,133,221,87,224,247,79,100,100,188,69, - 208,36,124,247,212,169,21,147,112,115,140,173,207,231,139,218,188,121,243,39, - 94,175,7,77,243,243,216,229,113,24,61,15,71,58,157,22,79,121,202,74, - 190,238,221,155,72,32,91,215,228,248,153,217,89,209,209,113,143,220,122,235, - 173,68,69,69,209,182,109,187,183,53,77,75,2,146,166,79,159,222,208,40, - 33,145,166,105,182,48,77,179,141,253,255,39,171,38,76,72,201,233,216,145, - 232,156,156,51,135,207,152,177,69,88,86,9,112,59,176,193,142,128,114,50, - 48,17,181,242,239,0,188,37,171,90,53,54,43,78,38,67,157,120,209,226, - 237,19,47,90,252,245,196,139,22,127,125,251,168,79,214,6,255,246,201,152, - 30,203,183,246,108,137,38,113,141,250,247,247,173,147,142,22,157,6,124,69, - 181,112,105,127,185,226,139,181,247,92,158,249,245,61,151,103,110,111,74,91, - 214,222,112,3,71,91,198,160,251,101,235,222,89,251,63,17,150,184,21,248, - 0,200,106,74,189,40,198,17,96,30,51,13,195,72,106,183,97,67,23,42, - 159,223,187,215,27,198,65,195,48,70,27,234,155,93,133,250,134,35,128,89, - 166,105,158,87,23,1,211,52,59,1,211,168,124,15,174,5,186,27,134,145, - 21,121,252,248,181,192,122,205,178,78,27,50,123,246,139,215,27,198,30,148, - 174,173,23,74,191,25,104,99,24,191,0,212,53,97,253,27,181,74,26,240, - 194,125,247,245,199,254,112,37,188,127,165,105,182,5,200,200,200,104,131,50, - 175,7,216,146,158,158,254,93,19,218,83,65,239,95,207,63,95,65,239,162, - 39,158,72,235,188,114,229,98,0,123,178,172,160,103,24,70,83,232,129,242, - 83,2,72,159,103,154,239,81,195,228,100,154,230,63,80,58,176,60,224,201, - 38,210,99,211,166,77,62,130,250,10,204,32,104,18,118,248,124,243,37,232, - 205,53,182,62,159,47,82,74,41,252,254,202,239,82,74,201,216,180,125,81, - 94,111,57,247,68,69,149,236,111,213,138,182,126,139,237,29,59,62,124,227, - 245,55,101,174,93,187,182,196,22,79,2,172,65,237,30,234,205,228,76,211, - 108,135,154,92,15,3,251,109,241,242,5,150,203,37,87,220,121,39,94,183, - 187,172,245,247,223,107,253,223,121,231,74,148,142,227,97,96,141,105,154,195, - 26,211,199,218,32,160,12,248,61,202,208,225,66,148,14,231,100,226,164,48, - 212,25,31,95,210,117,198,199,151,12,156,241,241,37,3,95,92,118,225,224, - 234,191,175,186,176,43,37,81,206,189,177,133,229,140,94,248,221,131,194,146, - 237,129,29,192,178,192,61,79,190,63,116,240,83,11,71,14,124,106,225,200, - 174,77,105,139,229,114,241,125,159,86,191,179,132,200,111,251,99,62,99,231, - 126,237,66,249,253,93,91,75,177,134,44,144,202,1,175,105,154,113,161,158, - 159,173,231,29,129,50,34,242,162,220,52,158,51,77,211,93,71,221,155,81, - 76,202,15,220,101,24,198,155,134,97,248,32,228,187,18,133,50,38,233,76, - 152,185,253,162,80,235,11,151,158,158,126,88,74,57,217,254,247,138,167,30, - 125,116,148,199,233,252,94,64,251,110,91,182,204,254,251,99,143,157,143,122, - 161,59,1,59,211,211,211,255,167,41,141,49,12,227,48,149,17,5,174,120, - 115,214,172,81,62,151,235,123,221,231,107,125,206,172,89,127,251,231,236,217, - 143,161,68,18,179,129,157,134,97,52,137,158,141,185,192,71,40,113,228,55, - 111,190,250,106,71,236,201,169,60,58,122,209,188,57,115,122,1,207,218,116, - 223,55,12,99,93,200,154,26,128,244,244,244,195,150,101,5,148,240,87,60, - 145,145,177,125,249,101,151,221,7,28,211,44,235,188,109,61,123,102,2,45, - 81,97,171,154,52,182,82,74,124,62,159,116,58,157,72,169,115,223,191,242, - 73,127,247,40,247,188,117,132,111,190,217,20,149,87,90,42,166,180,109,91, - 86,224,116,202,46,123,246,76,189,249,165,151,246,120,60,158,59,150,46,93, - 90,236,245,122,3,76,110,45,245,100,114,118,6,129,192,14,97,3,106,181, - 188,197,254,95,43,78,73,121,198,89,94,254,27,192,223,243,163,143,254,175, - 227,154,53,255,54,12,35,48,145,188,99,154,230,136,19,107,109,26,132,18, - 109,95,131,154,212,238,147,208,28,239,78,40,90,205,206,80,247,236,121,36, - 7,216,133,26,207,13,249,249,43,79,112,67,240,59,52,62,189,244,244,25, - 165,145,14,98,143,151,143,24,184,122,207,63,81,19,255,152,192,61,118,185, - 13,192,46,187,206,250,34,166,250,133,239,187,71,46,6,57,22,240,39,230, - 150,222,216,126,221,186,245,83,254,124,239,214,137,47,108,122,141,170,59,185, - 19,202,214,3,17,168,185,224,5,211,52,35,107,122,126,1,157,155,253,238, - 4,130,38,244,2,206,9,85,169,105,154,51,168,140,29,186,192,48,140,233, - 213,141,83,170,211,234,241,209,71,239,161,116,110,225,204,14,191,48,212,185, - 162,186,239,190,251,94,243,251,253,143,1,194,231,116,182,158,117,215,93,61, - 74,162,162,0,46,28,246,233,167,79,2,203,81,202,228,246,25,25,25,50, - 35,35,99,98,83,26,100,24,198,108,148,51,181,240,187,92,173,63,120,226, - 137,30,101,49,49,0,23,246,89,184,240,1,84,14,175,199,129,165,166,105, - 74,211,52,155,74,47,23,120,0,181,139,72,244,187,221,35,223,123,230,153, - 51,203,98,98,112,23,23,15,234,251,254,251,211,80,122,162,189,192,159,76, - 211,220,96,139,56,154,140,251,239,191,127,86,96,108,129,54,95,13,27,182, - 244,173,155,111,78,177,132,160,219,119,223,13,235,190,105,211,63,236,182,53, - 105,108,45,203,42,241,249,124,214,167,159,126,90,252,199,63,94,143,215,171, - 81,92,12,69,69,30,202,203,125,236,216,177,35,114,213,190,125,17,255,185, - 238,58,33,193,106,151,147,179,235,149,172,172,111,75,75,75,253,75,150,44, - 105,12,147,155,128,90,77,175,2,174,52,12,227,110,148,213,100,64,71,51, - 77,192,114,41,196,255,1,98,232,204,153,218,251,255,248,71,63,187,92,107, - 224,13,59,136,113,125,17,48,130,169,85,63,42,212,187,26,24,239,87,101, - 101,144,230,102,199,201,96,168,123,246,60,98,5,142,130,130,85,53,78,182, - 251,59,36,150,47,191,236,12,36,88,253,215,102,51,232,243,221,83,128,251, - 128,243,0,10,10,86,249,3,117,212,65,46,48,166,63,218,231,233,0,88, - 214,241,192,13,178,252,184,95,151,124,130,61,166,67,102,207,102,78,250,61, - 3,102,220,209,95,3,134,163,130,108,87,150,173,172,179,58,2,59,92,45, - 232,16,246,113,61,240,166,105,154,238,58,158,223,28,32,16,71,116,70,45, - 253,218,131,50,192,209,177,131,54,212,100,156,34,96,249,241,150,45,103,2, - 162,247,7,31,92,20,123,248,112,160,157,193,109,132,147,144,145,34,140,230, - 67,157,12,46,35,35,67,60,240,192,3,15,161,20,171,95,29,79,76,220, - 254,159,177,99,15,89,66,48,228,179,207,6,252,230,157,119,174,156,63,127, - 126,27,224,124,187,200,139,25,25,25,127,108,108,131,108,177,195,163,1,122, - 197,41,41,219,191,184,245,214,67,150,16,244,250,224,3,186,100,102,102,218, - 183,166,5,232,153,166,217,104,122,0,134,97,108,48,12,163,59,240,18,176, - 165,56,37,101,87,16,205,11,47,187,255,254,24,195,48,58,161,38,208,126, - 192,108,211,52,59,55,133,38,192,95,255,250,91,125,211,166,5,15,75,41, - 127,135,210,151,108,223,219,165,203,238,117,195,135,231,9,224,178,119,223,29, - 153,58,109,218,243,168,80,83,208,200,177,149,82,150,90,150,213,219,178,44, - 255,231,159,127,94,60,97,194,4,18,18,18,72,76,76,34,33,33,129,184, - 184,56,110,190,249,102,246,117,239,206,218,209,163,53,64,116,45,42,90,126, - 215,238,221,191,45,43,43,171,145,201,73,41,67,249,52,129,98,110,0,19, - 12,165,195,8,248,47,6,116,24,167,3,8,41,31,1,222,209,44,43,102, - 76,122,250,123,134,97,204,68,237,118,78,3,254,99,154,102,125,195,39,253, - 29,245,236,166,213,227,222,71,129,119,128,4,96,145,12,109,186,222,100,156, - 74,134,10,86,32,44,218,244,253,29,18,57,210,42,246,13,1,244,248,230, - 192,13,113,249,165,83,13,195,200,68,153,214,215,9,59,226,72,30,74,68, - 191,151,138,48,86,214,96,44,111,126,13,69,30,149,176,192,85,82,194,239, - 102,189,190,62,194,239,120,200,46,179,23,21,161,6,251,255,80,59,198,61, - 40,107,198,55,66,28,2,219,77,136,16,207,207,48,140,205,40,67,180,46, - 64,223,90,186,247,52,42,236,224,104,195,48,106,213,67,126,248,248,227,79, - 22,182,104,241,133,171,164,132,203,30,120,96,127,194,190,125,1,3,147,192, - 241,59,187,61,97,252,76,81,37,146,201,35,87,183,150,101,105,173,147,80, - 140,47,47,35,35,203,74,79,79,151,25,25,25,34,61,61,125,17,176,40, - 35,35,163,197,174,211,79,143,42,140,139,155,18,95,80,48,185,199,134,13, - 119,252,233,210,212,251,23,175,92,25,119,238,185,231,174,65,69,165,120,35, - 35,35,35,58,61,61,253,213,140,140,12,17,25,185,72,3,98,166,76,89, - 85,167,185,121,144,15,213,34,96,145,105,154,45,14,244,237,27,85,154,152, - 56,57,58,55,119,202,144,217,179,219,72,232,50,79,137,93,86,6,232,153, - 166,25,109,24,198,171,129,216,134,13,29,8,187,220,237,166,202,10,221,234, - 64,223,190,78,79,116,244,109,17,69,69,127,73,202,206,126,66,194,242,121, - 74,14,255,4,106,71,55,219,52,205,63,213,39,48,111,117,164,167,15,208, - 128,132,136,93,95,229,164,165,181,79,45,44,124,247,35,96,77,196,174,131, - 199,68,207,43,6,172,188,112,100,193,224,149,43,159,112,121,60,99,111,60, - 114,228,165,241,243,230,77,232,122,253,245,143,82,195,216,6,44,90,107,195, - 186,117,235,74,6,13,26,132,101,89,189,128,205,171,86,173,42,190,229,150, - 91,162,125,62,31,154,166,225,112,56,88,189,122,117,201,168,81,163,162,190, - 28,53,138,164,67,135,232,182,113,99,220,229,135,15,207,217,20,23,55,244, - 147,228,228,47,150,44,89,82,60,122,244,232,104,93,215,209,52,109,237,190, - 125,251,218,223,123,239,189,121,202,79,251,4,4,118,7,15,96,167,189,177, - 131,103,183,176,175,23,0,8,144,82,249,18,245,212,253,254,158,158,136,136, - 25,111,75,249,170,29,82,229,65,96,173,105,154,157,13,195,216,85,91,255, - 12,195,88,133,218,45,214,137,96,154,246,97,162,38,170,206,156,156,104,25, - 143,162,34,101,92,133,154,144,7,9,213,255,61,77,173,248,134,27,110,28, - 52,105,210,29,235,206,240,230,140,210,162,82,247,34,24,132,29,162,235,131, - 107,250,30,191,246,213,181,173,163,138,189,23,94,249,198,183,135,111,184,252, - 202,3,55,220,112,99,199,250,214,61,225,233,149,57,182,195,119,30,202,162, - 49,21,203,66,250,203,79,144,94,8,144,121,113,142,91,136,109,57,54,113, - 255,126,206,91,226,159,186,236,183,103,44,150,186,35,240,220,82,9,10,217, - 85,29,134,97,108,2,174,168,79,187,106,122,126,18,46,23,42,85,210,71, - 117,149,183,253,16,15,17,20,236,59,20,174,187,229,150,61,82,197,196,253, - 210,89,94,222,115,204,125,247,253,17,155,86,125,218,26,198,79,15,113,124, - 97,119,25,119,249,54,145,158,62,64,139,216,117,208,15,80,150,214,250,52, - 148,30,161,128,154,31,166,112,151,251,19,254,58,99,179,25,89,230,191,52, - 39,70,199,85,42,19,95,252,191,199,5,202,146,42,96,40,112,127,122,122, - 250,223,94,153,208,177,91,201,233,109,75,129,253,127,234,120,212,15,13,79, - 33,47,213,42,238,109,212,68,241,3,48,104,158,105,106,213,233,25,134,241, - 183,234,76,174,177,105,235,67,208,188,6,101,104,18,11,124,141,210,5,236, - 173,94,182,38,154,54,99,19,192,192,136,93,7,191,4,40,75,107,221,29, - 216,157,145,145,229,125,228,234,214,210,190,214,103,226,236,173,63,182,61,92, - 242,5,208,211,43,196,71,183,92,117,213,228,51,250,245,155,67,181,177,13, - 102,114,117,245,115,208,160,65,81,66,136,100,77,211,54,57,28,14,205,225, - 112,8,64,118,237,218,117,204,214,173,91,63,116,58,157,218,197,23,95,28, - 29,101,89,92,51,125,58,201,135,14,81,238,116,126,124,233,89,103,141,47, - 131,111,34,34,34,244,139,47,190,56,122,233,210,165,133,253,250,245,235,81, - 90,90,122,224,239,23,127,122,194,243,52,77,243,47,168,137,61,2,165,227, - 188,11,229,63,116,5,144,111,24,70,149,221,159,84,43,238,245,128,238,117, - 187,239,88,240,194,11,27,252,110,247,69,84,198,253,236,106,24,198,142,250, - 244,209,166,191,0,37,18,12,153,31,46,152,38,240,27,1,139,236,178,229, - 134,97,84,24,41,132,162,103,154,230,181,40,81,88,148,97,24,181,58,255, - 75,165,131,250,18,53,33,127,0,92,62,207,52,111,68,233,146,173,224,248, - 144,13,120,87,53,16,105,32,183,11,225,232,154,144,112,222,238,248,248,115, - 18,80,239,151,4,242,255,80,184,254,180,71,114,62,90,230,196,234,254,1, - 48,22,186,121,212,46,186,66,60,217,144,111,99,198,132,174,154,244,123,210, - 98,135,63,182,29,160,240,243,7,245,219,95,221,107,129,10,182,220,190,195, - 56,255,165,15,62,136,38,37,150,38,54,229,39,70,158,147,156,83,82,197, - 23,174,177,223,98,117,84,123,126,27,128,97,162,154,197,104,115,209,171,47, - 173,0,189,248,43,126,104,44,169,48,154,25,53,126,252,17,187,14,238,71, - 41,167,29,168,200,30,142,160,195,5,56,203,221,186,54,253,210,148,75,143, - 196,57,72,46,242,19,235,183,230,222,155,158,158,143,114,136,12,88,251,61, - 156,145,145,241,156,192,146,84,230,141,107,20,236,85,211,205,118,221,221,0, - 243,122,195,56,129,158,105,154,207,53,87,90,155,16,52,95,65,249,197,148, - 0,3,81,186,192,58,69,105,233,233,3,18,81,214,153,122,128,185,217,200, - 166,154,242,58,98,215,193,111,103,252,233,244,232,221,237,98,38,2,126,167, - 148,151,206,153,63,255,221,243,23,45,250,29,213,198,182,62,59,184,0,214, - 173,91,87,34,165,204,177,44,171,179,207,231,235,89,94,94,222,195,231,243, - 165,125,255,253,247,223,249,124,190,222,1,157,91,137,166,177,248,186,235,176, - 132,192,237,245,94,180,116,237,218,255,12,40,44,28,92,90,90,234,91,184, - 112,97,65,167,78,157,6,102,101,101,229,190,244,210,75,53,234,113,12,195, - 120,18,101,81,103,161,28,158,115,81,204,237,16,53,68,99,17,240,13,48, - 10,200,118,150,151,15,116,150,149,37,27,134,241,48,138,233,124,64,237,34, - 167,90,97,154,102,187,154,142,121,166,153,123,184,123,247,107,45,77,59,32, - 133,184,234,159,175,189,150,109,23,121,187,177,180,66,65,40,29,245,181,168, - 231,252,91,96,189,171,176,240,71,154,102,124,98,129,204,3,82,164,244,229, - 149,150,254,32,247,236,121,36,103,207,158,71,142,217,103,127,70,206,127,126, - 244,170,29,180,255,183,64,17,252,75,54,33,48,194,196,151,183,91,64,94, - 225,231,15,166,20,126,254,96,74,128,185,1,220,254,234,94,235,199,189,175, - 166,228,37,56,174,144,176,95,88,114,67,82,78,73,147,125,84,67,33,248, - 157,65,137,240,79,154,1,200,169,164,21,70,243,162,230,124,112,82,18,177, - 235,224,241,26,127,11,130,215,169,241,254,217,9,140,251,248,24,154,84,31, - 238,189,233,233,195,4,244,202,200,200,56,128,18,77,108,69,233,110,154,236, - 63,38,160,72,170,137,98,61,246,68,113,189,97,12,19,208,203,52,205,74, - 122,205,136,80,52,231,169,212,57,79,2,209,245,177,172,140,216,117,48,55, - 196,245,18,128,71,174,110,93,253,250,254,121,231,196,210,241,176,11,35,51, - 55,91,194,183,238,172,172,210,244,85,171,170,142,109,3,177,110,221,186,18, - 160,100,224,192,129,85,196,69,154,166,149,104,154,214,171,172,172,108,115,64, - 28,249,222,132,9,92,252,214,91,32,229,158,78,189,123,123,215,239,222,221, - 197,178,44,249,253,247,223,151,174,89,179,38,100,142,56,123,7,61,217,84, - 9,65,3,58,46,1,44,13,236,196,170,67,192,167,18,206,154,103,154,21, - 121,247,12,195,248,77,181,58,235,203,204,3,153,15,4,149,70,18,39,96, - 217,253,247,19,81,80,64,89,124,188,97,211,104,93,83,128,239,186,96,199, - 80,172,117,1,55,15,142,142,126,244,209,63,36,239,218,53,221,114,56,182, - 89,78,231,24,148,120,244,55,181,149,171,3,21,58,173,178,178,19,132,8, - 0,68,99,109,144,106,114,126,221,169,44,27,155,52,57,215,150,231,237,246, - 87,247,230,220,174,162,242,175,17,53,69,85,110,102,4,222,153,95,27,173, - 48,154,15,53,51,56,33,40,75,107,29,143,138,124,46,168,234,199,163,161, - 62,146,216,136,93,7,143,28,78,116,242,207,17,73,24,153,185,85,86,55, - 233,233,233,109,50,50,50,140,244,244,116,243,213,9,237,187,210,76,114,107, - 1,223,4,62,216,96,122,134,97,180,49,77,211,48,12,195,108,14,58,117, - 209,52,12,99,154,105,154,165,134,97,188,92,123,105,133,178,180,214,41,168, - 104,48,165,17,187,14,122,131,174,183,1,28,25,25,89,217,1,17,165,125, - 61,17,240,110,77,195,75,102,110,162,3,14,83,162,120,74,240,216,54,182, - 79,95,127,253,117,245,221,87,73,207,158,61,173,216,216,216,42,76,238,141, - 41,83,40,139,143,191,236,192,190,125,183,117,115,58,115,231,206,157,91,167, - 31,80,16,131,122,161,33,109,18,112,24,163,230,240,134,13,220,149,167,163, - 76,197,235,116,28,47,139,175,98,99,178,199,52,205,49,134,97,44,11,117, - 127,16,190,71,249,49,198,81,105,45,88,43,150,60,244,80,128,161,94,3, - 96,24,198,20,148,20,224,164,226,84,79,206,167,146,9,252,90,105,133,209, - 60,168,145,193,217,147,174,64,137,152,36,39,42,223,5,32,203,210,90,15, - 138,216,117,112,221,158,150,110,60,78,109,144,219,107,85,81,220,166,167,167, - 155,25,25,25,130,189,47,129,29,154,170,57,16,234,131,53,12,195,108,172, - 145,73,67,105,218,116,234,197,220,0,50,50,178,114,108,29,28,101,105,173, - 251,71,236,58,24,240,99,242,82,173,31,182,94,174,16,144,25,25,89,86, - 70,13,31,86,96,108,27,34,162,172,11,223,125,247,93,217,160,65,131,114, - 128,10,38,119,241,197,23,71,47,253,240,195,194,126,253,250,201,168,168,70, - 167,48,59,165,48,12,35,223,52,205,171,129,43,9,29,60,187,58,116,224, - 155,122,50,55,12,195,216,96,154,230,221,40,227,148,122,35,152,161,154,166, - 57,213,48,140,71,106,122,103,109,223,44,97,71,182,111,50,194,147,115,24, - 255,141,168,48,50,129,10,43,202,20,212,174,232,120,70,70,86,200,143,203, - 158,172,19,1,111,196,174,131,5,83,231,31,12,41,130,156,62,125,152,142, - 109,69,217,92,74,230,134,224,231,70,211,30,187,248,136,93,7,115,237,241, - 206,5,146,34,118,29,60,102,91,177,22,212,54,246,141,161,89,29,29,59, - 118,116,238,217,179,167,138,142,36,54,54,86,43,44,44,108,16,221,0,205, - 48,194,8,67,33,108,100,242,243,65,149,29,156,98,82,245,139,151,106,79, - 192,1,121,124,173,19,234,148,41,171,252,132,118,242,252,175,131,61,118,121, - 64,240,120,231,84,251,255,164,162,58,115,3,104,40,115,11,32,252,65,135, - 17,70,24,63,71,52,57,245,75,24,97,132,17,70,24,97,252,28,33,194, - 34,166,48,154,138,240,14,46,140,48,194,248,57,34,204,224,194,8,227,191, - 20,225,133,73,24,191,118,56,224,231,99,124,17,166,25,166,249,223,78,243, - 84,211,9,35,140,95,51,106,114,19,104,110,189,92,125,12,23,194,52,79, - 30,205,83,2,33,68,32,12,25,156,28,221,238,9,125,181,105,54,20,193, - 140,35,84,249,96,90,85,24,129,16,66,183,3,77,39,161,2,254,158,72, - 64,8,251,208,52,0,41,45,75,74,25,8,86,93,19,242,129,92,33,68, - 94,80,29,39,139,78,190,16,34,45,212,13,97,132,241,107,66,117,6,151, - 140,50,253,15,25,97,93,8,161,9,33,208,52,29,77,19,34,180,1,165, - 148,32,10,4,228,148,123,202,107,203,59,117,202,105,186,93,238,100,9,201, - 32,227,177,35,251,214,80,23,150,37,165,101,249,177,39,141,218,152,73,1, - 202,42,242,103,69,179,190,24,243,155,49,26,192,135,255,249,176,209,12,211, - 110,107,178,16,34,81,8,145,168,105,186,16,118,100,92,203,242,203,192,196, - 27,152,148,27,241,123,158,148,178,74,127,235,24,159,144,112,56,28,201,118, - 76,206,120,93,215,133,176,31,135,148,18,191,223,47,45,203,42,144,82,230, - 248,124,190,19,198,86,74,233,71,49,189,109,181,140,5,78,167,19,183,75, - 69,197,42,247,148,225,241,120,234,106,86,138,93,247,201,166,147,202,207,104, - 97,20,70,24,39,19,53,237,224,106,77,33,81,241,81,185,35,112,185,92, - 132,100,54,82,226,241,148,51,98,248,5,221,5,34,239,195,197,239,215,246, - 81,213,131,166,11,183,219,221,100,154,99,46,185,66,147,200,228,21,159,47, - 223,230,114,185,67,243,26,36,30,143,135,242,242,122,77,26,96,103,255,174, - 9,13,167,89,142,199,83,222,36,154,245,197,165,151,92,154,236,247,251,19, - 237,191,243,62,90,252,81,147,24,166,148,114,123,240,251,81,125,12,171,191, - 63,13,252,189,161,253,13,222,161,5,222,5,77,8,145,236,116,58,183,197, - 196,196,16,29,93,53,157,87,113,113,49,69,69,69,120,189,222,64,6,247, - 80,239,109,87,16,241,32,180,202,141,164,138,115,236,112,56,196,217,131,206, - 233,48,234,130,75,222,1,88,182,124,241,85,107,214,174,222,235,243,249,100, - 101,44,100,80,252,89,90,32,79,112,161,73,105,53,81,203,61,50,7,41, - 61,93,165,180,226,107,10,4,228,112,56,181,179,7,13,235,24,76,103,245, - 151,159,239,241,249,188,53,180,89,32,132,86,32,132,19,41,79,90,136,200, - 48,194,248,89,161,38,6,215,149,90,118,83,14,135,83,27,124,150,250,168, - 188,126,21,193,203,231,211,112,56,172,138,179,0,156,14,11,151,203,197,142, - 93,63,196,71,71,213,149,208,87,116,21,194,145,24,25,51,32,65,160,227, - 116,183,77,240,122,14,28,119,186,218,196,121,203,247,31,215,117,232,219,51, - 42,126,212,133,163,230,43,214,16,90,61,81,23,205,46,93,186,83,92,82, - 20,255,96,250,227,120,60,30,188,62,77,133,106,169,214,7,0,167,238,183, - 39,167,80,147,70,5,106,245,241,171,78,51,52,36,18,88,246,201,178,171, - 191,249,174,164,192,239,7,167,251,180,184,202,177,216,151,47,241,83,90,148, - 149,47,165,47,175,169,209,207,218,181,107,167,237,216,177,35,185,99,199,142, - 219,0,246,236,217,211,189,93,187,118,121,217,217,217,141,94,225,235,186,62, - 202,237,118,47,155,56,126,10,49,209,49,20,21,23,49,227,149,105,248,253, - 254,171,252,126,255,94,93,215,59,184,221,238,119,26,241,251,40,191,191,254, - 97,20,117,93,237,210,16,34,94,211,180,2,77,104,57,29,58,156,158,183, - 109,91,22,154,166,197,199,196,196,240,225,135,31,146,154,154,90,165,220,209, - 163,71,25,51,102,12,5,5,5,181,229,137,203,113,186,219,229,69,69,159, - 41,82,90,223,158,44,208,132,166,69,197,91,86,105,129,166,69,198,71,184, - 11,143,15,25,146,155,148,148,84,10,192,144,33,227,11,243,203,238,253,177, - 172,60,54,46,112,143,101,149,20,72,44,121,236,224,139,57,37,197,235,165, - 211,217,130,86,109,31,210,224,175,0,36,183,28,159,152,212,226,38,33,173, - 210,252,35,7,158,217,93,92,184,10,159,247,88,149,7,126,193,121,163,244, - 75,47,254,173,238,116,170,96,45,191,191,252,234,236,200,200,200,141,75,63, - 94,84,49,80,14,103,138,112,185,59,17,21,115,166,150,152,114,109,188,101, - 21,234,135,178,31,78,12,187,165,134,241,223,128,234,12,46,135,16,57,155, - 2,232,219,247,119,122,191,1,87,233,145,81,229,80,230,96,249,23,29,57, - 119,112,54,43,215,182,171,56,143,30,185,155,200,8,15,78,135,164,111,239, - 1,162,224,120,77,57,18,43,105,198,38,92,148,215,170,237,189,41,154,30, - 171,11,225,94,3,190,107,192,177,68,224,187,70,226,88,162,107,229,151,246, - 236,189,95,143,139,205,199,233,172,123,82,175,141,102,106,106,11,186,196,117, - 19,66,8,188,62,65,105,153,139,37,153,157,78,232,195,5,67,247,16,25, - 225,163,223,128,9,217,37,101,73,27,215,175,127,183,174,217,53,36,83,8, - 166,89,23,188,94,65,207,222,183,235,185,165,167,105,126,203,253,81,96,12, - 236,49,89,38,101,249,16,203,95,184,247,208,190,39,142,21,230,47,107,138, - 168,73,219,191,127,127,82,98,66,98,135,61,123,247,0,16,27,19,219,33, - 47,63,47,23,21,89,165,49,117,231,235,186,94,224,114,185,137,137,137,37, - 49,49,25,132,192,229,114,83,86,86,158,237,247,251,191,209,52,93,107,204, - 239,229,229,229,5,126,191,191,214,23,41,184,111,66,136,100,93,119,110,139, - 140,84,59,180,190,125,135,15,94,187,118,201,78,187,141,34,58,58,154,212, - 212,84,218,183,111,143,166,84,88,88,150,234,114,116,116,52,69,69,69,181, - 62,172,206,103,124,132,128,68,4,29,165,100,173,16,92,173,201,152,249,66, - 200,171,61,190,232,249,135,115,228,248,54,173,212,46,252,112,78,98,59,143, - 175,213,98,221,17,184,167,226,60,184,77,251,199,44,9,185,9,113,58,199, - 139,172,138,52,66,154,166,167,73,169,175,19,122,196,160,54,237,31,147,91, - 54,246,62,97,103,221,179,71,31,225,116,186,172,192,123,229,116,186,172,158, - 61,250,88,75,63,94,84,241,236,124,222,99,116,237,245,89,50,74,21,208, - 65,202,248,101,81,49,103,142,135,79,235,57,148,97,132,241,203,69,77,74, - 118,171,218,81,229,122,167,46,147,253,123,247,183,178,230,127,216,139,15,151, - 159,142,199,27,201,226,204,202,115,105,121,4,139,63,235,130,207,231,0,33, - 208,52,141,196,132,164,26,200,84,162,255,192,103,113,185,83,19,28,122,196, - 26,167,67,224,118,57,223,142,112,9,92,46,231,219,17,46,13,77,143,248, - 232,155,45,109,223,244,249,29,65,138,245,208,71,109,52,19,19,146,212,132, - 38,4,62,159,131,197,159,117,81,109,206,172,218,151,15,151,159,206,252,15, - 123,177,119,127,43,171,83,151,201,254,80,227,81,195,245,144,52,235,211,118, - 159,223,193,55,91,218,190,169,233,17,31,69,184,52,123,12,212,152,56,29, - 2,60,121,135,172,0,0,32,0,73,68,65,84,135,30,177,198,229,78,77, - 232,63,240,217,90,199,180,30,72,180,44,171,83,78,110,206,50,143,199,131, - 199,227,33,39,55,103,153,101,89,157,80,58,209,198,192,22,193,9,124,62, - 29,159,79,195,231,211,81,226,49,97,1,150,58,55,252,119,123,215,94,239, - 45,171,16,90,124,100,100,52,255,247,248,191,120,234,233,197,124,243,237,170, - 181,154,166,39,71,71,199,105,193,11,141,224,231,18,96,116,170,124,237,139, - 17,77,19,137,66,35,77,19,172,117,58,192,237,20,243,35,92,160,81,54, - 95,215,75,217,178,61,234,21,203,175,99,249,117,182,108,143,122,69,215,75, - 209,40,155,31,225,82,247,58,29,160,9,214,10,141,52,77,19,137,209,81, - 26,167,181,114,38,7,234,215,117,177,206,190,103,157,166,147,124,238,133,91, - 130,191,85,13,72,158,51,119,102,242,142,93,63,84,236,52,119,236,250,33, - 126,206,220,153,1,102,166,1,12,24,242,157,38,4,201,154,198,54,135,206, - 50,183,75,144,156,250,219,87,234,59,142,97,132,241,75,70,205,217,4,42, - 17,48,0,1,181,179,203,203,201,245,8,191,108,141,215,107,113,70,183,8, - 244,106,44,210,111,65,246,129,98,124,126,39,150,37,209,132,133,16,181,207, - 75,157,218,187,146,34,34,180,78,71,115,188,116,105,111,97,89,74,180,227, - 112,70,225,112,68,96,89,176,255,160,23,75,234,52,71,210,101,41,5,150, - 212,240,249,157,248,45,55,105,237,163,107,236,199,150,31,202,200,63,158,130, - 46,14,10,212,132,145,88,109,60,154,108,224,81,29,150,212,113,58,52,122, - 117,143,68,211,192,231,43,197,231,85,89,4,52,45,146,29,63,106,164,38, - 59,59,181,110,225,200,93,89,153,22,166,49,16,168,236,207,0,215,216,231, - 183,237,107,169,53,150,168,7,164,4,175,87,163,220,227,228,131,143,187,49, - 168,207,122,188,94,141,128,97,95,83,127,175,7,52,64,23,66,232,17,17, - 209,196,199,167,16,17,17,69,98,66,42,73,201,173,58,109,222,180,58,223, - 225,104,154,145,231,168,203,182,105,82,146,124,240,136,119,173,203,1,221,187, - 68,216,207,170,132,210,210,18,86,173,188,151,75,47,251,135,253,190,66,215, - 78,146,143,22,77,102,216,185,79,16,25,25,129,195,17,137,101,193,182,29, - 101,120,124,172,109,221,194,217,61,50,66,228,107,162,210,90,178,127,175,72, - 124,62,201,214,157,101,21,207,59,118,204,252,220,69,31,94,13,202,178,178, - 83,94,126,238,186,35,71,14,93,221,37,173,27,0,71,142,28,74,204,203, - 207,61,12,12,2,118,3,185,78,199,81,162,163,90,198,31,47,244,211,163, - 91,4,154,38,41,41,142,108,82,255,195,8,227,151,130,250,124,233,219,237, - 35,13,72,58,94,176,145,196,120,157,126,189,163,136,112,107,184,171,29,17, - 110,141,238,157,35,217,147,221,3,191,21,108,57,94,51,110,30,183,75,211, - 53,145,212,166,165,115,73,223,30,145,184,221,130,53,171,239,230,243,149,183, - 33,253,185,232,162,148,8,183,224,140,174,110,244,102,243,12,18,248,45,141, - 61,217,61,232,222,57,50,100,63,250,245,142,34,49,94,231,120,193,70,80, - 147,74,90,208,120,156,20,232,2,206,232,234,38,194,45,208,69,41,210,159, - 203,231,43,111,99,205,234,187,113,187,5,125,123,68,210,166,165,115,137,174, - 137,164,155,199,237,106,244,76,45,132,144,110,183,251,34,33,4,78,167,19, - 167,211,137,16,2,251,90,163,149,123,82,10,164,212,89,156,217,133,118,109, - 226,89,156,217,5,41,117,164,20,205,242,123,40,116,239,62,64,139,136,136, - 74,142,136,136,234,226,118,71,246,215,52,173,131,199,83,74,121,121,9,66, - 192,99,255,183,128,93,187,54,47,209,116,71,18,52,202,189,160,2,113,177, - 26,209,145,34,161,127,175,72,122,157,30,137,219,85,249,172,86,173,184,13, - 135,195,131,211,1,154,46,208,116,129,211,1,14,135,135,85,43,42,223,105, - 183,75,208,235,244,72,250,247,138,36,58,82,36,68,69,105,90,82,98,229, - 122,211,229,20,68,184,53,250,246,136,162,77,75,231,18,77,200,164,99,71, - 191,17,84,190,135,181,229,32,92,103,223,147,228,43,95,47,146,18,52,209, - 63,240,189,186,52,156,181,230,31,15,35,140,95,15,234,243,161,7,178,85, - 175,3,210,182,108,126,50,57,49,30,77,215,64,171,161,180,186,230,0,116, - 164,191,126,43,111,33,72,208,53,208,53,129,174,9,134,15,255,27,62,95, - 41,159,124,60,129,178,178,28,44,127,9,186,166,38,140,230,128,148,32,253, - 26,42,67,138,35,100,63,116,13,18,227,209,182,108,126,50,153,170,147,74, - 157,25,188,27,11,77,23,232,26,88,254,18,202,202,114,248,228,227,9,248, - 124,165,12,31,254,183,138,241,209,149,132,181,70,223,168,250,34,37,53,37, - 207,237,118,255,152,154,154,138,207,231,123,219,231,243,189,157,154,154,138,219, - 237,254,49,37,53,165,86,61,108,237,16,248,45,157,174,157,162,176,44,39, - 93,59,69,225,183,2,98,198,230,248,253,68,116,239,62,64,219,191,127,87, - 210,144,33,151,117,142,136,140,217,150,152,212,114,109,98,98,139,183,227,227, - 83,153,246,204,237,21,245,198,199,37,115,122,247,51,59,74,41,155,52,118, - 209,145,154,72,74,116,104,46,167,98,94,210,170,124,86,32,25,57,242,105, - 116,71,164,253,162,73,116,71,36,35,71,62,13,200,138,119,90,90,37,56, - 29,138,145,37,37,58,180,8,183,208,170,75,69,3,239,160,174,129,196,159, - 244,221,230,215,83,64,164,1,107,1,92,46,247,57,137,137,41,21,185,232, - 18,19,83,142,187,92,238,115,236,127,215,10,161,167,237,252,225,165,148,164, - 4,45,228,247,26,70,24,191,102,84,17,81,6,118,4,197,197,7,217,151, - 189,66,108,219,246,78,254,177,163,155,246,74,233,31,2,172,1,214,122,60, - 5,231,28,62,180,46,190,205,105,231,80,119,146,110,129,68,224,241,186,107, - 191,169,2,18,221,17,129,219,157,200,133,23,206,224,147,143,39,240,201,199, - 19,184,240,162,151,113,185,162,145,128,68,32,234,80,197,72,169,81,88,28, - 95,99,227,60,94,55,186,238,171,71,219,85,123,14,31,90,151,224,241,20, - 116,6,86,219,23,135,8,161,239,77,73,237,157,223,189,251,85,122,219,118, - 35,100,116,180,202,198,253,218,171,105,53,234,226,142,23,37,138,216,232,2, - 148,154,169,54,106,170,103,94,95,9,165,165,197,21,19,230,133,23,190,140, - 219,157,136,238,136,64,169,161,42,218,222,104,142,223,162,101,11,18,19,19, - 217,185,99,231,213,14,135,99,62,128,238,208,175,238,211,175,15,121,121,121, - 28,61,114,180,177,85,87,76,202,78,167,192,83,206,9,226,223,166,254,94, - 29,123,247,110,77,28,50,228,178,180,173,91,191,90,251,226,11,153,182,27, - 134,114,162,147,192,223,30,255,19,119,255,249,5,30,120,208,228,158,123,46, - 93,44,132,248,99,99,251,118,243,184,93,1,29,87,59,80,34,228,210,210, - 28,150,44,190,1,159,175,132,17,231,77,195,231,47,163,180,196,71,126,254, - 17,0,74,75,82,240,249,125,12,30,242,0,43,62,187,139,37,139,111,96, - 244,37,115,137,140,20,56,156,81,8,65,59,93,136,92,106,177,94,206,203, - 217,218,62,46,174,99,124,81,209,129,37,246,165,91,44,203,138,219,183,191, - 52,174,67,123,245,61,236,219,95,26,103,89,150,4,110,1,102,233,186,107, - 109,90,231,203,70,43,223,203,48,194,248,239,67,5,131,179,63,220,68,32, - 62,42,170,37,46,87,28,49,49,109,180,99,71,191,5,136,197,254,104,124, - 190,210,213,135,15,127,61,62,181,69,63,156,206,232,154,107,69,233,146,252, - 82,167,248,120,28,110,87,89,109,109,168,112,242,246,121,75,149,206,201,87, - 130,207,87,198,224,33,15,170,9,97,201,13,252,102,204,44,202,202,188,8, - 220,181,76,235,18,44,65,110,65,139,248,35,185,109,18,169,65,71,229,245, - 186,41,42,142,39,34,162,184,66,71,18,10,94,111,9,135,15,127,221,206, - 231,43,93,108,95,186,69,141,133,236,16,19,211,166,131,203,21,103,69,69, - 181,12,220,94,112,243,184,93,121,175,189,154,118,130,94,110,247,190,238,137, - 45,146,14,196,39,197,31,1,173,10,131,58,161,249,101,101,94,138,75,242, - 89,178,228,22,124,94,123,194,244,149,81,94,158,135,223,95,142,195,17,137, - 195,25,133,61,102,53,246,177,62,136,137,142,161,184,164,152,161,35,134,206, - 95,184,96,33,0,67,71,12,157,191,115,251,206,238,49,209,117,185,117,212, - 140,86,173,6,137,156,156,239,106,252,77,8,141,184,184,14,148,150,214,220, - 92,77,115,144,148,116,6,69,69,251,66,150,111,213,106,144,56,116,232,4, - 201,156,6,36,111,216,184,98,237,139,47,100,18,159,144,74,68,68,20,129, - 49,46,43,43,230,207,247,188,200,211,79,77,100,226,237,79,146,16,159,130, - 166,137,54,82,150,54,170,143,54,130,156,175,37,153,153,119,227,243,149,32, - 165,228,203,53,143,17,25,145,132,195,225,227,75,167,242,55,243,122,157,248, - 124,14,74,203,114,145,82,226,243,149,144,153,121,55,151,92,50,55,80,201, - 59,246,121,116,40,130,241,9,157,231,31,57,178,49,248,210,44,159,207,75, - 230,202,5,180,104,117,61,0,153,43,211,231,251,124,85,125,220,186,116,185, - 114,137,16,181,191,231,97,132,241,107,69,117,35,147,237,160,44,200,218,182, - 27,193,202,21,127,165,166,96,17,219,127,120,239,149,94,189,111,169,179,242, - 31,118,245,166,93,155,221,117,237,224,0,42,178,40,175,90,117,31,62,111, - 9,82,90,149,19,130,183,132,21,159,221,77,92,204,171,68,70,134,78,208, - 44,37,248,252,78,188,94,231,50,132,168,209,80,194,227,117,35,17,252,176, - 171,119,157,237,7,213,215,160,127,103,41,58,22,217,63,102,50,252,220,191, - 87,183,182,171,209,17,89,74,193,225,99,109,150,229,22,164,226,208,189,161, - 253,188,129,210,82,15,43,62,27,103,143,65,229,132,41,132,134,195,25,197, - 200,145,211,2,183,46,163,9,198,32,241,113,241,73,251,15,238,239,240,225, - 123,255,207,222,187,199,87,81,157,251,255,159,53,151,125,77,178,179,147,144, - 4,200,141,64,136,80,143,165,106,131,168,69,188,209,104,181,210,83,17,219, - 34,165,199,20,233,229,244,215,90,251,109,245,40,252,192,254,244,156,243,243, - 216,99,235,105,169,77,79,45,173,86,212,42,138,86,138,151,42,168,8,42, - 226,13,136,132,92,33,228,182,175,217,247,153,89,235,251,199,204,236,236,236, - 236,107,18,20,112,222,175,215,188,118,50,107,230,89,151,153,89,207,122,214, - 237,217,22,63,183,237,137,109,152,51,119,78,237,180,146,105,110,228,169,56, - 111,252,118,135,51,24,232,227,119,237,186,205,225,247,117,37,133,18,84,84, - 156,227,60,231,220,31,151,188,253,214,127,57,125,73,225,130,104,133,163,184, - 222,121,225,23,238,154,253,234,174,219,156,193,96,178,79,60,130,242,138,115, - 28,95,248,194,93,78,123,193,12,5,184,98,76,40,99,172,216,98,177,1, - 132,131,197,98,67,226,14,94,22,139,29,62,223,104,155,227,206,59,31,197, - 15,127,120,233,61,14,199,196,148,184,70,35,128,207,2,120,20,32,88,178, - 228,222,184,5,119,222,162,59,96,181,150,194,106,17,48,167,246,0,0,160, - 189,123,62,194,17,25,225,176,11,175,252,227,71,16,4,27,150,44,185,23, - 9,13,157,235,0,188,11,160,54,93,132,62,239,145,21,229,229,11,124,125, - 125,175,199,45,56,65,16,143,46,89,188,220,209,48,235,195,45,0,176,100, - 241,242,21,219,158,253,173,79,150,165,42,104,239,106,123,251,19,205,159,93, - 240,61,7,33,170,149,110,96,240,105,34,89,193,53,0,112,48,198,112,180, - 247,21,84,215,44,225,186,58,183,131,49,90,12,160,6,218,71,211,48,247, - 159,215,0,200,58,213,120,110,253,251,136,68,236,48,137,89,119,229,88,10, - 77,201,93,120,225,93,144,229,16,36,41,132,112,68,171,16,68,27,46,186, - 248,94,212,86,29,134,213,34,230,98,193,45,29,116,207,72,121,133,73,140, - 34,26,179,96,110,253,251,248,168,227,172,108,233,66,195,220,127,94,179,239, - 237,251,244,188,182,0,232,33,132,243,86,215,44,193,209,222,87,104,221,172, - 102,93,201,165,93,57,75,8,67,121,105,223,210,18,199,224,142,108,22,92, - 56,34,225,162,139,239,197,51,219,84,11,238,188,69,119,192,106,41,133,40, - 218,32,8,182,196,171,151,102,77,124,26,230,207,155,207,117,117,117,149,84, - 85,85,237,56,116,224,16,24,99,205,0,192,24,219,94,49,173,98,71,87, - 87,87,227,252,121,243,221,7,14,30,200,103,45,28,103,179,87,14,21,21, - 213,172,8,133,6,198,4,8,162,21,69,69,181,142,210,210,249,253,69,69, - 181,43,130,73,225,0,193,249,23,220,185,157,231,205,139,206,191,224,206,237, - 207,239,248,118,138,251,107,156,54,123,229,16,82,52,34,8,33,9,37,154, - 190,245,96,177,216,192,24,131,201,100,5,144,113,207,198,180,252,254,119,245, - 174,111,126,235,136,151,231,73,9,33,128,32,88,97,181,150,162,249,138,63, - 226,133,231,215,98,207,238,159,227,178,203,127,3,171,173,0,197,197,229,0, - 0,235,80,49,36,41,128,61,187,127,14,139,165,20,151,93,190,9,86,107, - 41,4,65,157,205,200,24,122,41,99,221,60,71,210,142,13,58,75,206,232, - 241,251,123,58,1,178,16,96,123,0,180,114,28,119,126,213,76,43,177,89, - 213,60,87,205,180,250,57,142,243,67,251,78,21,37,182,240,200,145,109,221, - 159,253,220,247,103,229,157,81,3,131,211,128,120,83,87,235,90,235,0,240, - 78,40,52,240,78,44,230,223,31,8,244,237,3,72,55,128,17,104,31,141, - 32,88,207,175,168,56,183,87,20,109,169,37,234,130,137,2,158,40,112,20, - 185,32,102,86,112,30,104,202,65,16,173,48,91,156,48,155,157,16,4,11, - 246,236,190,19,22,75,41,154,155,255,8,187,173,24,22,139,8,147,41,10, - 179,24,73,115,68,97,54,71,80,57,237,168,111,86,85,91,202,137,18,162, - 24,133,163,200,5,158,40,224,72,230,181,219,162,104,67,69,197,185,189,130, - 96,213,7,238,91,213,178,32,221,129,64,223,190,88,204,191,63,20,26,120, - 7,192,59,0,58,82,117,79,2,192,172,170,54,79,229,180,163,62,179,89, - 75,99,154,244,155,76,81,88,44,34,236,182,98,52,55,255,17,22,75,41, - 246,236,190,19,130,54,46,105,182,56,33,136,241,41,222,250,94,148,121,99, - 50,153,74,162,209,104,205,174,93,187,80,92,92,188,84,75,255,59,197,197, - 197,75,119,237,218,133,104,52,90,99,50,153,50,47,94,76,129,36,5,27, - 255,233,172,53,41,45,133,51,207,250,246,150,104,204,183,232,204,179,190,157, - 50,252,131,247,126,183,194,108,114,236,254,224,189,223,173,72,21,254,79,103, - 173,217,34,73,193,198,84,97,76,27,107,211,254,75,155,190,72,36,164,109, - 231,22,134,182,246,46,67,110,210,19,12,83,230,246,200,52,38,49,72,50, - 64,56,91,92,113,1,4,47,191,252,99,40,114,88,29,11,36,4,138,28, - 198,203,47,255,24,0,193,101,151,111,130,197,82,10,194,217,32,201,64,76, - 98,112,123,100,26,137,50,154,74,223,82,170,46,89,241,248,64,27,231,255, - 104,24,96,29,0,22,2,64,44,22,125,221,227,25,46,210,175,245,120,134, - 139,98,177,168,62,86,188,144,49,165,227,140,51,174,31,6,35,110,69,147, - 163,14,209,25,24,124,58,24,99,193,165,152,36,81,10,181,219,100,183,246, - 255,66,147,201,209,85,81,217,84,159,235,36,13,2,150,205,130,75,248,226, - 212,202,32,26,245,224,133,23,190,11,128,83,91,195,214,82,136,2,167,45, - 247,205,254,129,18,66,81,84,224,73,121,161,73,140,130,82,14,153,42,194, - 196,244,84,84,54,121,77,38,71,135,44,135,23,66,157,189,182,155,49,165, - 105,104,112,191,50,52,184,63,167,117,112,233,210,50,62,54,166,109,115,102, - 131,213,106,193,101,151,111,194,11,207,127,7,47,188,240,93,92,126,249,166, - 120,55,101,2,121,215,86,13,115,27,184,193,161,193,146,210,146,210,231,123, - 149,94,120,60,158,110,147,201,52,12,0,30,143,167,27,0,138,10,139,158, - 31,28,26,108,108,152,219,224,62,252,209,225,92,173,56,143,20,27,33,175, - 191,122,123,51,192,182,143,13,98,120,253,181,59,154,47,252,194,93,222,215, - 95,187,99,92,184,44,133,225,247,119,251,92,174,3,149,126,127,247,2,89, - 74,30,31,99,120,253,213,219,155,47,252,194,93,110,147,169,112,156,82,39, - 132,120,85,229,69,17,137,132,198,141,193,37,22,211,29,119,92,7,135,163, - 236,22,198,194,247,228,152,175,113,248,71,40,24,131,183,189,59,140,209,117, - 112,86,16,190,4,23,94,244,27,188,186,243,103,144,100,128,42,106,188,146, - 12,200,178,9,23,94,116,47,8,95,2,133,89,33,197,152,190,14,14,211, - 203,69,47,101,148,70,194,163,69,29,147,24,24,101,80,40,112,224,163,8, - 138,10,121,38,152,207,97,80,119,153,1,212,153,188,233,150,10,196,215,193, - 149,77,251,44,40,35,238,227,131,82,243,144,75,218,222,56,219,12,201,216, - 138,210,224,83,66,46,19,135,19,167,198,119,204,59,243,39,46,143,15,84, - 109,13,142,191,88,61,39,3,80,64,120,154,113,188,73,135,49,120,213,22, - 38,131,66,25,118,237,186,13,130,96,141,183,118,57,222,166,182,62,149,169, - 105,125,18,2,16,158,2,80,0,200,105,243,161,183,156,231,157,249,19,221, - 186,77,92,50,113,66,160,138,90,169,113,252,168,85,32,8,86,236,218,117, - 91,188,124,20,170,150,217,68,228,219,29,118,167,197,106,113,28,60,116,16, - 14,135,163,137,49,230,138,68,34,52,18,137,80,198,152,203,225,112,52,29, - 60,116,16,22,171,197,97,119,216,115,222,209,228,247,191,171,167,59,254,222, - 226,25,24,216,231,73,86,80,178,20,198,224,192,62,207,142,237,45,71,6, - 83,132,3,12,3,3,111,123,254,241,210,15,220,3,3,111,143,219,99,83, - 150,194,24,24,216,231,217,241,247,22,79,138,70,24,5,224,250,220,130,139, - 22,222,114,203,149,240,121,135,48,48,208,163,30,253,221,240,122,135,241,95, - 247,124,15,55,255,248,127,0,0,94,223,48,6,6,186,251,38,179,143,231, - 142,103,27,233,177,126,201,69,41,91,24,141,49,124,112,40,140,15,15,69, - 208,214,78,112,164,203,134,233,117,247,225,112,39,1,167,245,18,28,238,36, - 152,94,119,31,142,116,217,208,214,78,240,225,161,8,62,56,20,70,52,198, - 64,41,91,120,172,95,114,5,67,148,5,195,44,254,76,223,249,32,140,15, - 180,235,100,133,193,229,145,125,146,60,77,207,175,27,64,135,179,184,164,162, - 188,188,210,163,239,196,82,94,94,233,113,22,151,84,64,125,87,221,0,232, - 179,219,86,208,206,158,152,251,216,241,88,103,44,202,240,193,161,8,14,30, - 158,212,4,27,3,131,83,134,92,20,92,131,118,116,0,112,23,57,22,192, - 227,165,216,255,126,8,145,40,69,52,233,136,196,40,218,142,132,81,87,125, - 0,60,71,145,173,34,249,253,239,234,169,66,153,251,248,128,180,244,221,3, - 97,68,163,12,139,206,191,23,95,88,252,155,120,107,55,18,101,56,120,56, - 138,41,210,111,0,24,120,142,162,174,250,0,218,142,132,17,137,165,200,71, - 84,205,163,199,75,81,228,88,0,104,149,74,66,121,156,16,20,6,28,60, - 28,69,36,202,160,48,213,42,248,194,226,223,96,209,249,247,34,26,101,120, - 247,64,24,199,7,164,165,10,101,238,116,203,18,210,209,208,216,192,13,245, - 15,57,11,157,133,123,139,138,139,154,252,35,254,78,171,213,26,183,136,172, - 86,171,199,63,226,239,44,42,46,106,42,116,22,238,29,234,31,114,54,52, - 54,228,188,122,202,237,62,196,24,83,160,119,135,73,18,195,104,215,152,12, - 183,251,32,40,149,83,134,51,70,225,247,119,131,49,154,38,92,129,219,125, - 40,229,27,80,91,123,134,231,205,55,159,239,56,227,140,207,47,252,222,247, - 151,224,199,63,190,2,183,252,184,25,183,223,190,28,119,223,181,26,183,253, - 219,255,2,32,248,249,157,171,48,171,110,254,21,154,219,157,73,65,41,243, - 48,138,14,202,176,80,146,129,168,196,86,68,98,0,133,101,133,162,88,49, - 175,33,180,134,227,21,112,188,130,121,13,161,53,138,98,5,133,101,69,36, - 166,94,43,201,0,101,88,200,40,58,40,101,158,96,136,226,88,191,228,74, - 144,223,20,137,49,200,10,150,82,138,70,198,224,218,183,251,51,250,243,166, - 0,92,223,250,230,77,174,57,245,115,227,99,191,115,234,231,250,190,245,205, - 155,92,80,119,216,137,191,27,59,95,152,71,169,2,23,101,104,146,101,6, - 215,208,211,107,38,155,127,3,131,83,129,108,91,117,37,110,190,76,1,160, - 180,196,196,69,99,195,240,143,20,225,72,119,0,140,113,16,5,10,73,86, - 127,21,202,80,96,139,66,224,37,112,156,146,83,71,102,103,79,204,237,242, - 200,221,0,112,232,8,1,207,217,18,86,123,69,160,48,134,2,27,205,58, - 102,150,43,132,48,112,68,129,192,75,48,155,194,232,232,166,224,57,18,207, - 131,36,115,218,154,53,2,71,145,7,102,147,137,105,249,31,87,30,83,13, - 71,20,72,50,197,7,109,97,240,186,159,50,216,64,160,41,10,198,112,244, - 120,172,59,28,161,238,204,146,198,83,104,43,116,42,138,226,248,112,255,135, - 152,86,57,205,83,80,88,224,246,121,124,241,124,132,66,33,234,112,58,220, - 102,139,185,248,195,253,31,162,166,174,198,81,104,43,116,34,175,45,201,24, - 120,78,193,225,206,16,22,156,41,225,112,103,8,60,167,187,54,155,138,240, - 241,180,181,237,163,141,141,103,187,119,239,126,150,1,104,12,135,70,138,9, - 33,179,108,182,240,35,255,118,251,131,113,185,62,191,11,3,131,189,93,28, - 73,63,153,35,87,142,28,188,18,54,251,57,158,178,233,223,235,34,224,42, - 53,111,2,149,154,55,129,233,21,165,158,5,162,230,149,162,162,212,211,107, - 18,200,116,205,155,64,165,230,77,160,82,243,38,224,9,5,223,134,230,77, - 32,174,120,21,69,233,96,76,154,198,104,4,158,225,135,124,161,192,219,84, - 16,203,248,68,143,2,31,30,120,143,171,173,174,227,116,111,2,146,20,227, - 62,60,240,222,184,254,119,65,44,35,125,61,119,120,203,103,220,220,73,149, - 64,101,40,240,246,130,201,230,223,192,224,84,32,31,143,222,28,0,116,182, - 223,199,47,58,111,5,119,254,57,189,216,254,242,44,92,116,158,186,251,254, - 101,23,234,187,240,119,195,106,145,33,8,50,192,24,40,99,200,226,77,0, - 239,188,245,255,160,178,234,167,110,142,179,205,35,156,169,86,130,168,123,18, - 120,4,144,174,7,248,71,26,234,6,111,226,121,249,183,185,204,124,99,25, - 226,244,120,221,112,20,21,131,16,2,65,144,113,197,146,118,132,35,2,94, - 124,173,54,158,135,203,46,236,197,43,111,84,227,43,95,236,196,177,227,34, - 183,251,141,45,169,22,18,37,151,83,90,133,151,24,103,54,120,94,70,67, - 221,224,77,123,223,157,249,91,9,202,245,128,240,72,66,89,52,51,26,235, - 166,52,228,126,231,173,255,200,42,43,21,142,2,199,91,229,229,229,13,131, - 253,131,30,89,150,199,165,217,231,241,209,224,72,208,83,94,94,222,224,40, - 112,28,70,158,62,216,8,97,32,68,193,21,75,218,177,247,61,7,174,88, - 210,142,95,183,41,241,253,72,39,27,158,142,182,182,125,137,13,16,222,100, - 178,112,38,147,21,102,179,13,140,1,119,220,190,28,245,245,103,54,127,240, - 254,235,110,78,224,138,50,10,203,78,169,20,237,117,250,162,71,29,62,247, - 211,137,254,224,28,154,63,184,226,98,203,249,133,133,151,170,203,25,118,239, - 126,174,240,224,187,175,215,104,254,224,116,223,110,14,205,31,92,53,192,124, - 82,180,215,211,113,232,26,151,186,2,1,112,13,60,224,113,15,254,193,201, - 88,204,201,24,173,77,165,224,95,252,199,14,46,28,14,87,47,213,226,217, - 241,226,115,213,175,191,177,75,223,24,60,142,44,13,195,231,126,10,126,207, - 54,31,33,162,151,49,201,3,204,153,100,17,24,24,156,252,228,237,209,251, - 221,119,159,226,172,102,119,117,73,241,151,112,209,194,126,200,18,135,197,77, - 71,19,126,129,48,163,136,132,227,190,217,88,22,127,112,165,35,222,231,157, - 1,223,139,78,16,145,216,236,11,40,192,55,107,126,208,154,69,211,140,34, - 42,31,111,110,183,213,84,205,169,91,160,105,149,172,254,224,210,198,57,52, - 52,136,174,238,14,54,167,126,46,98,177,88,220,23,220,226,166,190,49,121, - 185,104,225,81,132,195,12,251,223,121,182,250,221,119,199,87,26,73,100,244, - 174,157,28,103,122,24,40,128,246,195,207,43,125,93,61,205,156,48,61,94, - 6,82,244,88,51,160,208,80,112,127,17,152,84,168,45,221,200,107,195,103, - 109,199,254,178,138,138,10,0,240,244,245,245,165,188,174,188,188,220,83,81, - 81,1,2,82,70,178,109,191,50,46,14,64,20,41,204,38,9,95,190,252, - 35,120,60,18,68,145,34,18,153,154,240,28,160,128,234,17,59,18,9,194, - 231,27,70,52,106,131,71,29,155,235,20,4,209,3,40,117,249,228,41,13, - 135,161,237,173,147,188,86,84,146,100,188,177,247,85,188,179,255,45,0,64, - 52,22,121,84,146,178,123,244,78,252,103,184,255,215,186,208,180,251,158,202, - 178,52,46,158,228,133,222,163,48,48,166,128,49,101,218,68,103,143,26,24, - 156,106,228,237,209,91,150,37,236,125,235,53,188,251,222,91,48,153,115,242, - 174,237,35,89,59,42,217,97,198,20,128,41,8,142,188,161,158,26,25,123, - 197,91,111,153,241,254,251,219,114,245,232,157,54,206,246,246,54,48,48,223, - 95,182,252,17,89,189,107,71,99,136,198,162,25,42,141,49,164,181,116,242, - 138,83,245,232,221,122,34,60,122,191,189,239,237,156,198,158,250,250,250,104, - 95,95,223,68,60,37,16,189,210,23,4,5,130,64,33,8,106,247,34,99, - 140,3,192,169,191,249,135,107,22,76,206,53,51,99,212,23,14,7,113,251, - 191,125,21,64,220,31,156,43,18,9,81,155,109,116,38,42,165,116,156,63, - 56,245,254,172,61,5,105,29,3,19,66,56,89,150,161,40,33,61,45,32, - 132,128,165,218,53,65,37,147,247,209,143,43,30,3,131,211,142,188,61,122, - 171,31,149,4,74,41,162,177,8,73,95,231,48,6,16,223,243,47,62,231, - 138,198,162,217,172,128,220,227,140,78,46,206,109,207,61,73,205,38,179,139, - 1,141,209,88,212,145,94,219,48,80,202,24,165,74,182,74,3,200,82,113, - 124,18,113,126,66,20,43,138,226,136,197,162,8,4,70,0,198,16,8,6, - 16,139,69,65,169,82,13,128,82,170,84,79,36,92,81,20,7,128,98,228, - 102,177,82,198,152,75,81,164,198,64,208,231,224,56,206,183,103,207,246,184, - 71,111,69,81,88,48,24,196,208,208,248,253,54,135,134,134,16,12,6,161, - 40,169,167,52,17,181,63,210,171,29,105,39,224,48,166,90,76,73,247,166, - 77,175,246,27,239,10,39,234,254,90,39,34,30,46,147,60,3,131,211,137, - 188,61,122,171,31,20,27,211,218,205,66,182,11,63,246,56,163,177,104,214, - 56,39,192,73,23,231,39,129,162,40,59,162,209,40,126,253,192,127,195,100, - 50,233,22,41,20,69,121,84,11,199,4,195,119,32,15,139,85,81,228,228, - 242,166,109,109,251,0,128,163,148,250,2,129,0,174,190,250,106,216,237,99, - 247,83,13,6,131,8,4,2,160,148,198,27,16,132,144,210,132,75,230,64, - 109,140,157,232,126,190,115,78,144,92,14,25,182,4,51,48,56,157,72,101, - 193,125,18,149,166,17,231,105,2,33,164,65,150,101,39,165,97,18,137,132, - 193,24,64,169,194,52,139,84,245,90,46,203,152,64,184,103,2,91,107,165, - 42,111,202,24,115,73,146,212,232,243,249,28,129,64,128,232,22,15,99,12, - 138,162,48,74,169,143,49,230,130,234,97,156,131,58,54,13,0,240,61,57, - 183,45,133,204,41,199,247,228,220,61,31,71,60,6,6,167,51,217,150,9, - 24,24,228,131,139,49,230,201,100,109,103,179,198,179,132,79,73,3,65,150, - 199,89,119,217,226,114,0,128,227,43,31,77,69,244,6,6,6,31,19,134, - 130,51,152,106,78,21,43,53,159,116,158,140,227,157,6,6,6,89,32,254, - 173,141,198,238,171,6,6,57,96,88,112,6,6,167,22,134,130,51,48,248, - 148,98,40,108,131,211,29,1,0,138,150,181,125,108,43,63,117,133,106,196, - 105,196,121,170,196,73,8,41,245,61,57,119,24,0,138,255,249,112,35,33, - 164,152,16,194,233,155,28,79,6,125,204,145,49,70,25,99,240,62,209,176, - 71,139,103,33,33,4,28,199,113,83,181,48,91,31,219,164,148,214,250,158, - 156,251,200,148,8,53,48,56,137,25,55,6,183,126,253,250,41,93,35,179, - 97,195,134,172,99,29,70,156,39,46,206,143,155,169,206,99,34,83,153,223, - 108,233,76,140,75,155,81,9,0,152,57,115,102,251,213,87,95,93,98,50, - 153,74,56,142,75,187,167,165,166,252,56,237,126,154,105,6,40,165,212,27, - 141,70,221,127,253,235,95,227,19,95,166,77,155,246,246,202,149,43,157,102, - 179,185,132,231,249,140,241,96,116,93,91,198,120,20,69,241,186,221,110,239, - 3,15,100,245,85,108,96,112,90,48,70,193,173,95,191,62,235,86,93,0, - 226,45,87,146,185,105,201,0,248,54,110,188,211,181,110,221,29,105,23,231, - 126,18,113,110,220,120,103,41,192,74,145,101,61,19,83,209,119,181,200,184, - 232,122,253,250,245,158,13,27,54,156,84,113,230,202,67,15,61,196,1,192, - 55,190,241,141,73,41,144,245,235,215,151,18,66,156,0,156,137,207,73,207, - 147,78,242,115,204,37,28,128,103,170,242,187,97,195,134,82,66,72,41,33, - 196,145,252,62,105,105,241,109,216,176,193,181,126,253,250,113,113,245,246,246, - 210,194,194,66,6,32,227,114,1,158,231,193,243,234,231,165,40,50,20,37, - 243,70,225,102,179,185,108,112,112,80,81,63,5,96,96,96,64,113,56,28, - 57,198,195,107,241,40,25,227,17,69,17,118,187,125,90,190,219,175,25,24, - 156,170,228,189,85,23,0,112,28,55,230,3,78,135,162,200,168,171,173,111, - 124,232,207,127,241,124,99,229,215,50,125,84,31,91,156,15,253,249,47,28, - 128,210,174,238,142,182,92,100,101,171,52,18,72,187,8,249,147,136,51,87, - 254,244,167,63,149,50,198,156,218,223,158,27,110,184,97,82,10,132,49,118, - 88,175,116,121,158,143,231,37,49,63,163,207,50,239,240,188,242,155,104,165, - 233,22,217,250,245,235,57,66,72,41,207,243,109,162,40,66,20,197,49,247, - 72,146,4,73,146,160,40,74,163,166,80,211,189,183,13,234,198,201,224,244, - 246,138,190,150,143,231,57,82,83,93,91,219,48,187,241,81,0,56,124,164, - 237,186,158,222,238,110,69,161,241,245,126,90,105,1,0,5,216,184,89,154, - 247,220,251,55,46,28,220,15,198,148,6,128,165,108,252,113,28,199,85,205, - 168,174,155,85,55,231,81,0,232,236,106,191,174,247,88,79,23,77,187,35, - 2,241,17,34,224,196,175,81,55,48,56,57,200,123,171,46,142,227,184,153, - 51,106,234,102,215,55,60,74,169,250,161,80,74,192,113,44,254,11,0,28, - 207,192,115,60,60,30,151,67,52,153,178,36,131,52,128,16,167,40,78,47, - 38,132,3,199,23,21,83,101,196,207,241,133,69,84,241,251,9,1,42,203, - 69,71,253,172,57,91,178,125,155,217,226,44,41,41,131,20,139,57,22,95, - 120,41,20,170,128,42,25,242,192,49,28,233,56,124,221,209,99,221,25,42, - 13,0,89,166,145,39,199,153,17,6,116,116,182,175,232,31,148,124,140,1, - 28,95,84,148,80,22,94,198,40,36,233,184,23,140,141,115,12,154,47,247, - 222,123,47,231,241,120,74,29,14,71,27,0,248,124,190,198,123,239,189,215, - 115,243,205,55,79,184,133,207,113,220,82,158,23,118,124,254,156,243,96,50, - 155,16,139,198,240,230,219,111,128,82,122,29,99,172,155,16,82,203,243,194, - 163,249,134,51,198,150,230,177,147,13,54,108,216,80,10,144,82,0,14,66, - 136,239,206,59,127,238,114,20,151,121,92,195,199,65,8,113,136,162,136,175, - 127,253,235,72,220,151,18,0,66,161,16,30,126,248,97,80,74,211,126,3, - 255,241,31,255,225,186,237,182,187,60,162,105,38,177,23,46,42,85,55,240, - 18,29,140,202,62,194,9,14,129,143,249,107,106,66,37,86,171,12,0,168, - 169,105,26,9,75,75,122,100,197,84,164,95,195,168,228,3,24,11,142,236, - 118,73,177,99,76,16,11,240,223,191,58,200,1,203,0,0,86,251,217,78, - 139,237,179,4,76,246,6,3,111,116,74,209,94,80,26,26,243,192,103,213, - 206,230,231,204,158,203,235,22,220,25,141,159,233,21,4,113,255,145,206,195, - 241,151,140,227,108,132,23,138,33,136,211,57,171,237,76,7,111,26,230,231, - 52,188,230,4,198,111,83,102,96,112,186,49,70,193,105,221,50,25,23,192, - 86,86,158,193,87,78,255,12,47,8,50,100,133,67,103,79,49,106,171,252, - 232,62,90,20,255,157,83,231,133,32,42,224,57,160,162,98,58,137,70,211, - 111,5,191,97,195,6,215,93,119,111,246,216,139,46,44,227,136,137,7,225, - 119,3,244,122,128,219,174,255,114,68,185,114,90,249,8,111,54,71,192,241, - 217,219,159,153,226,180,219,236,48,59,75,9,33,4,10,5,100,137,71,123, - 215,248,60,204,170,241,66,224,41,42,167,159,219,43,43,214,253,125,125,7, - 50,106,166,76,227,67,137,113,102,130,1,160,10,48,173,188,137,15,75,133, - 28,101,252,223,146,202,98,7,152,178,136,178,88,119,208,255,234,240,109,183, - 174,154,176,34,90,191,126,61,231,247,251,75,44,22,75,173,215,171,186,22, - 50,153,76,181,145,72,196,189,126,253,122,247,4,199,187,188,132,16,31,207, - 243,48,153,77,176,90,84,229,161,90,98,92,175,162,40,239,114,28,199,77, - 44,92,246,1,185,121,49,87,45,55,82,202,113,92,27,207,155,64,8,67, - 69,101,237,194,99,71,219,143,104,105,36,162,40,194,102,179,161,184,120,252, - 240,150,40,138,136,197,98,25,31,86,73,249,183,0,192,73,128,58,6,236, - 33,4,43,24,49,111,1,216,10,133,154,183,4,130,108,77,81,97,0,0, - 16,8,90,171,21,90,248,28,33,108,5,225,205,91,244,107,9,176,176,176, - 120,41,5,224,118,20,241,144,100,22,247,160,78,64,234,65,132,189,132,8, - 77,5,69,75,216,247,110,170,24,103,89,239,216,254,34,225,56,46,254,156, - 56,142,163,211,166,149,211,111,220,48,182,231,226,215,15,12,148,130,161,20, - 4,181,142,226,25,59,230,52,156,183,6,216,150,75,81,26,24,156,210,140, - 179,224,146,43,54,189,155,71,63,191,229,209,46,248,70,64,143,30,55,1, - 4,224,9,208,222,85,6,142,80,180,119,149,129,16,138,195,93,37,104,156, - 61,12,158,83,183,94,178,88,172,25,19,81,57,163,25,225,8,45,102,12, - 187,9,0,66,248,71,84,45,198,171,51,189,152,240,183,254,225,66,148,20, - 71,193,243,217,173,150,76,113,38,158,167,148,224,112,87,9,20,133,27,147, - 7,142,80,180,117,148,1,12,40,44,136,209,98,231,66,229,166,155,86,196, - 187,184,82,149,83,38,178,229,63,158,110,45,77,253,195,133,15,19,34,128, - 231,128,209,50,224,31,97,12,96,68,216,45,16,161,177,114,70,243,112,174, - 241,167,193,201,24,81,125,11,30,0,0,32,0,73,68,65,84,155,21,14, - 135,119,232,39,180,191,155,160,234,218,137,116,85,198,31,14,85,56,80,202, - 129,42,241,94,66,154,112,76,36,124,140,252,108,16,66,28,130,96,194,37, - 151,92,7,158,23,240,252,243,15,239,33,132,107,52,153,204,254,228,61,172, - 19,183,234,202,93,62,156,0,234,1,236,225,0,16,14,91,0,128,82,121, - 11,192,48,56,44,62,48,189,92,149,59,56,44,62,64,72,12,0,217,194, - 113,34,0,108,97,20,96,192,30,2,44,4,192,4,129,120,172,22,174,52, - 65,254,94,162,102,120,47,71,208,248,224,159,134,60,171,111,152,70,1,96, - 227,198,141,28,0,231,254,247,246,241,11,206,58,219,81,226,84,111,243,120, - 221,142,253,239,237,43,221,184,113,163,2,192,179,110,221,58,250,192,255,14, - 114,178,204,74,65,208,70,0,240,60,193,121,139,174,123,192,80,112,6,159, - 6,50,14,8,37,76,0,129,102,217,121,66,97,133,48,20,66,161,20,211, - 74,68,168,243,196,244,198,46,3,163,12,254,64,12,84,225,65,57,5,170, - 39,146,204,21,71,113,145,80,34,240,202,172,80,88,129,211,1,48,168,93, - 59,28,17,192,113,34,24,99,240,7,40,24,120,64,11,155,28,4,148,2, - 84,225,193,24,135,226,34,19,8,71,146,242,1,12,185,37,68,162,54,16, - 140,16,77,177,57,19,203,99,42,38,60,36,195,192,131,35,28,166,149,10, - 32,132,128,82,9,148,201,90,170,5,120,124,128,205,202,207,42,176,243,110, - 0,147,81,114,4,192,94,237,239,235,181,223,71,180,115,211,38,35,150,82, - 2,153,114,104,235,40,193,140,138,8,212,174,108,50,69,225,153,209,158,19, - 15,128,23,4,1,102,139,21,130,32,194,98,177,193,102,43,152,53,48,208, - 235,229,184,201,141,65,181,254,239,32,7,160,116,36,160,236,225,56,96,90, - 169,8,66,0,133,74,144,101,9,93,157,207,97,102,227,149,96,218,228,198, - 178,18,224,80,219,54,212,205,186,2,130,32,130,231,68,48,6,12,185,36, - 80,138,61,133,5,124,163,40,16,175,32,32,110,78,86,86,136,160,10,224, - 242,72,218,243,230,220,15,255,229,3,119,251,225,39,0,160,4,192,172,72, - 36,188,55,24,12,174,208,21,92,48,24,116,70,34,225,1,168,141,148,206, - 141,27,55,186,121,18,130,104,177,59,162,49,245,123,5,161,32,212,216,192, - 200,224,211,65,46,83,186,15,107,71,61,128,146,104,116,0,22,51,135,202, - 105,38,240,60,129,192,19,8,60,180,131,64,16,56,148,58,77,240,248,203, - 1,112,200,214,40,222,250,148,155,35,4,37,5,118,126,123,121,153,42,243, - 104,207,223,209,211,245,12,24,139,128,227,100,240,2,209,42,252,73,231,23, - 0,180,52,113,240,248,203,81,234,52,65,16,184,113,249,224,121,130,202,105, - 38,88,204,28,162,209,1,64,173,84,234,19,202,227,132,64,8,48,173,84, - 0,47,16,112,156,12,198,34,232,233,122,6,71,123,254,14,158,39,40,47, - 51,161,192,206,111,39,4,37,91,159,114,79,102,74,62,227,121,254,114,96, - 236,76,60,237,220,132,7,247,24,3,24,227,208,222,81,130,162,2,51,218, - 59,74,192,216,232,123,48,217,240,116,252,242,87,155,184,59,239,252,121,169, - 32,136,115,120,94,252,28,33,164,86,81,36,40,138,12,128,224,226,75,150, - 195,237,30,220,206,113,92,9,64,38,181,148,193,108,38,16,69,82,60,189, - 194,132,138,114,19,120,30,224,56,9,96,33,116,117,108,5,199,81,112,156, - 234,145,144,0,224,56,2,142,163,232,234,216,10,176,16,56,78,2,207,3, - 21,229,38,76,175,48,65,20,73,177,40,130,179,89,71,147,197,115,0,47, - 0,229,101,34,10,236,220,118,66,88,73,40,52,64,48,250,30,106,141,147, - 196,130,137,255,189,87,187,166,132,42,199,137,213,66,72,229,52,17,124,252, - 221,158,76,238,13,12,78,29,114,249,208,155,180,223,189,0,234,135,7,95, - 43,181,90,24,199,113,208,172,179,177,140,46,203,33,208,39,161,100,131,16, - 20,235,242,56,14,168,174,185,20,148,202,232,236,216,6,73,10,3,76,2, - 33,25,252,132,78,128,81,171,128,75,41,87,79,139,213,194,184,225,193,215, - 74,49,166,82,137,151,201,148,19,207,39,147,32,73,97,116,118,108,3,165, - 50,170,107,46,69,98,25,17,130,180,107,163,114,193,102,183,121,4,65,232, - 177,219,237,80,20,229,17,69,81,30,177,219,237,16,4,161,199,102,183,77, - 194,173,15,1,99,4,165,37,38,48,240,234,47,27,107,161,77,46,124,60, - 191,252,213,38,110,196,239,41,169,170,110,152,45,8,166,54,155,205,190,199, - 98,177,63,98,177,20,96,247,235,207,106,82,9,44,22,27,74,203,102,212, - 1,108,82,101,103,18,57,98,179,114,28,207,67,235,70,150,32,73,33,180, - 31,126,18,0,67,125,253,151,192,113,2,116,71,173,28,39,160,190,254,75, - 0,24,218,15,63,9,73,10,1,144,84,37,198,3,170,172,241,74,151,35, - 163,207,27,96,37,195,67,239,149,65,235,22,5,0,158,231,207,183,90,236, - 126,253,122,171,197,238,231,121,254,124,237,223,61,132,144,122,183,251,173,50, - 171,133,164,253,94,13,12,78,103,198,244,85,232,22,129,20,11,192,239,239, - 34,46,215,135,222,80,104,160,155,49,182,8,192,110,0,123,20,37,114,126, - 32,112,204,81,88,88,147,99,20,4,138,146,241,203,26,83,115,113,156,0, - 81,180,96,86,253,151,208,217,241,12,58,59,182,97,86,253,85,224,57,83, - 206,118,5,99,4,49,201,156,178,70,84,20,62,62,75,50,23,2,129,99, - 197,138,18,153,13,224,117,237,212,34,66,72,183,205,86,225,253,253,239,119, - 242,69,69,117,76,52,21,0,0,150,93,83,146,114,92,46,26,179,16,147, - 24,5,33,57,196,203,0,170,72,144,164,24,58,59,158,1,0,204,170,255, - 18,68,209,162,85,154,99,152,176,202,47,40,40,128,197,98,129,199,237,89, - 193,113,220,22,0,224,56,110,69,69,101,5,34,145,244,147,130,114,65,111, - 48,112,132,140,249,127,170,194,147,241,121,135,157,85,213,13,245,195,67,125, - 123,174,184,114,245,184,235,95,221,245,20,206,91,116,37,190,176,120,25,158, - 223,241,240,115,0,249,122,94,25,74,224,177,199,93,165,80,221,231,84,3, - 0,165,170,114,251,168,237,49,80,26,195,172,250,171,180,115,20,225,72,16, - 0,32,73,5,160,84,65,117,205,37,232,236,120,6,31,181,61,134,185,141, - 203,33,138,4,218,152,92,53,163,112,83,154,126,246,114,56,60,92,99,54, - 59,28,177,216,200,118,237,84,11,99,40,242,141,72,69,69,14,245,189,242, - 141,72,69,140,129,1,104,1,208,10,240,123,156,206,134,102,117,153,129,177, - 52,192,224,211,71,188,198,220,250,148,59,190,224,90,52,217,193,243,102,136, - 166,66,142,5,7,0,160,16,218,71,67,169,252,122,48,112,124,141,221,94, - 9,142,75,63,253,159,49,2,6,130,72,212,10,158,207,56,110,22,95,228, - 77,169,4,74,213,110,37,74,101,204,172,90,140,174,206,191,227,72,251,147, - 152,59,247,203,80,20,10,16,33,195,167,170,126,221,225,72,129,35,24,42, - 116,34,197,24,149,66,5,196,36,1,130,16,211,44,131,244,80,26,67,48, - 112,188,154,82,249,57,237,84,11,128,66,198,80,43,154,10,107,121,222,76, - 69,83,220,97,166,111,235,83,110,207,178,107,74,198,141,203,121,124,101,78, - 187,109,196,97,181,4,244,21,83,105,82,15,40,10,133,36,133,113,164,253, - 105,117,77,223,172,47,130,82,25,146,20,1,207,203,224,56,81,175,20,29, - 90,217,77,104,28,206,36,154,32,197,36,84,215,86,111,57,248,225,65,0, - 64,117,109,245,22,143,203,211,104,18,179,45,235,72,77,65,193,76,18,14, - 167,158,126,78,8,129,217,92,12,89,14,165,9,231,96,181,150,33,22,27, - 73,123,127,65,193,204,113,5,167,141,185,149,246,31,239,222,115,197,149,171, - 97,181,218,192,243,163,107,219,20,69,194,162,243,175,196,238,215,159,197,231, - 155,150,194,98,177,129,16,204,152,228,88,110,194,226,107,134,142,142,103,65, - 169,4,0,232,237,121,9,162,104,3,199,41,232,237,81,39,222,42,148,7, - 165,188,102,185,169,239,121,71,199,179,104,108,92,174,11,121,84,251,109,78, - 23,161,197,226,220,18,12,246,39,158,106,165,84,65,119,207,1,216,10,254, - 9,0,208,221,243,210,22,154,180,12,197,233,108,220,62,85,91,125,25,24, - 156,106,36,155,4,218,216,18,65,97,81,29,186,187,119,32,149,217,228,114, - 29,120,160,188,226,115,89,133,15,187,203,225,40,242,66,81,178,118,250,199, - 103,242,245,246,188,8,69,145,193,192,160,104,149,161,162,200,232,234,250,59, - 76,230,47,67,20,210,91,131,140,17,117,230,29,229,118,128,164,158,40,161, - 40,60,152,150,182,92,112,185,14,36,238,107,212,170,197,4,191,175,19,53, - 53,151,35,73,89,165,93,136,28,12,22,236,8,135,109,224,56,154,209,146, - 147,100,138,174,174,167,181,177,35,224,216,209,87,192,11,54,16,16,240,188, - 128,218,186,120,29,184,3,147,152,12,98,54,155,75,70,70,70,106,219,14, - 142,214,213,109,7,219,80,90,90,90,107,179,217,242,158,192,178,245,41,183, - 51,22,27,225,123,122,94,116,68,35,227,123,56,237,246,233,206,233,51,22, - 149,28,239,219,237,140,36,133,115,156,9,22,75,137,179,186,230,146,217,189, - 61,47,57,99,177,192,184,251,109,246,233,142,154,154,75,157,91,159,114,43, - 96,139,146,131,139,69,81,157,232,193,243,226,152,253,33,19,149,29,0,92, - 124,241,181,216,190,125,243,61,22,203,196,148,184,70,35,128,207,2,120,20, - 32,168,175,255,82,220,130,171,174,185,4,162,104,131,40,240,40,117,14,0, - 0,92,158,10,72,178,2,73,10,161,179,227,25,112,156,168,117,89,198,211, - 121,29,128,119,145,193,211,118,36,226,89,97,183,87,250,70,70,142,198,45, - 56,142,227,143,214,214,204,119,148,22,15,109,1,128,218,154,249,43,14,183, - 239,243,81,170,84,65,123,87,61,158,182,230,138,138,115,29,132,144,45,147, - 201,176,129,193,169,72,178,182,104,0,112,46,192,206,29,241,119,157,91,228, - 152,213,4,144,38,0,75,161,90,47,0,128,210,210,249,107,114,17,94,86, - 50,8,117,106,114,214,93,57,150,234,127,84,215,92,138,234,154,75,81,85, - 117,17,102,86,93,4,0,224,121,1,117,117,95,132,179,200,13,71,145,27, - 197,105,14,167,99,24,37,206,65,216,237,129,165,233,34,226,121,5,68,75, - 91,46,36,229,181,69,77,43,105,42,114,204,106,26,241,119,157,11,176,115, - 1,156,11,181,236,210,98,183,7,150,150,56,7,225,116,12,167,77,191,163, - 200,13,103,145,27,117,117,95,140,239,216,50,179,234,34,84,85,93,20,47, - 151,84,101,150,47,247,223,127,63,231,245,122,75,236,118,251,14,109,241,116, - 51,128,102,74,41,236,118,251,14,175,215,91,114,255,253,247,231,59,98,195, - 153,76,5,67,22,179,195,153,108,217,115,156,9,102,179,195,97,181,78,235, - 55,155,29,142,84,150,127,85,245,197,219,57,78,40,174,170,190,120,123,114, - 24,199,153,96,49,59,156,38,83,193,16,114,27,55,78,9,207,139,0,33, - 227,148,94,62,44,191,182,212,69,41,142,0,232,85,211,38,66,20,109,152, - 219,184,28,130,96,67,111,207,75,218,57,11,172,22,59,172,22,187,214,189, - 44,162,183,231,37,8,130,77,235,158,180,233,150,56,0,244,18,14,221,28, - 151,126,195,0,171,181,172,39,26,245,239,135,186,172,0,0,90,9,129,223, - 81,40,250,77,34,129,73,36,112,20,138,126,66,224,71,188,33,166,44,244, - 184,15,239,7,72,207,132,51,108,96,112,10,19,175,44,180,174,181,14,0, - 239,72,177,224,59,138,18,221,47,197,70,246,17,130,110,0,35,208,62,26, - 142,19,206,183,23,76,239,205,212,61,9,0,132,48,16,48,88,204,97,240, - 92,198,238,32,15,180,157,64,56,78,132,32,88,227,227,77,199,142,238,132, - 40,90,49,123,206,87,32,138,86,240,60,7,129,151,193,167,61,20,8,188, - 130,2,155,223,231,116,12,167,156,40,193,115,50,44,230,48,8,88,214,49, - 49,142,51,65,205,171,160,15,220,183,2,24,33,4,221,82,108,100,159,90, - 70,193,119,0,188,3,160,35,85,247,36,0,56,29,195,158,2,155,223,39, - 240,10,120,94,73,155,126,53,111,220,152,60,31,59,186,51,62,46,41,8, - 214,196,74,209,135,236,94,169,83,194,115,124,137,162,40,53,61,221,61,176, - 90,173,75,181,244,191,99,181,90,151,246,116,247,64,81,148,26,158,227,75, - 242,149,171,40,177,198,105,229,231,164,180,20,166,149,159,179,69,81,162,139, - 210,133,15,13,190,189,130,231,205,187,135,6,223,94,145,254,254,88,99,190, - 105,26,155,62,9,96,76,253,157,4,49,137,178,80,152,82,69,1,20,10, - 0,170,146,155,211,240,21,0,68,235,178,84,103,111,170,147,173,100,116,116, - 60,11,128,96,78,195,87,32,138,54,0,34,20,10,40,10,160,202,98,41, - 199,111,41,85,143,112,4,180,180,108,225,48,212,111,116,161,154,31,229,245, - 112,36,88,164,95,27,142,4,139,20,69,209,199,138,23,50,198,58,74,203, - 230,15,3,112,235,114,168,58,239,197,192,224,83,193,152,214,240,178,107,74, - 232,178,107,74,232,242,229,53,244,198,27,23,43,193,96,127,49,99,172,22, - 234,4,19,0,88,200,243,150,35,5,5,51,115,218,81,66,133,101,179,224, - 198,124,110,250,120,83,103,135,58,251,109,86,253,213,16,69,43,56,94,204, - 121,156,156,16,6,179,41,146,242,51,86,211,146,251,23,94,80,48,211,203, - 243,150,35,24,109,57,239,102,140,213,6,131,253,197,55,222,184,88,89,190, - 188,134,234,229,150,78,134,217,20,97,57,77,48,1,0,2,112,188,8,81, - 180,98,86,253,213,0,128,206,142,103,33,73,17,173,210,28,67,222,85,213, - 125,191,188,143,11,134,130,37,38,209,244,60,101,20,225,112,184,155,231,249, - 97,158,231,135,195,225,112,55,101,20,38,209,244,124,48,20,44,185,239,151, - 247,229,99,45,121,20,37,230,62,218,251,82,202,113,164,163,189,255,104,166, - 84,246,30,237,253,199,184,112,74,99,136,70,125,190,112,120,168,50,26,245, - 249,40,141,165,184,255,165,102,69,137,185,145,90,169,123,37,73,2,99,170, - 18,75,112,65,51,78,153,253,227,31,143,195,98,177,221,146,71,190,198,17, - 141,50,72,18,243,30,31,136,97,96,48,6,69,1,40,21,1,98,67,93, - 253,50,173,155,156,65,215,37,148,50,80,202,161,174,126,25,64,108,160,84, - 132,162,0,3,131,49,28,31,136,65,146,152,87,146,64,67,225,209,87,72, - 161,128,172,168,10,176,127,72,66,56,194,24,199,79,103,0,220,80,149,156, - 54,147,55,241,163,136,255,221,164,93,227,182,217,42,24,99,196,29,8,210, - 230,193,97,9,138,204,52,165,108,96,112,250,147,75,5,150,56,53,190,163, - 172,252,2,87,56,66,168,222,34,76,102,116,19,124,150,243,108,69,198,224, - 141,183,48,169,58,14,199,113,66,92,185,129,136,218,250,168,156,196,229,132, - 154,54,6,128,166,148,59,218,114,38,180,172,252,2,221,186,77,92,50,113, - 66,136,231,147,140,42,57,142,19,208,219,243,34,18,203,136,177,220,182,173, - 74,198,100,54,57,121,129,119,12,185,134,96,49,91,154,0,184,238,184,227, - 14,122,199,29,119,80,0,46,139,217,210,52,228,26,2,47,240,14,147,217, - 228,204,38,79,103,217,53,37,180,227,200,211,158,96,240,184,39,89,65,81, - 26,67,48,120,220,211,113,228,233,35,169,194,1,32,16,56,238,233,234,220, - 238,14,4,142,143,83,96,9,247,123,146,27,18,218,142,50,174,202,233,181, - 11,159,223,241,16,194,225,16,130,65,95,252,136,68,66,216,253,250,223,112, - 222,162,47,129,49,134,72,36,132,64,192,215,151,207,174,37,201,180,252,75, - 57,245,141,40,46,202,176,80,86,128,254,65,9,253,67,18,134,92,128,203, - 35,162,176,248,106,12,187,1,2,10,2,138,97,55,80,88,124,53,92,30, - 17,67,46,85,97,245,15,74,144,21,128,50,44,244,141,40,46,73,102,76, - 150,71,159,105,255,128,132,193,97,245,80,223,67,234,83,152,13,235,214,173, - 163,208,148,156,197,98,173,176,219,237,241,242,178,219,237,30,139,197,90,1, - 77,185,173,91,183,142,126,253,107,103,82,175,95,113,143,4,149,78,89,1, - 6,135,101,12,185,166,98,179,4,3,131,147,159,92,20,92,131,118,116,0, - 112,155,205,21,136,68,41,250,135,98,80,20,6,89,97,144,21,104,7,131, - 44,83,184,61,49,56,139,6,1,208,172,83,188,151,93,83,66,25,131,59, - 16,84,150,14,14,171,50,171,106,190,136,154,186,171,64,136,5,148,10,80, - 100,134,33,151,60,101,10,78,77,19,133,179,104,16,110,79,12,178,76,199, - 229,67,81,24,250,135,98,136,68,41,204,230,10,96,180,229,172,151,199,9, - 65,221,225,66,134,34,51,80,42,128,16,11,106,234,174,66,85,205,23,161, - 40,12,131,195,49,4,130,202,82,198,224,206,100,53,166,226,190,95,222,199, - 5,3,65,167,217,98,222,107,177,88,154,162,177,104,167,40,136,241,10,82, - 20,68,79,52,22,237,180,88,44,77,102,139,121,111,48,16,116,230,99,197, - 133,195,195,154,171,31,245,127,170,253,161,42,109,138,112,120,24,140,209,148, - 225,0,67,52,234,5,144,238,126,134,112,120,56,229,27,224,40,46,243,244, - 29,235,232,40,155,54,99,225,115,127,123,16,207,239,120,8,59,254,254,16, - 254,241,210,99,216,181,115,43,46,252,194,53,32,0,118,237,220,138,98,231, - 180,43,0,54,137,117,126,208,211,228,97,12,29,96,88,72,25,64,41,86, - 40,10,192,152,176,130,49,19,202,203,164,53,132,99,32,28,67,121,153,180, - 134,49,19,24,19,86,168,214,30,86,104,93,133,11,25,67,7,99,240,200, - 50,131,63,160,196,187,184,25,208,164,40,0,3,150,130,161,17,128,107,205, - 191,148,83,0,88,183,110,29,93,183,110,157,107,193,89,103,187,156,197,37, - 241,113,59,103,113,137,111,193,89,103,187,214,173,91,231,210,20,33,0,96, - 245,13,211,40,165,112,129,161,137,50,134,55,118,63,154,211,24,186,129,193, - 169,78,198,61,123,18,55,95,30,221,139,242,91,156,172,132,16,137,154,225, - 246,69,65,192,129,35,20,148,169,191,12,128,73,84,192,241,74,206,22,156, - 215,47,187,195,17,218,205,24,212,150,239,152,245,94,18,192,0,81,100,32, - 200,201,133,76,14,48,117,1,173,54,38,230,245,199,212,125,32,217,104,94, - 24,40,0,2,179,41,4,129,231,153,110,41,36,151,199,84,67,160,128,82, - 85,161,143,246,56,169,229,161,237,95,136,145,160,210,45,43,204,157,175,108, - 179,104,118,50,198,28,67,3,67,176,23,216,61,204,196,220,183,222,122,107, - 60,31,255,118,251,191,209,187,239,190,219,45,8,66,241,208,192,16,28,197, - 14,135,89,52,59,145,215,190,148,234,216,166,203,29,67,101,133,2,151,59, - 166,141,117,178,41,10,31,207,15,254,117,45,253,229,175,54,185,143,246,30, - 102,0,26,37,41,86,76,8,102,41,74,236,145,203,151,174,212,164,170,214, - 91,48,232,235,2,200,164,22,122,3,128,123,240,15,16,77,51,61,246,194, - 69,93,0,169,212,188,9,84,106,222,4,166,23,216,195,11,56,173,91,186, - 192,30,238,229,57,50,93,243,38,80,169,121,19,168,212,188,9,120,164,216, - 49,248,61,5,40,41,187,60,174,120,25,99,29,140,41,211,24,149,17,14, - 125,224,147,165,227,244,231,63,191,135,79,244,40,48,52,52,200,57,138,138, - 57,125,23,26,74,41,55,52,52,200,109,220,184,113,76,97,113,156,141,4, - 252,47,123,237,5,231,117,250,124,195,149,237,135,223,88,48,217,252,27,24, - 156,10,228,236,209,91,63,239,245,236,225,171,170,62,195,213,204,240,225,112, - 167,19,117,213,234,238,251,245,218,46,252,245,53,62,240,34,141,43,55,198, - 24,50,121,19,0,128,254,190,237,176,23,93,224,230,136,56,143,17,190,22, - 74,124,247,252,71,244,223,74,103,240,38,142,99,191,101,200,62,20,151,41, - 206,72,36,12,179,217,2,66,84,183,56,179,103,185,161,72,28,58,122,28, - 163,121,168,242,163,171,183,8,243,231,120,224,15,240,220,209,163,31,242,235, - 215,175,207,88,78,153,20,94,98,156,25,211,13,181,235,180,212,25,188,233, - 88,127,225,111,147,203,0,160,205,96,74,183,194,36,119,127,223,107,89,74, - 33,53,102,209,252,150,221,110,111,8,6,130,158,245,235,215,143,75,243,173, - 183,222,74,55,108,216,224,177,219,237,13,102,209,124,24,121,250,96,83,119, - 98,161,152,83,239,70,223,128,5,115,234,221,120,203,61,106,201,79,54,60, - 29,63,248,215,181,137,13,16,158,231,5,142,231,69,109,54,42,195,63,94, - 122,12,37,37,229,205,3,3,189,110,142,35,69,153,165,101,230,167,63,253, - 105,169,162,248,156,74,216,239,136,132,15,38,250,131,115,104,254,224,138,173, - 98,109,161,121,182,58,39,166,167,167,173,112,168,191,187,70,243,7,231,208, - 186,71,29,154,210,174,6,152,79,81,124,158,31,254,235,60,215,191,108,85, - 239,9,7,247,121,194,193,253,78,198,20,39,192,82,46,31,232,236,62,194, - 201,178,84,61,171,110,142,250,127,87,123,117,239,177,30,5,73,142,114,41, - 13,33,26,110,67,52,252,145,207,239,15,120,219,15,191,225,1,102,79,166, - 8,12,12,78,9,242,246,232,221,223,127,136,19,248,112,181,181,174,1,117, - 85,65,80,133,160,118,166,63,254,171,118,171,168,219,37,107,190,217,88,38, - 127,112,235,215,175,47,141,70,58,156,209,72,167,147,16,142,8,98,37,37, - 132,52,107,126,208,154,57,190,176,136,209,145,102,183,232,168,114,22,85,106, - 155,34,167,39,91,156,193,80,16,94,175,135,57,157,165,113,223,108,106,218, - 71,198,228,165,174,202,15,73,98,232,63,126,184,186,191,191,123,92,165,145, - 68,70,239,218,169,226,76,7,163,12,110,215,17,101,196,235,107,38,92,97, - 188,12,168,226,111,102,140,81,89,234,47,98,140,22,2,172,120,2,27,62, - 83,66,72,89,129,189,0,200,48,3,211,110,183,123,180,107,202,144,57,223, - 169,114,0,142,99,16,56,138,198,122,55,194,97,154,48,222,57,21,225,153, - 217,176,97,3,213,26,35,138,44,203,136,70,194,144,121,73,179,222,252,157, - 60,207,123,24,163,117,249,229,41,37,135,19,211,12,140,142,17,43,10,69, - 79,111,23,142,245,29,213,254,151,31,213,29,186,102,232,102,31,211,144,184, - 229,230,43,233,198,141,27,181,120,82,67,41,197,209,190,94,28,31,232,211, - 226,81,30,205,236,51,143,129,49,121,154,49,141,210,224,211,66,222,30,189, - 41,165,56,214,215,131,254,129,99,185,122,215,206,232,12,84,133,29,86,63, - 62,10,41,118,52,229,21,125,125,60,6,6,218,38,29,167,219,61,12,0, - 190,247,63,220,159,147,172,236,149,70,156,180,150,206,4,226,108,61,17,30, - 189,215,126,103,109,78,99,79,183,220,114,11,197,196,220,229,196,91,31,28, - 79,213,77,135,249,81,119,101,9,199,68,194,199,200,207,6,99,204,39,203, - 49,188,248,226,163,137,254,224,92,146,36,209,100,47,222,19,156,112,146,201, - 49,48,71,41,5,99,82,178,252,116,47,82,166,111,36,135,120,70,123,75, - 114,137,103,50,19,108,12,12,78,37,242,246,232,141,132,143,74,81,148,76, - 21,14,3,224,59,210,209,238,90,183,238,142,108,26,226,99,139,243,27,43, - 191,70,55,110,188,211,5,176,70,69,81,28,200,80,105,50,21,253,223,9, - 123,244,254,36,226,252,132,40,102,140,57,20,69,65,44,170,206,148,140,69, - 99,80,20,5,148,210,106,0,148,82,90,61,145,112,198,152,3,64,49,114, - 80,188,27,54,108,160,27,54,108,112,81,74,27,41,141,56,8,33,190,99, - 71,219,227,30,189,25,99,76,146,36,132,66,227,183,13,11,133,66,80,151, - 28,164,214,2,78,167,147,123,244,209,71,189,14,135,195,107,181,90,227,227, - 95,19,69,81,20,132,195,97,234,241,120,80,80,80,16,23,86,88,88,200, - 255,225,15,127,240,150,149,149,121,173,86,43,39,8,147,115,113,35,203,50, - 194,225,48,237,236,236,140,55,34,12,12,78,119,242,246,232,13,32,190,198, - 40,23,178,77,198,248,36,226,92,183,238,142,156,226,204,135,147,49,206,79, - 2,74,233,14,69,145,241,230,219,187,53,79,220,138,174,160,30,5,160,53, - 82,242,15,167,148,238,64,30,22,235,250,245,235,199,148,183,94,86,235,215, - 175,231,24,99,62,73,146,240,240,195,15,35,217,154,147,36,73,87,112,241, - 6,4,33,36,238,136,212,235,245,206,241,122,189,25,27,41,83,65,32,16, - 56,39,16,8,160,171,171,107,170,69,115,200,176,37,152,129,193,233,68,86, - 143,222,31,7,70,156,167,15,132,144,6,74,169,147,49,70,100,89,93,111, - 149,108,13,105,214,120,94,225,132,16,79,190,93,107,169,202,91,183,238,20, - 69,105,164,148,58,98,177,216,24,69,165,89,208,62,198,152,107,195,134,13, - 148,16,194,65,245,30,0,0,240,61,57,183,45,89,230,137,192,247,228,220, - 61,31,71,60,6,6,167,51,134,107,95,131,41,35,209,26,207,164,140,178, - 89,227,233,194,167,170,129,160,91,119,35,35,35,112,187,221,196,229,114,33, - 28,14,115,178,44,67,81,20,132,66,33,234,118,187,81,88,88,200,7,2, - 1,14,106,215,40,28,95,249,104,42,162,55,48,48,248,152,48,20,156,193, - 148,114,170,88,169,122,58,181,238,199,82,168,99,192,169,186,29,141,46,61, - 3,131,83,20,226,223,218,104,76,169,50,48,200,1,195,130,51,48,56,181, - 48,102,83,25,24,228,136,239,201,185,159,116,18,12,12,12,242,64,0,128, - 162,101,109,19,158,17,166,91,128,134,12,67,198,233,42,67,155,104,82,239, - 123,114,110,198,53,162,6,6,6,39,23,134,5,103,96,144,27,198,183,98, - 96,112,138,97,76,50,49,48,200,2,99,140,2,48,6,224,12,12,78,49, - 114,85,112,137,19,81,114,237,226,153,200,61,217,100,156,8,153,39,234,158, - 108,50,140,188,100,150,121,162,238,201,38,99,42,100,26,24,24,156,4,228, - 220,237,66,159,186,12,244,169,203,128,220,118,106,101,9,215,79,148,148,50, - 242,76,135,190,112,119,236,66,226,60,243,146,207,46,42,249,200,200,55,47, - 169,56,85,159,75,74,193,163,101,52,225,188,164,122,222,19,144,145,79,58, - 12,12,12,78,82,140,113,5,3,3,3,3,131,211,146,188,21,92,14,173, - 116,54,73,11,33,39,25,185,88,11,217,90,242,185,228,101,10,118,94,207, - 42,99,178,150,79,142,50,78,154,231,146,53,146,236,214,83,214,116,228,240, - 224,114,145,145,45,29,6,6,6,39,49,153,20,28,75,56,192,93,243,66, - 254,194,71,239,25,35,107,18,50,38,148,14,205,209,232,164,242,146,224,172, - 116,194,121,73,146,49,161,116,36,199,127,42,63,151,228,248,179,57,132,205, - 33,29,108,10,100,76,40,29,6,6,6,39,31,233,38,153,164,108,221,114, - 215,188,16,31,107,225,174,121,33,149,115,237,248,125,250,181,41,100,100,115, - 202,157,139,140,108,233,136,183,224,9,33,19,149,17,55,2,50,200,200,154, - 151,28,100,100,205,75,42,121,137,232,178,115,125,46,105,100,228,245,92,38, - 152,142,148,242,146,101,232,99,96,105,210,148,245,253,72,144,193,72,106,109, - 149,143,140,92,202,198,192,192,224,36,36,149,5,151,182,235,70,171,184,178, - 11,77,83,105,232,50,144,131,197,144,77,70,46,233,72,167,84,166,82,6, - 114,200,203,84,164,3,25,122,221,24,99,57,63,151,76,50,144,227,115,153, - 108,58,144,229,29,203,197,130,202,246,126,124,92,50,12,12,12,78,94,38, - 60,201,36,69,229,254,177,140,241,228,144,142,188,7,206,82,229,229,227,24, - 123,203,33,29,121,115,50,63,151,188,35,29,175,116,243,78,71,138,135,48, - 17,25,201,233,48,48,48,56,5,48,102,81,26,24,24,24,24,156,150,24, - 10,206,192,192,192,192,224,180,100,194,10,78,27,107,73,28,164,32,19,156, - 73,151,72,222,50,82,164,3,105,38,22,228,35,35,95,17,169,200,91,70, - 170,188,228,203,201,252,92,242,142,84,45,191,73,229,37,197,67,152,136,140, - 228,116,24,24,24,156,2,164,82,112,105,43,128,76,131,242,137,100,154,56, - 145,107,197,151,77,70,46,233,200,52,233,97,170,100,32,135,188,76,69,58, - 144,65,97,102,154,196,146,72,166,137,19,185,86,226,217,100,228,154,151,76, - 229,145,203,216,101,182,247,227,227,146,97,96,96,112,242,146,110,153,0,209, - 166,121,143,33,113,106,53,82,87,134,132,187,230,133,248,246,71,105,42,143, - 108,149,104,86,25,57,164,3,132,16,162,239,218,148,170,66,206,37,47,154, - 8,164,147,145,75,94,178,201,200,37,47,201,242,38,32,99,76,153,78,52, - 47,217,100,228,155,151,84,239,88,226,178,138,52,50,178,190,31,9,50,210, - 165,33,31,25,185,228,197,192,192,224,36,36,83,23,37,73,56,38,180,127, - 97,194,61,99,100,77,66,198,132,210,161,47,137,155,2,25,137,114,242,206, - 75,146,140,137,238,9,121,218,60,151,228,248,39,98,49,37,231,101,10,100, - 24,150,155,129,193,105,66,222,99,112,57,180,206,63,150,49,159,92,172,132, - 108,131,96,185,228,229,227,24,139,59,65,99,111,227,210,113,178,60,151,172, - 145,100,183,154,178,166,35,135,7,151,139,140,108,233,48,48,48,56,137,49, - 102,81,26,24,24,24,24,156,150,228,236,240,52,161,181,155,75,139,54,229, - 248,74,158,164,148,145,103,58,82,182,228,243,205,75,170,113,175,60,73,41, - 35,223,188,164,226,84,125,46,41,5,143,62,170,9,231,37,79,147,59,157, - 140,124,210,97,96,96,112,146,146,171,130,155,200,135,62,21,149,195,184,41, - 222,39,64,230,137,186,39,155,12,35,47,147,151,113,178,230,197,192,192,224, - 36,192,232,162,52,48,48,48,48,56,45,49,20,156,129,129,129,129,193,105, - 9,241,111,109,52,230,68,27,24,228,136,227,43,31,125,210,73,48,48,48, - 200,145,156,39,153,24,24,156,74,24,138,200,192,192,64,0,128,162,101,109, - 100,205,198,125,44,22,25,1,0,152,44,133,120,96,221,217,99,6,219,245, - 240,228,176,228,243,186,69,88,180,172,45,237,96,253,84,202,202,22,71,98, - 126,18,229,37,134,11,130,21,173,27,155,78,232,228,130,169,142,59,149,188, - 100,89,233,206,79,181,172,108,101,157,28,223,154,117,123,89,44,22,130,201, - 100,67,129,179,10,247,254,104,198,148,150,189,209,43,97,96,96,0,104,93, - 148,183,188,247,23,236,127,245,65,12,31,61,0,0,40,171,154,143,5,23, - 174,142,43,159,229,223,125,140,181,237,223,134,80,96,24,37,149,115,112,214, - 121,43,209,186,177,137,36,159,95,112,225,106,220,115,214,215,0,164,87,74, - 83,41,43,21,45,235,246,178,161,190,3,232,60,240,18,2,222,190,49,249, - 209,229,37,231,183,160,120,6,102,205,191,4,211,102,204,207,170,108,244,202, - 156,202,74,214,180,112,2,63,174,194,159,76,220,137,36,203,115,247,183,195, - 86,80,134,198,5,87,227,177,95,47,39,45,235,246,178,247,222,248,243,184, - 243,83,45,107,205,198,125,44,213,187,147,238,217,173,254,217,203,236,163,247, - 254,6,247,96,59,236,246,82,204,156,253,121,148,148,207,69,73,197,220,113, - 138,78,87,132,52,22,203,94,214,38,19,76,38,27,30,216,216,68,252,91, - 27,153,97,193,25,24,24,8,0,16,139,140,96,248,232,1,188,188,253,127, - 209,223,223,143,235,87,223,134,72,192,11,64,85,72,31,188,241,23,116,183, - 191,134,189,175,191,136,47,95,247,67,248,134,187,113,77,203,131,227,206,235, - 247,164,99,42,101,37,163,43,182,189,47,220,15,207,80,7,92,3,135,113, - 232,131,55,199,229,39,57,191,126,191,31,77,231,95,10,207,80,7,156,211, - 234,113,77,203,131,44,157,178,73,172,204,37,41,146,53,77,162,104,65,89, - 213,124,172,217,184,143,1,95,155,84,220,233,72,148,119,198,153,159,135,20, - 9,224,154,150,7,153,111,184,123,220,249,229,223,125,140,165,83,114,19,149, - 21,9,120,211,190,59,137,220,252,139,62,230,30,248,8,125,29,123,113,180, - 253,53,188,246,226,35,248,204,103,23,97,232,248,1,76,155,62,31,51,103, - 127,30,171,127,246,50,211,21,221,154,117,123,89,219,187,79,99,224,216,1, - 196,98,193,172,229,96,50,217,81,49,115,62,214,172,219,203,128,27,114,45, - 62,3,3,131,211,24,1,0,168,172,64,146,34,240,251,253,240,122,189,144, - 164,8,194,1,215,24,197,163,43,139,128,247,56,186,219,119,193,221,223,142, - 190,174,183,113,232,131,55,209,211,211,147,181,194,79,84,110,147,149,149,72, - 58,197,230,247,251,209,223,223,31,207,79,34,122,126,117,94,126,97,27,108, - 54,91,86,101,147,168,0,50,225,247,251,1,0,161,80,104,92,133,63,209, - 184,211,145,40,239,229,23,182,97,201,101,87,67,146,35,40,169,156,131,128, - 247,248,152,243,0,50,42,185,124,101,93,211,242,32,11,7,92,227,222,157, - 100,110,254,69,31,235,61,188,11,29,31,190,128,254,158,119,225,115,117,35, - 22,139,225,141,87,119,64,150,101,92,184,228,202,113,138,206,51,220,137,222, - 206,55,241,202,179,173,106,217,103,176,226,162,209,40,130,193,32,110,248,206, - 221,152,53,111,210,222,203,13,12,12,78,19,198,77,50,145,101,25,209,160, - 103,156,226,209,149,197,136,183,15,109,251,182,33,22,242,162,237,208,187,232, - 239,239,143,87,232,233,72,165,220,38,42,75,39,157,98,3,16,175,108,221, - 110,55,2,129,0,68,209,146,86,78,40,20,130,215,235,69,44,22,203,170, - 108,18,21,128,223,239,71,40,20,74,91,241,134,66,33,200,178,60,174,194, - 231,4,30,162,104,137,167,81,151,49,89,69,167,151,219,142,191,253,21,151, - 47,189,26,67,125,7,17,11,121,199,156,95,122,229,87,1,100,86,114,249, - 200,210,149,95,52,232,1,160,190,59,169,232,61,188,11,239,239,221,130,190, - 142,189,248,240,221,221,136,197,98,136,70,163,240,122,85,197,191,253,153,71, - 33,138,34,46,253,226,87,226,138,174,160,184,2,114,36,0,0,240,120,60, - 136,70,163,144,36,41,165,124,93,193,197,98,193,156,186,51,13,12,12,62, - 29,164,156,69,153,172,120,244,202,56,18,137,32,26,241,33,26,241,161,171, - 171,11,126,191,31,195,195,195,25,149,72,178,114,155,140,44,32,55,197,230, - 247,251,17,8,4,32,203,50,90,214,254,8,115,206,252,34,76,150,130,148, - 242,116,5,21,10,133,178,42,155,254,174,183,32,71,67,241,235,245,10,58, - 21,178,44,35,16,8,140,59,111,178,20,162,184,124,54,154,206,191,20,91, - 31,255,19,100,89,134,223,239,135,32,8,19,82,116,186,194,212,243,18,10, - 133,240,252,142,109,88,188,120,241,152,60,134,66,161,172,74,46,95,89,137, - 202,47,29,107,214,237,101,111,191,242,59,244,117,236,197,59,111,190,130,145, - 145,17,4,131,65,4,2,1,72,146,52,166,129,240,240,230,77,176,219,237, - 88,249,47,63,69,97,176,10,65,223,96,92,25,166,42,75,0,113,25,161, - 80,40,109,26,12,12,12,62,157,140,83,112,130,32,140,83,60,125,125,125, - 8,4,2,184,246,218,107,1,0,239,189,247,94,220,10,243,122,189,105,149, - 72,42,229,54,81,89,249,42,182,27,91,190,135,226,178,89,152,115,230,23, - 209,184,224,106,180,110,108,34,247,139,142,50,38,0,0,32,0,73,68,65, - 84,230,48,187,46,157,162,27,58,250,1,20,57,138,17,109,226,74,166,46, - 51,64,85,112,169,44,154,7,214,157,77,150,127,247,49,38,199,194,248,102, - 203,207,224,29,238,196,95,31,127,104,194,138,46,81,97,238,248,219,95,227, - 121,216,185,115,39,22,47,94,140,179,206,58,11,59,119,238,140,159,207,164, - 228,242,149,149,172,252,82,17,139,133,224,241,244,224,157,55,95,137,91,212, - 137,138,77,87,76,178,44,227,91,45,223,129,217,82,8,0,136,132,60,8, - 140,12,2,64,220,114,75,103,193,233,247,27,24,24,24,36,50,110,39,19, - 155,205,6,64,85,60,233,20,18,128,184,66,186,177,229,123,152,81,119,78, - 92,137,232,114,214,108,220,199,142,28,120,33,171,114,203,85,214,123,111,252, - 25,251,94,105,69,251,7,127,199,107,47,62,60,102,156,173,175,175,15,131, - 131,131,240,122,189,248,230,234,155,240,195,91,254,63,212,157,113,49,154,150, - 254,0,77,151,125,63,237,236,193,76,232,22,154,215,235,197,142,191,253,21, - 79,61,190,9,195,253,7,17,141,248,114,238,70,77,199,99,191,94,78,154, - 46,251,62,154,150,254,0,117,103,92,140,213,45,63,193,87,175,253,6,4, - 65,72,25,247,95,31,186,23,237,31,252,29,251,94,105,197,190,157,191,215, - 38,173,168,60,176,238,108,50,123,254,101,152,81,119,14,46,95,122,117,252, - 249,133,66,33,108,223,190,29,0,176,120,241,226,49,231,183,62,254,39,116, - 183,191,134,182,253,219,208,178,110,239,164,100,233,10,47,29,122,151,161,219, - 237,198,192,192,0,46,189,244,50,52,55,95,1,64,109,36,8,130,128,235, - 175,255,26,86,174,188,1,102,75,33,10,29,51,0,0,187,254,241,20,164, - 72,106,171,205,192,192,192,32,23,198,41,56,189,50,211,43,89,89,150,227, - 10,233,141,55,222,0,128,248,249,235,175,191,30,38,91,49,102,84,45,24, - 167,68,98,145,17,248,221,189,113,69,164,143,73,77,84,150,187,191,29,207, - 61,185,9,123,95,127,113,204,4,146,196,52,174,92,185,18,38,91,49,170, - 230,94,136,185,103,127,25,79,181,174,38,147,89,223,166,91,85,110,183,27, - 195,195,195,216,190,125,123,92,41,79,150,214,141,77,228,169,214,213,100,238, - 217,95,70,213,220,11,97,178,21,163,185,185,25,205,205,205,113,5,162,199, - 221,223,223,143,199,31,249,3,126,255,63,235,224,119,247,66,95,115,166,243, - 216,175,151,147,25,117,11,96,178,21,199,21,144,222,69,154,172,152,244,243, - 143,252,249,119,8,120,251,32,203,225,73,201,242,251,253,216,185,115,103,252, - 57,164,67,146,36,124,245,186,111,160,160,120,58,68,75,1,74,74,74,112, - 237,181,203,113,237,181,203,1,0,175,190,186,11,209,200,8,70,124,125,136, - 38,228,47,26,141,78,190,176,13,12,12,62,149,140,83,112,178,44,163,185, - 185,57,62,1,66,16,4,60,243,204,51,0,128,243,206,59,47,222,133,167, - 159,143,133,188,232,59,186,31,203,191,251,216,152,238,63,147,165,16,69,37, - 213,56,227,204,207,199,187,252,38,35,171,164,114,14,174,248,202,90,52,157, - 127,41,250,250,250,226,93,146,178,44,67,16,4,108,223,190,29,59,119,238, - 68,44,228,197,209,143,94,197,71,251,158,198,53,45,15,178,68,11,37,87, - 100,89,70,36,18,65,36,18,65,32,16,64,32,16,128,215,235,69,115,115, - 51,206,58,235,172,41,25,239,105,89,183,151,93,211,242,32,251,104,223,211, - 56,250,209,171,136,133,188,232,234,234,138,43,80,93,169,232,199,87,175,253, - 6,110,252,222,70,20,149,84,195,164,117,227,233,44,255,238,99,172,175,107, - 127,92,134,126,63,0,52,55,55,3,24,181,150,245,124,93,191,242,219,40, - 40,158,1,65,176,78,74,86,32,16,192,226,197,139,227,13,152,100,56,147, - 41,254,183,110,161,153,45,133,184,240,194,47,0,0,246,239,127,7,251,247, - 191,3,81,20,33,69,2,8,120,143,227,192,251,251,16,12,6,199,196,109, - 96,96,96,144,47,105,55,91,214,43,51,0,113,5,2,168,138,73,183,48, - 4,65,192,83,91,183,160,175,235,237,180,221,93,181,115,46,136,79,43,159, - 140,172,179,206,91,137,179,47,106,193,156,51,191,136,111,182,252,12,215,44, - 91,1,96,252,88,215,43,47,255,29,47,237,216,130,238,246,215,176,239,149, - 86,236,125,225,254,113,10,51,29,137,138,77,63,244,241,188,31,255,236,30, - 148,85,206,131,217,226,136,167,121,162,44,255,238,99,108,239,11,247,99,223, - 43,173,232,110,127,13,111,189,241,220,152,201,60,110,183,59,110,17,233,113, - 55,44,184,26,103,95,212,130,179,23,223,56,110,247,151,35,7,94,80,203, - 77,147,225,247,251,17,137,68,198,116,5,135,66,161,248,249,150,181,63,66, - 237,156,11,210,118,43,231,35,235,250,235,175,7,160,118,109,235,93,172,137, - 152,76,54,84,86,125,22,215,175,254,9,68,209,26,183,208,186,187,187,112, - 248,176,186,24,91,159,68,242,234,171,187,176,103,207,27,24,24,24,128,199, - 227,153,84,25,27,24,24,24,164,156,69,105,182,56,96,178,21,227,154,101, - 43,240,252,142,109,241,214,249,51,207,60,131,171,174,186,10,139,23,47,198, - 206,157,59,227,231,31,127,228,15,248,254,45,247,34,150,52,102,242,216,175, - 151,19,93,185,44,189,242,171,216,241,183,191,78,88,150,94,17,39,238,84, - 114,227,218,219,51,78,210,0,16,87,174,45,89,22,0,235,202,44,81,97, - 234,19,85,26,22,92,141,89,243,47,65,216,63,136,247,223,120,36,107,161, - 102,178,58,214,108,220,199,222,122,233,183,232,254,104,23,222,223,247,10,128, - 204,147,100,244,184,211,205,162,140,69,70,224,29,60,18,239,10,238,233,233, - 129,215,235,197,202,149,43,1,140,42,164,225,225,225,248,36,158,218,57,23, - 224,204,243,190,150,178,43,56,31,89,55,182,124,15,133,37,181,136,133,188, - 48,37,88,106,137,60,176,177,137,172,254,217,203,172,160,160,12,135,246,63, - 133,103,30,255,13,4,65,136,79,253,215,103,71,6,131,193,184,213,22,139, - 197,226,93,151,58,153,38,152,24,24,24,24,164,34,165,130,43,44,158,129, - 170,185,23,194,239,238,141,43,38,189,197,174,43,191,203,151,94,141,231,119, - 108,139,159,79,183,56,59,149,146,155,168,44,32,63,69,7,0,91,31,255, - 19,214,254,240,63,199,41,76,96,116,189,87,162,181,6,140,87,108,186,114, - 89,245,127,94,98,7,223,121,26,192,232,58,183,116,202,44,221,121,93,137, - 188,191,239,149,73,41,54,157,196,69,250,122,215,109,162,226,1,48,102,134, - 106,58,229,54,17,89,51,231,44,66,81,73,53,142,126,244,106,90,11,14, - 0,30,252,247,37,100,245,207,94,102,129,192,48,174,186,246,59,112,247,183, - 99,219,83,143,140,155,77,169,151,231,119,191,255,19,56,167,213,199,103,81, - 70,163,209,140,179,86,179,205,104,53,48,48,248,116,50,166,70,210,43,25, - 179,221,137,234,57,139,0,44,130,40,88,176,244,202,175,198,215,108,37,43, - 63,253,124,38,146,149,220,100,100,233,100,83,116,137,22,89,38,133,169,43, - 23,32,189,98,211,175,213,215,137,233,229,164,43,165,76,36,175,233,75,165, - 68,38,162,216,146,9,133,66,241,238,199,68,197,19,10,133,16,8,4,178, - 42,183,137,200,154,123,246,151,1,0,67,199,62,76,59,6,167,243,224,191, - 47,33,107,214,237,101,101,149,115,112,236,200,155,88,249,47,63,133,207,213, - 141,71,30,254,61,98,177,24,100,89,198,154,181,63,130,163,180,22,141,159, - 83,229,246,247,188,27,95,196,157,77,190,30,198,165,177,36,13,12,12,62, - 125,8,192,104,197,173,183,132,69,209,2,71,73,13,54,255,231,37,113,197, - 180,236,218,27,240,200,159,127,7,179,221,137,217,243,47,67,44,22,132,40, - 88,226,231,51,45,206,6,198,42,185,201,202,74,36,157,162,243,121,143,225, - 207,15,254,6,178,44,143,147,167,231,87,95,112,158,171,114,49,89,10,81, - 86,53,31,215,175,190,45,175,189,40,45,5,197,227,226,214,149,200,55,87, - 223,52,41,197,150,248,236,174,95,249,237,184,226,49,153,236,24,58,246,33, - 98,177,24,86,174,254,78,78,202,109,34,178,86,253,159,151,88,242,187,147, - 142,7,54,54,145,155,127,209,199,74,202,231,98,230,236,207,227,216,145,55, - 113,211,191,110,132,207,213,141,205,15,254,6,142,210,90,124,230,243,215,98, - 70,125,19,104,44,6,179,221,137,27,190,115,119,206,123,81,86,207,250,60, - 76,166,201,141,143,26,24,24,156,62,8,192,104,197,189,106,205,255,11,0, - 99,42,101,93,49,137,150,2,220,124,251,38,76,159,117,54,28,101,181,113, - 15,0,250,249,228,138,60,21,83,41,43,153,84,138,238,150,219,127,61,46, - 63,169,242,155,171,114,121,96,221,217,36,31,111,2,0,96,41,40,198,3, - 235,206,38,247,104,139,204,19,149,100,62,113,167,67,151,183,250,187,119,197, - 23,181,235,30,0,166,207,58,123,220,249,169,150,101,41,40,78,251,238,164, - 66,247,24,144,172,232,110,187,235,207,168,157,183,4,51,234,155,240,224,191, - 47,81,61,21,76,208,155,192,61,134,187,28,3,3,3,104,238,114,114,241, - 7,215,178,110,47,147,229,240,184,176,228,243,185,248,112,155,74,89,153,226, - 136,69,2,41,93,214,36,230,151,202,10,76,150,130,79,196,31,220,100,226, - 78,146,215,23,139,140,76,63,85,252,193,37,114,243,47,250,88,192,115,20, - 186,127,184,7,166,224,57,24,238,114,12,12,12,0,77,193,125,210,137,48, - 48,152,106,12,5,103,96,96,96,40,56,3,3,131,211,2,163,81,99,144, - 140,0,0,173,29,55,33,18,73,63,105,194,98,73,61,113,224,218,107,151, - 161,120,159,186,175,224,84,200,240,158,253,28,170,171,103,229,150,242,36,70, - 158,58,227,180,147,161,119,239,253,22,224,190,9,192,172,6,143,105,144,16, - 128,177,209,5,251,36,33,156,79,184,140,211,206,115,0,168,246,55,213,14, - 2,0,35,91,27,21,0,40,92,214,198,107,231,4,0,138,118,109,162,220, - 132,168,199,200,75,238,90,212,227,131,38,7,73,215,48,61,206,76,221,152, - 183,222,122,107,202,6,216,221,119,223,157,83,151,107,186,107,38,74,38,217, - 140,49,59,128,74,0,117,0,238,3,240,153,132,224,151,160,46,196,20,0, - 244,18,66,198,228,43,147,220,205,155,55,231,44,119,213,170,85,57,203,61, - 81,233,157,12,233,228,110,218,180,41,30,255,218,181,107,199,197,105,52,212, - 13,82,17,95,38,176,108,217,178,188,110,156,55,111,30,122,123,59,199,156, - 155,10,25,0,112,240,224,65,0,0,33,4,28,55,126,179,21,198,212,119, - 153,82,10,0,216,190,125,59,90,234,79,156,140,92,57,81,50,110,2,168, - 27,224,126,54,94,201,128,1,132,168,74,38,153,84,231,198,220,7,0,250, - 189,250,246,209,4,160,90,88,76,83,158,250,117,89,43,16,45,45,44,65, - 126,114,26,18,101,156,208,49,207,124,97,140,157,15,224,97,0,85,218,169, - 126,66,72,85,134,91,146,239,111,0,112,11,128,53,105,46,185,4,192,49, - 0,195,0,254,147,49,246,11,66,72,214,53,49,155,55,111,206,75,238,230, - 205,155,127,177,106,213,170,172,114,79,84,122,79,20,107,215,174,37,155,54, - 109,98,169,148,155,129,65,58,82,175,204,61,9,32,132,164,85,78,128,170, - 160,244,227,68,202,56,25,32,132,144,219,0,220,58,133,9,205,164,176,18, - 195,114,81,108,19,188,143,229,226,147,65,183,212,126,254,243,159,51,0,184, - 253,246,219,167,180,130,99,140,217,0,60,7,96,49,198,90,162,51,25,99, - 50,33,36,235,55,194,24,91,2,224,127,0,204,215,78,253,47,128,3,0, - 130,9,242,156,0,150,2,184,8,192,127,2,56,151,49,246,109,66,72,218, - 98,216,188,121,243,132,228,110,222,188,249,219,171,86,173,74,43,119,2,233, - 157,11,96,30,99,204,73,8,201,236,62,98,138,217,180,105,83,3,212,134, - 199,217,218,255,10,128,125,0,190,190,118,237,218,195,31,103,90,12,78,61, - 78,74,5,167,43,38,158,231,83,238,142,161,43,37,221,250,58,81,50,78, - 26,8,96,41,183,163,252,130,42,142,183,240,224,196,196,222,199,148,221,131, - 99,148,54,1,209,250,50,89,92,237,16,66,208,254,199,247,242,206,252,140, - 165,179,136,88,104,70,138,116,164,36,30,39,3,142,252,233,253,188,20,116, - 107,107,235,213,0,190,15,224,124,104,41,111,109,109,29,1,240,58,128,251, - 91,90,90,182,229,155,254,20,28,4,80,163,253,61,3,192,241,132,176,172, - 25,100,140,125,14,192,227,0,74,1,248,0,92,8,160,139,16,50,110,235, - 28,198,216,111,1,124,11,192,221,0,174,3,80,195,24,187,128,16,50,238, - 57,108,222,188,57,165,220,85,171,86,141,147,187,121,243,230,113,114,55,111, - 222,124,193,170,85,171,198,201,157,64,122,207,130,170,252,30,0,112,5,99, - 236,179,132,144,172,221,18,151,92,114,9,43,46,46,198,19,79,60,49,230, - 221,188,234,170,171,216,236,217,179,209,211,211,131,39,159,124,50,99,99,101, - 211,166,77,119,0,248,49,128,59,0,92,11,213,162,148,0,108,6,240,230, - 166,77,155,254,107,237,218,181,119,102,75,139,193,167,151,147,86,193,113,28, - 7,142,227,80,87,87,151,242,154,238,238,110,40,138,146,86,65,77,133,140, - 68,230,205,155,151,242,124,62,93,144,19,149,65,120,142,132,251,3,180,251, - 175,135,198,156,159,126,105,157,229,248,139,93,17,228,97,101,77,6,123,85, - 33,207,20,198,168,164,8,188,93,224,75,74,28,68,20,5,10,0,102,147, - 8,73,150,57,187,213,74,188,35,1,86,84,96,231,57,66,148,88,52,198, - 3,132,73,81,153,204,187,243,203,225,103,238,120,58,107,55,87,107,107,235, - 215,1,252,1,64,63,128,167,0,220,5,224,109,45,248,28,0,95,5,112, - 127,107,107,235,227,0,190,213,210,210,242,240,68,242,195,24,251,111,140,42, - 55,70,8,233,103,140,181,0,248,29,212,70,195,31,179,220,95,6,224,33, - 168,202,194,5,96,30,33,100,40,221,245,132,16,23,128,123,24,99,79,2, - 248,0,64,19,128,173,0,190,156,120,221,230,205,155,199,201,93,181,106,85, - 90,185,171,86,173,114,1,184,103,243,230,205,25,229,78,36,189,140,177,125, - 0,158,129,218,200,184,23,192,127,36,203,77,145,30,182,114,229,74,12,12, - 12,224,137,39,158,136,159,191,248,226,139,217,218,181,107,33,73,18,44,22, - 11,34,145,8,123,238,185,231,82,42,185,77,155,54,157,15,224,38,0,142, - 181,107,215,254,42,225,60,214,174,93,251,171,77,155,54,253,18,192,77,155, - 54,109,122,113,237,218,181,175,103,74,143,193,167,151,148,10,78,223,237,63, - 153,68,15,3,217,152,172,12,221,2,251,197,47,126,145,50,252,218,107,175, - 5,33,153,123,171,166,66,134,78,58,25,249,148,201,36,100,164,84,96,161, - 94,63,247,147,15,127,216,240,207,51,46,249,232,137,190,151,178,198,127,237, - 204,75,241,248,177,23,63,11,224,208,255,255,153,255,206,123,3,71,57,40, - 113,222,67,195,10,225,8,255,194,123,127,202,219,103,208,142,157,111,88,158, - 65,102,5,215,218,218,186,21,170,85,177,186,165,165,229,47,41,46,121,165, - 181,181,245,138,150,150,150,218,214,214,214,175,1,248,85,107,107,235,117,45, - 45,45,249,13,0,171,252,32,225,111,47,0,16,66,126,15,224,247,57,222, - 223,2,252,95,246,206,60,206,169,234,110,248,223,115,147,76,150,217,25,129, - 97,17,29,90,89,68,81,112,171,250,40,214,42,168,117,65,180,86,45,140, - 237,211,121,93,90,81,91,215,86,43,218,87,173,91,173,45,181,46,29,107, - 59,32,90,170,8,234,163,130,214,7,244,173,43,162,2,202,166,128,236,251, - 12,179,37,51,147,228,188,127,220,36,147,204,36,147,204,100,157,225,247,253, - 124,46,153,220,156,156,243,203,33,185,191,123,206,111,99,52,166,9,243,164, - 142,202,66,107,61,31,184,64,117,248,146,41,165,190,214,90,159,140,169,180, - 39,105,173,111,12,58,22,69,235,183,163,114,171,169,169,153,15,92,80,89, - 89,25,209,111,101,101,229,215,53,53,53,161,126,107,106,106,110,132,123,123, - 44,175,214,122,0,240,6,112,4,112,3,240,43,160,44,138,188,17,216,108, - 54,242,242,242,58,237,156,124,251,219,223,70,107,205,99,143,61,198,207,126, - 246,51,70,143,30,205,235,175,191,30,171,155,185,192,205,87,95,125,117,232, - 59,16,110,131,11,216,228,46,11,180,75,216,86,42,28,88,68,85,112,191, - 248,197,47,162,54,238,206,106,37,153,62,130,215,3,165,20,151,93,118,89, - 212,54,193,220,131,177,20,84,42,250,8,167,59,138,44,157,125,132,179,127, - 237,190,230,135,198,60,186,238,33,30,77,72,75,63,196,163,73,141,215,82, - 235,105,195,172,98,227,62,255,172,107,242,95,126,227,241,166,151,182,45,142, - 251,190,11,7,159,6,48,224,174,11,238,239,178,122,105,117,117,245,27,152, - 23,171,178,24,202,45,136,15,32,208,230,185,234,234,106,93,93,93,253,70, - 85,85,85,194,19,172,181,254,1,145,91,187,127,76,244,189,97,4,183,199, - 174,86,74,69,243,81,143,249,121,149,82,203,180,214,111,99,58,115,140,141, - 213,111,101,101,101,183,250,173,172,172,92,86,83,83,19,183,223,120,242,106, - 173,135,1,139,48,87,184,83,148,82,175,106,173,39,199,232,55,130,167,159, - 126,90,29,122,232,161,122,248,240,72,111,169,146,146,18,154,154,154,168,173, - 173,197,237,118,83,86,86,214,85,55,67,48,109,111,93,125,15,122,180,114, - 23,14,28,162,42,184,238,122,254,165,171,15,193,68,251,18,51,149,189,87, - 59,95,71,83,56,23,14,62,141,147,74,39,167,212,57,99,207,135,219,155, - 49,237,85,131,18,124,75,188,149,219,13,192,145,85,85,85,67,226,180,251, - 93,85,85,213,175,194,207,85,85,85,169,234,234,234,173,213,213,213,55,84, - 85,85,117,169,197,181,214,173,152,225,11,29,231,227,78,173,245,111,2,127, - 255,84,41,21,111,123,242,56,204,223,207,103,192,199,93,181,237,130,243,129, - 70,224,132,224,137,154,154,154,180,244,219,29,121,181,214,35,49,149,91,9, - 112,182,82,106,73,172,126,187,131,199,227,33,47,47,15,155,205,134,213,106, - 13,149,71,234,130,210,240,39,81,60,40,75,1,41,28,40,196,36,39,109, - 112,225,148,151,151,71,61,191,101,203,150,140,246,145,77,27,92,34,22,182, - 155,191,184,33,163,238,211,131,198,13,82,103,158,240,227,225,111,126,248,119, - 119,87,171,184,192,234,109,248,115,235,22,237,143,213,166,186,186,58,15,248, - 3,166,199,94,60,98,149,11,184,12,115,251,242,47,240,80,212,6,90,235, - 225,180,43,182,104,113,123,193,199,68,254,83,111,15,60,110,84,74,125,149, - 64,251,88,236,5,70,70,235,183,178,178,50,45,253,198,145,247,41,224,29, - 204,249,57,93,41,245,73,135,215,59,246,27,149,112,239,228,243,207,63,95, - 31,121,228,145,108,216,176,129,194,194,66,46,187,236,50,74,75,75,249,234, - 171,46,63,222,86,224,108,186,94,193,157,29,104,39,8,81,201,89,27,92, - 144,88,118,171,31,252,224,7,81,207,103,186,143,12,217,224,186,228,195,186, - 87,212,11,91,255,157,84,31,221,229,220,251,207,226,111,83,102,117,185,229, - 24,164,230,139,215,190,121,226,191,158,234,106,25,90,5,44,175,170,170,234, - 210,5,189,186,186,250,174,170,170,170,27,163,118,80,85,245,78,117,117,245, - 242,64,95,81,81,74,173,7,108,0,90,107,47,145,94,146,101,74,169,152, - 74,56,10,193,139,124,183,109,145,97,248,129,53,152,14,28,185,208,239,28, - 76,39,148,90,224,76,165,212,234,14,175,71,235,55,42,203,150,45,99,195, - 6,51,198,181,185,185,153,125,251,246,177,124,249,242,91,231,205,155,247,64, - 69,69,5,175,190,250,42,115,231,206,237,234,166,236,18,96,238,19,79,60, - 49,39,90,236,91,32,240,123,107,160,157,32,68,37,39,109,112,225,196,179, - 159,101,170,143,92,180,193,133,145,241,224,87,71,145,93,29,127,197,120,117, - 218,136,75,139,22,175,125,190,62,214,214,232,140,89,79,22,189,121,221,235, - 254,155,86,94,175,30,62,226,143,177,214,162,215,0,179,82,32,214,179,129, - 190,18,33,92,185,105,165,212,126,158,215,15,161,185,154,207,95,47,224,168, - 73,62,214,24,69,140,226,110,118,109,184,137,1,21,176,154,124,8,57,87, - 68,15,174,140,196,12,122,215,250,2,165,212,130,24,109,58,42,254,132,251, - 173,169,169,185,160,178,178,50,37,253,6,236,107,207,3,155,129,115,149,82, - 107,18,236,55,42,243,231,207,15,125,39,223,122,235,45,245,214,91,111,1, - 176,114,229,202,7,19,121,255,213,87,95,253,222,19,79,60,241,36,112,227, - 19,79,60,49,29,120,25,216,136,153,117,229,124,204,16,135,39,197,131,82, - 232,138,168,95,250,85,171,86,69,61,186,67,42,250,16,66,196,188,56,5, - 182,38,19,185,40,6,219,199,15,94,75,128,188,252,60,142,186,248,72,191, - 197,175,26,207,59,251,26,87,96,43,50,196,133,131,79,219,254,147,95,223, - 93,48,226,184,97,205,55,173,184,94,117,244,36,236,192,40,76,183,246,152, - 84,87,87,223,93,85,85,117,87,28,177,230,19,166,129,98,17,112,48,9, - 199,92,185,173,102,6,107,24,200,209,103,183,242,254,191,44,129,198,55,49, - 160,66,131,127,87,135,247,236,12,60,118,181,205,255,14,176,30,152,175,181, - 94,175,181,46,211,90,59,195,94,55,48,99,239,122,220,111,77,77,205,250, - 154,154,154,178,154,154,154,30,247,171,181,190,20,211,27,113,29,112,38,240, - 149,214,250,180,4,229,237,146,149,43,87,158,191,112,225,194,30,133,177,4, - 98,220,142,3,42,49,63,47,129,199,74,224,56,137,129,19,226,33,54,184, - 4,201,170,13,174,235,21,154,149,246,124,144,137,144,146,152,185,223,143,253, - 147,255,134,165,63,183,92,240,200,247,141,127,253,108,126,91,148,38,59,143, - 59,123,76,115,158,195,86,240,240,145,127,108,136,51,174,21,115,235,171,171, - 207,153,159,128,88,177,86,29,29,185,181,195,243,72,111,188,213,148,2,77, - 140,162,9,111,219,95,248,42,239,230,40,247,16,79,1,167,0,131,181,214, - 253,163,184,220,43,165,212,95,180,214,47,3,119,99,6,42,239,1,158,210, - 90,223,170,148,170,3,90,129,225,192,110,160,127,199,126,107,106,106,250,71, - 9,17,80,149,149,149,127,169,169,169,233,212,111,77,77,205,173,149,149,149, - 113,251,13,151,87,107,125,61,166,253,243,61,224,92,204,45,204,115,49,131, - 169,139,18,144,183,75,246,239,223,191,224,203,47,191,76,164,105,4,237,185, - 37,59,109,235,27,192,177,192,218,203,231,199,53,5,10,7,56,98,131,75, - 178,143,12,217,224,98,94,248,31,26,243,104,91,208,253,63,86,184,64,120, - 120,192,67,99,30,77,89,234,150,71,143,125,204,247,243,119,175,180,12,24, - 209,95,77,252,206,79,10,22,125,240,76,168,210,233,53,247,254,174,246,212, - 75,198,243,135,113,127,110,72,160,43,47,145,137,126,59,81,85,85,117,83, - 2,253,140,4,190,32,254,141,91,196,149,81,41,245,243,78,45,6,141,48, - 31,191,202,187,57,90,7,74,169,217,90,235,89,192,209,152,129,213,255,211, - 225,117,29,120,220,2,252,84,107,61,23,184,28,51,247,227,19,192,167,192, - 157,129,230,255,1,38,3,84,86,86,206,174,169,169,137,217,111,48,153,114, - 101,101,229,22,224,167,53,53,53,9,245,27,77,94,173,245,253,152,202,254, - 13,224,34,165,84,208,62,183,64,107,125,73,34,253,198,195,231,243,227,114, - 37,114,111,210,142,84,5,16,82,133,216,224,18,36,203,54,56,43,102,138, - 162,78,220,252,197,13,253,46,30,242,189,189,137,56,153,92,56,248,52,94, - 218,182,184,244,161,49,143,214,245,84,144,142,228,21,228,217,191,127,223,164, - 166,89,63,124,206,10,132,150,196,39,94,112,84,63,155,221,230,197,188,235, - 143,199,106,204,11,102,66,246,153,46,152,28,232,235,136,56,237,194,183,221, - 162,151,102,111,220,7,158,38,226,44,28,103,97,102,220,191,71,107,253,137, - 82,106,71,172,134,74,169,133,90,235,255,0,15,3,193,43,248,29,129,199, - 175,99,245,91,83,83,243,73,101,101,101,204,126,43,43,43,23,214,212,212, - 116,183,223,201,90,235,243,48,51,133,252,11,152,170,148,138,248,127,74,84, - 222,255,188,247,137,238,106,225,173,181,102,216,176,195,248,207,123,203,18,216, - 57,208,176,235,242,248,205,4,33,65,36,14,174,119,16,85,185,1,60,52, - 230,209,125,153,10,244,142,198,31,198,253,185,97,250,251,215,168,127,46,125, - 188,40,252,124,158,195,90,255,200,81,127,138,174,60,58,243,56,230,197,54, - 89,5,247,163,64,95,143,133,159,212,90,95,3,84,3,40,165,218,136,116, - 48,9,126,81,109,124,155,227,248,138,143,25,69,19,124,175,129,165,11,10, - 25,115,193,41,124,195,187,49,198,251,45,166,194,56,26,152,161,181,254,121, - 180,188,146,65,2,249,30,87,4,100,218,20,56,253,161,82,234,166,250,249, - 35,195,189,67,35,250,173,169,169,249,121,180,188,146,65,2,249,41,87,0, - 212,212,212,132,250,173,172,172,236,216,239,175,48,179,180,220,132,185,13,249, - 87,224,26,165,84,212,255,167,68,228,109,107,243,197,77,148,224,202,47,192, - 235,141,255,85,200,245,164,231,66,239,67,108,112,9,146,109,27,156,82,74, - 233,176,43,192,208,97,67,141,45,155,182,68,189,232,189,87,59,63,212,46, - 213,1,222,209,152,121,226,227,186,245,149,214,61,87,244,63,47,116,206,154, - 215,45,95,150,106,224,177,234,234,234,83,227,133,10,196,236,160,186,250,84, - 204,12,27,213,132,41,184,64,96,183,13,248,11,166,237,166,99,92,215,248, - 192,99,27,31,253,115,49,134,1,238,31,156,133,139,235,105,245,156,141,83, - 191,193,104,181,159,85,157,157,43,148,82,95,105,173,39,98,6,69,95,13, - 52,104,173,239,86,74,69,141,96,214,90,91,48,203,250,125,8,28,140,25, - 83,118,125,199,118,149,149,149,95,213,212,212,68,244,91,83,83,115,119,101, - 101,101,212,126,107,106,106,18,234,87,41,181,53,144,34,236,92,76,69,247, - 23,192,129,89,69,160,199,242,10,66,174,34,54,184,36,251,200,144,13,46, - 152,121,35,164,184,42,14,173,208,91,54,109,225,230,47,110,176,249,188,126, - 159,187,222,99,88,173,150,162,203,70,77,138,168,58,251,94,237,252,131,94, - 216,244,118,3,94,237,53,236,134,82,74,89,31,26,243,104,236,202,180,61, - 224,148,83,79,81,171,126,191,206,194,127,181,159,123,228,168,153,137,174,222, - 168,170,170,106,173,174,174,254,5,102,80,111,151,153,76,186,224,57,224,23, - 85,85,85,173,151,68,58,31,216,194,254,254,88,107,189,57,236,249,160,192, - 138,206,228,248,31,222,192,87,252,149,111,0,120,151,126,63,4,63,175,179, - 150,179,99,13,170,148,122,51,144,160,121,38,112,51,112,179,214,58,152,233, - 35,124,15,220,138,233,161,120,79,224,249,78,204,140,41,31,70,235,183,178, - 178,242,205,154,154,154,136,126,107,106,106,18,238,183,178,178,50,106,191,152, - 91,146,96,122,76,126,10,144,10,121,5,33,23,17,27,92,130,228,90,28, - 156,161,140,160,194,179,175,123,239,27,247,198,21,91,109,103,252,159,19,107, - 231,124,250,58,151,143,107,191,30,191,184,249,237,218,175,158,222,160,53,90, - 191,242,167,87,53,113,82,102,245,84,22,141,142,88,178,189,87,59,191,224, - 164,210,201,157,74,176,196,162,170,170,234,209,234,234,234,179,170,171,171,87, - 2,99,170,170,170,18,94,121,86,87,87,107,96,97,140,52,93,141,64,65, - 224,111,133,153,91,209,13,156,210,201,102,54,85,69,203,71,25,153,93,37, - 138,231,158,82,234,105,173,181,27,211,9,99,36,230,138,7,32,120,35,161, - 137,180,251,253,19,120,92,41,181,36,224,109,25,117,111,174,178,178,242,233, - 154,154,154,110,247,91,89,89,185,36,224,109,217,169,223,192,88,115,181,214, - 151,99,122,157,166,76,94,65,200,53,196,6,215,59,136,185,26,122,104,204, - 163,141,0,135,76,30,217,242,135,113,51,53,192,229,181,237,10,78,41,101, - 212,45,223,239,123,103,241,59,233,188,40,105,34,19,0,251,48,183,190,18, - 86,112,0,85,85,85,103,5,170,9,148,87,87,87,95,22,39,225,50,193, - 106,2,192,130,88,213,4,148,82,133,90,235,121,152,223,245,6,165,212,143, - 186,35,83,162,40,165,230,104,173,87,96,198,225,141,193,84,74,142,176,38, - 219,48,87,98,173,192,43,74,169,150,192,251,186,252,127,169,172,172,156,83, - 83,83,147,112,191,149,149,149,45,129,247,117,217,111,170,228,245,107,141,145, - 34,219,89,47,168,204,40,244,50,196,6,151,32,89,182,193,25,116,254,253, - 235,83,38,156,106,245,227,83,107,234,214,123,189,110,175,49,250,140,35,245, - 177,23,29,25,126,145,194,239,245,187,180,38,84,221,121,200,153,195,141,173, - 111,174,79,217,181,100,194,132,9,202,143,182,251,181,47,124,5,103,233,105, - 33,217,170,170,170,201,129,122,112,127,175,174,174,190,31,179,30,220,139,192, - 98,160,144,246,122,112,23,0,229,116,81,15,46,24,75,21,94,218,165,126, - 254,200,148,184,233,181,199,105,181,211,85,9,25,204,0,233,103,195,222,159, - 112,191,29,74,222,164,172,223,84,200,123,108,93,101,87,125,8,66,86,233, - 179,54,184,160,63,134,214,186,203,122,112,225,109,123,34,71,182,114,81,46, - 89,178,68,159,50,225,20,255,94,79,29,101,142,82,246,236,216,231,219,250, - 249,215,250,160,182,18,15,151,134,170,53,15,123,100,220,204,253,167,76,56, - 197,24,117,194,24,64,171,93,59,247,90,73,204,117,191,59,114,208,212,214, - 236,1,138,3,125,231,255,87,217,148,189,61,237,51,160,176,230,132,85,244, - 126,21,115,149,88,143,233,16,241,30,112,109,87,21,189,37,150,74,16,132, - 62,107,131,211,90,227,247,251,81,74,133,20,89,199,215,131,213,188,19,81, - 112,185,102,131,3,120,119,201,187,254,35,190,51,86,185,189,30,246,126,190, - 67,7,206,233,147,74,223,221,23,104,178,33,216,46,240,92,147,66,229,22, - 38,135,231,136,239,140,85,211,206,188,165,225,235,165,107,53,237,182,156,132, - 136,190,106,129,24,85,1,10,128,137,192,196,75,36,147,133,32,8,93,208, - 103,109,112,62,159,47,164,228,130,132,43,178,96,57,143,160,146,203,113,98, - 10,184,242,131,229,57,97,240,239,169,28,178,210,18,4,33,93,244,89,27, - 92,115,115,51,74,41,148,82,24,70,123,30,193,240,173,75,104,87,132,241, - 72,133,13,46,9,50,94,45,64,16,4,161,183,147,54,27,92,170,232,169, - 13,110,251,246,237,161,12,11,74,169,208,106,174,163,50,11,47,204,216,19, - 57,50,52,39,9,199,148,9,130,32,8,38,41,179,193,197,122,79,178,244, - 212,6,247,245,215,29,211,240,129,199,19,219,52,228,112,56,98,190,6,61, - 83,100,177,148,98,15,228,136,230,69,41,8,130,32,116,65,202,108,112,113, - 92,142,99,82,18,191,73,247,250,91,118,54,13,203,160,106,120,138,59,238, - 129,28,201,202,16,219,249,34,125,100,99,76,65,16,132,116,144,18,27,92, - 42,28,5,246,191,52,34,234,249,238,216,224,210,41,71,119,108,112,226,56, - 33,8,130,144,125,250,172,13,46,83,114,100,99,78,4,65,16,132,248,164, - 45,14,46,85,164,34,143,100,42,16,69,38,8,130,208,187,72,91,28,156, - 32,8,130,32,100,147,62,27,7,151,106,178,28,7,39,8,130,32,116,19, - 177,193,37,41,135,108,93,10,130,32,228,38,98,131,75,16,81,100,130,32, - 8,189,11,177,193,9,130,32,8,125,18,177,193,37,136,216,224,4,65,16, - 122,23,98,131,75,82,14,217,186,20,4,65,200,77,196,6,151,32,162,200, - 4,65,16,122,23,98,131,19,4,65,16,250,36,98,131,75,16,177,193,9, - 130,32,244,46,196,6,151,164,28,178,117,41,8,130,144,155,136,13,46,65, - 68,145,9,130,32,244,46,196,6,39,8,130,32,244,73,196,6,151,32,98, - 131,19,4,65,232,93,136,13,46,73,57,100,235,82,16,4,33,55,17,27, - 92,130,136,34,19,4,65,232,93,136,13,78,16,4,65,232,147,136,13,46, - 65,196,6,39,8,130,208,187,200,73,27,156,214,58,244,24,203,246,117,241, - 197,23,71,180,77,55,98,131,19,4,65,232,93,228,164,13,78,107,141,223, - 239,71,41,21,82,100,29,95,247,249,124,248,253,254,140,41,56,81,100,130, - 32,8,189,139,156,180,193,249,124,190,144,146,11,18,174,200,180,214,17,74, - 78,16,4,65,16,58,146,147,54,184,230,230,102,148,82,40,165,48,12,35, - 116,62,124,235,18,218,21,161,32,8,130,32,116,36,39,21,220,246,237,219, - 81,74,1,160,148,10,173,230,58,42,179,224,74,78,16,4,65,16,58,98, - 133,216,54,183,108,241,245,215,95,119,58,231,241,120,98,182,119,56,28,41, - 151,33,150,83,73,166,229,16,4,65,16,122,134,21,160,97,193,168,30,189, - 185,36,165,162,64,201,178,179,105,88,6,85,195,83,220,113,15,228,200,182, - 12,130,32,8,66,114,168,250,249,35,101,143,79,8,81,124,225,218,108,139, - 32,8,130,144,18,172,0,69,147,215,168,84,118,26,84,154,105,236,215,0, - 146,81,204,42,252,253,25,144,183,87,245,43,8,130,208,23,200,180,147,201, - 202,35,142,27,57,102,183,187,22,69,236,107,179,70,211,223,89,202,202,143, - 215,124,1,28,17,181,73,114,36,250,254,149,39,22,21,141,217,239,243,97, - 116,209,200,15,20,91,44,188,95,95,31,75,222,140,83,255,225,159,10,180, - 223,223,191,248,196,27,214,7,207,53,45,127,102,96,91,195,190,218,146,147, - 111,108,203,166,108,130,32,8,153,32,150,130,139,88,225,164,144,198,69,31, - 205,225,141,205,239,178,158,237,49,27,13,103,16,223,63,120,2,3,213,184, - 198,52,200,208,29,26,159,191,235,46,26,63,251,12,95,83,83,204,70,150, - 252,124,10,199,141,99,216,47,126,145,109,121,209,51,71,151,168,233,171,234, - 10,63,122,252,66,32,34,83,181,107,201,131,207,0,207,1,179,245,204,209, - 249,106,250,170,216,31,74,16,4,161,151,19,85,193,57,93,118,127,197,232, - 97,104,127,226,58,78,25,138,13,171,54,225,110,110,233,106,219,108,229,15, - 207,190,198,191,118,235,198,35,199,159,116,68,193,174,230,125,161,112,0,48, - 221,254,7,184,250,241,215,247,86,54,254,109,200,156,21,192,151,137,140,237, - 52,12,125,100,126,126,194,178,6,89,209,212,132,219,239,239,82,222,107,239, - 187,207,191,193,237,62,242,187,165,165,5,117,94,47,150,48,121,125,90,83, - 98,181,242,191,181,181,141,21,175,189,150,176,188,233,68,77,95,85,167,103, - 142,126,233,193,183,246,94,240,167,197,251,34,62,219,208,59,214,157,115,221, - 105,253,206,214,51,71,79,81,211,87,77,201,150,140,130,32,8,153,32,170, - 130,235,63,228,32,94,88,250,36,245,205,141,212,123,155,226,110,39,22,89, - 243,41,114,21,112,214,136,105,108,90,183,181,171,241,170,222,125,227,35,128, - 15,30,95,126,239,9,51,215,61,79,158,97,11,189,216,234,111,99,250,97, - 151,114,168,58,113,197,206,21,187,78,74,244,67,28,108,183,51,247,142,59, - 240,53,52,224,239,194,141,63,136,225,112,96,41,44,100,226,93,119,177,214, - 237,238,82,222,87,246,236,1,248,224,127,238,190,168,157,40,37,0,0,32, - 0,73,68,65,84,251,132,218,127,255,27,101,177,132,94,212,62,31,165,223, - 251,30,51,111,186,105,197,202,166,166,132,229,237,10,173,245,68,96,179,82, - 170,71,233,100,244,204,209,127,190,228,233,45,23,188,191,209,173,238,61,175, - 63,103,140,204,167,188,200,202,142,122,47,111,173,105,226,142,87,119,171,165, - 155,220,23,234,153,163,255,160,166,175,202,173,248,16,65,16,132,20,18,85, - 193,109,90,183,245,147,55,231,191,123,204,177,19,198,242,198,182,247,227,118, - 114,209,224,239,242,230,162,119,217,180,110,235,39,9,142,251,214,130,151,22, - 157,80,62,182,31,187,90,106,67,39,203,237,253,88,240,210,34,128,229,9, - 246,3,192,90,183,251,147,173,255,252,231,49,3,78,63,157,134,79,63,141, - 219,190,112,220,56,118,188,246,26,107,221,238,132,229,221,52,103,206,9,197, - 21,21,248,26,26,66,39,45,133,133,108,154,51,167,219,242,70,67,107,93, - 6,60,14,252,0,248,76,107,125,188,82,170,39,182,178,139,230,125,222,160, - 150,222,82,193,209,67,29,52,79,184,133,22,160,20,184,98,201,131,28,53, - 196,193,177,15,110,0,184,28,16,5,39,8,66,159,37,150,239,196,247,174, - 191,112,6,205,141,110,198,20,85,96,81,70,204,227,136,162,225,88,173,86, - 174,191,112,134,6,190,23,111,192,15,235,94,81,192,29,215,79,153,177,247, - 244,67,142,195,171,125,0,120,181,143,211,15,57,142,235,167,204,216,11,92, - 221,205,207,241,189,147,151,45,195,91,95,143,125,200,16,148,197,18,243,176, - 15,25,130,178,217,56,121,217,178,132,228,253,234,214,91,21,112,199,41,203, - 150,237,45,60,234,40,180,207,148,87,251,124,20,30,117,20,167,44,91,214, - 19,121,35,8,172,218,150,97,42,55,63,176,4,176,116,249,166,174,250,75, - 172,89,74,61,48,5,65,16,114,141,88,10,174,94,25,106,226,181,231,222, - 193,137,67,198,98,83,209,125,81,52,154,163,250,143,224,218,243,238,64,25, - 234,6,96,127,2,99,134,46,172,54,195,134,14,92,142,53,26,91,216,118, - 101,55,169,7,38,94,62,103,14,249,163,71,131,17,219,231,209,89,81,193, - 53,79,62,9,208,109,121,177,90,33,152,220,217,239,55,159,39,129,214,250, - 32,173,245,92,96,33,48,12,248,12,24,175,148,186,65,41,21,127,175,53, - 58,207,93,116,116,161,62,239,201,205,252,227,195,58,106,23,220,139,253,127, - 31,160,118,193,189,252,227,195,58,206,123,114,51,83,142,46,212,192,220,164, - 132,23,4,65,200,113,98,105,2,173,253,250,205,53,203,215,191,249,215,135, - 159,215,39,148,141,193,167,35,179,246,107,52,199,149,28,206,255,123,227,35, - 62,94,242,249,39,218,175,255,20,111,176,203,150,94,174,142,47,62,87,3, - 247,60,250,226,93,101,75,183,126,17,82,158,54,101,101,233,214,47,120,244, - 197,187,202,128,123,0,110,254,226,134,68,87,49,26,120,243,211,198,198,55, - 223,248,251,223,181,179,162,34,180,210,10,199,49,108,24,219,95,121,133,55, - 247,237,251,4,136,43,239,135,199,30,171,156,223,250,150,6,238,89,50,126, - 124,89,243,234,213,40,155,169,132,149,205,70,243,234,213,44,25,63,62,36, - 239,167,19,39,38,188,234,210,90,79,1,86,98,174,218,218,128,219,128,227, - 149,82,159,39,218,71,52,212,244,85,191,156,251,223,67,231,79,159,208,79, - 255,250,149,221,12,187,243,43,172,215,175,102,216,157,95,113,251,43,187,153, - 62,161,159,158,251,223,67,23,168,233,171,174,77,102,28,65,16,132,92,167, - 171,240,46,128,137,127,250,245,211,202,183,221,75,89,94,113,196,11,121,134, - 141,195,138,135,113,253,133,119,37,180,213,7,48,231,152,103,81,74,105,224, - 140,201,83,38,177,194,189,30,171,221,26,58,86,184,215,51,121,202,36,128, - 51,0,30,26,243,104,103,45,21,71,222,107,214,172,81,173,187,118,97,41, - 44,140,124,197,48,200,27,60,56,225,173,73,128,161,87,94,201,144,43,175, - 212,192,25,135,94,126,57,173,187,118,97,228,229,133,142,214,93,187,56,244, - 242,203,67,242,142,91,180,40,174,188,90,235,98,173,245,95,129,23,128,129, - 192,90,224,187,74,169,7,122,104,115,139,236,127,230,104,165,166,175,154,114, - 203,25,101,87,108,189,231,176,215,130,142,176,126,13,91,238,57,236,181,91, - 206,40,187,66,77,95,117,161,158,57,90,18,103,10,130,208,167,137,183,199, - 166,252,126,61,254,103,231,253,122,217,235,223,204,226,31,95,188,138,205,176, - 226,211,126,190,91,126,52,87,126,255,86,148,161,110,208,126,157,200,86,31, - 74,169,49,71,28,51,242,239,117,222,134,145,215,92,125,59,209,194,4,86, - 187,86,50,244,168,193,99,74,108,133,75,87,46,93,243,99,204,85,78,162, - 40,13,227,207,125,245,213,101,239,220,117,23,251,22,45,66,217,108,104,159, - 143,130,209,163,185,250,207,127,134,196,183,38,25,114,229,149,99,78,40,42, - 250,187,219,231,27,249,240,163,143,18,53,76,96,229,74,198,230,231,143,201, - 183,88,150,190,95,95,223,165,188,90,235,114,224,3,224,144,192,169,69,192, - 100,165,84,151,174,156,221,65,77,95,165,1,234,143,189,106,129,246,251,230, - 192,141,155,129,65,0,205,19,110,185,190,173,97,239,78,184,9,53,125,85, - 79,183,64,5,65,16,122,5,241,20,156,214,90,127,186,99,243,238,153,143, - 253,234,239,211,143,251,217,177,124,213,184,133,178,188,98,214,47,217,192,210, - 37,203,19,218,234,11,163,200,231,243,29,243,209,103,175,196,12,246,30,206, - 32,158,62,248,161,130,239,141,251,225,49,64,81,55,250,6,115,171,242,211, - 77,45,45,51,159,253,235,95,167,95,112,226,137,180,237,222,141,165,176,144, - 221,239,190,155,240,214,100,132,188,90,31,243,202,255,253,191,49,131,189,45, - 249,249,220,116,244,209,5,23,205,152,17,87,94,165,212,14,173,245,21,192, - 63,48,149,220,25,192,61,90,235,95,43,165,90,186,33,23,16,39,181,214, - 206,199,81,102,155,208,41,223,250,251,215,25,29,206,9,130,32,244,85,18, - 245,146,184,190,250,129,231,43,207,190,252,244,226,47,141,54,142,41,27,197, - 89,147,127,148,240,86,95,24,94,96,205,113,71,157,59,108,236,137,163,157, - 177,2,189,127,243,254,3,238,34,75,254,166,64,251,158,112,253,237,235,215, - 87,158,63,126,124,177,110,107,195,121,200,33,28,53,127,126,143,229,253,254, - 111,126,51,236,187,165,165,206,152,129,222,47,190,232,118,25,70,66,242,42, - 165,150,104,173,71,3,247,3,211,129,95,2,147,181,214,211,148,82,239,37, - 42,152,36,69,22,4,65,136,67,162,9,118,149,82,199,12,58,100,160,254, - 160,225,101,125,252,105,71,105,101,168,235,186,234,179,27,137,123,239,218,160, - 223,211,192,93,137,200,218,141,126,143,169,112,56,244,87,191,250,149,62,179, - 95,63,13,164,76,222,111,30,126,56,37,242,106,173,39,105,173,183,105,147, - 54,173,245,253,90,235,184,174,164,245,243,71,106,165,148,28,114,200,33,135, - 28,93,28,9,251,185,107,173,63,217,254,205,206,187,127,126,206,237,51,62, - 121,119,69,119,183,250,0,184,249,139,27,108,202,80,190,182,22,175,241,135, - 163,103,198,92,237,220,184,236,58,139,202,83,74,41,149,247,208,152,71,155, - 187,59,78,128,79,54,120,60,119,95,249,196,19,51,222,174,173,237,145,188, - 159,78,156,104,195,48,124,126,143,199,56,102,241,226,152,242,126,114,234,169, - 22,35,47,79,97,24,121,227,22,45,74,88,94,165,212,66,173,245,81,192, - 95,129,11,128,91,129,211,2,171,185,117,221,149,87,16,4,65,104,167,187, - 129,92,119,125,242,238,138,179,129,179,122,50,152,82,184,62,125,121,117,195, - 182,245,59,237,180,111,231,89,119,236,223,173,195,101,89,241,135,213,254,69, - 179,22,105,122,190,69,25,146,247,237,218,218,30,203,139,97,184,222,92,183, - 174,97,157,219,29,33,111,219,238,72,121,159,248,234,43,255,95,183,109,235, - 145,188,74,169,221,90,235,11,49,183,43,239,7,78,0,62,210,90,79,84, - 74,125,220,35,185,5,65,16,132,30,149,203,57,161,167,131,61,120,248,163, - 251,1,134,156,245,173,112,175,193,87,239,191,254,177,219,129,87,131,39,2, - 202,45,85,244,88,222,113,111,188,177,31,224,140,210,210,8,121,31,158,61, - 59,66,222,128,114,235,49,74,41,13,252,73,107,253,50,80,3,20,147,130, - 244,95,130,32,8,7,50,241,226,224,146,226,148,9,167,70,216,147,78,158, - 112,114,30,67,13,133,142,72,67,245,193,130,127,44,218,132,233,62,31,193, - 144,51,135,247,56,93,85,79,56,187,95,63,91,135,231,121,3,243,242,20, - 145,105,179,62,120,98,235,214,168,242,158,94,90,154,148,188,74,169,141,152, - 158,149,231,169,30,120,85,10,130,32,8,237,164,181,224,233,187,75,222,137, - 8,92,254,207,146,255,180,2,108,221,242,117,199,128,230,97,209,222,191,245, - 205,245,221,13,244,78,138,215,247,237,107,235,240,188,21,96,103,107,107,66, - 242,190,93,91,155,180,188,74,169,86,96,83,178,253,8,130,32,28,232,164, - 117,5,215,13,122,91,226,223,222,38,175,32,8,194,1,135,234,134,123,188, - 144,67,72,28,156,32,8,66,215,136,130,19,4,65,232,67,200,205,111,59, - 86,128,162,201,107,18,222,114,11,42,196,149,19,30,176,1,198,73,165,147, - 91,147,17,224,189,218,249,35,128,22,192,126,82,233,228,164,255,103,78,153, - 112,74,254,187,75,222,109,114,191,246,154,2,148,243,156,115,252,113,223,212, - 5,238,215,94,179,3,173,192,80,231,57,231,108,78,86,190,32,193,121,236, - 206,220,11,157,9,206,227,234,227,159,207,182,40,7,52,163,62,186,20,128, - 162,201,107,66,231,62,218,22,191,248,48,192,241,131,199,165,69,166,222,78, - 162,243,7,237,115,40,105,248,34,81,245,243,71,234,158,40,184,113,247,104, - 227,235,165,107,59,173,254,158,153,58,233,137,185,91,247,93,21,126,78,43, - 13,26,84,192,116,101,24,10,155,205,74,158,205,138,82,42,34,93,87,119, - 208,49,74,123,106,109,158,239,212,111,42,214,170,221,16,245,172,66,199,147, - 63,153,189,48,106,49,212,120,10,174,234,71,151,78,179,217,169,9,63,215, - 113,30,149,161,176,90,45,216,172,86,148,138,242,121,19,36,214,60,118,241, - 134,228,233,134,168,249,174,254,149,119,223,255,208,172,104,175,117,84,112,114, - 177,204,44,193,139,112,119,20,220,130,231,230,51,231,137,89,108,88,183,62, - 253,2,246,17,166,76,187,152,115,127,120,62,71,140,63,50,234,235,225,10, - 78,86,112,237,244,216,139,178,163,114,155,59,245,140,137,115,246,52,47,156, - 191,187,158,188,60,83,113,25,74,65,232,194,171,80,74,163,148,129,197,18, - 56,12,163,231,23,101,173,209,58,248,216,46,138,82,16,124,170,117,135,75, - 119,240,121,240,245,148,92,169,99,243,70,131,231,170,31,94,48,225,170,139, - 10,109,147,46,153,253,214,162,68,222,51,227,182,155,71,212,214,109,95,19, - 250,16,193,121,164,243,60,26,134,194,98,49,48,12,163,199,94,47,26,66, - 243,72,216,60,162,104,159,167,142,243,216,97,230,210,61,143,77,205,187,107, - 110,186,238,199,53,249,174,254,35,239,190,255,33,249,245,246,98,126,56,225, - 34,81,108,61,96,222,172,23,152,55,235,5,166,76,187,152,219,30,184,61, - 219,226,244,26,82,18,38,240,204,212,73,79,188,176,223,125,149,205,102,5, - 5,86,139,185,170,176,6,47,190,230,117,25,66,15,42,169,21,7,16,82, - 84,254,142,23,230,224,235,1,197,23,82,118,4,87,118,237,138,177,189,109, - 244,17,180,14,127,140,118,161,143,143,2,94,118,251,23,62,51,117,82,204, - 213,92,144,25,183,221,60,173,177,113,119,141,205,106,206,163,197,48,176,90, - 45,88,140,176,121,12,235,55,248,71,42,230,81,71,159,132,168,243,72,248, - 60,70,180,141,62,130,14,13,18,214,103,55,229,84,64,75,203,190,53,51, - 110,187,57,230,106,78,200,109,38,30,241,93,234,246,213,101,91,140,94,205, - 188,89,47,176,125,243,54,254,56,231,177,108,139,210,43,72,90,193,205,157, - 122,198,196,23,235,61,87,41,101,110,156,89,172,6,249,78,7,86,171,25, - 243,156,204,197,55,17,140,24,23,230,112,34,155,232,176,127,99,189,193,252, - 39,116,1,15,93,228,117,140,139,120,23,40,48,148,226,3,101,92,53,119, - 234,25,243,98,173,228,102,220,118,243,136,166,166,221,53,193,233,178,88,12, - 156,14,59,22,139,25,201,145,238,121,140,165,224,34,219,68,60,11,251,55, - 214,27,2,255,132,41,194,100,231,209,80,141,53,51,110,187,249,67,89,201, - 245,46,126,56,225,34,81,110,41,226,253,197,239,113,255,173,247,202,74,46, - 1,66,10,46,80,9,90,235,153,163,31,1,46,11,156,126,81,77,95,117, - 173,158,57,186,68,77,95,21,245,219,249,98,125,219,194,224,223,202,80,228, - 217,108,88,44,150,180,95,144,67,99,38,48,78,100,147,196,229,138,189,170, - 73,184,139,136,177,23,43,231,194,88,2,52,53,237,14,25,47,148,82,216, - 172,214,192,170,77,230,177,227,216,22,229,94,211,45,1,132,172,178,224,185, - 249,178,45,153,98,230,205,122,161,75,155,156,96,18,10,244,14,40,183,121, - 151,252,109,203,13,150,235,86,149,91,175,91,85,126,201,211,91,126,166,103, - 142,126,41,150,114,123,102,234,164,39,180,233,245,128,97,49,200,179,89,3, - 246,183,204,125,128,116,18,116,128,233,120,24,70,226,71,248,251,192,156,179, - 142,227,204,184,237,230,105,26,204,121,52,12,108,54,43,54,155,69,230,177, - 139,121,156,113,219,205,211,178,252,177,132,4,153,243,132,236,40,167,131,87, - 255,249,114,182,69,200,121,12,128,253,239,63,90,164,103,142,158,246,224,91, - 123,39,191,191,193,173,62,185,165,130,165,183,84,240,254,70,183,122,240,173, - 189,23,232,153,163,167,213,127,248,167,130,142,111,126,121,79,195,85,90,107, - 44,134,129,211,158,135,211,145,151,148,227,72,95,199,176,88,248,178,164,236, - 170,142,231,235,234,182,215,160,53,22,101,96,207,179,97,207,203,236,234,173, - 183,97,24,6,69,69,70,77,252,150,66,118,112,5,14,147,205,27,83,22, - 93,35,132,241,201,251,75,179,45,66,206,99,5,208,126,95,19,112,233,31, - 23,239,83,247,157,215,159,163,135,58,0,184,231,220,254,220,254,202,110,117, - 203,25,101,151,105,191,255,255,1,141,225,111,246,249,53,150,128,131,130,50, - 20,74,69,94,148,109,182,60,242,242,236,248,181,166,173,213,131,215,155,108, - 245,155,220,194,233,202,15,253,109,181,90,177,219,157,104,52,141,13,245,180, - 120,220,157,218,219,172,54,156,206,252,78,231,253,254,118,199,151,104,243,152, - 103,119,224,112,56,65,67,107,171,27,143,199,147,158,15,148,37,236,14,103, - 232,111,171,213,138,213,106,67,107,104,110,106,192,235,237,152,6,20,172,22, - 27,118,187,179,211,121,33,71,176,29,27,241,212,219,214,249,255,80,72,158, - 111,190,218,152,109,17,114,30,43,64,201,201,55,110,6,6,25,10,206,24, - 153,79,243,132,91,0,56,163,238,94,126,60,123,59,106,250,170,179,225,134, - 245,116,176,123,88,12,211,177,196,239,215,120,189,62,172,22,75,68,147,210, - 178,1,92,112,209,84,6,12,26,66,65,65,62,86,171,35,83,159,11,91, - 94,30,54,91,94,198,198,243,120,60,52,53,238,103,235,166,111,248,215,156, - 39,59,41,56,165,20,86,171,13,171,173,115,193,110,35,56,143,90,227,243, - 250,176,24,6,225,243,88,92,92,202,152,163,142,101,200,193,135,82,82,114, - 16,14,71,230,230,209,106,179,97,181,198,45,50,158,50,188,94,47,238,166, - 70,118,236,216,202,235,47,255,147,134,250,218,136,215,21,10,139,213,138,213, - 154,214,60,225,130,32,244,1,130,87,137,65,0,126,13,229,69,86,130,117, - 90,202,139,186,190,136,88,172,1,103,18,5,94,175,15,159,213,23,178,151, - 128,194,176,24,216,29,46,92,249,249,184,242,11,50,170,224,50,141,85,129, - 197,176,96,181,219,240,121,163,21,21,80,49,157,111,44,22,139,233,69,161, - 192,231,243,227,247,251,35,230,81,25,138,188,60,59,14,135,19,135,211,149, - 81,5,151,121,252,248,181,31,179,68,94,52,47,20,37,219,183,185,142,110, - 140,223,70,16,50,64,132,6,51,20,236,168,247,82,26,120,190,163,190,235, - 45,69,115,229,161,64,131,207,239,199,235,243,99,181,234,192,197,71,83,183, - 111,15,175,206,127,22,139,197,138,215,235,197,239,75,126,139,178,165,197,131, - 47,5,253,4,241,121,189,180,180,244,108,203,207,221,220,20,250,219,26,92, - 85,40,3,111,91,231,236,101,202,80,24,49,20,156,10,172,224,130,243,232, - 243,249,177,88,140,208,60,214,215,239,103,229,231,75,89,183,106,5,110,183, - 155,84,164,18,105,109,109,193,239,79,93,53,34,159,207,71,107,107,207,74, - 216,133,175,118,173,86,43,86,91,30,74,41,218,90,163,205,163,105,203,236, - 51,30,56,125,17,239,178,136,167,21,135,13,23,47,202,52,48,101,218,197, - 217,22,33,231,177,2,52,45,127,230,48,215,146,7,255,56,244,142,117,231, - 188,181,166,137,43,150,60,8,192,191,214,52,49,164,216,202,150,123,14,123, - 173,121,194,45,63,201,31,251,147,136,55,27,134,129,246,7,226,161,180,198, - 239,247,71,184,126,123,220,205,108,252,122,13,7,2,94,175,183,75,27,163, - 213,98,141,185,213,103,40,21,114,165,215,104,252,29,226,196,60,205,77,108, - 11,83,166,125,153,120,243,104,177,88,177,88,100,123,178,55,113,249,213,211, - 184,247,198,187,179,45,70,159,227,220,31,158,159,109,17,114,30,3,160,173, - 97,239,78,224,249,235,78,235,167,239,120,117,55,159,109,241,240,217,22,15, - 119,188,186,155,235,78,235,167,129,231,218,26,246,213,118,124,243,164,2,251, - 147,225,86,57,51,67,133,78,40,104,248,64,194,106,181,226,116,229,99,179, - 229,49,100,227,186,39,59,190,238,114,29,84,217,113,30,145,121,236,132,197, - 98,193,238,112,98,179,218,248,248,131,229,149,217,150,71,72,140,11,46,155, - 76,197,97,195,179,45,70,159,98,202,180,139,37,6,46,1,12,128,146,147, - 111,106,80,211,87,205,186,229,140,178,5,39,86,56,245,177,15,110,224,216, - 7,55,112,98,133,147,91,206,40,155,175,166,175,154,93,114,242,141,157,92, - 161,126,50,123,225,213,134,97,132,210,69,5,179,153,8,237,88,173,54,242, - 11,138,112,186,242,81,134,65,180,116,93,119,223,255,208,44,67,5,230,145, - 158,39,159,238,203,88,44,86,156,174,2,211,155,212,80,84,63,251,188,4, - 87,245,34,254,185,228,69,74,250,149,100,91,140,62,193,137,167,157,36,89, - 76,18,36,60,147,137,67,77,95,117,161,158,57,250,207,192,37,152,134,158, - 57,106,250,170,95,232,153,163,243,213,244,85,81,247,200,46,204,183,76,122, - 217,173,22,6,3,148,59,6,228,66,98,105,160,178,65,187,140,93,43,148, - 240,4,206,161,115,134,153,4,89,133,41,166,136,126,149,233,84,226,112,56, - 177,59,156,40,101,48,98,227,170,73,177,198,112,58,203,70,182,180,236,91, - 99,4,242,79,182,223,48,132,205,99,154,147,26,247,148,118,25,123,50,143, - 193,155,163,40,243,104,158,192,176,88,176,231,217,201,179,59,64,41,62,254, - 96,185,212,4,233,133,44,90,249,191,146,108,57,73,36,217,114,247,8,41, - 56,53,125,149,39,240,120,45,112,109,120,163,88,202,13,224,146,217,111,45, - 122,102,234,164,39,223,195,114,149,153,221,222,18,114,209,55,12,3,191,95, - 227,243,122,241,249,124,161,45,204,8,194,236,77,230,5,176,227,21,208,244, - 78,140,112,208,8,79,148,220,222,44,44,17,112,215,74,53,164,60,12,3, - 67,25,157,94,11,253,109,40,12,101,160,12,3,237,55,189,251,180,14,86, - 68,176,96,24,6,134,97,129,128,220,193,213,87,80,193,25,129,36,201,160, - 24,178,113,237,147,93,85,20,184,251,254,135,214,206,184,237,230,74,69,99, - 141,50,148,233,145,105,51,195,10,12,165,240,107,240,123,189,248,252,254,152, - 243,24,57,25,157,231,209,48,44,145,30,136,93,206,99,240,124,23,243,24, - 72,154,77,188,121,84,152,177,125,129,121,212,218,180,213,42,101,58,222,24, - 74,161,2,243,104,202,20,156,71,115,20,195,48,223,11,240,241,7,203,43, - 171,159,125,94,242,80,246,82,254,185,228,69,41,151,211,3,226,149,203,17, - 162,147,18,107,253,79,102,47,188,122,238,212,51,230,189,99,43,88,152,239, - 42,160,184,164,31,78,87,126,64,193,249,241,182,181,209,230,109,139,240,218, - 11,37,49,14,58,166,152,55,235,1,7,11,211,85,94,161,48,172,214,80, - 124,157,121,241,237,66,129,133,202,225,232,192,197,50,162,132,65,136,142,138, - 200,188,142,6,211,71,133,187,160,183,183,107,47,203,99,10,27,220,82,68, - 129,223,239,55,149,184,223,23,186,64,135,51,98,227,170,132,202,229,220,125, - 255,67,179,102,220,118,243,135,121,214,150,53,78,135,139,130,162,98,236,14, - 103,104,30,125,1,7,12,191,238,80,195,53,214,60,98,158,55,67,54,44, - 102,56,2,17,149,112,162,39,132,236,198,60,18,84,68,161,237,233,246,121, - 12,47,121,16,92,141,182,219,104,195,230,49,208,183,95,251,241,123,125,248, - 180,47,170,163,232,199,31,44,31,25,79,185,117,167,72,164,144,29,46,184, - 108,50,23,92,54,57,244,92,106,248,69,71,190,203,201,211,227,130,167,177, - 222,243,204,212,73,79,52,143,63,241,42,51,160,89,5,74,177,248,59,213, - 109,11,161,219,149,86,208,45,222,31,88,165,180,159,83,248,253,61,43,204, - 221,190,18,136,219,178,189,132,79,135,173,193,88,4,149,128,223,239,167,181, - 165,165,83,8,195,144,141,107,123,92,240,116,198,109,55,79,27,117,120,69, - 141,25,208,28,62,143,93,36,47,14,206,99,240,86,64,103,103,30,67,91, - 141,221,156,71,173,253,180,181,182,210,218,218,138,207,223,62,143,129,85,91, - 151,5,79,5,65,48,145,130,167,237,164,92,193,9,137,33,243,152,26,234, - 231,143,212,242,131,22,4,33,26,74,238,128,133,222,142,40,56,65,16,162, - 33,10,78,16,4,65,136,74,111,191,121,180,2,20,29,47,153,33,178,73, - 253,71,166,189,169,104,242,129,145,245,37,87,169,159,111,70,31,20,77,94, - 195,233,167,159,78,75,75,207,82,143,165,11,155,205,182,46,213,125,182,181, - 181,29,150,234,62,123,138,221,110,7,96,254,117,91,129,222,127,113,237,237, - 236,127,105,68,182,69,72,154,118,205,54,248,139,44,138,113,0,179,109,76, - 226,109,15,205,131,179,10,97,82,33,92,184,49,109,34,245,57,190,28,5, - 171,61,176,184,17,230,212,194,158,248,57,56,181,214,12,24,48,32,148,216, - 58,71,98,57,115,70,25,165,138,160,199,178,199,227,193,237,118,247,185,146, - 90,66,118,145,165,91,111,224,96,27,252,235,80,24,150,185,242,63,125,138, - 18,11,124,39,223,60,110,28,0,15,239,130,153,123,186,126,75,73,9,14, - 135,35,162,44,79,172,106,16,66,247,209,90,227,243,181,223,104,20,20,152, - 245,148,69,193,9,169,68,20,92,174,115,106,62,60,127,104,182,165,232,59, - 216,20,252,106,160,121,116,177,107,17,84,110,193,152,62,139,197,18,186,8, - 11,201,17,140,43,109,108,108,196,231,243,133,194,130,202,203,203,217,178,101, - 75,182,197,19,250,16,162,224,114,153,177,142,206,202,77,182,146,187,79,112, - 206,58,110,7,111,27,19,119,62,13,195,160,184,184,56,226,162,220,211,88, - 66,193,196,48,12,10,10,10,40,44,44,68,107,205,254,253,251,35,86,115, - 130,144,42,68,193,229,42,22,224,245,176,12,236,7,111,4,223,129,81,50, - 39,109,68,83,116,35,237,176,166,179,51,137,153,146,173,189,72,109,99,99, - 163,153,69,38,44,9,129,208,51,148,82,236,223,191,31,171,213,74,65,65, - 1,22,139,69,110,26,132,180,96,196,111,34,100,133,239,22,132,138,122,170, - 67,247,138,114,75,37,225,171,182,31,149,198,108,22,92,105,104,173,241,134, - 229,83,21,146,35,104,127,243,122,189,104,173,41,40,40,8,228,108,21,132, - 212,34,223,170,92,229,87,3,67,127,234,214,29,89,20,164,143,115,106,126, - 148,147,230,198,70,208,161,68,182,37,211,131,207,231,163,190,190,30,64,156, - 119,132,180,32,10,46,87,25,109,186,167,139,205,45,77,4,231,53,154,103, - 106,222,208,136,167,178,45,41,8,189,19,81,112,185,134,237,212,108,75,32, - 8,130,208,39,16,5,151,107,232,70,243,209,44,207,39,164,155,77,173,157, - 207,233,200,185,143,44,161,36,164,18,177,189,9,233,68,190,93,185,134,119, - 153,249,184,56,160,232,182,141,65,229,149,131,178,101,79,166,190,72,208,147, - 242,157,40,206,59,109,166,205,51,184,45,41,78,16,233,33,60,182,80,182, - 128,133,116,32,191,218,92,229,239,251,218,171,147,111,44,195,90,114,34,88, - 162,57,68,8,73,241,108,109,204,151,252,126,63,141,141,141,40,165,176,90, - 173,146,201,36,69,4,195,47,130,129,244,226,196,35,164,11,137,131,203,85, - 54,183,193,111,119,194,140,114,0,188,95,236,37,111,252,121,180,238,126,69, - 66,6,146,33,60,6,238,143,187,163,198,192,65,123,182,141,96,104,64,48, - 92,32,152,125,35,90,251,222,76,100,97,220,244,18,12,191,232,56,199,130, - 144,106,68,193,229,50,79,238,53,243,40,94,223,31,128,214,101,43,128,67, - 205,215,196,187,50,113,162,37,180,126,190,22,30,216,21,247,173,126,191,159, - 253,251,247,135,182,211,130,138,174,35,162,224,186,79,67,67,67,40,85,151, - 32,164,3,81,112,185,206,3,187,96,93,11,220,50,64,146,45,167,138,223, - 237,140,155,108,57,72,112,133,17,84,116,177,16,5,215,253,241,194,195,47, - 10,10,10,216,188,121,115,175,159,71,33,183,16,5,215,27,152,183,223,60, - 46,41,129,51,11,205,28,149,66,247,248,160,169,91,229,114,106,107,107,113, - 58,157,148,151,151,103,64,56,97,199,142,29,216,237,118,106,107,99,219,68, - 5,161,187,180,43,184,238,212,37,19,178,195,220,58,243,16,186,71,15,182, - 115,91,91,91,177,217,108,146,221,62,131,52,53,53,137,45,78,72,41,170, - 126,254,72,249,70,9,130,32,8,157,232,237,85,213,101,139,82,16,122,25, - 189,253,162,35,8,153,194,10,112,254,163,131,178,45,71,82,188,124,195,118, - 160,239,124,142,162,201,107,178,44,73,114,212,207,31,9,100,246,115,28,104, - 99,10,130,16,31,43,192,226,57,187,179,45,71,114,124,100,62,164,228,115, - 108,106,133,247,154,96,185,1,235,234,225,155,22,216,215,6,158,128,43,179, - 195,128,126,54,56,196,14,223,178,192,209,78,56,41,63,53,30,142,31,37, - 223,69,59,21,192,4,224,88,96,52,102,120,65,127,12,163,16,0,191,191, - 1,216,13,108,4,86,1,75,129,37,192,134,84,10,145,121,30,28,220,245, - 235,6,224,80,176,182,133,195,214,30,11,91,183,130,199,3,46,23,12,25, - 194,186,81,31,195,240,60,240,104,72,153,247,122,57,48,5,56,13,24,11, - 12,5,156,128,27,216,2,44,7,22,3,243,0,169,28,33,8,169,66,182, - 40,1,182,181,153,206,27,175,238,135,47,163,7,254,134,104,246,67,115,11, - 108,105,129,255,0,53,1,175,175,195,237,112,110,177,233,233,56,56,91,105, - 181,134,2,211,128,139,129,241,81,91,180,135,28,21,6,142,225,192,233,97, - 45,150,1,47,0,179,48,47,190,189,140,169,177,235,187,81,239,51,255,159, - 239,241,64,93,29,235,120,35,242,245,207,63,135,215,128,129,3,225,70,11, - 76,41,6,87,23,201,126,62,242,198,17,102,52,112,43,112,69,140,215,243, - 129,145,129,227,7,192,99,192,63,128,7,48,111,58,4,65,72,134,3,59, - 85,215,218,22,248,229,86,56,118,45,60,184,43,190,114,235,138,47,91,204, - 62,142,93,107,246,185,54,137,190,186,205,225,192,211,192,102,224,62,98,41, - 183,196,24,31,232,99,115,160,207,195,147,150,46,235,248,49,21,219,168,213, - 112,231,14,168,139,227,137,186,115,39,220,178,13,190,189,10,22,53,244,112, - 37,247,43,224,75,98,43,183,88,92,17,120,223,175,122,50,168,32,8,97, - 28,152,43,56,175,134,123,118,194,83,123,211,211,255,243,117,230,113,101,25, - 220,49,16,172,233,10,94,181,2,247,3,55,166,169,255,255,14,28,191,7, - 110,3,226,173,88,114,140,84,100,123,249,241,166,200,231,9,133,211,204,2, - 166,38,57,240,125,152,55,23,211,146,236,71,16,14,92,14,188,21,220,226, - 70,56,245,171,244,41,183,112,158,218,107,142,21,172,12,144,82,38,1,95, - 144,62,229,22,206,141,129,177,38,101,96,172,20,50,116,104,252,54,41,231, - 57,146,87,110,65,166,6,250,19,4,161,39,28,88,10,238,47,123,224,242, - 111,96,99,148,26,96,233,98,99,171,57,230,95,18,75,13,149,24,55,1, - 111,0,35,82,216,103,60,70,4,198,188,41,131,99,38,137,39,211,53,245, - 238,1,46,77,113,159,151,6,250,21,4,161,187,196,222,162,204,213,100,190, - 221,205,184,146,43,159,227,158,157,230,17,164,199,153,99,30,34,187,74,230, - 33,96,32,112,115,22,101,72,128,63,239,129,61,169,188,169,8,48,187,54, - 134,35,203,201,192,237,169,31,15,2,253,190,142,233,213,36,8,66,162,28, - 88,43,184,94,207,239,201,141,21,212,77,152,178,228,40,94,13,247,237,140, - 223,174,39,220,185,47,198,11,233,118,10,17,167,19,65,232,46,7,166,147, - 73,175,228,215,192,47,179,45,68,24,191,4,246,98,58,67,228,16,53,251, - 160,53,141,217,231,60,30,115,21,7,48,162,48,112,114,44,240,253,244,141, - 9,129,254,199,2,153,244,206,21,132,222,77,223,94,193,189,86,159,109,9, - 98,211,45,217,46,4,238,77,151,36,73,112,47,166,108,57,68,158,130,71, - 210,108,123,251,189,207,12,22,15,145,169,57,200,177,185,22,132,28,167,239, - 42,184,125,62,184,109,91,182,165,136,205,109,219,76,25,227,82,134,25,0, - 156,171,60,134,41,99,142,176,186,37,126,156,91,178,236,220,9,203,221,97, - 39,78,73,239,120,25,31,71,16,250,6,125,87,193,221,179,35,161,186,95, - 89,99,143,207,148,49,46,15,0,185,156,99,115,16,166,140,185,193,240,213, - 135,102,100,156,131,215,84,132,61,27,157,145,49,51,55,142,32,244,13,250, - 166,130,251,160,201,12,180,206,117,158,175,51,101,141,201,41,192,79,51,37, - 77,18,252,148,92,89,93,184,246,237,202,200,56,69,117,225,121,79,251,103, - 100,204,204,141,35,8,125,131,190,169,224,82,26,115,150,102,186,148,53,23, - 60,38,19,37,55,100,45,48,82,150,33,185,75,10,85,14,239,14,8,130, - 0,244,69,5,183,220,13,111,165,35,115,72,154,120,171,177,131,61,39,200, - 56,224,252,76,75,147,4,231,99,202,156,93,26,180,37,35,227,52,250,195, - 127,58,153,170,198,209,203,171,126,8,66,134,233,123,10,238,133,94,176,53, - 217,145,168,50,87,102,92,140,228,201,190,204,245,37,153,217,198,107,238,55, - 32,236,89,166,50,255,75,133,1,65,232,14,125,79,193,189,154,195,161,1, - 177,136,42,243,69,25,23,35,121,178,47,243,230,145,153,169,103,183,126,212, - 198,176,103,239,102,100,204,204,141,35,8,125,131,190,165,224,150,185,97,71, - 47,203,120,15,166,204,43,194,189,242,142,7,14,206,150,52,73,112,48,166, - 236,89,100,172,211,172,231,150,78,74,74,96,148,61,236,196,75,233,29,47, - 227,227,8,66,223,160,111,41,184,143,186,242,72,204,113,62,218,31,246,36, - 55,60,18,123,70,150,101,247,104,179,88,105,186,112,56,224,151,142,14,217, - 82,150,3,255,147,190,49,33,208,255,242,52,143,33,8,125,139,190,165,224, - 150,103,58,123,124,10,89,209,22,246,36,251,206,26,61,39,203,178,79,45, - 53,143,95,167,105,21,247,219,126,80,85,6,149,253,58,188,240,187,244,140, - 151,177,254,5,161,239,209,183,20,220,250,94,156,167,239,171,240,21,220,200, - 172,137,145,60,57,34,251,181,7,193,65,7,165,190,223,168,149,4,192,204, - 244,159,174,116,106,247,34,149,4,4,161,251,244,45,5,183,173,45,126,155, - 92,101,107,120,60,92,54,10,117,166,138,28,146,221,225,200,240,128,119,0, - 207,167,184,207,231,3,253,10,130,208,93,250,150,130,171,235,197,193,183,117, - 225,43,184,88,171,132,222,64,14,201,238,142,22,95,152,110,46,3,102,167, - 168,175,217,129,254,4,65,232,9,125,171,92,78,47,116,160,12,209,26,190, - 250,180,199,108,150,251,228,144,236,43,202,129,114,240,99,198,26,222,176,181, - 251,125,252,125,24,76,44,140,223,46,130,105,192,151,36,87,74,232,215,136, - 221,77,16,146,163,111,41,56,43,189,87,201,229,217,218,255,204,131,214,214, - 44,202,146,4,121,121,93,188,216,227,42,230,81,232,78,165,118,3,184,164, - 4,206,42,132,185,117,102,57,157,174,42,14,12,28,104,122,98,78,41,6, - 87,79,55,57,126,7,204,7,110,5,174,232,198,251,254,129,153,188,90,130, - 186,5,33,89,250,150,130,43,177,228,118,5,129,174,40,41,14,253,217,218, - 186,3,40,207,158,44,73,96,202,30,133,7,7,195,156,90,104,244,131,167, - 27,249,34,173,10,10,2,74,166,209,15,3,172,176,203,11,191,45,135,59, - 163,140,245,183,189,145,207,13,5,254,48,151,254,60,5,119,186,96,181,133, - 225,171,15,197,181,111,23,5,134,159,6,109,161,190,164,191,25,40,62,214, - 106,134,27,204,219,79,151,140,136,183,178,91,5,252,24,184,13,152,2,156, - 134,89,180,116,40,224,4,220,192,22,76,247,255,197,192,60,32,145,10,19, - 130,32,36,66,223,82,112,131,109,189,87,193,13,41,3,130,23,226,45,244, - 86,5,103,202,110,82,63,63,77,30,149,195,2,143,243,139,59,189,84,127, - 68,231,115,81,25,94,8,231,52,2,174,176,147,141,244,36,99,127,98,159, - 243,223,129,163,43,138,3,135,32,8,169,160,111,41,184,225,246,222,27,11, - 247,237,98,32,184,109,182,6,56,54,139,194,36,195,26,0,138,47,92,155, - 101,57,4,65,56,208,233,91,94,148,99,51,237,22,158,66,198,52,135,61, - 249,52,107,98,36,79,111,150,93,16,132,190,68,223,82,112,199,231,103,91, - 130,158,115,76,120,154,177,222,156,84,183,55,203,46,8,66,95,162,111,41, - 184,241,78,40,239,133,187,174,229,86,83,246,16,31,1,155,179,37,77,18, - 108,198,148,93,16,4,33,251,244,45,5,7,112,110,81,182,37,232,62,81, - 101,126,49,227,98,36,79,111,148,89,16,132,190,74,223,83,112,23,151,100, - 91,130,238,19,85,230,154,140,139,145,60,189,81,102,65,16,250,42,125,79, - 193,141,117,194,25,5,217,150,34,113,206,40,48,101,238,196,167,192,203,153, - 150,38,9,94,70,28,76,4,65,200,37,250,158,130,3,248,89,26,178,200, - 167,139,46,101,125,56,99,98,36,79,111,146,85,16,132,3,129,190,169,224, - 190,147,15,151,246,130,173,202,75,75,76,89,99,242,46,240,116,166,164,73, - 130,167,17,239,73,65,16,114,141,190,169,224,0,238,40,135,131,210,88,217, - 57,89,14,178,152,50,198,229,86,96,123,186,165,73,130,237,152,50,10,130, - 32,228,22,125,87,193,245,179,192,253,131,179,45,69,108,238,31,108,202,24, - 151,189,192,207,211,45,77,18,252,28,83,70,65,16,132,220,162,239,42,56, - 128,115,114,56,100,160,91,178,189,4,220,158,46,73,146,224,118,198,178,140, - 255,0,0,32,0,73,68,65,84,76,217,4,65,16,114,143,190,173,224,250, - 20,247,1,143,100,91,136,48,30,33,185,122,103,130,32,8,233,69,20,92, - 175,226,70,114,195,91,241,97,76,89,4,65,16,114,23,81,112,189,142,155, - 3,199,129,58,190,32,8,66,98,196,78,220,152,202,234,203,217,164,227,231, - 88,220,8,191,222,14,27,51,84,50,251,208,60,184,111,16,156,150,202,224, - 243,135,129,21,192,159,128,17,41,236,183,43,214,2,215,1,11,51,52,158, - 32,8,66,114,28,120,43,184,211,10,224,157,111,195,149,101,233,31,235,202, - 50,115,172,148,42,183,32,11,129,49,192,239,211,208,119,71,126,31,24,75, - 148,155,32,8,189,135,3,79,193,1,88,21,220,85,14,139,191,157,158,128, - 240,75,75,204,190,239,42,55,199,74,27,94,224,38,76,229,243,183,52,244, - 255,183,64,223,55,5,198,18,4,65,232,61,244,194,218,50,41,100,132,29, - 30,25,2,55,13,128,185,117,240,234,126,248,178,165,103,125,29,110,135,115, - 139,225,146,18,24,108,75,173,156,113,249,18,248,41,48,3,152,6,92,12, - 140,239,97,95,203,128,23,128,89,192,150,148,72,39,8,130,144,13,14,108, - 5,23,100,176,13,110,232,111,30,155,90,97,217,177,240,201,87,176,118,59, - 124,179,31,246,186,193,237,51,219,58,45,80,230,132,97,5,112,88,9,140, - 63,8,78,30,4,229,95,100,247,51,0,166,66,250,93,224,168,0,38,0, - 199,2,163,129,67,129,254,128,43,208,182,25,216,13,108,4,86,1,75,129, - 37,192,134,76,10,44,8,130,144,54,84,253,252,145,58,219,66,8,125,143, - 226,11,215,102,91,4,65,16,14,112,68,193,9,130,112,192,35,55,100,125, - 19,43,192,196,217,3,178,45,71,4,139,166,238,2,186,41,151,82,160,128, - 22,63,184,3,143,94,13,254,128,254,54,148,233,240,97,87,224,84,96,55, - 64,3,58,65,253,110,40,22,93,190,211,148,235,119,165,88,109,86,62,254, - 248,99,90,90,34,109,118,67,135,14,229,224,131,15,70,135,250,213,129,195, - 129,185,61,104,7,108,40,101,1,13,126,171,194,111,248,104,235,231,34,111, - 223,22,140,214,6,62,248,224,163,196,63,55,80,63,127,36,0,69,147,215, - 116,235,125,201,208,219,198,84,170,103,206,62,251,95,50,195,48,182,141,90, - 128,197,146,195,201,187,15,48,6,126,113,46,0,59,199,188,26,113,222,48, - 12,28,14,7,78,167,19,151,203,133,221,110,143,219,87,195,130,81,105,145, - 81,200,62,86,128,15,170,115,44,89,238,98,243,33,33,185,172,152,138,235, - 51,55,188,215,4,159,52,195,118,13,91,220,176,199,7,193,112,183,60,204, - 12,254,67,44,208,223,1,199,56,225,164,124,56,218,105,42,194,120,78,130, - 197,6,44,8,200,245,225,7,49,155,109,217,178,133,45,91,194,157,51,70, - 2,167,1,39,97,218,194,14,193,180,133,5,47,184,154,72,91,216,251,192, - 126,32,115,138,35,41,30,140,147,208,218,0,28,10,214,182,112,216,218,99, - 97,235,86,240,120,192,229,130,33,67,88,55,234,99,24,158,7,30,13,254, - 84,9,85,14,76,193,156,247,177,192,80,180,118,98,222,249,108,1,150,99, - 126,201,230,1,59,18,234,177,172,172,12,171,85,76,214,185,198,65,7,69, - 214,83,12,222,88,42,165,112,187,221,184,221,238,184,125,200,109,75,223,197, - 252,197,54,167,211,149,61,9,226,201,229,48,224,83,15,220,190,13,62,243, - 64,163,47,246,69,178,21,216,230,51,143,143,91,225,185,122,40,176,192,209, - 14,184,119,48,140,113,128,167,139,43,172,165,187,115,52,2,248,51,112,28, - 80,68,236,136,12,5,12,8,28,199,99,122,65,214,3,31,3,215,98,6, - 88,231,48,83,75,99,191,86,239,51,189,83,239,241,64,93,29,235,120,35, - 242,245,207,63,135,215,128,129,3,225,70,11,76,41,6,87,23,145,43,31, - 197,187,11,25,141,89,186,231,138,24,175,231,99,222,112,140,4,126,0,60, - 6,252,3,120,0,243,230,34,54,109,109,109,248,253,41,211,192,66,146,56, - 3,143,173,173,237,9,27,252,126,63,173,173,109,52,53,121,240,251,53,126, - 127,27,86,171,249,125,114,56,28,230,251,156,206,142,93,209,85,69,70,161, - 119,211,59,111,73,21,208,236,135,187,118,192,83,61,92,125,250,49,47,192, - 239,52,193,41,235,204,160,236,91,7,152,23,216,164,172,146,46,224,183,244, - 60,87,163,1,148,0,103,98,174,226,126,15,220,137,233,245,216,75,240,3, - 47,212,193,13,91,19,107,191,115,39,220,2,220,178,13,254,62,12,206,40, - 236,65,132,230,175,232,89,242,231,43,2,199,175,49,189,79,163,147,151,151, - 39,43,184,28,196,110,183,163,181,198,235,245,209,208,224,102,195,134,45,44, - 94,188,134,165,75,119,176,124,249,22,182,111,111,165,164,4,70,143,46,231, - 164,147,6,113,209,69,227,169,168,168,8,41,60,161,111,211,249,23,107,0, - 133,150,36,47,242,221,64,1,13,93,172,188,130,4,229,178,0,11,234,205, - 116,91,95,247,48,102,45,26,79,237,133,127,55,154,105,181,46,40,2,95, - 130,114,1,230,135,208,192,233,152,171,130,84,238,233,223,8,124,31,179,238, - 218,219,97,99,229,32,131,83,16,42,241,227,77,145,207,19,74,25,55,11, - 152,154,228,192,247,1,135,99,174,160,59,227,114,185,176,217,50,29,223,40, - 196,34,184,241,232,114,185,104,107,243,210,216,216,200,127,222,251,154,249,11, - 86,225,113,219,249,246,136,177,156,252,189,9,244,235,231,162,174,206,195,134, - 13,181,188,253,246,6,222,123,239,109,174,189,246,68,166,76,57,41,164,228, - 26,178,247,49,132,52,211,89,193,109,107,131,239,174,134,194,12,37,57,105, - 240,195,255,126,11,202,227,92,60,194,229,170,245,65,83,26,182,139,190,110, - 129,255,222,4,165,150,196,229,2,76,133,51,13,168,198,52,246,165,154,81, - 192,235,64,21,230,197,60,71,25,58,20,182,100,58,56,252,57,224,210,20, - 245,53,21,243,39,113,89,167,87,154,155,155,101,5,151,35,104,173,67,118, - 179,134,134,6,246,214,54,240,218,107,203,120,121,225,86,138,7,12,225,187, - 103,13,103,96,255,124,242,11,12,90,148,162,212,3,21,163,203,25,55,110, - 16,243,230,173,226,158,135,223,103,251,246,29,252,232,71,167,227,112,56,196, - 6,215,135,233,252,139,245,2,251,125,230,145,41,18,201,2,229,35,51,114, - 53,249,219,149,103,194,67,93,4,60,67,122,205,213,121,129,49,154,129,23, - 211,56,78,18,120,60,25,30,240,30,82,167,220,130,92,10,124,13,220,17, - 113,182,181,181,21,159,207,252,66,232,68,61,111,133,148,18,244,132,213,90, - 135,210,21,236,217,91,203,242,149,223,240,210,191,215,211,98,31,196,193,195, - 202,112,149,185,48,10,44,180,56,1,229,4,167,27,220,224,24,84,66,249, - 184,114,182,123,220,60,253,226,151,140,30,93,206,232,209,21,28,20,115,68, - 161,183,211,59,110,73,45,192,214,182,204,143,187,181,13,134,217,226,40,186, - 99,129,167,201,140,47,150,37,48,214,55,152,153,71,114,136,63,239,129,61, - 123,82,223,239,236,218,24,142,44,39,147,190,42,231,183,99,174,152,255,19, - 58,147,151,103,174,204,91,91,91,105,105,105,161,173,173,13,173,117,143,195, - 15,132,196,8,206,177,205,102,195,110,183,147,151,151,23,225,88,82,87,215, - 200,191,151,172,101,107,91,49,22,187,193,94,195,194,238,214,54,124,30,11, - 46,20,74,153,155,153,30,15,120,60,30,40,117,82,91,226,4,119,5,175, - 189,182,138,209,163,43,178,245,209,132,12,144,251,10,78,5,254,185,114,83, - 188,150,169,231,202,77,176,98,52,168,174,238,216,23,0,197,153,146,40,48, - 214,2,96,72,6,199,140,131,87,195,125,59,211,211,247,157,251,98,40,184, - 95,165,103,188,136,254,207,13,61,115,56,28,180,180,180,240,233,167,159,178, - 98,197,10,54,108,216,32,91,150,25,194,235,245,82,81,81,193,145,71,30, - 201,119,190,243,29,148,106,55,159,60,246,196,83,44,254,210,69,227,65,71, - 82,96,119,176,187,169,133,47,183,214,83,94,210,138,221,97,199,14,120,0, - 143,219,67,173,7,54,108,119,131,195,65,93,41,60,253,218,251,172,90,53, - 143,249,215,101,237,163,9,105,38,247,127,161,121,202,244,198,219,149,193,45, - 211,32,187,124,112,211,86,120,116,8,237,113,107,225,60,14,196,137,3,75, - 11,131,3,99,95,147,133,177,59,80,179,15,90,211,184,101,231,241,152,171, - 56,128,17,133,129,147,99,49,29,111,210,201,247,3,227,152,142,76,117,117, - 117,44,91,182,140,133,11,205,146,65,118,187,29,171,213,138,97,28,152,5, - 57,50,133,223,239,199,98,177,176,121,243,102,54,111,222,140,215,235,229,91, - 223,250,86,200,181,223,230,112,210,96,43,197,82,224,160,160,200,78,94,158, - 129,95,131,219,99,230,120,208,78,240,184,219,87,112,78,7,148,150,58,240, - 0,117,37,21,148,151,187,129,4,189,125,133,94,71,110,43,56,3,88,218, - 12,255,170,203,158,12,255,170,51,87,16,255,213,177,166,219,209,196,142,183, - 202,4,87,0,79,2,159,101,81,6,204,27,144,251,227,7,211,38,197,239, - 125,112,123,248,87,245,194,244,142,23,49,206,243,0,52,53,53,177,126,253, - 122,10,11,11,113,58,157,88,173,86,10,10,10,100,139,50,3,52,52,52, - 224,118,187,241,122,189,108,216,176,129,193,131,219,111,42,11,11,139,41,25, - 50,24,103,169,139,129,37,69,148,150,56,41,113,58,112,56,12,236,14,59, - 225,209,0,165,14,7,102,70,33,15,80,11,21,21,148,150,110,207,244,199, - 17,50,72,110,43,56,47,102,160,176,39,139,70,125,143,54,101,248,78,199, - 112,208,31,211,30,110,154,13,156,1,25,126,153,69,25,128,213,45,80,151, - 230,27,144,157,59,97,121,63,179,130,3,0,167,164,119,188,16,167,16,84, - 112,54,155,141,198,198,70,74,74,74,40,41,41,193,106,181,82,88,88,40, - 43,184,52,227,247,251,41,41,41,161,190,190,158,150,150,22,90,91,27,35, - 210,111,21,21,21,80,154,239,167,184,164,136,129,3,92,148,230,59,40,117, - 58,112,22,59,112,42,133,195,225,192,227,241,224,41,113,226,174,115,227,128, - 128,210,43,197,83,187,157,146,146,52,212,131,20,114,134,220,86,112,245,62, - 248,223,198,108,75,97,202,80,31,190,69,90,12,156,149,45,105,194,56,11, - 184,59,171,18,12,95,125,40,235,73,127,170,183,131,215,84,192,185,193,239, - 194,232,180,143,215,113,156,194,194,66,70,141,26,197,254,253,251,177,219,237, - 20,23,23,99,24,134,172,224,210,140,214,26,151,203,133,211,233,164,177,177, - 129,178,178,67,40,41,105,183,121,231,59,243,40,177,121,40,41,201,163,52, - 191,136,126,165,78,74,138,45,56,149,29,135,211,92,190,57,156,14,60,110, - 15,142,114,160,206,9,181,110,60,165,117,148,108,168,139,154,217,68,232,59, - 228,158,130,11,191,94,124,211,10,235,91,99,54,205,24,235,91,97,75,33, - 16,92,169,84,96,166,123,202,54,35,49,101,105,202,154,4,174,125,187,50, - 50,78,81,221,110,218,87,204,253,51,50,102,248,56,109,109,109,12,29,58, - 148,182,182,182,80,50,95,187,221,46,43,184,52,163,181,166,165,165,5,139, - 197,130,197,98,97,232,208,33,248,124,237,49,176,101,253,74,24,224,220,70, - 126,129,147,146,98,59,165,69,46,138,93,118,156,14,7,202,161,66,27,146, - 78,135,3,183,199,19,120,22,112,60,113,214,82,94,46,94,148,125,153,220, - 83,112,182,48,13,183,40,135,114,12,188,229,135,35,131,79,206,207,166,36, - 29,56,27,179,2,119,118,40,48,50,147,159,177,80,101,193,201,40,12,191, - 223,207,224,193,131,177,219,237,180,180,180,224,118,187,41,44,44,148,21,92, - 154,9,134,9,20,20,20,80,88,88,64,97,97,81,40,30,17,160,172,180, - 152,97,37,59,217,215,180,145,34,103,127,10,157,54,92,78,7,142,34,133, - 67,129,35,232,100,226,0,234,218,13,114,27,86,189,71,69,9,148,150,118, - 145,75,85,232,245,228,158,130,11,79,106,252,126,246,86,38,157,120,191,49, - 76,193,157,154,77,73,58,112,18,217,84,112,13,58,51,121,32,26,253,225, - 43,165,221,100,198,123,117,119,232,47,135,195,129,197,98,33,63,63,63,148, - 116,89,41,37,10,46,205,104,173,67,74,78,41,133,97,24,17,10,110,244, - 200,17,120,189,126,150,126,185,133,134,109,7,49,176,252,104,28,5,126,138, - 93,22,92,1,159,18,167,195,244,170,172,3,240,56,88,181,236,83,74,107, - 87,113,250,73,227,25,55,110,156,89,92,66,232,147,228,158,130,11,191,142, - 173,201,116,102,140,46,88,181,29,24,24,120,50,54,155,146,116,224,240,172, - 142,94,95,210,31,72,127,140,98,115,191,1,64,208,6,183,138,204,40,184, - 246,10,3,146,139,50,119,240,251,253,4,179,208,150,151,15,196,231,243,211, - 218,218,202,138,111,190,96,231,154,22,250,31,127,28,121,46,7,246,66,43, - 78,165,204,213,91,224,82,242,254,251,111,227,217,254,41,39,141,175,96,220, - 184,113,12,26,52,136,54,81,112,125,150,220,86,112,181,57,84,158,100,123, - 29,237,10,46,83,54,160,68,40,207,234,232,155,71,110,128,119,211,63,206, - 250,81,27,33,148,84,233,93,224,123,233,31,52,236,131,73,46,202,220,33, - 60,23,165,207,231,163,168,168,128,67,14,30,76,99,83,3,27,215,127,200, - 187,155,150,83,62,226,16,14,27,123,36,99,190,253,109,54,108,216,192,170, - 79,63,101,195,178,85,224,169,101,116,69,5,21,21,21,56,157,78,60,30, - 143,228,162,236,195,200,47,54,81,194,10,23,40,149,120,33,240,116,163,84, - 150,203,126,140,117,154,245,220,118,166,41,147,9,64,73,9,140,10,175,204, - 252,18,112,87,250,198,139,24,199,36,60,23,165,144,125,130,238,70,94,175, - 23,171,213,202,192,129,3,0,77,81,129,139,77,91,182,176,245,131,247,249, - 232,95,115,169,175,175,199,225,112,48,104,208,32,6,13,26,68,197,225,102, - 185,156,242,114,243,198,208,227,241,72,61,184,62,140,40,184,68,9,139,243, - 54,20,248,114,68,193,25,70,154,131,172,227,225,209,102,177,210,91,210,212, - 191,195,1,191,116,116,200,150,178,28,248,31,210,155,205,228,127,2,227,152, - 222,178,82,15,46,55,9,214,131,203,203,203,195,229,114,49,96,192,0,14, - 25,54,140,166,166,38,234,235,235,241,120,60,56,28,14,74,74,74,112,58, - 157,148,151,151,227,116,58,165,30,220,1,66,238,253,98,195,119,37,7,89, - 97,123,34,165,6,50,192,193,3,67,127,250,252,223,0,135,100,79,150,48, - 124,190,141,217,21,32,152,39,178,206,151,158,124,148,191,237,215,62,70,68, - 69,239,223,145,94,5,23,89,252,84,108,112,185,69,240,182,46,63,223,92, - 127,105,173,41,40,40,160,172,172,140,242,242,114,148,82,180,182,182,134,194, - 56,130,10,45,154,98,203,33,95,109,33,197,228,158,130,11,223,5,26,227, - 132,237,57,242,245,59,178,140,118,225,150,145,43,10,46,103,92,192,174,61, - 8,158,242,165,190,162,64,212,68,203,96,102,250,191,151,244,84,20,184,151, - 240,74,2,32,54,184,92,35,104,170,111,106,138,244,180,14,47,101,20,30, - 163,232,9,148,114,242,68,41,233,36,54,184,190,75,238,253,98,189,97,91, - 81,167,230,195,91,57,162,224,78,108,194,204,99,7,102,101,237,76,229,67, - 140,199,59,217,22,160,157,140,111,251,220,1,124,139,212,214,132,123,158,142, - 181,224,64,108,112,185,70,208,6,215,210,210,210,233,181,160,146,75,180,110, - 159,216,224,250,46,185,173,224,206,44,132,59,119,100,79,150,112,206,116,192, - 186,224,147,87,128,153,89,20,38,156,215,73,79,21,241,30,224,206,134,61, - 240,50,204,164,165,83,83,208,215,108,204,202,236,157,17,27,92,110,18,158, - 151,178,35,82,152,86,200,237,95,108,63,43,140,115,194,167,89,118,164,24, - 231,52,101,9,149,30,223,3,124,8,156,144,61,153,32,32,195,94,96,80, - 150,229,8,176,162,28,40,55,237,168,47,212,153,101,142,186,203,223,135,193, - 196,194,248,237,34,152,6,124,9,220,215,253,241,66,252,154,142,118,183,112, - 196,6,151,91,116,180,193,133,19,12,10,79,52,16,63,71,246,136,132,52, - 144,219,10,174,208,128,73,133,240,153,27,178,117,51,166,48,101,40,8,15, - 208,107,2,230,3,199,19,189,78,92,38,208,1,25,234,137,169,224,182,141, - 73,221,112,131,191,72,188,173,1,92,82,2,103,21,154,149,24,30,241,116, - 93,113,96,224,64,211,19,115,74,49,184,122,154,219,241,119,152,243,113,43, - 221,43,99,244,15,224,1,194,131,186,163,33,54,184,220,34,150,13,46,156, - 68,87,112,98,131,235,187,228,246,47,86,1,63,40,129,191,236,129,250,44, - 5,125,23,26,166,12,157,238,4,103,1,183,145,217,106,222,225,212,7,100, - 136,193,131,131,97,78,45,52,250,193,211,141,185,179,170,118,101,222,232,135, - 1,86,216,229,133,223,150,71,223,46,254,91,135,74,2,134,50,43,77,6, - 201,83,112,167,11,86,91,24,190,250,80,92,251,118,81,96,248,105,208,22, - 234,75,250,155,129,226,99,173,102,184,193,188,253,93,203,54,34,222,202,110, - 21,102,9,161,219,128,41,192,105,152,89,103,134,98,90,109,220,192,22,76, - 199,156,197,192,60,32,177,45,240,186,186,58,242,243,243,37,53,87,142,224, - 10,60,70,115,26,9,34,54,56,33,183,21,156,6,134,219,225,198,1,48, - 35,75,182,184,27,7,152,50,116,250,177,108,5,238,4,254,152,5,161,8, - 140,29,185,5,88,63,63,77,21,14,134,5,30,231,119,86,230,245,71,36, - 168,224,135,23,194,57,141,180,95,154,192,76,189,213,253,172,48,137,125,206, - 127,7,142,174,40,38,209,27,148,237,219,183,139,130,203,33,190,21,120,220, - 190,61,178,96,169,97,24,216,237,118,236,118,123,168,226,131,112,224,146,219, - 10,14,192,237,135,107,251,195,146,70,120,59,195,181,225,78,47,48,199,118, - 251,205,149,92,39,254,4,76,2,206,201,172,92,188,22,24,187,157,226,11, - 215,102,88,134,3,135,253,47,141,224,168,189,85,100,160,236,157,208,77,190, - 245,77,42,61,104,133,190,70,238,43,56,128,86,63,220,61,8,222,94,23, - 191,109,42,185,123,144,57,118,151,252,20,120,11,72,161,189,171,75,190,8, - 140,41,100,10,185,121,16,132,222,73,239,168,214,168,1,123,22,182,134,236, - 42,1,231,150,29,192,143,232,184,93,152,30,182,6,198,202,145,208,9,65, - 16,132,28,166,179,130,203,134,183,98,34,99,230,170,92,0,124,142,185,77, - 153,206,172,34,203,3,99,124,158,198,49,4,65,16,250,14,157,183,40,7, - 91,225,195,17,153,243,126,215,129,49,227,17,46,87,155,134,251,119,194,43, - 245,169,149,229,188,34,184,109,160,89,85,60,81,185,66,44,7,206,196,12, - 0,191,36,181,114,49,23,152,14,236,74,113,191,130,32,8,125,151,206,87, - 112,139,130,131,115,48,160,181,163,92,115,14,129,234,125,112,215,14,104,240, - 69,38,105,238,14,6,80,104,129,187,202,161,170,31,52,36,19,142,176,11, - 248,33,166,19,200,31,128,34,122,30,101,227,195,12,5,248,5,102,172,150, - 32,8,130,208,29,122,135,147,73,52,26,252,112,69,41,156,93,104,102,205, - 120,163,1,62,104,106,79,54,18,15,43,240,157,124,51,24,249,226,18,51, - 222,43,41,229,22,206,63,128,5,152,25,54,206,7,78,37,241,116,90,173, - 152,249,37,95,198,140,115,235,34,64,90,16,4,65,136,73,239,85,112,96, - 6,7,23,91,224,167,101,112,105,41,212,121,225,211,131,224,221,54,88,177, - 9,54,238,135,250,86,179,109,81,30,28,82,8,71,148,193,105,7,195,184, - 237,80,236,135,124,163,189,175,148,82,135,185,93,249,55,160,20,56,25,179, - 10,245,209,192,112,160,36,172,221,122,224,51,204,184,173,255,0,181,152,217, - 82,4,65,16,132,158,162,234,231,143,148,140,164,125,0,113,101,23,4,65, - 136,68,20,156,32,8,130,144,22,178,125,227,109,5,200,191,161,5,191,223, - 143,223,239,199,231,243,161,181,206,88,169,9,165,20,190,39,204,116,73,214, - 107,234,177,88,44,24,134,17,42,86,232,247,251,241,122,189,180,181,181,153, - 245,184,180,78,91,196,128,245,153,1,0,120,127,98,122,43,42,83,64,44, - 22,11,54,155,13,171,213,26,81,68,81,251,253,232,176,199,84,209,242,103, - 51,59,158,253,218,216,219,148,10,80,134,97,62,42,69,115,115,51,77,205, - 205,52,55,55,167,236,255,174,127,32,37,214,238,201,107,82,210,159,200,33, - 114,100,90,14,3,176,99,102,34,117,6,254,78,23,13,1,57,10,179,60, - 31,185,38,71,54,177,2,24,223,124,147,213,136,239,134,64,62,64,231,142, - 206,1,204,6,166,144,14,210,31,10,215,136,169,224,74,58,100,190,207,116, - 136,121,11,35,0,200,219,154,120,240,120,62,144,159,226,155,146,96,98,180, - 138,148,246,218,125,68,142,72,68,142,72,226,201,33,217,67,15,92,76,39, - 147,92,41,12,24,71,142,76,125,81,85,47,153,143,112,210,57,55,185,114, - 129,16,57,34,17,57,34,201,21,57,132,220,161,119,164,234,18,4,65,16, - 132,110,210,187,195,4,114,132,68,214,89,114,119,41,8,130,144,89,68,193, - 37,73,83,224,104,86,10,77,164,34,11,62,119,105,109,218,200,178,32,159, - 32,8,194,129,74,143,21,92,188,85,75,78,173,88,242,243,193,239,135,214, - 86,240,249,82,214,173,198,84,110,63,202,207,167,41,63,31,87,126,62,40, - 133,10,188,134,214,52,55,53,145,223,212,196,179,77,77,184,200,177,121,17, - 132,44,17,235,250,33,191,15,218,175,31,89,38,87,228,72,134,30,41,184, - 208,170,5,115,2,194,107,52,187,3,207,115,102,197,50,126,60,124,242,137, - 249,247,207,126,6,143,63,158,242,33,154,129,71,159,125,22,215,128,1,228, - 7,148,28,90,211,212,212,68,243,174,93,252,98,242,228,148,143,41,228,62, - 193,139,67,111,185,104,103,66,94,141,249,123,105,82,138,230,14,175,185,48, - 61,129,15,228,27,65,5,104,173,81,129,29,161,3,93,142,100,233,241,10, - 238,74,218,21,29,192,83,192,13,152,19,147,15,60,155,180,104,41,224,187, - 223,133,183,223,54,87,111,134,1,15,62,104,42,159,39,159,76,201,74,46, - 248,89,231,1,83,175,188,146,89,139,22,145,223,191,63,174,252,124,154,155, - 154,112,106,205,180,43,175,100,94,160,221,129,250,163,61,16,9,255,109,228, - 67,78,95,180,67,74,39,240,60,29,55,167,225,138,173,41,63,159,43,243, - 243,205,157,149,112,154,154,120,42,176,227,113,32,42,186,160,82,129,236,42, - 151,92,145,35,21,244,88,193,61,133,249,131,216,133,89,130,243,66,224,37, - 114,104,229,6,208,220,12,59,118,64,121,185,169,228,10,10,224,177,199,96, - 214,44,104,104,72,201,16,174,192,56,207,238,222,205,212,73,147,152,181,104, - 17,205,205,205,208,212,68,229,164,73,60,187,123,55,249,205,205,17,171,220, - 62,207,240,225,112,213,85,112,203,45,237,231,182,110,133,223,255,30,254,242, - 23,104,105,73,253,152,151,92,2,143,60,2,67,134,180,159,123,229,21,248, - 63,255,7,118,237,202,104,40,76,248,214,117,51,230,13,16,205,205,184,180, - 206,185,11,182,198,180,31,55,186,92,76,193,252,62,167,122,59,61,124,140, - 169,133,133,112,208,65,60,53,103,14,218,21,249,171,80,205,205,92,121,249, - 229,176,103,15,179,27,26,114,118,206,210,65,184,82,9,146,13,229,146,43, - 114,164,138,30,133,9,228,3,253,129,97,192,65,129,115,193,173,202,67,2, - 175,101,85,201,93,120,161,121,81,91,183,14,142,63,30,246,239,55,87,112, - 193,85,155,145,186,232,136,144,19,73,83,19,179,119,237,98,218,196,137,52, - 111,216,192,180,137,19,153,189,107,23,249,77,77,153,249,145,42,101,30,201, - 182,73,6,139,5,126,243,27,248,250,107,83,185,181,182,194,238,221,80,87, - 103,42,158,71,30,129,125,251,204,27,142,84,97,24,48,119,46,252,243,159, - 230,24,181,181,176,119,175,121,115,115,222,121,230,13,206,196,137,224,112,164, - 110,204,56,104,218,87,42,143,204,159,207,212,1,3,104,116,185,58,109,201, - 229,2,205,96,42,158,1,3,120,100,254,124,154,242,243,105,74,241,197,44, - 56,198,180,129,3,121,106,209,34,102,47,90,132,171,127,127,92,97,10,206, - 229,114,225,234,223,159,217,111,190,201,83,139,22,49,109,224,192,156,157,179, - 84,19,77,169,4,209,25,84,240,185,34,71,42,233,241,10,78,97,106,199, - 142,31,90,69,57,151,81,142,59,14,230,205,51,239,216,247,238,133,254,253, - 97,204,24,248,248,99,24,52,8,78,57,197,84,120,41,36,168,228,104,106, - 98,246,206,157,76,157,56,145,217,90,155,43,183,116,127,49,148,2,151,171, - 125,187,167,169,201,60,58,18,190,37,212,212,100,42,128,84,174,106,148,130, - 159,252,4,126,251,91,243,121,77,13,172,89,3,159,125,6,197,197,112,248, - 225,112,253,245,80,88,8,203,151,155,255,15,107,146,76,37,100,177,192,51, - 207,192,15,126,96,126,158,231,159,135,133,11,77,197,58,100,8,156,115,142, - 121,188,241,134,41,215,255,111,239,190,195,163,168,22,54,128,191,179,187,105, - 187,155,16,32,69,132,16,218,149,34,77,138,2,65,64,148,118,65,13,197, - 2,4,148,34,104,80,164,11,202,181,92,68,17,4,84,46,66,130,130,84, - 249,128,11,129,75,23,164,41,69,1,5,165,134,150,0,33,13,18,146,236, - 166,108,153,239,143,97,67,42,108,178,45,59,121,127,207,195,19,152,61,153, - 57,89,146,121,115,206,156,242,209,71,182,127,157,15,96,233,134,203,4,144, - 34,8,16,181,90,104,130,130,16,21,19,131,136,238,221,177,186,130,181,72, - 44,65,28,161,213,34,42,38,70,122,166,174,213,34,37,53,21,62,162,8, - 95,216,222,181,154,127,13,95,95,68,199,196,32,176,78,29,0,128,46,57, - 25,67,250,246,133,168,211,65,47,8,208,4,5,97,213,166,77,8,12,12, - 132,94,163,169,176,239,153,163,8,142,252,197,179,12,42,74,61,236,69,94, - 211,4,26,55,6,126,251,77,234,142,4,164,27,120,74,10,224,231,7,244, - 234,5,4,7,3,191,252,226,144,75,23,12,185,77,247,142,57,252,25,130, - 32,0,62,62,82,112,237,222,45,5,87,223,190,197,195,75,16,164,50,155, - 54,73,31,187,119,151,94,207,206,182,95,200,85,173,122,63,220,190,252,18, - 152,60,185,120,153,61,123,128,253,251,165,95,58,166,76,1,70,140,176,237, - 154,147,39,3,67,134,0,73,73,192,244,233,192,119,223,21,126,125,249,114, - 96,208,32,233,153,235,164,73,192,201,147,192,230,205,182,93,243,1,244,0, - 146,5,1,131,213,106,232,124,125,161,177,140,172,5,128,192,64,232,238,61, - 95,170,8,55,108,75,183,161,78,163,145,254,63,52,26,233,251,85,163,193, - 27,65,65,208,100,102,98,181,94,143,160,123,83,92,202,75,15,72,215,8, - 8,128,58,64,234,239,209,37,39,99,72,143,30,136,78,78,150,6,98,105, - 181,24,95,224,121,156,90,163,129,58,48,16,8,8,128,46,43,11,154,172, - 172,138,243,216,195,1,42,74,215,95,69,169,135,61,185,255,74,38,150,223, - 56,58,119,6,206,158,189,31,110,22,102,51,144,144,32,181,26,118,239,118, - 108,85,112,255,25,164,195,7,149,20,12,183,195,135,1,131,97,52,130,131, - 165,214,156,66,113,191,59,82,16,164,127,171,213,82,192,27,12,163,113,248, - 176,244,121,62,62,246,235,178,124,237,53,169,133,124,234,20,240,245,215,210, - 49,31,31,96,199,14,224,189,247,164,127,31,56,32,253,18,2,0,97,97, - 64,203,150,182,93,243,253,247,165,143,139,22,21,15,55,0,200,202,2,162, - 163,129,212,84,233,235,127,233,37,219,174,247,0,34,164,53,17,35,212,106, - 232,131,131,177,122,247,110,172,138,137,193,232,55,223,4,4,1,81,107,214, - 96,84,5,234,170,180,116,27,142,10,10,66,212,154,53,128,32,96,244,155, - 111,98,85,76,12,86,239,222,13,125,112,48,34,212,106,100,161,252,55,62, - 75,235,109,148,70,131,232,123,215,176,132,219,202,164,36,248,232,116,8,80, - 171,241,65,64,0,254,123,175,215,37,37,37,5,41,41,41,0,128,232,53, - 107,48,202,1,93,166,84,121,184,119,192,221,27,142,143,151,95,150,90,6, - 69,195,77,20,165,155,123,100,100,197,89,111,211,30,10,134,219,145,35,192, - 241,227,29,208,164,73,28,180,90,32,40,8,8,9,1,66,67,239,255,9, - 9,145,142,107,181,64,147,38,113,56,126,188,3,142,28,177,111,200,189,250, - 170,244,113,253,122,224,198,13,233,239,70,163,212,58,168,86,77,250,183,82, - 9,156,63,47,253,189,97,67,169,59,217,22,190,190,64,124,60,176,119,239, - 131,203,61,247,156,244,209,195,195,182,235,61,132,254,94,183,228,170,152,24, - 132,214,169,131,160,160,32,68,71,71,99,244,168,81,128,90,141,168,77,155, - 16,161,213,186,252,134,93,168,107,114,211,38,64,173,198,232,81,163,16,29, - 29,141,160,160,32,132,214,169,131,85,49,49,16,181,90,232,109,252,222,208, - 3,128,70,3,81,173,134,40,138,136,232,219,23,81,201,201,16,245,122,8, - 106,53,134,6,5,97,213,238,221,16,212,106,136,58,29,250,117,239,142,136, - 190,125,165,29,77,238,117,189,87,132,95,8,200,61,185,119,23,165,37,220, - 86,172,40,30,96,162,40,221,80,187,118,5,246,237,187,31,134,114,96,121, - 230,246,235,175,192,209,163,237,209,167,207,21,40,149,254,208,106,129,45,91, - 164,150,75,81,90,173,244,71,169,188,138,158,61,211,177,117,107,123,28,62, - 124,4,97,97,210,123,83,210,115,187,178,176,132,88,70,134,244,49,33,65, - 58,230,225,1,52,111,46,117,73,214,171,7,92,189,42,213,79,171,181,207, - 192,143,203,151,165,231,171,207,62,11,108,216,112,255,156,74,165,212,114,107, - 211,70,106,85,2,118,29,92,84,26,181,70,3,205,189,63,249,44,45,233, - 10,116,195,182,4,15,212,234,66,131,143,44,3,63,10,117,175,218,235,154, - 122,61,68,157,14,58,157,14,62,106,53,134,4,5,97,229,238,221,82,29, - 244,122,12,233,222,29,243,83,83,49,46,48,80,26,137,76,100,35,247,14, - 184,174,93,165,209,115,162,88,60,188,148,74,224,169,167,164,103,114,128,124, - 194,205,98,211,38,96,215,174,87,49,104,208,29,164,165,165,33,36,196,31, - 10,69,79,248,251,215,134,175,175,80,236,25,156,82,41,66,161,136,135,66, - 1,164,165,165,225,159,255,188,131,53,107,94,197,166,77,107,209,189,187,237, - 245,177,76,187,240,245,149,62,214,171,7,248,251,75,221,146,219,183,3,19, - 39,222,47,107,9,33,131,193,246,235,134,134,2,45,90,72,173,184,154,53, - 11,183,210,244,122,233,26,77,154,72,255,150,219,247,128,27,210,11,2,244, - 90,45,134,4,4,96,85,145,112,91,153,156,140,84,189,62,255,89,29,145, - 173,220,55,224,30,127,92,186,169,21,237,150,4,164,223,212,123,247,190,31, - 110,114,212,183,47,240,235,175,107,177,125,123,123,244,233,147,14,163,17,48, - 26,119,34,43,235,193,45,56,149,170,33,170,86,173,138,173,91,171,161,71, - 143,181,8,11,179,79,125,22,47,150,6,115,244,239,15,44,89,34,13,238, - 73,75,147,6,178,152,76,247,255,159,218,180,1,84,42,233,121,233,161,67, - 182,93,51,55,87,10,210,176,48,233,255,186,180,223,250,55,110,148,62,58, - 97,132,152,254,94,11,69,167,211,221,31,145,102,249,5,236,222,252,200,138, - 48,39,82,13,220,31,77,171,209,228,135,191,101,195,92,157,78,7,189,173, - 173,250,162,215,84,171,161,9,10,194,120,141,70,122,230,86,36,220,68,189, - 30,26,141,6,130,70,3,181,90,205,86,28,217,204,61,159,193,181,108,9, - 252,253,119,241,213,72,4,65,186,145,190,241,134,212,106,144,43,189,94,10, - 177,14,29,128,118,237,142,96,231,206,250,48,153,234,34,43,11,120,225,5, - 233,153,83,209,63,47,188,32,125,142,201,84,23,59,119,214,71,187,118,71, - 208,161,131,116,204,30,55,146,205,155,165,27,102,171,86,210,100,110,64,10, - 160,97,195,164,240,3,128,71,31,149,90,220,0,112,238,28,112,230,140,109, - 215,156,54,237,254,199,90,181,164,191,23,13,177,217,179,165,231,125,105,105, - 192,156,57,182,93,239,33,212,162,8,33,43,11,17,225,225,136,187,118,13, - 201,201,201,24,53,106,20,162,162,163,1,189,30,163,251,246,197,170,172,44, - 104,92,60,138,82,128,180,36,214,170,172,44,140,190,55,234,54,42,58,26, - 163,70,141,66,114,114,50,226,174,93,67,68,120,56,132,172,44,105,100,176, - 13,44,65,42,232,245,16,4,1,171,54,109,194,198,221,187,33,104,52,16, - 245,122,68,116,239,142,21,5,158,201,141,190,55,93,64,16,4,8,21,232, - 23,2,114,79,238,19,112,150,27,87,239,222,192,31,127,72,65,86,244,102, - 38,8,210,128,146,239,190,115,202,111,235,69,89,86,176,176,252,113,88,135, - 152,101,136,191,78,7,180,111,15,180,105,115,24,103,207,134,34,43,75,154, - 224,126,253,58,16,23,119,255,207,245,235,210,241,172,44,224,236,217,80,180, - 105,115,24,237,219,75,159,111,175,169,2,73,73,192,216,177,210,223,251,246, - 149,174,217,180,169,244,127,117,233,146,52,133,224,207,63,129,186,117,165,231, - 102,3,6,216,126,205,229,203,165,95,100,2,3,165,231,108,123,246,220,255, - 90,218,182,149,158,205,141,27,39,29,219,180,201,161,45,122,1,128,22,192, - 42,189,30,234,164,36,12,238,222,29,17,225,225,136,90,188,24,16,69,140, - 30,52,8,209,201,201,208,86,144,85,109,212,0,180,122,61,162,147,147,49, - 122,208,32,64,20,17,181,120,49,34,194,195,49,184,123,119,168,147,146,176, - 74,175,135,22,229,31,13,108,9,210,104,157,78,90,161,4,64,96,96,32, - 2,3,3,1,65,64,255,126,253,48,51,53,21,169,122,61,178,53,26,12, - 9,14,198,202,93,187,160,9,10,2,68,17,163,6,13,146,150,238,170,0, - 211,42,200,61,185,79,23,165,40,2,175,191,46,117,127,149,52,90,82,169, - 4,194,195,165,150,132,11,6,148,228,207,43,82,171,17,33,8,88,117,175, - 75,202,97,115,158,44,33,7,72,45,185,221,187,163,144,148,36,181,198,204, - 230,194,95,191,217,44,29,79,74,2,52,154,40,116,232,96,223,112,179,88, - 186,84,106,73,125,244,145,212,90,251,235,175,194,175,155,205,82,200,214,174, - 45,93,119,204,152,251,173,189,242,184,115,71,154,255,214,160,1,240,143,127, - 72,207,100,11,126,61,162,40,61,131,139,139,3,134,15,151,90,151,253,250, - 73,3,93,28,64,13,32,72,20,177,81,167,67,124,118,54,222,85,171,161, - 183,180,64,82,82,42,204,28,56,160,240,10,60,72,73,1,116,58,105,162, - 183,78,135,37,201,201,168,109,54,231,79,244,182,133,26,144,174,145,154,10, - 125,74,10,244,5,6,175,168,53,26,140,11,12,132,58,32,0,130,70,131, - 85,155,54,73,225,6,64,159,154,10,164,166,74,239,153,141,117,40,141,53, - 255,15,149,233,169,173,28,223,15,155,182,203,49,163,248,23,236,208,21,201, - 123,247,150,158,223,20,12,56,75,184,181,111,15,28,61,122,255,152,19,21, - 156,52,27,17,20,132,168,85,171,16,17,17,129,85,201,201,82,23,139,163, - 67,78,16,144,63,80,68,167,43,121,68,169,101,18,184,165,140,189,195,13, - 144,104,179,188,102,0,0,32,0,73,68,65,84,234,241,239,127,75,187,55, - 252,235,95,210,40,74,213,189,111,177,156,28,233,70,218,185,179,212,178,106, - 211,70,90,23,52,61,29,88,179,166,252,215,252,227,15,169,11,114,225,66, - 160,75,23,105,0,139,32,72,221,215,74,165,116,189,235,215,165,239,153,150, - 45,165,16,30,57,82,106,69,218,153,101,30,164,15,128,236,123,221,149,186, - 228,100,140,31,53,170,66,116,77,22,85,176,171,50,34,60,28,159,70,71, - 67,200,202,66,160,40,34,8,246,233,222,201,191,70,102,38,134,132,135,35, - 42,38,70,154,196,13,96,229,127,255,155,255,156,77,125,111,52,167,46,43, - 11,250,212,84,140,14,15,199,170,204,76,135,191,103,165,45,77,5,200,111, - 85,15,107,200,237,253,176,105,187,28,29,128,212,123,199,4,72,67,143,227, - 80,120,178,179,93,149,180,3,128,82,9,116,234,116,63,220,156,172,104,184, - 173,220,189,27,208,104,176,114,247,110,105,201,46,103,132,156,101,176,128,229, - 223,37,177,166,140,61,234,34,8,192,182,109,210,159,160,32,105,32,129,40, - 222,15,25,64,250,101,228,224,65,233,227,234,213,210,32,135,37,75,202,223, - 242,22,4,169,53,168,82,73,235,92,122,120,72,95,111,114,242,253,50,239, - 188,3,204,154,37,133,224,210,165,82,139,206,1,33,7,220,191,169,107,116, - 58,76,8,15,199,70,160,194,116,77,22,101,89,44,124,85,114,50,250,133, - 135,75,63,183,118,254,94,181,92,99,229,189,101,236,74,90,108,89,175,215, - 23,91,108,217,209,239,153,8,233,166,93,210,77,221,93,23,23,182,133,28, - 223,15,187,108,151,19,4,39,109,151,99,249,13,162,224,124,166,193,131,109, - 31,141,103,131,252,197,106,3,3,177,114,215,46,105,17,89,141,6,122,181, - 26,43,118,237,194,224,123,235,82,66,167,115,236,114,67,214,4,131,51,90, - 182,5,175,81,48,96,10,50,26,165,214,248,150,45,64,199,142,210,106,35, - 129,129,192,103,159,149,47,228,44,229,141,198,251,147,204,139,90,184,80,122, - 125,206,28,233,23,162,181,107,165,231,128,113,113,101,187,150,21,242,127,6, - 238,141,66,172,200,219,229,148,180,196,156,189,87,225,41,120,141,213,122,61, - 116,89,89,24,213,173,91,133,216,46,167,164,155,186,187,222,204,237,65,110, - 239,135,77,219,229,20,221,240,116,53,238,111,120,234,16,127,252,33,205,179, - 178,236,239,182,107,151,212,189,229,162,73,220,150,65,37,253,0,204,143,142, - 150,30,150,167,164,72,19,140,69,17,58,189,30,51,163,163,209,47,60,28, - 155,80,113,111,114,46,145,150,6,116,235,6,28,63,46,77,249,248,248,99, - 169,245,101,25,168,226,8,81,81,210,247,205,151,95,74,93,164,187,118,1, - 67,135,58,100,240,137,37,212,128,138,255,127,110,9,100,71,214,55,255,26, - 162,8,77,86,22,86,223,123,230,87,144,171,54,60,45,120,83,119,231,155, - 185,189,200,233,253,40,87,192,21,252,97,40,141,221,191,65,21,10,169,139, - 105,214,172,34,23,114,253,10,37,106,0,227,6,15,150,30,158,11,194,253, - 173,222,69,17,122,71,183,220,220,89,78,142,52,210,50,33,65,106,193,89, - 150,241,114,164,69,139,164,231,116,115,230,72,45,8,7,143,172,116,39,206, - 168,111,193,160,115,85,29,74,146,127,83,119,209,245,43,26,185,188,31,54, - 109,151,227,84,37,77,232,6,92,26,110,5,187,162,244,122,61,196,148,148, - 66,239,139,136,2,163,213,224,126,55,60,167,121,244,81,169,37,181,98,133, - 115,174,55,127,190,52,200,198,50,63,143,156,174,34,254,44,184,251,205,220, - 222,228,240,126,184,207,52,129,10,42,191,53,251,144,160,173,136,63,208,21, - 202,138,21,206,107,141,11,2,195,141,168,18,96,192,217,1,195,203,78,156, - 213,26,231,154,148,68,149,130,251,172,100,66,68,68,84,6,108,193,17,145, - 83,56,186,221,92,218,249,217,195,82,121,49,224,136,200,161,10,174,209,106, - 153,90,100,79,129,247,62,150,180,0,155,2,128,23,164,213,101,124,238,253, - 157,42,15,33,35,166,33,31,72,16,17,145,221,85,233,123,209,165,215,103, - 11,142,136,172,226,234,155,21,81,89,169,0,96,151,225,83,87,215,131,72, - 150,122,120,76,7,224,254,63,99,150,175,131,200,157,112,20,37,17,17,201, - 18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89,98,192, - 17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56,34,34, - 146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196, - 128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68, - 68,36,75,220,240,148,200,69,20,10,5,60,60,60,160,82,73,63,134,38, - 147,41,255,143,217,108,118,113,237,136,220,31,3,142,200,5,60,60,60,144, - 148,148,132,173,91,183,226,244,233,211,16,4,1,181,107,215,70,163,70,141, - 208,186,117,107,212,168,81,3,121,121,121,16,69,209,213,85,37,114,91,12, - 56,34,39,83,169,84,248,253,247,223,177,104,209,34,220,185,115,39,255,248, - 181,107,215,112,240,224,65,40,20,10,132,133,133,97,240,224,193,8,8,8, - 96,200,17,149,19,159,193,17,57,145,66,161,192,233,211,167,17,21,21,85, - 40,220,10,50,155,205,56,116,232,16,62,251,236,51,36,36,36,64,16,4, - 39,215,146,72,30,24,112,68,78,34,8,2,238,222,189,139,29,59,118,32, - 53,53,245,161,229,227,227,227,113,224,192,1,220,205,200,128,74,165,202,127, - 86,71,68,214,225,79,12,145,147,8,130,128,196,196,68,252,254,251,239,86, - 149,175,81,163,6,142,30,61,138,212,212,84,52,104,208,0,161,161,161,104, - 217,178,37,68,81,132,209,104,228,64,20,162,135,96,192,17,57,145,101,148, - 228,195,248,249,249,193,219,219,27,215,175,95,199,205,155,55,113,224,192,1, - 4,4,4,160,67,135,14,104,208,160,1,154,55,111,142,192,128,0,228,25, - 12,48,26,141,78,168,57,145,251,97,192,17,57,137,40,138,168,89,179,38, - 186,116,233,130,253,251,247,151,90,206,211,211,19,213,170,85,195,237,219,183, - 11,133,87,106,106,42,182,108,217,2,181,90,141,71,30,121,4,143,55,109, - 138,167,59,118,68,147,38,141,97,50,153,97,48,24,56,32,133,168,0,6, - 28,145,147,136,162,8,95,95,95,140,24,49,2,173,91,183,198,250,245,235, - 17,31,31,95,172,156,90,173,70,118,118,54,50,50,50,10,29,23,4,1, - 129,129,129,168,82,165,10,116,58,29,118,237,220,137,189,123,246,160,102,205, - 90,232,222,189,27,58,117,234,4,31,31,31,24,12,6,118,95,18,129,1, - 71,228,116,222,222,222,120,234,169,167,240,228,147,79,226,198,141,27,56,123, - 246,44,18,18,18,96,54,155,17,16,16,136,166,77,155,66,175,215,225,228, - 201,147,248,229,151,95,112,247,238,93,0,82,192,249,248,248,32,54,54,22, - 26,141,6,33,33,33,240,242,242,66,70,70,6,22,47,94,140,165,75,151, - 162,123,247,238,232,222,189,59,106,214,172,9,163,209,200,22,29,85,106,66, - 70,76,67,113,151,225,83,87,215,131,72,150,122,120,76,7,0,148,246,51, - 38,8,66,254,31,64,106,229,89,66,73,161,80,64,165,82,33,54,54,22, - 71,143,30,197,111,191,253,14,64,68,92,92,92,161,115,248,248,248,160,102, - 205,154,200,205,205,197,245,235,215,1,0,143,63,254,56,94,123,237,53,132, - 132,132,216,101,244,101,15,143,233,168,210,247,162,205,231,33,114,38,182,224, - 136,92,168,96,160,21,101,25,144,82,167,78,29,52,104,208,0,189,122,245, - 194,240,225,195,139,149,203,206,206,70,118,118,54,110,221,186,149,127,204,108, - 54,99,209,162,69,200,204,204,196,91,111,189,133,144,144,16,104,52,26,248, - 248,248,192,108,54,179,101,71,149,2,3,142,168,130,51,155,205,48,153,76, - 216,184,113,99,177,215,130,131,131,209,182,109,91,196,199,199,35,39,39,7, - 233,233,233,168,81,163,6,20,10,5,174,94,189,10,0,152,49,99,6,234, - 212,169,131,86,173,90,161,85,171,86,168,87,175,30,188,125,124,96,226,232, - 75,146,57,6,28,81,5,167,80,40,144,144,112,11,123,246,236,201,63,230, - 229,229,5,127,127,127,52,111,222,28,67,134,12,129,82,169,196,169,83,167, - 112,227,198,13,248,249,249,225,239,191,255,198,181,107,215,160,211,233,0,72, - 203,128,93,187,118,13,59,119,236,64,247,30,61,208,179,103,79,4,4,4, - 64,16,4,14,72,33,217,98,192,17,85,112,74,165,18,75,150,44,65,78, - 78,14,0,105,161,230,128,128,0,40,149,74,92,184,112,1,81,81,81,104, - 214,172,25,158,125,246,89,180,109,219,22,38,147,9,45,91,182,68,199,142, - 29,113,238,220,57,28,63,126,28,87,174,92,1,0,232,179,179,113,246,236, - 89,36,37,38,162,83,231,206,120,226,137,39,160,86,171,145,155,155,235,202, - 47,145,200,33,24,112,68,21,152,183,183,55,214,174,93,139,211,167,79,229, - 31,243,244,244,132,32,8,72,75,75,131,40,138,184,117,235,22,226,227,227, - 209,174,93,187,252,1,37,190,190,190,104,217,178,37,26,55,110,140,46,93, - 186,32,45,45,13,151,47,95,70,124,124,60,142,29,59,134,236,236,108,44, - 88,176,0,181,107,215,70,159,62,125,16,22,22,198,9,227,36,59,12,56, - 162,10,76,20,69,28,59,118,44,127,80,136,167,167,39,6,12,24,0,149, - 74,133,173,91,183,162,110,221,186,56,125,250,52,124,125,125,113,247,238,221, - 252,221,7,44,203,121,41,149,74,4,5,5,33,40,40,8,245,235,215,135, - 193,96,64,175,94,189,112,238,236,89,172,223,176,1,231,207,159,199,249,243, - 231,241,247,223,127,227,141,55,222,96,119,37,201,10,3,142,168,2,203,205, - 205,197,172,89,179,16,23,23,135,245,235,215,163,65,131,6,120,249,229,151, - 113,244,232,49,104,52,90,92,187,118,13,85,171,86,69,74,74,10,244,122, - 61,4,65,40,54,66,210,242,111,165,82,9,165,82,137,218,181,107,35,52, - 52,20,207,116,237,138,35,71,142,224,244,233,211,56,123,246,44,182,111,223, - 142,222,189,123,91,181,148,24,145,59,96,192,17,85,112,162,40,34,52,52, - 20,83,167,78,133,40,138,200,205,205,69,78,78,54,82,82,146,145,153,153, - 153,95,206,96,48,148,233,156,158,158,158,232,218,181,43,122,246,236,137,243, - 231,207,227,163,143,62,2,0,244,233,211,135,221,149,36,11,220,46,135,200, - 13,136,162,8,131,193,0,147,201,132,140,140,12,156,58,117,186,80,184,1, - 40,87,203,203,100,50,33,59,59,27,13,26,52,192,140,25,51,176,98,197, - 10,164,164,164,64,161,224,173,129,220,31,191,139,137,220,140,201,100,66,96, - 96,0,130,131,131,243,143,53,109,218,20,213,171,87,47,247,4,110,131,193, - 128,250,245,235,35,48,48,16,55,110,220,96,192,145,44,240,187,152,200,141, - 136,162,136,42,85,170,96,232,208,161,104,215,174,93,254,241,103,159,125,22, - 129,129,129,229,14,56,133,66,129,43,87,174,224,238,221,187,104,208,160,1, - 7,155,144,44,48,224,136,220,140,101,132,100,193,103,110,74,165,210,166,80, - 242,246,246,198,186,117,235,240,220,115,207,193,223,223,159,1,71,178,192,128, - 35,114,83,5,159,185,41,149,202,114,159,199,210,122,59,119,238,28,94,122, - 233,37,228,229,229,217,163,122,68,46,199,128,35,114,67,150,86,156,133,101, - 55,130,242,240,241,241,193,218,181,107,209,179,103,79,168,213,106,46,196,76, - 178,193,105,2,68,110,40,55,55,23,47,189,244,18,222,120,227,13,220,188, - 121,19,62,62,62,229,10,38,149,74,133,179,103,207,226,207,63,255,196,136, - 17,35,56,7,142,100,133,1,71,228,134,164,205,81,165,85,75,234,212,169, - 243,192,109,119,30,196,104,52,162,110,221,186,248,246,219,111,161,209,104,216, - 122,35,89,97,23,37,145,155,178,132,145,173,251,187,153,205,102,104,181,90, - 134,27,201,14,3,142,136,56,106,146,100,137,1,71,68,68,178,196,128,35, - 34,34,89,98,192,17,17,145,44,113,20,37,145,19,244,240,152,238,234,42, - 16,85,58,12,56,34,7,171,210,247,162,171,171,64,84,41,177,139,146,136, - 136,100,137,1,71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44, - 49,224,136,136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28, - 17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34, - 89,98,192,17,17,145,44,49,224,136,136,72,150,42,204,110,2,10,133,2, - 130,32,64,16,4,0,128,217,108,134,217,108,118,113,173,136,136,200,93,185, - 44,224,60,60,60,96,50,153,112,254,252,121,92,184,112,1,41,41,41,208, - 233,116,48,24,12,16,4,1,190,190,190,168,86,173,26,30,121,228,17,132, - 134,134,162,118,237,218,240,240,240,128,209,104,132,201,100,130,40,138,174,170, - 58,17,17,185,1,167,6,156,165,133,118,225,194,5,108,219,182,13,191,254, - 250,107,153,62,255,145,71,30,65,147,38,77,208,162,69,11,132,132,132,32, - 40,40,8,90,173,22,38,147,137,173,61,34,34,42,196,169,1,119,225,194, - 5,76,159,62,189,220,173,175,196,196,68,36,38,38,226,231,159,127,206,63, - 22,24,24,136,62,125,250,32,44,44,12,90,173,22,42,149,138,173,59,34, - 34,114,78,192,25,12,6,76,154,52,9,9,9,9,118,63,119,74,74,10, - 150,45,91,134,101,203,150,1,0,158,123,238,57,140,28,57,18,74,165,210, - 238,215,34,34,34,247,225,208,128,83,40,20,216,190,125,59,150,46,93,234, - 180,86,213,158,61,123,176,119,239,94,84,173,90,21,99,199,142,197,19,79, - 60,129,188,188,60,167,92,155,136,136,42,14,135,5,156,167,167,39,62,251, - 236,51,28,59,118,204,81,151,40,149,40,138,184,115,231,14,62,254,248,99, - 4,7,7,99,240,224,193,120,230,153,103,144,147,147,227,244,186,16,17,145, - 107,56,100,30,156,40,138,24,63,126,188,75,194,173,168,164,164,36,204,155, - 55,15,19,38,76,64,82,82,18,20,10,78,253,35,34,170,12,236,126,183, - 207,205,205,197,91,111,189,133,43,87,174,216,251,212,54,137,141,141,197,219, - 111,191,141,141,27,55,230,207,181,35,34,34,249,178,107,192,137,162,136,177, - 99,199,226,246,237,219,246,60,173,93,173,94,189,26,211,166,77,131,209,104, - 116,117,85,136,136,200,129,236,22,112,30,30,30,248,224,131,15,112,231,206, - 29,123,157,210,97,98,99,99,241,201,39,159,192,195,195,195,213,85,33,34, - 34,7,177,75,192,41,20,10,124,254,249,231,136,141,141,181,199,233,156,226, - 252,249,243,152,60,121,50,188,189,189,93,93,21,34,34,114,0,187,4,220, - 206,157,59,43,196,128,146,178,138,141,141,197,87,95,125,197,103,114,68,68, - 50,100,115,192,25,12,6,124,255,253,247,246,168,139,75,236,221,187,23,103, - 207,158,117,117,53,136,136,200,206,108,10,56,203,116,0,119,95,7,242,195, - 15,63,132,201,100,114,117,53,136,136,200,142,202,29,112,130,32,224,210,165, - 75,72,74,74,178,103,125,92,102,253,250,13,156,35,71,68,36,35,54,221, - 209,223,127,255,125,123,213,195,165,20,10,5,194,195,195,221,190,37,74,68, - 68,247,149,43,224,4,65,192,241,227,199,237,93,23,151,9,11,235,8,95, - 95,45,142,28,57,2,79,79,79,87,87,135,136,136,236,160,92,107,81,122, - 123,123,231,175,222,239,238,188,189,189,241,206,59,111,35,50,50,18,9,9, - 9,248,241,199,31,177,98,229,10,164,167,165,187,186,106,68,68,100,131,114, - 181,224,174,93,187,38,155,103,111,83,167,78,197,161,67,135,242,183,242,185, - 117,235,22,250,245,237,143,53,107,126,132,167,23,231,200,17,17,185,171,50, - 7,156,32,8,133,54,28,117,103,157,58,117,66,104,104,40,22,44,88,80, - 232,120,102,102,6,54,109,218,136,126,253,250,226,192,193,67,16,69,32,35, - 35,3,137,137,137,208,235,245,240,242,242,114,81,141,137,136,200,90,101,238, - 162,84,169,84,136,139,139,115,68,93,156,74,171,213,98,202,148,41,120,237, - 181,215,74,45,99,50,26,241,159,5,223,224,63,11,190,41,116,60,56,56, - 24,239,140,125,23,141,26,62,198,221,195,137,136,42,168,50,183,224,60,60, - 60,112,238,220,57,71,212,197,169,62,254,248,99,172,88,177,162,92,11,67, - 39,37,37,97,250,7,239,99,194,132,9,156,63,71,68,84,65,149,171,139, - 82,175,215,59,162,46,78,51,124,248,112,24,12,6,172,91,183,206,166,243, - 196,199,199,227,204,185,139,80,42,149,118,170,25,17,17,217,139,195,118,244, - 174,168,252,253,253,209,191,127,127,12,28,56,208,46,231,155,241,201,135,168, - 90,181,26,134,14,25,130,238,61,186,35,47,47,143,91,241,16,17,85,0, - 101,14,56,179,217,12,127,127,127,164,167,187,231,48,250,175,191,254,26,159, - 126,250,41,50,50,50,236,118,206,180,180,59,248,250,155,175,17,189,100,9, - 66,67,67,81,175,126,125,116,104,223,30,79,180,108,129,236,156,28,62,167, - 35,34,114,129,50,7,92,94,94,30,90,182,108,137,253,251,247,59,160,58, - 142,53,106,212,40,220,188,121,19,71,142,28,113,200,249,179,179,245,56,127, - 254,28,206,159,63,135,237,219,182,162,74,21,127,188,240,252,11,104,215,161, - 29,106,213,172,137,188,188,60,135,92,151,136,136,138,43,243,51,56,147,201, - 132,110,221,186,57,162,46,14,85,175,94,61,116,237,218,21,31,124,240,129, - 211,174,121,247,110,58,86,174,90,129,49,145,145,24,63,126,34,206,158,59, - 135,188,188,60,62,179,35,34,114,130,114,77,244,110,218,180,41,194,194,194, - 236,93,23,135,241,244,244,196,87,95,125,133,105,211,166,185,172,187,240,202, - 149,75,248,232,195,15,49,120,240,96,68,71,71,67,175,207,102,215,37,17, - 145,3,149,43,224,242,242,242,240,206,59,239,184,77,75,100,220,184,113,56, - 118,236,24,174,94,189,234,234,170,0,144,54,136,125,253,245,215,48,100,232, - 80,252,244,211,30,238,98,64,68,228,0,229,190,179,42,149,74,124,255,253, - 247,168,82,165,138,61,235,99,119,93,186,116,65,163,70,141,48,115,230,76, - 87,87,165,16,81,20,145,155,147,131,232,232,40,188,58,112,32,166,77,155, - 134,43,87,174,194,199,199,199,213,85,35,34,146,5,155,154,14,26,141,6, - 75,151,46,197,51,207,60,99,175,250,216,149,183,183,55,38,76,152,128,143, - 62,250,200,213,85,121,32,67,94,30,46,93,186,132,247,222,155,130,33,67, - 134,226,251,239,151,34,75,167,231,206,6,68,68,54,16,50,98,26,138,187, - 12,159,218,116,18,15,15,15,156,60,121,18,81,81,81,21,106,17,230,249, - 243,231,227,240,225,195,88,191,126,189,171,171,82,46,77,155,53,67,247,110, - 61,16,22,214,30,10,133,0,163,145,171,166,184,155,30,30,211,81,165,239, - 69,87,87,131,168,82,178,203,195,31,131,193,128,102,205,154,97,233,210,165, - 24,62,124,56,252,252,252,236,113,90,155,132,135,135,195,203,203,203,109,195, - 13,0,254,254,235,47,204,155,247,37,250,247,239,143,165,75,127,192,173,91, - 137,80,169,84,16,4,193,213,85,35,34,170,240,236,210,130,43,74,165,82, - 225,199,31,127,196,230,205,155,145,155,155,107,215,115,91,67,163,209,96,197, - 138,21,24,57,114,36,210,210,210,156,122,109,47,47,47,124,243,205,55,8, - 14,14,198,193,131,7,241,227,143,63,226,206,157,59,118,123,31,60,61,125, - 48,113,226,120,60,254,248,227,240,246,246,226,72,204,10,142,45,56,34,215, - 113,72,192,21,180,111,223,62,44,90,180,200,105,55,98,133,66,129,213,171, - 87,99,201,146,37,46,217,214,103,229,202,149,136,140,140,68,86,86,22,170, - 84,169,130,87,95,125,21,221,186,117,67,114,114,50,150,47,95,142,163,71, - 143,218,229,58,130,32,160,121,243,230,120,247,221,119,225,231,231,199,160,171, - 160,24,112,68,174,227,240,128,19,4,1,70,163,17,241,241,241,88,180,104, - 145,195,135,234,143,28,57,18,77,154,52,193,132,9,19,28,122,157,146,104, - 52,26,124,251,237,183,197,182,224,17,4,1,85,171,86,69,135,14,29,208, - 175,95,63,40,20,10,236,222,189,27,235,214,173,179,203,186,149,126,126,126, - 232,220,249,25,140,28,57,28,70,163,17,102,179,217,230,115,146,125,48,224, - 136,92,199,225,1,151,127,33,65,128,74,165,66,114,114,50,46,94,188,136, - 125,251,246,225,196,137,19,118,189,70,231,206,221,48,97,194,24,236,223,127, - 0,27,54,108,192,245,235,215,81,183,126,125,92,189,124,217,174,215,41,77, - 219,182,109,161,86,171,113,224,192,129,7,150,171,94,189,58,26,55,110,140, - 231,159,127,30,193,193,193,56,117,234,20,98,98,98,236,18,254,141,26,53, - 66,175,94,255,196,179,207,118,69,14,215,193,116,57,6,28,145,235,56,45, - 224,138,242,244,244,132,32,8,136,141,141,197,197,139,23,113,249,242,101,196, - 197,197,225,198,141,27,200,206,206,182,250,60,190,190,190,168,86,173,26,122, - 244,232,129,231,159,127,30,57,57,57,80,40,20,247,135,216,139,34,116,217, - 217,56,121,242,4,142,255,126,18,39,255,56,129,116,7,61,151,155,51,103, - 14,38,79,158,92,166,207,81,169,84,104,215,174,29,58,118,236,136,134,13, - 27,226,244,233,211,56,112,224,0,78,158,60,105,83,93,124,124,124,48,108, - 248,112,244,236,209,195,37,207,65,73,194,128,35,114,29,151,5,92,81,10, - 133,2,42,149,10,42,149,10,57,57,57,184,113,227,6,82,83,83,145,149, - 149,5,163,209,8,79,79,79,168,213,106,212,174,93,27,6,131,1,190,190, - 190,168,94,189,58,204,102,51,204,102,51,242,242,242,30,218,90,81,40,20, - 240,246,242,194,181,235,215,177,245,127,219,241,247,95,167,112,227,198,117,187, - 180,114,252,252,252,48,127,254,124,140,24,49,194,166,243,52,107,214,12,125, - 250,244,65,163,70,141,112,249,242,101,108,217,178,5,151,46,93,66,86,86, - 86,185,206,215,166,77,27,132,135,135,35,32,32,0,65,65,65,0,192,77, - 90,157,136,1,71,228,58,21,38,224,92,65,169,84,66,169,84,96,231,174, - 125,216,250,191,141,72,73,73,65,78,78,78,185,206,21,22,22,6,141,70, - 131,221,187,119,219,173,126,129,129,129,24,58,116,40,90,183,110,141,196,196, - 68,172,88,177,2,177,177,177,208,233,116,229,58,159,74,165,66,239,222,189, - 209,171,215,63,225,235,171,133,151,23,71,97,58,26,3,142,200,117,42,117, - 192,149,228,246,237,59,88,179,102,45,14,30,220,87,166,207,155,49,99,6, - 254,245,175,127,57,168,86,210,51,204,46,93,186,32,34,34,2,30,30,30, - 248,238,187,239,112,240,224,65,155,206,217,179,103,79,12,31,62,156,243,234, - 28,136,1,71,228,58,12,184,18,8,130,0,147,201,132,172,172,44,252,249, - 231,41,172,254,113,13,238,164,166,150,90,94,163,209,96,230,204,153,24,55, - 110,156,83,234,167,86,171,17,26,26,138,254,253,251,163,126,253,250,216,181, - 107,23,214,174,93,91,174,115,169,84,42,248,251,251,99,236,216,177,104,222, - 188,57,12,6,131,157,107,91,185,49,224,136,92,135,1,247,16,150,103,131, - 169,169,169,136,187,22,135,189,251,246,227,215,95,10,183,156,6,12,24,128, - 140,140,12,187,118,79,90,203,203,203,11,189,122,245,66,135,14,29,48,101, - 202,20,155,206,245,244,211,79,99,252,248,241,124,70,103,71,12,56,34,215, - 41,243,142,222,149,141,101,0,139,159,159,31,154,53,111,134,86,173,91,97, - 210,164,137,56,125,234,79,28,251,237,56,78,28,255,13,207,63,255,124,177, - 185,111,206,146,155,155,11,173,86,139,223,127,255,221,230,115,221,189,123,55, - 255,239,217,57,217,72,191,147,142,90,33,181,242,151,7,203,205,205,229,51, - 59,34,114,27,12,184,50,178,116,225,53,105,210,4,77,155,54,197,91,111, - 142,194,111,191,253,230,178,250,244,236,217,19,65,65,65,152,55,111,158,77, - 231,241,244,244,196,196,137,19,1,0,55,19,110,97,220,187,99,243,95,123, - 252,241,38,72,73,73,69,255,1,253,209,245,153,174,54,93,135,136,200,89, - 24,112,54,48,155,205,48,26,141,216,187,119,175,75,174,223,181,107,87,212, - 175,95,223,230,112,3,128,137,19,39,194,215,215,23,91,54,111,193,15,203, - 127,40,244,218,153,51,103,1,0,241,113,241,54,95,135,136,200,89,184,149, - 180,141,4,65,192,225,195,135,157,126,221,176,176,48,212,174,93,27,11,23, - 46,180,249,92,141,27,55,70,187,118,237,112,242,228,201,98,225,102,161,84, - 42,49,106,212,40,155,175,69,68,228,44,108,193,217,104,221,186,117,78,191, - 230,147,79,62,137,144,144,16,252,240,195,15,118,57,223,180,105,211,112,231, - 78,26,62,253,180,244,193,70,38,147,9,35,134,13,67,64,80,0,158,239, - 221,27,97,79,119,134,217,108,230,128,20,34,170,176,24,112,54,240,240,240, - 192,161,67,135,156,122,205,86,173,90,161,110,221,186,229,158,22,80,212,226, - 197,139,17,16,16,128,225,195,135,63,180,108,234,157,59,72,189,115,7,231, - 207,95,196,220,249,95,33,56,248,17,180,106,217,18,3,7,15,130,86,235, - 203,41,6,68,84,161,48,224,108,16,23,23,135,235,215,175,59,237,122,173, - 91,183,70,187,118,237,236,210,45,9,0,35,70,140,64,80,80,16,102,204, - 152,129,196,196,196,98,175,11,2,80,218,160,73,179,89,196,173,91,183,176, - 237,214,45,108,219,177,3,205,154,61,142,110,221,122,160,83,167,78,16,69, - 209,46,187,36,16,17,217,130,1,103,131,5,11,22,56,237,90,45,90,180, - 64,151,46,93,48,119,238,92,187,156,175,94,189,122,232,221,187,55,142,30, - 61,138,35,71,142,148,88,230,65,51,2,4,0,74,0,38,0,34,128,191, - 254,58,131,191,254,58,131,121,243,230,161,87,207,30,104,216,168,17,26,55, - 110,130,160,160,32,134,29,17,185,4,3,174,156,20,10,5,174,92,185,226, - 148,107,253,227,31,255,192,139,47,190,136,175,190,250,10,62,62,62,101,218, - 109,161,36,90,173,22,95,127,253,53,210,211,211,49,103,206,156,50,125,174, - 101,85,47,81,4,140,144,130,206,67,0,12,5,194,112,199,206,93,216,177, - 115,23,0,224,233,167,59,98,240,224,8,4,6,6,114,159,58,34,114,42, - 6,92,57,8,130,128,45,91,182,56,252,134,45,8,2,70,140,24,129,222, - 189,123,195,104,52,98,233,210,165,80,40,20,48,24,12,248,238,187,239,176, - 111,223,190,114,181,142,230,205,155,135,220,220,92,140,25,51,166,204,19,183, - 139,21,47,18,110,69,29,58,244,11,14,29,250,5,77,26,61,134,201,239, - 77,133,86,235,91,230,250,18,17,149,7,151,234,42,7,131,193,128,136,136, - 8,135,6,156,90,173,198,162,69,139,160,86,171,75,124,221,178,94,230,221, - 244,187,88,246,195,178,82,187,25,139,154,58,117,42,218,183,111,143,249,243, - 231,99,255,254,253,118,172,241,195,9,130,128,208,208,16,204,154,53,7,74, - 101,229,152,161,194,165,186,136,92,135,45,184,50,18,4,1,151,46,93,114, - 104,184,189,242,202,43,232,223,191,255,3,87,249,23,69,17,10,133,2,85, - 171,85,197,228,201,147,145,149,149,133,155,55,19,176,99,199,246,82,119,25, - 120,237,181,215,208,190,125,123,108,221,186,213,233,225,6,72,117,190,118,45, - 30,175,190,250,10,6,12,232,143,136,136,161,48,24,242,156,94,15,34,170, - 28,216,130,43,163,220,220,92,68,68,68,56,228,220,53,106,212,192,228,201, - 147,209,176,225,99,208,235,203,247,156,77,165,82,193,100,50,227,194,249,243, - 248,243,244,105,92,187,42,61,39,236,218,181,43,158,124,242,73,228,229,229, - 97,228,136,145,208,233,203,183,167,156,61,213,174,29,130,183,223,30,131,199, - 26,54,134,33,79,158,65,199,22,28,145,235,48,224,202,192,195,195,3,139, - 22,71,97,215,206,29,118,63,247,171,175,190,138,33,67,134,96,211,166,77, - 56,113,226,36,198,140,25,3,127,255,42,54,45,110,172,80,8,80,42,165, - 70,122,193,57,106,62,62,62,56,118,236,24,182,108,217,130,83,167,78,217, - 92,119,91,61,219,245,89,188,241,198,8,40,85,30,174,174,138,221,49,224, - 136,92,135,93,148,101,112,254,194,5,187,135,91,157,58,117,48,119,238,92, - 220,188,121,19,131,6,13,202,95,209,127,228,200,17,152,48,113,18,218,183, - 123,170,220,231,54,155,69,152,205,197,39,95,103,103,103,163,121,243,230,120, - 226,137,39,160,80,40,16,29,29,141,195,135,15,35,61,61,189,220,215,178, - 197,222,159,247,194,104,50,98,220,184,113,48,24,12,247,90,161,92,33,133, - 136,108,195,22,156,149,188,188,188,240,198,27,163,145,148,116,203,46,231,83, - 169,84,120,239,189,247,208,180,105,83,204,154,53,171,212,150,148,183,70,131, - 133,11,254,3,63,95,173,93,174,91,26,165,82,137,196,196,68,204,157,51, - 7,215,226,227,157,26,48,173,90,181,194,135,31,126,136,97,175,13,65,218, - 221,76,180,104,212,16,211,62,254,56,191,245,233,206,216,130,35,114,157,202, - 49,148,205,14,86,175,94,99,183,112,235,216,177,35,54,108,216,128,228,228, - 100,68,68,68,60,176,155,48,71,167,195,200,17,195,176,104,81,20,188,189, - 188,30,56,240,196,22,38,147,9,129,129,129,152,53,123,54,86,174,92,137, - 200,200,72,135,93,171,160,102,205,154,225,223,255,254,55,134,13,27,134,180, - 187,153,0,128,83,231,47,96,115,204,127,161,84,42,29,126,125,34,146,47, - 247,255,21,217,9,140,70,19,54,108,88,111,183,243,189,247,222,123,152,56, - 113,34,46,94,180,238,55,123,81,4,126,254,121,15,126,253,245,23,4,5, - 5,226,229,87,6,161,99,88,59,135,173,16,226,225,225,129,174,93,187,226, - 153,46,207,224,102,194,77,252,223,218,181,56,114,244,168,221,175,211,176,97, - 67,204,154,53,11,163,70,141,66,90,90,90,161,215,154,55,111,5,47,47, - 47,228,230,230,178,187,146,136,202,69,57,237,213,128,143,47,155,185,137,101, - 105,20,10,5,198,143,31,95,104,183,107,91,76,154,52,9,241,241,241,248, - 223,255,254,247,208,178,130,32,64,165,82,229,79,73,48,153,140,200,200,200, - 192,145,195,191,226,248,241,227,104,209,162,37,180,90,141,93,234,85,114,5, - 0,63,63,63,116,234,220,25,189,123,247,70,173,154,143,226,230,205,155,200, - 204,204,180,249,212,117,234,212,193,130,5,11,16,25,25,89,108,61,207,17, - 35,70,224,209,154,53,49,108,216,48,196,198,198,34,36,36,4,193,193,193, - 110,25,116,13,148,63,99,214,255,221,118,117,53,136,42,37,182,224,30,226, - 183,223,126,199,205,155,55,237,114,46,173,86,139,206,157,59,227,245,215,95, - 47,181,76,235,214,173,209,178,101,75,104,181,90,232,245,122,136,162,152,255, - 247,171,87,175,226,167,159,126,2,0,92,190,124,25,145,145,111,225,139,89, - 179,81,175,126,93,187,212,175,52,6,131,1,222,222,222,232,212,185,11,186, - 247,232,137,83,39,79,98,219,206,157,56,113,226,4,242,202,49,188,191,118, - 237,218,248,246,219,111,241,246,219,111,35,46,46,174,208,107,173,90,181,66, - 183,110,221,48,116,232,80,152,76,38,156,56,113,2,39,78,156,64,211,166, - 77,241,202,43,175,160,89,179,102,220,181,128,136,172,194,65,38,15,96,48, - 24,48,104,208,32,187,157,111,225,194,133,56,116,232,80,137,91,221,120,122, - 122,98,226,196,137,56,116,232,16,126,249,229,151,18,63,63,40,40,8,147, - 39,79,198,23,95,124,129,212,212,212,252,99,223,127,255,61,114,114,114,236, - 86,79,107,40,20,10,120,121,122,226,216,111,191,97,243,166,141,184,126,51, - 161,88,55,99,73,106,214,172,137,37,75,150,96,226,196,137,56,119,238,92, - 161,215,106,212,168,129,168,168,40,12,30,60,184,212,86,98,131,6,13,16, - 25,25,137,58,117,234,184,69,139,142,131,76,136,92,135,45,184,82,40,20, - 10,188,255,254,116,187,157,175,86,173,90,120,244,209,71,17,19,19,83,226, - 235,95,126,249,37,222,125,247,221,82,231,189,53,107,214,12,189,122,245,202, - 15,184,89,179,102,33,45,45,13,201,201,201,72,78,78,134,159,159,159,221, - 234,106,13,179,217,140,236,156,28,52,111,222,28,205,155,55,135,74,165,130, - 209,152,135,29,59,118,225,231,159,247,34,49,49,9,70,163,177,208,115,194, - 160,160,32,44,89,178,4,211,167,79,47,22,110,94,94,94,88,188,120,49, - 166,79,159,254,192,46,208,75,151,46,97,194,132,9,120,244,209,71,241,201, - 39,159,192,223,223,223,97,95,35,17,185,55,6,92,9,4,65,192,47,191, - 28,198,181,107,246,217,45,64,169,84,98,238,220,185,248,252,243,207,75,108, - 105,125,250,233,167,248,232,163,143,74,13,183,58,117,234,96,214,172,89,152, - 63,127,62,0,105,144,202,127,254,243,31,188,253,246,219,0,128,155,55,111, - 58,61,224,138,146,130,76,129,94,189,122,161,87,175,94,16,69,17,102,179, - 25,89,153,153,56,116,96,63,142,254,126,28,179,103,207,198,140,25,51,112, - 242,228,201,98,159,63,119,238,92,196,196,196,224,244,233,211,86,93,47,33, - 33,1,111,188,241,6,106,212,8,198,188,121,95,65,165,226,183,50,17,21, - 198,105,2,37,72,72,72,192,252,249,246,217,119,13,0,158,126,250,105,0, - 192,241,227,199,139,189,166,82,169,112,245,234,213,82,187,247,252,252,252,48, - 119,238,92,44,93,186,20,123,246,236,201,63,190,110,221,58,52,107,214,12, - 0,144,145,145,97,183,186,218,139,32,8,80,42,149,168,226,239,143,231,195, - 251,226,179,207,62,67,108,108,108,137,139,66,143,31,63,30,137,137,137,88, - 182,108,89,153,175,115,235,86,18,6,14,28,136,143,63,254,16,102,179,217, - 41,83,27,136,200,61,48,224,138,240,241,241,193,188,123,45,37,123,208,104, - 52,24,55,110,28,198,143,31,95,226,2,205,53,106,212,192,230,205,155,75, - 252,92,165,82,137,197,139,23,99,243,230,205,248,239,127,255,91,232,181,131, - 7,15,162,105,211,166,0,96,151,81,141,142,100,105,205,61,246,216,99,104, - 217,178,101,161,215,250,245,235,135,144,144,16,124,250,169,109,207,129,207,156, - 57,135,87,94,121,5,209,209,209,80,40,248,109,77,68,12,184,98,206,156, - 57,131,107,87,175,218,237,124,195,135,143,128,193,96,64,100,228,24,52,110, - 220,184,216,235,85,171,86,133,78,87,124,225,99,133,66,129,31,126,248,1, - 199,143,31,199,138,21,43,74,60,183,167,167,39,0,148,123,97,102,103,203, - 205,205,197,71,31,125,136,169,83,167,98,208,160,65,152,246,222,123,249,219, - 14,61,221,177,163,93,174,177,123,247,110,188,244,210,75,216,179,103,15,131, - 142,168,146,227,29,160,136,148,148,20,187,157,171,91,183,110,120,246,89,105, - 142,97,195,134,143,97,214,172,89,248,244,179,153,168,89,179,102,126,153,248, - 248,120,132,132,132,20,250,60,133,66,129,197,139,23,35,33,33,1,243,230, - 205,43,241,220,130,32,228,175,29,89,17,187,40,75,99,52,154,208,186,117, - 107,244,237,219,23,173,218,180,129,201,100,66,104,104,40,198,79,152,128,117, - 235,214,161,75,151,46,240,241,246,182,233,26,102,179,25,81,81,81,24,56, - 112,160,77,139,85,19,145,123,99,192,21,209,169,83,167,66,1,84,94,90, - 173,47,34,35,199,20,154,179,149,151,151,135,134,255,120,12,11,23,46,196, - 152,49,210,0,145,204,204,76,12,31,62,188,208,231,206,156,57,19,162,40, - 226,189,247,222,43,73,78,44,77,0,0,15,201,73,68,65,84,245,252,195, - 135,15,199,31,127,252,1,0,208,87,128,173,111,108,101,50,153,32,8,2, - 198,140,25,131,255,91,183,30,195,95,31,2,47,27,131,206,211,211,147,207, - 228,136,42,49,6,92,17,185,185,185,248,234,171,175,176,120,241,98,180,111, - 223,190,220,231,153,59,247,75,24,141,37,79,72,54,24,12,8,12,12,0, - 32,221,216,15,29,58,132,70,141,26,1,0,38,78,156,136,192,192,64,140, - 30,61,250,129,231,247,243,243,67,124,124,60,0,148,216,197,233,206,114,115, - 115,208,171,247,11,88,181,114,37,102,127,241,69,185,70,136,106,52,26,44, - 93,186,212,1,181,35,34,119,193,177,213,165,168,94,189,58,38,77,154,4, - 163,81,90,30,107,255,254,253,88,189,122,181,85,159,187,96,193,127,80,189, - 122,245,82,187,199,4,65,64,92,124,66,254,191,183,109,219,134,201,147,39, - 67,161,80,96,243,230,205,88,184,112,97,169,231,246,240,240,192,220,185,115, - 49,126,252,248,252,99,58,157,14,130,32,200,178,59,174,110,189,122,88,186, - 116,41,82,83,83,177,102,205,154,82,119,43,47,168,78,157,58,152,61,123, - 54,166,77,155,6,133,66,129,47,190,248,194,45,38,133,19,145,125,177,5, - 247,0,102,179,25,10,133,2,254,254,254,232,223,191,63,214,173,91,135,55, - 223,124,243,129,159,51,111,222,60,212,168,241,200,3,195,70,16,4,100,101, - 101,21,58,54,103,206,28,212,168,81,3,253,251,247,47,113,242,178,183,183, - 55,222,122,235,45,188,242,202,43,24,59,118,108,161,27,118,78,78,110,25, - 191,50,247,34,138,34,170,87,175,142,241,227,199,99,217,178,101,24,61,122, - 52,212,106,117,137,101,59,118,236,136,217,179,103,99,252,248,241,184,124,249, - 50,98,99,99,49,108,216,48,36,38,38,58,185,214,68,228,106,92,170,171, - 140,20,10,5,210,211,211,177,102,205,26,28,57,114,4,122,189,30,130,32, - 160,89,179,230,24,51,38,18,213,170,85,123,232,57,84,42,37,22,45,94, - 138,221,187,182,150,120,254,94,189,122,225,145,71,30,201,15,88,165,82,137, - 140,140,12,236,220,185,179,196,77,73,67,67,235,96,254,252,121,149,166,149, - 34,8,2,60,61,61,113,244,232,81,252,244,211,79,248,253,247,223,1,0, - 207,63,255,60,194,195,195,49,105,210,164,18,231,21,78,158,60,25,79,61, - 245,148,83,91,186,92,170,139,200,117,216,69,89,70,102,179,25,126,126,126, - 136,140,140,196,132,9,19,0,72,55,220,188,188,60,171,23,1,22,4,5, - 50,50,75,30,249,104,54,155,177,109,219,182,50,213,41,39,39,187,82,13, - 166,16,69,17,185,185,185,120,226,137,39,208,182,109,91,120,121,121,225,210, - 165,88,132,132,212,198,145,35,71,74,156,111,8,72,173,228,89,179,102,161, - 126,253,250,78,174,49,17,185,2,187,40,203,201,108,54,67,175,215,67,175, - 215,67,167,211,149,105,133,123,65,16,144,121,183,120,75,172,188,12,6,99, - 165,10,184,130,140,70,35,116,58,29,106,212,120,20,70,163,17,109,219,182, - 197,178,101,203,80,175,94,189,18,203,79,157,58,21,73,73,73,78,174,37, - 17,185,2,3,206,5,20,10,5,50,51,237,23,112,70,163,161,210,6,92, - 73,76,38,19,102,207,158,141,254,253,251,151,248,250,59,239,188,99,215,249, - 142,68,84,49,49,224,92,64,154,164,109,191,201,217,6,3,3,174,40,81, - 20,49,112,224,64,244,236,217,179,196,215,34,35,35,173,218,222,135,136,220, - 23,3,206,5,4,65,176,235,254,109,12,184,146,137,162,136,209,163,71,227, - 229,151,95,46,241,245,209,163,71,67,175,215,59,185,86,68,228,44,12,56, - 23,201,203,179,95,192,85,150,209,147,229,97,52,26,17,17,17,129,1,3, - 6,20,123,77,20,69,76,159,62,157,91,237,16,201,20,3,206,137,148,74, - 37,4,65,137,236,108,235,7,164,88,67,142,19,188,237,41,55,55,23,175, - 189,246,26,194,195,195,139,189,118,253,250,117,236,219,183,207,5,181,34,34, - 71,99,192,57,209,143,63,174,199,128,1,253,48,96,64,56,0,251,118,41, - 150,54,52,158,36,57,57,57,120,253,245,215,209,186,117,235,98,175,253,244, - 211,79,80,42,149,46,168,21,17,57,18,3,206,73,204,102,51,182,108,217, - 88,224,136,125,91,93,28,250,254,112,6,131,1,227,198,141,43,118,60,54, - 54,54,127,235,33,34,146,15,6,156,19,57,178,149,149,154,154,234,176,115, - 203,137,143,143,15,34,34,34,10,29,51,26,141,248,235,175,191,92,84,35, - 34,114,20,6,156,19,57,50,224,220,105,79,56,87,18,69,17,189,122,245, - 42,118,252,226,69,46,167,69,36,55,28,62,230,36,162,40,58,100,180,163, - 66,161,64,135,14,29,74,220,45,156,74,86,210,160,156,219,183,111,187,160, - 38,68,228,72,12,56,39,17,69,17,29,58,116,128,40,138,72,79,79,199, - 141,27,55,144,149,149,101,211,8,200,166,77,155,226,203,47,191,68,118,118, - 54,140,70,163,29,107,43,111,37,189,87,156,71,72,36,63,12,56,39,81, - 169,84,249,123,184,41,149,74,120,120,120,32,45,45,13,67,135,14,45,82, - 82,128,53,3,80,130,131,131,49,126,252,56,100,102,102,218,191,178,50,38, - 8,2,118,237,218,85,226,113,34,146,23,62,131,115,1,147,201,132,156,156, - 28,168,213,106,204,158,61,187,200,142,213,82,184,61,236,134,59,101,202,20, - 248,249,85,113,96,45,229,107,221,186,117,197,142,181,104,209,194,5,53,33, - 34,71,98,192,185,144,40,138,168,91,183,110,137,131,30,30,214,117,121,230, - 204,25,40,20,252,239,43,171,244,244,244,98,207,66,253,253,253,75,156,31, - 71,68,238,141,119,200,10,224,246,237,59,101,254,28,65,224,196,228,178,82, - 40,20,248,237,183,223,138,29,127,242,201,39,145,151,151,231,130,26,17,145, - 35,49,224,42,128,242,140,174,84,171,189,29,80,19,121,19,4,1,63,252, - 240,67,177,227,45,90,180,224,114,103,68,50,196,128,171,0,210,211,203,190, - 109,139,175,175,47,111,202,101,116,225,194,133,98,45,181,154,53,107,162,75, - 151,46,174,169,16,17,57,20,3,174,2,200,200,200,42,243,231,112,233,201, - 178,241,240,240,192,246,237,219,139,29,127,247,221,119,185,101,14,145,76,49, - 224,42,0,179,185,236,115,216,4,182,222,202,228,238,221,187,56,116,232,80, - 161,99,181,106,213,66,163,70,141,92,84,35,34,114,52,6,92,5,144,155, - 155,91,230,207,241,173,226,235,128,154,200,147,32,8,216,176,97,67,177,227, - 239,190,251,110,185,222,123,34,114,15,12,184,10,160,60,187,123,43,20,74, - 62,131,179,146,183,183,55,118,236,216,81,236,120,221,186,117,93,80,27,34, - 114,22,6,92,5,80,158,128,243,240,224,52,1,107,173,88,177,162,216,242, - 92,211,167,79,119,81,109,136,200,89,24,112,46,38,138,98,185,118,25,240, - 242,226,52,1,107,120,123,123,23,91,154,75,165,82,161,105,211,166,108,1, - 19,201,28,3,206,77,113,21,19,235,236,217,179,7,119,239,222,45,116,108, - 236,216,177,80,169,184,12,43,145,220,241,46,233,98,162,40,178,37,225,64, - 223,125,247,93,161,127,251,250,250,34,44,44,140,239,57,81,37,192,128,115, - 83,74,37,159,193,61,76,108,108,44,116,58,93,161,99,131,6,13,114,232, - 198,179,68,84,113,48,224,92,172,188,45,56,182,64,30,238,147,79,62,41, - 244,111,127,127,127,244,233,211,199,69,181,33,34,103,99,192,85,0,15,111, - 81,20,223,58,135,207,144,30,236,214,173,91,197,230,184,117,239,222,189,92, - 35,86,137,200,61,49,224,42,128,7,239,253,166,132,53,27,160,210,125,42, - 149,10,159,125,246,89,161,99,10,133,2,131,6,13,114,81,141,136,200,21, - 24,112,21,94,201,59,13,112,7,234,210,157,62,125,26,137,137,137,133,142, - 189,240,194,11,229,218,181,129,136,220,23,251,185,92,172,232,51,56,173,86, - 11,141,70,3,65,16,160,211,233,242,119,255,46,218,141,201,105,2,37,243, - 244,244,196,55,223,124,83,236,248,11,47,188,192,193,37,68,149,12,3,206, - 197,10,78,244,110,223,190,61,166,76,153,82,104,213,13,81,20,97,52,26, - 49,115,230,76,156,57,115,38,255,56,3,174,100,187,118,237,194,237,219,183, - 11,29,171,95,191,62,2,2,2,184,238,36,81,37,195,128,115,49,15,15, - 15,124,254,249,231,8,10,10,130,175,175,111,177,37,165,4,65,128,135,135, - 7,62,249,228,19,164,166,166,98,249,242,229,56,115,230,12,52,26,13,71, - 82,22,161,86,171,75,220,208,244,197,23,95,228,142,221,68,149,16,3,174, - 2,168,87,175,30,128,7,15,253,23,69,17,213,171,87,199,228,201,147,33, - 8,66,177,32,36,96,249,242,229,37,238,237,214,172,89,51,254,50,64,84, - 9,49,224,220,12,7,74,148,204,203,203,11,155,55,111,46,118,252,133,23, - 94,64,149,42,85,248,190,17,85,66,12,56,146,133,156,156,28,44,95,190, - 28,183,110,221,194,201,147,39,113,232,208,33,232,116,58,12,26,52,136,225, - 70,84,73,49,224,72,22,4,65,128,82,169,68,173,90,181,80,171,86,45, - 244,237,219,23,10,133,2,6,131,193,213,85,35,34,23,97,192,145,44,153, - 76,38,182,220,136,42,57,142,53,39,34,34,89,98,192,17,17,145,44,49, - 224,136,136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28,17, - 17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89, - 98,192,17,17,145,44,49,224,136,136,72,150,84,0,208,195,99,186,171,235, - 65,68,68,100,87,130,32,8,220,9,146,136,136,100,135,93,148,68,68,36, - 75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136,136,100,137,1, - 71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44,49,224,136,136, - 72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28,17,17,201,18, - 3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89,98,192,17, - 17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56,34,34,146, - 37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128, - 35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68,68, - 36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136,136,100,137, - 1,71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44,49,224,136, - 136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28,17,17,201, - 18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89,98,192, - 17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56,34,34, - 146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196, - 128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68, - 68,36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136,136,100, - 137,1,71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44,49,224, - 136,136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28,17,17, - 201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89,98, - 192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56,34, - 34,146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68,178, - 196,128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24,112, - 68,68,36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136,136, - 100,137,1,71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44,49, - 224,136,136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28,17, - 17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89, - 98,192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56, - 34,34,146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68, - 178,196,128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24, - 112,68,68,36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136, - 136,100,73,200,136,105,40,186,186,18,68,68,68,101,85,165,239,197,7,190, - 174,2,0,191,240,11,86,157,44,35,166,33,202,85,254,194,50,235,202,55, - 28,6,0,240,189,110,93,195,50,51,196,12,0,240,236,179,221,170,242,121, - 91,255,41,213,167,140,245,255,242,228,64,171,202,79,106,245,35,0,64,89, - 111,170,85,229,77,87,102,1,0,254,47,101,138,85,229,95,9,156,13,0, - 168,253,122,146,85,229,227,127,8,6,0,252,100,250,204,170,242,221,148,239, - 3,0,252,94,180,242,253,217,92,190,239,135,73,219,207,91,85,254,203,127, - 54,2,0,156,244,143,178,170,124,171,244,209,0,128,141,233,211,172,42,223, - 207,255,115,0,192,197,111,67,173,42,255,88,100,92,185,202,251,110,239,108, - 85,249,204,127,30,144,202,207,244,179,174,252,7,25,82,249,164,9,214,149, - 15,158,7,0,248,113,110,144,85,229,7,78,76,6,0,12,168,101,221,215, - 187,225,70,92,185,202,79,122,209,186,247,231,203,205,229,123,127,126,124,209, - 186,247,103,224,102,233,253,233,157,101,221,251,179,77,43,189,63,195,86,14, - 179,170,252,178,33,210,125,208,47,220,186,239,255,140,24,233,251,127,250,207, - 219,172,42,255,105,215,222,210,249,203,248,243,27,253,229,34,171,202,143,154, - 244,22,0,224,236,191,223,181,170,124,147,15,191,6,0,104,91,204,177,170, - 124,214,169,201,0,128,141,121,235,173,42,223,207,243,165,135,150,97,23,37, - 17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34, - 89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12, - 56,34,34,146,37,6,28,17,17,201,18,151,234,34,34,34,183,244,176,165, - 186,216,130,35,34,34,89,82,1,192,65,213,55,86,21,238,100,28,11,160, - 236,107,15,122,120,206,183,170,188,33,111,60,0,224,239,206,95,88,85,190, - 233,129,247,0,0,119,162,234,90,85,190,218,232,171,0,128,25,255,232,101, - 85,249,127,197,238,0,0,156,14,248,222,170,242,205,83,71,0,0,230,253, - 105,221,218,149,19,90,74,107,87,30,63,53,200,170,242,109,90,172,1,0, - 252,28,174,179,170,124,215,24,13,0,199,175,45,89,214,242,232,106,221,90, - 124,248,89,90,139,79,91,55,210,170,226,89,87,191,5,0,248,190,104,221, - 249,51,55,75,231,31,27,211,222,170,242,223,132,31,1,0,248,89,121,254, - 12,39,157,191,172,239,127,76,70,87,171,202,135,251,253,12,0,120,62,196, - 186,181,10,255,119,93,90,171,176,172,245,143,201,80,91,89,31,189,116,254, - 50,126,189,101,93,43,114,246,241,135,175,113,8,0,83,218,172,47,87,125, - 234,141,188,109,85,249,43,223,85,7,0,172,75,126,199,170,242,47,7,45, - 144,234,83,198,247,191,172,239,143,175,149,95,111,230,189,175,247,219,243,111, - 89,85,62,178,145,244,125,246,207,46,129,86,149,223,190,63,229,161,101,216, - 130,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68, - 68,36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136,136,100, - 137,1,71,68,68,178,196,128,35,34,34,89,226,90,148,68,68,228,150,30, - 182,22,165,202,73,245,32,34,146,157,135,221,96,201,181,84,64,217,215,238, - 43,235,90,103,83,118,90,183,150,218,236,158,210,90,106,99,255,107,229,218, - 125,253,239,173,221,87,198,181,224,54,166,79,179,170,124,63,255,207,1,148, - 125,237,184,178,214,199,247,69,235,206,159,185,217,57,231,255,126,173,96,85, - 249,17,175,74,141,255,39,102,61,107,85,249,63,166,238,45,87,125,202,90, - 190,172,107,129,150,253,253,183,242,251,63,166,124,107,69,14,74,178,238,252, - 107,130,165,243,103,190,245,179,85,229,125,23,73,107,80,150,117,45,193,50, - 223,31,46,44,179,170,124,70,67,105,13,196,30,191,44,182,170,252,174,142, - 111,2,0,118,143,152,105,85,249,238,223,127,0,0,56,97,229,215,219,250, - 222,215,123,162,138,117,245,105,125,247,77,171,202,145,235,240,25,28,17,17, - 201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34,89,98, - 192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56,34, - 34,146,37,6,28,17,17,201,18,215,162,36,34,42,39,46,213,85,177,9, - 130,32,48,224,136,136,72,118,216,69,73,68,68,178,196,128,35,34,34,89, - 98,192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12,56, - 34,34,146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68,68, - 178,196,128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150,24, - 112,68,68,36,75,12,56,34,34,146,37,6,28,17,17,201,18,3,142,136, - 136,100,137,1,71,68,68,178,196,128,35,34,34,89,98,192,17,17,145,44, - 49,224,136,136,72,150,24,112,68,68,36,75,12,56,34,34,146,37,6,28, - 17,17,201,18,3,142,136,136,100,137,1,71,68,68,178,196,128,35,34,34, - 89,98,192,17,17,145,44,49,224,136,136,72,150,24,112,68,68,36,75,12, - 56,34,34,146,37,6,28,17,17,201,18,3,142,136,136,100,137,1,71,68, - 68,178,196,128,35,34,34,89,98,192,17,17,145,44,49,224,136,136,72,150, - 24,112,68,68,36,75,12,56,34,34,146,165,255,7,189,147,254,196,244,115, - 11,44,0,0,0,0,73,69,78,68,174,66,96,130, + 157,121,124,84,213,249,255,63,207,93,102,201,76,246,133,16,246,69,130,32, + 139,2,162,168,224,134,130,95,91,89,52,184,98,69,253,218,133,186,212,221, + 218,150,170,181,42,88,212,210,234,183,86,20,173,250,51,110,168,173,162,84, + 81,177,128,128,8,42,8,8,202,150,16,200,158,204,76,102,230,46,207,239, + 143,123,239,100,102,50,147,76,146,9,46,189,111,94,195,204,156,123,238,57, + 231,222,185,185,207,125,206,121,206,249,80,211,242,82,134,141,141,205,119,130, + 236,153,59,191,237,38,216,216,252,96,144,0,32,107,198,14,74,180,145,153, + 37,34,82,173,247,100,133,88,70,114,212,61,119,157,21,230,235,222,20,101, + 97,219,113,63,57,246,79,141,95,53,173,205,233,155,189,239,181,27,254,25, + 76,165,49,86,57,86,123,102,252,249,71,174,176,47,60,180,207,216,222,199, + 215,236,170,189,176,233,80,243,84,2,45,145,51,228,219,213,160,58,27,132, + 167,114,251,231,46,201,27,152,179,102,223,134,3,159,56,51,157,251,94,253, + 197,235,193,248,114,186,202,247,176,28,239,121,37,189,243,1,224,181,202,131, + 181,0,124,237,149,179,169,255,99,127,247,56,188,87,29,8,238,251,244,144, + 118,232,181,44,127,214,90,205,169,125,120,217,73,151,119,233,247,234,110,123, + 226,203,185,122,221,5,94,17,210,137,117,225,154,231,155,106,155,27,114,11, + 114,206,1,128,250,154,134,55,179,242,51,115,242,28,5,23,105,80,215,62, + 126,194,139,190,142,202,251,217,199,23,15,243,169,77,143,214,55,214,15,204, + 205,206,157,254,204,73,255,220,25,157,94,91,87,55,32,63,47,239,28,0, + 168,173,171,123,51,63,47,111,175,87,202,250,217,163,19,159,219,9,0,151, + 253,231,220,97,245,141,245,111,229,102,231,238,177,210,165,12,209,197,204,127, + 169,127,254,168,121,237,157,135,138,69,139,10,28,192,0,200,64,198,224,210, + 170,140,115,207,173,37,162,54,231,216,126,216,180,177,73,47,146,245,129,153, + 31,0,112,51,128,200,31,25,17,9,230,187,202,204,107,1,76,180,54,1, + 104,2,48,130,136,42,172,252,178,179,191,167,207,164,1,82,233,143,143,26, + 189,229,233,207,159,26,112,114,255,197,154,79,91,53,126,238,113,155,250,140, + 43,169,125,237,186,212,12,29,0,204,120,228,92,87,160,46,112,124,81,105, + 225,244,3,155,43,111,27,61,99,36,182,188,242,5,220,89,174,18,95,181, + 255,204,194,210,130,145,117,223,212,97,240,228,129,243,63,123,233,243,249,249, + 67,243,239,168,222,81,243,50,128,152,71,96,102,62,6,192,109,0,194,41, + 84,43,2,248,28,192,146,248,27,16,51,187,172,243,69,68,9,111,212,113, + 249,147,62,20,116,244,192,16,149,207,155,98,125,231,255,105,244,232,235,123, + 187,92,195,65,200,6,128,139,250,245,107,168,12,6,119,252,106,203,103,15, + 1,120,41,209,78,13,193,122,236,109,222,131,170,252,131,199,246,174,46,57, + 182,201,219,184,210,169,185,199,189,187,254,221,141,1,209,191,250,71,227,126, + 156,242,239,149,142,246,68,115,217,127,206,245,186,69,207,200,22,205,255,98, + 177,187,79,118,94,239,80,158,6,53,3,0,178,123,231,14,118,136,78,106, + 209,252,47,186,69,207,217,151,253,231,220,173,207,156,244,207,164,231,232,231, + 31,95,234,117,139,238,179,37,146,79,247,230,103,129,32,228,254,252,227,75, + 93,0,164,72,122,81,22,0,228,2,128,183,40,107,136,68,242,16,135,224, + 56,251,231,31,95,90,9,64,5,144,235,205,207,26,44,145,60,216,74,95, + 54,235,37,4,235,146,95,86,99,178,179,103,60,117,210,164,91,149,205,159, + 142,161,220,60,55,8,104,216,181,87,241,127,186,169,34,188,127,255,98,71, + 191,126,143,116,226,156,218,216,216,116,18,41,234,115,177,249,158,236,105,188, + 48,110,91,70,220,254,240,102,186,243,4,89,64,70,97,6,78,184,118,2, + 106,190,170,187,97,219,171,219,111,56,250,188,210,123,212,122,117,245,113,151, + 140,221,180,233,217,205,53,29,53,106,214,95,207,115,249,170,125,199,231,15, + 206,187,160,230,235,218,249,199,94,48,6,186,174,163,116,234,81,216,246,175, + 47,103,1,180,177,122,103,205,205,227,46,29,139,176,47,140,163,207,25,142, + 173,255,252,242,222,194,210,2,229,236,187,207,124,30,216,31,93,220,157,0, + 230,116,120,38,90,209,1,188,8,96,111,92,122,13,0,15,140,7,0,161, + 189,2,152,121,30,128,27,1,140,76,146,229,11,102,254,49,17,37,237,143, + 98,230,57,0,158,135,113,206,147,122,126,227,115,114,215,46,30,59,122,98, + 142,44,83,142,44,35,202,5,40,104,84,148,130,143,78,157,50,233,87,91, + 62,91,189,190,190,126,74,252,190,245,45,245,130,38,105,80,60,97,236,116, + 126,9,185,218,57,117,162,52,105,106,141,124,120,105,145,82,12,0,43,219, + 59,206,116,183,199,98,238,127,126,236,202,146,179,135,54,132,235,150,23,58, + 123,101,203,130,3,204,76,50,28,133,102,22,202,16,61,144,73,206,174,14, + 29,90,158,45,231,78,159,251,159,31,111,127,250,164,215,219,24,228,171,215, + 93,224,146,4,105,164,95,245,61,144,227,200,67,80,107,1,128,162,160,214, + 2,135,232,140,73,215,161,23,1,128,0,1,46,209,141,134,112,221,3,14, + 209,185,62,172,133,182,184,68,119,17,128,152,244,194,99,115,183,238,127,247, + 80,194,99,152,222,171,232,253,63,28,115,204,228,28,102,66,77,13,194,213, + 213,214,38,89,249,122,247,192,240,238,221,15,251,62,254,248,82,239,196,137, + 199,119,246,28,219,216,216,164,70,244,141,186,219,221,35,46,151,44,75,146, + 4,48,160,51,144,59,40,7,167,254,238,20,64,224,59,183,173,216,241,214, + 128,51,251,255,100,234,239,79,159,60,106,214,72,111,123,229,248,171,125,253, + 11,135,21,76,175,223,223,48,127,236,236,81,80,130,10,180,176,134,230,170, + 102,144,64,96,230,146,254,19,250,94,247,217,75,91,65,162,113,239,63,122, + 122,41,14,239,168,94,8,198,113,113,197,133,58,121,24,122,146,116,183,249, + 158,212,216,48,115,14,51,127,10,224,9,0,71,183,83,71,41,12,35,247, + 92,59,121,38,180,87,23,0,156,94,88,184,126,233,248,227,78,232,239,118, + 83,166,36,65,99,134,30,245,202,148,36,244,115,187,233,137,241,227,38,79, + 47,238,245,126,252,254,74,88,145,25,12,141,85,168,154,134,80,78,11,62, + 206,252,15,242,148,130,121,0,198,191,187,246,93,87,178,186,63,56,234,168, + 54,191,97,119,219,51,234,218,33,125,126,180,242,100,151,87,202,26,122,56, + 88,245,66,158,163,160,216,37,186,33,9,18,136,8,230,249,32,34,130,36, + 72,112,137,110,228,57,10,138,15,7,171,94,240,74,89,67,175,88,51,179, + 77,123,93,66,70,175,170,150,138,187,61,146,215,101,149,67,68,78,89,112, + 196,164,3,128,0,65,20,32,136,0,32,9,18,60,146,215,85,213,82,113, + 183,44,56,122,17,145,211,170,215,74,31,126,197,128,146,68,231,230,248,220, + 220,15,30,24,61,122,74,190,195,65,4,40,0,150,179,32,48,4,1,16, + 4,64,215,161,30,58,132,186,69,11,39,4,183,126,177,54,217,57,182,177, + 177,233,30,237,122,34,157,46,76,4,50,50,50,224,150,92,16,204,123,51, + 1,40,30,211,11,83,239,59,77,240,213,248,22,238,254,207,215,255,26,118, + 238,208,43,206,184,253,212,177,167,223,54,37,114,67,58,119,225,180,200,103, + 6,78,172,221,85,123,219,152,89,199,64,13,107,134,81,211,25,172,3,172, + 51,192,104,169,216,124,240,189,162,225,133,215,125,249,214,142,72,253,162,36, + 34,187,36,235,172,116,30,83,170,48,179,4,195,203,27,155,226,46,50,128, + 139,152,185,130,153,71,36,216,174,180,183,243,96,175,231,218,187,71,142,152, + 144,29,235,37,181,109,23,128,44,73,194,189,35,71,78,62,54,59,103,70, + 244,54,127,109,83,38,27,109,7,192,80,89,133,174,107,208,140,170,135,170, + 186,42,61,249,239,165,83,173,215,223,222,127,204,5,0,111,207,248,31,23, + 19,13,76,119,123,68,135,48,178,208,91,212,191,65,169,125,180,216,221,103, + 152,101,220,44,76,227,20,249,110,25,185,98,119,159,97,13,74,237,163,110, + 209,211,127,222,218,89,145,235,104,254,250,203,10,36,65,154,84,236,238,51, + 213,37,186,33,64,0,51,131,153,61,146,32,157,26,157,30,143,229,197,21, + 187,251,76,149,4,233,84,102,246,48,115,76,122,73,73,201,201,142,76,89, + 142,219,245,252,7,199,140,62,37,75,146,34,231,97,224,138,183,103,18,227, + 24,6,106,163,14,6,122,115,51,170,23,45,154,104,122,235,54,54,54,105, + 38,173,6,206,66,134,12,175,228,133,91,118,3,68,96,243,47,125,200,212, + 65,56,253,174,83,189,7,119,84,61,114,224,203,138,23,178,7,103,205,57, + 105,254,137,195,206,188,243,52,87,176,57,116,138,181,127,118,73,214,84,209, + 41,2,108,24,52,165,69,129,18,84,160,134,85,232,26,131,153,53,48,239, + 58,188,163,250,181,130,33,249,55,111,253,215,151,96,157,49,244,212,193,168, + 63,208,48,191,39,142,41,17,166,81,3,51,175,135,97,144,196,46,20,83, + 2,224,115,115,140,47,85,92,183,13,43,189,161,216,229,74,201,237,102,0, + 57,14,7,45,61,233,196,91,163,211,195,141,254,130,214,2,140,15,172,179, + 245,9,10,43,0,48,134,193,239,132,164,224,13,33,41,120,195,179,239,254, + 227,172,250,83,134,75,154,44,69,119,79,71,183,167,5,198,203,15,35,168, + 196,15,195,139,182,94,10,3,74,162,246,56,115,28,227,90,212,192,31,10, + 156,189,78,206,16,61,112,138,206,14,143,205,41,58,145,33,122,80,224,236, + 117,114,131,82,123,151,68,114,127,107,155,64,226,136,144,22,122,38,67,244, + 196,24,74,0,3,67,90,232,137,4,233,109,12,104,134,232,65,72,11,61, + 1,96,96,124,186,68,242,223,178,135,122,11,162,247,127,112,244,168,235,115, + 100,153,90,127,23,214,1,96,224,138,21,219,6,189,181,162,128,153,159,102, + 235,100,19,129,155,155,169,230,193,69,191,236,240,64,109,108,108,58,141,212, + 113,150,174,35,147,12,89,150,17,84,131,8,235,97,48,51,68,167,128,209, + 23,30,131,96,67,112,216,150,103,191,120,138,53,237,221,156,161,89,79,4, + 14,182,68,188,152,134,202,198,75,70,207,60,6,33,127,24,95,189,187,11, + 186,206,208,21,13,154,170,131,117,6,129,190,10,7,20,188,247,199,127,239, + 157,118,247,212,21,222,34,207,232,157,255,254,234,178,65,39,13,130,40,245, + 136,205,78,136,25,124,163,161,251,15,10,2,12,163,144,82,148,229,149,3, + 7,230,247,118,185,250,200,130,0,157,83,235,89,38,102,228,229,231,143,217, + 119,255,125,5,192,147,70,90,75,56,187,189,125,116,214,92,32,148,234,208, + 113,200,83,57,125,96,243,144,233,117,25,181,43,29,99,251,175,202,61,246, + 152,15,128,45,86,123,178,163,218,243,215,129,111,173,184,169,189,114,247,76, + 159,246,42,49,207,136,111,143,51,207,49,163,192,217,235,248,12,209,3,135, + 224,72,233,184,0,68,242,230,59,138,230,236,109,250,58,18,245,209,16,174, + 91,82,232,236,37,198,151,229,215,154,103,101,73,57,145,244,104,163,22,255, + 221,33,56,224,22,221,98,147,218,48,203,35,102,198,164,103,74,89,98,255, + 179,123,157,0,104,86,178,183,143,219,93,154,45,203,73,127,151,65,43,222, + 190,124,247,143,78,191,69,80,29,155,8,40,209,155,155,161,85,87,15,103, + 102,111,243,107,195,83,62,102,27,27,155,142,57,34,214,192,37,185,144,229, + 200,106,189,105,17,195,153,237,196,41,243,39,225,132,11,79,56,227,240,39, + 213,207,101,100,103,68,186,22,69,81,68,176,49,132,157,255,254,10,14,143, + 99,165,26,84,239,209,20,125,1,107,188,144,136,174,100,240,46,0,56,253, + 246,41,46,65,162,61,77,7,155,171,52,77,135,174,106,72,209,70,116,27, + 115,188,77,71,26,207,33,27,88,119,203,164,150,171,52,211,91,12,112,124, + 215,88,71,133,67,206,205,115,103,200,142,1,86,146,168,163,93,23,201,232, + 184,100,65,23,52,168,78,13,219,123,109,197,97,173,106,106,190,208,251,222, + 234,129,89,231,70,181,167,111,84,123,174,219,51,125,90,210,7,167,61,211, + 167,141,0,112,94,162,246,244,30,85,120,124,220,152,91,74,88,99,99,25, + 82,6,74,188,125,47,179,210,189,82,214,40,183,148,17,83,22,17,193,41, + 184,70,71,167,115,156,49,138,254,78,68,112,75,25,112,10,174,209,241,229, + 56,68,39,122,77,202,203,181,210,102,21,23,231,235,204,57,29,181,119,200, + 27,239,29,26,244,214,138,62,96,252,145,153,53,38,202,105,121,239,189,252, + 148,15,216,198,198,38,37,142,156,187,131,86,67,151,41,100,161,208,145,143, + 124,161,0,133,57,133,56,243,170,51,208,176,183,33,38,154,76,87,53,104, + 154,14,127,77,96,179,228,148,238,215,85,253,126,214,249,183,96,236,18,4, + 97,168,32,10,119,137,178,120,171,26,210,110,205,236,229,29,43,138,2,4, + 169,43,61,132,93,102,59,122,198,154,10,230,148,140,186,180,151,28,23,143, + 169,235,122,74,39,140,25,80,212,48,66,254,16,2,122,0,255,9,127,136, + 208,240,17,183,39,201,46,1,88,211,78,113,31,70,90,17,215,30,167,208, + 218,75,27,111,116,218,111,95,226,188,34,137,208,88,107,179,157,32,36,76, + 79,84,22,51,67,99,13,20,247,167,98,142,229,65,118,180,223,9,194,72, + 62,29,100,224,138,21,119,16,104,3,146,7,54,217,216,216,116,131,35,107, + 224,200,133,124,57,31,197,142,222,200,213,11,160,53,169,56,248,229,65,188, + 241,224,155,156,221,63,251,163,152,134,73,34,68,81,64,86,239,204,98,214, + 120,224,123,127,252,192,8,1,39,12,101,240,19,130,44,220,44,58,133,5, + 162,83,188,51,216,28,156,58,242,199,35,32,72,2,52,85,75,88,119,186, + 33,162,98,0,155,211,92,108,8,192,103,68,116,34,128,162,100,153,182,55, + 251,170,0,106,55,8,37,33,12,69,30,56,168,202,250,170,232,122,135,115, + 241,192,0,116,64,109,210,208,114,184,5,56,0,76,245,76,135,123,215,206, + 183,218,105,207,132,61,211,167,77,140,47,106,207,244,105,203,0,180,122,42, + 113,237,241,171,62,4,181,22,40,122,24,58,244,148,140,28,51,67,135,14, + 69,15,35,160,6,208,162,7,34,219,130,122,192,10,255,143,41,43,89,58, + 16,219,61,105,149,29,212,90,16,140,42,55,38,189,177,53,72,247,149,170, + 170,90,2,53,198,61,245,36,60,136,61,211,166,253,110,207,244,105,97,16, + 78,32,230,38,247,233,167,215,38,202,103,99,99,211,117,142,76,23,37,185, + 144,47,23,32,71,200,133,28,116,32,220,24,198,193,175,14,98,253,139,155, + 160,135,245,251,250,140,238,61,203,87,231,123,211,202,175,169,26,68,89,192, + 176,51,143,130,175,214,127,89,209,209,133,211,206,185,239,236,1,142,12,25, + 68,116,148,32,9,24,117,222,8,140,153,61,10,163,103,140,68,233,212,97, + 8,251,20,236,94,181,27,89,69,153,207,30,137,99,2,0,34,58,22,192, + 95,144,134,41,22,0,246,0,200,33,162,49,230,247,164,150,122,233,158,61, + 181,7,131,193,10,69,239,196,131,191,36,65,42,44,168,200,154,49,35,114, + 35,85,37,242,91,159,219,216,18,142,56,87,186,192,2,244,74,96,178,124, + 26,250,101,247,95,185,191,102,247,29,197,135,212,71,59,104,207,27,49,7, + 55,125,90,47,0,145,238,195,68,237,57,244,105,237,27,13,74,45,2,106, + 32,37,35,23,111,220,26,149,122,84,85,86,45,177,182,215,134,170,215,181, + 168,1,132,180,16,116,211,73,98,102,4,212,192,71,241,233,209,88,70,78, + 135,142,144,22,66,139,26,64,64,13,124,100,181,197,74,15,104,126,84,188, + 95,19,61,17,206,87,217,210,178,189,65,137,121,246,136,177,119,95,159,115, + 206,196,61,211,207,62,12,194,2,0,178,144,153,9,177,176,112,123,42,139, + 7,216,216,216,116,142,30,53,112,46,193,133,2,71,1,114,197,60,56,194, + 14,40,141,97,28,220,117,16,171,159,251,8,13,245,141,139,133,92,204,92, + 247,207,13,143,133,66,161,21,78,143,51,226,17,228,246,205,89,178,235,253, + 175,65,2,97,228,255,28,141,154,221,181,11,139,74,11,206,3,97,40,9, + 36,10,146,0,209,41,25,193,39,26,131,193,104,62,216,4,53,164,162,233, + 80,115,167,39,39,119,7,34,154,15,224,100,0,47,116,163,152,247,136,104, + 80,162,229,155,146,16,188,111,231,142,197,85,193,96,106,125,164,204,144,10, + 10,144,51,111,222,226,232,58,228,108,79,148,215,192,102,183,27,34,230,154, + 32,4,9,180,67,96,1,67,179,143,122,171,202,95,117,71,63,185,255,162, + 204,138,186,63,211,71,235,26,59,104,79,225,158,233,211,126,23,149,103,19, + 172,155,125,146,246,168,45,218,211,13,190,134,37,62,181,9,1,53,0,85, + 87,19,26,32,11,29,58,84,93,69,64,13,192,167,54,161,62,80,183,36, + 167,87,246,34,107,123,182,156,123,171,95,107,14,180,104,254,152,178,242,28, + 5,111,38,74,111,61,93,28,41,187,69,243,195,175,53,7,242,28,5,111, + 70,215,217,162,249,225,83,155,2,21,171,170,63,137,222,247,198,207,63,127, + 168,94,81,152,90,11,19,0,128,167,76,145,190,153,126,246,122,129,245,117, + 0,21,90,231,65,200,204,228,130,27,111,250,115,210,131,180,177,177,233,50, + 105,53,112,214,124,42,39,92,40,116,20,34,87,204,131,28,50,60,182,234, + 61,213,88,243,234,199,104,168,107,92,140,92,204,92,251,250,186,135,253,205, + 254,21,219,94,255,114,239,251,11,87,7,93,89,206,237,86,57,141,149,77, + 239,68,119,53,30,61,173,20,135,182,87,63,92,52,188,232,116,152,19,174, + 89,215,1,157,161,134,85,52,238,111,196,129,45,21,200,40,240,220,7,70, + 252,196,217,206,142,147,17,58,25,93,74,68,107,136,232,66,24,222,92,103, + 96,50,56,163,83,245,1,174,175,125,254,71,30,170,60,184,54,36,138,9, + 220,175,232,26,24,66,102,38,114,127,49,127,131,163,111,236,210,80,222,252, + 236,58,43,143,174,49,212,160,138,150,166,0,160,3,204,188,75,18,68,21, + 140,45,2,9,103,185,28,174,197,25,78,207,226,217,103,93,240,206,197,191, + 88,224,19,131,161,109,41,180,231,215,0,176,103,250,180,123,97,76,135,104, + 183,61,161,186,240,134,140,140,140,69,181,129,154,37,126,173,25,126,213,7, + 85,87,161,154,61,169,214,184,23,128,72,186,95,245,193,175,53,163,54,80, + 179,36,39,35,231,62,102,142,120,84,42,43,155,60,98,230,133,1,205,207, + 1,211,152,1,0,17,237,241,136,153,151,196,167,91,117,88,229,7,52,63, + 2,154,159,61,98,230,37,68,180,39,62,61,172,135,47,111,222,235,143,239, + 90,124,233,87,159,110,249,184,81,81,34,23,222,158,105,211,22,237,201,112, + 183,16,104,66,212,57,67,88,146,80,127,222,140,117,68,212,157,135,35,27, + 27,155,36,164,213,192,145,40,40,189,114,139,145,39,229,193,161,24,30,91, + 245,158,106,172,123,229,99,108,126,255,243,15,216,171,95,188,126,197,134,199, + 252,77,254,21,91,95,255,114,239,7,15,126,20,121,122,127,227,166,183,90, + 189,23,194,166,162,210,194,155,191,124,107,7,88,103,104,138,134,210,179,142, + 194,193,207,171,30,6,161,82,87,117,132,124,97,40,65,21,141,21,141,56, + 176,185,2,238,108,247,18,127,181,239,45,217,35,239,139,107,214,1,243,157, + 83,120,1,64,51,128,70,180,165,195,110,72,211,155,59,27,70,208,64,71, + 249,15,16,145,96,205,165,75,64,210,241,49,6,130,0,240,226,206,157,147, + 66,87,93,189,86,238,221,155,5,143,7,208,245,152,151,224,241,64,234,221, + 155,139,126,255,251,117,158,227,143,111,179,36,84,70,166,199,111,60,36,232, + 80,154,85,180,28,14,34,184,47,132,205,205,155,150,106,172,111,20,73,194, + 21,83,231,173,188,98,234,188,149,243,166,94,185,242,154,255,249,105,228,55, + 154,252,213,87,53,41,180,71,222,115,246,89,107,161,235,183,164,210,30,8, + 56,244,194,41,239,236,205,118,103,47,170,13,214,44,109,84,234,225,87,125, + 109,2,66,172,192,15,191,234,67,163,82,143,218,96,205,210,108,119,246,162, + 103,78,250,103,69,249,228,149,145,54,62,115,210,63,125,45,122,96,147,79, + 105,190,62,160,250,160,178,98,121,107,74,152,67,27,162,211,1,195,59,179, + 188,57,149,21,4,84,31,124,74,243,245,97,14,109,0,160,232,208,99,210, + 107,118,212,111,80,91,180,54,99,161,27,27,27,78,188,110,203,103,27,14, + 180,180,64,7,220,130,64,55,138,68,146,64,4,129,8,26,51,14,180,180, + 224,215,59,191,90,59,106,198,140,73,201,126,103,27,27,155,238,17,125,115, + 237,104,49,226,248,49,161,54,125,71,172,7,53,7,57,16,110,86,209,120, + 184,9,91,223,223,138,96,48,248,129,144,69,79,238,255,116,255,90,79,190, + 123,223,103,47,125,209,97,55,220,219,191,249,119,197,180,123,166,190,94,56, + 172,64,222,246,175,237,247,150,140,46,198,129,205,149,200,27,152,183,176,126, + 79,253,151,158,252,140,87,118,188,243,213,172,222,199,244,66,229,231,85,240, + 228,121,238,243,29,246,189,37,187,228,245,111,222,250,118,16,203,75,163,139, + 123,24,192,215,72,125,18,246,78,34,74,180,94,230,86,0,195,96,204,87, + 75,10,17,189,3,64,100,230,135,218,201,118,51,17,45,234,96,209,229,183, + 0,252,2,198,154,159,73,25,53,99,198,36,102,158,83,243,224,162,95,106, + 53,53,195,1,88,97,234,13,98,65,193,246,130,27,111,250,115,50,15,65, + 132,4,77,209,17,174,11,35,84,21,194,40,26,131,253,142,125,75,15,28, + 62,240,130,164,203,171,111,158,118,107,167,23,91,78,208,158,113,230,166,218, + 142,218,243,233,253,59,131,0,240,204,73,255,220,123,201,71,255,115,87,99, + 184,1,34,137,243,136,8,138,30,134,6,53,104,181,155,136,224,83,155,208, + 24,110,88,234,149,51,239,122,230,164,127,198,175,29,10,0,88,54,233,181, + 138,43,214,204,92,209,172,54,109,115,137,238,17,0,160,234,106,147,162,135, + 107,221,82,70,36,221,52,162,1,192,24,131,83,89,68,179,218,180,205,35, + 121,87,0,168,13,107,161,70,73,144,16,212,90,34,233,91,31,219,144,52, + 48,100,85,117,245,241,151,109,216,120,237,109,165,165,55,20,187,92,125,200, + 156,70,193,32,165,42,24,172,184,111,199,142,197,95,251,253,246,98,203,54, + 54,61,72,196,192,17,209,213,0,174,142,222,24,125,3,38,162,82,116,128, + 206,90,93,243,225,38,108,120,99,35,106,15,212,238,206,28,232,189,187,114, + 103,197,90,103,150,107,223,23,175,110,237,212,205,114,197,157,43,119,78,187, + 103,234,203,185,125,115,190,170,255,166,97,18,169,116,131,183,49,179,254,152, + 163,142,241,175,222,177,250,3,77,215,102,53,125,237,123,169,164,95,201,234, + 218,138,218,247,250,20,246,219,245,212,47,159,110,83,7,17,29,2,240,247, + 206,212,29,143,121,30,198,196,125,111,55,2,145,136,174,111,103,219,34,243, + 61,105,25,68,180,6,64,94,42,237,51,13,198,11,204,236,245,127,240,126, + 62,0,120,166,156,90,75,68,62,220,116,115,210,253,10,60,5,168,247,213, + 99,112,237,81,168,118,30,122,183,38,88,253,238,32,97,200,39,251,229,189, + 31,118,197,184,117,183,61,209,4,181,150,67,30,217,115,127,117,195,225,156, + 80,86,112,86,80,107,209,52,77,107,2,0,81,20,53,151,232,22,155,154, + 154,94,201,202,202,186,63,168,181,36,94,241,216,36,172,135,247,121,36,239, + 245,117,225,154,127,133,180,144,24,14,135,131,245,95,54,75,249,163,178,43, + 243,93,5,145,116,34,58,12,0,204,172,59,69,167,230,145,188,215,135,180, + 208,190,103,79,254,87,240,252,15,207,168,142,79,111,220,237,111,175,90,124, + 237,247,63,242,191,155,54,253,237,202,65,131,178,143,246,122,251,2,192,103, + 245,245,85,79,31,56,80,11,195,235,117,153,239,54,54,54,61,0,217,26, + 84,54,54,223,29,108,193,83,27,155,244,113,68,231,193,217,216,216,216,216, + 216,28,41,218,85,244,46,47,47,151,202,202,202,84,235,61,89,33,150,23, + 56,228,198,115,206,82,249,201,55,5,145,182,13,58,117,208,159,2,85,45, + 107,61,121,25,251,54,44,251,164,75,10,209,19,230,141,115,169,65,117,104, + 222,192,220,227,155,171,154,47,108,105,12,78,5,176,68,114,72,183,107,138, + 54,27,132,167,60,5,158,37,222,66,207,154,154,221,181,159,200,46,121,223, + 250,39,54,254,87,43,122,79,200,205,205,7,128,13,245,245,29,42,104,255, + 105,199,133,127,119,74,174,171,234,148,154,79,27,244,198,215,50,66,238,181, + 186,164,127,248,231,223,252,37,93,138,222,41,145,172,156,147,31,25,227,37, + 162,19,21,159,250,124,184,81,105,112,230,202,231,0,64,168,94,121,211,145, + 45,231,200,94,233,34,102,94,251,209,181,91,58,84,244,158,252,151,177,195, + 20,191,246,104,184,81,25,232,200,150,167,175,189,229,243,157,209,233,161,134, + 240,0,103,142,195,40,191,33,252,166,51,199,177,87,246,136,63,251,240,23, + 155,119,2,192,137,15,140,26,22,110,84,222,114,100,203,123,172,244,84,21, + 189,23,93,116,81,129,76,52,0,0,28,189,122,85,185,70,143,174,189,226, + 138,43,108,69,111,27,155,30,38,50,6,87,94,94,222,70,209,187,172,172, + 76,48,223,213,242,242,242,132,138,222,101,101,101,17,69,111,81,42,240,228, + 149,22,74,37,227,139,71,239,249,96,223,83,133,195,11,22,235,65,125,213, + 144,41,131,54,229,13,206,171,221,240,100,106,134,14,0,38,92,49,206,21, + 246,133,143,207,42,201,154,94,183,167,254,182,254,19,250,98,239,250,253,112, + 184,229,146,96,83,232,204,172,146,204,145,190,195,62,244,58,186,104,254,222, + 117,251,230,103,22,123,239,104,170,108,110,163,232,93,94,94,222,37,69,239, + 178,178,178,152,182,150,151,151,71,20,189,203,202,202,58,156,148,219,222,67, + 65,71,15,12,81,249,188,41,214,119,254,229,3,6,92,159,35,203,17,5, + 237,147,10,242,27,234,195,202,142,101,123,247,38,85,208,246,43,126,84,7, + 171,209,224,173,63,54,183,41,239,216,128,43,176,82,214,29,227,126,251,199, + 223,110,12,9,161,213,247,223,122,127,151,198,135,60,30,207,249,51,74,74, + 174,207,146,229,225,128,209,30,2,26,26,85,101,199,242,138,202,135,252,126, + 127,135,138,222,179,231,206,246,58,182,201,35,181,176,246,162,232,148,178,53, + 69,203,227,106,206,0,0,34,26,44,54,138,164,133,212,23,69,135,120,246, + 236,185,67,183,190,252,244,203,73,207,209,133,87,207,241,202,219,228,179,85, + 85,59,93,215,117,160,26,185,253,255,119,132,139,24,82,124,186,185,203,16, + 161,86,24,34,73,226,217,23,94,93,90,201,4,21,187,144,11,198,96,161, + 70,24,108,165,191,246,220,235,8,182,36,63,69,195,242,243,103,92,60,104, + 208,173,90,101,197,24,202,240,184,1,64,169,175,87,90,246,239,171,248,191, + 133,11,23,95,115,243,205,118,144,137,141,77,15,146,86,69,111,151,219,145, + 71,34,193,145,229,196,176,115,134,162,233,160,239,134,3,235,247,221,208,103, + 66,201,61,186,95,91,61,232,148,129,155,190,89,189,167,67,69,239,137,87, + 77,112,5,155,130,199,123,123,121,47,104,62,212,60,127,208,137,3,160,51, + 163,100,116,111,28,216,116,96,22,64,27,155,14,54,223,60,248,148,129,80, + 131,42,250,30,91,130,253,155,42,238,205,42,201,84,198,204,25,245,124,156, + 45,59,226,138,222,229,229,229,29,42,122,151,151,151,255,184,172,172,44,233, + 128,75,121,121,121,74,138,222,67,60,158,181,151,15,28,48,209,35,138,148, + 33,198,252,28,5,1,77,45,184,123,228,136,73,203,246,236,93,189,203,239, + 111,163,160,237,15,251,5,93,212,161,185,84,28,148,15,64,108,146,167,30, + 37,150,78,109,22,27,151,102,105,57,64,23,20,189,135,23,20,174,157,217, + 167,100,162,91,20,200,45,198,4,174,22,180,104,90,193,117,67,135,78,90, + 94,89,185,122,91,117,117,82,69,239,217,63,153,237,146,156,210,208,112,139, + 178,220,229,117,100,11,146,8,214,153,96,92,131,0,64,146,67,132,32,32, + 59,232,11,47,151,220,210,244,217,63,153,189,253,229,167,94,110,99,109,46, + 152,119,129,139,36,97,100,56,164,60,224,200,144,160,169,4,102,46,210,85, + 29,49,233,10,192,230,242,104,4,64,148,5,132,3,202,3,130,44,172,103, + 85,223,34,72,66,17,17,65,148,40,146,94,80,148,191,245,192,158,138,248, + 42,1,0,227,122,247,122,255,220,226,222,147,221,0,145,223,15,205,23,9, + 72,145,117,65,24,216,92,91,251,240,95,239,188,243,210,159,223,115,143,173, + 232,109,99,211,67,164,85,209,91,150,69,89,20,197,136,162,183,183,40,3, + 35,47,24,14,16,223,121,96,115,229,91,133,163,10,126,50,186,236,152,201, + 253,39,246,107,87,209,59,216,20,236,159,213,59,115,186,191,198,63,127,224, + 9,253,161,42,26,116,85,71,75,67,11,136,12,69,239,130,33,249,215,237, + 93,183,31,100,30,65,159,177,37,104,172,108,90,8,124,123,138,222,229,229, + 229,57,229,229,229,41,43,122,151,151,151,119,75,209,251,152,172,172,245,63, + 27,60,248,132,2,135,131,92,162,8,29,28,243,114,137,34,242,29,14,250, + 217,144,193,147,143,205,201,126,63,126,127,77,85,101,6,67,103,29,154,174, + 67,241,132,241,149,107,59,188,90,214,60,0,227,127,251,135,223,38,213,168, + 251,125,239,222,109,230,239,141,237,213,107,253,197,253,250,158,144,43,203,228, + 18,68,48,35,230,229,18,68,228,200,50,93,216,175,239,228,241,189,139,219, + 180,231,119,189,123,247,185,116,230,84,151,228,144,134,134,124,161,23,28,30, + 71,177,32,139,0,17,64,0,153,146,167,166,174,55,4,89,132,195,227,40, + 14,249,66,47,72,14,105,232,172,43,218,42,122,75,178,216,43,216,212,114, + 183,232,20,93,36,8,70,57,2,57,5,65,136,75,39,16,145,72,68,34, + 136,64,130,0,209,41,186,130,77,45,119,11,130,208,139,4,114,26,251,182, + 166,15,31,115,116,66,69,239,17,133,133,31,156,215,187,100,138,71,148,8, + 128,2,208,114,38,98,227,56,200,152,88,223,220,12,255,170,247,38,60,122, + 247,93,182,162,183,141,77,15,145,94,69,111,1,112,56,29,112,136,114,76, + 193,57,3,179,49,250,226,145,66,176,57,184,240,208,142,67,255,234,125,92, + 241,21,163,102,142,28,123,204,140,17,145,27,210,184,203,198,70,223,156,78, + 108,174,106,190,109,192,196,126,208,84,221,88,27,80,103,107,133,13,0,104, + 169,219,83,255,94,118,159,172,235,14,124,90,217,90,191,40,32,35,55,227, + 91,81,244,46,47,47,239,146,162,119,121,121,121,69,121,121,121,167,21,189, + 123,185,156,215,206,233,215,119,66,134,36,118,168,160,237,22,69,92,212,175, + 223,228,65,25,158,24,5,237,96,115,75,38,208,186,122,135,206,26,152,117, + 232,198,28,243,161,154,174,73,63,255,205,207,166,90,175,107,22,92,237,2, + 128,95,79,56,206,197,64,204,67,74,255,188,220,107,207,41,46,158,224,18, + 59,158,110,232,18,68,156,91,92,60,185,52,191,32,166,61,186,36,142,212, + 114,60,253,131,45,45,143,186,179,220,195,36,89,132,96,26,55,0,177,190, + 44,1,2,17,36,89,132,59,203,61,44,216,210,242,168,40,75,253,103,93, + 217,106,228,202,174,185,160,128,36,97,146,43,203,61,85,148,68,16,153,39, + 132,217,67,18,157,26,157,206,81,103,145,97,216,34,81,18,225,202,114,79, + 37,137,78,5,179,7,140,152,244,172,188,172,147,29,78,71,140,108,145,215, + 235,61,127,70,73,201,41,46,161,245,60,220,178,113,227,76,65,16,142,1, + 115,212,188,57,2,135,66,240,173,90,53,241,241,199,31,183,21,189,109,108, + 122,128,30,137,162,148,32,193,37,186,224,16,29,230,19,171,145,222,107,116, + 17,142,41,27,233,109,168,108,120,164,246,64,221,11,25,189,220,115,74,167, + 13,27,54,106,246,72,87,184,69,137,40,122,103,228,186,167,10,178,96,174, + 100,207,208,194,42,84,69,131,166,106,134,62,50,67,3,243,174,198,202,166, + 215,178,138,51,111,222,191,169,2,96,70,241,136,94,240,215,250,143,152,162, + 183,105,212,80,94,94,222,109,69,111,115,140,47,85,92,51,122,151,220,144, + 35,203,41,43,122,123,36,137,126,86,58,44,70,65,91,13,132,218,42,122, + 115,171,43,175,25,115,251,199,48,240,142,34,42,55,40,162,114,195,181,191, + 253,229,89,254,163,251,72,186,36,198,136,165,158,89,88,116,67,150,44,1, + 41,40,122,3,80,220,162,68,23,13,30,24,211,158,144,55,99,156,79,85, + 254,224,246,184,79,54,186,32,59,142,93,17,4,130,228,16,225,246,184,79, + 110,9,5,238,18,33,70,41,122,11,35,20,69,121,70,146,69,8,66,76, + 23,197,64,69,81,158,104,155,222,186,194,52,195,120,96,147,100,17,138,162, + 68,20,189,163,211,73,196,223,178,114,179,98,20,189,207,235,93,124,189,75, + 140,105,184,14,0,55,175,95,191,237,150,79,62,41,96,160,85,209,27,4, + 4,67,228,127,239,61,91,209,219,198,166,7,232,81,69,111,145,36,184,69, + 9,138,22,134,10,213,88,135,80,38,244,63,169,31,20,191,50,108,239,71, + 251,158,98,93,127,215,83,236,126,34,84,31,142,120,49,254,250,192,37,3, + 142,239,7,53,164,226,224,231,85,96,6,116,77,135,174,181,42,122,171,97, + 13,95,188,240,249,222,177,115,70,175,112,101,59,71,87,126,94,117,89,81, + 105,17,4,241,200,8,158,2,145,224,155,35,174,232,125,122,97,97,126,142, + 195,209,71,34,1,122,170,61,203,204,240,102,102,142,121,244,146,75,10,128, + 141,0,0,10,171,237,42,122,51,235,46,16,74,25,58,26,157,245,211,11, + 131,189,166,251,156,190,149,210,192,130,85,158,129,253,94,142,150,172,203,146, + 229,62,34,17,152,241,215,91,54,110,108,87,209,251,129,241,227,95,37,240, + 140,140,12,207,152,133,23,94,88,0,124,10,0,56,148,155,61,195,155,225, + 61,94,116,72,160,20,140,155,5,9,4,201,33,33,147,189,115,154,235,124, + 145,1,88,37,168,44,113,121,92,34,197,92,19,12,53,168,206,114,184,229, + 72,58,25,201,145,179,47,68,11,155,138,4,135,44,139,74,139,50,75,114, + 73,49,233,78,135,67,236,63,184,223,9,134,13,55,200,150,29,165,110,81, + 76,186,60,232,173,27,55,94,254,135,137,19,111,145,53,109,19,128,18,14, + 133,160,249,125,182,148,183,141,77,15,208,163,6,206,66,22,29,144,225,48, + 12,29,171,0,49,228,12,9,195,167,149,66,109,208,206,248,122,245,215,103, + 100,247,201,94,111,173,130,37,8,2,194,1,21,135,119,28,134,236,146,86, + 6,155,66,31,179,206,42,24,30,34,218,206,108,40,122,31,51,115,132,139, + 68,218,211,82,31,172,130,4,176,166,227,72,41,122,151,151,151,231,192,184, + 195,167,173,194,242,242,114,6,160,151,149,149,137,104,103,76,180,196,237,234, + 130,162,55,32,121,189,110,73,146,34,10,218,2,167,162,232,13,129,73,135, + 38,235,168,116,238,135,224,151,166,14,164,129,83,155,138,50,130,177,154,172, + 173,138,222,15,140,31,127,219,45,36,224,96,205,0,0,32,0,73,68,65, + 84,27,55,38,140,18,125,96,252,120,83,209,27,16,51,60,110,81,20,35, + 237,81,7,20,31,47,58,36,8,162,208,169,147,74,48,186,167,225,144,224, + 206,206,136,72,242,72,14,121,148,32,139,177,101,17,129,100,97,116,116,58, + 91,133,152,232,204,17,87,156,0,8,178,8,82,181,209,136,54,124,48,52, + 11,139,250,244,202,53,86,130,139,236,219,161,162,247,175,63,254,248,16,128, + 62,15,140,27,119,47,51,223,130,214,229,213,108,108,108,210,200,17,49,112, + 22,150,161,131,14,200,146,8,145,101,104,30,29,163,207,24,133,109,31,125, + 121,124,180,35,196,154,14,93,215,17,106,10,111,22,37,241,126,37,168,24, + 75,134,129,142,39,129,134,2,56,151,136,252,186,162,75,174,28,215,216,112, + 32,12,18,143,232,188,245,30,83,244,54,167,100,188,220,3,101,199,192,156, + 162,162,55,0,77,83,161,42,42,72,215,176,93,253,18,253,75,250,254,169, + 117,29,235,24,44,69,239,100,209,129,173,138,222,64,236,25,148,164,72,133, + 76,169,159,92,142,252,7,8,212,122,13,8,102,64,7,155,113,41,86,117, + 2,132,54,233,145,173,113,143,21,70,217,12,1,177,70,215,236,208,133,216, + 241,152,99,210,233,32,183,124,242,201,29,15,140,27,119,26,90,215,235,180, + 177,177,73,35,71,212,34,200,36,35,83,244,34,71,202,129,135,51,161,183, + 232,104,168,168,199,198,55,62,229,140,130,140,24,69,111,18,5,8,130,0, + 119,174,171,152,117,30,248,197,171,219,34,138,222,0,158,16,68,225,102,65, + 166,5,130,44,220,169,180,132,167,246,27,223,23,130,72,208,181,78,136,128, + 118,131,178,178,178,30,83,244,46,43,43,107,87,209,187,162,37,216,53,69, + 111,64,17,139,138,34,10,218,170,206,41,43,122,107,45,58,194,141,97,160, + 14,24,237,58,22,142,170,202,133,177,25,99,21,189,31,24,63,190,141,162, + 247,3,227,199,199,42,122,3,138,152,151,31,105,143,30,82,160,133,181,200, + 111,152,234,248,34,96,116,97,107,97,13,154,210,122,72,70,244,173,102,24, + 204,168,125,52,85,77,152,30,61,6,23,41,155,1,93,213,160,169,106,155, + 116,77,209,161,4,227,166,87,18,197,40,81,180,53,153,6,15,140,31,255, + 187,251,199,143,15,3,56,1,198,156,82,27,27,155,52,115,68,12,156,97, + 216,50,225,33,15,68,69,130,26,80,81,127,176,1,187,214,126,13,93,229, + 251,242,6,228,204,10,250,130,17,69,111,93,211,33,136,132,146,81,197,8, + 54,135,46,203,238,155,53,237,216,75,198,12,144,28,34,64,56,138,4,66, + 255,9,125,49,96,98,127,244,159,208,23,37,163,75,160,6,85,84,125,113, + 8,238,108,247,17,83,244,46,43,43,75,187,162,119,89,89,89,135,138,222, + 171,170,171,107,27,194,225,10,149,59,97,204,69,1,66,86,102,133,123,194, + 132,72,36,159,46,166,166,232,77,16,192,245,192,209,226,72,228,103,20,172, + 172,109,170,186,35,167,81,127,43,58,123,147,162,84,104,177,133,196,40,122, + 63,48,126,124,172,162,183,32,64,240,122,42,92,163,70,69,218,35,239,61, + 248,70,56,168,64,13,171,208,213,142,141,92,196,184,169,58,212,176,138,112, + 80,65,83,93,115,68,209,59,212,18,90,167,132,212,152,135,30,102,64,13, + 171,31,197,167,71,87,20,61,6,167,107,58,148,144,10,53,172,126,20,125, + 120,186,166,67,13,169,168,220,119,48,102,161,231,230,112,120,123,139,214,250, + 211,113,156,35,186,112,220,184,137,15,140,31,127,24,192,2,2,100,114,58, + 33,122,188,219,97,99,99,147,118,122,212,192,201,36,35,83,202,132,87,240, + 66,82,37,104,1,21,245,85,13,248,242,163,237,8,248,3,139,201,131,153, + 95,125,178,235,49,85,81,87,200,78,57,114,195,244,228,123,150,84,109,59, + 4,16,161,223,113,125,208,84,213,188,48,187,36,203,80,244,38,18,73,36, + 8,146,96,68,252,233,70,88,119,75,125,11,116,85,67,75,99,203,17,85, + 244,46,43,43,75,139,162,119,89,89,217,160,248,213,83,218,33,184,252,96, + 229,226,134,40,81,205,118,97,134,152,153,5,207,105,167,45,142,174,67,204, + 112,198,41,122,35,70,209,27,160,32,1,59,4,38,20,103,20,191,213,16, + 106,184,35,95,44,88,228,174,243,253,25,219,119,110,139,174,226,223,213,135, + 23,55,41,49,14,97,225,3,227,199,39,86,244,6,67,240,122,224,158,56, + 113,241,213,87,95,29,105,79,65,32,240,180,226,11,45,81,194,42,212,40, + 79,174,61,116,77,135,26,214,160,132,85,132,3,225,37,158,44,79,68,209, + 219,225,146,111,85,21,45,160,132,85,176,222,234,174,57,51,156,111,38,74, + 135,217,64,221,76,99,157,161,24,17,188,1,103,134,243,77,179,233,145,116, + 37,172,4,42,246,85,196,40,122,191,86,85,245,80,139,166,71,139,215,9, + 0,240,187,41,83,164,251,199,141,91,207,68,235,16,153,176,206,32,151,147, + 61,167,159,110,43,122,219,216,244,0,233,85,244,54,239,20,18,100,100,73, + 89,134,97,51,61,182,166,234,38,236,88,191,11,1,95,96,49,60,152,185, + 115,227,206,135,67,193,208,138,3,27,43,246,110,125,253,203,160,236,150,35, + 79,177,129,250,192,59,209,55,183,190,99,75,208,88,209,244,112,118,159,236, + 86,69,111,54,102,147,107,170,134,64,109,0,117,123,235,224,200,116,126,43, + 138,222,101,101,101,107,202,202,202,186,164,232,93,86,86,70,101,101,101,157, + 86,244,62,20,12,61,242,102,93,253,90,69,16,58,86,244,118,187,225,157, + 54,109,195,69,63,253,89,204,210,80,174,204,12,51,74,132,193,58,160,41, + 26,194,45,33,107,174,216,46,145,4,21,192,22,34,58,75,150,28,139,157, + 178,115,241,131,247,252,233,157,135,159,120,209,39,40,106,140,135,185,175,174, + 254,145,15,26,27,215,170,130,53,217,12,128,169,232,253,192,248,241,173,138, + 222,96,144,211,137,140,147,79,217,240,211,155,98,151,170,114,55,249,55,56, + 92,226,162,176,47,188,68,9,43,80,45,47,203,178,23,17,11,12,64,231, + 136,23,165,132,21,132,125,225,37,114,134,124,31,162,20,189,117,157,55,73, + 178,116,161,22,214,88,181,140,25,0,8,180,71,146,165,75,162,211,35,1, + 39,108,124,102,83,45,94,11,107,44,201,210,37,16,12,69,239,232,116,85, + 215,46,111,110,108,142,209,132,243,249,124,47,189,82,81,241,113,48,202,139, + 123,96,252,248,69,30,159,175,133,168,85,209,27,0,84,65,64,224,152,81, + 235,174,190,250,106,91,209,219,198,166,7,72,175,162,183,32,40,57,158,28, + 120,69,195,99,179,12,219,206,143,191,194,158,173,251,62,96,151,126,241,174, + 205,187,30,11,181,132,86,236,223,88,177,119,219,27,219,35,79,239,159,60, + 243,105,180,247,178,41,187,36,235,230,138,205,149,145,41,2,37,99,138,81, + 191,175,225,97,16,42,89,99,40,65,21,154,162,33,80,23,64,221,158,58, + 56,50,28,75,66,77,193,183,68,167,248,173,41,122,155,222,92,202,138,222, + 101,101,101,130,53,151,46,1,29,42,122,175,61,120,112,146,122,250,25,107, + 165,220,92,22,156,78,115,50,124,235,75,112,58,33,230,230,114,118,89,217, + 186,75,111,191,189,77,208,135,211,229,244,131,25,186,202,208,130,26,194,141, + 10,148,26,5,123,90,190,89,170,131,55,10,36,226,175,119,63,186,242,175, + 119,63,186,242,209,187,31,93,249,183,63,62,30,249,141,126,119,240,96,155, + 37,215,254,179,103,207,36,245,196,73,107,197,172,44,38,135,3,96,150,31, + 24,55,110,45,152,111,1,51,200,225,128,144,149,197,222,233,211,215,253,252, + 238,187,219,6,161,16,29,122,233,217,215,246,58,50,28,139,84,191,186,84, + 9,169,208,66,173,94,22,155,255,44,47,74,11,169,70,247,161,95,93,234, + 200,112,44,122,101,217,43,21,175,62,187,60,210,198,87,150,189,226,211,85, + 125,19,7,249,122,171,75,146,141,137,126,10,107,188,33,58,29,48,202,180, + 140,160,213,53,201,65,190,158,53,222,0,134,194,204,49,233,141,53,141,27, + 84,69,109,51,22,186,163,166,230,196,151,43,42,54,52,40,10,152,224,38, + 194,141,36,144,100,45,100,162,131,209,160,40,248,215,225,234,181,191,125,228, + 17,91,209,219,198,166,135,136,190,185,174,6,48,183,157,188,41,40,122,135, + 53,137,36,168,45,26,2,141,45,56,176,109,63,194,97,229,3,33,131,158, + 172,249,166,118,173,43,211,177,111,239,186,253,29,118,195,109,121,225,243,138, + 177,23,142,126,53,171,119,166,124,96,83,197,189,185,3,114,80,183,167,30, + 222,66,239,66,127,181,255,75,103,166,227,149,202,45,7,103,229,246,207,65, + 253,190,6,56,189,206,251,130,141,193,183,68,89,90,255,233,179,91,130,184, + 160,123,138,222,101,101,101,93,86,244,46,43,43,123,7,128,88,94,94,222, + 174,162,119,89,89,217,162,14,22,93,78,73,209,251,198,133,11,39,149,151, + 151,207,105,126,227,141,95,234,205,77,49,138,222,66,102,214,246,204,31,253, + 232,207,101,101,101,9,61,4,1,226,151,186,202,172,250,84,82,26,20,244, + 199,0,212,74,53,75,106,27,107,223,16,89,92,253,204,31,158,237,244,98, + 203,191,125,248,225,73,143,63,254,248,28,255,170,85,191,212,141,249,93,17, + 69,111,193,227,221,238,57,237,180,63,39,243,88,254,176,103,111,16,0,94, + 94,246,242,222,217,151,205,190,75,13,168,32,162,121,32,2,107,26,116,230, + 32,96,140,145,105,10,160,132,53,168,1,117,169,228,148,238,122,121,217,203, + 9,21,189,95,122,234,165,138,243,175,56,127,133,30,210,182,105,146,54,194, + 240,86,185,73,211,213,90,193,41,70,210,13,195,103,40,122,155,203,118,65, + 15,105,219,4,151,184,2,64,173,174,169,141,68,4,77,107,77,223,186,105, + 107,82,69,239,45,135,15,31,95,175,134,175,61,179,160,232,134,44,89,238, + 3,130,49,141,130,161,52,41,74,197,191,107,14,47,222,87,215,96,47,182, + 108,99,211,131,80,211,242,82,78,151,220,201,184,63,254,164,176,215,160,215, + 23,232,132,145,205,181,205,31,184,11,93,203,15,127,125,120,143,156,33,251, + 190,122,119,119,135,17,123,241,50,39,99,47,28,237,242,228,123,188,74,32, + 156,29,106,14,95,159,239,45,120,180,48,179,160,118,123,229,246,108,157,245, + 191,101,120,51,30,116,123,221,251,155,235,154,235,51,51,178,14,189,191,244, + 131,96,162,114,186,123,92,43,194,119,203,209,134,40,85,53,128,100,199,213, + 221,246,180,35,111,228,13,109,219,154,15,0,206,17,35,107,147,169,16,88, + 229,220,251,249,140,99,253,65,255,175,130,74,168,170,137,26,150,179,194,21, + 57,148,219,248,183,7,31,111,72,71,123,82,37,89,57,51,47,155,41,53, + 5,155,114,178,92,153,63,214,84,61,172,178,242,18,0,72,36,223,43,74, + 130,187,41,216,252,70,150,43,235,67,93,213,131,175,61,255,154,154,172,188, + 153,151,207,144,4,137,114,244,176,254,43,93,213,235,90,244,224,83,149,13, + 7,124,189,11,74,212,44,87,86,190,30,214,239,209,85,184,53,65,189,30, + 128,42,234,210,18,65,194,87,130,67,120,76,87,185,246,213,101,203,213,31, + 93,242,63,57,130,46,61,38,72,248,70,112,8,15,190,252,196,171,53,0, + 64,68,57,141,175,14,171,79,215,121,176,5,79,109,108,210,135,173,232,109, + 99,243,29,194,54,112,54,54,233,195,86,244,182,177,177,177,177,249,65,34, + 1,64,230,140,29,227,209,26,92,225,143,218,30,51,6,67,128,202,230,62, + 212,78,16,68,60,81,43,207,171,205,203,75,91,204,58,101,179,126,235,5, + 24,147,128,51,205,207,214,12,90,21,173,146,55,126,243,187,39,106,155,181, + 72,177,149,38,0,145,37,168,154,1,248,155,151,151,30,48,235,236,107,230, + 247,153,239,141,81,101,88,199,227,132,41,210,9,192,145,228,144,162,103,247, + 90,109,115,154,159,157,0,66,205,203,75,247,0,221,239,182,234,12,233,234, + 50,180,235,252,118,235,178,177,177,73,15,150,97,217,122,254,236,217,29,26, + 172,217,128,116,126,212,103,0,120,249,229,151,59,220,143,0,223,236,217,179, + 37,0,120,18,95,0,0,206,159,61,27,104,53,42,214,123,98,245,200,182, + 68,27,222,248,136,199,54,237,137,170,243,80,252,54,0,248,230,155,111,130, + 155,54,109,138,78,58,156,164,188,32,0,28,119,220,113,210,160,65,131,218, + 109,160,85,167,141,77,42,240,130,5,174,102,60,255,109,55,195,198,230,7, + 133,229,141,5,241,114,207,46,125,104,25,194,39,47,43,141,249,142,78,120, + 130,93,37,65,157,49,48,243,8,196,122,107,1,243,61,3,173,222,160,165, + 96,222,68,68,31,199,25,196,164,117,218,216,164,66,210,101,107,108,108,108, + 186,76,167,38,52,51,115,187,154,101,68,212,233,176,242,239,2,68,244,53, + 51,127,1,83,243,171,3,62,2,112,38,142,128,97,254,161,194,204,247,194, + 152,47,8,0,111,19,209,29,71,160,206,211,0,188,7,67,143,238,98,34, + 122,233,8,212,57,12,0,136,168,195,200,145,123,0,252,170,167,27,100,99, + 243,95,70,202,6,142,153,167,2,24,3,96,72,130,253,84,0,187,183,111, + 223,190,101,248,240,225,71,116,169,172,116,65,68,79,152,55,222,142,242,189, + 13,227,248,127,240,6,206,244,108,67,0,14,17,81,194,41,7,93,228,103, + 104,157,175,55,24,64,143,26,56,102,126,19,192,116,243,171,12,224,69,102, + 254,59,17,93,221,67,245,93,75,68,143,0,120,2,192,201,166,98,250,114, + 0,191,38,162,109,137,246,113,22,180,59,221,209,198,198,166,11,116,54,138, + 114,33,128,159,2,184,42,238,245,83,115,91,218,96,230,107,153,185,153,219, + 114,144,153,251,164,179,46,24,99,107,27,137,104,105,123,153,204,237,27,17, + 23,124,243,67,132,153,151,192,152,220,190,203,124,255,94,194,204,215,160,213, + 184,69,115,37,51,15,72,144,222,221,250,30,128,177,184,0,16,59,166,60, + 3,192,231,204,124,85,162,253,110,159,127,203,15,254,154,178,177,57,210,116, + 86,15,238,102,0,165,0,142,51,95,128,177,136,238,38,0,59,210,209,32, + 102,246,2,216,7,32,55,73,150,98,0,7,152,249,130,52,119,51,173,6, + 64,68,4,102,158,23,191,209,52,110,47,152,249,126,208,48,243,114,0,231, + 69,37,245,103,230,189,0,70,166,217,147,235,168,29,46,0,42,17,117,199, + 91,190,60,73,58,1,40,0,144,112,5,148,174,192,204,47,0,40,139,74, + 186,203,172,227,104,24,107,113,10,0,254,198,204,219,136,104,77,186,234,181, + 177,177,73,76,202,30,28,17,173,4,176,4,192,237,64,107,136,224,174,93, + 187,190,48,211,150,116,183,123,146,153,37,24,26,107,150,113,83,0,212,2, + 120,31,192,103,136,213,205,122,145,153,239,236,78,125,113,4,97,136,113,190, + 144,196,147,123,193,220,30,255,164,237,130,49,13,98,106,212,235,251,78,93, + 130,180,254,0,134,166,178,51,51,79,100,230,181,204,188,148,83,80,184,78, + 176,191,151,153,43,96,60,232,36,242,190,58,67,123,186,121,105,139,237,96, + 230,231,16,107,220,64,68,219,136,232,76,34,234,3,224,25,43,25,192,191, + 210,85,175,141,141,77,114,58,213,69,105,6,145,248,16,53,254,164,105,154, + 186,101,203,22,95,154,2,76,78,129,49,198,7,0,126,34,114,16,81,1, + 17,157,70,68,99,136,40,27,192,43,81,249,127,147,134,58,163,105,99,228, + 136,104,41,17,157,141,88,227,102,25,181,179,0,220,0,163,75,234,6,102, + 126,7,198,56,101,187,193,56,209,48,115,168,227,92,169,231,235,14,166,81, + 98,24,55,227,43,19,100,113,38,72,75,196,185,48,140,199,21,0,234,153, + 121,89,39,218,240,50,140,249,139,37,48,100,101,46,233,40,184,233,219,198, + 124,208,186,40,65,250,63,204,241,63,16,209,92,0,239,152,155,114,152,249, + 213,35,216,68,27,155,255,74,190,107,43,153,60,23,245,249,23,128,209,77, + 197,204,146,217,117,9,34,154,13,96,129,153,199,193,204,237,45,106,220,21, + 130,0,214,192,24,123,10,51,243,165,48,110,236,18,218,26,181,155,152,249, + 94,102,158,199,204,150,167,145,242,252,0,211,104,37,155,76,30,143,163,39, + 141,28,51,63,14,67,93,26,48,162,13,15,32,90,160,212,48,250,31,167, + 80,142,23,192,0,0,39,69,37,207,101,230,48,51,207,105,103,191,59,153, + 89,3,48,43,110,211,28,124,135,188,98,102,190,202,60,22,221,122,1,184, + 59,73,246,98,0,211,153,249,51,179,119,226,231,81,219,210,62,254,103,99, + 99,19,75,103,199,224,122,154,98,243,189,142,136,150,1,173,83,15,216,92, + 73,158,153,93,68,244,123,102,94,96,230,253,17,128,235,59,81,71,71,222, + 128,4,224,52,102,190,151,76,101,103,102,126,133,136,158,54,183,247,51,35, + 74,147,241,117,42,141,232,164,113,179,112,48,115,136,136,82,245,164,82,194, + 60,151,241,193,15,111,3,56,22,192,98,24,99,111,23,166,82,22,17,249, + 152,249,62,24,65,21,153,81,155,100,0,255,143,153,255,140,88,101,7,23, + 51,183,32,241,239,210,0,224,164,100,145,135,223,18,103,3,166,50,64,234, + 140,2,112,33,17,253,131,153,215,2,56,17,192,177,204,124,22,17,189,211, + 193,190,54,54,54,93,164,219,6,174,180,180,116,236,150,45,91,210,29,50, + 111,77,180,182,198,229,218,124,142,162,51,70,98,42,128,241,48,66,211,147, + 122,175,204,60,215,50,110,0,64,68,82,162,192,147,104,136,232,45,24,1, + 40,29,70,89,118,209,184,89,164,197,200,49,179,68,68,170,217,37,24,239, + 53,89,124,10,64,238,108,144,135,105,144,178,152,249,90,24,6,50,250,92, + 23,198,101,79,100,216,194,0,230,18,81,167,133,64,205,7,160,158,140,72, + 236,234,184,221,111,1,252,3,192,87,48,12,28,96,140,107,218,216,216,244, + 16,233,240,224,86,143,29,59,54,221,6,206,109,125,176,110,174,214,13,25, + 109,231,159,117,230,134,51,62,149,185,110,157,193,12,190,89,5,224,19,36, + 14,66,137,33,145,113,99,230,246,188,190,140,4,101,118,203,200,69,25,183, + 77,48,188,180,100,108,235,78,4,163,57,23,236,145,184,121,104,237,161,3, + 120,144,136,110,233,70,157,65,102,14,3,104,36,162,66,180,255,32,33,154, + 83,5,118,192,8,96,154,209,131,209,141,150,55,27,125,189,166,170,81,104, + 99,99,211,5,186,109,224,118,236,216,241,209,230,205,155,165,52,25,185,111, + 0,12,2,144,207,204,231,16,209,155,81,134,45,2,51,63,22,245,245,57, + 164,206,224,84,51,50,51,162,186,40,99,182,153,70,109,63,140,113,186,148, + 12,155,89,78,50,207,173,253,133,45,19,211,101,35,151,162,113,123,141,136, + 102,36,58,255,93,168,239,28,102,46,0,112,16,201,175,185,77,68,52,46, + 201,182,206,34,195,8,207,7,128,167,208,58,182,24,13,195,232,2,205,132, + 49,198,90,128,214,201,231,61,129,37,148,27,125,252,246,10,93,54,54,61, + 72,58,130,76,166,35,125,99,121,209,171,21,189,14,68,110,198,195,96,26, + 39,102,190,8,192,53,102,30,173,147,203,60,165,52,62,102,193,204,49,198, + 141,136,86,154,245,45,2,112,29,140,238,183,119,240,61,155,248,205,204,175, + 163,125,227,182,148,136,102,0,173,30,116,55,235,187,29,192,33,180,127,157, + 28,199,204,59,210,25,49,201,204,143,19,209,255,193,152,110,16,207,223,136, + 104,55,128,139,205,239,97,34,122,51,93,117,39,224,39,102,23,251,209,81, + 105,137,218,101,99,99,147,38,190,83,65,38,68,180,156,153,191,2,112,20, + 140,238,35,6,112,31,17,221,14,0,204,220,128,86,41,27,16,81,103,219, + 191,209,52,80,237,142,193,37,161,83,222,90,34,136,200,153,196,139,107,47, + 58,210,202,31,127,227,15,119,197,123,51,187,104,127,212,78,150,247,137,40, + 209,20,129,78,195,204,103,1,120,13,169,79,155,24,6,160,133,153,159,36, + 162,118,199,60,59,224,16,128,94,48,140,202,205,68,52,128,153,159,0,48, + 15,134,231,118,23,17,45,96,99,41,178,219,205,125,82,125,248,249,18,70, + 87,106,42,215,143,53,144,251,25,128,245,102,155,44,47,245,35,59,192,196, + 198,166,103,249,78,25,56,0,32,162,97,204,92,135,214,201,222,183,49,243, + 109,137,242,154,6,112,31,17,165,26,114,189,18,29,175,68,98,157,147,211, + 162,210,86,193,24,251,235,182,167,150,200,200,17,81,135,6,128,99,251,73, + 187,106,220,30,130,225,121,38,99,55,17,157,214,206,246,84,235,25,0,96, + 3,218,6,148,0,70,0,9,163,117,78,29,163,213,16,88,92,97,78,207, + 184,172,43,129,38,68,84,108,134,239,75,0,246,51,243,191,137,104,38,204, + 185,125,204,60,217,236,230,182,122,2,124,68,52,34,149,238,88,34,250,61, + 128,223,71,167,153,211,31,254,95,130,236,123,96,76,175,184,208,204,247,2, + 90,143,53,109,43,168,216,216,216,36,230,187,54,15,206,10,128,200,3,240, + 1,140,155,95,155,44,20,29,226,104,44,35,245,89,39,170,8,118,240,82, + 1,76,2,48,195,236,202,155,97,126,79,27,166,113,10,119,152,49,49,157, + 50,110,86,228,41,51,191,143,246,141,219,215,68,52,52,73,164,106,202,48, + 115,47,24,94,78,188,113,99,24,1,36,78,180,142,71,1,134,158,223,72, + 24,147,187,163,177,166,21,84,117,177,41,163,205,58,189,48,126,203,58,243, + 85,3,227,129,197,50,110,141,68,148,9,116,189,59,214,52,194,109,214,98, + 37,162,43,163,140,219,30,180,206,13,244,17,209,165,209,121,23,44,88,240, + 157,123,216,180,177,249,190,211,41,3,103,142,143,120,17,229,249,137,162,40, + 141,25,51,198,155,174,177,19,115,204,77,34,162,83,137,72,0,240,99,24, + 147,190,127,10,192,109,166,1,134,135,103,25,192,81,204,188,219,108,99,119, + 110,20,46,0,147,1,204,177,166,5,152,239,115,204,244,180,141,15,117,209, + 200,117,218,115,51,207,231,14,0,83,218,201,182,150,136,134,164,41,160,228, + 16,128,101,136,125,56,121,151,136,4,34,186,41,201,62,219,136,40,11,134, + 1,214,227,54,63,217,197,118,124,1,96,26,90,151,200,202,53,95,249,48, + 174,123,13,192,123,68,148,150,192,18,51,242,243,167,209,105,230,2,5,143, + 153,30,123,116,47,195,196,4,69,216,6,206,198,38,205,116,69,46,167,20, + 192,49,86,250,208,161,67,143,1,240,71,0,59,210,37,151,19,125,147,37, + 162,55,146,228,105,96,230,83,97,172,83,73,0,6,51,115,13,17,21,116, + 241,70,221,198,184,89,48,243,188,40,167,177,203,99,112,241,68,117,87,166, + 66,151,186,37,77,134,180,179,237,105,34,186,220,108,79,186,166,123,60,5, + 163,11,50,15,192,165,148,226,2,205,9,166,21,252,17,198,130,197,93,194, + 28,227,122,135,153,255,1,195,184,89,221,136,247,1,248,187,25,100,146,54, + 136,232,255,152,249,159,48,86,129,1,128,151,16,187,104,53,3,200,35,162, + 134,116,214,107,99,99,147,152,206,62,53,38,146,196,137,86,22,56,171,123, + 205,233,28,68,244,33,51,15,130,49,214,1,24,211,11,2,68,212,21,113, + 173,83,144,192,184,89,68,25,57,134,49,150,151,22,82,53,90,221,156,216, + 157,168,171,23,0,202,45,227,150,78,136,232,99,102,222,210,213,9,215,230, + 180,2,9,192,240,116,76,218,182,130,57,152,249,255,193,56,23,239,164,219, + 184,69,213,85,193,204,51,205,175,222,168,77,159,18,209,113,137,246,177,177, + 177,233,25,186,34,151,147,84,240,52,45,45,234,36,68,180,23,0,69,5, + 97,84,119,161,24,23,140,73,224,237,70,238,153,70,110,23,140,64,149,239, + 211,212,128,248,32,14,0,248,156,136,146,174,13,217,237,10,187,105,152,76, + 111,242,139,14,51,118,141,30,237,14,36,162,229,230,199,235,1,84,155,221, + 182,54,54,54,71,152,148,255,208,137,104,37,51,183,27,129,56,124,248,240, + 111,237,166,79,68,196,134,206,214,136,174,236,207,134,16,229,62,24,242,42, + 1,36,153,124,205,204,191,34,162,197,93,111,233,183,66,61,140,238,66,139, + 42,34,26,157,142,49,183,239,25,42,140,201,221,21,29,101,76,7,230,56, + 160,141,141,205,183,68,167,158,100,211,209,93,212,147,164,26,234,29,15,51, + 15,133,49,230,147,1,35,240,67,69,236,66,193,0,144,101,190,231,51,243, + 112,34,218,220,237,6,31,1,204,181,25,219,132,235,127,203,198,237,231,48, + 198,59,1,99,76,243,136,64,68,157,93,36,217,198,198,230,123,204,15,46, + 114,171,43,55,237,168,39,109,23,12,227,150,232,188,168,113,239,223,11,146, + 61,148,124,155,158,27,17,61,15,224,249,111,171,126,27,27,155,255,14,126, + 112,6,174,155,88,198,224,123,101,196,254,91,105,90,94,154,44,120,230,123, + 88,151,109,239,109,108,210,141,109,224,108,190,151,100,207,220,249,109,55,193, + 198,198,230,59,14,29,201,167,96,27,155,116,97,27,56,27,27,155,142,176, + 13,156,141,141,141,77,26,177,31,190,190,59,72,0,144,53,99,71,162,121, + 82,61,130,101,80,237,58,237,58,211,85,159,165,226,205,204,57,48,212,38, + 82,141,246,109,236,40,50,248,72,29,159,117,12,86,125,222,31,127,153,11, + 32,40,8,66,143,70,46,127,91,191,95,230,121,219,221,68,20,212,117,61, + 7,61,120,156,223,214,241,217,124,55,176,199,224,108,122,20,115,153,172,34, + 0,127,78,182,236,90,55,203,183,140,91,87,111,44,105,189,241,69,169,165, + 223,14,224,14,24,243,238,206,32,162,118,31,235,19,24,90,39,126,192,193, + 78,214,241,10,130,96,47,91,102,211,99,216,6,206,166,71,96,230,33,48, + 52,244,44,166,154,18,54,99,58,154,0,109,170,127,71,79,76,175,35,162, + 154,68,121,77,227,214,85,101,134,180,99,26,183,61,104,93,92,217,11,96, + 7,51,143,234,204,196,111,65,16,236,213,79,108,108,186,137,109,224,108,0, + 0,125,251,246,141,81,74,56,112,224,64,151,187,140,152,121,17,128,27,163, + 147,96,120,74,2,128,205,104,231,186,99,102,47,128,131,113,121,118,194,88, + 228,59,25,145,188,113,82,74,169,180,181,87,87,150,210,138,242,212,94,64, + 171,178,133,6,99,177,128,68,250,132,155,152,121,85,212,119,7,128,199,186, + 162,119,103,99,99,147,26,182,129,251,47,231,185,231,158,115,77,152,48,97, + 50,17,141,35,162,193,204,12,102,254,90,211,180,79,214,173,91,247,225,79, + 126,242,147,174,24,186,107,163,62,255,134,136,238,49,245,232,166,192,80,106, + 63,159,136,94,74,178,111,29,98,175,75,31,17,181,103,220,18,194,204,227, + 0,220,128,86,97,213,246,242,2,134,241,125,159,136,254,156,74,249,166,113, + 107,183,91,212,92,62,238,27,0,3,97,232,219,197,47,70,126,42,51,107, + 237,156,11,27,27,155,110,208,25,185,156,107,1,252,1,177,43,164,3,64, + 21,128,241,68,148,214,245,253,142,116,125,102,157,155,0,28,27,151,172,3, + 152,13,224,159,61,181,250,199,183,113,172,0,48,119,238,220,97,14,135,227, + 228,247,223,127,127,250,41,167,156,114,126,32,216,2,102,134,36,136,88,181, + 106,213,75,253,250,245,235,123,249,229,151,127,180,108,217,178,206,134,133,89, + 154,125,255,103,26,55,137,136,78,53,187,40,9,192,21,48,164,100,0,196, + 120,67,26,98,53,10,171,137,168,168,179,199,101,6,155,172,71,231,5,125, + 103,153,109,233,112,173,81,102,222,22,253,21,9,198,242,76,141,194,252,68, + 187,71,229,127,49,209,190,41,50,85,36,1,18,4,92,90,124,210,234,39, + 14,126,208,230,97,100,172,119,128,107,179,111,239,41,81,73,93,86,194,152, + 90,61,211,85,203,117,145,178,54,21,125,16,83,214,113,135,167,76,77,182, + 205,198,230,219,160,67,3,103,118,25,237,131,209,13,147,136,98,0,7,152, + 249,130,116,60,137,30,233,250,204,58,93,0,124,0,196,4,155,5,0,175, + 2,88,201,204,87,155,234,5,105,225,219,56,86,139,185,115,231,14,59,241, + 196,19,103,191,246,218,107,247,94,115,205,53,248,213,77,55,161,112,64,111, + 108,216,176,1,20,210,240,228,227,79,156,255,200,35,143,156,63,115,230,204, + 43,79,59,237,180,125,157,244,228,44,207,230,74,0,63,53,141,215,173,104, + 189,145,239,139,100,108,53,110,58,98,111,244,149,104,95,199,174,61,246,162, + 235,106,245,127,2,144,202,98,218,17,239,141,136,4,102,254,23,128,115,226, + 242,12,78,180,163,153,255,48,218,170,158,119,6,151,0,26,163,177,190,240, + 244,220,17,127,159,83,56,209,117,117,239,211,130,0,214,2,56,17,198,185, + 228,103,15,253,103,237,151,254,138,49,33,86,23,10,160,155,117,112,151,148, + 48,230,213,205,119,133,161,76,86,53,245,130,247,10,94,191,10,0,198,29, + 62,213,189,169,200,48,170,199,29,158,226,250,164,240,253,119,182,31,216,129, + 75,156,215,220,124,82,245,180,213,255,41,92,241,157,94,187,214,230,135,79, + 187,6,206,212,228,218,140,214,27,176,2,160,9,192,231,48,130,0,6,162, + 117,17,226,23,153,249,55,68,116,79,87,27,115,164,235,51,235,244,194,232, + 22,179,140,91,24,192,86,0,33,0,125,204,151,0,96,42,128,45,0,186, + 173,0,189,108,217,50,105,238,220,185,192,17,62,214,168,250,93,94,175,247, + 228,229,203,151,223,123,229,149,87,162,108,206,133,208,221,2,138,158,107,128, + 4,47,250,255,180,23,102,206,158,133,87,95,126,5,107,215,174,157,62,125, + 250,244,3,0,222,233,68,21,62,24,231,73,98,102,5,192,237,0,238,141, + 218,222,108,125,72,98,220,106,137,168,79,55,14,209,19,245,249,171,20,242, + 215,2,56,161,147,117,196,119,79,22,116,114,127,71,39,243,183,65,99,125, + 33,0,76,175,189,224,180,255,39,4,174,2,2,127,7,48,30,134,97,189, + 10,192,223,85,12,29,127,188,38,157,242,97,193,155,0,176,144,136,150,164, + 82,246,188,186,249,46,24,26,137,145,223,69,130,56,167,183,88,220,174,164, + 148,73,233,32,113,192,228,210,186,249,128,113,158,86,3,192,210,188,37,182, + 193,179,57,162,116,244,148,123,10,90,159,162,253,68,228,32,162,2,34,58, + 141,136,198,16,81,54,128,87,162,242,255,166,155,237,57,210,245,1,192,55, + 48,198,71,0,96,55,17,57,137,232,56,34,58,145,136,250,195,80,49,255, + 198,220,158,205,204,107,186,91,225,154,53,107,172,155,199,145,62,86,44,90, + 180,200,181,105,211,166,161,68,116,210,252,249,243,241,179,235,230,35,44,235, + 208,179,28,16,64,16,64,248,100,247,86,140,63,117,18,174,184,230,42,156, + 117,214,89,231,11,130,48,110,255,254,253,174,142,75,143,120,100,185,48,186, + 118,1,227,33,106,33,98,175,181,155,153,249,69,51,191,130,88,227,214,66, + 68,157,53,22,73,33,162,97,41,188,78,76,67,85,129,52,148,209,37,242, + 132,92,235,58,186,10,198,117,117,149,245,93,0,157,214,79,236,59,189,11, + 197,158,2,160,12,192,219,0,230,0,152,35,64,72,197,184,193,67,25,125, + 36,136,115,204,125,203,96,140,133,158,50,175,110,254,212,68,249,153,121,34, + 51,247,152,54,97,103,96,102,111,220,171,189,128,168,73,230,216,178,205,119, + 148,142,12,220,115,81,159,127,1,24,221,121,204,44,153,158,15,136,104,54, + 128,5,102,30,7,51,63,212,141,246,36,170,111,8,51,107,102,151,78,186, + 235,3,90,159,188,27,136,104,104,252,70,34,250,130,136,162,187,154,38,116, + 179,62,132,195,97,15,142,252,185,197,220,185,115,135,13,28,56,240,226,1, + 3,6,204,91,181,106,213,188,96,48,8,77,4,74,62,27,140,146,247,123, + 71,242,245,90,89,136,111,254,82,137,227,79,62,17,129,96,11,226,142,191, + 93,76,143,76,34,34,17,134,71,170,155,175,248,241,203,243,153,249,57,196, + 138,154,134,168,107,106,236,223,5,166,194,144,88,74,229,213,19,84,153,239, + 195,204,247,74,0,16,32,164,252,219,89,152,222,219,120,180,26,202,121,0, + 198,2,128,79,247,85,118,180,191,11,174,94,81,198,208,50,186,239,192,120, + 88,76,196,221,0,158,99,230,177,241,27,152,121,17,51,239,97,230,58,102, + 174,55,95,117,204,252,9,51,255,206,204,211,173,96,57,211,144,221,196,204, + 11,96,92,179,205,81,175,195,204,124,43,51,79,141,219,103,4,128,85,230, + 177,217,124,71,233,200,192,21,155,239,117,68,180,12,48,230,29,153,193,22, + 65,32,50,209,246,247,81,251,252,168,27,237,105,83,31,128,70,179,157,110, + 179,62,111,26,235,139,230,237,14,182,91,227,50,221,154,24,60,115,230,76, + 87,56,28,246,226,8,159,219,168,49,183,39,166,76,153,114,131,170,170,80, + 180,246,99,102,214,172,89,3,232,108,69,25,166,76,148,145,203,38,34,209, + 124,201,0,94,139,203,122,17,140,155,196,90,0,245,68,148,146,151,248,93, + 132,136,84,34,242,165,242,234,161,38,196,123,144,45,221,44,207,50,140,150, + 65,203,6,128,48,148,14,203,21,73,204,142,219,215,50,186,201,198,84,157, + 48,254,198,55,88,15,119,204,220,199,236,186,190,17,198,180,139,92,24,221, + 222,57,230,231,227,0,44,48,163,80,85,115,159,78,27,58,102,190,19,192, + 126,24,189,12,191,67,219,191,239,92,0,247,1,120,155,153,119,48,243,48, + 211,184,109,130,209,205,172,195,230,59,75,170,23,68,228,143,39,250,34,74, + 114,65,117,123,108,193,170,47,46,12,219,107,126,191,22,64,116,40,119,58, + 234,99,0,55,50,243,27,0,206,77,176,253,98,34,250,21,51,223,144,134, + 186,160,235,49,127,19,61,126,110,227,199,220,102,204,152,129,51,206,56,3, + 78,217,1,89,35,84,142,254,26,148,159,129,62,171,12,47,174,242,212,131, + 208,235,2,40,200,201,131,40,138,96,230,175,59,91,103,162,136,83,34,154, + 193,204,23,161,213,123,109,128,209,125,245,44,17,77,234,202,177,253,55,177, + 238,184,5,145,7,128,191,86,254,59,62,226,54,165,167,144,185,197,39,123, + 127,94,114,38,0,224,132,77,11,82,25,19,75,106,208,138,132,66,239,60, + 99,156,13,149,122,85,124,123,218,221,55,142,232,238,236,90,102,86,97,204, + 39,76,5,193,188,47,84,118,118,220,150,153,247,2,232,159,98,118,130,97, + 168,183,194,48,198,93,13,98,178,57,130,164,106,224,220,214,135,232,167,37, + 243,115,252,141,76,75,67,187,172,250,6,194,232,18,124,17,198,31,75,94, + 130,188,233,168,143,0,220,69,68,63,98,230,97,136,141,106,220,77,68,53, + 204,124,119,26,234,193,171,175,190,26,156,51,103,78,244,83,124,143,159,219, + 53,107,214,244,63,235,172,179,78,154,63,127,62,174,184,250,74,132,93,132, + 102,10,227,241,101,75,241,208,159,22,99,238,165,151,65,169,13,64,55,239, + 145,122,93,0,30,114,96,233,95,255,134,138,131,149,155,71,12,63,186,43, + 213,38,227,217,168,207,86,192,206,37,204,92,67,68,215,167,179,162,31,18, + 235,142,91,48,21,70,23,223,16,0,152,87,60,165,75,15,59,243,138,167, + 220,15,35,144,106,247,186,227,22,108,105,71,135,174,195,41,49,197,66,145, + 85,22,138,133,162,116,60,104,2,198,67,92,124,89,58,128,124,34,106,0, + 0,54,150,65,187,7,177,70,166,132,153,183,18,209,200,84,42,97,230,74, + 0,189,227,146,255,2,160,26,64,5,140,160,51,39,140,123,208,165,104,141, + 120,181,231,14,127,143,232,232,199,250,6,192,32,0,249,204,124,14,17,189, + 25,117,243,141,192,204,143,69,125,125,14,93,39,220,108,45,201,0,0,32, + 0,73,68,65,84,81,125,86,93,58,153,235,215,165,177,190,104,206,1,0, + 74,190,102,224,157,105,170,7,186,174,135,112,4,207,109,56,28,30,248,206, + 59,239,204,187,248,226,139,161,74,64,175,79,250,99,55,246,227,232,95,15, + 195,178,103,159,193,211,79,63,141,107,111,186,1,193,83,141,101,1,139,114, + 242,241,216,35,127,65,78,78,14,250,245,235,55,150,153,63,3,48,121,255, + 254,253,31,246,235,215,47,229,72,56,54,150,235,26,1,192,75,68,207,39, + 136,150,140,230,58,102,86,137,232,166,174,28,227,127,3,15,62,191,107,97, + 244,247,41,93,40,227,31,43,154,35,129,34,87,157,147,23,63,241,188,83, + 68,7,157,8,61,227,208,4,137,200,29,159,72,68,127,4,240,71,0,136, + 187,166,70,48,243,114,34,154,209,94,161,204,252,75,196,26,183,207,1,76, + 182,12,104,130,252,119,0,248,45,140,104,96,155,239,17,29,25,184,95,193, + 152,3,6,0,175,3,176,230,44,89,125,234,59,205,46,167,107,204,239,26, + 17,221,209,141,246,36,170,175,130,153,151,192,152,219,132,52,215,7,24,131, + 243,197,0,138,153,249,114,34,90,22,111,104,152,57,218,227,90,214,166,132, + 78,242,226,139,47,54,224,8,158,219,112,56,220,87,150,101,168,106,171,237, + 212,193,216,250,135,29,24,114,77,111,44,93,186,20,127,91,242,40,66,74, + 24,178,40,65,150,101,60,251,236,179,184,246,218,107,161,105,26,68,81,156, + 11,243,137,62,85,35,199,204,243,0,60,17,245,61,222,56,135,96,76,246, + 190,36,42,237,70,102,238,75,68,23,118,229,56,127,232,220,120,209,208,155, + 97,122,112,65,93,113,224,83,164,20,213,24,205,165,211,50,151,186,4,57, + 12,96,119,119,219,163,67,95,42,64,8,155,159,29,64,135,237,233,172,247, + 195,204,60,142,136,62,73,178,81,50,231,20,214,163,181,55,224,60,102,238, + 67,237,47,142,240,72,212,231,131,68,52,186,131,118,12,133,241,247,106,243, + 61,163,221,11,142,136,150,107,154,182,91,16,132,33,48,150,88,98,0,247, + 17,209,237,0,192,204,13,48,7,159,205,252,221,114,223,137,104,57,51,127, + 5,224,168,184,250,126,217,19,245,153,92,12,224,223,48,186,59,158,98,230, + 39,137,72,48,235,123,28,173,145,100,0,16,38,162,43,211,80,39,136,104, + 185,162,40,187,37,73,234,241,115,171,235,58,194,225,48,156,78,103,100,204, + 45,196,42,244,160,130,221,225,207,48,249,132,147,240,247,191,255,29,30,143, + 7,162,40,98,194,132,9,203,3,129,192,140,135,30,122,8,215,95,127,61, + 156,78,39,68,81,140,220,188,58,50,114,108,40,8,68,27,174,0,98,199, + 84,2,68,228,49,243,22,34,118,9,171,57,204,44,155,17,164,54,38,39, + 108,90,176,114,221,113,11,86,91,223,151,86,125,224,157,210,177,65,1,226, + 60,230,165,85,31,220,250,243,146,51,125,102,153,193,166,118,151,248,140,161, + 141,39,85,165,31,190,181,68,40,246,153,159,189,72,222,158,54,251,118,162, + 206,181,204,124,52,17,181,49,200,214,67,40,17,229,50,179,31,173,215,216, + 95,0,36,244,226,152,57,250,186,85,137,168,36,81,207,73,84,254,99,0, + 108,68,10,75,190,217,124,247,232,176,95,65,20,197,161,225,112,184,49,42, + 233,54,54,65,212,13,24,48,30,183,204,129,219,46,67,68,195,0,212,31, + 193,250,86,1,248,107,116,82,84,125,87,197,101,119,152,155,126,217,157,58, + 45,100,89,62,34,231,86,215,245,253,225,112,24,143,61,246,24,30,126,112, + 49,164,160,14,174,13,160,165,182,9,161,230,0,214,174,93,139,53,107,214, + 224,127,255,247,127,49,99,198,140,119,117,93,223,12,224,167,77,77,77,88, + 188,120,49,66,161,16,52,77,3,140,27,216,28,24,221,149,237,69,60,150, + 89,205,6,240,11,211,152,69,207,233,251,185,121,76,18,17,157,13,224,233, + 184,253,103,177,177,136,113,170,252,87,104,112,157,176,105,65,208,122,61,93, + 245,81,178,104,204,120,99,18,19,172,241,116,213,71,62,171,140,14,170,179, + 12,138,213,101,95,2,0,26,107,145,235,245,176,94,237,91,154,183,36,184, + 52,111,73,240,176,94,29,105,143,3,178,213,134,198,232,125,1,36,11,86, + 106,239,225,77,134,209,155,209,81,0,73,180,87,118,94,59,249,154,208,122, + 189,220,9,36,14,136,2,0,102,254,35,140,197,29,218,51,110,118,176,201, + 119,152,14,127,28,102,150,156,78,103,14,128,15,144,248,70,242,238,165,151, + 94,58,10,128,117,67,234,111,142,217,116,9,243,166,151,215,78,125,76,20, + 179,98,124,183,234,3,0,34,250,165,89,102,178,63,250,43,227,234,124,56, + 29,17,149,75,190,126,219,251,147,151,238,45,214,117,253,67,196,29,43,51, + 67,211,52,190,244,210,75,239,224,214,96,210,46,29,171,174,235,123,85,85, + 189,82,211,52,60,245,212,83,120,230,153,103,80,82,82,130,190,37,125,80, + 82,82,130,162,162,34,60,241,196,19,112,56,28,24,54,108,216,25,167,158, + 122,234,224,153,51,103,66,20,197,159,54,55,55,183,49,114,204,60,71,215, + 245,246,230,255,88,215,213,125,68,244,87,32,50,167,207,58,144,50,51,205, + 122,2,191,28,192,117,255,159,189,51,15,175,162,58,255,248,247,204,204,93, + 179,220,172,4,144,64,8,33,97,79,88,138,130,73,128,74,64,180,88,181, + 226,82,235,160,44,74,129,170,84,105,189,84,106,149,234,213,186,65,69,197, + 178,8,195,175,42,98,149,130,202,18,16,72,16,4,33,128,236,144,132,96, + 216,18,200,158,220,117,102,206,239,143,153,155,220,220,220,155,220,44,88,212, + 251,121,158,121,146,59,203,121,231,156,153,57,239,89,222,243,190,94,105,220, + 75,41,93,142,192,88,11,101,200,179,46,192,243,127,114,200,144,221,202,195, + 173,76,220,138,169,179,143,211,155,69,245,56,114,24,74,207,58,23,192,50, + 85,198,10,59,236,45,70,94,8,101,66,221,247,112,8,192,10,245,255,101, + 80,122,66,190,216,131,134,181,146,190,54,0,72,111,78,166,58,242,177,3, + 202,80,98,115,121,78,132,242,254,101,19,66,94,105,46,77,0,69,80,124, + 154,238,242,179,125,141,134,252,5,185,14,105,164,224,210,170,51,232,228,226, + 149,153,147,139,87,102,77,46,94,169,7,26,173,105,26,173,14,221,221,1, + 96,150,77,114,62,254,248,247,31,222,254,187,245,47,45,57,246,238,247,71, + 254,241,143,127,188,140,134,10,108,32,85,28,205,182,122,109,138,63,121,0, + 102,0,48,184,135,15,209,16,162,164,93,242,220,168,50,13,106,186,15,67, + 89,142,112,7,81,112,191,196,197,238,219,4,240,122,91,149,220,228,226,149, + 250,201,197,43,199,44,139,249,123,141,105,84,114,230,148,139,171,199,63,124, + 126,213,248,193,53,153,248,198,122,118,177,77,114,62,254,201,87,95,68,62, + 240,192,3,189,37,73,58,58,99,198,12,161,61,121,93,187,118,237,105,74, + 233,46,73,146,166,74,146,132,85,171,86,97,249,242,229,88,177,98,5,4, + 65,192,202,149,43,177,102,205,26,176,44,91,63,231,150,154,154,58,114,210, + 164,73,77,148,156,211,233,132,44,203,83,142,30,61,26,191,109,219,54,127, + 189,56,247,189,206,173,223,161,56,148,118,55,18,154,44,22,38,132,252,19, + 141,163,16,0,138,50,245,222,215,4,66,200,253,132,16,61,33,196,151,169, + 250,79,22,142,97,151,173,251,228,83,20,75,231,55,202,160,219,161,42,34, + 245,111,189,98,42,151,43,10,94,123,249,31,224,24,118,153,191,180,188,89, + 17,181,56,91,77,227,77,0,31,3,24,47,66,90,83,71,173,1,57,254, + 150,33,175,128,210,232,93,3,96,188,154,70,174,175,115,9,33,127,114,175, + 149,244,179,177,36,128,176,66,68,241,2,244,38,105,38,252,145,186,22,241, + 19,66,72,139,6,54,132,144,247,136,226,209,40,195,207,150,78,8,153,222, + 82,58,65,254,119,212,87,144,147,139,87,234,15,99,57,14,155,150,239,76, + 173,154,250,91,0,35,38,23,175,252,22,128,248,240,249,85,152,92,188,146, + 3,128,135,207,175,202,86,175,251,5,24,12,61,54,102,211,171,0,112,240, + 196,145,163,0,70,67,105,69,17,0,137,84,49,253,142,105,110,140,219,23, + 158,231,18,63,81,160,9,33,149,148,210,14,145,231,41,83,181,164,242,105, + 72,66,8,233,78,27,194,159,16,0,111,80,74,173,132,144,247,2,145,161, + 54,26,56,0,255,60,108,90,254,8,0,216,168,107,40,128,188,85,241,15, + 103,167,85,103,224,247,210,228,217,169,151,166,190,74,19,68,81,55,117,216, + 5,231,71,223,233,106,106,106,254,185,118,237,218,67,147,38,77,122,189,173, + 121,93,187,118,237,233,73,147,38,65,146,164,169,132,144,229,238,30,27,0, + 220,124,243,205,159,90,173,214,187,189,230,220,248,65,131,6,1,192,238,181, + 107,215,206,168,169,169,89,242,230,155,111,226,137,39,158,192,162,69,139,112, + 251,237,183,75,151,47,95,110,236,245,177,129,114,40,81,188,57,170,4,35, + 29,11,197,137,177,187,28,125,86,10,132,144,183,168,178,136,118,134,199,238, + 69,148,82,45,33,228,181,150,242,248,115,131,82,122,234,174,73,191,129,142, + 112,95,165,117,29,179,228,193,184,155,71,64,233,205,82,168,78,151,171,69, + 235,250,87,139,79,222,49,183,226,147,94,12,200,169,214,164,239,225,59,50, + 27,0,110,190,114,171,30,64,75,6,25,184,36,93,94,118,3,219,117,173, + 22,76,142,183,255,201,133,235,90,29,249,40,72,144,54,227,179,7,112,216, + 180,252,131,212,170,169,131,161,204,3,113,104,60,116,231,110,181,27,14,155, + 150,215,155,45,211,48,45,8,33,57,148,210,158,80,186,246,128,98,2,111, + 37,215,200,253,210,15,45,79,149,217,147,54,94,32,186,132,82,58,188,37, + 227,147,201,197,43,51,1,92,5,80,230,86,110,42,31,67,113,78,92,207, + 97,211,242,185,169,85,83,15,178,253,227,46,235,255,250,203,239,237,127,221, + 90,247,233,167,159,174,159,52,105,210,167,104,71,94,61,148,220,56,135,195, + 17,239,114,185,160,209,104,206,111,219,182,13,146,36,109,113,58,157,75,222, + 124,243,77,204,153,51,199,167,146,171,174,174,94,178,96,193,2,140,25,51, + 102,222,127,255,251,223,61,203,150,45,179,87,251,168,176,8,33,113,148,82, + 43,148,249,32,13,148,225,102,55,115,155,92,208,248,218,223,171,150,164,163, + 61,118,223,11,160,77,10,78,181,230,108,137,79,91,62,229,186,195,46,131, + 30,6,48,206,65,69,228,86,157,22,223,186,144,237,29,162,38,123,106,151, + 81,250,156,202,147,118,150,48,31,75,84,6,218,16,73,192,205,215,177,155, + 236,67,74,71,29,30,122,101,244,56,0,112,71,18,112,255,63,180,116,244, + 56,232,0,80,128,147,184,220,236,216,207,130,206,149,131,252,79,241,59,196, + 117,216,180,252,96,107,18,210,222,59,16,120,11,32,74,56,25,66,27,38, + 142,174,180,231,6,91,226,135,150,167,202,236,65,41,189,4,117,172,63,16, + 203,202,195,166,229,59,253,236,207,7,128,180,234,12,239,253,245,102,245,125, + 126,153,105,144,54,158,54,221,123,239,189,85,107,215,174,109,87,94,215,174, + 93,123,26,192,233,187,238,186,171,209,240,34,199,113,69,44,203,78,173,169, + 169,89,238,173,228,6,14,28,40,202,178,252,245,71,31,125,52,94,150,101, + 250,213,87,95,157,251,240,195,15,253,198,136,83,123,149,70,74,105,49,26, + 27,57,124,218,82,79,76,189,246,22,63,251,3,237,149,139,104,136,14,17, + 200,60,94,160,115,125,62,161,138,15,197,214,172,134,191,140,6,7,223,237, + 161,94,161,29,170,245,109,127,164,198,136,235,176,216,108,205,197,121,11,198, + 128,11,114,189,225,87,193,165,86,77,29,6,101,237,25,139,198,129,56,117, + 80,38,243,251,31,54,45,255,194,189,147,233,220,216,135,44,33,132,80,74, + 143,19,66,250,117,232,29,251,225,127,32,175,11,165,180,136,16,146,16,200, + 249,169,85,83,199,65,81,72,69,135,77,203,43,60,246,223,15,32,100,85, + 252,195,43,210,170,51,168,199,254,155,161,184,178,42,91,53,229,97,59,60, + 90,222,29,145,215,207,62,107,210,186,62,61,105,210,36,0,104,164,228,56, + 142,3,203,178,83,88,150,253,58,35,35,35,103,230,204,153,45,182,202,61, + 134,123,227,91,123,95,254,148,88,43,135,156,127,9,197,0,160,45,4,26, + 22,104,59,0,183,215,140,86,53,6,189,232,8,79,60,65,130,4,241,129, + 79,43,74,181,210,117,15,77,86,65,113,93,227,222,10,161,196,207,18,83, + 171,166,54,76,90,235,155,234,74,66,72,191,182,26,125,180,133,31,82,158, + 218,163,72,8,244,252,85,241,15,103,3,56,9,192,158,90,53,117,145,199, + 161,10,120,121,40,73,173,154,58,15,192,119,0,10,87,197,63,236,115,194, + 252,90,228,117,237,218,181,167,37,73,218,37,73,210,84,183,97,137,211,233, + 196,203,47,191,12,74,169,100,50,153,90,78,228,58,128,16,178,27,74,20, + 134,50,40,141,132,64,182,106,0,251,213,101,11,129,200,248,3,20,75,195, + 242,118,108,149,132,16,206,215,115,148,101,153,147,101,249,71,235,124,58,72, + 144,235,1,82,189,46,133,134,223,121,138,0,138,21,165,218,211,168,131,98, + 248,224,183,181,174,26,76,100,0,40,63,108,90,190,255,80,120,110,64,94, + 246,171,215,165,80,0,112,203,252,33,184,222,100,170,101,55,92,53,232,25, + 7,165,55,48,230,176,105,249,150,212,170,169,163,0,236,107,174,236,219,34, + 179,53,76,154,52,41,153,101,217,116,134,97,150,3,192,152,49,99,230,237, + 221,187,247,63,203,150,45,107,50,44,233,150,25,36,72,16,5,211,93,126, + 71,239,131,252,192,52,82,112,63,4,215,155,178,9,202,244,205,164,73,147, + 146,1,244,96,24,6,12,195,248,157,115,171,94,151,66,131,31,116,144,32, + 65,174,71,130,158,177,131,248,196,109,140,242,191,190,143,32,65,130,4,105, + 43,36,56,196,20,164,189,4,123,112,65,130,4,185,30,9,42,184,32,65, + 130,4,233,64,130,13,190,235,7,14,248,241,206,19,5,101,254,252,100,250, + 146,39,8,130,158,231,121,187,32,8,17,80,156,19,4,106,160,83,197,243, + 124,179,231,94,15,249,11,202,251,241,201,11,114,125,16,156,131,11,114,77, + 17,4,225,255,160,184,237,122,139,231,121,159,110,215,218,153,190,91,185,181, + 181,98,233,208,138,79,16,4,142,231,121,81,16,4,51,128,121,80,150,32, + 220,194,243,124,171,154,245,130,32,196,1,168,227,121,222,95,212,128,32,65, + 130,180,64,80,193,5,185,38,8,130,208,11,64,190,199,174,44,65,16,100, + 0,169,60,207,31,109,225,218,24,0,81,30,187,202,121,158,191,234,235,92, + 85,185,57,219,125,195,29,132,170,220,138,0,244,80,119,133,2,56,37,8, + 194,192,150,242,237,149,78,139,94,251,131,4,9,210,60,237,82,112,81,81, + 81,141,22,162,150,151,151,7,125,207,117,16,81,81,81,141,158,77,121,121, + 121,171,156,71,183,65,94,135,61,75,65,16,94,3,240,148,250,179,6,202, + 144,97,44,20,199,2,135,208,204,123,39,8,66,40,128,75,94,231,156,6, + 154,141,204,89,127,46,207,243,173,234,145,9,130,16,215,22,101,226,209,83, + 91,131,134,200,22,18,20,215,100,61,124,92,146,39,8,194,118,143,223,90, + 0,75,120,158,111,77,220,187,32,65,130,180,130,54,41,184,71,31,125,84, + 223,171,87,175,33,12,195,244,131,18,95,9,0,10,41,165,199,139,138,138, + 242,222,121,231,157,160,162,107,39,215,90,161,185,153,57,115,166,190,103,207, + 158,153,132,144,161,132,144,68,74,41,40,165,133,178,44,31,40,40,40,200, + 249,215,191,254,213,150,103,249,56,0,244,217,188,25,41,217,217,146,169,180, + 180,147,32,8,59,0,140,2,192,10,130,112,15,207,243,159,248,185,182,28, + 141,223,203,90,158,231,3,118,65,79,129,83,0,162,87,11,194,120,0,54, + 40,74,245,185,230,174,17,4,1,234,121,59,120,158,127,43,16,57,170,114, + 115,15,139,158,0,144,140,6,255,151,238,115,136,32,8,238,232,19,26,52, + 142,92,14,0,163,5,65,144,154,41,139,235,2,119,153,18,32,38,40,43, + 200,143,137,128,21,156,197,98,121,28,192,139,80,253,82,202,178,12,73,146, + 64,41,173,113,185,92,139,53,26,77,116,126,126,65,101,104,104,136,62,61, + 61,93,220,181,107,87,187,42,104,65,16,26,201,243,224,50,128,97,60,207, + 7,20,151,170,149,50,243,0,12,246,218,45,3,248,13,128,207,121,158,239, + 16,165,227,253,97,121,151,173,7,151,1,12,51,155,205,29,150,87,79,217, + 233,233,233,49,44,203,222,113,226,196,201,9,41,41,201,247,184,92,78,80, + 74,193,48,44,78,156,56,241,73,84,84,84,183,244,244,244,93,187,118,237, + 106,173,89,24,19,113,254,60,126,241,239,127,3,64,4,5,182,17,158,31, + 173,14,81,18,0,143,0,168,175,212,61,122,67,18,26,187,143,187,194,243, + 124,167,64,133,70,20,23,3,138,162,65,198,219,111,239,207,157,53,235,126, + 158,231,215,8,130,80,2,37,166,96,75,220,173,222,203,155,45,157,40,8, + 194,113,0,232,149,147,3,211,197,139,125,242,238,191,255,69,168,17,162,61, + 206,41,0,16,237,227,114,138,134,185,191,181,104,195,60,32,5,78,93,5, + 58,119,34,204,61,0,3,147,233,230,220,202,202,157,77,26,35,122,125,15, + 189,221,126,206,211,147,119,171,28,34,83,192,2,181,76,101,192,246,238,244, + 30,119,64,241,81,219,99,214,210,115,141,210,122,123,122,143,44,247,255,222, + 199,90,43,139,2,86,226,21,141,188,35,249,33,101,5,249,223,225,55,162, + 55,5,78,81,224,170,197,98,209,91,44,150,63,3,120,30,94,21,48,33, + 4,12,195,132,233,116,58,51,195,48,5,239,191,191,226,248,91,111,189,85, + 217,22,229,230,150,167,14,81,1,202,16,151,175,0,150,157,1,156,23,4, + 225,158,214,202,104,70,166,94,16,132,3,104,170,220,0,165,140,62,3,240, + 165,32,8,190,134,158,90,43,211,253,97,69,203,74,15,3,0,94,70,51, + 121,181,88,44,237,206,171,183,108,7,33,246,164,164,36,228,229,229,253,227, + 134,27,186,222,243,225,135,255,198,142,29,155,241,254,251,239,225,189,247,222, + 65,239,222,73,247,28,56,112,96,249,144,33,67,210,31,125,244,209,214,250, + 68,164,149,221,186,161,180,119,111,247,239,95,22,222,116,211,72,158,231,221, + 239,219,247,238,3,30,202,77,70,227,247,241,34,26,66,18,5,68,101,124, + 60,160,58,47,238,150,151,135,232,130,130,143,4,65,152,9,69,241,188,29, + 96,50,111,180,124,10,0,128,70,124,255,61,70,44,91,134,254,95,126,73, + 38,62,243,204,21,31,195,163,137,0,194,188,47,84,203,161,205,81,47,220, + 207,49,6,8,95,68,229,45,70,99,159,123,195,194,110,204,74,72,120,46, + 43,33,225,185,80,245,239,184,132,132,231,178,12,134,100,142,16,46,21,192, + 22,128,164,162,33,220,85,64,16,192,140,6,135,208,250,244,189,213,255,8, + 203,88,176,52,44,99,193,150,183,167,247,168,79,235,237,233,61,244,97,25, + 11,182,184,250,252,126,11,128,212,119,102,244,110,181,31,77,47,89,6,218, + 206,40,15,215,139,172,32,255,59,124,246,224,60,91,55,191,123,247,221,218, + 248,239,191,231,44,22,139,30,192,95,160,56,165,61,2,197,8,32,1,64, + 184,122,217,90,139,197,50,223,108,54,255,189,181,55,225,41,111,252,11,47, + 84,11,130,80,12,224,63,0,102,55,39,79,16,132,249,60,207,183,90,158, + 183,204,81,139,22,217,118,62,241,196,40,0,219,160,244,216,142,1,112,0, + 184,65,221,24,0,89,80,156,235,70,180,69,158,27,2,152,169,18,19,141, + 165,12,163,95,57,99,134,245,146,82,145,95,196,53,40,91,127,178,53,148, + 234,180,7,14,220,57,106,226,196,191,46,94,188,248,69,173,86,142,152,121, + 99,56,208,139,193,251,223,69,99,209,162,69,120,226,137,39,113,230,204,153, + 9,169,169,169,231,17,184,151,125,64,137,111,23,177,121,254,124,140,121,227, + 13,116,59,116,8,93,143,28,217,181,246,159,255,124,199,166,88,21,214,184, + 79,244,80,110,158,202,161,140,231,249,27,218,152,71,238,220,144,33,180,123, + 94,30,70,47,92,136,157,79,60,49,243,106,82,82,25,20,133,114,198,207, + 101,101,0,110,106,165,40,90,217,189,59,138,135,14,69,247,3,7,16,126, + 233,210,34,0,255,132,162,72,3,233,45,106,91,41,175,30,2,152,37,224, + 79,12,192,252,94,163,193,160,97,229,247,158,28,246,77,5,148,88,129,195, + 160,40,214,105,0,150,129,74,195,100,107,98,70,232,200,103,1,224,85,158, + 231,23,7,34,99,201,83,153,110,95,179,228,61,224,182,71,254,249,245,231, + 90,151,164,233,85,80,155,118,186,178,242,152,45,34,162,172,153,203,83,24, + 67,108,230,146,167,186,0,74,111,53,23,0,102,188,158,211,114,36,10,128, + 163,202,156,173,14,192,20,10,108,33,74,84,240,14,231,135,148,21,228,127, + 131,79,5,231,89,17,118,190,120,145,93,57,115,38,125,216,108,38,80,122, + 113,141,176,88,44,255,1,112,183,250,115,62,128,86,87,194,158,242,162,207, + 157,35,209,5,5,221,203,122,245,202,227,121,190,73,37,32,8,66,187,229, + 121,203,236,250,221,119,136,61,115,102,235,149,222,189,11,189,231,123,4,65, + 24,0,96,61,128,158,0,76,130,32,236,230,121,126,100,91,100,186,185,233, + 198,27,35,114,242,242,202,181,46,151,230,55,171,87,27,62,154,58,245,235, + 233,11,23,54,201,107,71,148,173,55,191,125,224,129,208,149,107,214,84,107, + 101,89,243,218,217,179,75,199,172,92,190,136,101,197,82,131,129,68,16,2, + 0,4,37,37,69,232,219,55,17,43,86,252,11,51,103,62,126,15,33,36, + 111,225,194,133,57,79,62,249,100,139,21,148,218,35,139,116,15,55,238,120, + 252,113,140,123,249,101,116,58,125,154,100,190,245,214,131,217,102,243,87,50, + 199,205,21,4,161,39,207,243,147,4,65,112,161,177,114,179,241,60,223,174, + 57,145,220,89,179,164,172,87,94,97,59,157,62,141,9,47,188,208,15,192, + 14,181,226,106,242,254,122,220,119,155,150,25,236,124,226,9,60,196,243,14, + 134,82,157,213,100,162,95,84,84,204,183,69,70,206,7,176,160,141,183,31, + 16,44,16,114,106,244,104,91,242,142,29,24,182,255,74,248,247,125,226,159, + 182,134,234,120,0,99,0,184,123,252,211,64,72,54,99,136,206,106,38,41, + 127,100,64,9,52,59,13,192,138,15,167,253,226,227,113,235,143,63,216,229, + 66,53,50,223,122,171,127,182,217,252,170,191,11,9,171,187,1,12,115,31, + 128,41,0,150,65,81,186,251,151,60,149,9,160,169,61,143,32,8,55,2, + 72,240,48,184,233,6,160,20,202,123,241,33,5,54,19,165,97,116,45,104, + 36,171,104,248,240,253,57,179,103,187,167,4,56,0,118,127,83,19,130,32, + 140,4,240,18,207,243,163,175,209,189,5,105,39,126,135,40,9,192,157,239, + 222,157,114,162,136,73,43,87,34,247,150,91,122,0,128,58,100,201,89,44, + 150,80,0,48,155,205,191,129,18,154,4,0,180,22,139,101,97,91,110,132, + 0,92,105,82,18,101,93,46,252,242,245,215,49,232,179,207,110,2,20,115, + 115,65,16,36,65,16,74,1,128,231,249,70,242,4,65,104,147,60,183,204, + 51,153,153,224,92,46,220,242,234,171,154,135,120,254,175,222,231,240,60,127, + 148,231,249,68,143,93,191,104,171,60,55,162,40,134,188,245,236,179,229,197, + 61,122,32,180,166,6,15,47,94,156,76,129,184,107,85,182,110,210,211,211, + 147,99,98,98,126,59,231,215,191,94,126,204,100,66,88,109,45,150,148,149, + 255,254,229,59,77,43,254,114,171,73,105,107,83,10,243,184,112,76,30,112, + 5,201,201,137,112,58,29,32,132,36,182,152,184,138,218,35,227,120,158,103, + 1,84,83,142,147,191,126,244,81,234,8,9,65,167,51,103,34,6,175,89, + 115,183,58,148,247,27,65,16,62,0,224,105,58,239,224,121,190,221,115,33, + 178,70,131,157,179,103,195,26,17,1,40,21,87,97,123,211,108,129,110,0, + 168,161,170,10,191,121,226,137,23,50,23,47,126,31,202,208,164,191,173,67, + 216,199,243,40,77,78,70,72,157,11,119,126,112,136,48,146,188,16,192,127, + 213,195,23,149,63,76,192,207,206,141,218,123,27,6,69,185,1,192,20,187, + 81,219,55,123,98,63,184,56,6,157,206,156,193,224,53,107,252,71,102,103, + 52,113,0,227,142,164,62,13,138,178,220,2,32,213,207,21,11,0,124,32, + 8,66,26,0,16,224,42,20,229,10,0,164,36,37,229,130,32,8,143,9, + 130,176,78,16,132,10,65,16,202,5,65,56,32,8,194,115,128,210,168,106, + 109,30,221,16,224,106,93,84,20,47,51,12,0,16,151,94,159,175,46,254, + 95,8,101,164,161,84,16,132,63,11,130,208,168,145,32,8,66,63,40,81, + 64,50,154,36,26,228,186,193,175,130,3,128,15,166,79,39,197,61,122,192, + 104,181,34,125,219,182,179,20,136,51,155,205,118,179,217,44,66,245,22,97, + 177,88,244,102,179,217,179,101,60,177,173,55,147,109,54,147,210,228,100,232, + 107,107,145,250,217,103,51,41,16,7,101,248,136,1,96,0,20,51,114,158, + 231,59,68,30,0,236,125,248,97,92,77,76,132,198,110,7,148,214,98,156, + 159,83,221,134,7,237,90,24,220,191,127,127,189,36,73,161,46,173,54,110, + 221,131,15,194,161,211,129,19,69,0,40,188,150,101,155,158,158,158,156,148, + 148,244,155,188,188,188,229,157,7,15,158,241,252,192,129,168,14,13,197,48, + 135,75,59,124,111,101,17,148,225,45,21,165,51,115,230,76,62,40,5,26, + 2,136,7,134,135,146,51,241,60,207,222,253,244,211,140,174,174,238,223,148, + 16,244,219,188,25,187,166,79,95,12,165,55,245,0,148,74,98,15,128,10, + 158,231,59,44,254,153,61,34,2,57,127,248,131,251,167,145,42,177,248,174, + 9,158,21,50,1,72,143,125,251,78,243,60,95,235,111,235,40,185,148,227, + 176,115,246,108,212,133,104,16,86,227,192,141,57,103,163,1,72,51,94,207, + 33,104,152,223,109,43,110,197,168,42,74,152,108,33,90,236,29,17,87,35, + 177,44,250,109,222,140,25,203,206,29,246,121,37,195,152,188,174,77,86,255, + 246,242,35,75,7,229,27,255,214,61,7,191,90,16,246,108,157,59,23,50, + 203,34,238,212,41,99,98,110,238,163,60,207,223,9,224,0,148,101,25,67, + 0,252,77,181,66,21,129,182,41,58,65,16,158,253,116,225,194,183,182,204, + 155,7,137,101,145,148,147,131,93,211,167,83,40,70,39,84,149,245,50,128, + 205,130,32,156,18,4,33,89,85,110,121,80,134,153,229,214,202,12,242,195, + 209,172,130,147,57,14,235,30,124,16,78,173,22,80,91,194,106,15,131,3, + 0,247,95,47,218,60,183,224,110,121,187,116,58,0,32,167,110,185,229,50, + 148,33,186,35,0,66,213,97,164,71,58,74,30,160,84,18,57,179,103,187, + 171,112,114,50,43,235,178,32,8,75,212,94,35,85,183,7,120,158,255,99, + 123,228,52,146,169,74,171,11,11,195,142,91,111,181,170,187,141,18,33,167, + 174,69,217,62,250,232,163,250,33,67,134,164,159,57,115,230,165,81,163,70, + 97,225,194,133,184,76,128,143,126,243,27,56,1,12,60,82,251,209,201,79, + 174,124,49,253,189,98,2,2,188,184,169,10,243,254,83,9,89,6,24,134, + 1,165,180,213,61,32,239,97,29,2,252,142,80,122,17,0,110,92,185,114, + 86,236,169,83,28,128,241,0,230,0,40,228,121,62,202,71,50,237,226,138, + 98,228,226,174,100,83,40,16,208,252,83,91,32,138,85,232,191,213,159,215, + 68,161,38,36,60,167,119,111,38,83,122,40,160,40,242,236,95,165,128,2, + 24,148,119,1,153,91,78,47,91,242,84,230,28,40,149,114,19,76,166,244, + 80,119,26,1,138,109,164,40,143,164,198,148,230,61,240,0,0,128,161,72, + 118,113,204,146,37,79,101,234,137,46,220,151,145,84,160,74,214,173,36,56, + 0,101,130,32,212,1,56,127,105,224,64,28,80,101,221,184,114,229,144,207, + 95,120,225,255,160,24,1,121,182,184,24,245,27,189,208,90,43,103,65,16, + 206,65,233,61,70,92,73,78,134,59,95,55,189,255,62,98,206,156,233,3, + 197,184,204,45,139,64,81,212,199,160,212,71,186,214,200,10,242,191,161,89, + 5,7,40,149,112,246,196,137,14,245,167,241,25,179,249,168,218,203,128,217, + 108,22,205,102,179,247,188,140,132,118,96,143,136,192,183,15,61,228,0,128, + 148,109,219,112,231,211,79,207,3,112,30,192,46,40,189,184,165,29,41,15, + 0,234,98,98,200,169,177,99,11,0,160,79,118,54,238,153,61,251,86,0, + 35,161,24,30,196,242,60,255,161,32,8,29,50,167,114,236,216,49,59,165, + 180,190,21,127,240,166,155,108,80,43,97,134,210,228,103,204,230,133,64,199, + 150,109,126,126,126,119,0,55,103,101,101,97,245,234,85,208,104,36,0,14, + 124,120,46,31,155,199,222,2,0,88,112,213,62,11,0,40,197,219,181,181, + 20,128,14,15,63,60,29,149,149,21,135,88,150,245,159,120,43,32,192,13, + 231,134,13,3,231,114,33,99,201,146,103,117,213,213,67,161,24,101,60,216, + 158,161,230,150,100,2,112,169,63,103,209,166,107,209,58,82,214,239,112,141, + 20,106,66,194,115,89,80,140,174,222,4,240,102,68,68,230,43,238,99,37, + 93,195,80,152,28,35,2,64,202,209,203,198,152,146,154,55,160,228,251,178, + 119,58,234,117,111,2,152,173,166,233,15,191,202,226,228,184,113,200,207,80, + 70,230,8,165,143,117,47,40,91,203,232,76,205,174,53,108,5,90,120,152, + 236,159,28,55,14,197,131,7,131,115,185,112,251,95,255,250,224,67,60,95, + 6,165,145,235,221,115,234,42,8,194,177,64,133,8,130,208,196,74,247,228, + 184,113,111,219,194,195,37,86,20,49,254,197,23,127,145,180,99,199,126,40, + 214,220,158,22,175,28,2,168,55,131,92,31,180,244,160,206,2,192,145,97, + 195,116,181,97,97,110,171,169,38,31,174,197,98,89,226,241,243,131,118,220, + 207,89,0,40,200,204,212,89,77,166,50,0,8,43,45,237,21,123,250,244, + 173,0,250,243,60,111,87,93,51,117,148,188,122,190,229,249,16,168,149,147, + 161,186,186,199,67,60,255,16,207,243,123,61,92,68,61,235,255,234,214,65, + 41,117,64,205,43,128,232,151,45,150,233,240,168,132,255,248,220,115,245,149, + 112,71,148,173,40,138,9,71,143,30,157,226,114,57,193,48,18,22,220,25, + 14,190,127,9,52,26,25,175,57,237,216,63,112,32,12,0,138,89,134,62, + 250,94,241,236,144,144,240,202,199,30,123,12,70,163,17,221,186,197,167,49, + 12,211,7,64,230,194,133,11,91,53,132,168,206,159,78,20,4,225,1,245, + 183,188,107,198,12,148,37,36,32,164,172,12,25,239,188,243,18,145,229,43, + 106,89,60,161,122,64,185,22,244,246,248,127,19,245,189,36,163,67,184,150, + 10,117,102,214,198,87,103,102,109,156,49,51,107,227,140,89,227,182,78,241, + 60,182,117,98,191,115,39,251,199,129,161,192,184,255,30,71,212,149,218,97, + 0,114,0,212,121,158,55,247,174,175,167,60,125,231,142,25,79,223,185,195, + 175,145,72,32,236,157,60,25,87,226,66,193,74,20,3,243,46,252,138,200, + 100,58,20,203,227,142,196,206,243,60,137,63,120,48,193,99,223,158,135,120, + 254,63,60,207,179,234,92,174,103,111,174,159,32,8,235,90,74,84,16,132, + 63,0,232,226,177,235,8,128,72,158,231,103,27,170,171,123,1,0,35,203, + 24,177,98,197,139,15,241,252,82,40,138,208,210,238,220,4,249,193,105,73, + 193,213,15,203,45,158,55,47,2,234,135,75,129,89,119,11,2,15,0,22, + 139,229,1,0,143,169,167,73,102,179,121,94,59,238,167,94,222,127,222,122, + 171,94,94,214,203,47,147,94,57,57,255,1,0,181,178,172,151,199,243,124, + 123,228,1,13,173,220,206,171,5,97,30,124,84,78,130,32,120,206,155,172, + 106,167,60,28,57,114,164,18,30,121,133,98,165,89,95,9,115,162,248,57, + 5,66,59,170,108,69,81,236,70,41,133,36,53,52,122,41,165,152,148,120, + 30,46,151,3,79,27,141,184,208,185,51,186,73,50,206,36,36,84,60,252, + 208,35,59,246,238,221,235,30,158,4,0,30,192,125,104,133,146,19,4,97, + 10,20,95,148,235,161,24,16,80,0,68,214,106,177,243,241,199,225,210,233, + 208,229,248,113,12,254,248,227,63,64,89,126,81,9,224,41,65,16,62,106, + 75,30,155,131,40,11,147,103,52,252,68,135,59,9,240,226,154,40,212,119, + 178,39,204,125,39,123,194,146,119,178,39,44,121,123,203,216,21,222,199,119, + 141,237,13,171,81,153,143,187,117,221,177,219,137,76,251,3,216,7,15,37, + 240,234,103,55,175,120,109,221,232,37,175,173,27,237,223,72,36,0,100,173, + 22,199,7,117,254,90,38,4,221,190,175,196,164,85,251,25,40,22,147,127, + 107,230,178,214,206,145,81,65,16,134,250,123,126,234,60,47,131,198,22,150, + 191,22,4,161,165,37,38,255,244,248,255,18,207,243,131,120,158,175,84,19, + 247,37,43,9,141,191,215,32,63,18,154,85,112,102,179,121,29,165,180,64, + 253,201,190,246,194,11,26,167,70,163,12,70,159,56,177,236,149,5,11,214, + 67,177,54,114,159,223,46,223,150,60,207,175,67,195,90,37,246,131,101,203, + 52,162,86,11,86,20,49,114,217,178,169,255,183,98,69,21,148,161,137,114, + 245,252,142,112,22,253,91,52,12,119,172,252,96,233,210,250,52,29,33,33, + 155,87,191,255,190,5,13,47,188,147,231,249,169,29,32,19,102,179,121,157, + 44,203,245,101,251,178,197,82,180,237,246,219,183,0,0,35,203,228,84,255, + 254,213,80,134,73,87,168,231,183,57,175,148,82,136,162,8,141,70,3,74, + 89,204,251,79,37,204,159,92,193,211,31,150,226,240,225,35,168,176,217,240, + 100,183,110,168,210,104,144,84,84,20,49,245,221,119,179,157,78,231,153,205, + 155,55,195,229,114,185,149,220,20,4,168,228,212,8,2,158,11,103,173,158, + 199,235,98,98,172,26,135,227,115,0,232,255,229,151,209,9,123,246,220,201, + 243,124,164,122,248,62,117,41,72,135,66,128,247,0,124,174,254,12,167,192, + 183,29,45,195,67,86,135,43,212,162,162,231,179,161,140,156,204,1,48,167, + 178,50,231,207,222,231,72,28,131,175,110,235,115,197,102,224,16,86,237,32, + 195,118,23,245,135,210,131,171,239,173,168,215,205,1,176,88,77,51,80,12, + 222,59,142,167,24,238,4,232,151,0,16,89,110,211,116,223,183,111,214,147, + 79,61,243,252,204,197,71,146,90,186,182,21,50,247,8,130,208,203,215,243, + 115,207,185,169,239,142,231,59,230,119,81,191,32,8,158,195,254,34,207,243, + 93,189,141,83,188,101,245,251,242,203,239,16,156,115,251,81,210,226,88,242, + 188,121,243,146,36,73,170,2,0,81,163,193,178,57,115,96,53,26,1,128, + 164,127,245,213,68,40,174,134,0,0,22,139,133,90,44,150,115,237,185,33, + 158,231,147,1,84,0,128,164,213,98,253,203,47,195,30,26,10,0,100,208, + 186,117,225,0,106,120,158,143,6,96,87,39,151,219,43,111,59,128,119,220, + 191,37,157,142,124,250,198,27,176,135,134,66,87,87,135,212,207,62,251,51, + 128,103,212,195,90,85,230,31,124,38,214,74,254,242,151,191,212,151,45,0, + 124,155,158,62,238,195,169,83,33,19,130,228,99,199,72,202,145,62,73,170, + 81,0,0,32,0,73,68,65,84,35,179,0,60,12,180,175,108,101,89,46, + 22,69,17,95,125,245,21,126,251,219,135,224,114,49,168,171,3,106,107,157, + 112,56,68,228,231,231,99,215,249,243,248,252,119,191,3,5,16,95,86,246, + 246,191,242,242,190,178,217,108,216,180,105,83,91,148,156,219,196,155,2,152, + 197,43,195,191,159,122,28,159,73,128,137,148,144,74,0,184,249,189,247,240, + 217,63,254,177,16,13,150,156,119,171,78,140,3,37,32,51,79,162,88,161, + 186,91,251,195,40,240,116,43,100,180,138,107,161,80,139,138,158,183,187,183, + 170,170,93,62,173,49,47,244,136,116,109,187,189,47,40,128,193,123,139,49, + 60,247,236,76,40,6,47,235,0,160,170,106,87,173,59,141,22,196,185,27, + 95,110,55,109,93,1,0,178,92,255,190,82,71,117,45,75,113,59,212,50, + 29,177,98,5,222,55,63,189,248,157,63,12,214,67,113,142,93,213,232,90, + 255,203,53,154,107,188,105,0,156,22,4,225,134,22,158,159,103,175,236,215, + 205,164,87,141,134,247,229,89,160,169,65,20,160,188,43,213,113,113,118,0, + 24,184,126,61,9,43,241,235,143,59,56,31,119,29,211,226,195,177,88,44, + 220,179,207,62,27,1,96,39,0,90,29,25,137,207,39,77,130,76,8,70, + 108,223,142,95,125,252,241,67,107,214,172,25,136,6,15,0,221,45,22,203, + 119,109,189,33,117,216,33,202,45,175,46,38,6,95,63,246,24,100,66,48, + 96,253,122,36,237,216,241,133,122,170,219,162,176,187,32,8,109,150,7,0, + 60,207,255,65,29,207,183,3,128,151,76,114,251,95,254,18,226,229,134,105, + 145,32,8,115,218,35,19,0,254,244,167,59,66,143,28,89,219,153,82,154, + 3,245,163,59,151,148,132,125,25,25,32,0,110,255,228,19,18,251,230,155, + 155,61,46,105,83,217,82,74,207,201,178,60,85,150,101,228,230,230,98,198, + 140,25,136,136,136,64,100,100,20,34,34,34,16,30,30,142,169,83,167,226, + 124,74,10,246,222,122,43,0,160,119,109,237,99,115,206,158,253,212,110,183, + 251,84,114,148,210,230,214,255,184,223,171,151,121,158,127,7,168,95,191,232, + 174,88,20,147,122,74,99,1,72,140,44,99,162,217,252,4,207,243,61,209, + 80,129,221,43,8,66,160,238,147,214,66,153,255,169,107,233,68,40,81,13, + 220,198,58,175,82,224,198,0,101,180,154,31,82,161,2,178,91,121,116,189, + 208,35,18,165,157,195,92,4,64,191,195,23,53,225,149,182,8,158,231,239, + 66,128,115,100,170,199,145,195,80,134,232,115,161,12,61,2,144,87,64,118, + 249,170,233,99,41,32,105,173,86,252,122,217,202,89,122,137,187,4,224,21, + 40,145,35,220,67,169,203,0,236,247,35,114,15,148,81,20,209,207,6,0, + 233,110,89,240,241,252,120,158,55,3,216,1,101,40,177,115,51,217,75,132, + 242,254,101,243,60,255,74,51,231,97,195,139,47,62,85,211,169,19,213,90, + 173,184,253,217,103,17,113,254,252,33,40,198,110,238,237,107,143,252,5,185, + 14,105,212,114,122,254,190,46,212,158,216,101,20,148,238,120,174,197,146,103, + 55,155,205,162,197,98,225,204,102,243,104,0,176,88,44,19,11,251,244,137, + 175,9,15,127,205,84,85,101,232,119,240,96,248,148,219,98,143,108,204,201, + 25,156,153,153,121,47,148,33,153,129,22,139,165,192,108,54,247,178,88,44, + 156,193,240,133,30,64,255,39,159,220,181,183,165,27,242,88,67,53,26,0, + 4,65,152,120,49,53,53,222,22,25,249,90,72,121,185,97,196,138,21,160, + 192,211,171,21,39,182,229,110,121,130,32,20,240,60,223,203,237,219,176,181, + 5,161,94,103,16,148,168,208,191,190,152,154,26,238,12,9,177,232,107,107, + 67,162,138,139,19,84,153,197,0,226,85,153,175,11,130,128,64,28,243,122, + 99,54,15,209,3,24,161,47,252,246,171,196,196,238,227,107,106,62,25,15, + 32,67,95,120,105,11,233,127,215,226,156,177,163,207,220,152,147,243,134,214, + 233,100,31,46,45,157,240,232,234,213,95,246,126,232,161,9,240,81,182,110, + 139,214,230,216,183,111,223,233,225,195,135,67,150,229,169,0,150,239,218,181, + 11,211,166,77,131,40,138,96,24,6,28,199,97,247,238,221,24,55,110,28, + 190,25,55,14,81,151,47,35,249,208,33,220,89,82,114,247,145,240,240,151, + 183,70,71,63,179,105,211,38,220,122,235,173,96,89,22,12,195,76,57,127, + 254,252,215,207,60,243,140,94,177,164,110,130,91,145,205,133,18,244,211,237, + 60,219,221,72,184,8,229,135,72,129,52,0,71,88,73,130,83,175,183,127, + 68,233,82,16,242,59,40,46,209,166,8,130,112,152,231,249,127,162,25,120, + 158,191,191,165,50,112,227,41,83,221,181,27,74,20,128,48,120,184,16,235, + 64,98,161,52,156,88,40,21,114,46,1,246,66,113,233,97,106,246,202,22, + 152,60,249,225,101,179,103,255,97,90,95,87,217,70,198,24,155,11,130,115, + 80,93,116,173,191,63,245,220,131,75,247,190,96,172,115,145,187,255,253,29, + 38,223,121,55,157,60,249,225,230,42,254,70,204,120,61,39,91,93,240,157, + 11,101,49,243,90,200,50,168,228,152,228,125,46,1,196,138,112,238,70,132, + 197,237,143,188,112,1,99,54,73,17,91,238,232,91,65,89,206,221,232,93, + 3,15,151,93,222,240,60,255,39,0,127,10,228,190,124,61,63,10,232,136, + 50,220,56,166,165,235,213,117,136,159,192,195,217,183,63,126,55,109,218,59, + 84,49,212,57,162,113,56,48,113,222,188,65,80,101,5,114,175,65,254,247, + 144,234,117,41,52,252,206,83,196,108,30,162,215,23,94,178,1,128,61,177, + 203,111,161,24,95,124,11,223,15,147,211,57,164,17,127,122,231,232,38,131, + 93,98,202,66,89,104,109,244,230,183,255,254,34,7,165,21,229,174,200,202, + 204,102,115,204,191,102,36,152,173,125,186,149,0,248,96,74,194,21,27,208, + 250,16,242,84,117,155,131,134,144,36,55,173,22,4,157,183,60,158,231,99, + 188,149,92,91,195,214,251,145,249,17,20,63,145,110,102,240,60,255,158,247, + 181,190,100,170,138,141,3,240,79,125,225,165,71,0,192,158,216,101,30,128, + 165,22,75,222,213,231,239,235,66,213,125,175,206,92,113,242,63,221,74,172, + 223,0,128,139,16,121,218,189,247,254,185,111,90,218,63,224,85,182,158,74, + 174,165,124,14,31,62,60,153,16,146,206,48,204,114,142,227,192,113,74,251, + 166,119,239,222,159,158,60,121,242,110,141,70,131,241,227,199,195,40,203,184, + 127,225,66,68,95,190,12,135,70,67,111,251,197,47,102,219,129,183,245,122, + 61,198,143,31,143,205,155,55,35,45,45,237,97,155,205,182,230,149,241,95, + 53,121,158,170,247,126,119,20,0,23,128,177,0,190,114,151,163,183,83,98, + 170,172,109,154,3,0,46,157,238,252,218,197,139,115,37,157,110,2,26,252, + 126,206,229,121,254,181,64,242,168,202,23,253,201,242,37,19,192,78,2,140, + 86,175,165,158,215,248,147,39,8,194,81,0,253,155,147,225,33,107,0,26, + 42,100,25,128,110,181,98,210,158,236,125,125,43,222,85,61,64,102,3,244, + 85,66,184,185,17,17,99,150,152,76,35,71,64,121,63,40,128,61,15,212, + 28,184,255,249,178,47,151,106,32,99,61,128,73,192,51,78,96,17,212,145, + 138,86,202,195,59,51,122,235,169,228,156,29,150,177,224,85,0,168,201,157, + 111,152,181,244,156,29,80,156,45,119,239,49,221,118,219,252,249,96,40,133, + 204,16,84,70,26,6,70,151,89,27,5,121,109,235,183,232,141,215,243,3, + 128,20,210,48,156,218,161,242,2,149,229,150,103,186,171,181,193,55,130,92, + 43,124,14,81,234,11,47,125,0,101,30,204,4,197,179,135,201,99,139,3, + 16,237,208,177,154,133,183,197,48,165,225,28,162,107,37,132,73,114,238,51, + 102,243,110,40,62,27,221,68,91,44,22,43,129,44,123,237,111,53,106,171, + 41,205,99,215,238,135,120,190,137,60,65,16,172,29,21,214,198,143,204,222, + 240,240,134,15,96,73,32,67,105,102,243,144,76,40,195,35,33,110,229,166, + 242,49,20,231,196,245,232,11,47,205,125,103,74,159,196,179,241,161,159,0, + 128,134,82,230,253,53,107,94,253,229,23,95,220,226,113,90,180,197,98,177, + 6,210,131,115,179,111,223,190,211,148,210,93,178,44,143,19,69,113,170,195, + 225,152,42,138,226,248,227,199,143,191,39,138,226,12,247,156,155,149,97,176, + 241,119,191,131,76,8,116,46,23,217,188,119,239,219,67,106,106,254,102,179, + 217,176,110,221,58,244,236,217,115,94,94,94,222,158,119,223,125,215,231,60, + 14,207,243,113,104,88,228,171,129,50,220,236,110,36,52,177,222,35,202,176, + 210,6,0,208,56,28,113,26,187,189,187,106,56,32,171,219,189,222,215,4, + 138,32,8,83,124,109,171,5,225,104,73,74,202,33,153,97,64,9,25,249, + 127,203,151,187,123,157,174,102,19,108,3,68,113,71,230,238,233,51,0,92, + 218,154,154,211,104,159,127,69,59,64,15,3,24,71,169,120,216,102,59,45, + 22,21,61,159,93,84,244,252,22,245,111,173,165,236,243,101,46,117,73,207, + 29,0,106,129,151,105,43,35,52,120,50,115,201,25,59,128,195,53,185,243, + 199,213,228,206,31,231,86,110,0,48,107,233,57,251,247,231,150,142,171,136, + 224,190,81,204,101,169,43,170,204,90,209,142,252,53,139,231,59,3,229,153, + 5,50,60,125,221,203,10,210,177,248,158,220,165,20,250,194,75,7,91,186, + 216,165,97,240,217,77,17,152,158,125,21,12,85,62,220,103,204,230,20,2, + 16,139,197,226,174,48,174,64,153,187,105,247,106,97,2,28,165,74,69,49, + 7,106,69,241,16,207,167,16,128,120,56,203,109,115,24,146,214,200,92,45, + 8,59,161,142,245,7,98,89,169,47,188,180,211,207,254,124,0,120,254,190, + 46,222,251,63,88,61,50,12,9,37,90,240,59,202,65,1,151,46,47,239, + 123,243,174,93,141,203,182,149,236,219,183,239,52,128,211,195,134,13,107,100, + 36,194,48,76,17,195,48,83,237,118,251,114,247,112,228,167,51,102,96,252, + 135,31,2,148,202,61,7,14,172,62,112,246,236,120,89,150,233,241,227,199, + 207,237,217,179,199,111,51,85,237,65,27,213,168,16,158,190,37,63,117,247, + 196,188,33,192,29,20,184,115,181,32,212,199,221,83,253,89,122,166,25,168, + 50,175,239,193,161,153,48,40,91,254,242,23,232,171,170,96,55,153,52,170, + 140,251,124,57,248,110,9,213,135,98,223,230,206,89,13,124,123,235,11,47, + 228,69,23,22,14,145,57,78,148,53,154,91,160,204,223,4,18,121,192,31, + 245,86,144,118,187,111,251,163,16,200,127,160,74,132,241,137,154,14,168,156, + 155,139,243,54,107,233,185,236,89,64,54,5,238,36,170,81,203,181,196,253, + 206,252,212,100,5,233,56,124,43,56,66,96,79,236,50,12,138,185,51,139, + 198,235,120,116,80,62,146,254,250,194,75,95,148,68,106,240,127,163,162,192, + 239,40,7,60,62,32,179,217,76,44,22,203,113,179,217,220,111,233,140,238, + 127,70,7,120,28,1,148,214,20,85,214,165,76,244,148,167,70,79,62,206, + 243,124,191,142,144,211,146,76,158,231,187,8,130,80,196,243,124,66,32,105, + 216,19,187,140,131,162,144,138,244,133,151,42,60,246,223,15,32,196,98,201, + 91,225,30,162,84,247,223,12,160,242,100,34,202,176,163,124,4,7,172,131, + 85,177,132,246,44,219,182,230,105,255,254,253,222,189,175,211,253,251,247,119, + 132,133,133,53,82,114,255,126,242,73,216,77,38,230,226,249,243,85,201,26, + 77,206,170,85,171,90,140,40,224,161,160,226,91,115,79,4,88,7,158,111, + 54,205,0,249,37,20,3,128,22,177,155,26,77,131,125,36,8,194,20,158, + 231,199,7,112,233,118,168,67,148,0,90,108,12,2,192,166,191,254,213,173, + 80,57,0,28,207,243,179,161,120,39,185,166,252,208,149,243,15,169,4,126, + 170,178,130,116,12,62,135,40,213,74,215,61,255,84,5,101,29,143,123,43, + 132,226,0,89,180,39,118,89,6,0,69,113,58,56,53,204,36,2,104,137, + 199,154,31,179,217,220,207,195,167,226,89,116,16,68,25,113,185,203,91,30, + 207,243,253,218,227,89,188,53,50,213,30,69,66,160,215,91,44,121,217,80, + 204,181,237,246,196,46,139,60,14,85,192,203,67,137,58,47,247,29,128,66, + 139,37,175,196,215,135,229,85,182,29,194,177,99,199,206,201,178,188,75,150, + 229,169,110,235,201,106,131,1,27,54,108,0,165,84,50,26,127,28,65,143, + 121,101,232,250,111,80,222,211,202,0,183,106,0,251,3,84,110,224,121,222, + 189,64,189,188,53,155,221,100,170,255,95,16,132,10,192,183,147,96,65,16, + 56,65,16,58,204,249,116,176,114,14,242,115,164,222,200,4,168,183,162,28, + 7,165,87,148,103,177,228,249,109,173,171,6,19,25,0,202,245,133,151,246, + 63,183,230,146,223,73,220,133,11,211,67,161,90,81,118,212,36,115,107,184, + 222,100,170,101,55,92,95,120,105,167,90,222,219,1,140,209,23,94,218,162, + 90,177,238,107,174,236,219,34,211,155,132,132,132,152,162,162,162,171,158,251, + 194,194,194,244,53,53,53,173,146,235,150,25,36,72,16,133,160,145,201,245, + 67,35,5,247,67,112,189,41,155,160,204,246,203,12,126,208,65,130,4,185, + 30,9,174,194,15,18,36,72,144,32,63,73,72,112,136,41,72,123,9,246, + 224,130,4,9,114,61,18,84,112,65,130,252,76,9,54,76,130,252,212,225, + 128,159,199,60,81,80,102,80,230,143,65,230,15,45,39,72,144,159,50,190, + 204,204,59,204,52,89,37,16,171,188,160,204,107,39,243,7,129,16,226,118, + 67,6,116,124,62,1,31,121,85,101,182,22,207,119,222,223,245,141,66,170, + 120,201,12,165,148,142,4,48,20,202,218,200,38,16,66,212,141,225,0,128, + 82,89,164,148,186,157,85,251,34,31,192,1,66,200,238,31,64,206,81,66, + 200,61,254,78,8,18,228,167,132,183,130,203,2,144,10,160,151,191,11,8, + 33,28,33,4,12,195,130,97,8,211,224,26,209,27,42,3,164,144,0,251, + 29,78,71,115,113,167,126,112,153,58,173,46,139,2,195,0,154,8,16,63, + 134,54,20,178,76,101,89,150,160,86,26,205,45,52,46,128,178,38,234,186, + 146,25,40,19,127,53,81,15,0,27,62,223,208,102,133,73,41,181,3,200, + 34,132,164,18,66,82,24,134,101,8,1,40,5,100,89,146,221,21,175,187, + 82,110,195,241,83,148,210,70,249,85,101,182,26,142,227,178,8,33,195,24, + 134,73,100,89,150,33,132,184,211,131,36,73,178,44,203,133,148,210,253,162, + 40,54,41,91,74,105,45,20,95,143,47,53,83,22,208,104,52,208,105,21, + 253,233,112,218,225,116,58,91,186,173,113,106,218,215,90,206,120,4,157,5, + 7,249,153,224,171,7,215,108,40,251,250,143,74,167,135,86,171,133,95,101, + 67,41,156,78,7,70,101,220,50,143,128,228,110,216,248,89,115,149,81,0, + 50,181,208,233,116,237,150,57,113,194,93,122,10,58,108,103,238,182,151,180, + 90,29,64,252,42,75,56,157,78,56,28,1,85,26,128,26,253,219,23,173, + 151,233,128,211,25,80,100,19,191,50,3,229,182,9,183,101,73,146,148,170, + 254,127,248,203,141,95,182,75,97,82,74,95,245,124,63,188,203,208,251,253, + 105,229,241,214,230,215,179,135,230,126,23,244,132,144,97,26,141,230,165,208, + 208,80,132,132,132,52,186,160,174,174,14,181,181,181,112,185,92,243,160,120, + 191,247,247,222,206,5,72,47,128,112,164,190,189,162,248,57,230,56,142,185, + 105,248,200,180,113,183,76,24,2,0,91,182,109,204,219,179,119,247,33,81, + 20,229,6,95,200,0,165,50,0,42,2,245,65,133,235,137,233,60,83,95, + 94,250,62,40,117,206,165,84,238,229,43,228,29,199,105,184,155,134,167,15, + 241,148,179,251,155,220,60,81,116,249,80,96,4,132,48,5,132,104,64,105, + 135,187,219,12,18,228,186,196,151,130,155,139,102,122,83,28,167,225,110,252, + 133,242,81,185,36,197,221,159,40,50,224,56,185,254,47,1,160,225,100,104, + 181,90,228,23,158,78,12,49,134,250,75,78,133,204,37,132,75,49,132,14, + 185,129,128,133,70,215,45,206,229,188,88,166,209,118,141,118,57,46,148,177, + 44,144,218,223,24,51,110,236,184,193,138,106,240,63,61,209,146,204,164,164, + 20,212,89,107,19,231,155,95,132,211,233,132,75,100,64,125,228,1,0,52, + 172,164,86,78,254,42,141,122,154,84,80,205,201,244,15,5,5,176,101,235, + 150,131,135,143,89,175,74,18,160,209,221,16,221,80,22,231,75,40,36,216, + 106,243,46,80,42,158,10,48,206,167,95,226,227,227,245,249,249,249,195,18, + 18,18,94,2,128,162,162,162,121,241,241,241,185,197,197,197,109,238,201,177, + 44,187,81,167,211,77,152,249,232,147,8,13,9,69,109,93,45,222,249,215, + 155,144,36,41,79,146,164,67,44,203,166,233,116,186,33,109,56,190,81,146, + 2,247,246,198,178,74,47,13,132,36,50,12,83,200,16,102,127,143,30,125, + 114,79,157,202,3,195,48,137,161,161,161,216,176,97,3,98,99,99,27,93, + 119,229,202,21,76,156,56,17,85,85,85,137,205,36,159,173,209,197,231,26, + 67,134,114,49,93,102,141,33,96,88,134,49,246,149,101,219,9,134,49,244, + 213,235,106,206,140,24,81,222,35,42,74,241,55,61,98,196,163,21,149,246, + 103,54,218,29,97,189,221,231,200,178,245,4,133,44,93,189,244,246,118,107, + 221,1,81,163,233,132,206,221,254,170,119,71,141,137,142,123,52,35,170,211, + 35,132,202,182,239,74,47,190,177,164,174,102,23,68,215,213,70,239,224,45, + 99,198,133,222,54,254,142,215,53,26,237,16,0,248,205,157,247,29,53,24, + 12,230,205,217,95,212,247,4,57,77,12,167,213,245,132,49,116,168,62,50, + 230,193,33,178,92,99,188,92,252,183,248,134,88,164,65,130,252,116,241,86, + 112,217,240,19,179,201,77,106,234,175,67,211,134,220,251,186,193,232,24,2, + 59,135,109,95,39,32,243,198,98,228,236,141,175,255,123,235,232,179,48,232, + 157,208,112,20,169,3,135,48,85,213,205,58,77,207,14,139,200,202,237,220, + 237,153,44,134,13,187,135,16,29,15,136,135,0,46,139,64,60,68,193,101, + 177,140,227,171,254,3,47,176,225,97,149,208,104,90,174,212,155,147,25,27, + 219,9,73,225,201,12,33,4,46,145,192,102,215,98,211,142,158,77,242,112, + 203,205,69,48,232,69,164,13,153,113,212,106,143,50,31,56,240,137,207,8, + 202,30,248,85,10,158,50,91,194,229,34,232,63,112,22,91,110,187,129,149, + 100,221,47,221,101,160,150,201,4,74,29,130,44,213,172,191,124,254,229,236, + 154,202,45,237,153,131,211,95,184,112,33,51,50,34,50,163,232,92,17,0, + 32,44,52,44,163,162,178,226,0,148,24,88,109,73,123,15,203,178,247,107, + 181,58,132,134,134,33,50,50,26,32,4,90,173,14,118,187,227,168,36,73, + 127,101,24,246,37,173,86,55,164,181,199,29,14,199,37,73,146,246,4,154, + 55,66,200,48,150,213,188,100,48,40,61,180,212,212,140,21,123,247,110,114, + 223,35,19,18,18,130,216,216,88,116,239,222,29,12,163,244,192,100,89,105, + 216,132,132,132,160,182,182,182,217,53,162,189,250,126,9,2,140,4,193,157, + 148,98,10,33,56,200,208,208,193,132,208,131,78,49,100,112,73,25,45,236, + 218,89,233,133,151,148,69,246,116,138,157,215,178,156,251,156,250,191,43,186, + 118,95,224,160,64,78,68,56,139,234,90,185,62,136,44,195,176,247,82,202, + 78,35,172,126,89,215,238,11,232,137,67,3,155,244,172,251,247,27,196,105, + 52,90,209,253,94,105,52,90,177,127,191,65,246,205,217,95,212,63,59,209, + 117,21,189,7,108,207,2,48,12,64,6,165,166,9,198,208,161,133,74,244, + 162,32,65,126,218,248,234,193,121,87,108,122,207,253,61,147,158,192,185,11, + 84,252,38,47,12,132,1,56,150,96,227,142,62,208,112,50,54,238,232,3, + 134,145,176,113,123,18,238,200,58,13,141,70,4,67,8,34,35,162,154,189, + 137,193,195,22,161,172,66,28,0,10,158,97,0,134,209,164,41,3,57,154, + 52,2,2,137,234,127,121,248,68,55,244,238,89,11,173,182,229,233,3,210, + 140,76,247,126,165,215,198,97,227,246,36,216,157,154,70,121,208,112,50,54, + 108,235,3,42,3,93,226,106,196,158,73,79,212,30,56,240,73,253,16,151, + 159,114,242,75,75,249,247,68,148,56,28,62,209,109,16,195,234,160,225,136, + 90,6,74,89,200,50,32,203,122,30,156,254,228,224,97,139,178,115,182,54, + 235,192,190,37,50,100,89,158,84,86,94,54,193,189,67,253,255,2,148,226, + 105,203,80,165,168,244,174,9,68,145,133,40,50,16,69,22,202,240,24,17, + 1,56,148,191,173,63,174,246,218,3,158,59,34,132,73,52,24,66,240,247, + 23,255,3,189,222,136,167,159,190,109,10,195,176,249,33,33,225,7,61,253, + 126,51,12,3,183,130,112,43,58,229,250,230,27,35,12,67,50,0,122,31, + 1,166,48,44,192,50,100,48,64,225,114,217,7,131,165,56,113,198,152,152, + 218,71,25,225,56,113,198,152,200,178,54,64,38,131,53,90,3,0,50,88, + 146,41,100,25,83,40,1,8,8,13,49,50,185,97,161,236,48,119,250,44, + 75,166,17,80,200,50,166,129,65,97,230,216,19,185,57,91,251,122,190,131, + 25,239,175,122,79,255,200,228,199,186,244,238,149,2,0,200,47,60,221,229, + 253,85,239,141,129,242,110,230,2,176,15,25,113,76,111,119,200,195,8,193, + 75,12,1,24,134,32,58,246,142,196,160,130,11,242,115,160,37,103,189,110, + 3,16,64,49,104,200,45,43,119,114,18,237,2,151,75,70,223,100,61,88, + 175,118,174,36,3,197,23,235,32,74,26,200,50,5,67,100,16,210,124,175, + 171,103,119,109,166,94,207,140,185,82,230,66,82,119,25,178,172,12,237,112, + 26,35,56,78,15,89,6,46,92,114,65,166,44,58,98,126,156,82,2,153, + 50,16,37,13,36,89,135,196,238,33,62,243,113,226,180,29,149,213,49,96, + 201,37,14,106,165,226,85,30,237,54,240,240,70,166,44,52,28,131,1,41, + 6,48,12,32,138,54,136,46,37,138,0,195,24,144,255,61,131,216,104,205, + 152,46,157,184,3,57,192,150,118,136,34,80,162,63,3,192,33,245,111,154, + 186,111,109,91,19,165,20,112,185,24,56,156,26,172,207,78,198,240,65,7, + 224,114,49,112,27,246,181,247,120,0,232,1,132,18,66,180,122,125,8,76, + 166,24,232,245,70,68,70,196,34,42,186,243,152,163,71,118,31,229,184,246, + 57,240,25,119,251,41,61,165,24,118,169,212,53,69,203,1,41,73,122,245, + 89,89,97,179,89,177,43,231,25,220,118,251,63,212,247,21,232,221,147,226, + 203,47,158,64,122,230,203,48,24,244,224,56,3,100,25,56,149,111,135,83, + 196,148,46,157,52,249,6,61,217,195,144,6,107,201,193,3,12,16,69,138, + 147,5,246,250,231,29,54,113,77,206,23,27,238,3,128,76,0,147,42,42, + 203,167,149,150,94,62,152,148,152,12,0,40,45,189,220,185,162,178,124,61, + 128,101,80,158,111,142,134,187,130,16,99,92,98,117,141,132,126,201,122,48, + 12,133,181,206,208,174,252,7,9,242,99,33,144,47,253,85,117,187,23,64, + 102,117,213,33,68,154,88,164,13,52,66,175,99,160,243,218,244,58,6,41, + 189,12,40,42,238,7,73,102,208,220,124,25,0,76,157,94,168,103,25,50, + 180,107,156,38,43,181,159,1,58,29,193,158,221,127,68,110,206,239,65,165, + 114,176,196,6,189,142,160,111,111,29,216,14,91,25,68,32,201,12,138,138, + 251,33,165,151,193,111,62,210,6,26,17,105,98,81,93,117,8,80,42,149, + 123,61,202,227,154,192,18,160,111,111,29,244,58,2,150,216,64,165,114,228, + 230,252,30,123,118,255,17,58,29,65,106,63,3,186,198,105,178,88,134,12, + 157,58,189,176,205,230,248,132,16,170,211,233,190,36,132,64,163,209,64,163, + 209,128,16,2,117,95,155,39,247,40,37,160,148,197,198,29,73,136,239,106, + 194,198,29,73,160,148,5,165,164,67,142,251,35,37,101,136,94,175,55,102, + 233,245,198,57,58,157,225,21,134,97,6,57,157,54,56,28,86,16,2,44, + 248,251,90,20,22,30,205,98,88,110,8,64,218,21,133,33,60,140,65,136, + 129,36,13,30,96,192,128,62,6,232,180,13,207,106,215,206,223,131,227,156, + 208,112,0,195,18,48,44,129,134,3,56,206,137,93,59,27,222,105,157,150, + 96,64,31,3,6,15,48,32,196,64,146,140,70,70,31,21,217,112,91,90, + 13,129,94,199,32,181,159,17,93,227,52,89,12,161,67,175,94,57,204,65, + 121,15,239,67,67,227,196,23,211,212,115,50,69,199,1,46,42,130,97,6, + 187,191,87,45,3,141,166,61,185,15,18,228,199,67,32,10,110,153,250,119, + 26,128,251,78,28,125,117,76,164,9,28,203,0,140,143,171,149,125,28,0, + 22,84,10,172,229,77,8,146,88,6,96,25,2,150,33,200,200,120,9,162, + 104,195,214,236,25,176,219,203,32,75,86,176,140,82,97,116,4,148,2,84, + 98,160,132,186,227,252,230,131,101,128,72,19,184,19,71,95,29,131,198,149, + 202,178,166,87,116,12,12,75,192,50,128,44,89,97,183,151,97,107,246,12, + 136,162,13,25,25,47,213,151,15,203,40,101,214,30,57,49,177,49,185,58, + 157,110,87,108,108,44,68,81,76,19,69,49,45,54,54,22,58,157,110,87, + 76,108,76,179,243,176,205,67,32,201,44,122,247,52,66,150,53,232,221,211, + 8,73,118,15,51,118,196,241,166,164,164,12,209,95,184,80,152,57,98,196, + 237,247,235,13,161,47,69,70,197,77,137,140,236,148,102,50,197,226,205,55, + 102,213,167,107,10,143,70,159,148,161,25,148,210,27,218,158,63,32,196,192, + 112,81,145,28,167,213,40,202,139,202,13,207,10,160,24,61,250,117,176,156, + 65,125,209,40,88,206,128,209,163,95,7,64,235,223,105,42,91,161,225,20, + 69,22,21,201,113,122,29,209,121,143,138,186,223,65,150,1,40,164,62,199, + 142,174,28,11,144,251,0,76,1,0,173,86,183,58,50,50,166,220,125,126, + 100,100,76,185,86,171,91,173,254,156,66,8,123,95,193,233,119,199,70,69, + 48,126,191,215,32,65,126,202,52,106,201,186,123,4,117,117,151,112,190,120, + 39,119,234,212,199,123,174,94,57,162,167,84,210,2,224,1,76,113,58,171, + 52,37,151,247,117,237,122,195,72,180,212,59,3,8,40,8,156,46,93,128, + 247,64,193,114,122,232,116,145,24,59,246,29,108,205,158,129,173,217,51,48, + 54,107,9,180,218,16,80,0,20,4,164,5,235,65,74,25,212,212,153,124, + 182,210,157,46,29,88,86,12,224,222,149,251,41,185,188,239,6,167,179,106, + 18,128,135,212,157,2,33,236,250,152,216,129,123,82,82,238,13,237,22,63, + 74,12,9,81,162,113,47,95,154,232,115,94,174,186,54,146,11,11,169,2, + 33,114,11,210,148,156,185,68,43,108,182,186,250,10,115,236,216,37,208,233, + 34,193,114,122,40,211,99,245,247,222,230,158,72,167,184,78,136,140,140,68, + 65,126,193,65,142,227,6,3,0,203,177,7,7,165,13,66,69,69,5,174, + 148,182,61,48,186,187,82,214,104,8,156,14,52,25,254,109,239,113,111,206, + 157,59,153,49,98,196,237,247,157,60,249,237,148,183,23,239,80,151,97,40, + 139,232,40,128,151,94,156,130,63,62,181,24,207,206,23,240,244,211,183,221, + 66,8,249,174,173,121,155,58,189,208,109,176,49,0,80,134,144,109,182,50, + 108,218,56,25,162,104,197,168,49,111,66,148,236,176,89,69,84,86,150,2, + 0,108,214,24,136,146,136,27,71,60,139,157,219,231,96,211,198,201,184,117, + 194,42,24,12,4,156,198,8,66,48,128,37,132,7,208,197,159,220,138,178, + 147,3,195,195,19,186,212,214,94,204,82,119,21,200,178,220,249,252,5,91, + 84,143,238,202,247,112,254,130,45,74,86,44,101,10,0,244,98,89,237,148, + 196,94,183,199,3,52,166,173,249,13,18,228,199,76,125,5,169,126,184,169, + 0,122,25,141,113,208,106,195,17,26,218,149,187,122,229,59,0,136,133,250, + 209,136,162,237,161,146,146,253,133,177,157,210,160,209,132,248,78,21,202,92, + 146,68,89,212,85,135,67,167,109,214,30,99,36,212,15,91,116,217,148,57, + 39,209,10,81,180,227,198,17,243,149,10,97,211,100,252,106,226,50,216,237, + 46,16,232,154,209,77,20,144,9,202,171,58,117,41,45,239,58,18,62,230, + 168,92,46,29,106,235,76,208,235,235,234,231,72,252,225,114,89,81,82,178, + 191,167,40,218,110,81,119,21,40,101,65,239,8,13,237,122,135,86,27,46, + 26,141,113,238,211,11,166,78,47,60,188,124,105,98,147,121,185,179,231,83, + 70,118,138,186,216,37,202,84,10,48,141,20,84,147,219,183,219,93,168,179, + 86,98,211,166,105,16,93,106,133,41,218,225,112,84,64,146,28,224,56,3, + 56,141,17,106,153,249,204,99,32,132,134,132,162,206,90,135,155,71,221,60, + 120,221,90,37,22,230,205,163,110,30,92,112,166,96,109,104,72,75,203,58, + 124,211,185,243,112,174,172,236,152,207,99,132,48,8,15,239,1,155,237,170, + 207,227,12,195,33,42,170,47,106,107,207,251,189,190,115,231,225,220,229,203, + 251,188,15,233,1,12,59,120,104,231,148,183,23,239,128,41,34,22,122,189, + 17,238,50,182,219,235,240,212,211,111,227,245,215,102,98,230,172,87,17,97, + 138,1,195,144,56,74,109,109,202,163,138,199,226,107,138,29,59,254,8,81, + 180,130,82,138,111,246,44,128,65,31,5,142,19,241,141,70,89,111,230,114, + 105,32,138,28,108,246,114,80,74,33,138,86,236,216,241,71,76,152,176,202, + 157,200,16,117,243,59,167,107,138,232,53,184,180,244,144,231,174,94,162,232, + 234,181,35,103,45,58,117,86,218,94,59,114,204,131,69,177,241,26,183,164, + 164,187,179,8,105,254,61,15,18,228,167,138,119,15,224,85,64,177,32,235, + 22,63,10,57,59,255,164,46,70,109,204,153,211,159,38,14,24,216,220,20, + 128,194,233,194,129,136,239,122,182,165,30,28,0,212,91,242,237,218,53,15, + 162,203,10,74,229,134,10,193,101,197,206,237,127,68,120,232,82,24,12,90, + 191,137,80,10,136,146,6,46,151,102,2,8,89,232,235,28,167,75,7,10, + 130,211,133,3,91,188,127,64,201,171,199,207,94,0,122,81,42,163,248,251, + 29,200,200,124,197,219,218,206,231,66,100,74,9,74,174,118,157,80,94,21, + 11,142,117,249,95,231,13,192,102,115,98,231,246,233,106,25,52,84,152,132, + 48,224,52,70,140,30,253,166,251,212,9,0,124,230,49,16,76,225,166,204, + 11,151,46,100,108,248,116,67,253,190,13,159,110,64,82,114,82,70,108,84, + 236,1,180,82,113,78,157,94,152,89,87,123,81,159,155,59,175,75,117,85, + 145,215,81,130,184,184,161,241,67,135,61,149,126,96,255,235,241,85,94,199, + 57,141,1,166,136,196,248,244,140,151,102,237,202,157,23,95,87,119,169,201, + 245,157,226,134,118,201,200,120,105,100,72,104,87,187,199,235,2,0,160,148, + 38,233,245,70,128,48,208,235,141,32,30,142,98,244,250,16,84,85,149,213, + 255,94,176,224,99,60,249,228,45,113,38,83,219,148,184,202,60,0,247,0, + 24,2,16,140,30,253,70,125,15,238,166,17,243,97,48,68,195,160,231,144, + 212,227,56,0,32,255,92,63,216,236,34,108,182,50,236,220,62,7,28,103, + 196,232,209,111,192,163,161,147,7,224,19,40,70,76,62,169,170,44,56,216, + 169,83,218,213,139,23,119,215,247,224,56,78,83,56,58,115,82,76,239,158, + 199,6,3,192,232,204,73,7,55,124,241,222,85,81,116,37,66,93,203,154, + 159,255,105,118,106,218,172,24,66,148,94,122,144,32,63,39,188,21,220,92, + 0,189,40,165,56,95,188,19,241,221,71,115,69,103,55,129,82,249,6,0, + 201,80,63,154,222,201,119,23,2,104,110,33,44,0,32,57,241,8,236,246, + 16,104,53,45,122,229,216,8,181,214,74,79,127,9,162,104,133,203,101,133, + 205,174,86,8,26,35,70,141,121,3,61,186,157,129,65,175,9,164,7,183, + 177,180,188,171,207,51,180,26,7,28,78,61,146,19,143,224,116,225,160,150, + 238,11,189,147,239,46,204,59,176,200,157,215,2,0,167,9,97,46,196,119, + 31,141,243,197,59,197,132,158,183,186,149,156,223,197,222,132,80,116,138,190, + 184,49,202,84,58,161,165,30,156,205,238,194,168,49,111,224,243,13,74,15, + 238,166,17,243,97,208,71,67,163,49,130,227,140,158,103,111,108,241,230,253, + 208,175,111,63,125,81,81,209,208,110,221,186,77,56,121,252,36,40,165,217, + 0,64,41,205,138,139,141,155,80,84,84,148,219,175,111,191,156,227,39,142, + 183,102,45,156,206,24,210,121,115,120,120,247,131,86,107,73,163,3,156,198, + 128,240,240,30,49,209,209,253,62,11,15,239,113,176,206,235,56,64,48,242, + 230,5,89,44,171,187,52,242,230,5,89,217,91,166,251,184,190,123,103,99, + 72,231,205,240,209,136,32,132,120,148,168,255,214,131,94,111,4,165,20,90, + 173,1,64,179,62,27,253,178,124,105,98,246,228,71,10,246,176,44,233,67, + 8,134,112,156,1,6,67,52,110,157,176,10,91,179,103,96,239,158,191,99, + 108,214,187,48,24,67,17,17,209,9,0,96,184,18,1,151,171,22,123,247, + 252,29,122,125,52,198,102,45,129,193,16,13,142,83,172,25,41,197,81,153, + 82,129,101,136,223,121,213,200,168,62,71,170,171,191,255,12,32,197,0,157, + 2,160,23,195,48,187,187,221,96,96,140,6,37,207,221,110,48,148,51,12, + 115,25,138,245,51,36,201,185,162,160,96,195,134,212,193,179,239,2,16,84, + 112,65,126,118,212,55,117,213,161,181,197,0,230,88,173,37,115,156,206,234, + 185,181,181,23,231,0,100,61,128,43,80,149,27,199,25,86,199,197,13,59, + 171,209,24,125,167,232,78,152,72,96,137,4,83,120,25,52,205,43,184,221, + 0,46,1,74,69,166,211,71,66,167,139,4,199,233,177,119,207,2,232,245, + 209,184,245,214,85,8,49,70,64,175,215,64,171,117,64,167,177,251,217,28, + 208,233,236,232,28,123,254,82,207,110,167,118,251,18,166,209,56,96,10,47, + 3,75,36,48,164,121,207,24,26,141,17,113,113,195,206,114,156,193,61,113, + 223,75,41,11,178,190,182,246,226,28,167,179,122,174,213,90,50,7,192,28, + 0,139,125,13,79,2,64,207,110,167,118,119,142,61,127,73,167,83,239,209, + 207,253,107,181,14,232,245,26,132,24,35,112,235,173,171,160,215,71,99,239, + 158,5,224,212,121,73,157,62,18,156,166,222,196,251,146,90,118,173,70,171, + 213,102,58,28,142,244,220,220,92,68,68,68,108,4,240,22,128,183,34,34, + 34,54,230,230,230,194,225,112,164,107,181,218,204,214,166,235,114,213,205,27, + 56,232,81,159,21,233,128,65,211,7,59,156,85,194,128,65,211,125,30,63, + 250,221,210,131,58,173,137,63,250,221,210,131,190,142,15,28,244,232,96,151, + 171,110,158,175,99,84,157,107,83,127,249,189,63,187,221,170,186,115,179,65, + 93,123,215,76,110,252,83,103,147,197,242,10,81,116,186,40,92,34,64,24, + 99,189,226,2,8,118,236,120,10,146,104,83,230,2,9,129,36,218,176,99, + 199,83,0,8,198,102,45,129,94,31,13,194,24,225,18,1,167,139,162,188, + 66,20,237,14,234,240,165,111,101,89,89,178,82,81,5,49,165,223,156,173, + 0,93,3,96,5,0,56,157,142,135,42,42,174,214,47,178,172,168,184,26, + 229,116,58,220,115,197,43,40,149,214,244,233,115,255,86,80,114,82,82,211, + 145,81,125,91,205,0,0,32,0,73,68,65,84,229,96,16,129,32,63,31, + 26,245,224,124,24,73,100,1,184,3,138,129,9,0,172,208,106,77,235,226, + 58,15,191,39,80,35,13,2,218,82,15,206,99,97,155,82,25,56,28,21, + 216,186,117,38,0,70,105,13,27,162,161,225,24,117,185,111,203,31,40,33, + 50,194,67,43,124,46,152,211,106,28,144,101,6,129,185,185,34,136,235,60, + 252,130,86,107,250,68,20,109,46,40,214,107,60,165,146,243,74,233,33,251, + 149,210,67,1,173,131,243,119,47,77,165,81,213,205,153,17,6,131,30,99, + 179,150,96,107,246,239,177,117,235,76,100,101,45,169,31,166,244,160,213,139, + 2,123,39,247,214,151,94,41,29,26,29,21,125,91,177,84,140,138,138,138, + 92,173,86,155,13,0,21,21,21,3,0,76,8,15,11,191,173,244,74,233, + 174,222,201,189,115,206,156,62,19,104,47,46,215,229,172,33,187,119,61,155, + 13,208,172,198,135,40,118,127,61,63,59,61,227,165,194,221,95,207,111,114, + 92,116,217,80,93,125,238,106,89,217,241,187,170,171,207,205,20,93,222,243, + 99,20,187,119,61,155,157,158,241,210,1,173,54,172,137,133,39,33,36,95, + 81,94,50,236,118,107,147,57,56,207,103,61,127,254,189,48,153,98,74,40, + 181,197,121,167,19,40,213,53,50,40,69,126,254,57,27,26,214,193,25,64, + 216,40,164,143,122,23,187,114,158,129,75,4,100,73,145,235,18,1,81,212, + 34,125,212,27,32,108,20,36,106,128,203,73,221,235,224,208,165,147,38,95, + 166,178,221,110,107,152,14,112,186,40,168,76,33,201,192,241,211,118,132,135, + 177,50,167,27,42,66,241,50,3,0,50,252,47,21,88,6,101,45,99,78, + 76,108,42,100,74,14,92,42,117,101,95,41,115,101,165,244,210,193,21,116, + 69,25,228,103,66,32,134,195,158,166,241,107,250,14,152,187,189,162,10,162, + 210,26,108,122,178,178,79,4,32,129,176,114,179,243,77,110,40,69,190,210, + 194,164,144,100,138,220,220,121,224,56,67,125,107,151,97,141,74,235,83,234, + 152,214,39,33,0,97,101,40,30,45,68,191,249,112,183,156,251,14,152,187, + 29,192,26,52,94,50,113,77,144,37,165,82,99,216,134,94,1,199,25,144, + 155,59,175,190,124,36,89,41,179,182,164,31,98,10,201,208,27,244,137,39, + 78,158,128,201,100,90,70,41,221,111,87,161,148,238,55,153,76,203,78,156, + 60,1,189,65,159,24,98,10,241,59,39,228,205,242,165,137,246,45,155,167, + 237,46,41,201,43,246,86,80,162,203,134,210,146,188,226,45,155,166,189,93, + 234,227,56,64,81,82,114,160,120,251,87,143,239,42,41,57,80,236,221,248, + 16,93,54,148,148,228,21,111,217,60,109,183,143,70,152,29,192,254,193,105, + 163,86,60,253,244,109,168,170,188,130,146,146,239,149,237,242,57,84,86,94, + 197,235,175,205,194,31,159,122,27,0,80,89,117,21,37,37,231,74,218,227, + 199,115,203,23,41,246,11,151,93,251,101,153,174,112,56,41,142,158,180,225, + 216,73,59,78,229,19,20,20,25,209,37,97,17,206,156,37,96,212,81,130, + 51,103,9,186,36,44,66,65,145,17,167,242,9,142,157,180,227,232,73,27, + 28,78,10,89,166,43,46,92,118,237,175,179,202,98,157,141,214,63,211,131, + 71,109,56,170,158,39,74,20,101,21,98,161,75,140,117,231,55,7,192,199, + 145,17,81,119,116,234,212,249,178,59,2,67,167,78,157,47,71,70,68,221, + 1,224,99,245,28,251,23,27,238,179,159,253,222,153,115,225,146,115,187,211, + 65,113,244,164,29,39,206,180,203,192,38,72,144,31,13,129,152,153,207,85, + 255,30,6,144,27,110,74,227,42,42,101,156,43,182,250,246,100,66,129,226, + 11,54,76,28,123,18,44,35,163,165,138,100,249,210,68,251,228,41,5,7, + 46,151,138,27,75,203,92,19,146,186,83,140,24,249,6,0,128,176,70,165, + 181,235,160,40,40,114,32,41,161,149,185,243,11,5,203,200,72,136,63,142, + 13,91,251,32,254,134,144,38,139,200,221,158,76,194,195,88,132,155,210,0, + 165,194,160,0,78,117,212,93,248,66,162,192,137,51,14,220,208,69,87,223, + 43,200,200,124,23,0,224,112,80,28,59,99,67,167,104,205,198,206,157,184, + 3,171,86,244,106,149,191,200,222,41,189,245,87,46,95,73,141,137,139,153, + 22,94,21,190,172,170,178,106,173,193,96,200,181,90,21,79,41,6,131,33, + 183,186,166,154,152,34,76,8,139,12,155,118,229,242,149,83,189,83,122,231, + 158,57,21,88,47,174,188,252,164,200,113,6,184,135,195,92,46,138,134,161, + 49,17,229,229,39,224,239,56,165,50,170,171,207,53,115,92,66,121,249,73, + 159,61,214,30,61,250,228,126,251,109,54,249,197,47,178,48,107,246,232,41, + 122,189,17,4,128,94,31,10,163,49,4,207,191,176,6,118,187,13,127,95, + 192,163,103,66,191,109,167,78,125,219,154,98,243,137,44,211,92,2,16,74, + 0,73,196,20,145,208,131,148,98,48,33,250,131,84,194,224,190,189,43,11, + 25,86,74,4,128,190,189,173,133,223,228,153,18,9,193,65,187,19,131,73, + 253,185,88,1,138,53,20,52,183,206,42,163,186,86,222,239,145,254,50,187, + 136,105,132,96,35,20,183,91,251,243,246,244,119,63,7,59,128,236,71,38, + 63,22,154,148,152,124,167,251,154,164,196,228,75,143,76,126,108,251,27,139, + 44,141,252,166,230,108,237,107,239,155,118,100,63,8,150,81,145,78,43,187, + 178,62,160,57,244,32,65,126,236,180,164,224,60,157,47,219,1,32,58,74, + 171,119,56,175,162,186,38,28,5,231,106,65,41,3,13,39,195,37,42,127, + 37,153,34,212,232,0,199,186,192,48,82,64,3,153,103,191,119,230,148,85, + 136,67,1,76,56,89,64,192,50,70,143,213,94,118,72,148,34,212,40,183, + 56,103,22,40,132,80,48,68,2,199,186,160,211,218,80,120,78,6,203,144, + 250,60,184,68,70,93,179,70,96,10,175,128,78,113,128,105,247,85,30,29, + 13,67,36,184,68,25,71,79,217,192,186,227,148,65,169,176,37,25,144,41, + 197,249,75,206,92,155,93,206,105,62,165,166,132,25,195,50,36,73,234,117, + 236,208,49,196,118,142,61,21,26,22,154,83,85,81,85,159,15,171,213,106, + 55,69,154,114,116,122,221,160,99,135,142,161,123,66,247,94,97,198,176,12, + 180,202,37,25,5,203,72,56,115,214,138,180,1,46,156,57,107,5,203,72, + 104,104,232,180,247,120,83,78,157,202,179,167,164,12,201,217,179,231,11,10, + 32,223,102,173,73,34,132,12,49,26,109,105,127,121,118,101,125,186,85,213, + 101,40,41,45,206,101,8,105,119,229,94,112,226,54,24,67,134,238,142,233, + 50,75,71,192,108,80,163,9,188,160,70,19,120,41,46,186,98,134,134,147, + 19,1,32,46,186,226,172,150,35,127,86,163,9,188,160,70,19,120,65,141, + 38,176,219,90,119,0,106,52,129,250,225,87,73,146,62,166,212,181,150,202, + 118,84,92,253,119,158,181,246,128,157,211,196,132,122,70,20,56,118,252,59, + 125,143,248,4,78,163,81,44,139,93,46,39,119,236,248,119,122,120,13,93, + 115,154,24,238,226,247,243,247,116,234,250,71,34,75,181,95,88,107,15,204, + 68,80,193,5,249,25,208,154,136,222,122,0,56,155,191,40,116,196,77,247, + 113,35,135,22,99,211,142,158,24,117,147,226,125,127,108,186,219,11,255,57, + 24,244,34,56,78,4,40,133,76,41,90,136,38,128,131,251,159,64,231,110, + 127,62,192,48,198,191,17,70,123,179,11,26,119,36,129,52,192,117,8,96, + 211,122,39,148,158,101,89,177,103,32,150,111,180,25,153,21,149,229,48,133, + 71,128,16,2,142,19,49,97,116,62,108,118,14,219,190,238,81,159,135,177, + 233,197,216,249,77,60,238,26,127,22,23,46,105,184,61,223,172,241,101,83, + 238,93,78,126,21,158,167,204,150,96,89,17,189,19,74,207,238,59,124,67, + 79,23,164,67,0,151,230,81,22,217,84,118,126,45,203,214,3,7,247,191, + 210,98,90,190,48,133,154,102,116,234,212,105,110,233,229,210,195,162,40,54, + 185,231,170,138,42,123,93,77,221,225,78,157,58,205,53,133,154,94,5,240, + 105,107,210,39,132,130,16,9,19,70,231,99,223,119,38,76,24,157,143,119, + 78,73,245,254,72,219,123,220,31,167,78,229,121,54,64,66,181,90,253,235, + 90,173,33,77,167,51,130,82,96,254,179,147,144,152,56,32,251,232,145,221, + 121,12,199,116,111,77,158,124,144,229,114,20,167,86,57,206,247,170,42,95, + 239,25,15,46,81,141,7,151,20,161,31,25,25,118,139,178,156,97,207,158, + 141,145,39,14,239,158,160,198,131,75,84,149,117,162,26,15,238,54,128,22, + 184,28,197,135,11,79,254,58,27,80,28,39,151,149,252,43,183,188,244,253, + 12,74,157,169,148,202,119,249,82,240,219,182,111,225,108,54,219,128,113,170, + 156,45,219,54,14,216,253,77,174,5,94,10,78,116,93,69,85,249,127,81, + 93,177,161,128,16,205,119,148,186,138,253,4,9,15,18,228,39,69,171,35, + 122,31,62,252,95,206,160,43,31,16,21,113,59,70,221,120,25,162,139,65, + 230,240,243,30,127,1,27,149,97,183,213,199,102,147,91,136,7,151,85,83, + 153,157,90,91,181,45,5,68,195,24,67,210,68,128,205,86,227,160,101,107, + 180,93,163,101,241,82,118,190,177,123,98,82,66,154,58,105,216,98,60,56, + 191,50,175,92,41,69,209,185,66,57,41,49,25,78,167,179,62,22,92,230, + 240,139,141,242,50,234,198,243,176,217,40,14,29,252,98,192,225,195,77,43, + 13,47,154,141,174,237,45,211,63,20,50,128,252,51,217,242,197,162,239,179, + 25,174,75,125,25,184,28,23,178,1,73,180,254,63,123,111,30,31,85,117, + 255,255,63,207,189,119,38,147,76,118,246,29,2,130,90,138,16,151,186,210, + 186,128,96,93,176,74,171,21,243,241,75,243,177,180,181,181,246,167,181,90, + 75,132,246,99,219,79,251,233,106,91,106,83,107,227,86,87,112,169,32,184, + 84,80,176,148,77,196,5,9,97,15,91,200,58,147,217,238,189,231,247,199, + 44,76,146,89,147,40,16,207,243,241,152,199,36,247,220,251,62,239,115,103, + 230,188,238,251,172,222,77,35,145,161,225,82,218,147,82,229,153,8,33,68, + 0,152,62,104,208,32,128,85,245,245,245,9,207,27,56,112,224,170,65,131, + 6,33,16,211,35,215,100,140,16,224,112,216,228,56,67,92,57,237,35,154, + 154,66,56,28,54,126,127,239,164,103,128,31,64,74,25,244,251,189,180,180, + 52,16,8,228,209,20,238,155,123,221,48,28,107,192,154,149,206,72,6,252, + 130,200,218,58,157,231,138,134,66,38,111,175,125,147,141,155,194,45,142,129, + 160,191,60,20,10,150,167,177,215,97,250,67,195,129,63,70,75,156,116,221, + 83,211,12,117,201,199,52,67,73,242,145,72,105,33,165,117,105,119,71,143, + 42,20,39,26,89,239,232,109,154,33,214,174,123,139,119,54,175,195,153,147, + 209,238,218,117,34,109,67,165,252,133,148,22,72,11,111,219,219,225,67,109, + 29,207,88,183,46,135,119,223,125,33,211,29,189,147,230,89,91,187,21,137, + 172,123,252,137,191,147,118,119,237,64,144,64,48,144,162,210,232,64,210,221, + 166,179,202,51,188,163,247,216,96,48,144,244,33,35,147,60,19,177,126,195, + 250,140,154,53,235,235,235,253,245,245,245,221,217,41,193,136,86,250,134,97, + 97,24,54,134,17,110,94,148,82,26,64,78,248,61,251,244,72,4,147,241, + 210,100,82,218,117,62,159,151,123,126,120,13,16,219,15,110,157,223,223,238, + 207,203,59,58,18,213,182,237,46,251,193,133,175,79,219,82,144,116,99,96, + 33,132,97,154,38,150,213,30,245,5,33,4,82,202,100,15,73,169,54,204, + 253,164,242,81,40,250,28,89,239,232,29,254,81,133,176,109,155,64,208,175, + 37,143,166,164,13,162,110,197,171,75,215,5,130,129,116,207,223,153,231,25, + 232,89,158,47,44,93,236,207,113,230,172,147,112,119,32,24,40,3,145,100, + 36,169,196,182,165,109,219,86,186,74,3,210,84,28,199,34,207,99,196,57, + 150,101,13,9,6,3,120,60,109,32,37,30,175,135,96,48,128,109,91,19, + 129,133,182,109,77,236,78,186,101,89,67,128,115,200,44,98,245,75,41,215, + 89,86,232,110,143,183,165,76,211,180,186,127,255,123,89,108,71,111,203,178, + 108,175,215,203,225,195,93,215,219,60,124,248,48,94,175,23,203,178,18,46, + 28,42,132,112,1,107,34,175,164,187,57,72,25,142,152,58,93,155,212,223, + 200,123,172,217,65,8,145,255,49,229,227,2,110,72,118,130,66,209,151,200, + 122,71,239,240,15,74,118,120,218,77,67,58,113,251,196,243,12,4,3,105, + 243,236,6,199,93,158,199,2,203,178,102,6,2,1,254,248,192,111,112,58, + 157,209,136,20,203,178,202,129,114,203,178,232,102,250,76,224,215,105,178,143, + 243,195,236,124,191,253,91,183,110,0,112,217,182,93,231,241,120,184,226,138, + 43,112,187,59,174,167,234,245,122,241,120,60,216,182,93,23,61,38,132,136, + 159,183,119,27,225,1,26,31,247,218,252,191,253,152,236,26,64,250,37,124, + 20,138,62,64,38,59,122,127,18,168,60,251,8,66,136,59,76,211,156,96, + 219,62,205,239,247,33,37,216,182,101,71,34,82,132,16,152,166,73,55,210, + 183,118,99,105,173,68,247,219,47,165,92,23,10,133,238,110,105,105,41,243, + 120,60,90,52,226,145,82,98,89,150,109,219,118,157,148,114,29,224,143,68, + 108,177,157,182,91,22,143,191,47,129,205,94,167,101,241,248,185,159,68,62, + 10,69,95,166,71,27,63,42,20,157,88,33,165,92,149,42,218,78,23,141, + 167,73,239,149,7,4,211,236,18,221,165,203,171,12,160,232,234,143,122,35, + 123,133,66,241,9,161,4,78,209,219,156,40,81,106,54,126,214,165,63,69, + 161,80,28,111,136,214,37,19,212,234,171,10,69,6,168,8,78,161,56,177, + 80,2,167,80,124,74,81,130,173,232,235,24,0,133,179,182,126,98,51,63, + 163,130,170,242,84,121,158,40,121,10,33,166,181,44,30,191,28,160,248,75, + 219,238,22,66,140,19,66,24,209,69,142,123,66,180,207,81,74,105,74,41, + 105,126,246,164,185,145,124,30,20,66,160,105,154,209,91,19,179,163,125,155, + 182,109,79,106,89,60,126,114,175,24,85,40,142,99,186,244,193,85,85,85, + 37,157,115,211,29,22,44,88,144,182,175,67,229,249,241,229,249,73,211,219, + 101,140,167,55,203,155,206,207,248,188,162,27,194,2,12,27,54,236,215,87, + 92,113,197,84,167,211,121,186,166,105,73,215,187,138,136,159,17,185,222,76, + 53,2,212,182,237,218,64,32,176,254,153,103,158,89,77,120,75,38,6,12, + 24,112,235,156,57,115,206,205,201,201,57,93,215,245,148,249,112,244,119,156, + 50,31,203,178,106,27,27,27,183,60,240,192,3,0,74,224,20,125,158,14, + 2,87,85,85,149,118,169,46,32,246,228,42,68,178,9,203,64,120,191,170, + 186,133,11,127,188,110,254,252,31,37,157,156,123,44,242,92,184,240,199,211, + 64,158,65,154,249,76,82,74,59,250,132,77,154,165,186,170,170,170,222,89, + 176,96,193,113,149,103,166,60,250,232,163,46,128,27,110,184,161,71,2,82, + 85,85,53,77,8,113,26,48,33,254,115,138,150,41,74,231,207,49,147,116, + 96,107,111,149,119,193,130,5,211,132,16,103,8,33,202,58,127,159,34,190, + 212,45,88,176,96,93,85,85,85,151,188,246,236,217,227,47,40,40,144,64, + 202,233,2,186,174,163,235,225,159,151,101,153,88,86,234,133,194,115,114,114, + 166,31,58,116,200,3,37,0,28,60,120,208,83,84,84,148,97,62,122,36, + 31,43,101,62,14,135,3,183,219,125,169,16,34,235,125,4,21,138,19,145, + 172,151,234,2,208,52,173,195,15,56,25,150,101,50,122,84,217,221,143,62, + 242,248,170,27,230,92,159,170,242,252,196,242,124,244,145,199,93,192,25,59, + 119,213,221,151,137,173,116,149,70,28,73,151,205,58,22,121,102,202,195,15, + 63,60,77,74,121,90,228,239,119,110,188,241,198,30,9,136,148,242,23,209, + 74,87,215,245,88,89,226,203,115,244,179,204,58,61,171,242,198,71,105,209, + 136,172,170,170,202,37,132,56,67,215,245,251,28,14,7,14,135,163,195,53, + 161,80,136,80,40,132,101,89,119,87,85,85,173,74,17,53,222,1,98,44, + 96,68,87,214,137,206,229,211,117,77,27,57,98,212,228,147,198,78,40,7, + 216,182,125,235,134,221,123,118,109,178,44,59,54,223,47,114,183,0,76,144, + 93,86,165,249,229,175,94,114,249,188,155,144,210,186,3,100,194,135,63,77, + 211,140,225,67,71,148,143,25,61,174,28,96,199,206,218,13,123,246,237,222, + 96,219,118,18,1,19,219,195,65,165,90,139,82,241,233,32,235,165,186,52, + 77,51,134,13,29,89,62,182,236,164,114,219,14,255,80,108,91,160,105,50, + 246,14,160,233,18,93,211,105,106,58,82,230,112,58,211,184,33,238,64,136, + 9,14,199,144,97,66,104,104,122,225,32,219,106,59,162,233,5,253,108,171, + 245,136,16,48,120,160,163,127,217,152,113,83,210,253,54,211,229,89,90,218, + 159,80,48,88,54,245,252,139,177,108,11,219,74,81,6,77,178,189,110,219, + 134,189,251,118,165,168,52,128,52,203,102,117,206,51,37,18,234,118,212,110, + 60,112,40,212,32,37,104,122,97,191,184,123,113,80,74,155,80,104,255,62, + 164,220,218,147,77,59,1,126,245,171,95,185,154,154,154,206,40,42,42,186, + 15,160,165,165,229,238,95,253,234,87,171,190,247,189,239,117,59,146,211,52, + 109,169,174,27,51,207,60,253,108,156,57,78,130,129,32,255,89,255,54,182, + 109,111,144,82,110,18,66,76,214,117,163,60,219,116,41,229,210,44,86,178, + 97,193,130,5,211,64,156,1,148,9,33,234,126,252,227,159,172,43,42,238, + 191,234,72,195,126,132,16,101,14,135,131,175,126,245,171,196,175,75,9,208, + 222,222,206,99,143,61,134,109,219,73,183,147,249,249,207,127,190,226,238,187, + 239,91,229,112,14,51,220,5,231,92,8,66,23,154,227,20,105,155,31,8, + 205,56,197,208,131,219,70,142,108,31,149,155,27,254,202,140,28,121,86,147, + 47,244,133,165,166,229,60,41,122,142,180,67,31,128,180,188,109,107,94,15, + 5,247,153,134,35,159,223,252,254,3,23,132,215,129,206,117,151,95,224,202, + 59,77,32,205,205,94,207,219,139,66,129,61,216,118,123,135,239,224,152,81, + 99,243,199,141,29,255,127,186,174,151,3,156,60,225,51,91,12,195,113,215, + 246,29,219,98,251,193,105,90,158,161,27,197,24,142,33,174,220,188,137,229, + 186,179,33,111,220,73,111,141,128,174,203,148,41,20,125,141,14,2,183,96, + 193,130,21,85,85,85,41,39,192,14,30,124,114,254,224,33,159,249,63,195, + 48,203,77,75,99,199,238,98,70,13,111,101,215,222,194,216,251,184,209,205, + 24,14,11,93,131,65,131,134,104,129,20,75,81,46,88,176,96,197,125,63, + 173,89,229,46,60,127,154,38,156,215,34,244,10,176,55,129,54,45,250,174, + 9,235,181,1,3,219,244,156,28,63,154,158,254,249,51,85,158,238,60,55, + 57,37,253,52,33,4,150,13,102,72,167,118,103,215,50,140,25,217,140,161, + 219,12,30,114,198,22,211,202,189,171,190,254,125,79,66,131,71,203,145,180, + 144,241,121,166,66,2,182,5,3,6,158,165,251,66,5,186,45,245,139,58, + 221,139,153,72,171,198,150,193,231,189,173,111,174,184,251,174,138,110,11,81, + 85,85,149,171,181,181,117,170,203,229,186,160,185,57,188,181,144,211,233,188, + 192,239,247,175,175,170,170,90,217,205,254,174,53,66,136,235,116,93,199,153, + 227,36,215,21,22,143,112,36,166,109,177,44,107,190,166,105,247,233,186,94, + 158,125,186,185,159,240,186,140,25,149,13,196,25,97,91,78,132,144,12,26, + 60,234,193,125,123,107,163,62,106,14,135,131,188,188,60,138,139,139,187,92, + 239,112,56,8,6,131,41,151,226,42,29,248,255,0,206,21,48,75,194,92, + 33,216,40,69,206,20,144,27,45,59,103,138,199,43,235,10,11,194,95,25, + 143,55,119,140,101,23,60,37,132,220,40,244,156,41,209,115,5,60,88,80, + 60,61,0,172,44,42,212,9,153,50,182,131,186,64,124,25,97,84,10,97, + 84,231,23,126,65,126,235,235,131,186,68,214,203,151,189,106,104,154,22,19, + 61,77,211,204,1,3,6,250,111,184,177,99,203,197,31,31,56,56,13,201, + 25,8,46,40,42,30,58,115,220,73,103,215,193,11,153,220,74,133,226,132, + 166,75,4,215,185,98,139,54,243,68,143,63,241,228,78,90,218,48,247,238, + 119,130,0,93,64,237,206,254,104,194,166,118,103,127,132,176,217,182,179,148, + 9,99,27,208,181,240,210,75,46,87,110,74,39,6,15,157,129,207,111,79, + 148,146,10,1,8,161,79,14,171,152,30,238,8,151,198,69,7,26,10,40, + 45,14,160,235,233,163,150,84,121,198,31,183,109,193,182,157,165,88,150,214, + 161,12,154,176,217,90,215,31,36,20,228,7,205,226,146,207,121,190,254,245, + 175,196,154,184,18,221,167,84,164,43,127,204,239,136,79,7,26,10,38,9, + 97,68,118,75,143,222,3,125,178,148,32,133,81,97,8,227,195,193,67,103, + 244,180,47,234,2,41,229,108,159,207,55,51,122,32,242,247,62,194,90,219, + 29,251,177,202,214,182,52,108,91,195,182,180,248,180,64,244,156,110,164,119, + 176,159,14,33,68,153,97,56,185,232,162,47,163,235,6,43,86,60,54,87, + 8,173,214,233,204,217,216,121,123,155,248,165,186,50,183,207,5,192,87,128, + 185,26,32,52,166,0,216,182,57,5,36,135,26,28,101,67,6,134,237,30, + 106,112,148,9,17,4,196,20,77,115,0,76,145,54,72,152,27,121,228,145, + 134,33,86,229,186,180,51,226,236,87,10,64,66,165,38,168,123,232,225,195, + 171,110,186,113,128,31,96,225,194,133,46,224,130,77,155,55,184,38,79,42, + 31,82,90,210,15,128,166,230,198,33,155,54,111,184,112,225,194,133,126,96, + 213,252,249,243,253,15,60,120,200,101,154,242,12,4,247,9,64,215,5,103, + 159,243,229,50,37,112,138,79,3,41,59,132,226,6,128,80,85,85,245,14, + 176,170,221,103,25,146,2,44,219,102,64,169,35,178,46,126,52,50,145,72, + 91,210,234,9,98,91,58,182,102,17,222,137,36,117,197,81,92,104,76,53, + 116,235,194,118,159,69,73,17,200,72,61,166,9,3,77,115,32,165,164,213, + 99,35,209,201,162,142,75,129,192,182,193,182,116,164,212,40,46,116,34,52, + 209,169,28,112,184,49,132,63,144,135,160,205,136,8,219,5,241,247,163,55, + 6,60,116,70,162,163,9,141,1,253,12,132,16,216,118,8,59,178,169,128, + 192,160,169,5,242,114,245,11,243,221,250,122,96,121,15,178,18,64,101,228, + 239,77,145,247,201,145,99,79,245,196,172,109,11,76,91,99,107,93,41,67, + 7,249,9,55,101,139,94,74,79,77,228,115,202,7,156,134,97,144,227,202, + 197,48,28,184,92,121,228,229,229,95,120,240,224,158,45,154,214,179,62,168, + 234,7,15,185,128,51,218,60,214,92,77,131,1,253,28,8,1,150,29,194, + 52,67,236,220,177,148,97,19,46,67,70,198,18,245,47,133,15,183,190,192, + 232,49,51,49,12,7,186,230,64,74,56,124,36,132,109,51,183,32,95,175, + 117,24,98,141,97,28,221,133,116,240,32,7,182,5,71,154,66,145,207,91, + 91,255,216,227,91,86,214,110,123,22,96,42,48,219,239,247,85,122,189,222, + 141,81,129,243,122,189,131,253,126,223,243,64,53,32,22,46,92,184,82,23, + 237,56,92,238,178,64,48,252,123,69,216,8,91,45,96,164,248,116,144,201, + 55,61,58,0,164,26,16,129,192,193,213,133,133,69,20,23,134,47,213,58, + 60,96,11,164,38,232,87,226,164,169,117,32,3,251,29,140,236,81,149,220, + 248,146,231,26,93,82,114,122,190,91,159,150,239,214,177,237,16,59,119,188, + 140,109,135,24,53,122,6,154,38,64,24,145,10,191,123,133,236,76,248,65, + 93,163,169,117,32,253,74,194,34,215,209,182,192,22,48,120,128,19,127,192, + 166,181,245,32,68,42,21,142,138,66,143,7,120,36,66,8,24,208,207,192, + 180,4,72,19,203,242,179,123,231,50,52,205,193,232,49,151,51,176,191,3, + 96,154,16,188,190,228,185,198,149,179,174,42,237,110,51,165,212,117,253,37, + 203,178,46,139,31,133,23,57,214,237,206,61,41,65,74,141,218,186,82,6, + 15,202,161,182,174,20,41,53,162,193,81,79,211,147,241,187,223,47,114,181, + 52,55,92,0,156,33,37,227,132,96,146,101,133,176,44,19,195,112,114,225, + 69,179,89,250,210,223,167,105,154,246,22,61,92,162,46,39,71,96,219,140, + 27,50,40,220,138,33,144,64,8,203,106,103,103,221,18,52,221,129,166,29, + 221,145,80,211,4,154,102,179,179,110,9,227,78,154,133,166,229,1,14,6, + 13,116,130,132,64,208,30,231,112,224,202,117,105,16,233,162,213,181,240,119, + 225,232,231,45,95,111,111,63,184,26,56,151,72,228,24,185,99,241,119,63, + 250,71,37,145,145,186,182,181,127,181,219,125,146,86,82,20,30,76,35,132, + 32,242,113,43,20,125,158,76,182,252,168,142,188,87,2,95,105,56,244,214, + 133,185,46,105,104,90,103,113,11,19,22,10,141,232,147,120,38,8,193,184, + 168,61,77,131,17,35,47,198,182,77,118,212,189,64,40,228,3,25,66,136, + 20,251,132,118,131,163,81,65,103,113,11,19,245,37,215,37,141,134,67,111, + 93,72,184,82,137,138,91,117,215,43,122,135,88,57,101,136,80,200,199,142, + 186,23,176,109,147,17,35,47,38,254,30,9,65,210,185,81,153,144,231,206, + 91,101,24,198,155,110,183,27,203,178,38,91,150,53,217,237,118,99,24,198, + 155,121,238,188,30,108,235,35,144,82,208,175,212,137,68,15,191,203,142,17, + 90,207,210,187,242,187,223,47,114,181,181,54,77,29,62,226,164,235,12,195, + 121,95,94,158,123,174,203,229,158,236,114,229,179,102,245,63,35,86,5,46, + 87,30,253,250,15,189,0,228,176,238,151,15,156,14,205,200,203,213,12,93, + 39,210,140,28,34,20,106,167,118,219,98,64,82,86,246,69,52,205,32,186, + 81,171,166,25,148,149,125,17,144,212,110,91,76,40,212,14,132,208,53,208, + 117,8,219,18,57,157,243,209,196,209,207,27,228,201,13,135,55,95,66,156, + 184,233,186,254,112,174,203,221,24,61,63,215,229,110,212,117,253,225,200,191, + 115,133,16,95,105,108,92,119,73,174,75,36,253,189,42,20,125,153,14,79, + 178,75,158,107,116,1,132,130,30,90,91,119,26,71,142,188,183,166,189,253, + 160,75,74,233,4,42,128,185,150,229,119,120,60,251,134,22,20,140,204,48, + 11,129,101,165,252,101,117,240,65,211,12,28,14,23,99,202,190,200,142,186, + 23,217,81,247,2,99,202,46,71,215,156,25,15,26,148,82,16,12,229,36, + 124,74,183,44,61,54,74,50,19,60,158,125,195,44,203,63,27,184,49,114, + 168,70,8,241,124,94,222,160,53,127,253,235,202,252,194,194,209,166,195,25, + 222,167,50,89,52,21,8,186,12,167,35,128,16,25,228,43,193,182,66,132, + 66,65,118,212,189,8,192,152,178,47,226,112,184,34,149,102,7,186,29,137, + 228,231,231,227,114,185,104,106,108,218,168,105,218,20,0,77,211,54,14,26, + 60,8,191,191,103,243,169,163,15,12,154,16,29,254,239,173,244,206,180,52, + 55,92,48,124,196,73,95,105,56,92,63,119,230,101,55,117,57,255,205,85, + 207,113,246,57,151,113,193,212,89,172,88,254,216,197,32,54,103,85,160,56, + 158,122,250,200,52,194,219,231,76,4,176,237,176,184,125,180,245,41,108,59, + 200,152,178,203,35,199,108,124,126,47,0,161,80,62,182,109,49,98,228,69, + 236,168,123,145,143,182,62,197,248,9,179,113,56,4,145,62,185,137,210,166, + 194,182,25,146,44,95,159,175,225,179,57,57,69,67,130,193,182,232,222,116, + 219,165,100,112,75,91,168,180,176,40,252,189,106,105,11,149,74,137,77,120, + 84,239,88,208,231,150,148,156,52,2,100,127,53,53,64,241,105,36,86,65, + 46,121,174,49,54,225,218,225,116,163,235,57,56,156,5,134,244,30,4,24, + 64,228,71,99,219,230,141,94,207,254,58,183,123,48,154,150,124,248,191,148, + 2,137,192,31,200,69,215,83,246,155,157,11,225,31,182,109,135,176,237,112, + 179,146,109,155,12,27,62,149,157,59,94,102,123,237,98,198,143,191,18,203, + 178,65,24,41,126,170,18,9,248,252,249,67,188,237,5,231,146,160,143,202, + 178,13,130,33,3,195,8,70,34,131,228,216,118,16,175,103,255,24,219,54, + 47,142,28,218,14,12,144,146,43,29,206,130,43,117,61,199,116,56,99,27, + 102,110,95,242,92,227,59,179,174,42,237,210,47,215,212,210,255,92,119,94, + 219,144,92,151,39,58,99,42,137,247,96,89,54,161,144,143,237,181,207,135, + 231,244,141,185,20,219,54,9,133,252,232,186,137,166,57,162,149,226,144,200, + 189,235,86,63,156,211,225,36,20,12,49,98,212,136,41,31,188,247,1,0, + 35,70,141,152,210,116,164,233,41,167,35,221,180,142,196,228,231,15,51,124, + 190,196,195,207,133,16,228,228,20,99,154,237,73,210,53,114,115,251,19,12, + 182,37,189,62,63,127,88,178,149,119,206,56,176,127,215,220,153,151,221,68, + 110,110,30,186,126,116,110,155,101,133,56,231,220,203,88,179,250,159,156,121, + 214,116,92,174,60,132,96,80,15,251,114,227,38,95,75,234,234,254,137,109, + 135,0,216,179,251,53,28,142,60,52,205,98,207,238,112,123,163,101,235,216, + 182,30,137,220,194,223,243,186,186,127,50,97,194,236,168,145,242,200,43,105, + 159,174,203,85,50,197,235,61,16,127,104,172,109,91,99,119,237,126,159,188, + 252,207,2,176,107,247,107,83,236,78,211,80,74,74,38,76,235,173,165,190, + 20,138,19,141,206,21,70,164,191,77,80,80,56,154,93,187,150,147,40,108, + 58,114,228,253,178,129,131,166,164,53,222,208,56,144,162,194,102,44,43,109, + 163,127,108,36,223,158,221,175,98,89,38,18,137,21,169,12,45,203,100,231, + 206,151,113,230,92,137,195,72,30,13,74,41,194,35,239,108,109,38,130,223, + 36,58,199,178,116,100,196,183,76,56,114,228,253,248,249,80,99,195,47,73, + 107,203,14,70,142,156,70,39,177,74,218,47,231,245,230,207,244,249,242,208, + 52,59,101,36,23,50,109,118,238,12,139,27,192,190,189,111,160,27,121,8, + 4,186,110,48,106,244,140,232,169,51,33,113,25,51,33,39,39,103,106,91, + 91,219,5,91,63,216,26,59,182,245,131,173,244,235,215,239,130,188,188,188, + 172,7,176,44,121,174,113,106,48,216,230,218,189,251,213,33,1,127,83,151, + 116,183,123,200,136,33,67,207,57,127,127,253,154,17,254,78,233,154,230,196, + 229,42,29,49,98,228,69,223,218,179,251,181,17,193,96,215,25,25,121,238, + 33,67,70,142,188,248,220,37,207,53,250,145,231,116,78,30,231,112,132,7, + 122,232,186,163,195,250,144,241,98,7,112,225,133,215,178,108,89,205,32,151, + 171,123,34,30,225,110,224,90,160,28,4,101,101,95,140,69,112,35,70,94, + 132,195,145,135,195,208,233,87,114,16,128,35,77,131,8,153,22,161,80,59, + 59,234,94,68,211,28,145,38,203,152,159,27,128,167,9,15,98,74,136,223, + 223,180,209,237,30,220,208,214,182,55,22,193,105,154,94,55,106,228,169,253, + 251,21,31,158,2,48,106,228,169,27,183,213,110,104,176,109,171,140,200,92, + 214,166,166,173,43,6,13,58,163,191,16,34,253,15,86,161,232,99,116,22, + 184,200,36,111,73,91,235,78,10,139,198,24,205,77,181,68,250,44,198,19, + 249,209,244,235,119,106,29,145,77,32,83,209,191,244,16,166,233,68,215,211, + 174,202,177,148,136,200,141,24,121,113,36,130,11,97,154,237,236,220,241,50, + 186,110,48,122,244,165,148,20,54,162,27,90,38,17,220,82,111,123,65,194, + 51,116,221,194,178,12,250,151,30,162,161,113,80,58,191,232,215,239,212,186, + 253,251,223,142,150,117,59,240,17,136,125,133,69,99,104,107,221,105,22,151, + 140,35,82,81,165,156,236,237,118,123,150,230,186,60,51,211,70,112,166,205, + 232,209,151,242,209,71,97,145,27,54,252,243,24,70,30,154,230,232,188,138, + 203,210,180,206,39,225,254,251,239,119,53,55,55,159,94,88,88,56,243,240, + 225,195,16,137,28,108,219,158,230,118,187,103,54,55,55,175,186,255,254,251, + 87,222,114,203,45,217,180,85,230,56,157,249,47,187,114,138,54,134,130,222, + 14,9,154,230,36,39,167,168,127,110,238,128,197,57,57,69,27,131,157,210, + 1,134,143,184,112,154,166,25,251,135,143,184,112,90,221,246,23,186,92,239, + 202,41,26,236,116,230,191,76,15,6,247,132,197,78,118,17,189,108,152,125, + 109,191,21,79,60,121,100,141,166,113,50,80,174,105,14,28,142,60,198,79, + 152,77,237,182,197,236,217,253,26,227,78,186,26,135,195,73,174,43,28,221, + 59,28,46,44,59,200,158,221,175,97,24,121,145,244,188,104,36,14,176,69, + 104,212,104,26,227,72,242,83,201,205,237,255,110,32,208,186,24,216,67,184, + 15,110,172,16,172,46,42,112,104,78,71,248,251,84,84,224,104,20,130,3, + 64,68,4,173,7,155,26,183,189,48,104,208,153,87,3,74,224,20,159,58, + 98,225,80,164,105,237,126,224,182,80,208,123,155,101,5,238,8,5,219,110, + 19,130,231,9,47,123,48,22,64,211,140,135,221,249,67,118,164,106,158,4, + 16,66,34,144,184,114,124,232,90,202,230,160,213,192,254,176,109,7,134,145, + 27,235,111,218,183,119,37,14,71,46,99,199,93,141,195,145,139,174,107,24, + 186,137,158,244,101,97,232,22,249,121,173,251,75,138,26,86,39,202,76,215, + 76,92,57,62,4,50,109,159,152,166,57,9,151,213,136,118,220,143,5,14, + 11,193,243,161,96,91,228,30,121,111,3,110,3,238,79,212,60,9,80,82, + 212,176,58,63,175,117,191,161,91,232,186,149,212,255,112,217,180,14,101,222, + 183,119,101,172,95,210,48,114,227,43,197,253,145,123,151,53,186,166,79,181, + 44,235,252,221,187,118,147,155,155,187,20,248,61,240,251,220,220,220,165,187, + 119,237,198,178,172,243,117,77,159,154,173,93,203,10,222,61,96,224,233,9, + 43,210,1,3,79,159,98,89,129,154,100,233,135,15,173,223,168,235,57,21, + 135,15,173,223,152,252,250,224,221,217,250,212,209,191,16,72,25,126,239,1, + 193,144,109,182,251,108,211,178,192,178,1,194,34,55,238,164,171,1,17,105, + 178,52,9,63,200,8,108,219,164,174,238,159,128,136,137,27,56,176,108,176, + 44,8,219,146,129,68,121,217,118,248,229,243,99,246,235,255,185,87,128,39, + 128,7,195,229,177,110,244,249,189,165,209,115,125,126,111,169,101,89,209,190, + 226,7,165,148,79,244,235,127,234,43,192,135,81,59,118,120,220,139,66,241, + 169,160,67,123,223,172,171,74,253,179,174,42,245,207,158,61,210,255,181,175, + 77,245,120,189,7,206,145,82,94,73,120,128,9,192,131,186,238,122,42,63, + 127,216,190,204,179,144,233,34,184,14,234,23,237,111,218,81,23,30,253,54, + 166,236,10,28,142,92,52,221,145,113,63,185,16,146,28,167,63,161,170,134, + 125,201,252,23,158,159,63,108,159,174,187,158,34,82,169,0,21,82,202,43, + 189,222,3,231,124,237,107,83,61,179,103,143,244,71,239,91,50,27,57,78, + 191,153,209,0,19,0,1,154,238,192,225,200,101,76,217,21,0,236,168,251, + 39,161,144,159,4,171,133,101,221,145,244,219,223,253,214,229,109,247,158,238, + 116,56,47,179,165,141,207,231,91,165,235,250,10,93,215,87,248,124,190,85, + 182,180,113,58,156,52,200,101,203,0,0,32,0,73,68,65,84,151,121,219, + 189,167,255,246,119,191,205,102,103,128,85,150,21,92,191,119,207,107,9,69, + 126,239,158,215,87,216,182,89,183,119,207,235,93,210,109,59,72,32,208,210, + 224,243,29,190,58,16,104,105,176,237,96,130,235,95,91,97,89,193,245,64, + 162,17,158,181,161,80,8,41,195,34,22,183,5,77,23,49,123,253,245,167, + 113,185,242,14,102,81,174,46,4,2,146,80,72,214,238,63,24,228,224,161, + 32,150,5,182,237,0,145,199,232,178,89,145,102,114,73,84,75,108,91,98, + 219,26,163,203,102,129,200,195,182,29,88,22,28,60,20,100,255,193,32,161, + 144,172,13,133,240,183,251,142,78,64,183,108,48,173,176,0,30,56,28,194, + 231,151,182,166,15,49,129,149,132,69,46,50,146,55,254,71,17,251,187,58, + 114,206,202,188,188,65,166,148,98,189,199,107,175,56,212,16,194,50,101,68, + 148,21,138,190,79,38,3,135,227,135,198,63,209,127,224,121,175,251,252,194, + 140,62,17,118,38,60,95,201,38,60,60,58,179,74,93,74,106,99,79,152, + 118,184,31,78,211,140,152,184,33,28,145,249,81,25,153,203,136,176,111,18, + 176,19,218,61,250,228,44,204,254,3,207,123,157,14,149,74,236,158,244,58, + 177,114,138,163,34,167,105,6,123,118,191,74,252,61,146,146,218,238,216,119, + 230,56,47,208,13,189,236,240,145,195,184,114,92,213,192,186,31,253,232,71, + 254,31,253,232,71,126,96,157,43,199,85,125,248,200,97,116,67,47,115,230, + 56,147,246,9,117,102,214,85,165,254,186,237,207,175,246,122,247,239,233,44, + 80,182,29,196,235,221,191,167,110,251,243,127,72,148,14,224,241,236,223,179, + 115,199,178,55,61,158,253,123,58,167,197,93,191,186,243,131,68,100,69,153, + 117,131,135,140,122,112,197,242,71,241,249,218,241,122,91,98,47,191,191,157, + 53,171,95,226,236,115,190,136,148,18,191,191,29,143,167,229,96,54,171,150, + 116,166,114,238,64,127,75,155,181,206,150,60,104,90,112,224,80,136,3,135, + 67,28,62,2,71,154,28,20,20,95,65,67,35,8,108,4,54,13,141,80, + 80,124,5,71,154,28,28,62,18,22,172,3,135,66,152,22,216,146,7,91, + 218,172,117,33,83,154,166,121,244,51,61,112,48,196,161,134,240,43,252,61, + 180,235,44,153,199,252,249,243,253,132,69,238,73,151,43,247,74,183,219,29, + 27,121,226,118,187,15,184,92,185,87,2,79,2,43,231,207,159,239,255,234, + 245,19,253,205,173,214,202,54,175,245,186,105,193,161,6,147,195,71,212,102, + 2,138,79,7,153,12,51,191,35,242,254,14,176,42,39,103,144,225,15,216, + 52,183,154,12,40,117,132,155,60,58,173,100,210,230,9,114,210,152,35,64, + 234,73,222,16,174,24,159,93,220,184,222,227,181,150,182,251,172,153,37,69, + 48,124,228,165,0,8,97,96,219,6,82,74,154,154,77,74,187,46,27,216, + 45,132,0,41,109,74,10,15,177,109,71,63,10,242,147,175,100,226,202,209, + 200,201,25,4,225,74,69,2,91,147,217,237,13,194,43,92,152,20,230,107, + 8,97,32,132,139,145,163,47,7,192,178,36,13,141,65,242,114,245,165,249, + 110,125,253,213,179,178,155,228,253,219,223,253,214,229,245,120,79,203,115,231, + 85,186,2,174,234,128,63,240,148,195,112,196,34,34,135,225,88,21,8,6, + 132,203,229,34,199,149,83,233,245,120,183,254,246,119,191,93,117,235,119,110, + 205,40,31,159,175,193,212,34,171,116,0,216,145,63,194,162,109,227,243,53, + 144,44,29,36,129,64,115,210,116,41,37,62,95,67,194,154,185,168,184,255, + 170,250,125,117,98,232,176,50,150,190,244,208,92,135,35,108,195,225,112,98, + 24,14,190,112,225,108,44,51,196,170,149,75,40,46,25,240,234,145,134,44, + 26,32,146,32,37,171,136,204,96,176,97,174,176,217,40,37,83,192,216,8, + 98,202,192,254,173,117,66,147,101,0,3,251,135,234,118,215,231,150,129,220, + 104,89,132,215,162,148,76,17,240,160,12,63,56,173,50,77,137,207,111,175, + 35,178,246,179,132,106,219,162,82,8,150,34,89,133,96,221,205,115,7,250, + 129,168,200,173,88,190,236,213,252,146,226,210,89,81,159,74,138,75,247,79, + 158,84,254,250,244,25,23,119,24,165,115,211,141,3,252,127,248,243,193,117, + 2,170,109,41,43,223,94,243,100,221,173,167,166,239,67,87,40,78,116,82, + 10,92,252,226,203,71,215,162,252,127,46,211,106,199,31,200,161,177,37,128, + 64,67,19,54,182,12,191,75,192,233,176,208,116,43,227,8,174,185,213,92, + 233,243,219,167,75,201,204,134,70,16,29,230,123,133,64,130,195,33,17,201, + 122,224,179,70,134,39,208,70,250,196,154,91,131,225,117,32,229,209,178,132, + 167,19,9,114,156,237,24,186,110,70,202,223,229,126,244,54,2,11,219,150, + 225,167,236,216,195,65,248,126,68,214,47,164,205,107,173,50,45,185,50,91, + 219,57,142,156,11,164,148,99,15,31,60,140,59,223,189,85,58,229,202,187, + 238,186,43,86,142,31,222,243,67,255,79,127,250,211,149,134,97,76,58,124, + 240,48,69,197,69,99,115,28,57,23,144,213,186,148,225,190,205,35,141,65, + 6,15,178,56,210,24,140,244,117,202,94,74,239,202,119,190,61,207,255,187, + 223,47,90,185,119,207,54,9,212,134,66,193,113,66,80,110,89,193,201,211, + 166,207,137,88,13,71,111,94,111,203,42,16,61,174,220,27,15,253,13,135, + 115,216,106,119,193,57,57,32,94,136,236,38,176,48,178,155,192,125,249,110, + 223,60,77,132,5,46,223,237,219,161,107,226,206,200,110,2,11,35,187,9, + 44,140,236,38,176,58,20,220,71,107,83,62,165,253,167,197,30,54,164,148, + 79,74,105,61,37,109,19,95,251,150,13,102,104,191,255,39,63,249,101,126, + 252,142,2,135,15,31,114,21,21,22,27,209,149,104,108,219,54,14,31,62, + 228,90,184,112,97,135,7,1,77,203,51,60,173,255,90,227,206,63,91,180, + 180,52,252,179,118,219,219,223,36,131,65,98,10,197,137,78,198,59,122,71, + 143,55,55,253,59,127,248,240,207,24,35,135,182,176,109,71,9,163,71,132, + 87,223,47,139,172,194,95,54,178,5,221,97,199,196,77,74,73,170,221,4, + 0,14,212,47,195,93,120,222,122,77,56,238,149,66,63,15,43,182,122,254, + 228,232,251,224,18,239,14,77,147,99,36,233,187,226,82,229,233,247,251,200, + 201,113,33,68,120,91,156,177,99,26,177,66,26,117,187,139,142,150,97,120, + 43,59,247,20,114,234,184,38,90,61,186,177,119,239,123,249,85,85,85,41, + 239,83,42,193,139,207,51,165,223,132,155,78,251,149,120,119,236,59,80,48, + 166,243,61,0,123,5,210,122,203,146,161,245,7,234,223,74,115,23,18,147, + 227,200,153,231,118,187,239,240,122,188,239,84,85,85,117,241,249,174,187,238, + 242,47,88,176,224,29,183,219,125,71,142,35,231,23,192,179,217,216,15,175, + 196,98,51,174,172,145,250,131,46,198,149,53,178,174,241,104,36,223,211,244, + 100,124,231,219,243,226,31,64,242,117,221,248,63,93,119,76,14,143,60,149, + 188,254,218,83,148,150,14,92,113,240,224,158,13,154,38,50,93,165,32,33, + 119,222,121,231,52,203,106,57,205,242,181,142,245,251,62,136,223,15,174,44, + 178,31,220,184,92,199,168,146,156,177,19,0,216,189,123,107,201,225,3,187, + 102,70,246,131,43,139,52,143,150,69,68,251,50,144,219,45,171,229,157,239, + 126,251,148,21,115,151,132,175,241,121,55,172,242,121,55,93,32,165,117,26, + 200,171,19,249,177,99,215,118,195,52,67,19,199,140,14,47,106,179,99,103, + 237,196,61,251,118,255,148,46,253,218,237,4,124,91,9,248,62,218,222,218, + 234,217,92,187,237,237,61,169,247,23,86,40,250,6,89,239,232,125,224,192, + 135,134,161,251,38,230,142,62,137,209,195,189,216,150,96,212,176,214,216,187, + 101,133,159,150,77,98,123,179,217,169,246,131,171,170,170,154,22,240,215,157, + 22,240,239,152,32,132,166,25,142,193,166,16,98,69,100,31,180,21,154,94, + 208,79,218,109,43,26,29,69,101,37,133,131,35,77,137,201,73,151,167,183, + 221,75,115,115,147,93,82,210,47,182,55,91,216,247,182,14,101,25,61,188, + 149,80,72,114,96,255,182,137,7,14,236,234,82,105,116,34,229,238,218,137, + 242,76,134,180,37,141,71,182,219,109,205,45,43,132,86,16,187,7,182,213, + 186,66,74,105,154,161,3,35,165,180,135,131,156,212,141,5,159,3,66,136, + 233,249,238,124,72,60,88,3,0,183,219,189,42,114,206,116,194,43,252,103, + 65,184,239,213,208,108,38,148,53,226,243,217,113,253,157,189,145,158,154,5, + 11,22,248,35,15,35,65,211,52,9,248,125,152,122,40,18,189,181,190,174, + 235,250,26,41,237,89,233,236,100,192,47,226,125,134,163,125,196,150,101,179, + 123,207,78,246,213,239,141,252,111,150,91,150,85,30,127,78,2,58,76,127, + 184,253,123,151,249,23,46,92,24,201,39,49,182,109,179,183,126,15,251,15, + 214,71,242,177,202,109,219,46,79,238,178,68,74,243,82,53,140,82,241,105, + 33,235,29,189,109,219,102,95,253,110,14,28,220,151,233,238,218,117,233,221, + 144,191,8,255,248,108,66,193,189,9,207,168,175,215,57,120,112,107,143,243, + 108,108,108,0,168,123,247,189,77,25,217,74,95,105,196,72,58,63,171,27, + 121,142,181,44,43,147,71,236,172,230,132,205,251,198,188,140,154,53,111,191, + 253,118,63,221,219,46,39,86,56,77,183,209,52,27,77,183,227,211,114,162, + 231,116,35,189,131,253,116,72,41,235,76,51,200,171,175,62,25,191,31,220, + 186,80,40,228,239,188,139,119,55,7,156,164,218,24,216,176,109,27,41,67, + 157,237,39,123,72,74,53,135,50,131,124,142,182,150,100,146,79,79,6,216, + 40,20,39,18,89,239,232,77,220,143,202,74,189,200,164,13,212,109,175,171, + 93,55,127,254,143,210,245,87,125,98,121,222,48,231,122,255,194,133,63,94, + 7,242,110,203,178,202,72,49,146,84,74,105,103,80,105,64,154,73,222,199, + 34,207,99,196,57,82,202,33,150,101,17,12,132,71,74,6,3,65,44,203, + 194,182,237,137,192,66,219,182,39,118,39,93,74,57,4,56,135,12,132,119, + 193,130,5,254,5,11,22,172,179,109,251,110,219,246,151,9,33,234,246,237, + 173,141,237,232,45,165,180,67,161,16,237,237,93,151,13,107,111,111,39,60, + 229,64,38,28,76,95,82,82,226,122,242,201,39,215,20,21,21,173,201,205, + 205,117,233,61,92,154,223,178,44,124,62,159,191,169,169,137,252,252,252,252, + 232,241,130,130,130,252,191,253,237,111,107,250,247,239,191,38,55,55,215,101, + 24,61,219,226,198,52,77,124,62,159,127,199,142,29,46,224,134,30,25,83, + 40,78,16,178,222,209,27,136,205,49,202,132,116,131,49,142,69,158,243,231, + 255,40,163,60,179,225,120,204,243,88,96,219,246,76,203,50,249,207,250,53, + 145,157,184,173,168,64,149,3,229,225,135,148,236,211,109,219,158,9,252,58, + 83,63,170,170,170,58,220,239,232,189,170,170,170,114,73,41,235,66,161,16, + 143,61,246,24,157,163,185,80,40,20,21,184,88,43,128,16,34,186,60,22, + 205,205,205,183,53,55,55,167,124,72,233,13,60,30,207,111,61,30,15,59, + 119,238,236,109,211,6,48,169,183,141,42,20,199,35,105,119,244,254,36,80, + 121,246,29,132,16,119,216,182,61,65,74,169,153,102,56,0,237,28,13,69, + 162,241,172,210,133,16,91,179,109,90,75,116,191,163,209,157,101,89,119,219, + 182,93,22,12,6,59,8,85,36,130,174,147,82,174,91,176,96,129,95,8, + 225,34,188,123,0,0,45,139,199,223,215,217,230,199,65,203,226,241,115,63, + 137,124,20,138,190,140,218,218,87,209,107,196,71,227,169,196,40,93,52,158, + 44,189,183,30,16,162,209,93,91,91,27,141,141,141,198,145,35,71,240,249, + 124,46,211,52,177,44,139,246,246,118,127,99,99,35,5,5,5,249,30,143, + 199,5,225,189,247,138,174,254,168,55,178,87,40,20,159,16,74,224,20,189, + 202,137,18,165,70,253,140,52,63,158,65,120,94,88,162,102,71,213,164,167, + 80,156,160,136,214,37,19,212,144,42,133,34,3,84,4,167,80,156,88,168, + 77,236,21,138,12,105,89,60,254,88,187,160,80,40,178,192,0,40,156,181, + 181,219,91,254,70,35,64,101,67,217,232,171,54,34,3,77,110,105,89,60, + 62,229,28,81,133,66,113,124,161,34,56,133,34,51,186,191,75,170,66,161, + 56,38,40,129,83,40,210,32,165,244,75,41,127,122,172,253,80,40,20,217, + 145,233,40,202,248,129,40,153,54,241,116,231,154,116,54,62,14,155,31,215, + 53,233,108,168,178,164,182,249,113,93,147,206,70,111,216,84,40,20,199,1, + 25,71,112,151,216,95,226,18,251,75,144,217,74,173,50,238,252,238,146,208, + 70,150,126,32,35,244,192,70,111,140,50,77,104,35,219,178,244,130,141,227, + 230,115,73,151,71,119,253,72,244,121,103,107,35,75,63,20,10,197,113,138, + 106,162,84,40,20,10,69,159,36,107,129,203,224,41,93,246,48,66,200,200, + 70,38,209,66,186,39,249,76,202,146,210,137,204,72,107,163,55,34,159,19, + 233,115,201,52,175,158,248,145,65,20,151,233,253,80,81,156,66,113,130,146, + 74,224,100,220,139,87,180,172,246,189,164,211,53,29,108,245,192,70,183,252, + 136,108,52,218,163,178,196,209,237,178,116,178,209,93,63,250,204,231,210,147, + 252,147,248,33,211,109,42,155,129,13,133,66,209,71,72,54,200,36,225,211, + 237,43,218,179,177,190,150,87,180,103,19,109,174,29,187,46,122,110,2,27, + 233,54,229,206,196,70,58,63,98,79,240,66,136,238,218,232,210,111,215,157, + 178,100,96,35,109,89,146,217,203,194,70,135,123,154,194,118,198,159,75,55, + 253,72,104,175,179,141,52,62,165,253,126,8,33,162,235,89,74,145,88,241, + 50,250,142,165,241,67,161,80,28,231,36,138,224,146,54,221,68,42,174,180, + 70,147,85,26,81,27,100,240,164,156,206,70,38,126,36,19,183,108,108,68, + 207,77,113,60,163,167,254,94,240,35,101,62,153,126,46,61,201,35,19,27, + 153,150,37,205,61,77,75,186,239,71,38,145,92,6,223,83,133,66,113,2, + 211,237,65,38,9,42,247,79,164,143,39,3,63,50,233,127,73,103,227,147, + 26,9,152,206,143,132,156,251,243,169,124,195,247,93,206,253,249,212,76,108, + 116,185,167,122,142,206,213,175,125,153,175,183,124,155,178,47,157,148,137,107, + 9,63,151,178,47,157,196,149,75,175,73,104,227,99,234,139,203,250,251,145, + 224,187,208,221,239,169,106,190,84,40,78,48,212,40,202,19,144,211,190,83, + 142,225,50,56,237,59,229,221,186,190,255,228,129,12,191,112,36,206,194,28, + 38,254,119,247,23,202,159,246,183,25,140,154,49,134,105,127,155,209,109,27, + 10,133,66,241,113,161,4,238,4,228,157,223,109,192,244,155,188,243,187,13, + 221,186,190,97,211,33,246,190,190,155,96,107,128,45,127,217,220,109,63,14, + 173,63,216,225,93,161,80,40,142,39,186,45,112,145,190,150,248,142,14,209, + 195,209,137,221,178,145,192,15,146,12,44,200,198,70,111,12,40,200,218,70, + 162,178,36,98,245,157,43,249,83,238,111,88,125,231,202,76,108,116,185,167, + 86,192,98,241,69,79,242,231,162,223,83,247,236,182,76,92,75,248,185,60, + 63,243,25,158,60,251,81,158,159,249,76,38,126,116,151,30,125,199,18,124, + 23,186,251,61,85,131,76,20,138,19,140,68,2,151,180,2,72,213,41,31, + 79,170,129,19,153,86,124,233,108,100,226,135,148,178,199,54,162,231,166,56, + 158,81,197,215,11,126,164,204,39,211,207,165,39,121,116,182,97,5,44,14, + 254,123,63,86,192,202,202,15,210,124,199,50,33,221,247,35,147,110,216,12, + 190,167,10,133,226,4,38,217,52,1,17,25,230,221,129,78,195,196,19,85, + 134,226,21,237,217,216,242,71,73,42,137,116,149,104,90,27,25,248,129,16, + 66,68,87,109,74,20,208,101,82,22,226,6,22,116,183,44,233,108,100,82, + 150,100,246,178,176,113,220,124,46,157,237,165,59,167,59,126,68,197,45,69, + 36,159,201,253,72,231,135,66,161,56,206,73,213,68,41,226,94,221,26,54, + 29,119,77,7,91,61,176,209,45,63,162,83,226,122,98,35,142,110,151,165, + 147,141,238,250,209,103,62,151,158,228,159,196,15,145,229,0,218,68,54,20, + 10,69,31,33,235,62,184,12,158,206,63,145,190,184,76,162,132,116,125,113, + 153,148,37,165,19,153,145,214,70,111,244,87,157,72,159,75,166,121,245,196, + 143,12,250,97,51,189,31,74,244,20,138,19,20,53,138,82,161,80,40,20, + 125,146,76,247,131,139,239,167,200,228,137,54,147,254,149,110,217,200,210,143, + 132,79,242,217,150,133,158,79,242,77,104,35,219,178,36,226,68,253,92,210, + 229,209,93,63,178,28,65,155,238,126,168,232,77,161,56,129,201,84,224,186, + 243,67,255,56,42,186,99,50,124,255,99,202,87,149,165,231,54,142,215,178, + 40,20,138,227,0,213,68,169,80,40,20,138,62,137,18,56,133,66,161,80, + 244,73,68,235,146,9,106,17,89,133,34,67,138,174,254,232,88,187,160,80, + 40,50,36,227,65,38,10,197,137,132,18,34,133,66,97,0,20,206,218,42, + 110,94,184,65,6,253,109,0,56,93,5,60,48,191,188,67,103,123,52,189, + 115,90,231,227,209,136,176,112,214,214,164,157,245,189,105,43,93,30,241,229, + 137,183,23,159,110,24,185,84,47,60,235,99,29,92,208,219,121,39,178,215, + 217,86,178,227,189,109,43,221,189,238,156,223,205,243,215,202,96,176,29,167, + 51,143,252,146,225,252,234,182,161,189,122,239,85,171,132,66,161,128,72,19, + 229,237,155,31,103,211,155,15,209,176,247,125,0,250,15,63,149,201,231,223, + 20,19,159,217,223,124,74,110,221,244,2,237,158,6,74,7,143,99,210,217, + 115,168,94,120,150,232,124,124,242,249,55,241,203,73,215,3,201,69,169,55, + 109,37,162,114,254,90,121,184,254,125,118,188,255,26,158,230,250,14,229,137, + 218,235,92,222,252,226,161,140,57,245,34,6,12,61,53,173,216,68,43,115, + 219,180,82,157,6,128,102,232,93,42,252,158,228,29,79,103,123,141,7,106, + 201,203,239,207,132,201,87,240,212,31,103,139,202,249,107,229,230,183,31,233, + 114,188,183,109,221,188,112,131,76,244,221,73,246,217,221,244,131,127,201,143, + 54,191,68,227,161,90,220,238,126,12,27,123,38,165,3,199,83,58,104,124, + 23,161,139,10,161,29,12,166,191,215,78,39,78,103,30,15,44,60,75,180, + 46,153,32,85,4,167,80,40,12,128,160,191,141,134,189,239,243,175,101,15, + 114,224,192,1,174,187,233,110,252,158,102,32,44,72,91,222,126,156,93,181, + 111,177,118,245,171,92,249,229,239,210,210,176,139,171,42,31,234,114,60,122, + 77,50,122,211,86,103,162,194,182,246,149,251,105,58,92,199,145,131,219,248, + 112,203,127,186,148,167,115,121,91,91,91,57,235,220,139,105,58,92,71,201, + 128,50,174,170,124,72,38,19,155,248,202,60,20,242,167,245,201,225,112,209, + 127,248,169,220,188,112,131,132,235,123,148,119,50,226,237,157,60,241,76,66, + 126,15,87,85,62,36,91,26,118,117,57,62,251,155,79,201,100,34,215,93, + 91,126,79,115,210,239,78,60,223,251,117,189,108,60,248,17,245,117,107,217, + 91,251,22,111,189,250,15,62,115,218,57,28,222,255,62,3,134,156,202,176, + 177,103,114,211,15,254,37,163,66,119,243,252,181,114,235,59,207,115,112,223, + 251,4,131,222,180,247,193,233,116,51,104,216,169,220,60,127,173,132,27,51, + 189,125,10,133,162,15,99,0,216,166,69,40,228,167,181,181,149,230,230,102, + 66,33,63,62,207,145,14,194,19,21,11,79,243,126,118,213,174,162,241,64, + 45,245,59,215,243,225,150,255,176,123,247,238,180,21,126,188,184,245,212,86, + 60,201,132,173,181,181,149,3,7,14,196,202,19,79,180,188,81,254,245,202, + 11,228,229,229,165,21,155,120,1,72,69,107,107,43,0,237,237,237,93,42, + 252,238,230,157,140,120,123,255,122,229,5,190,112,201,21,132,76,63,165,131, + 199,225,105,222,223,225,56,144,82,228,178,181,117,85,229,67,210,231,57,210, + 229,187,211,153,239,253,186,94,238,217,182,138,186,247,94,225,192,238,119,104, + 57,178,139,96,48,200,219,111,46,199,52,77,206,255,194,101,93,132,174,169, + 97,7,123,118,252,135,55,254,89,29,190,247,41,162,184,64,32,128,215,235, + 229,198,111,252,148,49,167,92,146,238,150,41,20,138,79,9,93,6,153,152, + 166,73,192,219,212,69,120,162,98,209,214,92,207,214,13,47,16,108,111,102, + 235,135,239,112,224,192,129,88,133,158,140,68,226,214,93,91,81,146,9,27, + 16,171,108,27,27,27,241,120,60,56,28,174,164,118,218,219,219,105,110,110, + 38,24,12,166,21,155,120,1,104,109,109,165,189,189,61,105,197,219,222,222, + 142,105,154,93,42,124,205,208,113,56,92,49,31,163,54,122,42,116,209,251, + 182,252,165,103,152,54,253,10,14,215,127,64,176,189,185,195,241,233,151,93, + 3,164,22,185,108,108,69,197,47,224,109,2,194,223,157,68,236,217,182,138, + 119,215,62,65,125,221,90,222,123,103,13,193,96,144,64,32,64,115,115,88, + 248,151,189,248,36,14,135,131,139,47,189,58,38,116,249,197,131,48,253,30, + 0,154,154,154,8,4,2,132,66,161,132,246,163,2,23,12,122,51,106,206, + 84,40,20,159,14,18,142,162,236,44,60,209,202,216,239,247,19,240,183,16, + 240,183,176,115,231,78,90,91,91,105,104,104,72,41,34,157,197,173,39,182, + 32,51,97,107,109,109,197,227,241,96,154,38,149,243,110,99,220,196,75,113, + 186,242,19,218,139,10,84,123,123,123,90,177,57,176,115,29,102,160,61,118, + 126,180,130,78,132,105,154,120,60,158,46,199,157,174,2,138,7,142,229,172, + 115,47,102,201,211,15,99,154,38,173,173,173,24,134,209,45,161,139,10,102, + 180,44,237,237,237,172,88,254,2,83,167,78,237,80,198,246,246,246,180,34, + 151,173,173,120,241,75,198,205,243,215,202,245,111,252,133,250,186,181,108,252, + 207,27,180,181,181,225,245,122,241,120,60,132,66,161,14,15,8,143,213,44, + 194,237,118,51,103,238,157,20,120,135,227,109,57,20,19,195,68,247,18,136, + 217,104,111,111,79,234,131,66,161,248,116,210,69,224,12,195,232,34,60,245, + 245,245,120,60,30,174,189,246,90,0,54,111,222,28,139,194,154,155,155,147, + 138,72,34,113,235,174,173,108,133,237,107,149,223,162,184,255,24,198,77,188, + 148,9,147,175,160,122,225,89,226,87,25,140,174,75,38,116,135,247,110,193, + 50,3,180,69,6,174,164,106,50,131,176,192,37,138,104,30,152,95,46,102, + 127,243,41,105,6,125,252,87,229,15,104,110,216,193,51,79,63,218,109,161, + 139,23,204,229,47,61,19,43,195,202,149,43,153,58,117,42,147,38,77,98, + 229,202,149,177,227,169,68,46,91,91,157,197,47,17,193,96,59,77,77,187, + 217,248,159,55,98,17,117,188,176,69,133,201,52,77,254,95,229,55,200,113, + 21,0,224,111,111,194,211,118,8,32,22,185,37,139,224,162,215,43,20,10, + 69,60,93,86,50,201,203,203,3,194,194,147,76,144,128,152,32,125,173,242, + 91,12,29,125,122,76,68,162,118,110,94,184,65,110,127,255,149,180,226,150, + 169,173,205,111,63,194,134,55,170,169,221,242,50,111,189,250,88,135,126,182, + 250,250,122,14,29,58,68,115,115,51,255,117,211,215,249,238,237,255,195,232, + 147,47,228,172,233,223,225,172,75,110,73,58,122,48,21,209,8,173,185,185, + 153,229,47,61,195,115,79,47,162,225,192,7,4,252,45,25,55,163,38,227, + 169,63,206,22,103,93,114,11,103,77,255,14,163,79,190,144,155,42,239,224, + 154,107,111,192,48,140,132,121,63,243,232,175,168,221,242,50,27,222,168,102, + 195,202,191,70,6,173,132,121,96,126,185,24,123,234,37,12,29,125,58,211, + 166,95,17,251,252,218,219,219,89,182,108,25,0,83,167,78,237,112,124,201, + 211,15,179,171,246,45,182,110,122,129,202,249,107,123,100,43,42,120,201,136, + 54,25,54,54,54,114,240,224,65,46,190,248,18,102,204,152,9,132,31,18, + 12,195,224,186,235,174,103,206,156,27,201,113,21,80,80,52,20,128,85,175, + 63,71,200,159,56,106,83,40,20,138,76,232,34,112,209,202,44,90,201,154, + 166,25,19,164,183,223,126,27,32,118,252,186,235,174,195,153,87,204,208,225, + 147,187,136,72,208,223,70,107,227,158,152,16,69,251,164,186,107,171,241,64, + 45,75,23,47,98,237,234,87,59,12,32,137,247,113,206,156,57,56,243,138, + 25,62,254,124,198,151,95,201,115,213,55,137,158,204,111,139,70,85,141,141, + 141,52,52,52,176,108,217,178,152,40,247,148,234,133,103,137,231,170,111,18, + 227,203,175,100,248,248,243,113,230,21,51,99,198,12,102,204,152,17,19,144, + 104,222,7,14,28,224,233,127,252,141,191,254,97,62,173,141,123,136,206,57, + 139,242,212,31,103,139,161,163,39,227,204,43,142,9,80,180,137,180,179,48, + 69,143,255,227,145,191,224,105,174,199,52,125,61,178,213,218,218,202,202,149, + 43,99,159,67,50,66,161,16,215,124,249,6,242,139,135,224,112,229,83,90, + 90,202,181,215,206,230,218,107,103,3,240,230,155,171,8,248,219,104,107,169, + 39,16,87,190,64,32,208,243,155,173,80,40,62,149,116,17,56,211,52,153, + 49,99,70,108,0,132,97,24,188,248,226,139,0,156,125,246,217,177,38,188, + 232,241,96,123,51,245,123,55,49,251,155,79,117,104,254,115,186,10,40,44, + 29,193,201,19,207,140,53,249,245,196,86,233,224,113,204,188,122,30,103,157, + 123,49,245,245,245,177,38,73,211,52,49,12,131,101,203,150,177,114,229,74, + 130,237,205,236,253,232,77,62,218,240,60,87,85,62,36,227,35,148,76,49, + 77,19,191,223,143,223,239,199,227,241,224,241,120,104,110,110,102,198,140,25, + 76,154,52,169,87,250,123,42,231,175,149,87,85,62,36,63,218,240,60,123, + 63,122,147,96,123,51,59,119,238,140,9,104,84,84,162,175,107,174,189,129, + 175,125,107,33,133,165,35,112,70,154,241,162,204,254,230,83,178,126,231,166, + 152,141,232,245,0,51,102,204,0,142,70,203,209,114,93,55,231,191,201,47, + 30,138,97,228,246,200,150,199,227,97,234,212,169,177,7,152,206,104,78,103, + 236,239,104,132,150,227,42,224,252,243,47,0,96,211,166,141,108,218,180,17, + 135,195,65,200,239,193,211,188,159,247,223,221,128,215,235,237,144,183,66,161, + 80,100,75,210,197,150,163,149,25,16,19,16,8,11,83,52,194,48,12,131, + 231,150,60,65,253,206,245,73,155,187,70,141,59,47,54,172,188,39,182,38, + 157,61,135,242,207,87,50,110,226,165,252,87,229,15,184,106,214,87,128,174, + 125,93,111,252,235,101,94,91,254,4,187,106,223,98,195,27,213,172,125,229, + 254,46,130,153,140,120,97,139,190,162,253,121,255,223,15,126,73,255,193,167, + 144,227,42,138,249,220,93,102,127,243,41,185,246,149,251,217,240,70,53,187, + 106,223,98,221,219,75,59,12,230,105,108,108,140,69,68,209,188,79,154,124, + 5,229,159,175,164,124,234,215,186,172,254,178,253,253,87,194,247,45,98,163, + 181,181,21,191,223,223,161,41,184,189,189,61,118,188,114,222,109,140,26,119, + 94,210,102,229,108,108,93,119,221,117,64,184,105,59,218,196,26,143,211,153, + 199,224,225,167,113,221,77,119,224,112,228,198,34,180,93,187,118,178,109,91, + 120,50,118,116,16,201,155,111,174,226,223,255,126,155,131,7,15,210,212,212, + 212,163,123,172,80,40,20,9,71,81,230,184,138,112,230,21,115,213,172,175, + 176,98,249,11,177,167,243,23,95,124,145,203,47,191,156,169,83,167,178,114, + 229,202,216,241,167,255,241,55,110,185,253,87,4,59,245,153,60,245,199,217, + 34,42,46,211,47,187,134,229,47,61,211,109,91,209,138,56,126,165,146,175, + 205,187,39,229,32,13,32,38,174,149,105,38,0,71,197,44,94,48,163,3, + 85,78,154,124,5,99,78,189,8,95,235,33,222,125,251,31,105,111,106,170, + 168,227,230,133,27,228,186,215,254,204,174,143,86,241,238,134,55,128,212,131, + 100,162,121,39,27,69,25,244,183,209,124,104,123,172,41,120,247,238,221,52, + 55,55,51,103,206,28,224,168,32,53,52,52,196,6,241,140,26,119,30,19, + 207,190,62,97,83,112,54,182,190,86,249,45,10,74,71,17,108,111,198,25, + 23,169,197,243,192,194,179,196,77,63,248,151,204,207,239,207,135,155,158,227, + 197,167,255,132,97,24,177,161,255,209,209,145,94,175,55,22,181,5,131,193, + 88,211,101,148,84,3,76,20,10,133,34,17,9,5,174,160,120,40,195,199, + 159,79,107,227,158,152,48,69,159,216,163,226,55,109,250,21,172,88,254,66, + 236,120,178,201,217,137,68,174,187,182,32,59,161,3,88,242,244,195,204,251, + 238,255,118,17,76,56,58,223,43,62,90,131,174,194,22,21,151,138,239,191, + 38,63,216,248,60,112,116,158,91,50,49,75,118,60,42,34,239,110,120,163, + 71,194,22,37,126,146,126,180,233,54,94,120,128,14,35,84,147,137,91,119, + 108,13,27,119,14,133,165,35,216,251,209,155,73,35,56,128,135,126,246,5, + 113,211,15,254,37,61,158,6,46,191,246,27,52,30,168,229,133,231,254,209, + 101,52,101,244,126,126,243,150,59,40,25,80,22,27,69,25,8,4,82,142, + 90,77,55,162,85,161,80,124,58,233,80,35,69,43,153,28,119,9,35,198, + 157,3,156,131,195,112,49,253,178,107,98,115,182,58,139,95,244,120,42,58, + 139,92,79,108,69,73,39,116,241,17,89,42,193,140,138,11,36,23,182,232, + 185,209,121,98,209,251,20,21,165,84,116,158,211,151,72,68,186,35,108,157, + 105,111,111,143,53,63,198,11,79,123,123,59,30,143,39,173,184,117,199,214, + 248,242,43,1,56,188,239,189,164,125,112,81,30,250,217,23,196,205,243,215, + 202,254,131,199,177,111,251,127,152,51,247,78,90,142,236,226,31,143,253,149, + 96,48,136,105,154,220,60,239,54,138,250,141,98,194,148,176,221,3,187,223, + 137,77,226,78,103,63,154,166,37,137,36,21,10,197,167,15,3,142,86,220, + 209,39,97,135,195,69,81,233,72,106,254,247,162,152,48,205,186,246,70,254, + 241,200,95,200,113,151,48,246,212,75,8,6,189,56,12,87,236,120,170,201, + 217,208,81,228,122,106,43,158,100,66,215,210,188,143,71,30,250,19,166,105, + 118,177,23,45,111,116,194,121,166,226,226,116,21,208,127,248,169,92,119,211, + 221,89,173,69,233,202,47,238,146,119,84,68,254,235,166,175,247,72,216,226, + 63,187,235,230,252,119,76,120,156,78,55,135,247,189,71,48,24,100,206,77, + 223,200,72,220,186,99,171,226,251,175,201,206,223,157,100,60,176,240,44,241, + 189,95,215,203,210,129,227,25,54,246,76,246,109,255,15,95,255,246,66,90, + 142,236,162,230,161,63,81,212,111,20,159,57,243,90,134,150,157,133,29,12, + 146,227,46,225,198,111,252,52,227,181,40,71,140,57,19,167,179,103,253,163, + 10,133,162,239,96,192,209,138,187,226,230,123,1,58,84,202,81,97,114,184, + 242,249,222,61,139,24,50,166,156,162,254,163,98,59,0,68,143,119,174,200, + 19,209,155,182,58,147,72,232,110,191,231,143,93,202,147,168,188,153,138,203, + 3,243,203,69,54,187,9,0,184,242,139,121,96,126,185,248,101,100,146,121, + 188,72,102,147,119,50,162,246,110,250,230,125,177,73,237,209,29,0,134,140, + 41,239,114,188,183,109,185,242,139,147,126,119,18,17,221,49,160,179,208,221, + 125,223,35,140,58,229,11,12,45,59,139,135,126,246,133,240,78,5,221,220, + 77,224,151,106,187,28,133,66,65,100,187,156,76,246,131,171,156,191,86,154, + 166,175,75,90,231,227,153,236,225,214,155,182,82,229,17,244,123,18,110,89, + 19,95,94,219,180,112,186,242,143,201,126,112,61,201,251,68,222,15,46,158, + 239,253,186,94,122,154,246,18,221,31,238,129,94,248,28,212,118,57,10,133, + 2,34,2,119,172,157,80,40,122,27,37,112,10,133,66,9,156,66,161,232, + 19,168,135,26,69,103,12,232,217,23,163,101,241,120,148,141,227,207,198,137, + 148,103,170,102,204,187,238,186,43,225,3,216,79,127,250,211,140,154,92,123, + 232,98,86,182,165,148,167,2,151,2,23,1,151,119,78,6,110,0,220,192, + 67,66,136,14,67,66,83,217,173,169,169,201,216,110,69,69,69,198,118,63, + 46,127,123,66,50,187,139,22,45,138,125,15,230,205,155,215,37,79,245,160, + 174,72,68,210,149,76,20,138,79,19,82,202,71,100,39,178,188,254,78,96, + 3,240,43,186,138,5,128,0,30,3,254,2,236,147,82,102,52,138,170,166, + 166,38,43,187,53,53,53,25,217,253,184,252,253,184,136,138,90,34,113,83, + 40,146,145,120,102,174,66,113,156,16,141,212,126,242,147,159,72,128,123,238, + 185,167,87,43,56,41,229,120,224,67,194,21,122,231,52,41,132,72,155,159, + 148,114,49,48,43,238,80,16,104,2,252,113,118,221,64,105,228,255,129,64, + 131,148,242,115,66,136,245,201,236,214,212,212,116,203,110,77,77,205,231,42, + 42,42,146,218,237,134,191,197,192,221,82,202,49,66,136,142,75,204,124,204, + 44,90,180,232,78,224,103,113,255,71,31,60,126,48,111,222,188,159,127,146, + 190,40,78,60,148,192,41,142,91,170,171,171,87,1,231,17,39,62,213,213, + 213,146,112,243,217,91,149,149,149,23,244,66,54,91,227,254,158,13,60,149, + 205,197,82,202,223,211,81,44,126,6,60,42,132,216,146,224,220,105,192,195, + 192,32,64,7,254,35,165,204,19,66,116,153,84,89,83,83,147,208,110,69, + 69,69,23,187,53,53,53,93,236,214,212,212,228,85,84,84,116,177,219,13, + 127,191,5,60,4,60,3,104,82,202,123,133,16,247,118,62,183,51,23,93, + 116,145,44,46,46,230,217,103,159,237,240,128,112,249,229,151,203,177,99,199, + 178,123,247,110,22,47,94,156,242,225,97,209,162,69,141,64,9,176,23,248, + 9,240,4,97,33,222,11,252,108,209,162,69,119,206,155,55,175,52,157,47, + 138,79,47,74,224,20,199,29,213,213,213,155,129,207,70,254,245,1,75,129, + 170,200,255,11,128,153,192,249,17,177,123,183,178,178,114,82,119,242,145,82, + 118,216,22,66,8,241,180,148,114,59,48,54,114,40,229,2,152,82,202,233, + 192,45,113,135,190,40,132,120,41,217,249,66,136,21,192,96,41,229,109,132, + 155,6,5,224,37,44,74,49,106,106,106,186,216,173,168,168,72,106,183,162, + 162,98,5,48,184,166,166,38,165,221,238,248,43,165,108,5,214,196,217,252, + 17,112,111,178,107,34,254,200,57,115,230,112,240,224,65,158,125,246,217,216, + 241,11,47,188,80,206,155,55,143,80,40,132,203,229,194,239,247,203,165,75, + 151,38,20,185,69,139,22,61,66,88,220,152,55,111,222,136,184,227,204,155, + 55,111,68,36,146,43,89,180,104,209,35,243,230,205,155,147,202,31,197,167, + 23,213,7,167,56,174,168,174,174,182,8,139,219,230,202,202,74,81,89,89, + 153,87,89,89,121,77,101,101,229,150,200,235,26,192,170,172,172,20,192,102, + 224,179,145,107,186,67,110,231,3,66,136,113,226,40,233,214,253,122,52,238, + 239,187,59,139,133,148,210,74,212,151,39,132,248,53,240,135,200,191,154,148, + 242,64,42,187,157,197,173,166,166,198,170,169,169,233,98,183,162,162,162,131, + 221,154,154,154,148,118,211,249,43,165,188,2,120,155,176,184,237,37,220,108, + 153,200,223,14,56,28,14,156,78,103,151,181,73,199,141,27,135,148,146,63, + 252,225,15,248,124,62,78,57,229,58,103,3,20,0,0,32,0,73,68,65, + 84,148,84,102,110,0,54,199,247,185,45,90,180,72,118,234,139,219,28,57, + 79,161,72,136,18,56,197,113,67,68,168,52,128,202,202,202,211,82,156,42, + 163,231,68,132,78,203,86,228,164,148,157,251,168,154,179,185,62,66,255,200, + 251,102,33,196,79,19,101,147,236,66,33,196,45,113,233,157,155,217,98,118, + 43,42,42,178,178,91,81,81,145,145,221,116,254,74,41,43,129,231,35,255, + 174,20,66,140,72,97,183,3,127,253,235,95,197,170,85,171,176,109,187,195, + 241,226,226,98,188,94,47,77,77,77,248,124,62,250,245,235,151,202,12,64, + 186,200,188,91,145,187,226,211,131,18,56,197,113,65,117,117,117,61,160,69, + 162,182,164,125,51,213,213,213,109,149,149,149,133,241,199,226,68,174,62,93, + 62,113,35,36,203,59,37,21,199,13,160,252,48,3,59,127,137,251,247,225, + 116,231,39,97,98,228,221,17,61,80,83,83,243,177,216,205,198,95,41,229, + 61,132,71,79,2,60,43,132,248,124,50,187,217,224,247,251,113,58,157,56, + 28,14,12,195,136,109,143,148,130,243,226,255,73,48,130,242,60,20,138,20, + 40,129,83,28,115,170,171,171,7,1,67,128,167,51,56,61,217,119,246,105, + 96,72,196,86,66,164,148,223,201,208,165,183,50,56,103,110,228,221,22,66, + 252,50,67,187,153,16,179,91,81,81,241,177,216,77,227,111,0,248,113,228, + 239,69,66,136,107,186,147,153,148,146,104,107,231,149,87,94,41,127,248,195, + 31,202,35,71,142,80,80,80,192,245,215,95,79,73,73,9,181,181,181,233, + 204,252,169,135,233,138,79,57,74,224,20,199,3,107,1,42,43,43,83,14, + 65,175,174,174,110,170,172,172,116,39,74,139,187,118,109,178,235,133,16,191, + 139,118,174,37,72,62,59,174,239,237,107,25,248,28,253,237,216,41,207,74, + 77,128,174,205,141,199,210,238,90,32,39,242,247,189,66,136,111,100,96,55, + 33,27,54,108,224,213,87,95,5,194,219,47,53,54,54,178,121,243,230,195, + 207,62,251,44,129,64,128,23,95,124,145,39,159,124,50,213,40,202,71,129, + 73,241,19,188,227,137,28,159,68,199,126,69,133,162,3,106,20,165,226,120, + 96,36,112,184,23,236,28,142,216,202,26,33,196,191,249,135,244,32,113,243, + 206,82,56,237,82,216,170,77,224,100,54,112,104,135,155,129,99,224,67,38, + 192,201,217,152,149,0,82,202,213,66,136,115,187,227,87,42,187,53,53,53, + 171,43,42,42,122,197,174,148,114,13,112,118,228,223,31,9,33,126,210,19, + 123,75,150,44,137,137,215,43,175,188,34,94,121,229,21,0,182,108,233,50, + 27,33,33,243,230,205,155,179,104,209,162,203,8,143,148,220,67,120,154,192, + 34,96,30,112,79,228,180,38,53,130,82,145,10,21,193,41,142,23,126,157, + 42,177,186,186,186,185,178,178,178,164,39,54,162,36,24,96,18,230,67,202, + 217,202,4,38,207,132,53,79,69,79,14,139,91,215,192,39,26,89,164,138, + 66,162,125,130,231,68,250,246,166,73,41,199,198,165,231,36,184,62,43,187, + 53,53,53,178,166,166,102,90,77,77,77,183,237,74,41,55,113,84,220,190, + 5,252,70,74,185,56,67,127,83,178,101,203,150,55,95,126,249,229,110,45, + 163,21,153,227,246,3,96,56,97,113,35,242,62,156,240,68,111,53,7,78, + 145,18,21,193,41,142,23,238,3,18,141,236,139,146,201,119,245,190,12,243, + 234,60,192,164,227,132,232,15,153,0,108,229,100,182,98,134,252,212,58,79, + 75,240,44,248,1,112,42,225,97,243,151,37,24,114,111,8,33,70,73,41, + 255,11,120,0,112,2,203,129,128,148,242,34,33,196,106,224,80,2,223,98, + 118,107,106,106,46,75,48,69,192,168,168,168,24,85,83,83,211,197,110,77, + 77,205,69,21,21,21,105,237,198,251,43,165,220,7,12,37,44,128,231,3, + 219,35,246,206,33,60,33,60,157,191,41,105,105,105,57,239,253,247,223,207, + 246,178,184,181,37,147,62,179,252,236,171,75,38,252,44,89,162,66,1,74, + 224,20,199,15,119,167,74,172,172,172,204,207,208,70,166,34,23,67,8,209, + 101,62,28,67,194,11,65,135,197,45,225,53,159,137,140,198,20,192,247,129, + 151,58,165,155,145,247,191,3,127,151,82,46,7,190,64,56,10,186,30,88, + 77,88,76,32,28,30,106,0,21,21,21,159,137,204,113,75,104,55,186,152, + 114,69,69,197,223,129,191,215,212,212,100,100,55,145,191,82,202,54,32,63, + 114,222,41,66,136,232,74,219,231,102,234,111,58,44,203,38,47,47,97,183, + 105,82,212,174,0,138,222,66,9,156,226,120,225,54,82,71,112,153,218,232, + 29,60,141,224,247,18,158,219,156,148,16,225,33,243,159,151,82,94,43,132, + 72,58,10,84,8,49,93,74,57,17,168,0,126,27,57,28,157,238,224,235, + 148,81,204,110,77,77,205,181,21,21,21,73,237,86,84,84,76,175,169,169, + 201,214,238,57,82,74,63,97,241,178,128,97,66,136,131,221,241,247,173,213, + 235,101,170,86,75,41,37,35,71,158,196,91,171,55,100,208,76,41,225,208, + 87,211,159,166,80,100,136,234,131,83,28,15,236,6,6,244,130,157,1,17, + 91,29,144,82,238,146,82,246,151,82,246,79,112,77,148,254,140,139,8,236, + 201,108,229,179,23,195,150,87,96,20,247,167,184,38,62,234,124,68,74,233, + 74,229,156,16,98,139,16,226,251,66,136,125,113,43,134,72,33,68,231,232, + 180,131,221,154,154,154,148,118,43,42,42,182,84,84,84,124,191,162,162,98, + 95,220,10,39,178,162,162,162,179,221,185,192,179,132,31,108,115,8,47,178, + 92,220,89,220,178,241,55,20,178,48,205,228,47,203,178,201,115,231,167,60, + 39,250,10,133,186,187,32,141,66,145,24,37,112,138,227,129,179,0,170,171, + 171,179,90,232,56,158,184,107,207,138,63,30,169,152,163,163,52,127,220,249, + 58,142,10,107,3,107,159,248,18,205,79,109,197,199,10,4,54,65,63,228, + 202,105,156,210,97,65,230,24,145,249,100,75,35,255,230,16,222,33,224,212, + 100,62,74,41,243,165,148,227,59,45,223,245,80,231,243,34,243,223,58,216, + 141,236,9,151,144,154,154,154,252,154,154,154,241,157,150,239,234,98,87,8, + 241,8,48,134,240,239,62,72,120,30,89,210,81,167,153,250,171,80,28,175, + 168,38,74,197,49,167,178,178,242,96,117,117,245,126,224,218,30,152,185,22, + 216,95,89,89,121,240,203,75,38,36,59,103,158,148,114,94,220,255,179,133, + 16,13,177,255,206,250,74,61,181,92,200,174,200,255,165,95,1,155,15,249, + 40,249,220,0,33,196,101,82,202,90,194,11,52,187,129,247,164,148,15,70, + 146,125,113,167,230,18,30,180,17,63,242,239,13,33,196,92,18,80,81,81, + 113,89,77,77,77,7,187,53,53,53,25,219,173,168,168,72,104,151,240,3, + 192,90,194,147,217,111,5,110,237,13,127,21,138,227,17,37,112,138,227,130, + 202,202,202,161,213,213,213,86,100,135,0,82,45,215,213,153,200,53,118,101, + 101,229,208,44,178,92,212,165,207,108,142,24,150,224,188,142,173,28,9,196, + 83,8,49,78,74,25,191,3,66,58,17,48,129,231,133,16,215,68,70,91, + 154,137,78,170,168,168,24,87,83,83,147,181,221,138,138,138,107,34,163,45, + 187,216,141,228,85,30,241,55,74,175,248,171,80,28,111,168,38,74,197,113, + 67,101,101,165,78,100,194,89,117,117,245,59,233,206,175,174,174,126,39,78, + 220,244,68,231,68,86,45,177,34,118,205,184,213,74,58,175,210,209,35,132, + 16,147,128,95,16,222,37,59,217,194,205,239,2,235,128,209,209,37,176,210, + 137,69,69,69,69,86,118,43,42,42,174,137,92,151,210,110,111,249,107,75, + 137,180,237,94,121,217,217,109,162,174,80,164,69,69,112,138,227,138,202,202, + 74,61,178,31,220,164,136,120,69,247,131,251,18,225,72,38,186,31,92,116, + 104,127,210,253,224,162,115,169,218,158,139,181,48,106,71,231,87,245,140,68, + 118,226,242,73,70,52,18,219,219,154,164,25,53,177,127,255,243,177,216,237, + 13,127,207,104,174,72,103,67,161,56,102,40,129,83,28,119,68,5,43,110, + 71,239,47,69,146,222,141,188,75,224,205,84,59,122,171,185,84,10,133,66, + 9,156,226,152,147,60,170,250,69,178,75,4,112,254,151,123,41,26,83,40, + 20,125,19,37,112,138,99,138,138,180,20,10,197,199,133,26,100,162,80,40, + 20,138,62,137,18,56,133,66,161,80,244,73,148,192,41,20,10,133,162,79, + 210,107,125,112,45,139,199,247,150,169,30,209,151,252,56,22,101,57,94,238, + 159,66,161,80,244,148,94,17,184,222,24,40,208,27,21,107,95,242,67,161, + 80,40,20,61,67,53,81,42,20,10,133,162,79,162,4,78,161,80,40,20, + 125,18,37,112,10,133,66,161,232,147,40,129,83,40,20,10,69,159,68,9, + 156,66,161,80,40,250,36,74,224,20,10,133,66,209,39,81,2,167,80,40, + 20,138,62,137,18,56,133,66,161,80,244,73,148,192,41,20,10,133,162,79, + 162,4,78,161,80,40,20,125,18,37,112,10,133,66,161,232,147,40,129,83, + 40,20,10,69,159,68,9,156,66,161,80,40,250,36,74,224,20,10,133,66, + 209,39,81,2,167,80,40,20,138,62,137,18,56,133,66,161,80,244,73,148, + 192,41,20,10,133,162,79,162,4,78,161,80,40,20,125,18,37,112,10,133, + 66,161,232,147,40,129,83,40,20,10,69,159,68,9,156,66,161,80,40,250, + 36,74,224,20,10,133,66,209,39,81,2,167,80,40,20,138,62,137,18,56, + 133,66,161,80,244,73,148,192,41,20,10,133,162,79,162,4,78,161,80,40, + 20,125,18,3,160,101,241,248,99,237,7,160,252,80,40,20,10,69,239,33, + 90,151,76,144,199,218,9,197,241,67,209,213,31,29,107,23,20,10,133,162, + 87,48,0,10,103,109,21,189,105,52,42,154,31,163,93,7,96,246,192,148, + 17,127,253,39,224,239,9,101,87,161,80,40,250,2,198,39,156,159,156,120, + 230,4,14,251,154,16,36,175,155,37,146,1,185,37,108,249,207,86,32,225, + 137,61,17,183,108,174,151,231,20,22,210,98,89,41,59,43,109,160,72,215, + 89,211,218,10,137,253,253,196,185,81,254,247,68,224,194,135,197,95,126,23, + 61,246,109,121,231,149,13,28,90,243,184,248,91,195,49,116,77,161,80,40, + 62,17,146,9,92,135,8,167,23,145,203,215,62,38,150,237,89,69,29,251, + 147,158,84,198,16,190,56,226,243,12,18,83,142,117,68,33,255,113,239,189, + 194,179,105,19,150,215,155,244,36,221,237,166,96,202,20,70,222,118,219,177, + 246,151,18,233,62,183,73,120,87,191,200,99,79,0,39,199,167,61,194,253, + 75,128,15,129,207,148,72,247,169,77,194,251,254,49,113,82,161,80,40,62, + 1,18,10,92,110,94,78,104,204,41,35,145,118,230,245,181,208,4,59,62, + 216,141,175,61,144,42,130,9,125,101,230,55,28,31,237,219,41,202,207,157, + 200,161,246,70,132,56,122,186,148,146,129,121,165,252,101,245,22,30,28,246, + 152,4,66,153,228,157,171,105,242,179,110,119,198,190,70,121,215,235,197,103, + 219,41,253,189,229,190,251,28,59,124,62,113,97,73,9,205,166,137,30,231, + 175,37,37,197,134,193,235,77,77,140,121,233,165,140,253,253,56,105,18,222, + 213,37,210,109,181,254,214,171,217,191,236,152,214,60,194,171,105,183,115,106, + 137,116,155,77,194,251,73,71,239,10,133,66,241,137,146,176,146,27,48,172, + 63,79,175,251,51,173,237,30,90,77,111,218,230,196,66,195,77,97,94,62, + 51,198,223,200,238,109,251,82,229,151,179,106,217,90,0,251,79,155,255,71, + 252,126,219,63,112,106,142,88,98,208,14,241,237,147,174,99,180,56,71,30, + 124,247,80,198,83,24,70,228,228,240,228,61,247,96,181,181,97,251,253,105, + 207,215,92,46,244,130,2,166,223,123,47,31,249,124,41,253,125,161,161,1, + 192,254,231,130,5,162,233,213,87,17,186,30,75,148,150,69,201,197,23,243, + 251,219,111,151,91,188,222,94,153,114,33,165,124,25,88,35,132,184,183,59, + 215,151,72,183,175,229,122,175,38,223,4,253,127,65,155,1,57,37,57,4, + 154,2,216,203,192,250,62,180,188,237,213,75,164,187,189,73,120,243,122,195, + 103,133,66,161,56,30,73,40,112,187,183,237,99,197,146,85,156,241,249,73, + 44,171,95,147,214,200,53,67,47,100,197,242,85,233,196,45,158,182,231,22, + 47,47,28,60,169,148,67,129,166,216,193,193,57,165,60,183,120,57,64,48, + 83,67,0,31,249,124,236,123,226,9,6,94,116,17,109,27,55,166,61,191, + 96,202,20,14,188,244,82,58,113,235,224,239,238,199,30,43,44,26,51,6, + 171,173,45,118,80,47,40,96,247,99,143,101,237,111,34,164,148,211,128,165, + 128,14,76,151,82,222,47,132,232,78,95,153,203,126,18,28,239,67,254,4, + 55,115,184,37,124,180,4,30,185,254,126,60,229,94,66,167,2,143,147,219, + 83,159,21,10,133,226,120,38,89,212,113,246,173,87,87,209,238,241,241,153, + 194,49,232,66,75,250,154,88,88,134,97,24,220,122,117,21,192,217,233,50, + 252,119,243,11,6,80,116,235,151,170,184,104,212,153,152,210,2,192,148,22, + 23,141,58,147,91,191,84,5,224,202,178,28,103,159,183,97,3,102,107,43, + 57,195,134,33,116,61,233,43,103,216,48,132,195,193,121,27,54,100,228,111, + 237,157,119,26,64,209,5,27,54,80,112,218,105,72,43,236,175,180,44,10, + 78,59,141,11,194,118,178,245,183,3,145,168,109,57,97,113,3,240,1,217, + 183,185,70,177,123,226,141,66,161,80,244,13,146,9,220,122,161,137,165,183, + 92,126,15,231,12,155,132,67,36,238,174,145,72,78,27,48,158,91,174,184, + 7,161,137,122,224,223,25,228,25,51,230,208,28,72,100,204,150,35,174,185, + 50,75,214,3,75,191,250,216,99,184,79,57,5,180,228,173,133,185,99,198, + 240,141,63,255,25,32,107,127,49,12,176,35,234,97,219,225,255,123,128,148, + 114,186,148,210,4,166,199,29,254,181,16,34,79,8,177,171,155,102,219,181, + 235,192,188,4,218,30,247,242,231,166,159,243,16,191,225,207,77,63,167,237, + 113,47,230,37,160,125,25,128,244,109,185,10,133,66,113,2,147,76,9,76, + 105,203,203,182,110,174,147,127,249,229,63,248,92,191,207,96,201,142,97,129, + 68,114,102,241,169,188,185,108,45,255,121,227,29,164,45,135,165,203,236,250, + 117,95,53,206,42,186,220,4,90,126,243,204,189,172,219,247,94,76,60,29, + 194,96,221,190,247,248,205,51,247,2,180,0,220,241,222,119,243,51,44,135, + 9,92,182,209,227,145,203,30,122,136,220,49,99,98,145,86,60,174,145,35, + 217,255,194,11,172,104,108,4,72,235,239,191,207,56,195,200,29,59,214,4, + 90,222,40,47,167,253,195,15,17,142,176,8,11,135,131,246,15,63,228,141, + 242,242,152,191,27,167,79,207,212,95,164,148,255,6,94,230,104,212,118,24, + 24,32,132,248,94,166,54,18,209,36,188,238,162,199,221,150,118,59,88,183, + 67,176,20,218,68,128,96,105,184,255,77,187,29,138,30,119,219,77,194,171, + 154,40,21,10,69,159,38,221,192,8,237,119,119,255,21,107,191,73,63,103, + 81,135,4,167,230,224,164,162,145,220,122,245,189,144,65,83,31,192,99,167, + 63,138,16,194,4,10,102,125,233,82,222,245,213,97,228,24,177,215,187,190, + 58,102,125,233,82,128,2,128,95,124,230,55,158,108,203,243,141,173,91,9, + 30,58,132,94,80,208,41,69,195,57,116,104,198,77,147,0,195,111,190,153, + 97,55,223,108,2,5,163,191,250,85,130,135,14,161,57,157,177,87,240,208, + 33,70,127,245,171,49,127,167,44,95,158,214,95,41,229,231,164,148,1,224, + 172,184,195,143,11,33,6,118,179,207,173,3,37,210,109,52,9,175,81,120, + 171,251,253,226,125,238,14,79,37,197,123,220,118,225,173,238,247,155,132,87, + 47,145,238,81,61,205,75,161,80,40,142,103,210,181,177,25,182,45,239,255, + 230,21,119,223,178,116,215,195,252,253,189,23,113,104,6,150,180,185,112,240, + 100,110,254,226,157,8,77,212,75,91,102,210,212,135,16,226,199,19,79,159, + 240,131,102,179,141,111,204,251,97,194,105,2,31,230,109,97,248,105,67,69, + 177,163,64,110,89,183,245,103,192,93,217,148,71,194,253,151,191,248,226,45, + 43,239,189,151,198,229,203,17,14,7,210,178,200,63,229,20,230,221,127,63, + 100,222,52,201,176,155,111,254,241,231,10,11,127,224,179,44,126,249,155,223, + 36,158,38,176,101,11,147,220,110,225,214,117,185,230,255,111,239,206,227,163, + 170,238,255,143,191,238,76,18,146,153,4,2,38,1,65,4,145,138,91,41, + 42,90,183,10,213,138,235,87,129,170,117,1,109,107,197,238,181,213,182,90, + 109,237,175,181,214,189,171,11,104,109,21,68,91,45,68,107,93,82,107,65, + 219,186,111,104,17,92,217,37,139,132,44,51,217,231,254,254,56,51,201,132, + 36,100,38,179,31,222,207,199,99,12,51,185,185,231,51,99,50,239,57,247, + 158,115,110,99,227,78,235,117,93,247,12,224,193,232,135,128,79,56,142,243, + 126,28,207,113,167,234,157,64,39,192,169,156,123,126,39,157,107,239,231,143, + 221,163,98,230,241,205,31,214,176,245,169,63,115,15,245,78,96,168,135,64, + 69,68,114,194,96,1,215,233,186,238,183,182,110,172,189,240,214,43,254,84, + 116,232,215,167,243,94,243,38,118,43,24,193,7,43,63,228,229,149,171,32, + 134,67,125,81,198,119,117,117,241,226,235,127,99,160,201,222,147,216,157,63, + 140,191,145,227,14,250,2,192,248,56,246,13,230,80,229,183,54,180,181,93, + 120,223,157,119,22,157,126,196,17,116,212,214,226,45,41,161,246,217,103,99, + 62,52,217,171,94,215,229,111,63,255,57,3,77,246,246,250,253,92,54,109, + 26,159,191,250,234,65,235,117,28,231,33,215,117,151,1,115,35,15,1,171, + 92,215,221,199,113,156,152,135,160,70,236,116,105,173,135,159,1,96,97,229, + 148,168,199,42,111,4,184,51,250,49,17,17,75,197,58,74,98,248,93,215, + 63,208,113,210,185,199,178,218,211,193,33,187,237,203,137,179,207,131,24,15, + 245,69,105,3,56,244,83,167,50,245,136,253,6,156,232,253,227,231,174,103, + 184,215,223,189,253,16,12,191,242,131,15,58,78,59,248,96,220,142,14,138, + 38,76,224,83,149,149,67,174,247,148,31,255,152,157,78,244,254,235,95,241, + 153,129,45,131,214,235,56,206,231,93,215,221,27,120,19,40,2,124,192,38, + 215,117,239,115,28,103,94,172,133,105,81,100,17,145,65,196,186,192,174,227, + 56,183,239,62,97,180,251,124,211,35,238,97,51,63,229,58,158,129,123,28, + 141,149,83,220,56,22,238,173,255,208,253,175,11,212,15,182,97,156,251,189, + 125,175,194,66,247,189,43,174,112,143,31,53,202,5,146,86,239,250,155,110, + 74,74,189,174,235,86,185,189,53,185,174,91,22,203,126,29,199,209,77,55, + 221,116,211,109,39,183,152,199,185,187,174,251,181,143,214,87,159,253,141,147, + 175,44,125,229,217,55,33,190,67,125,0,124,255,127,151,148,57,30,167,185, + 163,173,179,240,87,211,126,183,125,160,237,46,125,245,219,197,78,129,147,231, + 56,78,197,141,7,252,122,168,93,149,175,125,216,218,122,246,130,59,238,40, + 125,186,190,126,72,245,190,54,107,86,25,30,79,115,168,181,181,240,144,21, + 43,6,172,247,149,99,142,41,246,20,20,228,225,241,84,28,84,85,21,115, + 189,142,227,204,114,93,247,100,224,111,152,1,63,197,64,141,235,186,87,56, + 142,115,125,188,245,138,136,72,143,120,39,114,141,124,229,217,55,93,96,198, + 80,26,115,28,246,126,237,145,53,111,108,249,160,122,44,16,9,12,207,214, + 134,90,136,26,209,249,230,175,214,180,86,45,174,234,140,218,102,168,70,62, + 93,95,63,228,122,241,120,246,254,199,187,239,190,241,110,75,75,175,122,59, + 106,123,215,123,199,123,239,181,222,185,101,203,144,234,117,28,231,49,215,117, + 135,1,235,129,177,152,243,114,215,185,174,59,217,113,156,139,134,84,183,136, + 136,12,233,114,57,67,190,28,204,13,251,255,250,5,128,113,39,238,253,65, + 212,195,149,215,125,231,214,243,129,202,200,3,225,112,75,150,33,215,123,208, + 19,79,188,0,240,185,145,35,123,213,123,211,146,37,189,234,13,135,219,144, + 57,102,234,196,56,215,117,191,14,252,30,83,243,79,19,217,167,136,200,174, + 46,41,11,4,15,228,51,51,142,233,117,62,233,168,25,71,141,102,15,79, + 30,46,209,19,162,47,120,248,158,42,128,11,118,252,249,113,199,79,138,121, + 226,116,50,156,52,106,84,217,14,247,71,143,46,40,200,131,222,245,222,177, + 121,51,244,83,239,177,35,71,38,84,175,227,56,183,1,187,3,23,57,67, + 24,85,41,34,34,61,82,122,201,148,103,87,62,211,107,226,242,127,86,254, + 167,26,96,243,166,247,99,154,208,188,249,31,31,196,59,209,59,33,143,111, + 219,86,183,195,253,106,128,234,246,246,152,234,125,186,190,62,225,122,29,199, + 169,6,238,74,116,63,34,34,187,186,148,246,224,226,144,21,87,193,142,67, + 174,213,43,34,178,203,113,226,24,30,47,89,68,243,224,68,68,118,78,1, + 39,34,98,17,125,248,237,145,7,48,124,246,218,152,15,185,69,2,81,47, + 98,98,26,150,239,3,232,117,76,84,228,117,92,115,216,3,25,174,100,215, + 182,239,139,103,3,48,124,246,218,238,199,94,220,50,248,197,135,1,14,27, + 123,80,74,106,202,117,177,190,126,208,243,26,54,106,25,190,94,82,58,200, + 68,36,221,244,102,153,94,241,188,9,71,60,124,127,37,75,239,88,204,135, + 239,126,48,248,198,187,176,232,223,229,185,243,207,224,212,47,156,198,129,7, + 127,50,131,21,229,30,5,156,136,164,205,23,102,124,94,193,54,4,203,22, + 63,196,178,197,15,49,119,254,25,92,126,253,149,153,46,39,103,244,9,56, + 207,4,199,239,157,232,28,2,208,181,206,125,37,180,222,237,187,132,190,136, + 72,156,102,29,248,89,182,111,75,116,113,162,93,219,178,197,15,241,209,198, + 45,252,102,233,173,153,46,37,39,244,154,38,224,191,58,255,91,101,235,124, + 31,141,92,81,180,114,228,138,162,149,101,235,124,31,249,175,206,255,86,166, + 138,19,17,59,124,97,198,231,21,110,73,242,220,138,255,114,221,15,127,145, + 233,50,114,66,119,192,85,184,254,31,250,127,90,240,91,194,87,167,14,43, + 241,255,180,224,183,21,174,255,247,233,47,77,68,108,240,240,253,149,58,44, + 153,100,203,22,63,196,91,175,190,153,233,50,178,158,7,32,127,134,231,19, + 192,53,0,219,206,9,80,227,4,168,241,6,216,118,78,247,209,201,139,195, + 219,136,136,196,101,233,29,139,51,93,130,149,30,253,243,35,153,46,33,235, + 121,0,166,174,248,228,53,64,94,195,111,2,116,253,59,252,157,16,116,253, + 27,26,126,19,0,200,155,186,226,192,255,151,169,34,69,36,151,248,194,55, + 99,227,186,141,153,43,197,98,175,60,247,114,166,75,200,122,121,0,171,103, + 174,153,213,73,7,29,171,129,218,158,111,186,155,160,227,38,168,95,222,66, + 128,247,78,207,80,141,34,146,75,242,167,247,186,219,217,209,145,161,66,236, + 182,254,189,117,153,46,33,235,229,1,180,174,105,43,117,171,205,3,158,25, + 240,141,21,151,1,112,235,204,155,8,173,132,208,166,16,29,4,125,3,238, + 69,68,68,36,203,228,1,68,194,13,32,180,178,255,127,139,136,196,196,77, + 235,69,64,68,6,212,231,106,2,158,25,253,255,91,68,36,38,157,175,154, + 91,216,94,159,152,148,193,98,236,53,119,254,25,153,46,33,235,121,0,74, + 102,20,7,243,103,120,112,42,76,175,237,119,206,77,252,206,49,135,39,61, + 123,64,254,12,15,197,51,252,250,88,38,34,113,59,247,171,243,51,93,130, + 149,78,253,194,105,153,46,33,235,121,0,62,177,98,175,63,143,92,81,68, + 193,143,192,217,163,231,155,206,30,144,127,25,140,92,81,196,222,43,38,220, + 157,169,34,69,36,119,157,126,206,108,245,226,146,108,238,252,51,180,46,101, + 12,60,0,111,206,252,223,181,64,199,136,239,248,241,30,29,126,212,3,222, + 163,97,196,119,252,0,29,171,103,174,249,93,6,235,20,145,28,246,231,149, + 127,165,116,84,105,166,203,176,194,17,51,143,212,122,148,49,242,0,116,172, + 12,189,7,220,14,48,234,126,63,21,93,230,54,234,126,127,100,187,187,194, + 219,136,136,12,73,213,91,255,82,79,46,65,115,231,159,161,117,40,227,208, + 61,200,164,182,52,240,221,246,21,93,183,0,161,168,239,135,218,87,116,221, + 82,91,26,248,102,250,75,19,17,219,252,121,229,95,185,242,230,171,21,116, + 113,154,59,255,12,238,126,244,94,245,220,226,212,125,53,1,183,129,208,246, + 207,182,94,90,112,186,247,238,252,105,158,19,1,58,94,15,61,209,254,112, + 215,255,50,87,158,72,124,134,114,125,50,73,175,211,207,153,205,233,231,204, + 238,190,175,107,248,245,79,191,203,137,115,26,43,167,184,186,162,119,250,233, + 138,222,201,17,121,29,69,196,208,123,74,15,93,240,84,114,158,254,160,69, + 164,63,78,164,71,38,146,171,20,112,34,210,31,5,156,136,136,244,43,215, + 63,60,230,1,12,63,76,71,42,51,169,241,197,78,0,134,207,94,155,225, + 74,118,109,141,149,83,0,243,255,225,216,99,143,165,173,173,45,195,21,245, + 150,159,159,159,244,125,118,100,209,74,255,195,134,13,3,160,242,219,155,129, + 220,127,115,205,117,54,156,223,238,73,182,177,26,44,153,17,91,14,136,125, + 219,137,5,112,98,9,156,80,2,115,214,165,172,36,235,172,222,23,214,180, + 194,138,102,88,90,15,117,93,131,254,136,235,186,84,84,84,80,88,88,216, + 125,95,146,207,113,204,248,182,214,214,86,90,90,90,232,236,236,204,112,69, + 98,19,117,221,114,193,248,124,120,112,34,236,89,144,233,74,114,83,169,23, + 14,247,155,219,165,21,112,83,13,252,174,110,231,63,82,90,74,97,97,33, + 121,121,61,127,34,94,175,183,251,13,89,18,227,186,46,93,93,61,31,52, + 138,139,139,1,20,112,146,84,10,184,108,119,140,31,30,152,152,233,42,236, + 145,239,192,21,163,205,109,39,71,45,34,225,230,56,14,30,143,7,175,215, + 219,253,38,44,137,113,28,7,215,117,105,110,110,166,171,171,139,80,40,132, + 235,186,140,25,51,134,77,155,54,101,186,60,177,136,2,46,155,77,45,236, + 27,110,58,148,28,191,200,107,182,227,225,224,45,7,12,250,122,122,60,30, + 70,140,24,209,235,77,57,20,10,237,244,103,100,231,60,30,15,197,197,197, + 148,148,148,224,186,46,13,13,13,189,122,115,34,201,162,128,203,86,94,224, + 241,168,229,140,198,175,131,174,64,166,170,177,67,127,65,55,101,24,172,237, + 59,152,196,117,93,28,199,233,62,44,217,220,220,76,103,103,103,119,111,67, + 134,206,113,28,26,26,26,200,203,203,163,184,184,24,175,215,171,15,13,146, + 18,125,46,120,42,89,226,179,197,16,62,223,227,76,252,88,225,150,76,209, + 189,182,243,70,14,184,89,164,167,225,186,46,157,157,157,116,117,117,41,220, + 146,32,114,254,173,179,179,19,215,117,41,46,46,198,227,209,91,145,36,159, + 126,171,178,213,21,163,187,255,233,182,111,205,96,33,150,59,198,223,207,131, + 230,192,70,100,64,137,14,75,166,70,87,87,23,141,141,141,0,26,188,35, + 41,161,128,203,86,251,153,225,233,58,231,150,34,145,215,181,191,145,169,5, + 123,244,186,171,195,146,34,185,73,1,151,109,242,143,201,116,5,34,34,86, + 80,192,101,27,183,217,124,125,187,53,179,117,236,42,54,180,247,125,204,237, + 253,218,123,60,30,29,66,75,17,157,123,147,84,210,111,87,182,233,124,213, + 124,93,17,14,186,45,7,224,20,140,1,39,249,203,52,237,210,34,35,41, + 159,233,103,240,78,135,57,231,25,57,44,169,65,16,169,17,61,183,80,135, + 128,37,21,244,87,155,173,254,180,13,194,127,244,238,186,221,200,43,61,2, + 188,253,13,136,144,132,220,87,63,224,183,66,161,16,205,205,205,56,142,67, + 94,94,158,86,50,73,146,200,244,139,200,68,122,13,226,145,84,209,60,184, + 108,181,177,3,126,86,13,87,143,1,160,243,127,31,83,112,240,255,209,94, + 251,55,77,25,72,68,244,28,184,223,212,246,59,7,14,122,86,219,136,76, + 13,136,76,23,136,172,190,209,223,246,185,44,210,131,74,199,243,136,76,191, + 216,241,53,22,73,54,5,92,54,91,248,177,89,71,241,59,229,0,180,191, + 250,38,48,209,124,79,163,43,99,215,223,130,214,15,212,195,245,53,131,254, + 104,40,20,162,161,161,161,251,112,90,36,232,118,164,128,139,95,83,83,83, + 247,82,93,34,169,160,128,203,118,215,215,192,187,109,240,131,10,45,182,156, + 44,191,172,30,116,177,229,136,72,15,35,18,116,3,81,192,197,223,94,244, + 244,139,226,226,98,54,110,220,152,243,175,163,100,23,5,92,46,88,214,96, + 110,103,149,194,241,37,102,141,74,137,207,243,129,184,46,151,83,95,95,79, + 81,81,17,99,198,140,73,67,113,178,117,235,86,134,13,27,70,125,253,192, + 231,68,69,226,213,19,112,241,92,151,76,50,227,47,219,205,77,226,51,132, + 195,185,237,237,237,228,231,231,107,117,251,52,10,4,2,58,23,39,73,229, + 52,86,78,209,111,148,136,136,244,145,235,87,85,215,33,74,145,28,147,235, + 111,58,34,233,146,7,112,218,175,119,207,116,29,9,121,228,146,143,0,123, + 158,199,240,217,107,51,92,73,98,26,43,167,0,233,125,30,187,90,155,34, + 50,184,60,128,21,75,107,51,93,71,98,94,52,95,146,242,60,54,180,195, + 127,3,176,202,3,239,54,194,250,54,216,214,1,173,225,161,204,133,30,24, + 149,15,19,134,193,222,94,152,86,4,71,250,147,51,194,241,197,196,119,209, + 99,47,96,6,48,29,216,15,51,189,160,28,143,167,4,128,80,168,9,168, + 5,214,1,111,3,47,3,43,129,15,147,89,68,250,221,48,118,231,223,247, + 0,133,14,188,211,198,39,222,153,14,155,55,67,107,43,248,124,48,110,28, + 239,238,251,18,76,42,128,86,23,146,54,122,125,12,48,23,152,9,76,5, + 246,0,138,128,22,96,19,176,10,88,1,44,3,116,229,8,145,100,209,33, + 74,128,45,29,102,240,198,163,13,176,186,255,137,191,221,130,33,8,182,193, + 166,54,248,15,112,111,120,212,215,254,195,224,212,17,102,164,227,216,76,45, + 171,181,7,48,31,56,3,56,184,223,45,122,166,28,149,132,111,147,128,99, + 163,182,120,21,120,8,88,140,121,243,205,49,243,6,190,190,27,141,93,230, + 255,243,53,173,176,125,59,239,242,68,239,239,191,241,6,60,6,140,30,13, + 151,122,97,238,8,240,237,100,177,159,23,59,7,41,102,63,224,135,192,5, + 3,124,223,15,76,9,223,206,4,110,5,238,1,174,199,124,232,16,145,68, + 236,218,75,117,189,211,6,223,219,12,211,223,129,27,106,6,15,183,157,89, + 221,102,246,49,253,29,179,207,119,18,216,87,220,246,7,254,0,108,4,174, + 101,160,112,139,205,193,225,125,108,12,239,115,255,132,171,203,184,16,38,216, + 246,93,3,63,217,10,219,7,25,137,90,93,13,63,216,2,147,223,134,170, + 166,33,246,228,174,0,86,51,112,184,13,228,130,240,207,93,49,148,70,69, + 36,202,174,217,131,235,116,225,154,106,88,244,113,106,246,255,192,118,115,91, + 176,27,92,53,26,242,82,53,121,53,15,184,14,184,52,69,251,255,114,248, + 118,51,112,57,48,88,143,37,203,36,99,181,151,47,110,232,125,63,166,233, + 52,139,129,121,9,54,124,45,230,195,197,252,4,247,35,178,235,218,245,122, + 112,43,154,225,152,247,82,23,110,209,22,125,108,218,138,92,25,32,169,78, + 0,254,71,234,194,45,218,165,225,182,78,72,67,91,73,180,199,30,131,111, + 147,116,247,147,120,184,69,204,11,239,79,68,134,98,215,10,184,219,234,224, + 220,245,176,174,159,107,128,165,202,186,118,211,230,109,177,45,13,21,155,203, + 128,39,128,125,146,184,207,193,236,19,110,243,178,52,182,153,160,214,116,95, + 83,239,26,224,236,36,239,243,236,240,126,69,36,94,3,31,162,204,214,197, + 124,227,93,113,37,91,158,199,53,213,230,22,49,228,149,99,110,36,179,33, + 115,35,48,26,248,126,6,107,136,193,239,235,160,46,153,31,42,194,150,212, + 15,48,144,229,40,224,202,228,183,7,225,253,62,142,25,213,36,34,177,218, + 181,122,112,57,239,102,178,163,7,117,25,166,150,44,213,233,194,181,213,131, + 111,55,20,63,217,54,192,55,82,61,40,68,131,78,68,226,181,107,14,50, + 201,73,63,2,190,151,233,34,162,124,15,248,24,51,24,34,139,220,187,13, + 218,83,184,250,92,107,171,233,197,1,236,83,18,126,112,42,112,74,234,218, + 132,240,254,167,2,233,28,157,43,146,219,236,238,193,61,214,152,233,10,6, + 22,87,109,115,128,95,164,170,146,4,252,2,83,91,22,41,112,224,150,20, + 159,123,187,185,203,76,22,239,150,174,215,32,203,94,107,145,44,103,111,192, + 109,235,130,203,183,100,186,138,129,93,190,197,212,56,168,221,48,19,128,179, + 213,173,152,26,179,196,154,182,193,231,185,37,170,186,26,86,181,68,61,240, + 153,212,182,151,246,118,68,236,96,111,192,93,179,53,166,235,126,101,76,93, + 151,169,113,80,215,3,217,188,198,230,238,152,26,179,195,164,53,19,211,210, + 206,248,181,123,69,221,219,47,45,109,166,175,29,17,59,216,25,112,207,7, + 204,68,235,108,247,192,118,83,235,128,62,3,92,152,174,106,18,112,33,217, + 210,187,240,109,171,73,75,59,195,183,71,175,123,90,158,150,54,211,215,142, + 136,29,236,12,184,164,206,57,75,177,157,214,154,13,35,38,99,149,29,181, + 22,123,146,182,66,242,78,149,56,89,124,116,64,68,0,27,3,110,85,11, + 60,149,138,149,67,82,228,169,230,29,206,231,68,28,4,156,150,238,106,18, + 112,26,166,230,204,106,114,189,105,105,167,57,20,253,167,147,174,171,113,228, + 248,85,63,68,210,204,190,128,123,40,7,14,77,238,168,223,154,207,79,123, + 25,137,203,124,205,141,165,233,57,140,23,28,85,17,117,47,93,43,255,235, + 10,3,34,241,176,47,224,30,205,226,169,1,3,233,183,230,207,167,189,140, + 196,101,190,230,141,83,210,115,61,187,15,246,93,23,117,239,217,180,180,153, + 190,118,68,236,96,87,192,189,218,2,91,115,108,197,123,48,53,191,25,61, + 42,239,48,96,124,166,170,73,192,120,76,237,25,52,181,200,92,207,45,149, + 74,75,97,223,97,81,15,44,79,109,123,105,111,71,196,14,118,5,220,139, + 59,27,145,152,229,94,108,136,186,147,29,35,18,135,38,195,181,183,186,230, + 98,165,169,82,88,8,223,43,220,97,181,148,85,192,223,83,215,38,132,247, + 191,42,197,109,136,216,197,174,128,91,149,238,213,227,147,232,205,142,168,59, + 153,31,172,49,116,25,174,125,222,72,115,251,81,138,122,113,63,27,5,95, + 217,13,206,31,181,195,55,126,153,154,246,210,182,127,17,251,216,21,112,31, + 228,240,58,125,239,69,247,224,166,100,172,140,196,101,73,237,223,44,131,178, + 178,228,239,183,223,43,9,128,89,233,63,85,203,169,253,2,93,73,64,36, + 126,118,5,220,150,142,193,183,201,86,155,163,231,195,101,226,66,157,201,146, + 69,181,23,22,166,185,193,171,128,7,146,188,207,7,194,251,21,145,120,217, + 21,112,219,115,120,242,237,246,232,30,220,64,189,132,92,144,69,181,183,244, + 55,191,48,213,206,1,150,36,105,95,75,194,251,19,145,161,176,235,114,57, + 57,56,128,178,91,123,116,239,115,216,128,155,101,191,44,170,253,205,49,192, + 24,8,97,230,26,94,178,57,254,125,252,105,79,28,102,174,153,0,0,32, + 0,73,68,65,84,152,85,50,248,118,189,204,7,86,147,216,165,132,126,132, + 206,187,137,36,198,174,128,203,35,119,67,174,32,191,231,159,5,208,222,158, + 193,90,18,80,80,176,147,111,14,249,42,230,253,136,231,74,237,30,224,172, + 82,56,177,4,254,178,221,92,78,103,103,87,28,24,61,218,140,196,156,59, + 2,124,67,61,200,241,75,160,18,248,33,112,65,28,63,119,15,102,241,106, + 77,234,22,73,148,93,1,87,234,205,238,43,8,236,76,233,136,238,127,182, + 183,111,5,198,100,174,150,4,152,218,251,113,195,88,88,90,15,205,33,104, + 141,99,189,200,60,7,138,195,33,211,28,130,138,60,168,233,132,159,141,129, + 159,244,211,214,221,31,247,190,239,113,32,20,53,164,191,192,129,159,248,96, + 141,151,73,107,38,226,219,86,67,177,39,68,147,235,165,177,180,220,76,20, + 159,154,103,166,27,44,107,96,167,246,25,172,103,247,54,240,69,224,114,96, + 46,48,19,115,209,210,61,128,34,160,5,216,132,25,254,191,2,88,6,196, + 114,133,9,17,137,133,93,1,55,54,63,119,3,110,220,110,64,228,141,120, + 19,185,26,112,166,118,163,177,50,69,35,42,247,12,127,173,28,209,231,91, + 141,7,246,125,172,95,147,74,224,228,102,192,23,245,96,51,67,89,177,63, + 182,231,249,207,240,109,103,70,132,111,34,146,12,118,5,220,164,97,185,59, + 23,110,242,8,32,114,216,108,45,48,61,131,197,36,98,45,0,35,230,188, + 147,225,58,68,100,87,103,215,40,202,169,233,30,22,158,68,7,4,163,238, + 188,150,177,50,18,151,203,181,139,136,77,236,10,184,195,252,153,174,96,232, + 14,137,94,102,44,151,23,213,205,229,218,69,196,38,118,5,220,193,69,48, + 38,7,143,186,142,201,51,181,119,123,17,216,152,169,106,18,176,17,83,187, + 136,72,230,217,21,112,0,167,14,207,116,5,241,235,183,230,191,166,189,140, + 196,229,98,205,34,98,43,251,2,238,140,210,76,87,16,191,126,107,190,55, + 237,101,36,46,23,107,22,17,91,217,23,112,83,139,224,115,197,153,174,34, + 118,159,43,54,53,247,241,26,240,72,186,171,73,192,35,104,128,137,136,100, + 19,251,2,14,224,235,41,88,69,62,85,118,90,235,77,105,43,35,113,185, + 84,171,136,236,10,236,12,184,195,253,112,118,14,28,170,60,187,212,212,58, + 160,103,129,63,164,171,154,4,252,1,141,158,20,145,108,99,103,192,1,92, + 53,6,202,82,120,101,231,68,149,121,77,141,131,250,33,240,81,170,171,73, + 192,71,152,26,69,68,178,139,189,1,55,202,11,215,141,205,116,21,3,187, + 110,172,169,113,80,31,3,223,72,117,53,9,248,6,166,70,17,145,236,98, + 111,192,1,156,156,197,83,6,226,170,109,57,112,101,170,42,73,192,149,152, + 218,68,68,178,143,221,1,103,149,107,129,91,50,93,68,148,91,72,236,122, + 103,34,34,169,165,128,203,41,151,146,29,163,21,111,194,212,34,34,146,189, + 20,112,57,231,251,225,219,174,218,190,136,72,108,6,94,184,49,153,87,95, + 206,164,29,159,199,138,102,248,209,71,176,46,77,151,204,158,88,0,215,238, + 14,51,147,57,249,252,38,224,77,224,183,192,62,73,220,239,206,188,3,124, + 27,120,50,77,237,137,136,36,102,215,235,193,205,44,134,103,38,195,130,221, + 82,223,214,130,221,76,91,73,13,183,136,39,129,3,128,155,83,176,239,29, + 221,28,110,75,225,38,34,185,99,215,11,56,128,60,7,126,58,6,86,76, + 78,205,132,240,179,75,205,190,127,58,198,180,149,50,157,192,101,152,240,185, + 59,5,251,191,59,188,239,203,194,109,137,136,228,142,28,188,182,76,18,237, + 51,12,110,25,7,151,85,192,95,182,195,163,13,176,186,109,104,251,218,127, + 24,156,58,2,206,42,133,177,249,201,173,115,80,171,129,11,129,171,129,249, + 192,25,192,193,67,220,215,171,192,67,192,98,96,83,82,170,19,17,201,132, + 93,59,224,34,198,230,195,37,229,230,182,161,29,94,157,14,175,188,7,239, + 124,4,235,27,224,227,22,104,233,50,219,22,121,97,183,34,216,179,24,62, + 81,10,7,151,193,81,187,195,152,255,101,246,57,0,38,144,126,25,190,237, + 5,204,0,166,3,251,1,19,129,114,192,23,222,54,8,212,2,235,128,183, + 129,151,129,149,192,135,233,44,88,68,36,101,156,198,202,41,110,166,139,16, + 251,140,152,243,78,166,75,16,145,93,156,2,78,100,16,10,107,145,220,148, + 7,48,107,73,69,166,235,232,165,106,94,13,16,103,93,142,3,14,208,22, + 130,150,240,215,78,23,66,225,252,246,56,102,192,199,48,7,138,28,24,230, + 1,23,112,99,204,119,143,67,213,185,213,166,174,95,142,36,47,63,143,151, + 94,122,137,182,182,222,231,236,246,216,99,15,198,143,31,143,219,189,95,55, + 124,43,196,28,30,28,6,228,227,56,94,112,33,148,231,16,242,116,209,49, + 202,71,193,182,77,120,218,155,120,254,249,23,99,127,222,64,99,229,20,0, + 134,207,94,27,215,207,37,34,215,218,116,156,161,13,246,105,88,158,174,105, + 24,34,146,108,121,0,207,223,149,101,139,229,174,48,95,98,170,43,15,19, + 92,175,183,192,127,3,240,74,16,62,114,97,83,11,212,117,65,100,186,91, + 1,102,5,255,113,94,40,47,132,67,138,224,72,63,76,43,50,65,56,216, + 32,193,17,30,120,56,92,215,11,207,15,184,217,166,77,155,216,180,41,122, + 112,198,20,96,38,112,36,230,92,216,4,204,185,176,200,27,174,75,239,115, + 97,207,1,13,64,250,130,35,33,55,12,178,160,181,7,40,116,224,157,54, + 62,241,206,116,216,188,25,90,91,193,231,131,113,227,120,119,223,151,96,82, + 1,180,186,16,74,86,81,99,128,185,152,215,125,42,176,7,174,91,132,249, + 228,179,9,88,133,249,37,91,6,108,77,86,163,34,146,101,204,32,147,96, + 42,135,178,39,96,176,186,10,61,240,90,43,92,185,5,94,111,133,230,174, + 129,223,36,219,129,45,93,230,246,82,59,220,223,8,197,94,152,86,8,191, + 24,11,7,20,66,235,78,222,97,189,241,190,70,251,0,191,7,14,5,134, + 51,240,140,12,7,168,8,223,14,195,140,130,108,4,94,2,190,137,153,96, + 157,197,230,141,28,248,123,141,93,102,116,234,53,173,176,125,59,239,242,68, + 239,239,191,241,6,60,6,140,30,13,151,122,97,238,8,240,237,100,230,202, + 139,131,125,10,217,15,115,233,158,11,6,248,190,31,243,129,99,10,112,38, + 112,43,112,15,112,61,230,195,133,136,216,36,55,231,193,57,64,75,8,46, + 223,2,159,121,23,158,9,152,55,211,120,122,0,33,204,207,60,19,48,251, + 184,124,139,217,103,194,89,239,195,172,52,178,22,56,30,40,37,190,151,217, + 19,254,153,227,195,251,184,137,158,145,143,57,34,132,9,182,125,215,192,79, + 182,194,246,237,59,223,190,186,26,126,176,5,38,191,13,85,77,67,236,201, + 93,129,153,46,49,80,184,13,228,130,240,207,93,49,148,70,69,36,139,245, + 157,38,224,1,74,204,249,161,180,112,128,166,24,194,41,82,151,23,120,184, + 209,44,183,245,254,16,231,172,245,103,209,199,240,207,102,179,172,214,233,195, + 161,43,198,186,0,243,36,92,224,88,76,175,96,223,228,213,197,165,192,41, + 152,235,174,61,29,213,86,22,26,155,132,169,18,95,220,208,251,126,76,75, + 198,45,6,230,37,216,240,181,192,254,152,30,180,136,216,160,111,192,109,233, + 128,207,174,129,146,52,117,238,154,66,240,175,189,97,204,32,147,163,163,235, + 170,239,130,64,210,78,216,244,120,191,13,190,188,1,70,122,99,175,11,48, + 129,51,31,184,11,115,178,47,217,246,5,30,7,190,130,121,51,207,82,123, + 236,1,155,210,61,57,252,126,224,236,36,237,107,30,230,79,226,156,36,237, + 79,68,50,169,111,192,117,2,13,93,230,150,46,177,172,2,213,69,122,234, + 10,132,122,194,51,230,166,62,15,252,17,211,189,76,149,130,112,27,65,224, + 175,41,108,39,1,173,173,105,110,240,26,146,23,110,17,103,3,239,3,87, + 37,121,191,34,146,110,185,113,14,206,11,108,238,72,127,187,155,59,98,200, + 172,233,192,31,72,109,184,69,120,195,109,77,79,67,91,113,250,125,29,212, + 213,37,127,191,75,234,7,248,198,81,164,238,42,231,87,134,247,47,34,185, + 44,251,3,206,9,255,103,193,134,193,182,76,190,5,27,76,219,59,29,120, + 242,48,48,34,61,245,64,184,173,135,211,216,94,12,58,93,184,182,58,53, + 251,254,201,182,1,190,145,234,65,33,26,116,34,146,235,178,63,224,10,28, + 184,108,51,212,164,241,144,105,68,77,151,105,187,192,161,255,148,187,29,24, + 100,30,88,74,140,13,183,157,5,238,221,6,127,26,40,132,146,160,181,213, + 244,226,122,245,228,166,98,6,222,164,210,41,225,118,68,36,87,101,119,192, + 121,128,151,131,240,224,32,195,204,83,233,193,237,166,134,62,175,212,52,226, + 31,146,158,76,23,132,107,200,176,2,7,110,73,241,185,183,155,187,204,100, + 241,110,115,82,219,94,218,219,17,145,84,200,238,128,235,196,204,167,106,205, + 224,176,248,86,215,212,208,185,99,13,95,4,138,50,80,80,68,81,184,134, + 12,255,47,92,211,54,248,60,183,68,85,87,195,170,150,168,7,62,147,218, + 246,210,222,142,136,164,66,118,7,92,99,23,252,171,57,211,85,152,26,26, + 163,15,145,142,0,78,204,84,53,81,78,36,189,231,255,250,154,180,102,98, + 90,218,25,191,118,175,168,123,251,165,165,205,244,181,35,34,169,144,125,1, + 23,125,36,106,125,59,124,208,62,224,166,105,243,65,59,108,42,137,122,96, + 47,204,114,79,153,54,5,83,75,230,248,182,213,164,165,157,225,219,107,163, + 238,149,167,165,205,244,181,35,34,169,144,125,1,151,31,149,112,85,77,153, + 171,99,71,79,69,79,44,63,45,99,101,244,117,82,70,91,47,246,164,96, + 194,125,63,74,156,12,12,50,18,145,156,150,125,1,23,189,168,241,115,129, + 204,213,177,163,231,162,15,149,30,147,177,50,250,58,50,163,173,55,185,233, + 152,255,7,205,161,232,95,213,218,1,183,75,174,116,181,35,34,169,144,125, + 1,23,93,209,218,116,175,140,177,19,111,127,20,117,39,155,134,143,239,159, + 209,214,27,75,211,115,24,47,56,42,250,218,128,233,90,249,95,87,24,16, + 201,101,217,29,112,245,233,57,252,21,147,143,162,71,10,102,211,185,153,49, + 25,109,125,227,148,15,211,210,206,7,251,174,139,186,247,108,90,218,76,95, + 59,34,146,10,217,23,112,217,42,234,194,5,67,188,56,116,74,56,78,97, + 102,11,152,90,100,174,231,150,74,165,165,176,239,176,168,7,150,167,182,189, + 180,183,35,34,169,160,128,139,85,113,207,63,61,89,20,112,30,79,203,224, + 27,165,82,171,107,46,86,154,42,133,133,240,189,66,104,143,158,135,184,10, + 248,123,234,218,132,240,254,87,165,184,13,17,73,165,190,87,19,200,180,232, + 163,146,187,231,193,71,177,92,106,32,13,198,247,244,82,186,66,235,129,9, + 153,171,37,74,87,215,186,204,22,16,185,162,247,246,174,212,172,71,249,179, + 81,61,109,244,186,162,247,47,73,237,114,93,191,76,225,190,69,36,29,178, + 175,7,23,61,26,252,128,76,174,20,178,131,79,238,22,117,231,213,140,149, + 209,87,150,244,50,190,89,6,101,101,201,223,111,36,220,250,248,15,240,139, + 228,183,7,225,253,254,39,69,251,22,145,116,201,190,128,139,94,18,235,24, + 127,230,234,216,209,17,209,83,22,158,206,88,25,125,61,147,233,2,122,20, + 166,251,124,224,85,192,3,73,222,231,3,232,90,112,34,118,200,238,128,59, + 190,100,224,237,210,237,248,232,55,239,191,101,172,140,190,30,207,116,1,61, + 90,50,113,62,240,28,96,73,146,246,181,4,93,205,91,196,30,217,23,112, + 209,70,229,193,65,89,112,152,242,160,34,83,75,183,58,224,133,76,85,19, + 229,5,224,227,76,23,209,227,205,49,176,229,0,216,116,0,252,122,220,208, + 246,241,167,61,205,62,34,183,152,204,7,126,52,180,246,186,253,40,188,31, + 17,177,69,246,13,50,137,86,226,129,19,74,224,245,22,200,212,5,5,28, + 76,13,197,209,159,5,2,64,37,112,24,131,92,13,53,133,220,112,13,141, + 192,238,253,111,18,115,64,196,96,236,255,98,223,214,3,156,85,10,39,150, + 152,43,49,220,210,186,243,43,14,140,30,109,70,98,206,29,1,190,161,126, + 230,250,37,230,245,248,33,241,93,198,232,30,224,122,52,169,91,196,62,217, + 29,112,14,112,102,41,220,86,7,141,25,154,244,93,226,49,53,244,153,252, + 182,24,184,156,204,173,230,223,24,174,97,0,55,140,133,165,245,208,28,130, + 214,56,94,187,60,167,39,204,155,67,80,145,7,53,157,240,179,49,240,147, + 173,125,183,191,123,135,30,164,199,129,80,212,167,145,2,7,126,226,131,53, + 94,38,173,153,136,111,91,13,197,158,16,77,174,151,198,210,114,51,81,124, + 106,158,153,110,176,172,97,231,181,237,51,216,33,235,183,49,151,16,186,28, + 152,11,204,196,172,58,179,7,230,242,66,45,192,38,204,192,156,21,192,50, + 160,159,231,36,34,86,200,238,128,115,129,73,195,224,210,10,184,58,67,111, + 68,151,86,152,26,220,29,187,144,155,129,159,0,191,201,64,81,132,219,222, + 220,235,145,198,202,20,93,225,96,207,240,215,202,190,97,222,120,96,140,1, + 63,169,4,78,110,6,124,81,15,54,51,148,85,97,98,123,158,255,12,223, + 118,102,4,153,190,220,144,136,164,78,118,7,28,64,75,8,190,89,14,43, + 155,225,233,52,95,27,238,216,98,211,118,75,200,244,228,250,248,45,112,2, + 112,114,122,235,226,177,112,219,61,70,204,121,39,205,53,136,136,100,183,236, + 30,100,18,209,30,130,255,55,192,121,166,84,250,127,187,155,182,119,234,66, + 32,142,243,83,9,251,95,184,77,17,17,217,153,220,8,56,23,24,150,129, + 193,28,195,156,24,6,183,108,5,206,99,199,195,133,169,177,57,220,150,206, + 27,137,136,12,166,111,192,101,98,180,98,44,109,102,107,93,0,188,129,57, + 76,153,202,85,69,86,133,219,120,35,133,109,136,136,216,163,239,57,184,177, + 121,240,194,62,233,27,253,238,134,219,28,76,116,93,29,46,92,87,13,127, + 107,76,110,45,255,55,28,46,31,109,174,42,30,107,93,221,86,1,199,3, + 191,3,206,74,110,93,252,5,248,22,80,147,228,253,138,136,216,171,239,59, + 184,215,129,241,249,25,40,101,16,59,214,181,116,2,220,181,13,126,186,21, + 154,186,122,47,210,28,15,15,80,226,133,159,142,129,175,140,130,166,68,166, + 35,212,0,95,192,12,2,249,21,48,28,24,234,74,251,93,152,169,0,223, + 197,204,213,18,17,145,120,100,255,40,202,129,52,133,224,130,145,112,82,9, + 60,180,29,158,104,130,231,3,16,235,197,7,242,128,195,253,102,50,242,25, + 165,102,190,87,66,225,22,237,30,224,97,204,202,24,167,1,199,0,5,49, + 254,108,59,102,125,201,71,48,243,220,118,50,65,90,68,68,6,148,187,1, + 7,102,114,240,8,47,92,184,27,156,61,18,182,119,194,107,101,240,108,7, + 188,185,1,214,53,64,99,187,217,118,120,1,76,40,129,3,119,131,153,227, + 225,160,143,96,68,8,252,158,158,125,37,213,118,204,225,202,187,129,145,192, + 81,192,113,192,52,96,18,80,26,181,221,7,192,235,152,121,91,255,1,234, + 49,171,165,136,136,200,80,57,141,149,83,50,181,8,150,36,145,230,193,137, + 136,244,166,128,19,17,145,148,200,244,7,239,60,0,255,37,109,132,66,33, + 66,161,16,93,93,93,184,174,139,219,103,105,170,212,112,28,135,174,59,204, + 114,73,121,95,107,196,235,245,226,241,120,240,120,204,161,195,80,40,68,103, + 103,39,29,29,29,116,117,117,129,235,166,108,198,64,222,31,43,0,232,252, + 146,25,173,232,152,2,241,122,189,228,231,231,147,151,151,215,93,23,128,27, + 10,225,70,125,77,150,182,223,155,235,224,13,251,230,192,135,41,29,192,241, + 120,204,87,199,33,24,12,18,8,6,9,6,131,73,251,127,87,30,94,18, + 171,118,246,218,164,236,79,117,168,142,116,215,225,1,134,97,86,34,45,10, + 255,59,85,154,194,117,148,100,248,245,200,182,58,50,41,15,192,179,126,125, + 70,103,124,55,133,215,3,44,218,218,119,2,179,7,83,100,33,169,159,10, + 215,140,9,184,210,29,86,190,79,247,20,243,54,246,1,160,96,115,236,147, + 199,253,128,63,201,31,74,34,11,163,237,149,212,189,198,79,117,244,166,58, + 122,27,172,142,76,93,239,67,50,207,12,50,73,83,111,109,80,131,212,145, + 174,95,84,39,71,94,143,104,169,124,109,178,229,13,66,117,244,166,58,122, + 203,150,58,36,123,228,198,82,93,34,34,34,113,202,237,105,2,89,34,150, + 126,150,62,93,138,136,164,151,2,46,65,129,240,45,232,56,184,244,14,178, + 200,125,159,235,154,115,100,25,168,79,68,100,87,53,228,128,27,172,215,146, + 85,61,22,191,31,66,33,104,111,135,174,174,164,237,214,197,132,219,121,126, + 63,1,191,31,159,223,15,142,131,19,254,30,174,75,48,16,192,31,8,112, + 95,32,128,143,44,123,93,68,50,100,160,247,15,253,125,208,243,254,145,97, + 217,82,71,34,134,20,112,221,189,22,204,11,16,125,141,230,150,240,253,172, + 233,177,28,124,48,188,242,138,249,247,215,191,14,183,223,158,244,38,130,192, + 175,239,187,15,95,69,5,254,112,200,225,186,4,2,1,130,53,53,124,119, + 246,236,164,183,41,217,47,242,230,144,43,111,218,233,168,215,197,252,189,4, + 28,135,224,14,223,243,97,70,2,239,202,31,4,29,192,117,93,156,240,17, + 161,93,189,142,68,13,185,7,183,128,158,160,3,88,4,92,130,121,97,252, + 192,125,9,151,150,4,159,253,44,60,253,180,233,189,121,60,112,195,13,38, + 124,22,46,76,74,79,46,242,92,151,1,243,22,44,96,113,85,21,254,242, + 114,124,126,63,193,64,128,34,215,101,254,130,5,44,11,111,183,171,254,209, + 238,138,162,255,54,252,144,213,111,218,221,161,19,190,159,138,15,167,209,193, + 22,240,251,89,224,247,155,35,43,209,2,1,22,133,143,120,236,138,65,23, + 9,21,200,108,184,100,75,29,201,48,228,128,91,132,249,131,168,193,92,130, + 115,14,176,156,44,234,185,1,4,131,176,117,43,140,25,99,66,174,184,24, + 110,189,21,22,47,134,166,166,164,52,225,11,183,115,95,109,45,243,78,56, + 129,197,85,85,4,131,65,8,4,56,255,132,19,184,175,182,22,127,48,216, + 171,151,107,189,73,147,224,226,139,225,7,63,232,121,108,243,102,184,249,102, + 184,237,54,104,107,75,126,155,103,157,5,183,220,2,227,198,245,60,246,183, + 191,193,69,23,65,77,77,90,167,194,68,31,186,14,98,62,0,17,12,226, + 115,221,172,123,195,118,49,231,143,155,125,62,230,98,126,159,147,125,56,61, + 186,141,121,37,37,80,86,198,162,165,75,113,125,189,255,42,156,96,144,5, + 231,158,11,117,117,44,105,106,202,218,215,44,21,162,67,37,34,19,225,146, + 45,117,36,203,144,166,9,248,129,114,96,79,160,44,252,88,228,80,229,132, + 240,247,50,26,114,115,230,152,55,181,119,223,133,195,14,131,134,6,211,131, + 139,244,218,60,201,155,29,209,61,136,36,16,96,73,77,13,243,103,205,34, + 248,225,135,204,159,53,139,37,53,53,248,3,129,244,252,145,58,142,185,37, + 186,77,34,188,94,248,241,143,225,253,247,77,184,181,183,67,109,45,108,223, + 110,130,231,150,91,96,219,54,243,129,35,89,60,30,248,203,95,224,207,127, + 54,109,212,215,195,199,31,155,15,55,255,247,127,230,3,206,172,89,80,88, + 152,188,54,7,225,210,211,83,185,165,178,146,121,21,21,52,251,124,125,14, + 201,101,131,32,152,224,169,168,224,150,202,74,2,126,63,129,36,191,153,69, + 218,152,63,122,52,139,170,170,88,82,85,133,175,188,28,95,84,192,249,124, + 62,124,229,229,44,249,199,63,88,84,85,197,252,209,163,179,246,53,75,182, + 254,66,37,194,77,99,192,103,75,29,201,52,228,30,156,131,73,199,29,159, + 180,211,207,99,105,117,232,161,176,108,153,249,196,254,241,199,80,94,14,7, + 28,0,47,189,4,187,239,14,159,249,140,9,188,36,138,132,28,129,0,75, + 170,171,153,55,107,22,75,92,215,244,220,82,253,139,225,56,224,243,245,28, + 238,9,4,204,109,71,209,135,132,2,1,19,0,201,236,213,56,14,124,233, + 75,240,179,159,153,251,247,222,11,107,215,194,235,175,195,136,17,176,255,254, + 240,157,239,64,73,9,172,90,101,254,63,172,77,112,41,33,175,23,254,248, + 71,56,243,76,243,124,30,120,0,158,124,210,4,235,184,113,112,242,201,230, + 246,196,19,166,174,171,175,78,252,121,238,68,228,48,92,19,80,235,56,184, + 197,197,248,43,42,88,88,89,201,188,89,179,184,47,203,122,36,145,32,158, + 87,92,204,194,202,74,115,78,189,184,152,218,186,58,138,92,151,18,18,63, + 180,218,221,70,73,9,139,42,43,41,159,56,17,128,64,77,13,243,231,204, + 193,13,4,8,58,14,254,138,10,150,44,95,78,121,121,57,65,191,63,107, + 95,179,84,113,82,249,193,51,14,217,82,71,178,216,53,77,96,191,253,224, + 197,23,205,225,72,48,111,224,181,181,48,124,56,156,116,18,140,30,13,255, + 254,119,74,154,142,14,185,229,225,199,82,126,14,193,113,160,168,200,4,87, + 85,149,9,174,57,115,250,134,151,227,152,109,150,47,55,95,103,205,50,223, + 111,105,73,94,200,141,28,217,19,110,55,221,4,223,255,126,223,109,158,122, + 10,86,172,48,31,58,126,240,3,184,240,194,196,218,252,254,247,97,254,124, + 168,174,134,171,174,130,187,238,234,253,253,123,238,129,115,207,53,231,92,47, + 187,12,94,125,21,30,126,56,177,54,119,34,8,212,56,14,231,249,124,4, + 74,74,240,71,70,214,2,148,151,19,8,159,95,202,134,55,236,200,97,195, + 128,223,111,254,127,248,253,230,247,213,239,231,162,138,10,252,77,77,220,23, + 12,82,17,158,226,50,84,65,48,109,148,149,225,43,51,199,123,2,53,53, + 204,63,225,4,22,213,212,152,129,88,197,197,124,55,234,124,156,207,239,199, + 87,94,14,101,101,4,154,155,241,55,55,103,207,105,143,20,200,150,67,127, + 217,82,71,50,229,254,74,38,145,79,28,51,102,192,234,213,61,225,22,17, + 10,193,150,45,166,215,80,85,149,218,82,232,57,7,153,242,65,37,209,225, + 246,223,255,66,71,199,135,140,30,109,122,115,30,79,207,225,72,199,49,247, + 125,62,19,240,29,29,31,242,223,255,154,159,43,42,74,222,33,203,11,46, + 48,61,228,55,222,128,223,252,198,60,86,84,4,143,63,14,63,252,161,185, + 191,114,165,249,16,2,112,212,81,48,109,90,98,109,254,232,71,230,235,237, + 183,247,13,55,128,230,102,88,180,8,234,234,204,243,63,243,204,196,218,219, + 9,23,179,38,226,60,159,143,224,232,209,220,87,85,197,146,202,74,46,254, + 234,87,193,113,88,184,116,41,11,178,232,80,101,228,176,225,130,138,10,22, + 46,93,10,142,195,197,95,253,42,75,42,43,185,175,170,138,224,232,209,204, + 243,249,104,102,232,111,124,145,222,219,2,191,159,69,225,54,34,225,182,184, + 186,154,162,64,128,50,159,143,43,203,202,248,107,248,168,75,109,109,45,181, + 181,181,0,44,90,186,148,5,41,56,100,42,187,142,220,14,184,240,112,124, + 206,58,203,244,12,118,12,55,215,53,111,238,95,255,122,246,172,183,153,12, + 209,225,246,220,115,240,242,203,139,217,127,255,247,40,46,134,138,10,24,63, + 30,38,76,232,185,141,31,111,30,47,46,134,253,247,127,143,151,95,94,204, + 115,207,37,55,228,206,62,219,124,125,240,65,216,180,201,252,187,179,211,244, + 14,70,141,50,247,189,94,88,179,198,252,123,202,20,115,56,57,17,37,37, + 176,97,3,252,243,159,59,223,238,115,159,51,95,243,243,19,107,111,16,193, + 240,97,201,37,149,149,76,152,56,145,138,138,10,22,45,90,196,197,11,22, + 128,207,199,194,229,203,153,87,92,156,241,55,236,94,135,38,151,47,7,159, + 143,139,23,44,96,209,162,69,84,84,84,48,97,226,68,150,84,86,226,22, + 23,19,76,240,119,35,8,224,247,227,250,124,184,174,203,188,57,115,88,88, + 83,131,27,12,226,248,124,156,95,81,193,146,170,42,28,159,15,55,16,96, + 238,172,89,204,155,51,199,92,209,36,124,232,61,27,62,16,72,110,202,237, + 67,148,145,112,187,247,222,190,1,230,186,230,13,245,216,99,225,95,255,234, + 9,67,27,68,206,185,253,231,63,240,252,243,247,114,234,169,15,225,245,30, + 72,113,241,241,60,242,136,233,185,236,168,184,216,220,188,222,127,113,226,137, + 111,241,232,163,46,255,253,239,249,28,117,148,121,109,250,59,111,23,143,72, + 136,53,54,154,175,91,182,152,199,242,243,97,234,84,115,72,114,210,36,248, + 240,67,83,95,113,113,114,6,126,188,255,190,57,191,122,220,113,240,208,67, + 61,251,244,122,77,207,109,250,116,211,171,132,164,14,46,26,136,207,239,199, + 31,190,117,139,244,164,179,232,13,59,18,60,248,124,189,6,31,69,6,126, + 244,58,188,154,172,54,131,65,220,64,128,64,32,64,145,207,199,252,138,10, + 22,87,85,153,26,130,65,230,207,154,197,175,234,234,184,164,188,220,140,68, + 22,73,80,110,7,220,177,199,154,209,115,174,219,55,188,188,94,248,244,167, + 205,57,57,176,39,220,34,150,47,135,39,159,124,157,115,207,93,67,125,253, + 115,140,31,127,32,30,207,63,40,45,221,155,146,18,167,207,57,56,175,215, + 197,227,121,31,143,7,234,235,159,227,228,147,15,100,233,210,215,89,190,124, + 26,179,102,37,94,79,100,218,69,73,137,249,58,105,18,148,150,154,195,146, + 143,61,6,151,94,218,179,109,36,132,58,58,18,111,119,194,4,248,212,167, + 76,47,110,220,184,222,189,180,96,208,180,177,255,254,230,190,109,191,3,57, + 40,232,56,4,139,139,153,95,86,198,146,29,194,109,113,77,13,117,193,96, + 247,185,58,145,68,229,110,192,29,112,128,121,83,219,241,176,36,152,79,234, + 167,156,210,19,110,54,154,51,7,254,243,159,105,60,246,216,42,78,61,245, + 8,58,59,161,179,243,120,154,155,119,214,131,155,68,94,222,191,24,57,242, + 8,30,125,116,95,78,56,97,26,71,29,149,156,122,238,184,195,12,230,248, + 252,231,225,206,59,205,224,158,250,122,51,144,165,171,171,231,255,211,244,233, + 144,151,103,206,151,62,251,108,98,109,182,181,153,32,61,234,40,243,255,122, + 160,79,253,203,150,153,175,105,24,33,22,12,247,80,2,129,64,207,136,180, + 200,7,176,240,252,200,108,152,19,233,131,158,209,180,126,127,119,248,71,46, + 152,27,8,4,8,38,218,171,223,177,77,159,15,127,69,5,223,245,251,205, + 57,183,29,194,205,13,6,241,251,253,56,126,63,62,159,79,189,56,73,88, + 110,158,131,155,54,13,222,122,171,239,106,36,142,99,222,72,47,186,200,244, + 26,108,21,12,154,16,59,242,72,56,252,240,243,121,226,137,51,233,234,250, + 44,205,205,112,218,105,230,156,211,142,183,211,78,51,63,211,213,245,89,158, + 120,226,76,14,63,252,124,142,60,210,60,150,140,55,146,135,31,54,111,152, + 7,31,108,38,115,131,9,160,47,125,201,132,31,192,216,177,166,199,13,240, + 246,219,240,191,255,37,214,230,21,87,244,124,221,99,15,243,239,29,67,236, + 134,27,204,249,190,250,122,184,241,198,196,218,27,132,207,117,113,154,155,153, + 55,123,54,235,215,173,163,166,166,134,5,11,22,176,112,209,34,8,6,185, + 120,206,28,150,52,55,227,207,240,40,74,7,179,36,214,146,230,102,46,14, + 143,186,93,184,104,17,11,22,44,160,166,166,134,245,235,214,49,111,246,108, + 156,230,102,51,50,56,1,145,32,117,130,65,28,199,97,201,242,229,44,171, + 170,194,241,251,113,131,65,230,205,154,197,189,81,231,228,46,14,79,23,112, + 28,7,39,139,62,16,72,110,202,157,128,139,188,113,157,114,10,188,246,154, + 9,178,29,223,204,28,199,12,40,185,235,174,180,124,90,223,81,100,5,139, + 200,45,101,7,196,34,67,252,3,1,56,226,8,152,62,125,62,171,87,79, + 166,185,217,76,112,223,184,17,214,175,239,185,109,220,104,30,111,110,134,213, + 171,39,51,125,250,124,142,56,194,252,124,178,166,10,84,87,195,183,191,109, + 254,61,103,142,105,243,192,3,205,255,171,247,222,51,83,8,94,127,29,246, + 218,203,156,55,59,227,140,196,219,188,231,30,243,65,166,188,220,156,103,123, + 234,169,158,231,114,232,161,230,220,220,37,151,152,199,150,47,79,105,143,222, + 1,138,129,37,193,32,190,234,106,206,155,53,139,121,179,103,179,240,142,59, + 192,117,185,248,220,115,89,84,83,67,113,150,172,106,227,3,138,131,65,22, + 213,212,112,241,185,231,130,235,178,240,142,59,152,55,123,54,231,205,154,133, + 175,186,154,37,193,32,197,12,125,52,112,36,72,23,5,2,102,133,18,160, + 188,188,156,242,242,114,112,28,62,63,119,46,191,168,171,163,46,24,164,197, + 239,103,254,232,209,44,126,242,73,252,21,21,224,186,44,56,247,92,179,116, + 87,22,76,171,144,220,148,59,135,40,93,23,190,248,69,115,248,171,191,209, + 146,94,47,204,158,109,122,18,25,24,80,210,61,175,200,231,99,158,227,176, + 36,124,72,42,101,115,158,34,33,7,166,39,87,85,181,23,213,213,166,55, + 22,10,245,126,254,161,144,121,188,186,26,252,254,189,56,242,200,228,134,91, + 196,221,119,155,158,212,213,87,155,222,218,155,111,246,254,126,40,100,66,118, + 207,61,77,187,223,248,70,79,111,111,40,182,109,51,243,223,38,79,134,79, + 124,194,156,147,141,126,62,174,107,206,193,173,95,15,95,254,178,233,93,206, + 157,107,6,186,164,128,15,168,112,93,150,5,2,108,104,105,225,59,62,31, + 193,72,15,164,182,54,107,230,192,65,239,21,120,168,173,133,64,192,76,244, + 14,4,184,179,166,134,61,67,161,238,137,222,137,240,129,105,163,174,142,96, + 109,45,193,168,193,43,62,191,159,75,202,203,241,149,149,225,248,253,44,89, + 190,220,132,27,16,172,171,131,186,58,243,154,37,88,195,64,98,249,255,176, + 43,157,181,181,241,245,72,232,114,57,33,250,62,225,148,174,72,126,202,41, + 230,252,77,116,192,69,194,237,136,35,224,249,231,123,30,75,163,232,73,179, + 243,42,42,88,184,100,9,243,230,205,99,73,77,141,57,196,146,234,144,115, + 28,186,7,138,4,2,253,143,40,141,76,2,143,108,147,236,112,3,83,199, + 207,126,102,174,222,240,227,31,155,81,148,121,225,95,177,214,86,243,70,58, + 99,134,233,89,77,159,110,214,5,221,190,29,150,46,29,122,155,175,189,102, + 14,65,222,122,43,204,156,105,6,176,56,142,57,124,237,245,154,246,54,110, + 52,191,51,211,166,153,16,254,202,87,76,47,50,201,34,243,32,139,128,150, + 240,225,202,64,77,13,223,93,176,32,43,14,77,238,40,250,80,229,188,217, + 179,185,102,209,34,156,230,102,202,93,151,10,146,115,120,167,187,141,166,38, + 230,207,158,205,194,202,74,51,137,27,88,252,215,191,118,159,103,243,133,71, + 115,6,154,155,9,214,213,113,241,236,217,44,105,106,74,249,107,54,208,210, + 84,96,223,170,30,177,176,237,245,72,232,114,57,1,160,46,252,152,131,25, + 122,188,158,222,147,157,147,170,191,43,0,120,189,112,204,49,61,225,150,102, + 59,134,219,226,170,42,240,251,89,92,85,101,150,236,74,71,200,69,6,11, + 68,238,247,39,150,109,146,81,139,227,192,223,255,110,110,21,21,102,32,129, + 235,246,132,12,152,15,35,207,60,99,190,222,119,159,25,228,112,231,157,67, + 239,121,59,142,233,13,230,229,153,117,46,243,243,205,243,173,169,233,217,230, + 91,223,130,235,174,51,33,120,247,221,166,71,151,130,144,131,158,55,117,127, + 32,192,247,102,207,102,25,100,205,161,201,29,69,22,11,95,82,83,195,220, + 217,179,205,223,109,146,127,87,35,109,44,14,47,99,215,223,98,203,193,96, + 176,207,98,203,169,126,205,92,204,155,118,127,111,234,185,186,184,112,34,108, + 124,61,146,114,185,156,10,210,116,185,156,200,39,136,232,249,76,231,157,151, + 248,104,188,4,116,47,86,91,94,206,226,39,159,52,139,200,250,253,4,125, + 62,238,125,242,73,206,11,175,75,73,32,144,218,229,134,98,9,134,116,244, + 108,163,219,136,14,152,104,157,157,166,55,254,200,35,112,244,209,102,181,145, + 242,114,184,246,218,161,133,92,100,251,206,206,158,73,230,59,186,245,86,243, + 253,27,111,52,31,136,30,120,192,156,7,92,191,62,190,182,98,208,253,55, + 16,30,133,152,205,151,203,233,111,137,185,100,175,194,19,221,198,125,193,32, + 129,230,102,22,28,127,124,86,92,46,167,191,55,245,92,125,51,79,6,219, + 94,143,132,46,151,179,227,5,79,239,163,231,130,167,41,241,218,107,102,158, + 85,228,250,110,79,62,105,14,111,101,104,18,119,100,80,201,92,224,87,139, + 22,153,147,229,181,181,102,130,177,235,18,8,6,249,197,162,69,204,157,61, + 155,229,100,239,155,92,70,212,215,195,241,199,195,203,47,155,41,31,63,253, + 169,233,125,69,6,170,164,194,194,133,230,247,230,166,155,204,33,210,39,159, + 132,243,207,79,201,224,147,72,168,65,246,255,63,143,4,114,42,235,237,110, + 195,117,241,55,55,115,95,248,156,95,180,76,93,240,52,250,77,61,151,223, + 204,147,197,166,215,99,72,1,23,253,199,48,144,164,255,130,122,60,230,16, + 211,117,215,237,208,80,230,87,40,241,1,151,156,119,158,57,121,238,56,61, + 151,122,119,93,130,169,238,185,229,178,214,86,51,210,114,203,22,211,131,139, + 44,227,149,74,183,223,110,206,211,221,120,163,233,65,164,120,100,101,46,73, + 71,189,209,65,151,169,26,250,211,253,166,158,161,246,179,141,45,175,71,66, + 151,203,73,171,254,38,116,67,70,195,45,250,80,84,48,24,196,173,173,237, + 245,186,184,68,141,86,35,247,222,240,210,102,236,88,211,147,186,247,222,244, + 180,247,171,95,153,65,54,145,249,121,146,118,217,248,183,144,235,111,230,201, + 102,195,235,145,59,211,4,178,84,119,111,118,144,160,205,198,63,232,172,114, + 239,189,233,235,141,59,142,194,77,100,23,160,128,75,2,133,87,146,164,171, + 55,174,53,41,69,118,9,185,179,146,137,136,136,72,28,212,131,19,145,180, + 72,117,191,121,160,253,235,8,203,174,75,1,39,34,41,21,189,70,107,100, + 106,81,50,149,135,191,246,183,0,155,7,24,134,89,93,166,40,252,111,217, + 117,56,141,149,83,116,66,66,68,68,146,110,196,156,119,50,218,190,122,112, + 34,18,147,76,191,89,137,196,43,15,244,139,43,146,42,13,203,247,1,224, + 201,142,107,50,92,73,98,78,200,191,42,211,37,136,196,77,163,40,69,68, + 196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41, + 224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17, + 17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164, + 128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68, + 68,172,164,11,158,138,100,136,199,227,33,63,63,159,188,60,243,103,216,213, + 213,213,125,11,133,66,25,174,78,36,247,41,224,68,50,32,63,63,159,234, + 234,106,30,125,244,81,86,173,90,133,227,56,236,185,231,158,236,187,239,190, + 28,114,200,33,236,190,251,238,180,183,183,227,186,110,166,75,21,201,89,10, + 56,145,52,203,203,203,227,165,151,94,226,246,219,111,103,219,182,109,221,143, + 175,91,183,142,103,158,121,6,143,199,195,81,71,29,197,121,231,157,71,89, + 89,153,66,78,100,136,116,14,78,36,141,60,30,15,171,86,173,70,110,188, + 251,0,0,16,149,73,68,65,84,98,225,194,133,189,194,45,90,40,20,226, + 217,103,159,229,218,107,175,101,203,150,45,56,142,147,230,42,69,236,160,128, + 19,73,19,199,113,104,104,104,224,241,199,31,167,174,174,110,208,237,55,108, + 216,192,202,149,43,105,104,108,36,47,47,175,251,92,157,136,196,70,127,49, + 34,105,226,56,14,91,183,110,229,165,151,94,138,105,251,221,119,223,157,231, + 159,127,158,186,186,58,38,79,158,204,132,9,19,152,54,109,26,174,235,210, + 217,217,169,129,40,34,131,80,192,137,164,81,100,148,228,96,134,15,31,78, + 97,97,33,27,55,110,100,243,230,205,172,92,185,146,178,178,50,142,60,242, + 72,38,79,158,204,212,169,83,41,47,43,163,189,163,131,206,206,206,52,84, + 46,146,123,20,112,34,105,226,186,46,227,198,141,99,230,204,153,172,88,177, + 98,192,237,10,10,10,24,53,106,20,31,127,252,113,175,240,170,171,171,227, + 145,71,30,193,231,243,49,102,204,24,14,56,240,64,62,115,244,209,236,191, + 255,126,116,117,133,232,232,232,208,128,20,145,40,10,56,145,52,113,93,151, + 146,146,18,46,188,240,66,14,57,228,16,30,124,240,65,54,108,216,208,103, + 59,159,207,71,75,75,11,141,141,141,189,30,119,28,135,242,242,114,70,140, + 24,65,32,16,224,201,39,158,224,159,79,61,197,184,113,123,48,107,214,241, + 28,115,204,49,20,21,21,209,209,209,161,195,151,34,40,224,68,210,174,176, + 176,144,79,127,250,211,28,118,216,97,108,218,180,137,213,171,87,179,101,203, + 22,66,161,16,101,101,229,28,120,224,129,4,131,1,94,125,245,85,254,253, + 239,127,211,208,208,0,152,128,43,42,42,226,221,119,223,197,239,247,51,126, + 252,120,134,13,27,70,99,99,35,119,220,113,7,119,223,125,55,179,102,205, + 98,214,172,89,140,27,55,142,206,206,78,245,232,100,151,230,52,86,78,113, + 71,204,121,39,211,117,136,88,169,97,249,62,0,60,217,113,77,191,223,119, + 28,167,251,6,166,151,23,9,37,143,199,67,94,94,30,239,190,251,46,207, + 63,255,60,47,190,248,18,224,178,126,253,250,94,251,40,42,42,98,220,184, + 113,180,181,181,177,113,227,70,0,14,56,224,0,46,184,224,2,198,143,31, + 159,148,209,151,39,228,95,133,222,39,36,215,168,7,39,146,65,209,129,182, + 163,200,128,148,137,19,39,50,121,242,100,78,58,233,36,190,252,229,47,247, + 217,174,165,165,133,150,150,22,62,250,232,163,238,199,66,161,16,183,223,126, + 59,77,77,77,124,237,107,95,99,252,248,241,248,253,126,138,138,138,8,133, + 66,234,217,201,46,65,1,39,146,229,66,161,16,93,93,93,44,91,182,172, + 207,247,70,143,30,205,161,135,30,202,134,13,27,104,109,109,101,251,246,237, + 236,190,251,238,120,60,30,62,252,240,67,0,126,254,243,159,51,113,226,68, + 14,62,248,96,14,62,248,96,38,77,154,68,97,81,17,93,26,125,41,150, + 83,192,137,100,57,143,199,195,150,45,31,241,212,83,79,117,63,54,108,216, + 48,74,75,75,153,58,117,42,243,231,207,199,235,245,242,198,27,111,176,105, + 211,38,134,15,31,206,91,111,189,197,186,117,235,8,4,2,128,89,6,108, + 221,186,117,60,241,248,227,204,58,225,4,78,60,241,68,202,202,202,112,28, + 71,3,82,196,90,10,56,145,44,231,245,122,185,243,206,59,105,109,109,5, + 204,66,205,101,101,101,120,189,94,214,174,93,203,194,133,11,249,228,39,63, + 201,113,199,29,199,161,135,30,74,87,87,23,211,166,77,227,232,163,143,230, + 237,183,223,230,229,151,95,230,131,15,62,0,32,216,210,194,234,213,171,169, + 222,186,149,99,102,204,224,160,131,14,194,231,243,209,214,214,150,201,167,40, + 146,18,10,56,145,44,86,88,88,200,3,15,60,192,170,85,111,116,63,86, + 80,80,128,227,56,212,215,215,227,186,46,31,125,244,17,27,54,108,224,240, + 195,15,239,30,80,82,82,82,194,180,105,211,216,111,191,253,152,57,115,38, + 245,245,245,188,255,254,251,108,216,176,129,23,94,120,129,150,150,22,126,247, + 187,223,177,231,158,123,114,234,169,167,114,212,81,71,105,194,184,88,71,1, + 39,146,197,92,215,229,133,23,94,232,30,20,82,80,80,192,25,103,156,65, + 94,94,30,143,62,250,40,123,237,181,23,171,86,173,162,164,164,132,134,134, + 134,238,171,15,68,150,243,242,122,189,84,84,84,80,81,81,193,222,123,239, + 77,71,71,7,39,157,116,18,111,175,94,205,131,15,61,196,154,53,107,88, + 179,102,13,111,189,245,22,23,93,116,145,14,87,138,85,20,112,34,89,172, + 173,173,141,235,174,187,142,245,235,215,243,224,131,15,50,121,242,100,206,58, + 235,44,158,127,254,5,252,254,98,214,173,91,199,200,145,35,169,173,173,37, + 24,12,226,56,78,159,17,146,145,251,94,175,23,175,215,203,158,123,238,201, + 132,9,19,248,236,177,199,242,220,115,207,177,106,213,42,86,175,94,205,99, + 143,61,198,41,167,156,18,211,82,98,34,185,64,1,39,146,229,92,215,101, + 194,132,9,92,126,249,229,184,174,75,91,91,27,173,173,45,212,214,214,208, + 212,212,212,189,93,71,71,71,92,251,44,40,40,224,216,99,143,229,196,19, + 79,100,205,154,53,92,125,245,213,0,156,122,234,169,58,92,41,86,208,229, + 114,68,114,128,235,186,116,116,116,208,213,213,69,99,99,35,111,188,177,170, + 87,184,1,67,234,121,117,117,117,209,210,210,194,228,201,147,249,249,207,127, + 206,189,247,222,75,109,109,45,30,143,222,26,36,247,233,183,88,36,199,116, + 117,117,81,94,94,198,232,209,163,187,31,59,240,192,3,217,109,183,221,134, + 60,129,187,163,163,131,189,247,222,155,242,242,114,54,109,218,164,128,19,43, + 232,183,88,36,135,184,174,203,136,17,35,56,255,252,243,57,252,240,195,187, + 31,63,238,184,227,40,47,47,31,114,192,121,60,30,62,248,224,3,26,26, + 26,152,60,121,178,6,155,136,21,20,112,34,57,38,50,66,50,250,156,155, + 215,235,77,40,148,10,11,11,249,203,95,254,194,231,62,247,57,74,75,75, + 21,112,98,5,5,156,72,142,138,62,231,230,245,122,135,188,159,72,239,237, + 237,183,223,230,204,51,207,164,189,189,61,25,229,137,100,156,2,78,36,7, + 69,122,113,17,145,171,17,12,69,81,81,17,15,60,240,0,39,158,120,34, + 62,159,79,11,49,139,53,52,77,64,36,7,181,181,181,113,230,153,103,114, + 209,69,23,177,121,243,102,138,138,138,134,20,76,121,121,121,172,94,189,154, + 215,95,127,157,11,47,188,80,115,224,196,42,10,56,145,28,100,46,142,106, + 86,45,153,56,113,226,78,47,187,179,51,157,157,157,236,181,215,94,220,118, + 219,109,248,253,126,245,222,196,42,58,68,41,146,163,34,97,148,232,245,221, + 66,161,16,197,197,197,10,55,177,142,2,78,68,52,106,82,172,164,128,19, + 17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,70,81,138,164,193, + 9,249,87,101,186,4,145,93,142,2,78,36,197,70,204,121,39,211,37,136, + 236,146,116,136,82,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74, + 10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68, + 68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43, + 41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19, + 17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172, + 164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78, + 68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177, + 146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56, + 17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196, + 74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224, + 68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17, + 43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128, + 19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68, + 172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2, + 78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17, + 177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10, + 56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68, + 196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41, + 224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17, + 17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164, + 128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68, + 68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146, + 2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17, + 17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74, + 10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68, + 68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43, + 41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19, + 17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172, + 164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78, + 68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177, + 146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56, + 17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196, + 74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224, + 68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17, + 43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128, + 19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68, + 172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2, + 78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17, + 177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10, + 56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68, + 196,74,10,56,17,17,177,82,30,64,195,242,125,50,93,135,136,136,72,82, + 57,142,227,184,153,46,66,68,68,36,217,116,136,82,68,68,172,164,128,19, + 17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172, + 164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78, + 68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177, + 146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56, + 17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196, + 74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224, + 68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17, + 43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128, + 19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68, + 172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2, + 78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17, + 177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10, + 56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68, + 196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41, + 224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17, + 17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164, + 128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68, + 68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146, + 2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17, + 17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74, + 10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68, + 68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43, + 41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19, + 17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172, + 164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78, + 68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177, + 146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56, + 17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196, + 74,10,56,17,17,177,146,211,88,57,197,205,116,17,34,34,34,241,26,49, + 231,157,157,126,63,15,96,248,236,181,49,237,172,177,114,10,67,218,126,237, + 31,99,219,126,202,151,0,152,246,233,152,54,231,245,23,204,215,130,83,31, + 139,105,251,246,71,79,54,245,196,89,255,77,175,158,19,211,246,151,29,124, + 191,217,255,63,183,197,182,255,227,70,1,240,231,218,31,196,180,253,23,202, + 111,0,96,207,47,86,199,180,253,134,63,141,6,224,31,93,215,198,180,253, + 241,222,31,1,48,252,244,24,95,159,135,135,246,251,112,217,99,107,98,218, + 254,166,147,247,5,224,213,210,133,49,109,127,240,246,139,1,88,182,253,138, + 152,182,159,91,250,75,0,222,185,109,66,76,219,239,243,245,245,67,218,190, + 228,177,25,49,109,223,116,242,74,179,253,47,134,199,182,253,149,141,102,251, + 234,239,197,182,253,232,91,0,184,255,230,138,152,182,63,231,210,26,0,206, + 216,35,182,231,251,208,166,245,67,218,254,178,211,99,123,125,110,122,120,104, + 175,207,253,167,199,246,250,156,243,176,121,125,78,105,142,237,245,249,123,177, + 121,125,190,180,248,75,49,109,255,199,249,230,125,112,248,236,216,126,255,27, + 43,205,239,255,85,79,255,61,166,237,175,57,246,20,179,255,56,255,126,23, + 221,116,123,76,219,47,184,236,107,0,172,254,217,119,98,218,126,255,159,252, + 6,128,215,142,190,51,166,237,15,250,247,69,0,44,107,127,48,166,237,231, + 22,156,57,232,54,58,68,41,34,34,86,82,192,137,136,136,149,20,112,34, + 34,98,37,5,156,136,136,88,73,1,39,34,34,86,82,192,137,136,136,149, + 20,112,34,34,98,37,5,156,136,136,88,73,1,39,34,34,86,210,82,93, + 34,34,146,147,6,91,170,75,61,56,17,17,177,82,30,192,51,121,191,141, + 105,227,99,58,191,13,196,191,246,96,126,193,175,98,218,190,163,253,187,0, + 188,53,227,250,152,182,63,112,229,15,1,216,182,112,175,152,182,31,117,241, + 135,0,252,252,19,39,197,180,253,143,223,125,28,128,85,101,127,136,105,251, + 169,117,23,2,112,203,235,177,173,93,249,189,105,102,237,202,151,223,56,55, + 166,237,167,127,106,41,0,79,207,14,196,180,253,177,149,126,32,245,107,75, + 198,187,61,199,198,182,22,31,79,155,181,248,226,93,203,174,228,244,216,246, + 223,244,176,217,255,183,43,143,136,105,251,223,206,126,14,136,127,109,213,84, + 239,63,222,215,191,178,241,216,152,182,159,61,252,105,0,254,111,124,108,107, + 21,254,109,163,89,171,112,120,140,175,127,99,248,245,175,108,244,197,88,79, + 208,236,63,206,231,27,239,90,145,55,188,60,248,26,135,0,63,152,254,224, + 144,234,153,244,149,143,99,218,254,131,187,118,3,224,47,53,223,138,105,251, + 179,42,126,103,234,137,243,245,143,247,245,41,137,241,249,54,133,159,239,109, + 107,190,22,211,246,95,223,215,252,158,157,60,179,60,166,237,31,91,81,59, + 232,54,234,193,137,136,136,149,20,112,34,34,98,37,5,156,136,136,88,73, + 1,39,34,34,86,82,192,137,136,136,149,20,112,34,34,98,37,5,156,136, + 136,88,73,1,39,34,34,86,82,192,137,136,136,149,180,22,165,136,136,228, + 164,193,214,162,204,75,83,29,34,34,214,25,236,13,86,50,43,15,226,95, + 187,47,222,181,206,126,240,68,108,107,169,221,112,162,89,75,237,219,127,141, + 113,237,190,207,135,215,238,139,115,45,184,214,211,159,141,105,251,194,135,63, + 3,196,191,118,92,188,245,148,156,30,219,254,155,30,78,207,254,255,240,128, + 19,211,246,23,158,109,58,255,7,93,119,92,76,219,191,118,249,63,135,84, + 79,188,219,199,187,22,104,188,251,191,121,120,108,191,255,151,54,134,255,94, + 226,252,255,117,110,117,108,251,95,58,218,236,191,233,107,79,199,180,125,201, + 237,102,13,202,120,215,18,140,251,253,33,206,181,52,79,248,247,29,49,109, + 255,228,209,95,5,160,234,194,95,196,180,253,172,63,92,9,192,43,49,62, + 223,67,194,207,247,149,17,177,213,115,72,195,87,99,218,78,50,71,231,224, + 68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17, + 43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128, + 19,17,17,43,41,224,68,68,196,74,90,139,82,68,100,136,180,84,87,118, + 115,28,199,81,192,137,136,136,117,116,136,82,68,68,172,164,128,19,17,17, + 43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128, + 19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68, + 172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2, + 78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10,56,17,17, + 177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68,196,74,10, + 56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41,224,68,68, + 196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17,17,43,41, + 224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164,128,19,17, + 17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68,68,172,164, + 128,19,17,17,43,41,224,68,68,196,74,10,56,17,17,177,146,2,78,68, + 68,172,164,128,19,17,17,43,253,127,43,5,4,16,30,18,73,219,0,0, + 0,0,73,69,78,68,174,66,96,130, From 429fad6f88fd980e2019eaec6ab00cd8f550ebf8 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 20 May 2017 13:57:16 +0100 Subject: [PATCH 46/85] Send Spectrum Settings help to its own page in the manual This commit provides a different help landing page (Settings) for preferences that are used outside the normal Ctrl+P preferences dialog - for example, 'spectrum settings' accessed from the track menu. This should work for any settings that are used on their own in that way, though spectrum settings is currently the only example. --- src/prefs/PrefsDialog.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index 6e4b9abb8..61db75d53 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -282,7 +282,7 @@ PrefsDialog::PrefsDialog else { // TODO: Look into getting rid of mUniquePage and instead // adding into mCategories, so there is just one page in mCategories. - // And then hiding the trrebook. + // And then hiding the treebook. // Unique page, don't show the factory const PrefsNode &node = factories[0]; @@ -408,7 +408,16 @@ void PrefsDialog::OnApply(wxCommandEvent & WXUNUSED(event)) void PrefsDialog::OnHelp(wxCommandEvent & WXUNUSED(event)) { - HelpSystem::ShowHelpDialog(this, GetCurrentPanel()->HelpPageName(), true); + wxString page = GetCurrentPanel()->HelpPageName(); + // Currently (May2017) Spectrum Settings is the only preferences + // we ever display in a dialog on its own without others. + // We do so when it is configuring spectrums for a track. + // It is called 'settings' rather than 'preferences' in this context. + // Because this happens, we want to visit a different help page. + // So we modify the page name in the case of a page on its own. + if( !mCategories) + page.Replace( "Preferences", "Settings" ); + HelpSystem::ShowHelpDialog(this, page, true); } void PrefsDialog::OnTreeKeyDown(wxTreeEvent & event) From 469120cebd6eb08725055063cedd52157585015b Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Mon, 15 May 2017 22:00:33 +0100 Subject: [PATCH 47/85] Enable help button for effects --- plug-ins/pluck.ny | 1 + src/effects/Amplify.cpp | 5 +++++ src/effects/Amplify.h | 1 + src/effects/Effect.cpp | 34 +++++++++++++++++++++++++++------ src/effects/Effect.h | 3 +++ src/effects/nyquist/Nyquist.cpp | 11 +++++++++++ src/effects/nyquist/Nyquist.h | 2 ++ src/prefs/PrefsDialog.cpp | 11 ++++++----- 8 files changed, 57 insertions(+), 11 deletions(-) diff --git a/plug-ins/pluck.ny b/plug-ins/pluck.ny index eb52daab7..831f83756 100644 --- a/plug-ins/pluck.ny +++ b/plug-ins/pluck.ny @@ -3,6 +3,7 @@ ;type generate ;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin" ;name "Pluck..." +;help "Pluck" ;preview linear ;action "Generating pluck sound..." ;info "MIDI values for C notes: 36, 48, 60 [middle C], 72, 84, 96." diff --git a/src/effects/Amplify.cpp b/src/effects/Amplify.cpp index 995b29c2a..eed486680 100644 --- a/src/effects/Amplify.cpp +++ b/src/effects/Amplify.cpp @@ -90,6 +90,11 @@ wxString EffectAmplify::GetDescription() return XO("Increases or decreases the volume of the audio you have selected"); } +wxString EffectAmplify::HelpPageName() +{ + return wxT("Amplify"); +} + // EffectIdentInterface implementation EffectType EffectAmplify::GetType() diff --git a/src/effects/Amplify.h b/src/effects/Amplify.h index 017b80e33..1f5d523ac 100644 --- a/src/effects/Amplify.h +++ b/src/effects/Amplify.h @@ -37,6 +37,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString HelpPageName() override; // EffectIdentInterface implementation diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 328cfa466..10167ede6 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -53,6 +53,7 @@ greater use in future. #include "../ondemand/ODManager.h" #include "TimeWarper.h" #include "nyquist/Nyquist.h" +#include "../widgets/HelpSystem.h" #if defined(__WXMAC__) #include @@ -1098,6 +1099,11 @@ wxString Effect::GetPreset(wxWindow * parent, const wxString & parms) return wxEmptyString; } +wxString Effect::HelpPageName() +{ + return wxEmptyString; +} + bool Effect::IsBatchProcessing() { return mIsBatch; @@ -2767,6 +2773,7 @@ BEGIN_EVENT_TABLE(EffectUIHost, wxDialogWrapper) EVT_CLOSE(EffectUIHost::OnClose) EVT_BUTTON(wxID_APPLY, EffectUIHost::OnApply) EVT_BUTTON(wxID_CANCEL, EffectUIHost::OnCancel) + EVT_BUTTON(wxID_HELP, EffectUIHost::OnHelp) EVT_BUTTON(eDebugID, EffectUIHost::OnDebug) EVT_BUTTON(kMenuID, EffectUIHost::OnMenu) EVT_CHECKBOX(kEnableID, EffectUIHost::OnEnable) @@ -3039,13 +3046,23 @@ bool EffectUIHost::Initialize() bar->SetSizerAndFit(bs.release()); } - // TODO: Add Help button - // long buttons = eApplyButton + eCloseButton + eHelpButton; - long buttons = eApplyButton + eCloseButton; - if (mEffect->mUIDebug) - { - buttons += eDebugButton; + long buttons; + if ( !(mEffect->HelpPageName().IsEmpty())) { + buttons = eApplyButton + eCloseButton + eHelpButton; + wxAcceleratorEntry entries[1]; +#if defined(__WXMAC__) + entries[0].Set(wxACCEL_CTRL, (int) '?', wxID_HELP); +#else + entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP); +#endif + wxAcceleratorTable accel(1, entries); + this->SetAcceleratorTable(accel); } + else { + buttons = eApplyButton + eCloseButton; + this->SetAcceleratorTable(wxNullAcceleratorTable); + } + buttonPanel->SetSizer(CreateStdButtonSizer(buttonPanel, buttons, bar).release()); vs->Add(buttonPanel, 0, wxEXPAND); @@ -3205,6 +3222,11 @@ void EffectUIHost::OnCancel(wxCommandEvent & evt) return; } +void EffectUIHost::OnHelp(wxCommandEvent & WXUNUSED(event)) +{ + HelpSystem::ShowHelpDialog(this, mEffect->HelpPageName(), true); +} + void EffectUIHost::OnDebug(wxCommandEvent & evt) { OnApply(evt); diff --git a/src/effects/Effect.h b/src/effects/Effect.h index df57c9dcb..c12bfbf5e 100644 --- a/src/effects/Effect.h +++ b/src/effects/Effect.h @@ -226,6 +226,8 @@ class AUDACITY_DLL_API Effect /* not final */ : public wxEvtHandler, virtual bool HasFactoryDefaults(); virtual wxString GetPreset(wxWindow * parent, const wxString & parms); + virtual wxString HelpPageName(); + virtual bool IsBatchProcessing(); virtual void SetBatchProcessing(bool start); @@ -593,6 +595,7 @@ private: void OnApply(wxCommandEvent & evt); void DoCancel(); void OnCancel(wxCommandEvent & evt); + void OnHelp(wxCommandEvent & evt); void OnDebug(wxCommandEvent & evt); void OnMenu(wxCommandEvent & evt); void OnEnable(wxCommandEvent & evt); diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index efe188045..146553286 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -212,6 +212,11 @@ wxString NyquistEffect::GetDescription() return mCopyright; } +wxString NyquistEffect::HelpPageName() +{ + return mHelpFile; +} + // EffectIdentInterface implementation EffectType NyquistEffect::GetType() @@ -1607,6 +1612,11 @@ void NyquistEffect::Parse(const wxString &line) return; } + if (len >= 2 && tokens[0] == wxT("help")) { + mHelpFile = UnQuote(tokens[1]); + return; + } + if (len >= 6 && tokens[0] == wxT("control")) { NyqControl ctrl; @@ -1719,6 +1729,7 @@ bool NyquistEffect::ParseProgram(wxInputStream & stream) mControls.Clear(); mCategories.Clear(); mIsSpectral = false; + mHelpFile = wxEmptyString; // If not wxEmptyString, must be a valid HTML help file. mFoundType = false; while (!stream.Eof() && stream.IsOk()) diff --git a/src/effects/nyquist/Nyquist.h b/src/effects/nyquist/Nyquist.h index 6db9e0b04..0e2e41386 100644 --- a/src/effects/nyquist/Nyquist.h +++ b/src/effects/nyquist/Nyquist.h @@ -79,6 +79,7 @@ public: wxString GetVendor() override; wxString GetVersion() override; wxString GetDescription() override; + wxString HelpPageName() override; // EffectIdentInterface implementation @@ -194,6 +195,7 @@ private: wxString mInfo; wxString mAuthor; wxString mCopyright; + wxString mHelpFile; EffectType mType; bool mEnablePreview; diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index 61db75d53..f874c39e7 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -118,19 +118,20 @@ int wxTreebookExt::SetSelection(size_t n) wxWindow *const applyButton = wxWindow::FindWindowById(wxID_APPLY, GetParent()); if (helpButton) { -#if defined(__WXMAC__) - // We don't appear to have accelerators on wxMac -#else if (showHelp) { wxAcceleratorEntry entries[1]; - entries[0].Set(wxACCEL_ALT, (int) 'H', wxID_HELP); +#if defined(__WXMAC__) + entries[0].Set(wxACCEL_CTRL, (int) '?', wxID_HELP); +#else + entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP); +#endif wxAcceleratorTable accel(1, entries); this->SetAcceleratorTable(accel); } else { this->SetAcceleratorTable(wxNullAcceleratorTable); } -#endif + const bool changed = helpButton->Show(showHelp); if (changed) GetParent()->Layout(); From 1dd6b848c28c13a76d672bd1df00d5bb6f97bcec Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Fri, 19 May 2017 18:20:05 +0100 Subject: [PATCH 48/85] Enable Help button for Nyquist effects --- plug-ins/pluck.ny | 2 +- src/FileNames.h | 2 +- src/ModuleManager.h | 2 ++ src/PluginManager.cpp | 4 +++- src/effects/Amplify.cpp | 2 +- src/effects/Amplify.h | 2 +- src/effects/Effect.cpp | 28 +++++++++++++++++++++------- src/effects/Effect.h | 5 ++++- src/effects/nyquist/Nyquist.cpp | 21 +++++++++++++++++++-- src/effects/nyquist/Nyquist.h | 5 ++++- src/widgets/HelpSystem.cpp | 5 +++-- src/widgets/HelpSystem.h | 5 ++++- 12 files changed, 64 insertions(+), 19 deletions(-) diff --git a/plug-ins/pluck.ny b/plug-ins/pluck.ny index 831f83756..7555e999f 100644 --- a/plug-ins/pluck.ny +++ b/plug-ins/pluck.ny @@ -3,7 +3,7 @@ ;type generate ;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin" ;name "Pluck..." -;help "Pluck" +;manpage "Pluck" ;preview linear ;action "Generating pluck sound..." ;info "MIDI values for C notes: 36, 48, 60 [middle C], 72, 84, 96." diff --git a/src/FileNames.h b/src/FileNames.h index bff19e1e8..0d46fa633 100644 --- a/src/FileNames.h +++ b/src/FileNames.h @@ -53,7 +53,7 @@ public: * This returns the string path to where the user may have put plug-ins * if they don't have system admin rights. Under default settings, it's * /Plug-Ins/ */ - static wxString PlugInDir(); + static wxString PlugInDir(); // Windows and Mac only static wxString ThemeDir(); static wxString ThemeComponentsDir(); static wxString ThemeCachePng(); diff --git a/src/ModuleManager.h b/src/ModuleManager.h index fd7629ccb..9db52c5b5 100644 --- a/src/ModuleManager.h +++ b/src/ModuleManager.h @@ -95,7 +95,9 @@ public: // PluginManager use bool DiscoverProviders(); + // Seems we don't currently use FindAllPlugins void FindAllPlugins(PluginIDList & providers, wxArrayString & paths); + wxArrayString FindPluginsForProvider(const PluginID & provider, const wxString & path); bool RegisterPlugin(const PluginID & provider, const wxString & path); diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp index 2b2050f7a..b1237963c 100644 --- a/src/PluginManager.cpp +++ b/src/PluginManager.cpp @@ -1437,11 +1437,13 @@ void PluginManager::FindFilesInPathList(const wxString & pattern, wxArrayString paths; - // Add the "per-user" plug-ins directory + // Add the "per-user" plug-ins directory Windows / Mac +#if defined(__WXMAC__) || defined(__WXMSW__) { const wxFileName &ff = FileNames::PlugInDir(); paths.Add(ff.GetFullPath()); } +#endif // Add the "Audacity" plug-ins directory wxFileName ff = PlatformCompatibility::GetExecutablePath(); diff --git a/src/effects/Amplify.cpp b/src/effects/Amplify.cpp index eed486680..eddb135f3 100644 --- a/src/effects/Amplify.cpp +++ b/src/effects/Amplify.cpp @@ -90,7 +90,7 @@ wxString EffectAmplify::GetDescription() return XO("Increases or decreases the volume of the audio you have selected"); } -wxString EffectAmplify::HelpPageName() +wxString EffectAmplify::ManualPage() { return wxT("Amplify"); } diff --git a/src/effects/Amplify.h b/src/effects/Amplify.h index 1f5d523ac..bb0c8b71d 100644 --- a/src/effects/Amplify.h +++ b/src/effects/Amplify.h @@ -37,7 +37,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; - wxString HelpPageName() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 10167ede6..5baf54e80 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -1099,7 +1099,12 @@ wxString Effect::GetPreset(wxWindow * parent, const wxString & parms) return wxEmptyString; } -wxString Effect::HelpPageName() +wxString Effect::ManualPage() +{ + return wxEmptyString; +} + +wxString Effect::HelpPage() { return wxEmptyString; } @@ -3047,7 +3052,11 @@ bool EffectUIHost::Initialize() } long buttons; - if ( !(mEffect->HelpPageName().IsEmpty())) { + if ( mEffect->ManualPage().IsEmpty() && mEffect->HelpPage().IsEmpty()) { + buttons = eApplyButton + eCloseButton; + this->SetAcceleratorTable(wxNullAcceleratorTable); + } + else { buttons = eApplyButton + eCloseButton + eHelpButton; wxAcceleratorEntry entries[1]; #if defined(__WXMAC__) @@ -3058,10 +3067,6 @@ bool EffectUIHost::Initialize() wxAcceleratorTable accel(1, entries); this->SetAcceleratorTable(accel); } - else { - buttons = eApplyButton + eCloseButton; - this->SetAcceleratorTable(wxNullAcceleratorTable); - } buttonPanel->SetSizer(CreateStdButtonSizer(buttonPanel, buttons, bar).release()); @@ -3224,7 +3229,16 @@ void EffectUIHost::OnCancel(wxCommandEvent & evt) void EffectUIHost::OnHelp(wxCommandEvent & WXUNUSED(event)) { - HelpSystem::ShowHelpDialog(this, mEffect->HelpPageName(), true); + if (mEffect->GetFamily().IsSameAs(NYQUISTEFFECTS_FAMILY) && (mEffect->ManualPage().IsEmpty())) { + // Old ShowHelpDialog required when there is no on-line manual. + // Always use default web browser to allow full-featured HTML pages. + HelpSystem::ShowHelpDialog(FindWindow(wxID_HELP), mEffect->HelpPage(), wxEmptyString, true, true); + } + else { + // otherwise use the new ShowHelpDialog + wxLogDebug(mEffect->ManualPage()); + HelpSystem::ShowHelpDialog(FindWindow(wxID_HELP), mEffect->ManualPage(), true); + } } void EffectUIHost::OnDebug(wxCommandEvent & evt) diff --git a/src/effects/Effect.h b/src/effects/Effect.h index c12bfbf5e..720322881 100644 --- a/src/effects/Effect.h +++ b/src/effects/Effect.h @@ -226,7 +226,10 @@ class AUDACITY_DLL_API Effect /* not final */ : public wxEvtHandler, virtual bool HasFactoryDefaults(); virtual wxString GetPreset(wxWindow * parent, const wxString & parms); - virtual wxString HelpPageName(); + // Name of page in the Audacity alpha manual + virtual wxString ManualPage(); + // Fully qualified local help file name + virtual wxString HelpPage(); virtual bool IsBatchProcessing(); virtual void SetBatchProcessing(bool start); diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 146553286..6f2f96107 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -212,8 +212,15 @@ wxString NyquistEffect::GetDescription() return mCopyright; } -wxString NyquistEffect::HelpPageName() +wxString NyquistEffect::ManualPage() { + return mManPage; +} + +wxString NyquistEffect::HelpPage() +{ + // TODO: Get the full path for the help page + // Return empty string and give debug info if it does not exist return mHelpFile; } @@ -1612,7 +1619,16 @@ void NyquistEffect::Parse(const wxString &line) return; } - if (len >= 2 && tokens[0] == wxT("help")) { + // TODO: Document. + // Page name in Audacity development manual + if (len >= 2 && tokens[0] == wxT("manpage")) { + mManPage = UnQuote(tokens[1]); + return; + } + + // TODO: Document. + // Local Help file + if (len >= 2 && tokens[0] == wxT("helpfile")) { mHelpFile = UnQuote(tokens[1]); return; } @@ -1729,6 +1745,7 @@ bool NyquistEffect::ParseProgram(wxInputStream & stream) mControls.Clear(); mCategories.Clear(); mIsSpectral = false; + mManPage = wxEmptyString; // If not wxEmptyString, must be a page in the Audacity manual. mHelpFile = wxEmptyString; // If not wxEmptyString, must be a valid HTML help file. mFoundType = false; diff --git a/src/effects/nyquist/Nyquist.h b/src/effects/nyquist/Nyquist.h index 0e2e41386..90071d673 100644 --- a/src/effects/nyquist/Nyquist.h +++ b/src/effects/nyquist/Nyquist.h @@ -79,7 +79,9 @@ public: wxString GetVendor() override; wxString GetVersion() override; wxString GetDescription() override; - wxString HelpPageName() override; + + wxString ManualPage() override; + wxString HelpPage() override; // EffectIdentInterface implementation @@ -195,6 +197,7 @@ private: wxString mInfo; wxString mAuthor; wxString mCopyright; + wxString mManPage; // ONLY use if a help page exists in the manual. wxString mHelpFile; EffectType mType; diff --git a/src/widgets/HelpSystem.cpp b/src/widgets/HelpSystem.cpp index e68cee6de..d87d29063 100644 --- a/src/widgets/HelpSystem.cpp +++ b/src/widgets/HelpSystem.cpp @@ -200,7 +200,8 @@ void HelpSystem::ShowHtmlText(wxWindow *pParent, void HelpSystem::ShowHelpDialog(wxWindow *parent, const wxString &localFileName, const wxString &remoteURL, - bool bModal) + bool bModal, + bool alwaysDefaultBrowser) { wxASSERT(parent); // to justify safenew AudacityProject * pProj = GetActiveProject(); @@ -250,7 +251,7 @@ void HelpSystem::ShowHelpDialog(wxWindow *parent, Text.Replace( wxT("*URL*"), remoteURL ); ShowHtmlText( parent, _("Help on the Internet"), Text, false, bModal ); } - else if( HelpMode == wxT("Local") ) + else if( HelpMode == wxT("Local") || alwaysDefaultBrowser) { // Local file, External browser OpenInDefaultBrowser( wxString(wxT("file:"))+localFileName ); diff --git a/src/widgets/HelpSystem.h b/src/widgets/HelpSystem.h index 9e5b1a4c2..04c447863 100644 --- a/src/widgets/HelpSystem.h +++ b/src/widgets/HelpSystem.h @@ -57,10 +57,13 @@ public: /// file names containing a '#' are not (on any platform). /// @param bModal Whether the resulting dialogue should be modal or not. /// Default is modeless dialogue + /// @param alwaysDefaultBrowser Force use of default web browser. + /// Default allows built in browser for local files. static void ShowHelpDialog(wxWindow *parent, const wxString &localFileName, const wxString &remoteURL, - bool bModal = false); + bool bModal = false, + bool alwaysDefaultBrowser = false); /// Displays a page from the Audacity manual in your browser, if /// it's available locally, OR else links to the internet. From fd3d41e82f82f887e57dfd283c5e43e3800762d2 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Fri, 19 May 2017 20:43:55 +0100 Subject: [PATCH 49/85] Add help pages for shipped Nyquist effects --- plug-ins/SilenceMarker.ny | 1 + plug-ins/SoundFinder.ny | 1 + plug-ins/SpectralEditParametricEQ.ny | 1 + plug-ins/SpectralEditShelves.ny | 1 + plug-ins/StudioFadeOut.ny | 1 + plug-ins/adjustable-fade.ny | 1 + plug-ins/beat.ny | 1 + plug-ins/clipfix.ny | 1 + plug-ins/crossfadeclips.ny | 1 + plug-ins/crossfadetracks.ny | 1 + plug-ins/delay.ny | 1 + plug-ins/equalabel.ny | 1 + plug-ins/highpass.ny | 1 + plug-ins/limiter.ny | 1 + plug-ins/lowpass.ny | 1 + plug-ins/notch.ny | 1 + plug-ins/rhythmtrack.ny | 1 + plug-ins/rissetdrum.ny | 1 + plug-ins/sample-data-export.ny | 1 + plug-ins/sample-data-import.ny | 1 + plug-ins/tremolo.ny | 1 + plug-ins/vocalrediso.ny | 1 + plug-ins/vocalremover.ny | 1 + plug-ins/vocoder.ny | 1 + src/effects/Effect.cpp | 2 +- src/prefs/PrefsDialog.cpp | 2 +- 26 files changed, 26 insertions(+), 2 deletions(-) diff --git a/plug-ins/SilenceMarker.ny b/plug-ins/SilenceMarker.ny index 5146bfacb..c60f8b81f 100644 --- a/plug-ins/SilenceMarker.ny +++ b/plug-ins/SilenceMarker.ny @@ -3,6 +3,7 @@ ;type analyze ;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin" ;name "Silence Finder..." +;manpage "Silence_Finder_and_Sound_Finder#silence" ;action "Finding silence..." ;info "Adds point labels in areas of silence according to the specified\nlevel and duration of silence. If too many silences are detected,\nincrease the silence level and duration; if too few are detected,\nreduce the level and duration." ;author "Alex S. Brown" diff --git a/plug-ins/SoundFinder.ny b/plug-ins/SoundFinder.ny index 67688769a..409b65ff2 100644 --- a/plug-ins/SoundFinder.ny +++ b/plug-ins/SoundFinder.ny @@ -3,6 +3,7 @@ ;type analyze ;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin" ;name "Sound Finder..." +;manpage "Silence_Finder_and_Sound_Finder#sound" ;action "Finding sound..." ;info "Adds region labels for areas of sound according to the specified level\nand duration of surrounding silence. If too many labels are produced,\nincrease the silence level and duration; if too few are produced,\nreduce the level and duration." ;author "Jeremy R. Brown" diff --git a/plug-ins/SpectralEditParametricEQ.ny b/plug-ins/SpectralEditParametricEQ.ny index 5b642c06f..8d7d3a35d 100644 --- a/plug-ins/SpectralEditParametricEQ.ny +++ b/plug-ins/SpectralEditParametricEQ.ny @@ -3,6 +3,7 @@ ;type process spectral ;preview linear ;name "Spectral edit parametric EQ..." +;manpage "Spectral_edit_parametric_EQ" ;action "Filtering..." ;author "Paul Licameli" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/SpectralEditShelves.ny b/plug-ins/SpectralEditShelves.ny index 47a04ecb9..cde754cfa 100644 --- a/plug-ins/SpectralEditShelves.ny +++ b/plug-ins/SpectralEditShelves.ny @@ -3,6 +3,7 @@ ;type process spectral ;preview linear ;name "Spectral edit shelves..." +;manpage "Spectral_edit_shelves" ;action "Filtering..." ;author "Paul Licameli" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/StudioFadeOut.ny b/plug-ins/StudioFadeOut.ny index 352a457a7..df28d249e 100644 --- a/plug-ins/StudioFadeOut.ny +++ b/plug-ins/StudioFadeOut.ny @@ -3,6 +3,7 @@ ;type process ;categories "http://lv2plug.in/ns/lv2core#MixerPlugin" ;name "Studio Fade Out" +;manpage "Fades#studio_fadeout" ;action "Applying Fade..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/adjustable-fade.ny b/plug-ins/adjustable-fade.ny index 3dc24bdea..fc9d99295 100644 --- a/plug-ins/adjustable-fade.ny +++ b/plug-ins/adjustable-fade.ny @@ -5,6 +5,7 @@ ;preview selection ;categories "http://lv2plug.in/ns/lv2core#MixerPlugin" ;name "Adjustable Fade..." +;manpage "Adjustable_Fade" ;action "Applying Fade..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/beat.ny b/plug-ins/beat.ny index 8f2d020b0..63756fdb0 100644 --- a/plug-ins/beat.ny +++ b/plug-ins/beat.ny @@ -3,6 +3,7 @@ ;type analyze ;categories "http://audacityteam.org/namespace#OnsetDetector" ;name "Beat Finder..." +;manpage "Beat_Finder" ;action "Finding beats..." ;author "Audacity" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/clipfix.ny b/plug-ins/clipfix.ny index 2f1ec93a2..a341c0b70 100644 --- a/plug-ins/clipfix.ny +++ b/plug-ins/clipfix.ny @@ -3,6 +3,7 @@ ;type process ;preview enabled ;name "Clip Fix..." +;manpage "Clip_Fix" ;action "Reconstructing clips..." ;author "Benjamin Schwartz and Steve Daulton" ;copyright "Licensing confirmed under terms of the GNU General Public License version 2" diff --git a/plug-ins/crossfadeclips.ny b/plug-ins/crossfadeclips.ny index 6548f0e7d..f0c82bfa0 100644 --- a/plug-ins/crossfadeclips.ny +++ b/plug-ins/crossfadeclips.ny @@ -4,6 +4,7 @@ ;mergeclips 1 ;restoresplits 0 ;name "Crossfade Clips" +;manpage "Crossfade_Clips" ;action "Crossfading..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/crossfadetracks.ny b/plug-ins/crossfadetracks.ny index f3e9bb289..4e7e33630 100644 --- a/plug-ins/crossfadetracks.ny +++ b/plug-ins/crossfadetracks.ny @@ -2,6 +2,7 @@ ;version 4 ;type process ;name "Crossfade Tracks..." +;manpage "Crossfade_Tracks" ;action "Crossfading..." ;preview selection ;author "Steve Daulton" diff --git a/plug-ins/delay.ny b/plug-ins/delay.ny index 2a092c470..a655ba5fd 100644 --- a/plug-ins/delay.ny +++ b/plug-ins/delay.ny @@ -4,6 +4,7 @@ ;preview linear ;categories "http://lv2plug.in/ns/lv2core#DelayPlugin" ;name "Delay..." +;manpage "Delay" ;action "Applying Delay Effect..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/equalabel.ny b/plug-ins/equalabel.ny index 979568a47..dcc67a259 100644 --- a/plug-ins/equalabel.ny +++ b/plug-ins/equalabel.ny @@ -2,6 +2,7 @@ ;version 4 ;type analyze ;name "Regular Interval Labels..." +;manpage "Regular_Interval_Labels" ;action "Adding equally-spaced labels to the label track..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/highpass.ny b/plug-ins/highpass.ny index 696701f64..c613f9489 100644 --- a/plug-ins/highpass.ny +++ b/plug-ins/highpass.ny @@ -3,6 +3,7 @@ ;type process ;preview linear ;name "High Pass Filter..." +;manpage "High_Pass_Filter" ;action "Performing High Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/limiter.ny b/plug-ins/limiter.ny index a9d6e5ee2..6d74ac5d6 100644 --- a/plug-ins/limiter.ny +++ b/plug-ins/limiter.ny @@ -3,6 +3,7 @@ ;type process ;categories "http://lv2plug.in/ns/lv2core/#DynamicsPlugin" ;name "Limiter..." +;manpage "Limiter" ;action "Limiting..." ;preview enabled ;author "Steve Daulton" diff --git a/plug-ins/lowpass.ny b/plug-ins/lowpass.ny index 7cb69a76b..9ad9431c4 100644 --- a/plug-ins/lowpass.ny +++ b/plug-ins/lowpass.ny @@ -3,6 +3,7 @@ ;type process ;preview linear ;name "Low Pass Filter..." +;manpage "Low_Pass_Filter" ;action "Performing Low Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/notch.ny b/plug-ins/notch.ny index 354208ef0..d740504d5 100644 --- a/plug-ins/notch.ny +++ b/plug-ins/notch.ny @@ -3,6 +3,7 @@ ;type process ;preview linear ;name "Notch Filter..." +;manpage "Notch_Filter" ;action "Applying Notch Filter..." ;author "Steve Daulton and Bill Wharrie" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/rhythmtrack.ny b/plug-ins/rhythmtrack.ny index 4e5be0541..c98323f15 100644 --- a/plug-ins/rhythmtrack.ny +++ b/plug-ins/rhythmtrack.ny @@ -3,6 +3,7 @@ ;type generate ;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin" ;name "Rhythm Track..." +;manpage "Rhythm_Track" ;preview linear ;action "Generating Rhythm..." ;author "Dominic Mazzoni" diff --git a/plug-ins/rissetdrum.ny b/plug-ins/rissetdrum.ny index 32cfd1f74..71ff4c417 100644 --- a/plug-ins/rissetdrum.ny +++ b/plug-ins/rissetdrum.ny @@ -4,6 +4,7 @@ ;categories "http://lv2plug.in/ns/lv2core#GeneratorPlugin" ;preview linear ;name "Risset Drum..." +;manpage "Risset_Drum" ;action "Generating Risset Drum..." ;author "Steven Jones" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/sample-data-export.ny b/plug-ins/sample-data-export.ny index 9dbc30e13..49350bb6b 100644 --- a/plug-ins/sample-data-export.ny +++ b/plug-ins/sample-data-export.ny @@ -2,6 +2,7 @@ ;version 3 ;type analyze ;name "Sample Data Export..." +;manpage "Sample_Data_Export" ;action "Analyzing..." ;maxlen 1000001 ;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin" diff --git a/plug-ins/sample-data-import.ny b/plug-ins/sample-data-import.ny index f48ef5620..0b6b8d1d1 100644 --- a/plug-ins/sample-data-import.ny +++ b/plug-ins/sample-data-import.ny @@ -2,6 +2,7 @@ ;version 4 ;type generate ;name "Sample Data Import..." +;manpage "Sample_Data_Import" ;action "Reading and rendering samples..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/tremolo.ny b/plug-ins/tremolo.ny index 596dfc51c..f656952d2 100644 --- a/plug-ins/tremolo.ny +++ b/plug-ins/tremolo.ny @@ -4,6 +4,7 @@ ;preview linear ;categories "http://lv2plug.in/ns/lv2core#ModulatorPlugin" ;name "Tremolo..." +;manpage "Tremolo" ;action "Applying Tremolo..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/vocalrediso.ny b/plug-ins/vocalrediso.ny index 150c21347..ace139fa3 100644 --- a/plug-ins/vocalrediso.ny +++ b/plug-ins/vocalrediso.ny @@ -3,6 +3,7 @@ ;type process ;categories "http://lv2plug.in/ns/lv2core#MixerPlugin" ;name "Vocal Reduction and Isolation..." +;manpage "Vocal_Reduction_and_Isolation" ;action "Applying Action..." ;author "Robert Haenggi" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/vocalremover.ny b/plug-ins/vocalremover.ny index 2f1943ffd..bbb97a176 100644 --- a/plug-ins/vocalremover.ny +++ b/plug-ins/vocalremover.ny @@ -3,6 +3,7 @@ ;type process ;preview linear ;name "Vocal Remover..." +;manpage "Vocal_Remover" ;action "Removing center-panned audio..." ;info "For reducing center-panned vocals" ;author "Steve Daulton" diff --git a/plug-ins/vocoder.ny b/plug-ins/vocoder.ny index 2509d8056..ca73ab175 100644 --- a/plug-ins/vocoder.ny +++ b/plug-ins/vocoder.ny @@ -4,6 +4,7 @@ ;preview enabled ;categories "http://lv2plug.in/ns/lv2core#SpectralPlugin" ;name "Vocoder..." +;manpage "Vocoder" ;action "Processing Vocoder..." ;author "Edgar-RFT" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 5baf54e80..15d0dc994 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -3060,7 +3060,7 @@ bool EffectUIHost::Initialize() buttons = eApplyButton + eCloseButton + eHelpButton; wxAcceleratorEntry entries[1]; #if defined(__WXMAC__) - entries[0].Set(wxACCEL_CTRL, (int) '?', wxID_HELP); + // Is there a standard shortcut on Mac? #else entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP); #endif diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index f874c39e7..dec11c55a 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -121,7 +121,7 @@ int wxTreebookExt::SetSelection(size_t n) if (showHelp) { wxAcceleratorEntry entries[1]; #if defined(__WXMAC__) - entries[0].Set(wxACCEL_CTRL, (int) '?', wxID_HELP); + // Is there a standard shortcut on Mac? #else entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP); #endif From e7a9c37745dac64a088b71a552b6a0207d16bb1f Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 20 May 2017 14:40:09 +0100 Subject: [PATCH 50/85] Add help buttons for normal built-in effects --- src/effects/AutoDuck.cpp | 5 +++++ src/effects/AutoDuck.h | 1 + src/effects/BassTreble.cpp | 5 +++++ src/effects/BassTreble.h | 1 + src/effects/ChangePitch.cpp | 5 +++++ src/effects/ChangePitch.h | 1 + src/effects/ChangeSpeed.cpp | 6 ++++++ src/effects/ChangeSpeed.h | 1 + src/effects/ChangeTempo.cpp | 5 +++++ src/effects/ChangeTempo.h | 1 + src/effects/ClickRemoval.cpp | 5 +++++ src/effects/ClickRemoval.h | 1 + src/effects/Compressor.cpp | 5 +++++ src/effects/Compressor.h | 1 + src/effects/Distortion.cpp | 5 +++++ src/effects/Distortion.h | 1 + src/effects/DtmfGen.cpp | 5 +++++ src/effects/DtmfGen.h | 1 + src/effects/Echo.cpp | 5 +++++ src/effects/Echo.h | 1 + src/effects/Equalization.cpp | 5 +++++ src/effects/Equalization.h | 1 + src/effects/FindClipping.cpp | 5 +++++ src/effects/FindClipping.h | 1 + src/effects/Noise.cpp | 5 +++++ src/effects/Noise.h | 1 + src/effects/Normalize.cpp | 5 +++++ src/effects/Normalize.h | 1 + src/effects/Paulstretch.cpp | 5 +++++ src/effects/Paulstretch.h | 1 + src/effects/Phaser.cpp | 5 +++++ src/effects/Phaser.h | 1 + src/effects/Repeat.cpp | 5 +++++ src/effects/Repeat.h | 1 + src/effects/Reverb.cpp | 5 +++++ src/effects/Reverb.h | 1 + src/effects/Silence.cpp | 6 ++++++ src/effects/Silence.h | 1 + src/effects/TimeScale.cpp | 5 +++++ src/effects/TimeScale.h | 1 + src/effects/ToneGen.cpp | 7 +++++++ src/effects/ToneGen.h | 1 + src/effects/TruncSilence.cpp | 5 +++++ src/effects/TruncSilence.h | 1 + src/effects/Wahwah.cpp | 5 +++++ src/effects/Wahwah.h | 1 + 46 files changed, 142 insertions(+) diff --git a/src/effects/AutoDuck.cpp b/src/effects/AutoDuck.cpp index e1fb8100e..48b0d4465 100644 --- a/src/effects/AutoDuck.cpp +++ b/src/effects/AutoDuck.cpp @@ -115,6 +115,11 @@ wxString EffectAutoDuck::GetDescription() return XO("Reduces (ducks) the volume of one or more tracks whenever the volume of a specified \"control\" track reaches a particular level"); } +wxString EffectAutoDuck::ManualPage() +{ + return wxT("Auto_Duck"); +} + // EffectIdentInterface implementation EffectType EffectAutoDuck::GetType() diff --git a/src/effects/AutoDuck.h b/src/effects/AutoDuck.h index 79db8f4c0..45aede7cd 100644 --- a/src/effects/AutoDuck.h +++ b/src/effects/AutoDuck.h @@ -38,6 +38,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/BassTreble.cpp b/src/effects/BassTreble.cpp index fcc6604f5..6cd987b36 100644 --- a/src/effects/BassTreble.cpp +++ b/src/effects/BassTreble.cpp @@ -92,6 +92,11 @@ wxString EffectBassTreble::GetDescription() return XO("Simple tone control effect"); } +wxString EffectBassTreble::ManualPage() +{ + return wxT("Bass_and_Treble"); +} + // EffectIdentInterface implementation EffectType EffectBassTreble::GetType() diff --git a/src/effects/BassTreble.h b/src/effects/BassTreble.h index ece660fa5..0aed2d56c 100644 --- a/src/effects/BassTreble.h +++ b/src/effects/BassTreble.h @@ -51,6 +51,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/ChangePitch.cpp b/src/effects/ChangePitch.cpp index 56b5c7817..5f0c9c284 100644 --- a/src/effects/ChangePitch.cpp +++ b/src/effects/ChangePitch.cpp @@ -126,6 +126,11 @@ wxString EffectChangePitch::GetDescription() return XO("Change the pitch of a track without changing its tempo"); } +wxString EffectChangePitch::ManualPage() +{ + return wxT("Change_Pitch"); +} + // EffectIdentInterface implementation EffectType EffectChangePitch::GetType() diff --git a/src/effects/ChangePitch.h b/src/effects/ChangePitch.h index da4843e99..9da7f6d6c 100644 --- a/src/effects/ChangePitch.h +++ b/src/effects/ChangePitch.h @@ -48,6 +48,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/ChangeSpeed.cpp b/src/effects/ChangeSpeed.cpp index d764bbce4..78fed4e4e 100644 --- a/src/effects/ChangeSpeed.cpp +++ b/src/effects/ChangeSpeed.cpp @@ -115,6 +115,12 @@ wxString EffectChangeSpeed::GetDescription() return XO("Change the speed of a track, also changing its pitch"); } +wxString EffectChangeSpeed::ManualPage() +{ + return wxT("Change_Speed"); +} + + // EffectIdentInterface implementation EffectType EffectChangeSpeed::GetType() diff --git a/src/effects/ChangeSpeed.h b/src/effects/ChangeSpeed.h index 93fddc0b1..c04b63a49 100644 --- a/src/effects/ChangeSpeed.h +++ b/src/effects/ChangeSpeed.h @@ -37,6 +37,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/ChangeTempo.cpp b/src/effects/ChangeTempo.cpp index 7e5292cb6..17ceb0ab5 100644 --- a/src/effects/ChangeTempo.cpp +++ b/src/effects/ChangeTempo.cpp @@ -102,6 +102,11 @@ wxString EffectChangeTempo::GetDescription() return XO("Change the tempo of a selection without changing its pitch"); } +wxString EffectChangeTempo::ManualPage() +{ + return wxT("Change_Tempo"); +} + // EffectIdentInterface implementation EffectType EffectChangeTempo::GetType() diff --git a/src/effects/ChangeTempo.h b/src/effects/ChangeTempo.h index 33ee049f6..ba98d5845 100644 --- a/src/effects/ChangeTempo.h +++ b/src/effects/ChangeTempo.h @@ -42,6 +42,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/ClickRemoval.cpp b/src/effects/ClickRemoval.cpp index d096e86fb..fa9e3289c 100644 --- a/src/effects/ClickRemoval.cpp +++ b/src/effects/ClickRemoval.cpp @@ -85,6 +85,11 @@ wxString EffectClickRemoval::GetDescription() return XO("Click Removal is designed to remove clicks on audio tracks"); } +wxString EffectClickRemoval::ManualPage() +{ + return wxT("Click_Removal"); +} + // EffectIdentInterface implementation EffectType EffectClickRemoval::GetType() diff --git a/src/effects/ClickRemoval.h b/src/effects/ClickRemoval.h index 73540860f..eb27f1cc8 100644 --- a/src/effects/ClickRemoval.h +++ b/src/effects/ClickRemoval.h @@ -38,6 +38,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Compressor.cpp b/src/effects/Compressor.cpp index a5e9307e9..6a99bc7d9 100644 --- a/src/effects/Compressor.cpp +++ b/src/effects/Compressor.cpp @@ -107,6 +107,11 @@ wxString EffectCompressor::GetDescription() return XO("Compresses the dynamic range of audio"); } +wxString EffectCompressor::ManualPage() +{ + return wxT("Compressor"); +} + // EffectIdentInterface implementation EffectType EffectCompressor::GetType() diff --git a/src/effects/Compressor.h b/src/effects/Compressor.h index 0cbe43896..76f37cbaa 100644 --- a/src/effects/Compressor.h +++ b/src/effects/Compressor.h @@ -40,6 +40,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Distortion.cpp b/src/effects/Distortion.cpp index 42c6064d4..b4cfe35eb 100644 --- a/src/effects/Distortion.cpp +++ b/src/effects/Distortion.cpp @@ -192,6 +192,11 @@ wxString EffectDistortion::GetDescription() return XO("Waveshaping distortion effect"); } +wxString EffectDistortion::ManualPage() +{ + return wxT("Distortion"); +} + // EffectIdentInterface implementation EffectType EffectDistortion::GetType() diff --git a/src/effects/Distortion.h b/src/effects/Distortion.h index 6e3bcc726..29fda2745 100644 --- a/src/effects/Distortion.h +++ b/src/effects/Distortion.h @@ -68,6 +68,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/DtmfGen.cpp b/src/effects/DtmfGen.cpp index 7f089cbfc..539ef6c58 100644 --- a/src/effects/DtmfGen.cpp +++ b/src/effects/DtmfGen.cpp @@ -101,6 +101,11 @@ wxString EffectDtmf::GetDescription() return XO("Generates dual-tone multi-frequency (DTMF) tones like those produced by the keypad on telephones"); } +wxString EffectDtmf::ManualPage() +{ + return wxT("Generate_Menu#dtmf"); +} + // EffectIdentInterface implementation EffectType EffectDtmf::GetType() diff --git a/src/effects/DtmfGen.h b/src/effects/DtmfGen.h index c5a38b1ee..50f432bef 100644 --- a/src/effects/DtmfGen.h +++ b/src/effects/DtmfGen.h @@ -37,6 +37,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Echo.cpp b/src/effects/Echo.cpp index a698e842b..fa0f4233a 100644 --- a/src/effects/Echo.cpp +++ b/src/effects/Echo.cpp @@ -60,6 +60,11 @@ wxString EffectEcho::GetDescription() return XO("Repeats the selected audio again and again"); } +wxString EffectEcho::ManualPage() +{ + return wxT("Echo"); +} + // EffectIdentInterface implementation EffectType EffectEcho::GetType() diff --git a/src/effects/Echo.h b/src/effects/Echo.h index 0b18709b4..492e9d435 100644 --- a/src/effects/Echo.h +++ b/src/effects/Echo.h @@ -33,6 +33,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Equalization.cpp b/src/effects/Equalization.cpp index 503083377..3feee2c24 100644 --- a/src/effects/Equalization.cpp +++ b/src/effects/Equalization.cpp @@ -298,6 +298,11 @@ wxString EffectEqualization::GetDescription() return XO("Adjusts the volume levels of particular frequencies"); } +wxString EffectEqualization::ManualPage() +{ + return wxT("Equalization"); +} + // EffectIdentInterface implementation EffectType EffectEqualization::GetType() diff --git a/src/effects/Equalization.h b/src/effects/Equalization.h index 2a644231a..1e60fc01f 100644 --- a/src/effects/Equalization.h +++ b/src/effects/Equalization.h @@ -95,6 +95,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/FindClipping.cpp b/src/effects/FindClipping.cpp index 492578f0a..e888b5b58 100644 --- a/src/effects/FindClipping.cpp +++ b/src/effects/FindClipping.cpp @@ -61,6 +61,11 @@ wxString EffectFindClipping::GetDescription() return XO("Creates labels where clipping is detected"); } +wxString EffectFindClipping::ManualPage() +{ + return wxT("Find_Clipping"); +} + // EffectIdentInterface implementation EffectType EffectFindClipping::GetType() diff --git a/src/effects/FindClipping.h b/src/effects/FindClipping.h index b5c582333..976799a8e 100644 --- a/src/effects/FindClipping.h +++ b/src/effects/FindClipping.h @@ -32,6 +32,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Noise.cpp b/src/effects/Noise.cpp index 790779a46..cf881835b 100644 --- a/src/effects/Noise.cpp +++ b/src/effects/Noise.cpp @@ -78,6 +78,11 @@ wxString EffectNoise::GetDescription() return XO("Generates one of three different types of noise"); } +wxString EffectNoise::ManualPage() +{ + return wxT("Generate_Menu#noise"); +} + // EffectIdentInterface implementation EffectType EffectNoise::GetType() diff --git a/src/effects/Noise.h b/src/effects/Noise.h index a4045a3d0..538c28b6c 100644 --- a/src/effects/Noise.h +++ b/src/effects/Noise.h @@ -33,6 +33,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Normalize.cpp b/src/effects/Normalize.cpp index 02596fa3d..c68dff27a 100644 --- a/src/effects/Normalize.cpp +++ b/src/effects/Normalize.cpp @@ -68,6 +68,11 @@ wxString EffectNormalize::GetDescription() return XO("Sets the peak amplitude of one or more tracks"); } +wxString EffectNormalize::ManualPage() +{ + return wxT("Normalize"); +} + // EffectIdentInterface implementation EffectType EffectNormalize::GetType() diff --git a/src/effects/Normalize.h b/src/effects/Normalize.h index 557c07ac2..e4b677217 100644 --- a/src/effects/Normalize.h +++ b/src/effects/Normalize.h @@ -34,6 +34,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Paulstretch.cpp b/src/effects/Paulstretch.cpp index 72b4f66b8..91c6585ea 100644 --- a/src/effects/Paulstretch.cpp +++ b/src/effects/Paulstretch.cpp @@ -107,6 +107,11 @@ wxString EffectPaulstretch::GetDescription() return XO("Use Paulstretch only for an extreme time-stretch or \"stasis\" effect"); } +wxString EffectPaulstretch::ManualPage() +{ + return wxT("Paulstretch"); +} + // EffectIdentInterface implementation EffectType EffectPaulstretch::GetType() diff --git a/src/effects/Paulstretch.h b/src/effects/Paulstretch.h index e908c2b78..59bd79a85 100644 --- a/src/effects/Paulstretch.h +++ b/src/effects/Paulstretch.h @@ -28,6 +28,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Phaser.cpp b/src/effects/Phaser.cpp index 20e237b53..622cdec9f 100644 --- a/src/effects/Phaser.cpp +++ b/src/effects/Phaser.cpp @@ -112,6 +112,11 @@ wxString EffectPhaser::GetDescription() return XO("Combines phase-shifted signals with the original signal"); } +wxString EffectPhaser::ManualPage() +{ + return wxT("Phaser"); +} + // EffectIdentInterface implementation EffectType EffectPhaser::GetType() diff --git a/src/effects/Phaser.h b/src/effects/Phaser.h index 3f628be41..151a9945f 100644 --- a/src/effects/Phaser.h +++ b/src/effects/Phaser.h @@ -56,6 +56,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Repeat.cpp b/src/effects/Repeat.cpp index e436cc5e3..0c635e3de 100644 --- a/src/effects/Repeat.cpp +++ b/src/effects/Repeat.cpp @@ -67,6 +67,11 @@ wxString EffectRepeat::GetDescription() return XO("Repeats the selection the specified number of times"); } +wxString EffectRepeat::ManualPage() +{ + return wxT("Repeat"); +} + // EffectIdentInterface implementation EffectType EffectRepeat::GetType() diff --git a/src/effects/Repeat.h b/src/effects/Repeat.h index e7d88f8ad..5edb4928a 100644 --- a/src/effects/Repeat.h +++ b/src/effects/Repeat.h @@ -32,6 +32,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Reverb.cpp b/src/effects/Reverb.cpp index e3fa56d48..8d290e09e 100644 --- a/src/effects/Reverb.cpp +++ b/src/effects/Reverb.cpp @@ -153,6 +153,11 @@ wxString EffectReverb::GetDescription() return XO("Adds ambience or a \"hall effect\""); } +wxString EffectReverb::ManualPage() +{ + return wxT("Reverb"); +} + // EffectIdentInterface implementation EffectType EffectReverb::GetType() diff --git a/src/effects/Reverb.h b/src/effects/Reverb.h index 80fc3c766..c2637f975 100644 --- a/src/effects/Reverb.h +++ b/src/effects/Reverb.h @@ -50,6 +50,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Silence.cpp b/src/effects/Silence.cpp index 16ca05507..cddb29df5 100644 --- a/src/effects/Silence.cpp +++ b/src/effects/Silence.cpp @@ -42,6 +42,12 @@ wxString EffectSilence::GetDescription() return XO("Creates audio of zero amplitude"); } +wxString EffectSilence::ManualPage() +{ + return wxT("Generate_Menu#silence"); +} + + // EffectIdentInterface implementation EffectType EffectSilence::GetType() diff --git a/src/effects/Silence.h b/src/effects/Silence.h index e3b0110db..097214acf 100644 --- a/src/effects/Silence.h +++ b/src/effects/Silence.h @@ -31,6 +31,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/TimeScale.cpp b/src/effects/TimeScale.cpp index 1501726ce..ec1aab8df 100644 --- a/src/effects/TimeScale.cpp +++ b/src/effects/TimeScale.cpp @@ -101,6 +101,11 @@ wxString EffectTimeScale::GetDescription() return XO("Allows continuous changes to the tempo and/or pitch"); } +wxString EffectTimeScale::ManualPage() +{ + return wxT("Sliding_Time_Scale_-_Pitch_Shift"); +} + // EffectIdentInterface implementation EffectType EffectTimeScale::GetType() diff --git a/src/effects/TimeScale.h b/src/effects/TimeScale.h index 411f32a34..f3fbbe073 100644 --- a/src/effects/TimeScale.h +++ b/src/effects/TimeScale.h @@ -37,6 +37,7 @@ public: wxString GetSymbol() override; wxString GetName() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/ToneGen.cpp b/src/effects/ToneGen.cpp index e46a4b24d..1b97a2e2c 100644 --- a/src/effects/ToneGen.cpp +++ b/src/effects/ToneGen.cpp @@ -133,6 +133,13 @@ wxString EffectToneGen::GetDescription() : XO("Generates a constant frequency tone of one of four types"); } +wxString EffectToneGen::ManualPage() +{ + return mChirp + ? wxT("Generate_Menu#chirp") + : wxT("Generate_Menu#tone"); +} + // EffectIdentInterface implementation EffectType EffectToneGen::GetType() diff --git a/src/effects/ToneGen.h b/src/effects/ToneGen.h index 26ed3f849..c556246f7 100644 --- a/src/effects/ToneGen.h +++ b/src/effects/ToneGen.h @@ -35,6 +35,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index 587fa7490..bde22e29e 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -119,6 +119,11 @@ wxString EffectTruncSilence::GetDescription() return XO("Automatically reduces the length of passages where the volume is below a specified level"); } +wxString EffectTruncSilence::ManualPage() +{ + return wxT("Truncate_Silence"); +} + // EffectIdentInterface implementation EffectType EffectTruncSilence::GetType() diff --git a/src/effects/TruncSilence.h b/src/effects/TruncSilence.h index 39825183b..3b5780925 100644 --- a/src/effects/TruncSilence.h +++ b/src/effects/TruncSilence.h @@ -43,6 +43,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation diff --git a/src/effects/Wahwah.cpp b/src/effects/Wahwah.cpp index 73c27f29d..15cf6de91 100644 --- a/src/effects/Wahwah.cpp +++ b/src/effects/Wahwah.cpp @@ -103,6 +103,11 @@ wxString EffectWahwah::GetDescription() return XO("Rapid tone quality variations, like that guitar sound so popular in the 1970's"); } +wxString EffectWahwah::ManualPage() +{ + return wxT("Wahwah"); +} + // EffectIdentInterface implementation EffectType EffectWahwah::GetType() diff --git a/src/effects/Wahwah.h b/src/effects/Wahwah.h index 440b10ced..ecd0df82b 100644 --- a/src/effects/Wahwah.h +++ b/src/effects/Wahwah.h @@ -53,6 +53,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation From bba5a8fef1e6c321290b4c7d1ca59fc67863d6cf Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 20 May 2017 14:48:28 +0100 Subject: [PATCH 51/85] Add help button for Nyquist Prompt --- src/effects/nyquist/Nyquist.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 6f2f96107..f3d50f46d 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -214,7 +214,9 @@ wxString NyquistEffect::GetDescription() wxString NyquistEffect::ManualPage() { - return mManPage; + return mIsPrompt + ? wxT("Nyquist_Prompt") + : mManPage; } wxString NyquistEffect::HelpPage() From d6a90119608cc6ce0db5938526e6ad67f68519e1 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 20 May 2017 17:11:02 +0100 Subject: [PATCH 52/85] "Error opening sound device" as Error dialog ShowErrorDialog could do with some polish, but it supports linking a help button to the manual. --- src/effects/Effect.cpp | 8 ++++++-- src/toolbars/ControlToolBar.cpp | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 15d0dc994..2a9e55251 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -54,6 +54,9 @@ greater use in future. #include "TimeWarper.h" #include "nyquist/Nyquist.h" #include "../widgets/HelpSystem.h" +#include "../widgets/LinkingHtmlWindow.h" +#include "../widgets/ErrorDialog.h" +#include "../FileNames.h" #if defined(__WXMAC__) #include @@ -2615,8 +2618,9 @@ void Effect::Preview(bool dryOnly) } } else { - wxMessageBox(_("Error opening sound device. Try changing the audio host, playback device and the project sample rate."), - _("Error"), wxOK | wxICON_EXCLAMATION, FocusDialog); + ShowErrorDialog(FocusDialog, _("Error"), + _("Error opening sound device.\nTry changing the audio host, playback device and the project sample rate."), + wxT("http://manual.audacityteam.org/man/faq_errors.html#sound_device"), false); } } } diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 94058ea7d..abcedfda4 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -67,6 +67,9 @@ #include "../WaveTrack.h" #include "../widgets/AButton.h" #include "../widgets/Meter.h" +#include "../widgets/LinkingHtmlWindow.h" +#include "../widgets/ErrorDialog.h" +#include "../FileNames.h" #include "../tracks/ui/Scrubbing.h" #include "../prefs/TracksPrefs.h" @@ -697,11 +700,10 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion, #endif } else { - // msmeyer: Show error message if stream could not be opened - wxMessageBox( - _("Error opening sound device. " - "Try changing the audio host, playback device and the project sample rate."), - _("Error"), wxOK | wxICON_EXCLAMATION, this); + // Show error message if stream could not be opened + ShowErrorDialog(this, _("Error"), + _("Error opening sound device.\nTry changing the audio host, playback device and the project sample rate."), + wxT("http://manual.audacityteam.org/man/faq_errors.html#sound_device"), false); } } @@ -1173,9 +1175,10 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt) StartScrollingIfPreferred(); } else { - // msmeyer: Show error message if stream could not be opened - wxMessageBox(_("Error opening sound device. Try changing the audio host, recording device and the project sample rate."), - _("Error"), wxOK | wxICON_EXCLAMATION, this); + // Show error message if stream could not be opened + ShowErrorDialog(this, _("Error"), + _("Error opening sound device.\nTry changing the audio host, recording device and the project sample rate."), + wxT("http://manual.audacityteam.org/man/faq_errors.html#sound_device"), false); } } } From b96f169e1f97a77cc1ce82b4493f6e47f22e5c51 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 20 May 2017 18:21:32 +0100 Subject: [PATCH 53/85] Fix link to Spectrogram Settings Help --- src/prefs/PrefsDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index dec11c55a..77368c576 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -417,7 +417,7 @@ void PrefsDialog::OnHelp(wxCommandEvent & WXUNUSED(event)) // Because this happens, we want to visit a different help page. // So we modify the page name in the case of a page on its own. if( !mCategories) - page.Replace( "Preferences", "Settings" ); + page.Replace( "Spectrograms_Preferences", "Spectrogram_View#spectrogram_settings" ); HelpSystem::ShowHelpDialog(this, page, true); } From d549dccefdab3fead52e76753dc1ecf8a465ab19 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 20 May 2017 18:31:06 +0100 Subject: [PATCH 54/85] Bug 1649 - Freeze with Truncate Silence --- src/effects/TruncSilence.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index bde22e29e..f2bcb82de 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -486,6 +486,10 @@ bool EffectTruncSilence::DoRemoval if (t->GetEndTime() < r->start) continue; + // Don't waste time cutting nothing. + if( cutLen == 0.0 ) + continue; + double cutStart = (r->start + r->end - cutLen) / 2; double cutEnd = cutStart + cutLen; if (t->GetKind() == Track::Wave) From 4a08ea62c0a2f9412aa0ea844294aa75b42e3837 Mon Sep 17 00:00:00 2001 From: James Crook Date: Sat, 20 May 2017 21:56:17 +0100 Subject: [PATCH 55/85] Make HTML dialog resizable (on windows). --- src/widgets/LinkingHtmlWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/LinkingHtmlWindow.cpp b/src/widgets/LinkingHtmlWindow.cpp index 2b8d7a53c..49b0d5906 100644 --- a/src/widgets/LinkingHtmlWindow.cpp +++ b/src/widgets/LinkingHtmlWindow.cpp @@ -37,7 +37,7 @@ END_EVENT_TABLE() BrowserDialog::BrowserDialog(wxWindow *pParent, const wxString &title) - : wxDialogWrapper{ pParent, ID, title } + : wxDialogWrapper{ pParent, ID, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER /*| wxMAXIMIZE_BOX */ } { } From e99b54e525244868c9ade9f8d61c264831e6e623 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sun, 21 May 2017 12:04:15 +0100 Subject: [PATCH 56/85] Add help button for Classic Filter --- src/effects/ScienFilter.cpp | 6 ++++++ src/effects/ScienFilter.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/effects/ScienFilter.cpp b/src/effects/ScienFilter.cpp index c65c46821..30555367a 100644 --- a/src/effects/ScienFilter.cpp +++ b/src/effects/ScienFilter.cpp @@ -189,6 +189,12 @@ wxString EffectScienFilter::GetDescription() return XO("Performs IIR filtering that emulates analog filters"); } +wxString EffectScienFilter::ManualPage() +{ + return wxT("Classic_Filters"); +} + + // EffectIdentInterface implementation EffectType EffectScienFilter::GetType() diff --git a/src/effects/ScienFilter.h b/src/effects/ScienFilter.h index 80f0aaf49..1e8a89cac 100644 --- a/src/effects/ScienFilter.h +++ b/src/effects/ScienFilter.h @@ -45,6 +45,7 @@ public: wxString GetSymbol() override; wxString GetDescription() override; + wxString ManualPage() override; // EffectIdentInterface implementation From 99e5516ee21f6d69086dc41a6b0ea65f7bf37b72 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sun, 21 May 2017 16:55:31 +0100 Subject: [PATCH 57/85] Save built-in browser size --- src/widgets/LinkingHtmlWindow.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/widgets/LinkingHtmlWindow.cpp b/src/widgets/LinkingHtmlWindow.cpp index 49b0d5906..3f0c1c2b8 100644 --- a/src/widgets/LinkingHtmlWindow.cpp +++ b/src/widgets/LinkingHtmlWindow.cpp @@ -21,10 +21,13 @@ #include #include #include +#include +#include #include "LinkingHtmlWindow.h" #include "../HelpText.h" #include "../FileNames.h" +#include "../Prefs.h" #include "ErrorDialog.h" #include "HelpSystem.h" @@ -39,7 +42,20 @@ END_EVENT_TABLE() BrowserDialog::BrowserDialog(wxWindow *pParent, const wxString &title) : wxDialogWrapper{ pParent, ID, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER /*| wxMAXIMIZE_BOX */ } { + int width, height; + const int minWidth = 400; + const int minHeight = 250; + gPrefs->Read(wxT("/GUI/BrowserWidth"), &width, minWidth); + gPrefs->Read(wxT("/GUI/BrowserHeight"), &height, minHeight); + + if (width < minWidth || width > wxSystemSettings::GetMetric(wxSYS_SCREEN_X)) + width = minWidth; + if (height < minHeight || height > wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)) + height = minHeight; + + SetMinSize(wxSize(minWidth, minHeight)); + SetSize(wxDefaultPosition.x, wxDefaultPosition.y, width, height, wxSIZE_AUTO); } void BrowserDialog::OnForward(wxCommandEvent & WXUNUSED(event)) @@ -63,6 +79,10 @@ void BrowserDialog::OnClose(wxCommandEvent & WXUNUSED(event)) } auto parent = GetParent(); + gPrefs->Write(wxT("/GUI/BrowserWidth"), GetSize().GetX()); + gPrefs->Write(wxT("/GUI/BrowserHeight"), GetSize().GetY()); + gPrefs->Flush(); + #ifdef __WXMAC__ auto grandparent = GetParent()->GetParent(); #endif From 04ba10a1c3897a2a13d7d2ae339be7c22b1af665 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sun, 21 May 2017 23:11:21 +0100 Subject: [PATCH 58/85] Add help button support for other Nyquist effects --- src/effects/Effect.cpp | 4 ++- src/effects/nyquist/Nyquist.cpp | 47 ++++++++++++++++++++++++--------- src/effects/nyquist/Nyquist.h | 5 +++- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 2a9e55251..a45434725 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -3072,6 +3072,9 @@ bool EffectUIHost::Initialize() this->SetAcceleratorTable(accel); } + if (mEffect->mUIDebug) { + buttons += eDebugButton; + } buttonPanel->SetSizer(CreateStdButtonSizer(buttonPanel, buttons, bar).release()); vs->Add(buttonPanel, 0, wxEXPAND); @@ -3240,7 +3243,6 @@ void EffectUIHost::OnHelp(wxCommandEvent & WXUNUSED(event)) } else { // otherwise use the new ShowHelpDialog - wxLogDebug(mEffect->ManualPage()); HelpSystem::ShowHelpDialog(FindWindow(wxID_HELP), mEffect->ManualPage(), true); } } diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index f3d50f46d..4e09da937 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -136,6 +136,8 @@ NyquistEffect::NyquistEffect(const wxString &fName) mRestoreSplits = true; // Default: Restore split lines. mMergeClips = -1; // Default (auto): Merge if length remains unchanged. + mEnableDebug = true; // Debug button enabled by default. + mVersion = 4; mStop = false; @@ -221,9 +223,17 @@ wxString NyquistEffect::ManualPage() wxString NyquistEffect::HelpPage() { - // TODO: Get the full path for the help page - // Return empty string and give debug info if it does not exist - return mHelpFile; + wxArrayString paths = NyquistEffect::GetNyquistSearchPath(); + wxString fileName; + + for (size_t i = 0, cnt = paths.GetCount(); i < cnt; i++) { + fileName = wxFileName(paths[i] + wxT("/") + mHelpFile).GetFullPath(); + if (wxFileExists(fileName)) { + mHelpFileExists = true; + return fileName; + } + } + return wxEmptyString; } // EffectIdentInterface implementation @@ -379,7 +389,7 @@ bool NyquistEffect::SetAutomationParameters(EffectAutomationParameters & parms) } else if (ctrl.type == NYQ_CTRL_CHOICE) { - int val; + int val {0}; wxArrayString choices = ParseChoice(ctrl); parms.ReadEnum(ctrl.var, &val, choices); ctrl.val = (double) val; @@ -399,8 +409,10 @@ bool NyquistEffect::Init() { // EffectType may not be defined in script, so // reset each time we call the Nyquist Prompt. - if (mIsPrompt) + if (mIsPrompt) { mType = EffectTypeProcess; + mEnableDebug = true; // Debug button always enabled for Nyquist Prompt. + } // As of Audacity 2.1.2 rc1, 'spectral' effects are allowed only if // the selected track(s) are in a spectrogram view, and there is at @@ -501,6 +513,9 @@ bool NyquistEffect::Process() } mDebugOutput.Clear(); + if (!mHelpFile.IsEmpty() && !mHelpFileExists) { + mDebugOutput = wxString::Format(wxT("error: File \"%s\" specified in header but not found in plug-in path.\n"), mHelpFile); + } if (mVersion >= 4) { @@ -807,7 +822,7 @@ void NyquistEffect::PopulateOrExchange(ShuttleGui & S) BuildEffectWindow(S); } - EnableDebug(); + EnableDebug(mEnableDebug); } bool NyquistEffect::TransferDataToWindow() @@ -1247,7 +1262,7 @@ bool NyquistEffect::ProcessOne() std::unique_ptr outputTrack[2]; double rate = mCurTrack[0]->GetRate(); - for (size_t i = 0; i < outChannels; i++) { + for (int i = 0; i < outChannels; i++) { sampleFormat format = mCurTrack[i]->GetSampleFormat(); if (outChannels == (int)mCurNumChannels) { @@ -1283,7 +1298,7 @@ bool NyquistEffect::ProcessOne() if (!success) return false; - for (size_t i = 0; i < outChannels; i++) { + for (int i = 0; i < outChannels; i++) { outputTrack[i]->Flush(); mOutputTime = outputTrack[i]->GetEndTime(); @@ -1314,7 +1329,7 @@ bool NyquistEffect::ProcessOne() else { mCurTrack[i]->ClearAndPaste(mT0, mT1, out, mRestoreSplits, mMergeClips != 0); } - + // If we were first in the group adjust non-selected group tracks if (mFirstInGroup) { SyncLockedTracksIterator git(mOutputTracks.get()); @@ -1635,6 +1650,15 @@ void NyquistEffect::Parse(const wxString &line) return; } + // TODO: Document. + // Debug button may be disabled for release plug-ins. + if (len >= 2 && tokens[0] == wxT("debug")) { + if (tokens[1] == wxT("disabled") || tokens[1] == wxT("false")) { + mEnableDebug = false; + } + return; + } + if (len >= 6 && tokens[0] == wxT("control")) { NyqControl ctrl; @@ -1749,6 +1773,7 @@ bool NyquistEffect::ParseProgram(wxInputStream & stream) mIsSpectral = false; mManPage = wxEmptyString; // If not wxEmptyString, must be a page in the Audacity manual. mHelpFile = wxEmptyString; // If not wxEmptyString, must be a valid HTML help file. + mHelpFileExists = false; mFoundType = false; while (!stream.Eof() && stream.IsOk()) @@ -1791,8 +1816,6 @@ or for LISP, begin with an open parenthesis such as:\n\t(mult *track* 0.1)\n .") void NyquistEffect::ParseFile() { - mEnablePreview = true; - wxFileInputStream stream(mFileName.GetFullPath()); ParseProgram(stream); @@ -1830,7 +1853,7 @@ int NyquistEffect::GetCallback(float *buffer, int ch, mCurBufferStart[ch] = (mCurStart[ch] + start); mCurBufferLen[ch] = mCurTrack[ch]->GetBestBlockSize(mCurBufferStart[ch]); - if (mCurBufferLen[ch] < len) { + if (mCurBufferLen[ch] < (size_t) len) { mCurBufferLen[ch] = mCurTrack[ch]->GetIdealBlockSize(); } diff --git a/src/effects/nyquist/Nyquist.h b/src/effects/nyquist/Nyquist.h index 90071d673..3b84649bc 100644 --- a/src/effects/nyquist/Nyquist.h +++ b/src/effects/nyquist/Nyquist.h @@ -199,10 +199,13 @@ private: wxString mCopyright; wxString mManPage; // ONLY use if a help page exists in the manual. wxString mHelpFile; + bool mHelpFileExists; EffectType mType; bool mEnablePreview; - bool mDebug; + bool mEnableDebug; // Set to false to disable Debug button. + + bool mDebug; // Is true when Debug button clicked. bool mRedirectOutput; bool mProjectChanged; wxString mDebugOutput; From 9c6bfd73ac512c4f6fce6af9bab8f0dc9d207e6e Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Mon, 22 May 2017 12:59:39 +0100 Subject: [PATCH 59/85] Disable Debug button for some Nyquist effects Plug-ins changed: adjustable-fade.ny crossfadetracks.ny highpass.ny limiter.ny lowpass.ny notch.ny tremolo.ny --- plug-ins/adjustable-fade.ny | 1 + plug-ins/crossfadetracks.ny | 5 ++++- plug-ins/highpass.ny | 1 + plug-ins/limiter.ny | 1 + plug-ins/lowpass.ny | 1 + plug-ins/notch.ny | 1 + plug-ins/tremolo.ny | 8 +++----- 7 files changed, 12 insertions(+), 6 deletions(-) diff --git a/plug-ins/adjustable-fade.ny b/plug-ins/adjustable-fade.ny index fc9d99295..0683208b0 100644 --- a/plug-ins/adjustable-fade.ny +++ b/plug-ins/adjustable-fade.ny @@ -6,6 +6,7 @@ ;categories "http://lv2plug.in/ns/lv2core#MixerPlugin" ;name "Adjustable Fade..." ;manpage "Adjustable_Fade" +;debug false ;action "Applying Fade..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/crossfadetracks.ny b/plug-ins/crossfadetracks.ny index 4e7e33630..310e27501 100644 --- a/plug-ins/crossfadetracks.ny +++ b/plug-ins/crossfadetracks.ny @@ -3,6 +3,7 @@ ;type process ;name "Crossfade Tracks..." ;manpage "Crossfade_Tracks" +;debug disabled ;action "Crossfading..." ;preview selection ;author "Steve Daulton" @@ -70,4 +71,6 @@ audio clip, fade in, otherwise fade out." (setf out-dist (min out-dist (abs (- end (second (nth i clips))))))) (if (< in-dist out-dist) 'in 'out))) -(crossfade type direction curve) +(if (< (length (get '*selection* 'tracks)) 2) + "Error.\nSelect 2 (or more) tracks to crossfade." + (crossfade type direction curve)) diff --git a/plug-ins/highpass.ny b/plug-ins/highpass.ny index c613f9489..6400d1ab5 100644 --- a/plug-ins/highpass.ny +++ b/plug-ins/highpass.ny @@ -4,6 +4,7 @@ ;preview linear ;name "High Pass Filter..." ;manpage "High_Pass_Filter" +;debug disabled ;action "Performing High Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/limiter.ny b/plug-ins/limiter.ny index 6d74ac5d6..58ab11c81 100644 --- a/plug-ins/limiter.ny +++ b/plug-ins/limiter.ny @@ -4,6 +4,7 @@ ;categories "http://lv2plug.in/ns/lv2core/#DynamicsPlugin" ;name "Limiter..." ;manpage "Limiter" +;debug false ;action "Limiting..." ;preview enabled ;author "Steve Daulton" diff --git a/plug-ins/lowpass.ny b/plug-ins/lowpass.ny index 9ad9431c4..c04564e5f 100644 --- a/plug-ins/lowpass.ny +++ b/plug-ins/lowpass.ny @@ -4,6 +4,7 @@ ;preview linear ;name "Low Pass Filter..." ;manpage "Low_Pass_Filter" +;debug disabled ;action "Performing Low Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/notch.ny b/plug-ins/notch.ny index d740504d5..de9fbff2a 100644 --- a/plug-ins/notch.ny +++ b/plug-ins/notch.ny @@ -4,6 +4,7 @@ ;preview linear ;name "Notch Filter..." ;manpage "Notch_Filter" +;debug false ;action "Applying Notch Filter..." ;author "Steve Daulton and Bill Wharrie" ;copyright "Released under terms of the GNU General Public License version 2" diff --git a/plug-ins/tremolo.ny b/plug-ins/tremolo.ny index f656952d2..95e0022d4 100644 --- a/plug-ins/tremolo.ny +++ b/plug-ins/tremolo.ny @@ -5,6 +5,7 @@ ;categories "http://lv2plug.in/ns/lv2core#ModulatorPlugin" ;name "Tremolo..." ;manpage "Tremolo" +;debug disabled ;action "Applying Tremolo..." ;author "Steve Daulton" ;copyright "Released under terms of the GNU General Public License version 2" @@ -19,11 +20,8 @@ ;control wave "Waveform type" choice "sine,triangle,sawtooth,inverse sawtooth,square" 0 ;control phase "Starting phase (degrees)" int "" 0 -180 180 -;control wet "Wet level (percent)" int "" 40 0 100 -;control lfo "Frequency (Hz)" real "" 4 0 10 - -; Limit to sensible range -(setq lfo (min 1000 (max lfo (/ (get-duration 1))))) +;control wet "Wet level (percent)" int "" 40 1 100 +;control lfo "Frequency (Hz)" float-text "" 4 0.001 1000 ; Convert % to linear (setq wet (/ wet 200.0)) From 5a26afd7fd848682d4bce85615ed3297d1241c22 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Mon, 22 May 2017 13:03:40 +0100 Subject: [PATCH 60/85] Update Help links: SilenceMarker.ny SoundFinder.ny --- plug-ins/SilenceMarker.ny | 2 +- plug-ins/SoundFinder.ny | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plug-ins/SilenceMarker.ny b/plug-ins/SilenceMarker.ny index c60f8b81f..9377a5f15 100644 --- a/plug-ins/SilenceMarker.ny +++ b/plug-ins/SilenceMarker.ny @@ -3,7 +3,7 @@ ;type analyze ;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin" ;name "Silence Finder..." -;manpage "Silence_Finder_and_Sound_Finder#silence" +;manpage "Silence_Finder" ;action "Finding silence..." ;info "Adds point labels in areas of silence according to the specified\nlevel and duration of silence. If too many silences are detected,\nincrease the silence level and duration; if too few are detected,\nreduce the level and duration." ;author "Alex S. Brown" diff --git a/plug-ins/SoundFinder.ny b/plug-ins/SoundFinder.ny index 409b65ff2..042ff9d9c 100644 --- a/plug-ins/SoundFinder.ny +++ b/plug-ins/SoundFinder.ny @@ -3,7 +3,7 @@ ;type analyze ;categories "http://lv2plug.in/ns/lv2core#AnalyserPlugin" ;name "Sound Finder..." -;manpage "Silence_Finder_and_Sound_Finder#sound" +;manpage "Sound_Finder" ;action "Finding sound..." ;info "Adds region labels for areas of sound according to the specified level\nand duration of surrounding silence. If too many labels are produced,\nincrease the silence level and duration; if too few are produced,\nreduce the level and duration." ;author "Jeremy R. Brown" From 62f75eb159f93e75cb247487fdc0d9132264f88b Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 22 May 2017 12:58:40 +0100 Subject: [PATCH 61/85] (Hi-DPI) No longer upscale ImageCache I found a couple of problems working with upscaled image caches. Firstly in GIMP a 'size 4 square pencil' is not 4x4, which makes editing an upscaled image very fiddly. Secondly the wxIMAGE_QUALITY_NEAREST algorithm is not as dumb as I need it to be, and it is doing some blending when rescaling. This leads to loss of image quality in some cases. So when we do switch to Hi-DPI support, we need to be 'all in' and only be downscaling in Audacity, not upscaling too. --- src/Theme.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Theme.cpp b/src/Theme.cpp index 760e24db7..749840eaa 100644 --- a/src/Theme.cpp +++ b/src/Theme.cpp @@ -757,12 +757,14 @@ void ThemeBase::CreateImageCache( bool bBinarySave ) return; } #endif +#if 0 // Deliberate policy to use the fast/cheap blocky pixel-multiplication // algorithm, as this introduces no artifacts on repeated scale up/down. ImageCache.Rescale( - ImageCache.GetWidth() * 4, - ImageCache.GetHeight() *4, + ImageCache.GetWidth()*4, + ImageCache.GetHeight()*4, wxIMAGE_QUALITY_NEAREST ); +#endif if( !ImageCache.SaveFile( FileName, wxBITMAP_TYPE_PNG )) { wxMessageBox( From 7d31691fd3837ff7630f823f74df1fee6e90dab8 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 22 May 2017 13:30:54 +0100 Subject: [PATCH 62/85] Allow selected controls on SelectionToolbar The toolbar can now show subsets of the start, center, length and end numeric controls. The choice is made using a button with a pop-up menu. The two most recently modified controls 'drive' the other two, whether they are visible or not. If shown, the driven controls are indicated in the name above (also for screen readers). Most users will opt to just show two of the controls, e.g. start and end. The menu button (Classic theme) has three dots on it. Other themes don't yet have the icon and will show as black. --- src/AllThemeResources.h | 2 + src/ClassicThemeAsCeeCode.h | 7257 +++++++++++---------------------- src/toolbars/SelectionBar.cpp | 559 +-- src/toolbars/SelectionBar.h | 55 +- 4 files changed, 2793 insertions(+), 5080 deletions(-) diff --git a/src/AllThemeResources.h b/src/AllThemeResources.h index bb49e89d1..ab2806ddd 100644 --- a/src/AllThemeResources.h +++ b/src/AllThemeResources.h @@ -130,6 +130,8 @@ from there. Audacity will look for a file called "Pause.png". DEFINE_IMAGE( bmpTnSelectSoundDisabled, wxImage( 24, 24 ), wxT("TnSelectSoundDisabled")); DEFINE_IMAGE( bmpTnSelectSilence, wxImage( 24, 24 ), wxT("TnSelectSilence")); DEFINE_IMAGE( bmpTnSelectSilenceDisabled, wxImage( 24, 24 ), wxT("TnSelectSilenceDisabled")); + DEFINE_IMAGE( bmpOptions, wxImage( 24, 24 ), wxT("Options")); + DEFINE_IMAGE( bmpOptionsDisabled, wxImage( 24, 24 ), wxT("OptionsDisabled")); SET_THEME_FLAGS( resFlagNone ); DEFINE_IMAGE( bmpLabelGlyph0, wxImage( 15, 23 ), wxT("LabelGlyph0")); diff --git a/src/ClassicThemeAsCeeCode.h b/src/ClassicThemeAsCeeCode.h index acf61df73..ddeb3b4eb 100644 --- a/src/ClassicThemeAsCeeCode.h +++ b/src/ClassicThemeAsCeeCode.h @@ -1,4 +1,4 @@ -// ThemeAsCeeCode.h +// ClassicThemeAsCeeCode.h // // This file was Auto-Generated. // It is included by Theme.cpp. @@ -7,4801 +7,2460 @@ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,184, 0,0,3,68,8,6,0,0,0,194,5,58,248,0,0,0,4,115,66,73, 84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236, - 157,121,124,83,85,218,199,127,231,230,38,93,104,41,5,161,32,45,75,23, - 192,130,131,80,16,90,144,2,50,56,227,40,35,188,3,163,226,232,188,234, - 32,130,20,89,10,130,104,91,81,246,181,88,197,125,25,80,95,156,1,84, - 68,5,5,10,88,80,40,184,64,5,218,134,165,101,107,233,150,182,217,238, - 114,222,63,146,155,222,164,55,109,218,38,93,240,126,63,159,124,146,60,231, - 230,60,231,220,180,231,151,231,172,196,176,179,47,133,138,138,74,171,32,100, - 226,185,150,46,130,138,202,77,3,11,0,154,63,158,96,52,44,203,18,66, - 8,0,2,128,10,130,64,5,158,231,131,131,131,105,117,117,53,169,43,93, - 18,201,246,15,156,37,183,14,236,58,184,36,191,52,207,82,101,53,52,180, - 48,242,124,148,210,199,46,74,60,177,111,121,230,96,217,251,123,247,45,207, - 220,221,208,124,188,85,158,214,148,79,59,63,191,160,17,253,250,37,198,116, - 235,22,203,106,52,254,87,203,202,174,30,207,207,207,210,95,191,158,83,87, - 62,191,228,252,66,255,16,251,135,70,149,203,93,121,14,69,71,199,241,12, - 243,152,64,72,12,8,252,0,0,20,22,13,165,249,172,40,110,188,43,47, - 47,215,211,122,1,192,184,148,17,61,244,123,174,154,245,71,244,69,0,16, - 25,31,217,37,114,124,55,255,111,211,190,191,212,144,114,253,121,85,98,200, - 249,111,175,249,3,64,239,113,93,205,95,45,200,172,144,219,207,236,57,123, - 29,0,250,141,239,27,38,79,151,232,55,190,111,215,222,227,186,154,92,237, - 238,252,29,136,140,140,177,48,204,124,35,195,196,17,29,219,129,130,48,84, - 16,171,69,171,245,231,48,96,253,93,249,249,217,74,249,168,168,168,120,7, - 6,0,88,150,237,80,92,102,140,61,155,87,50,236,76,110,241,240,223,206, - 21,15,203,213,151,196,86,85,85,183,55,153,140,26,150,101,219,187,75,55, - 26,141,78,255,212,177,247,223,54,225,153,172,233,167,226,30,25,52,195,91, - 133,28,187,40,113,229,139,133,207,233,1,12,114,73,122,245,197,194,231,206, - 140,93,148,152,228,45,95,117,49,168,239,200,84,119,105,132,48,157,61,177, - 1,64,135,224,91,106,217,149,108,18,143,223,191,208,173,223,118,254,254,65, - 169,83,166,188,252,219,166,77,133,239,207,154,181,107,206,132,9,171,166,223, - 115,207,75,47,76,158,252,214,127,23,44,56,253,214,211,79,103,245,239,209, - 99,132,187,207,159,188,122,2,75,127,123,145,110,219,251,127,77,110,92,15, - 71,71,105,247,247,233,243,186,69,163,121,153,80,90,228,47,240,211,198,157, - 57,59,118,220,153,179,99,253,5,254,113,66,233,53,139,70,243,234,254,62, - 125,54,28,142,142,10,244,36,207,113,41,35,122,248,5,183,255,119,212,248, - 94,107,37,91,212,248,94,107,253,130,219,255,123,92,202,136,30,158,150,237, - 95,223,141,39,12,19,240,100,143,145,225,111,158,217,115,246,186,36,82,14, - 251,136,240,141,210,181,61,70,132,111,100,152,128,39,255,245,221,120,167,191, - 237,30,35,195,223,80,178,187,114,188,91,183,192,125,125,250,164,115,44,251, - 170,142,144,130,142,140,249,254,7,78,229,68,79,60,117,58,178,147,213,122, - 111,39,134,57,99,97,217,151,247,245,233,243,250,241,184,56,173,167,117,80, - 81,81,105,24,44,0,228,95,50,68,109,254,148,127,248,90,137,112,27,129, - 168,163,148,88,131,252,74,114,166,254,73,248,48,225,206,144,188,139,151,13, - 189,94,253,132,127,244,90,137,16,43,79,127,248,30,254,195,248,59,99,157, - 34,4,42,82,4,135,5,71,220,147,118,119,198,160,135,7,206,248,110,217, - 129,185,231,15,95,216,211,216,2,142,93,148,120,102,228,204,248,190,0,16, - 247,200,32,0,56,177,111,121,230,224,177,139,18,239,29,57,51,190,183,169, - 194,140,184,71,6,109,4,208,125,223,242,204,133,74,121,208,146,57,20,149, - 86,192,42,212,237,140,23,81,81,100,196,188,117,63,164,189,243,121,110,170, - 107,242,210,105,239,167,220,55,47,186,150,61,38,98,192,12,45,235,223,37, - 231,252,241,212,186,108,18,143,222,251,204,204,11,87,46,20,125,126,232,253, - 215,234,178,73,76,26,253,175,148,119,191,88,89,43,159,238,29,59,134,239, - 94,178,100,111,88,135,14,253,74,42,43,81,101,54,131,227,121,136,212,166, - 85,12,33,184,45,60,60,126,227,227,143,31,126,117,247,238,228,157,63,254, - 184,166,86,157,41,133,208,81,192,79,186,99,120,241,224,243,116,156,223,61, - 24,53,108,84,131,35,186,195,209,81,33,86,13,251,6,1,173,242,23,248, - 105,35,243,242,11,228,233,35,243,242,175,30,142,142,90,199,10,226,58,171, - 70,243,134,85,163,121,251,112,116,212,147,35,243,242,141,238,242,28,150,52, - 44,172,115,223,238,207,119,189,45,44,34,103,215,111,87,36,59,195,50,108, - 159,187,163,35,174,253,118,253,249,97,73,195,94,252,33,253,135,235,245,149, - 239,194,81,177,79,244,93,189,254,118,57,187,176,66,209,126,226,242,85,201, - 230,31,226,175,235,62,184,251,223,244,89,231,63,31,62,123,120,217,209,141, - 71,111,0,128,127,176,159,95,247,184,240,191,229,29,210,239,2,112,86,201, - 207,241,110,221,2,13,193,193,111,139,128,46,52,56,248,190,33,217,217,156, - 148,150,217,175,71,55,98,165,125,198,228,230,190,188,191,79,159,91,40,176, - 172,162,170,234,223,199,35,35,159,26,162,215,87,40,229,167,162,162,210,120, - 24,0,184,114,181,56,164,224,74,89,108,169,177,243,240,50,83,231,248,146, - 234,14,195,47,95,46,234,95,80,80,216,158,227,56,205,213,171,69,237,11, - 174,148,245,119,77,47,44,188,220,158,227,56,70,158,33,165,20,34,47,130, - 231,68,116,138,236,216,255,193,247,254,231,155,169,91,255,190,63,172,127,151, - 193,202,69,112,143,36,110,166,10,51,76,21,102,148,228,151,156,151,210,246, - 45,207,220,125,56,227,200,108,233,125,220,35,131,22,140,93,148,248,176,98, - 70,149,86,8,55,76,48,94,171,70,245,213,42,183,143,138,107,85,56,119, - 161,28,215,74,76,138,217,84,153,42,107,217,250,245,26,48,227,223,105,7, - 51,170,140,229,14,91,84,120,159,39,92,109,114,40,5,158,153,178,44,35, - 225,246,123,158,144,219,146,254,190,34,99,244,224,9,181,34,95,37,191,237, - 252,253,131,118,47,89,178,183,83,112,112,191,130,27,55,112,195,96,64,181, - 197,2,43,207,131,23,4,240,130,0,43,207,195,42,8,32,0,254,57,102, - 204,234,81,177,177,79,214,42,11,224,248,190,44,93,76,248,170,227,103,56, - 248,195,193,6,71,115,28,163,89,13,80,14,148,222,224,24,102,250,254,62, - 49,43,246,247,137,121,101,95,223,62,31,236,239,19,179,118,127,159,152,87, - 56,134,121,145,99,152,231,9,165,151,40,136,142,99,52,43,220,229,23,59, - 57,182,99,88,239,78,239,116,237,215,249,175,172,31,27,106,43,105,77,169, - 89,63,54,180,107,191,206,127,13,235,221,233,157,216,201,177,29,235,41,158, - 174,253,45,237,222,110,31,22,52,0,4,68,201,78,100,118,66,64,218,135, - 5,13,8,10,13,124,247,232,198,163,53,93,237,118,123,251,91,218,189,13, - 64,167,228,168,50,40,104,25,37,84,208,64,60,91,89,101,120,221,41,81, - 240,27,108,213,106,231,28,140,142,142,29,115,238,220,141,246,193,193,51,9, - 165,101,6,150,93,93,79,249,85,84,84,26,1,3,0,2,207,107,64,57, - 29,68,179,63,68,179,63,40,231,79,41,167,19,4,94,35,138,34,17,4, - 65,49,157,23,56,70,20,197,218,185,82,10,136,20,162,32,66,224,69,68, - 12,237,62,250,241,157,143,102,223,191,230,222,15,131,187,6,133,123,82,176, - 177,139,18,87,74,226,230,142,125,203,51,211,179,183,156,156,42,51,77,81, - 188,208,42,192,98,228,80,105,228,80,101,226,221,62,12,213,60,42,141,28, - 44,156,66,157,108,21,115,122,215,175,215,128,25,95,172,253,37,35,247,82, - 46,56,222,10,0,232,216,190,211,248,237,43,143,101,228,21,228,193,202,91, - 20,115,17,4,192,79,235,135,199,254,146,156,113,91,175,193,227,1,64,20, - 1,29,171,195,19,19,22,103,36,14,114,21,185,218,122,147,60,97,194,115, - 93,59,116,232,119,181,172,12,85,102,51,4,81,180,221,119,215,18,83,10, - 16,2,157,86,139,191,197,199,175,10,242,247,239,162,112,145,211,247,213,80, - 118,223,118,219,83,2,33,183,106,5,113,51,64,130,4,134,137,23,24,230, - 78,129,97,226,69,66,34,4,134,25,36,183,129,144,48,63,129,127,72,32, - 164,239,161,232,232,24,215,252,98,39,199,6,245,26,18,177,165,247,93,189, - 255,192,250,107,195,32,42,68,222,162,0,214,95,27,214,251,174,222,127,232, - 53,36,98,75,236,228,216,32,119,229,187,103,233,184,55,122,14,239,17,3, - 208,64,247,118,103,1,5,104,96,207,225,61,98,238,89,58,238,13,231,220, - 220,217,109,99,110,60,33,183,133,24,170,158,2,0,158,144,200,125,125,250, - 212,136,28,165,28,37,52,80,32,100,10,0,12,201,206,230,88,81,220,36, - 18,114,235,254,152,152,135,220,149,95,69,69,165,113,72,209,87,99,39,63, - 212,251,57,42,82,8,156,8,129,19,208,127,194,109,255,152,254,237,147,121, - 163,231,223,181,76,23,164,107,95,207,71,39,123,82,128,125,203,51,63,202, - 222,114,114,21,0,196,61,50,232,175,99,23,37,238,84,44,135,189,241,167, - 148,186,125,128,82,187,70,184,11,96,106,130,213,126,189,6,204,216,181,238, - 151,140,139,87,139,80,109,174,132,150,245,67,104,112,167,241,153,155,245,159, - 151,87,114,126,101,149,197,14,159,181,202,2,0,32,232,24,18,230,55,231, - 161,213,159,223,30,53,108,60,67,108,246,0,255,32,60,49,97,145,130,200, - 213,208,206,207,47,232,241,113,227,158,185,81,89,137,106,139,197,173,31,57, - 44,195,32,52,40,40,116,88,76,204,180,186,174,163,98,237,188,222,255,246, - 189,58,29,240,26,205,56,86,20,143,223,149,151,247,189,86,20,22,104,68, - 122,10,20,181,149,146,66,208,136,244,236,152,179,231,158,28,153,151,207,177, - 162,120,200,8,204,151,95,210,51,177,167,127,207,65,221,183,68,141,142,140, - 214,5,106,35,220,126,21,182,252,160,11,212,70,68,141,142,140,238,57,168, - 251,150,158,137,61,253,93,47,25,187,104,212,67,145,137,189,135,178,58,54, - 76,94,38,185,93,228,197,218,183,144,66,100,117,108,88,100,98,239,161,99, - 23,141,122,168,94,59,0,170,209,204,102,41,61,100,123,67,52,0,32,18, - 18,125,48,58,122,142,252,58,129,97,70,238,143,137,73,5,128,81,121,121, - 57,26,81,60,78,9,25,83,71,77,85,84,84,26,1,83,255,37,222,129, - 82,10,129,19,192,176,140,223,240,105,119,46,122,250,187,39,243,6,79,189, - 99,134,70,167,241,115,189,118,236,162,68,189,52,190,150,189,229,228,201,236, - 45,39,87,101,111,57,121,246,194,145,75,138,125,126,251,150,103,46,204,222, - 114,242,164,253,237,95,125,85,135,160,64,155,38,215,136,91,49,12,213,165, - 8,10,12,193,128,168,59,99,63,76,61,188,165,172,82,240,43,53,20,67, - 80,138,58,92,96,8,131,14,193,157,253,230,63,178,97,75,207,110,183,197, - 242,2,7,2,226,16,185,49,113,15,40,138,220,136,126,253,18,89,134,9, - 169,52,153,28,227,109,238,144,126,129,48,12,3,127,173,22,125,187,119,159, - 208,176,90,219,120,62,123,129,219,137,40,2,67,58,51,148,30,3,128,145, - 121,249,70,173,40,188,164,21,133,207,64,81,211,183,74,97,214,138,194,238, - 49,231,206,61,45,153,88,42,190,99,212,104,226,28,215,196,66,215,111,92, - 204,135,209,163,163,122,249,7,251,69,215,41,110,53,249,194,63,216,47,58, - 122,116,84,175,126,227,98,62,68,108,77,215,225,208,103,226,186,117,29,208, - 117,102,208,45,237,162,37,225,38,0,237,255,88,108,136,220,206,104,24,74, - 20,126,170,81,145,34,232,150,118,209,93,7,116,157,217,255,177,216,16,251, - 111,16,39,251,208,103,226,186,213,220,7,38,138,209,88,222,25,114,245,170, - 17,132,10,0,64,9,213,88,52,154,63,30,140,140,188,219,145,47,161,12, - 175,33,163,14,68,71,47,0,0,6,56,70,9,113,59,201,72,69,69,165, - 113,176,205,237,80,20,68,16,17,240,15,241,239,60,62,229,238,140,161,255, - 28,60,119,255,234,67,139,206,237,201,253,84,118,153,67,220,100,203,2,20, - 39,144,52,39,97,29,187,33,58,124,192,140,207,86,215,136,155,72,69,248, - 235,2,48,125,82,218,100,63,173,63,60,21,55,0,32,132,128,97,24,132, - 180,235,216,185,91,167,136,201,213,38,3,8,33,14,145,123,106,98,74,70, - 112,96,7,84,25,157,87,92,196,116,235,22,107,178,90,193,9,130,98,183, - 100,45,63,176,181,204,26,91,20,23,219,136,170,131,111,199,227,68,240,143, - 88,114,248,57,58,66,24,133,63,39,222,235,144,4,10,18,68,128,98,233, - 253,200,188,252,27,0,54,101,70,71,223,224,53,154,41,20,208,234,4,97, - 253,168,188,188,239,228,121,142,204,203,191,186,115,64,255,14,0,15,0,184, - 247,137,123,199,246,26,210,61,194,47,196,239,118,208,6,244,42,80,16,191, - 16,191,219,163,70,245,54,221,27,120,239,88,32,31,0,208,99,96,143,49, - 93,110,235,28,3,10,249,143,40,190,223,168,126,99,21,236,238,242,246,235, - 114,91,231,152,126,230,126,99,249,74,51,239,106,183,24,185,49,128,109,158, - 21,37,212,47,241,204,165,171,246,244,154,104,146,80,127,171,86,59,71,43, - 138,7,228,89,139,12,115,71,102,76,204,157,68,16,202,41,195,4,123,92, - 95,21,21,21,143,104,118,129,3,236,67,62,156,0,145,19,161,13,208,70, - 141,158,127,215,182,224,46,237,82,1,229,201,29,173,5,65,16,176,113,238, - 23,25,250,203,133,48,89,170,0,106,139,76,9,33,176,242,102,112,188,5, - 132,16,143,186,12,109,216,218,112,94,228,80,105,180,77,162,35,246,80,130, - 82,10,147,165,26,255,51,246,169,12,253,229,211,78,159,98,53,26,127,139, - 108,182,164,167,80,91,190,1,13,250,144,29,193,254,125,85,161,10,59,44, - 255,193,27,219,55,83,96,189,211,53,135,162,163,99,40,208,91,122,79,128, - 28,134,210,107,12,165,249,0,52,7,163,163,199,219,147,180,12,232,137,145, - 121,249,87,65,136,163,23,65,52,91,159,39,12,25,76,121,202,64,83,115, - 47,234,173,23,165,160,2,101,8,67,6,139,102,235,243,146,221,90,105,94, - 76,40,233,34,125,71,246,66,89,172,21,166,218,246,58,242,38,148,116,177, - 86,152,22,51,26,114,169,150,189,210,188,24,10,177,23,101,152,91,228,239, - 9,192,9,132,68,201,109,2,208,142,161,116,8,52,154,139,30,85,84,69, - 69,165,65,52,91,23,165,4,21,41,120,11,15,83,153,9,229,133,229,200, - 207,212,159,216,57,251,139,49,217,91,126,74,243,52,143,177,139,18,79,216, - 31,103,198,46,74,92,57,118,81,226,137,145,51,227,165,53,114,231,235,252, - 112,19,184,90,82,136,39,94,73,156,121,181,228,34,120,129,135,104,31,210, - 225,120,43,42,170,74,97,229,45,16,169,232,177,192,81,42,130,231,173,48, - 84,149,194,108,53,130,130,66,164,34,4,65,64,169,225,58,78,158,61,132, - 13,31,39,207,36,46,95,211,149,178,178,171,130,40,122,28,226,72,165,49, - 91,173,40,54,24,174,214,121,177,27,164,239,139,156,101,240,88,200,227,120, - 106,210,244,154,89,135,160,70,10,116,21,129,59,56,141,102,154,149,213,60, - 103,101,53,207,89,88,205,122,129,33,125,57,13,115,175,100,179,178,154,231, - 172,26,205,211,34,72,236,225,232,168,8,145,23,170,165,124,140,229,198,23, - 47,28,185,116,197,100,48,11,84,160,158,4,167,160,20,160,2,133,201,96, - 22,46,28,185,116,197,88,110,124,81,74,171,186,81,189,244,250,185,98,51, - 21,104,205,87,66,225,95,85,92,245,82,45,187,251,188,233,245,115,197,230, - 170,226,170,151,164,168,204,201,126,163,122,169,227,62,80,98,201,140,138,138, - 176,189,22,11,29,25,137,168,100,68,113,155,150,210,205,242,252,253,68,241, - 192,232,188,188,215,168,40,106,40,165,213,80,81,81,241,42,205,55,6,39, - 194,33,108,21,133,6,92,56,122,233,244,222,165,251,167,124,245,252,222,184, - 162,223,138,15,184,92,254,25,0,196,61,50,104,208,216,69,137,43,149,242, - 27,57,51,190,195,200,153,241,125,71,206,140,95,16,247,200,160,65,246,46, - 205,243,251,150,103,70,250,170,14,22,171,9,215,74,46,189,246,252,235,143, - 204,44,42,45,180,136,162,8,66,8,12,85,165,216,252,223,148,79,79,235, - 143,21,11,2,15,134,241,228,182,82,240,2,135,203,197,23,240,195,233,239, - 138,127,56,245,237,167,58,214,15,162,40,162,184,236,50,142,254,186,215,242, - 217,193,247,102,158,60,119,248,181,240,48,231,42,101,231,231,103,241,130,0, - 198,195,8,7,0,120,65,64,89,85,21,46,22,21,101,53,176,218,0,0, - 49,143,96,82,224,20,108,122,226,117,50,98,216,72,39,199,26,145,22,136, - 132,12,78,204,203,251,84,39,8,139,52,162,152,237,102,146,137,200,10,226, - 65,63,65,88,48,42,47,239,59,158,48,143,81,142,251,89,74,62,184,58, - 235,80,85,105,213,172,139,71,46,93,54,27,204,2,21,196,58,69,206,38, - 52,34,204,6,179,112,241,200,165,203,85,165,85,179,14,174,206,58,36,165, - 95,253,245,218,174,226,179,197,31,86,21,87,241,168,153,60,163,217,191,252, - 144,146,93,161,210,20,85,197,85,124,241,217,226,15,247,47,63,180,11,128, - 198,213,126,245,215,107,187,164,203,25,74,115,69,134,121,204,86,56,219,36, - 19,66,137,200,82,225,219,49,185,185,31,139,148,134,57,108,2,61,24,24, - 18,242,42,0,80,134,25,204,82,90,0,21,21,21,175,34,181,196,141,221, - 197,162,222,207,81,10,8,86,1,230,10,19,12,151,37,97,219,55,229,203, - 5,95,15,40,56,86,248,169,210,103,246,45,207,124,32,123,203,73,73,228, - 220,174,111,147,214,199,1,64,73,126,9,0,40,230,231,61,108,213,189,122, - 227,226,107,11,51,30,156,80,92,118,197,194,243,28,44,86,19,10,138,242, - 114,86,124,240,204,232,220,75,191,20,243,60,95,79,62,0,199,115,40,44, - 210,227,208,207,187,139,63,250,102,195,232,42,147,33,199,79,27,128,235,165, - 5,56,242,235,30,203,23,135,63,152,112,241,218,185,215,0,32,208,223,121, - 120,70,127,253,122,206,241,188,188,35,0,0,66,108,93,143,117,148,152,82, - 10,131,201,132,203,165,165,56,85,80,240,78,157,53,116,147,209,235,143,191, - 65,238,27,119,191,162,162,178,130,112,144,103,152,33,135,162,163,99,239,202, - 203,203,29,115,46,55,153,21,197,195,181,174,19,197,195,163,115,115,83,239, - 202,203,203,57,28,29,117,11,207,48,35,186,56,247,115,242,153,123,15,127, - 83,85,106,154,121,241,232,165,43,230,74,179,72,69,81,177,110,20,0,21, - 69,152,43,205,226,197,163,151,174,84,149,154,102,102,238,61,252,13,164,1, - 61,0,103,190,56,87,93,86,92,181,236,210,143,133,167,173,38,43,181,223, - 39,2,128,186,218,149,242,183,154,172,244,210,143,133,167,203,138,171,150,217, - 111,13,113,181,159,249,226,156,35,242,210,10,194,7,2,195,140,200,140,138, - 138,144,38,153,48,148,230,128,104,62,150,231,205,80,225,228,152,220,220,212, - 33,217,217,220,193,232,232,88,129,97,134,0,248,94,249,206,171,168,168,52, - 22,73,224,4,74,97,21,68,193,44,138,212,44,10,130,153,82,88,1,8, - 176,253,175,43,166,19,16,183,139,166,40,165,54,97,43,55,161,226,178,1, - 151,127,186,82,144,185,254,240,204,186,132,205,133,109,210,139,184,71,6,109, - 173,107,59,174,146,252,18,92,56,114,233,172,187,157,76,192,139,224,5,17, - 86,78,4,87,215,67,176,93,231,9,213,38,195,158,5,175,78,158,112,241, - 218,89,131,32,10,160,148,130,23,184,156,212,183,159,24,157,87,248,75,113, - 93,161,135,40,138,184,122,227,34,14,255,188,187,120,239,209,255,27,93,105, - 172,200,97,53,90,20,151,95,193,225,159,118,27,190,58,242,241,132,146,138, - 235,142,221,95,148,34,181,141,95,126,153,108,230,56,200,215,33,214,90,201, - 5,219,247,80,101,54,227,66,81,17,78,234,245,123,175,148,150,126,163,84, - 38,249,247,229,202,63,199,253,111,157,161,226,189,191,253,246,134,134,210,11, - 60,195,204,58,28,29,21,2,0,44,21,95,209,10,194,23,160,168,100,40, - 189,198,10,226,215,163,115,109,187,195,28,142,142,210,114,140,102,153,134,210, - 11,119,229,229,57,237,199,136,108,112,153,123,51,191,49,25,204,115,46,28, - 45,184,102,54,152,69,165,165,11,84,164,48,27,204,226,133,163,5,215,76, - 6,243,156,204,189,153,223,32,27,156,235,117,199,51,126,188,104,174,50,207, - 189,120,172,208,32,88,120,82,203,254,99,161,129,51,215,250,24,4,11,79, - 46,30,43,52,152,171,204,115,143,103,252,232,24,35,19,172,60,148,236,0, - 112,87,126,126,54,67,233,5,145,101,82,64,137,134,21,104,78,251,202,202, - 231,198,156,59,119,67,186,134,136,40,101,120,241,77,0,56,30,25,25,194, - 51,204,44,141,40,94,24,147,155,235,36,130,42,42,42,77,135,1,0,13, - 35,84,248,51,69,57,168,248,238,168,88,190,247,8,12,251,142,6,104,43, - 78,235,180,90,3,199,113,2,192,27,252,153,162,211,110,210,157,21,129,2, - 2,47,194,98,176,192,112,197,46,108,235,14,207,252,236,217,47,99,242,246, - 233,107,109,67,229,14,249,250,54,0,136,123,100,208,198,177,139,18,239,149, - 222,155,42,204,189,1,39,113,235,231,46,175,138,34,35,206,93,50,32,183, - 160,2,231,10,12,110,31,185,5,149,184,82,108,2,207,43,139,19,47,56, - 71,102,213,166,202,61,207,191,254,143,248,194,98,125,177,52,87,130,23,184, - 156,212,183,158,24,93,88,84,99,115,165,218,92,133,35,191,126,83,188,231, - 232,182,209,213,230,202,28,0,48,90,170,144,245,203,215,197,187,14,255,59, - 190,212,112,221,105,107,51,87,191,0,112,234,210,165,239,95,221,189,59,185, - 202,100,130,197,106,133,32,218,198,254,68,233,33,138,224,120,30,165,85,85, - 56,119,229,10,178,243,243,243,15,156,62,253,104,173,140,92,190,47,75,158, - 181,81,91,117,105,69,113,45,37,8,228,24,205,138,67,209,209,177,35,243, - 242,185,196,220,188,245,90,81,248,70,43,136,27,70,231,230,174,2,128,67, - 209,209,177,28,163,73,167,132,180,215,138,130,242,143,150,108,112,223,125,124, - 96,151,177,220,60,231,226,15,5,215,44,85,86,234,170,222,150,42,43,189, - 248,67,193,53,99,185,121,206,119,31,31,216,165,36,110,18,251,151,29,60, - 80,125,195,248,124,113,94,137,85,46,150,251,151,29,60,80,113,213,144,90, - 146,95,202,81,217,95,49,21,129,226,188,18,107,197,181,202,212,253,203,14, - 30,168,177,83,20,231,150,112,213,55,140,207,203,237,114,218,7,7,39,137, - 96,130,68,6,221,53,130,240,241,144,171,87,141,53,159,23,207,179,162,248, - 127,163,245,250,220,131,209,209,177,6,150,93,1,130,64,134,144,181,74,121, - 169,168,168,52,13,22,0,58,119,212,229,63,48,138,255,224,218,245,202,246, - 130,32,48,132,48,98,251,246,193,134,30,221,67,46,136,162,104,238,210,209, - 239,194,3,163,248,15,149,210,169,40,58,181,190,188,69,64,229,181,42,20, - 157,189,97,56,249,241,79,169,185,223,229,191,38,242,162,242,150,30,245,96, - 143,200,46,247,138,239,49,227,194,145,75,58,233,228,0,251,210,1,218,43, - 190,199,249,11,71,46,125,234,54,114,179,51,119,221,15,105,215,74,76,176, - 114,34,234,235,85,229,120,138,243,87,42,15,40,165,93,47,45,172,101,227, - 5,46,103,195,39,11,70,119,8,234,52,90,110,91,255,73,178,147,77,206, - 197,171,231,138,78,233,127,24,93,109,54,228,212,101,171,203,47,0,236,252, - 241,199,53,165,85,85,229,147,227,227,87,133,6,5,133,250,107,181,208,48, - 12,68,0,22,171,21,165,213,213,184,82,82,130,19,122,253,222,3,167,79, - 63,106,230,184,107,174,121,136,130,136,202,107,85,168,212,87,99,148,255,104, - 252,239,63,31,111,212,162,255,145,121,121,231,15,71,71,167,114,12,51,207, - 162,209,172,58,16,19,115,156,161,244,4,40,46,2,208,30,140,142,254,139, - 72,200,80,11,195,12,209,80,122,69,39,240,79,141,204,203,119,43,74,200, - 131,101,255,39,251,63,187,231,145,113,154,139,89,151,150,83,192,81,118,10, - 92,187,152,117,201,192,85,113,139,246,127,178,255,51,228,161,190,191,47,122, - 37,239,202,22,255,64,237,8,222,42,235,63,142,129,182,232,98,209,123,65, - 29,2,238,228,172,124,149,100,182,84,91,139,75,243,75,119,22,93,184,254, - 30,100,127,48,156,145,187,94,154,95,186,243,74,222,149,45,112,243,135,52, - 36,59,155,59,30,25,249,148,129,101,87,91,181,218,69,251,99,98,142,51, - 192,49,216,151,81,80,81,180,236,143,137,73,181,50,204,16,141,40,94,96, - 64,82,19,207,157,243,217,196,40,21,149,223,51,44,0,132,119,239,90,126, - 203,45,161,85,102,115,95,34,8,2,33,132,80,150,101,105,128,191,63,31, - 22,22,70,75,74,74,12,161,29,67,115,148,210,187,118,237,74,13,59,251, - 58,50,172,186,94,89,113,40,253,251,212,95,183,159,94,207,155,249,6,31, - 153,227,202,190,229,153,233,0,210,229,209,155,157,147,239,78,248,183,71,251, - 91,190,171,176,113,114,99,152,183,113,146,98,227,47,8,124,78,73,133,243, - 177,52,74,54,137,67,63,237,170,21,201,42,217,234,243,11,0,7,115,114, - 222,62,161,215,127,62,44,38,102,90,223,238,221,39,132,6,5,197,82,74, - 3,110,24,12,87,47,20,21,101,157,42,40,120,199,93,183,36,0,232,68, - 29,98,47,223,142,233,83,159,38,239,225,67,119,151,121,196,200,188,188,243, - 0,158,201,140,142,126,72,100,152,17,86,134,121,2,64,59,0,32,64,37, - 67,105,177,86,16,182,38,230,229,121,214,29,151,7,203,233,183,207,236,140, - 122,168,151,201,80,80,238,80,249,226,156,235,91,219,71,116,200,204,255,248, - 194,55,40,172,87,220,0,0,57,91,126,171,232,52,187,227,10,83,89,85, - 48,0,132,135,135,107,181,188,150,203,217,250,155,181,211,45,29,87,152,202, - 170,28,219,120,149,156,43,126,55,32,52,200,152,179,229,55,167,13,144,111, - 156,43,126,35,32,52,168,210,213,238,138,125,227,228,105,95,197,198,62,85, - 173,213,142,19,25,50,90,4,9,178,221,7,209,168,17,104,129,142,210,47, - 198,157,61,91,107,187,47,21,21,21,239,65,212,51,168,84,84,90,15,234, - 129,167,42,42,222,163,217,215,193,169,168,168,168,168,168,52,7,44,0,188, - 149,63,141,33,132,176,144,157,216,13,74,41,165,148,159,55,111,30,93,187, - 118,45,169,43,93,126,162,241,188,69,115,7,91,171,185,188,77,233,155,188, - 126,162,247,186,109,107,78,204,157,50,127,176,236,253,189,115,167,204,87,79, - 244,6,144,52,107,86,80,199,160,160,196,118,126,126,177,132,16,127,11,199, - 93,45,55,26,179,86,175,91,87,231,137,222,133,151,11,104,120,247,8,175, - 158,232,61,53,33,33,22,192,223,0,68,3,142,237,176,44,0,244,0,222, - 221,154,149,117,201,147,124,36,22,174,88,216,163,162,184,194,188,121,237,230, - 34,0,152,62,111,122,151,144,206,33,254,43,159,91,217,160,19,189,151,172, - 91,18,82,81,92,17,176,105,249,166,107,174,246,242,162,114,255,87,87,188, - 122,29,0,158,121,238,153,176,14,93,58,152,95,158,251,178,83,87,228,172, - 69,179,186,134,116,14,49,185,218,221,249,251,199,136,17,61,68,81,124,28, - 132,68,82,74,253,0,128,16,98,1,144,7,134,249,207,214,195,135,115,148, - 242,81,81,81,241,14,12,0,16,66,58,112,188,24,107,54,113,195,76,38, - 110,184,201,196,13,51,153,185,88,65,16,218,175,91,183,78,67,8,105,95, - 71,186,211,63,117,80,88,208,132,94,35,122,158,90,188,108,177,215,78,244, - 94,183,109,205,202,117,219,214,40,158,232,189,110,219,154,51,235,182,173,105, - 150,19,189,199,141,185,39,213,93,90,64,64,64,173,13,155,148,108,0,240, - 236,236,57,181,236,74,54,137,21,47,173,115,235,55,105,214,172,160,141,175, - 188,242,242,232,1,3,10,7,246,234,181,171,119,215,174,171,122,118,238,252, - 82,204,173,183,190,53,36,42,234,244,27,171,86,101,61,55,127,190,219,19, - 189,115,47,229,226,205,47,222,160,71,179,143,54,185,113,157,154,144,192,78, - 77,72,88,10,224,57,216,38,85,44,216,154,149,245,247,173,89,89,127,7, - 48,23,192,117,0,203,167,38,36,44,153,154,144,80,107,231,127,37,82,54, - 164,244,8,233,28,242,175,110,81,221,28,223,125,183,168,110,131,66,58,135, - 252,43,101,67,138,199,39,122,191,246,209,107,76,64,112,192,61,93,122,118, - 25,161,100,15,235,21,54,92,178,133,245,10,27,30,16,28,112,207,107,31, - 189,230,212,195,209,165,103,151,17,74,118,87,30,75,76,244,159,154,144,240, - 162,72,233,114,145,144,235,162,86,59,247,163,35,71,254,254,209,145,35,127, - 103,57,110,129,8,20,67,20,159,155,154,144,176,52,49,49,177,69,182,203, - 83,81,249,61,192,0,128,217,34,68,93,47,17,31,187,82,66,23,95,45, - 161,47,94,45,161,139,139,202,248,71,205,102,174,23,0,127,139,85,232,117, - 189,68,124,212,53,221,100,182,246,162,174,251,89,82,128,245,99,35,58,247, - 237,148,177,242,131,21,167,146,95,152,63,94,193,175,199,172,219,182,230,12, - 128,5,176,239,113,184,110,219,154,19,246,231,123,237,182,190,0,54,174,219, - 182,70,113,199,19,0,216,191,39,131,238,223,189,137,238,223,149,94,247,227, - 139,116,186,247,191,235,233,198,213,47,166,42,229,243,143,191,253,43,69,201, - 62,108,104,252,140,248,97,35,103,214,103,147,8,239,210,107,230,75,47,172, - 152,81,159,77,162,91,167,30,138,126,231,61,251,108,248,136,126,253,142,245, - 236,220,249,121,94,16,66,204,28,7,11,199,193,202,243,224,120,30,188,40, - 34,40,32,32,190,127,68,196,225,165,207,63,63,95,41,15,0,48,9,38, - 28,185,240,61,222,249,236,109,122,54,247,108,163,132,110,106,66,66,16,108, - 139,182,89,216,132,237,245,173,89,89,142,72,105,107,86,214,13,0,239,1, - 120,2,64,71,0,43,235,19,185,69,175,44,10,11,8,245,123,74,23,200, - 78,213,176,26,199,181,26,86,227,175,11,100,167,6,132,250,61,181,232,149, - 69,97,158,148,175,248,70,81,164,174,29,59,147,245,99,59,42,218,117,26, - 135,157,213,105,58,234,218,177,51,139,111,20,57,109,33,195,250,177,138,118, - 57,143,37,38,250,243,28,183,18,148,118,43,212,106,31,251,56,43,235,245, - 143,51,51,111,0,192,67,137,137,183,8,126,126,61,63,206,202,122,157,213, - 106,147,64,169,166,187,213,186,126,114,98,162,219,179,236,84,84,84,26,15, - 3,0,28,207,133,152,57,62,214,42,106,135,91,69,109,188,69,96,135,155, - 45,124,127,142,227,218,83,74,53,28,199,181,55,115,124,127,215,116,158,227, - 219,83,81,172,245,107,150,82,10,42,2,218,64,109,255,91,7,118,251,102, - 217,219,175,236,159,251,220,156,6,159,232,109,23,183,190,50,147,99,58,181, - 189,107,114,182,44,109,193,186,109,107,148,79,244,230,69,80,171,8,193,34, - 212,249,224,45,60,170,141,28,44,86,229,197,222,188,80,251,148,128,248,59, - 227,103,60,251,175,69,25,188,80,51,227,125,200,224,161,79,184,218,228,80, - 0,189,110,237,155,177,228,185,212,39,228,182,222,183,246,203,120,113,241,75, - 181,68,78,201,111,210,172,89,65,119,198,196,236,213,177,108,63,147,213,10, - 43,207,219,214,194,217,215,195,217,190,131,154,125,49,195,59,117,90,253,194, - 194,133,181,78,244,6,106,190,175,10,107,5,118,255,188,11,91,190,220,210, - 24,145,91,12,128,3,80,10,224,225,169,9,9,201,83,19,18,230,78,77, - 72,88,51,53,33,97,209,212,132,132,185,0,102,1,152,1,160,16,182,19, - 177,23,184,203,108,78,202,156,142,193,183,6,63,201,250,177,79,64,195,132, - 214,186,64,195,132,178,126,236,19,193,183,6,63,57,39,101,78,157,39,122, - 207,120,118,70,128,46,196,111,6,195,50,35,228,39,122,59,219,101,171,233, - 9,33,12,203,140,208,133,248,205,152,241,236,140,154,205,169,9,148,237,50, - 56,171,117,62,40,21,64,72,110,119,142,91,42,79,35,86,107,44,21,132, - 233,15,143,28,25,249,65,102,102,121,161,78,247,34,33,164,92,103,181,46, - 174,171,252,42,42,42,141,195,38,78,20,26,80,170,3,21,253,65,69,127, - 128,250,83,80,29,5,213,80,74,9,224,54,189,238,73,42,246,3,68,3, - 58,248,143,142,24,18,158,253,82,70,218,135,179,231,38,121,116,162,183,61, - 34,235,91,215,53,115,167,204,79,7,80,255,137,222,246,211,170,121,129,122, - 240,16,33,186,221,159,208,217,30,127,103,252,140,121,211,95,204,168,50,85, - 59,14,10,141,234,29,53,126,238,244,231,51,170,77,213,160,74,167,157,195, - 182,231,19,67,52,136,8,139,202,88,56,127,241,120,41,107,134,48,136,8, - 139,81,16,185,218,229,137,234,218,245,57,63,173,182,159,153,227,106,78,243, - 118,119,162,55,108,231,193,117,11,13,93,149,52,107,86,237,19,189,101,5, - 107,224,1,5,0,128,201,9,9,15,1,232,6,224,67,216,150,5,12,3, - 48,196,254,28,1,224,14,23,91,103,216,196,174,239,212,132,132,90,221,140, - 51,82,102,4,117,238,209,249,17,173,31,251,20,195,48,97,138,133,162,20, - 12,195,132,105,253,216,167,58,247,232,252,200,140,148,25,110,163,160,240,1, - 225,147,180,58,246,81,66,136,70,126,43,229,118,249,174,203,246,83,6,52, - 90,29,251,104,248,128,240,73,53,9,80,182,219,249,199,136,17,61,8,33, - 183,177,58,221,98,123,70,145,246,46,91,0,0,3,240,20,8,36,162,248, - 23,0,200,204,204,228,41,195,188,7,160,219,67,9,9,174,203,96,84,84, - 84,154,136,207,79,244,6,165,160,162,173,225,12,14,11,250,71,207,225,61, - 242,94,92,251,194,178,89,73,179,188,114,162,247,220,41,243,63,2,32,237, - 120,242,215,117,219,214,40,158,232,45,43,144,251,7,173,111,25,120,77,117, - 227,239,140,159,49,239,233,23,51,76,22,11,4,145,7,97,24,68,246,142, - 26,255,242,162,181,159,139,34,241,227,120,107,189,27,117,106,89,63,191,200, - 238,183,125,254,92,242,243,227,165,146,105,24,13,34,194,162,21,35,57,137, - 164,89,179,130,34,110,185,229,25,41,106,243,244,76,56,45,203,134,134,182, - 107,87,231,137,222,74,121,237,61,180,183,62,7,99,0,156,216,154,149,245, - 19,128,21,0,78,67,249,86,10,0,206,109,205,202,90,180,53,43,139,7, - 112,24,192,227,242,11,30,75,121,204,255,214,136,174,83,180,1,236,51,26, - 150,137,168,199,47,52,44,19,161,13,96,159,185,53,162,235,148,199,82,30, - 171,213,229,249,226,107,75,254,160,13,96,103,51,26,210,73,94,53,119,118, - 9,74,1,70,67,58,105,3,216,217,47,190,182,228,15,245,217,1,64,20, - 197,199,69,91,157,0,251,198,204,137,187,79,125,0,0,32,0,73,68,65, - 84,20,136,154,58,98,196,99,46,153,143,152,154,144,48,11,0,62,58,124, - 88,15,66,78,48,148,142,172,175,174,42,42,42,13,163,249,150,9,216,133, - 14,132,248,133,246,236,176,168,103,124,68,222,226,101,139,102,60,51,235,153, - 90,135,78,218,39,148,72,231,138,157,132,77,192,206,2,80,60,209,123,238, - 148,249,11,237,215,1,62,60,209,155,213,216,134,27,29,226,102,182,128,23, - 56,176,26,22,61,195,123,199,38,207,76,217,34,82,198,46,110,158,133,66, - 90,86,231,23,21,222,127,75,160,127,80,44,181,239,23,165,97,88,187,200, - 45,85,20,185,142,65,65,137,4,8,17,20,186,46,93,145,36,153,16,2, - 13,33,104,231,239,223,168,19,189,51,182,191,74,143,102,31,113,87,169,206, - 0,126,6,128,173,89,89,102,0,233,0,118,1,178,19,189,1,51,128,111, - 182,102,101,189,32,179,125,10,192,49,158,53,121,242,100,93,159,238,81,19, - 116,1,126,73,12,203,68,123,90,54,134,101,162,117,1,126,73,125,186,71, - 77,152,60,121,178,227,68,239,5,75,231,183,15,108,215,238,41,70,203,12, - 172,185,154,34,249,133,57,1,114,59,1,64,69,170,113,228,199,16,71,61, - 25,45,51,48,176,93,187,167,146,95,152,19,32,215,108,201,190,96,233,252, - 154,31,106,132,68,66,171,253,244,131,204,76,51,108,98,14,80,170,161,148, - 142,125,100,228,200,97,53,37,0,161,148,142,156,154,144,240,164,237,18,250, - 51,0,167,243,227,84,84,84,154,78,243,207,224,162,182,166,159,97,53,157, - 59,247,185,37,163,67,68,200,220,5,169,11,22,173,74,93,229,116,162,183, - 253,249,164,108,89,64,139,159,232,173,211,249,99,216,80,91,183,164,36,110, - 148,82,48,68,131,187,71,222,59,153,33,26,88,57,171,199,231,193,217,14, - 71,5,88,141,174,179,159,54,96,178,32,242,142,3,83,53,12,139,158,93, - 251,100,188,244,194,138,90,123,81,182,243,243,139,21,169,253,60,154,6,156, - 232,77,8,129,142,101,27,117,162,183,69,176,224,200,249,44,188,185,115,51, - 29,22,19,143,129,253,7,202,78,244,70,48,108,99,111,0,128,173,89,89, - 229,0,182,76,77,72,40,5,240,0,0,45,128,205,91,179,178,126,144,231, - 185,53,43,235,198,212,132,4,199,15,156,216,196,216,177,218,64,191,57,26, - 173,230,118,210,128,94,5,2,16,141,86,115,59,2,253,230,196,38,198,26, - 128,95,0,0,193,93,66,238,99,253,216,191,17,219,120,159,116,53,31,220, - 61,244,126,185,157,2,32,12,113,252,90,16,69,42,59,235,14,58,214,143, - 253,91,112,247,208,76,128,240,181,236,93,66,28,167,0,80,74,253,164,9, - 37,148,16,63,199,119,67,169,63,21,132,233,0,28,71,249,216,185,253,145, - 248,248,1,34,33,6,80,90,95,143,134,138,138,74,3,105,153,41,202,20, - 160,160,160,2,5,97,152,168,78,145,29,183,45,94,182,40,21,216,222,34, - 197,241,24,74,49,227,159,243,51,170,205,38,136,162,224,212,9,39,138,34, - 68,136,30,159,66,237,156,109,205,41,6,53,159,167,16,68,30,221,110,233, - 145,97,52,87,58,93,79,8,241,23,69,207,15,86,117,248,177,61,26,117, - 162,183,253,212,108,84,88,12,248,58,251,43,124,119,232,91,138,18,231,73, - 162,246,241,52,249,24,107,30,108,75,3,206,3,208,76,77,72,72,176,219, - 89,0,57,246,153,149,14,88,13,59,26,192,96,80,202,80,66,26,118,160, - 43,165,12,128,193,246,60,0,0,12,33,119,131,210,46,84,54,179,132,16, - 240,26,70,51,214,213,94,79,222,93,52,140,102,44,33,200,114,181,51,132, - 220,173,244,57,66,105,39,151,111,135,3,33,189,157,126,144,80,218,142,2, - 183,131,210,203,158,213,84,69,69,165,33,52,187,192,81,192,49,233,67,224, - 68,88,42,205,39,202,11,13,243,214,175,92,127,224,185,157,125,83,61,201, - 67,90,42,0,32,16,182,195,81,255,136,154,53,114,231,81,19,1,122,21, - 179,213,132,140,119,87,205,156,246,232,179,25,182,238,74,91,243,72,169,8, - 65,20,160,97,52,176,245,250,122,38,60,182,217,142,182,207,50,12,3,134, - 104,108,54,80,112,188,21,85,198,114,148,86,20,205,12,235,20,145,225,84, - 14,142,187,74,81,19,153,213,235,199,254,44,138,34,172,28,119,21,64,119, - 207,106,92,131,200,9,16,56,17,29,253,67,49,102,248,221,136,137,138,169, - 217,230,141,210,106,16,210,217,158,239,3,176,45,3,144,211,7,192,61,178, - 247,70,0,155,167,38,36,176,64,205,94,146,86,163,245,27,70,67,134,33, - 144,189,75,163,213,104,60,17,57,187,208,64,224,4,129,51,242,89,86,163, - 245,27,216,163,125,171,137,219,173,209,49,127,210,6,104,111,165,53,63,60, - 88,206,100,221,173,209,145,251,93,236,110,243,230,45,252,21,219,103,252,111, - 113,181,91,77,220,110,216,199,17,9,33,150,199,134,14,237,250,193,177,99, - 215,0,92,129,109,130,13,8,80,41,18,178,147,101,152,60,65,16,106,102, - 86,50,204,161,173,223,127,255,241,195,9,9,99,64,105,21,84,84,84,188, - 74,243,157,232,13,219,113,35,34,39,128,51,243,48,150,153,78,223,200,189, - 49,37,101,86,90,220,250,149,235,15,184,92,254,153,253,121,80,29,235,219, - 58,192,54,203,114,1,100,226,54,119,202,124,159,157,232,45,138,34,142,159, - 56,246,218,155,31,110,156,105,52,25,45,146,116,240,2,135,239,14,237,254, - 180,168,244,90,177,173,3,214,179,216,131,130,194,108,53,161,188,242,70,113, - 121,229,141,79,109,39,129,83,88,173,102,148,27,138,45,215,74,10,102,46, - 91,181,244,53,127,191,64,167,207,85,24,141,89,148,82,160,1,209,34,165, - 20,156,32,192,100,181,54,234,68,239,118,36,8,127,142,251,51,166,61,56, - 157,196,68,197,56,57,38,132,20,0,24,176,53,43,235,27,0,203,1,156, - 128,178,246,82,216,38,97,44,181,119,87,78,132,45,202,3,0,28,252,252, - 224,33,147,193,188,214,106,228,142,10,156,32,72,221,217,110,235,100,171,24, - 4,78,16,172,70,238,168,201,96,94,123,240,243,131,142,110,192,27,133,55, - 190,182,84,91,183,8,86,193,36,21,135,82,176,23,126,190,164,96,175,153, - 17,92,51,6,71,33,88,5,147,165,218,186,229,194,207,151,190,166,84,250, - 65,88,99,191,81,120,227,107,89,145,242,172,90,237,68,251,107,219,137,222, - 0,5,33,7,62,206,202,218,77,5,225,22,201,70,8,57,92,200,178,91, - 237,239,7,192,182,116,66,69,69,197,139,248,254,68,111,216,26,87,145,19, - 157,133,237,153,212,1,107,94,89,171,120,240,233,220,41,243,31,64,141,200, - 185,95,223,86,155,102,57,209,251,248,137,31,95,91,251,218,75,19,76,102, - 163,133,82,10,65,20,112,229,90,65,206,154,244,165,163,75,74,138,138,61, - 233,58,164,84,132,217,98,68,169,161,168,248,114,177,126,52,47,240,57,12, - 209,192,98,53,163,172,178,216,114,189,180,112,194,154,117,171,94,3,108,147, - 78,228,172,94,183,46,167,188,186,218,227,19,189,1,219,90,58,179,213,138, - 74,147,169,238,19,189,21,108,93,58,116,198,140,135,103,146,129,183,223,225, - 78,81,191,7,48,120,106,66,66,228,214,172,172,75,91,179,178,86,66,249, - 132,234,239,183,102,101,109,218,154,149,165,159,154,144,208,1,64,60,128,255, - 72,137,153,153,153,124,209,185,162,111,204,70,203,10,171,137,255,65,224,69, - 177,206,49,70,74,33,240,162,104,53,241,63,152,141,150,21,69,231,138,190, - 201,204,204,116,140,147,101,172,206,168,54,85,153,55,91,76,220,62,145,175, - 185,75,239,191,251,158,213,213,78,72,205,225,189,182,49,56,10,145,167,176, - 152,184,125,166,42,243,230,247,223,125,207,42,221,33,185,61,99,117,134,227, - 68,111,48,204,127,24,32,254,177,161,67,187,66,154,100,66,72,14,171,213, - 238,114,42,54,112,114,107,86,214,166,204,204,76,254,225,145,35,35,65,233, - 96,145,144,31,221,87,84,69,69,165,49,56,78,244,6,96,165,182,153,110, - 102,80,106,134,203,137,222,110,210,221,31,127,109,95,108,44,9,155,217,96, - 46,40,61,95,58,179,46,97,115,97,155,236,245,86,15,182,227,58,107,159, - 77,169,80,22,169,59,208,182,160,217,221,67,108,192,58,176,243,23,206,239, - 89,147,241,210,132,138,202,82,131,20,105,148,148,150,228,172,220,148,58,186, - 164,172,168,184,206,15,83,91,228,86,106,40,42,46,46,187,50,122,99,250, - 198,28,66,8,172,156,25,165,134,34,67,81,217,149,9,235,55,174,115,28, - 122,170,164,42,231,139,138,146,93,199,225,228,69,151,139,30,47,138,48,90, - 173,168,48,26,247,174,221,176,65,249,232,28,217,247,229,74,29,194,6,0, - 248,52,43,235,99,0,23,1,252,175,125,71,19,0,120,29,192,110,216,102, - 82,94,3,176,119,107,86,214,38,192,182,165,23,108,145,247,197,173,89,89, - 78,251,49,190,249,230,155,92,81,78,209,55,150,106,203,58,171,209,122,210, - 173,200,73,226,102,180,158,180,84,91,214,21,229,20,125,243,230,155,111,214, - 90,89,191,98,225,138,243,214,106,235,58,171,201,122,78,20,168,91,187,188, - 130,4,128,40,80,88,77,214,115,214,106,235,186,21,11,87,56,54,24,112, - 103,7,0,251,222,146,23,57,173,118,54,0,13,1,126,99,181,218,85,31, - 100,102,150,203,242,46,213,48,204,199,0,48,57,49,49,136,136,226,255,2, - 184,248,113,86,86,173,61,85,85,84,84,154,134,93,224,104,5,67,248,28, - 240,149,71,41,111,56,2,190,242,168,134,17,79,19,66,12,148,82,1,160, - 6,134,240,167,221,164,215,110,17,41,133,200,139,224,37,97,211,151,206,188, - 118,250,122,204,170,180,213,30,159,232,237,178,190,13,176,109,199,37,95,12, - 43,31,103,59,59,119,202,124,183,39,122,243,86,1,213,38,30,213,38,14, - 85,102,247,143,106,51,15,179,85,128,232,70,229,92,35,179,243,23,206,239, - 121,101,237,146,248,210,138,146,98,169,129,44,41,41,201,89,153,158,58,186, - 180,252,70,177,59,85,224,69,1,101,149,197,197,197,101,87,70,167,111,218, - 152,3,0,130,40,160,180,178,184,248,122,105,97,252,6,153,184,41,249,5, - 128,21,107,214,124,127,161,168,40,153,23,108,229,149,174,144,11,27,165,20, - 28,207,163,218,108,70,69,117,117,126,73,101,101,237,19,189,109,23,58,190, - 47,157,168,67,100,231,70,245,242,190,5,219,4,150,133,246,72,142,223,154, - 149,245,1,128,239,0,188,181,53,43,235,109,0,152,154,144,16,9,32,5, - 182,153,151,105,74,25,189,249,230,155,92,121,126,249,46,115,165,101,21,103, - 180,158,164,66,237,27,64,5,74,57,163,245,164,185,210,178,170,60,191,124, - 151,146,184,73,92,94,116,121,191,165,202,186,94,180,10,101,84,54,67,82, - 110,119,253,140,104,21,202,44,85,214,245,151,23,93,222,239,240,41,82,162, - 100,151,83,168,213,166,129,210,32,80,218,141,18,178,211,190,100,0,0,64, - 24,166,80,4,118,254,251,251,239,47,61,60,114,100,164,142,227,22,2,8, - 208,80,250,150,187,178,171,168,168,52,30,22,0,88,150,228,119,12,194,7, - 28,47,180,7,5,3,2,81,195,48,6,45,203,92,0,96,102,53,228,66, - 199,32,124,168,148,78,41,117,154,195,46,138,20,188,133,135,165,218,106,48, - 92,54,164,86,221,168,126,45,227,213,140,70,157,232,61,119,202,252,133,235, - 182,173,185,12,219,246,78,58,233,228,128,185,83,230,15,94,183,109,13,133, - 109,66,201,167,110,35,55,59,57,250,178,52,179,85,116,236,54,82,23,34, - 165,48,154,133,3,74,105,22,206,92,203,86,82,90,146,179,62,99,249,232, - 158,61,123,143,118,216,74,106,219,228,152,204,213,69,149,198,50,135,184,185, - 179,213,229,23,0,94,120,229,149,53,47,44,92,88,126,107,104,232,42,45, - 203,134,50,132,216,150,25,192,54,94,200,217,187,37,43,140,198,189,37,149, - 149,143,110,122,245,213,90,39,122,83,10,240,22,30,176,18,36,244,29,129, - 187,226,71,53,106,209,255,214,172,172,203,83,19,18,214,3,248,23,128,23, - 166,38,36,156,0,112,10,192,101,0,236,212,132,132,81,0,6,2,24,12, - 224,42,0,105,177,183,34,155,54,109,178,204,154,53,235,51,38,50,84,67, - 8,121,90,228,57,199,151,39,242,28,229,76,56,101,169,226,94,175,56,95, - 241,217,166,77,155,234,252,251,122,215,252,46,93,80,182,240,19,157,191,118, - 16,32,90,149,236,148,138,14,129,228,173,28,71,8,243,169,185,204,242,201, - 187,230,119,229,126,173,34,95,219,46,39,51,51,147,159,156,152,184,72,103, - 181,46,38,148,206,158,154,144,112,130,82,250,51,3,148,82,81,4,33,196, - 58,53,33,97,22,4,97,48,128,139,26,74,215,127,120,244,168,58,139,82, - 69,197,7,176,0,160,211,106,203,181,44,91,37,138,126,132,82,74,64,8, - 37,132,80,134,16,62,57,57,153,174,94,189,218,192,178,108,142,82,250,130, - 5,11,232,116,217,137,222,130,133,175,40,61,95,150,106,184,90,185,254,213, - 77,175,54,249,68,111,251,118,92,233,46,209,27,224,188,70,174,78,102,39, - 191,148,218,212,114,0,192,204,249,255,171,216,248,151,148,150,228,148,148,150, - 228,212,103,147,88,186,252,197,90,145,172,146,173,62,191,0,176,116,229,202, - 183,147,102,205,250,60,180,93,187,105,237,252,253,39,232,88,54,150,2,1, - 86,142,187,106,178,90,179,42,77,166,119,220,118,75,2,208,105,116,24,20, - 62,24,119,223,53,174,73,71,249,0,54,145,3,144,58,213,182,237,212,157, - 176,109,163,38,117,89,26,0,220,0,240,233,86,15,187,227,54,109,218,100, - 153,60,103,242,206,190,221,163,77,22,51,127,69,178,87,150,26,175,248,249, - 179,235,206,94,206,251,230,211,77,159,122,244,227,105,85,234,202,242,197,107, - 22,102,8,86,26,236,198,238,152,201,83,85,90,157,171,209,145,159,87,165, - 174,116,218,88,160,178,164,250,156,70,71,178,93,237,174,124,154,153,89,5, - 96,241,228,248,248,135,40,165,99,64,200,88,216,34,86,80,74,171,9,33, - 5,4,216,243,233,145,35,158,157,108,174,162,162,210,40,212,19,189,85,84, - 90,17,234,137,222,42,42,222,67,21,56,21,21,21,21,31,161,254,96,105, - 89,88,160,233,39,77,55,4,111,157,110,173,250,84,125,54,135,207,230,242, - 181,9,96,30,219,217,87,0,128,224,7,206,106,0,224,91,128,36,194,182, - 207,25,106,230,15,201,215,174,74,101,210,162,102,70,179,206,254,90,99,191, - 94,178,75,227,157,162,253,65,0,136,149,206,62,9,108,109,130,52,123,90, - 105,47,1,98,47,131,40,187,70,142,188,140,130,236,51,142,244,202,223,89, - 61,85,90,14,245,52,97,21,149,86,192,44,64,148,142,28,88,6,96,49, - 64,199,41,44,75,36,53,141,169,28,249,100,157,90,99,146,212,222,240,18, - 89,126,246,109,2,168,52,72,78,106,4,194,27,141,178,219,60,168,76,184, - 126,47,245,84,105,57,212,47,65,69,165,21,192,200,54,49,125,30,246,221, - 78,20,30,141,201,91,233,179,141,205,171,169,200,4,230,119,83,79,149,150, - 67,141,224,100,132,135,135,215,251,207,80,88,88,216,108,93,113,42,191,31, - 228,107,47,253,187,180,67,215,209,61,24,70,203,64,191,245,116,75,54,148, - 158,110,119,218,168,207,251,119,105,135,123,105,32,227,71,8,62,46,42,186, - 105,235,169,210,114,168,2,231,66,65,65,129,219,180,136,136,122,207,223,84, - 105,59,40,141,185,180,24,140,86,227,240,111,46,170,22,47,108,251,77,233, - 178,83,3,134,246,237,95,108,42,171,243,28,4,10,138,206,1,161,56,117, - 236,236,105,216,246,185,108,44,52,32,208,143,246,190,173,135,71,107,72,37, - 8,67,112,254,183,75,48,25,45,117,222,83,115,81,181,184,29,213,74,73, - 167,226,219,183,239,95,33,8,117,118,49,137,0,66,52,26,28,49,24,154, - 94,79,134,161,183,183,107,215,224,15,254,90,93,13,147,40,170,63,122,91, - 41,13,21,56,199,95,121,98,98,34,50,51,51,225,242,190,77,127,209,133, - 133,133,36,34,34,130,42,137,92,68,68,132,26,189,221,60,208,188,188,60, - 156,61,123,22,125,251,246,197,206,157,59,49,127,254,124,207,119,201,110,4, - 153,153,153,52,49,49,177,174,252,61,81,144,170,61,63,126,132,175,11,14, - 65,143,171,110,47,138,68,55,252,37,34,17,97,100,80,147,79,40,232,220, - 253,22,252,231,248,27,48,24,171,96,224,171,235,21,214,246,108,59,180,15, - 12,194,159,250,252,3,151,114,27,189,126,189,234,147,212,84,84,253,244,19, - 132,106,69,1,4,0,104,218,181,67,240,160,65,232,49,103,78,147,235,25, - 225,231,135,109,75,150,64,168,172,132,104,86,222,88,65,14,227,239,15,77, - 112,48,198,167,166,226,156,201,212,84,247,42,62,162,161,2,231,248,235,182, - 255,195,58,68,77,46,118,190,196,181,27,209,219,162,163,36,114,191,19,113, - 107,85,17,141,15,161,0,96,181,90,209,183,111,95,28,56,112,0,15,60, - 240,0,206,159,63,143,140,140,12,159,137,92,82,82,125,91,169,122,196,169, - 191,255,249,105,241,220,229,11,183,15,78,24,16,84,100,44,117,58,127,144, - 82,138,46,129,29,241,86,214,169,170,119,187,127,244,43,0,197,141,6,26, - 194,165,220,203,217,123,119,30,138,27,146,248,7,124,125,229,72,189,215,255, - 207,173,99,176,119,207,33,92,202,189,156,221,4,183,167,158,89,182,76,60, - 111,50,221,62,38,52,52,168,156,231,161,145,213,83,160,20,29,88,22,251, - 203,202,170,122,239,222,237,149,122,158,51,153,178,47,255,223,255,197,117,25, - 59,22,149,39,79,214,123,125,240,160,65,184,182,123,55,206,153,76,77,169, - 167,138,143,105,51,93,148,219,183,111,79,77,74,74,74,201,205,205,133,191, - 191,63,0,224,167,147,217,184,127,194,3,52,61,61,61,109,210,164,73,169, - 222,242,37,23,185,223,137,184,1,0,114,115,115,29,175,99,98,98,124,26, - 209,192,46,52,41,41,41,72,75,75,107,174,251,75,243,242,242,208,169,83, - 39,132,134,134,34,43,43,11,163,71,143,198,235,175,191,142,57,115,230,224, - 252,249,243,216,189,123,119,147,235,253,236,179,207,210,13,27,54,56,229,17, - 30,30,142,49,99,198,212,178,59,10,38,120,52,4,245,228,161,175,127,4, - 128,163,175,255,242,202,176,77,185,159,64,199,104,29,137,86,145,195,172,152, - 7,209,139,196,255,122,253,215,162,4,183,185,52,140,187,103,79,76,41,223, - 123,233,35,244,111,223,27,103,42,47,186,189,240,182,224,94,96,89,22,179, - 39,166,80,0,138,7,193,122,200,147,95,220,184,1,0,71,191,76,75,27, - 86,246,221,119,32,26,141,35,145,10,2,66,239,190,27,155,230,207,255,245, - 84,117,181,215,234,57,226,196,137,242,223,134,12,129,95,247,238,176,94,171, - 181,171,157,3,93,215,174,32,90,45,70,156,56,209,212,122,170,248,152,54, - 51,139,50,41,41,41,165,160,160,0,254,254,254,216,177,99,7,118,236,216, - 129,59,6,197,161,160,160,0,73,73,73,41,219,183,111,79,245,166,63,187, - 200,53,72,220,102,204,210,183,213,129,102,42,23,183,155,25,134,97,80,82, - 82,130,178,178,50,36,36,36,224,192,129,3,120,250,233,167,49,109,218,52, - 164,167,167,123,197,199,134,13,27,106,217,190,252,242,75,242,198,27,111,184, - 255,80,195,254,114,190,253,108,199,30,116,101,58,130,183,240,142,71,87,166, - 35,62,219,177,7,0,126,105,88,137,235,196,64,24,50,254,153,251,150,32, - 190,251,31,160,37,202,191,137,41,40,6,118,238,131,103,238,95,2,194,144, - 103,1,84,120,193,247,183,151,62,250,8,76,96,32,68,171,213,241,96,2, - 3,113,233,163,143,0,47,215,19,192,248,135,63,250,8,237,110,187,13,96, - 220,55,141,1,189,123,227,105,219,119,233,173,122,170,248,136,54,33,112,225, - 225,225,142,6,120,199,142,29,152,56,113,34,38,78,156,232,72,207,205,205, - 69,82,82,82,138,183,253,122,34,110,51,102,233,169,244,240,182,255,230,36, - 38,38,198,233,181,183,26,251,214,134,40,138,40,42,42,66,73,73,9,178, - 178,178,240,228,147,79,226,143,127,252,35,222,124,243,77,252,241,143,127,108, - 114,254,195,135,15,167,238,222,47,94,188,184,86,122,67,249,161,252,11,2, - 96,201,236,73,41,37,99,123,14,5,79,109,75,177,120,42,96,108,207,161, - 152,61,41,165,4,192,244,166,248,112,129,82,145,238,61,251,139,126,239,91, - 107,62,161,195,58,245,135,224,114,128,8,5,197,208,14,177,56,252,245,143, - 56,150,249,115,54,21,105,147,255,120,242,22,46,36,0,150,220,117,226,68, - 73,240,192,129,160,130,173,158,84,16,16,60,112,32,238,58,113,194,235,245, - 4,176,247,100,85,213,222,175,223,127,159,6,244,238,237,240,41,199,191,71, - 15,92,253,226,11,236,45,45,205,6,112,115,254,147,220,68,180,9,129,3, - 224,136,220,228,194,38,79,3,108,221,152,222,244,233,78,184,188,44,106,52, - 37,37,165,190,124,60,185,166,209,254,165,179,242,98,98,98,156,132,206,155, - 62,224,97,61,61,188,174,209,68,71,71,163,75,151,46,248,249,231,159,209, - 165,75,23,220,123,239,189,56,127,254,60,162,163,163,113,254,252,249,250,51, - 80,96,241,226,197,84,122,28,61,122,212,41,45,32,32,0,139,23,47,166, - 0,240,194,11,47,16,215,244,70,224,248,209,165,101,180,144,14,74,162,160, - 208,202,186,43,125,192,248,244,197,239,16,225,42,143,78,186,16,167,4,29, - 163,69,76,72,15,204,158,152,234,205,46,187,154,31,151,44,11,136,118,81, - 21,69,219,123,223,49,254,233,179,103,137,181,168,8,154,224,96,231,20,134, - 129,238,214,91,213,174,201,54,68,155,17,56,0,138,226,230,43,102,204,210, - 211,140,244,222,200,72,239,237,36,104,238,68,237,181,77,145,228,181,77,145, - 13,29,187,241,184,33,79,75,75,131,47,27,254,188,188,60,199,24,156,15, - 162,55,2,212,91,135,102,27,147,59,112,224,0,6,14,28,136,215,95,127, - 29,233,233,233,232,221,91,126,180,96,195,199,223,150,45,91,230,120,184,178, - 127,255,126,162,100,87,160,222,255,197,135,142,63,76,238,12,185,143,2,120, - 121,195,127,83,59,29,191,124,218,209,101,168,37,44,142,95,62,141,13,255, - 77,237,4,224,101,0,72,62,253,172,166,142,236,26,10,17,69,58,120,198, - 253,139,113,111,244,8,112,162,109,83,17,129,138,24,217,245,14,76,251,203, - 66,175,117,77,254,48,100,8,9,136,138,162,0,94,206,28,60,184,147,241, - 204,25,16,173,77,188,137,86,11,227,153,51,200,28,60,216,81,207,147,227, - 199,123,181,158,20,24,124,223,174,93,8,25,54,12,148,179,157,162,68,5, - 1,237,250,246,197,244,87,95,5,212,174,201,54,67,155,153,100,98,54,155, - 29,145,154,82,154,167,120,187,43,177,17,162,38,209,224,114,72,2,225,69, - 1,160,74,135,169,2,64,82,82,146,183,69,134,0,160,178,58,56,149,3, - 240,185,184,209,188,188,60,68,71,71,227,201,39,159,196,203,47,191,140,242, - 242,114,36,37,37,201,35,183,150,156,76,84,175,239,143,226,182,130,16,66, - 1,140,123,96,210,61,216,120,238,99,248,251,233,28,233,191,154,244,152,61, - 233,33,60,139,212,113,0,150,172,238,191,193,155,123,33,82,74,233,201,107, - 5,197,155,50,22,189,63,107,232,140,33,200,171,42,68,39,93,8,244,153, - 231,113,60,243,23,175,117,217,133,79,155,134,238,211,166,81,0,227,122,61, - 252,48,74,191,253,22,140,174,166,158,214,162,34,244,122,248,97,224,196,137, - 113,0,150,12,218,179,199,171,245,4,112,242,146,197,178,105,235,91,111,205, - 250,107,124,60,184,226,98,104,130,131,81,124,232,144,218,53,217,198,104,19, - 2,87,88,88,72,98,98,98,20,215,167,1,142,49,35,197,211,161,155,194, - 204,36,229,46,171,38,136,154,132,147,170,216,27,123,143,4,207,7,34,135, - 188,188,60,0,205,50,246,230,16,57,9,233,117,115,137,155,196,146,37,75, - 148,202,214,40,134,15,31,238,120,237,218,5,185,116,233,82,250,229,151,95, - 214,178,43,80,175,127,66,72,255,1,113,125,223,47,231,43,251,62,61,253, - 121,40,45,19,56,19,120,10,225,3,111,237,223,65,27,124,252,212,241,179, - 255,132,237,208,89,111,50,251,237,149,159,60,250,231,135,199,134,228,48,28, - 226,58,245,195,159,30,152,234,213,46,187,238,211,166,245,31,214,190,253,251, - 38,65,232,187,102,195,6,40,46,19,56,117,10,127,104,215,174,127,59,141, - 230,248,17,131,225,159,240,65,61,159,215,235,31,157,48,120,112,8,229,56, - 4,244,236,137,129,59,119,170,93,147,109,140,54,33,112,210,218,183,136,136, - 8,200,151,9,152,205,102,39,113,243,230,82,1,37,188,32,108,18,78,91, - 251,120,208,184,55,228,90,79,105,206,232,173,37,169,37,110,240,114,164,118, - 244,232,81,167,93,228,229,105,203,150,45,131,201,100,242,196,159,174,254,75, - 208,94,16,132,184,31,127,250,194,237,98,239,72,116,195,59,17,171,131,238, - 30,244,247,56,0,237,61,200,179,161,80,66,200,221,207,76,120,225,248,142, - 83,111,33,233,254,23,64,24,242,44,21,169,55,187,236,218,11,148,198,125, - 177,116,169,219,197,222,154,118,237,48,255,142,59,130,254,39,37,197,103,245, - 4,112,247,132,93,187,142,239,157,51,71,157,53,217,70,105,245,2,39,95, - 216,157,158,158,158,22,19,19,227,52,91,178,161,226,230,69,145,106,42,13, - 222,191,206,23,81,78,51,70,111,128,115,87,164,83,130,47,34,83,52,131, - 184,185,242,236,179,207,58,45,19,120,234,169,167,28,239,255,242,151,191,208, - 152,152,24,197,101,4,80,216,29,95,1,30,192,217,161,3,239,235,241,135, - 248,219,2,220,45,244,126,225,200,74,83,123,77,187,75,112,222,125,223,107, - 80,74,179,175,94,188,158,54,243,222,231,83,178,15,253,234,139,46,59,30, - 192,217,191,188,240,66,143,49,161,161,1,110,23,122,255,247,191,166,64,134, - 241,89,61,1,100,159,55,155,211,166,109,222,156,178,175,172,76,237,154,108, - 131,180,106,129,115,21,55,192,214,93,233,58,91,210,215,145,155,15,241,88, - 228,124,33,110,132,16,184,174,127,243,97,244,230,58,206,86,235,189,151,69, - 174,217,197,13,0,54,108,216,64,6,14,28,72,127,254,249,103,199,123,0, - 88,179,102,13,253,247,191,255,141,47,191,252,210,93,25,28,118,66,8,113, - 19,94,255,248,219,79,121,253,0,224,242,47,142,232,45,245,60,205,74,233, - 77,18,210,0,164,74,198,70,111,146,229,57,169,217,135,126,253,51,128,63, - 53,54,131,186,234,121,188,178,178,31,0,156,170,137,222,82,47,174,89,147, - 210,115,254,124,167,122,54,3,169,251,202,202,154,84,79,149,150,163,213,10, - 156,146,184,73,66,214,92,130,22,30,30,78,155,97,23,19,226,26,205,52, - 242,154,70,33,45,11,240,113,244,230,201,36,18,111,138,92,139,136,155,68, - 122,122,58,18,19,19,157,108,203,151,47,199,246,237,219,107,217,101,200,103, - 2,42,254,240,73,62,253,172,150,48,68,224,44,60,179,254,142,77,110,163, - 150,121,39,146,52,68,71,8,33,68,183,186,255,6,99,35,170,224,41,195, - 154,248,121,197,122,158,28,63,94,11,134,17,68,179,153,137,59,112,192,109, - 61,179,71,141,210,48,58,29,1,195,232,6,237,217,211,154,235,169,210,66, - 180,74,129,171,75,220,154,179,12,246,173,186,154,67,228,90,20,73,220,124, - 24,189,57,150,9,120,233,186,122,105,41,113,3,0,165,77,149,255,246,183, - 191,41,218,27,2,33,8,60,249,249,153,202,43,250,235,126,168,233,150,99, - 175,85,20,83,200,254,151,127,93,127,70,220,243,239,61,20,190,235,186,243, - 45,12,19,184,55,55,183,50,215,100,114,170,39,87,236,92,207,205,121,121, - 226,91,87,174,180,221,122,170,248,156,86,183,14,174,53,137,27,96,59,62, - 199,147,115,226,218,42,205,32,110,205,77,171,220,52,250,141,55,222,168,175, - 28,245,54,210,171,98,55,84,236,93,248,149,88,126,177,66,190,125,253,174, - 21,179,51,8,128,93,146,193,46,110,109,150,65,95,127,93,177,32,63,95, - 60,111,114,218,166,127,215,154,45,91,156,234,105,23,55,21,21,183,52,84, - 224,168,244,144,29,151,35,189,247,202,31,155,36,106,173,65,220,36,110,86, - 145,187,9,197,77,14,65,43,17,55,15,169,115,177,242,93,137,163,180,35, - 18,71,232,16,206,16,80,167,107,143,126,246,193,158,75,0,106,173,67,232, - 254,199,72,111,46,128,110,22,254,220,177,163,246,207,29,59,234,194,116,58, - 2,231,123,114,116,243,229,203,138,245,28,27,26,218,230,234,169,210,60,52, - 229,184,28,167,4,111,29,151,51,105,210,164,212,237,219,183,59,94,123,37, - 83,15,81,18,55,137,155,176,187,146,0,160,45,40,110,94,235,142,148,225, - 235,19,16,90,140,67,153,7,57,233,245,229,194,124,206,37,185,135,210,103, - 46,239,213,123,115,1,116,179,240,85,105,169,163,110,215,173,86,143,234,185, - 175,172,172,205,213,83,165,121,104,149,99,112,45,57,43,242,247,116,106,247, - 77,22,185,221,180,226,230,1,191,151,122,255,94,234,169,226,37,90,165,192, - 181,20,55,81,116,246,123,164,173,127,119,181,162,16,66,8,11,64,164,148, - 122,116,88,92,27,134,5,32,218,31,42,42,94,163,213,77,50,81,81,249, - 157,162,244,191,216,214,69,219,35,136,141,150,46,134,202,77,136,26,193,169, - 180,89,12,59,251,54,219,196,159,230,244,37,91,251,124,83,143,45,253,94, - 234,169,210,114,168,2,167,210,38,9,153,120,174,165,139,224,19,42,118,244, - 1,165,20,132,16,8,130,192,0,16,153,58,78,151,110,203,252,94,234,169, - 210,114,144,230,252,101,170,162,226,45,110,102,129,83,185,121,184,89,255,78, - 219,10,170,192,169,168,168,168,120,17,85,212,90,15,44,0,180,127,224,108, - 179,141,240,74,130,170,250,84,125,170,254,84,127,55,171,63,149,214,129,218, - 233,173,162,162,162,162,114,83,162,10,156,138,138,138,138,202,77,137,42,112, - 42,42,42,42,42,55,37,141,90,38,224,186,241,176,186,3,136,247,104,137, - 123,171,126,159,222,35,50,50,210,233,94,234,245,122,245,94,170,168,180,16, - 13,138,224,182,111,223,158,26,30,30,78,115,115,115,81,80,80,128,130,130, - 2,124,241,249,78,132,135,135,83,215,83,182,85,26,70,75,220,91,87,159, - 233,233,233,105,190,240,153,154,154,90,215,192,187,87,6,229,35,35,35,105, - 100,100,36,213,233,116,142,135,100,115,21,29,111,34,247,33,249,201,207,215, - 35,63,95,239,54,221,75,120,154,87,115,249,84,39,87,168,180,58,26,20, - 193,37,37,37,165,72,187,237,239,216,177,3,0,48,113,226,68,105,167,253, - 148,237,219,183,251,124,163,228,155,53,194,105,137,123,43,249,220,177,99,71, - 90,82,146,33,5,64,74,65,65,156,207,124,166,166,166,210,212,212,84,199, - 189,139,140,140,164,122,189,94,49,173,49,108,219,182,77,209,62,101,202,20, - 201,151,87,191,183,200,200,72,250,254,251,1,232,216,254,29,20,151,13,199, - 152,49,0,165,128,180,235,20,165,122,16,2,236,223,15,116,14,61,138,82, - 195,19,248,231,63,189,91,142,193,131,143,210,19,39,134,19,119,239,189,236, - 199,219,217,170,168,248,20,143,35,56,233,151,62,96,107,128,39,78,156,136, - 137,19,39,58,210,115,115,115,145,148,148,148,226,253,34,218,80,136,54,154, - 61,194,241,85,84,213,18,247,86,242,185,99,199,142,180,137,19,39,214,202, - 219,151,223,103,61,17,157,215,209,235,245,216,182,109,91,173,238,67,111,208, - 177,253,59,248,207,206,175,49,102,12,112,234,167,163,56,253,243,81,156,250, - 233,168,211,235,49,99,128,255,236,252,26,29,219,191,227,85,223,131,7,31, - 165,158,60,55,37,239,198,228,211,20,191,42,42,222,164,65,17,156,191,191, - 191,163,1,86,74,3,108,162,224,139,40,78,22,109,32,41,201,0,0,240, - 101,180,33,247,9,248,62,170,106,137,123,251,213,87,95,165,37,37,25,82, - 146,146,62,112,216,34,34,108,175,11,10,30,107,180,79,87,1,75,77,77, - 37,82,132,38,139,212,168,61,13,169,169,169,117,126,182,33,190,229,236,218, - 181,11,247,221,119,31,0,96,200,144,74,68,70,190,135,200,72,208,194,194, - 154,77,235,195,195,109,191,241,244,250,196,70,249,41,46,27,14,32,21,0, - 48,224,142,230,143,112,78,156,24,78,228,130,226,250,190,49,200,5,82,138, - 6,237,207,245,230,235,250,89,111,69,148,242,31,39,227,199,143,199,230,205, - 155,189,30,165,78,159,62,157,238,217,179,199,241,94,29,63,109,251,52,120, - 146,137,82,3,236,107,100,209,6,38,78,156,8,121,131,12,216,162,141,152, - 152,152,20,72,45,141,23,125,2,80,20,30,95,248,108,238,123,59,113,226, - 196,20,215,123,169,68,120,120,56,77,79,79,79,243,84,232,60,17,165,200, - 200,72,84,86,86,186,19,191,38,33,23,54,0,56,126,252,56,134,12,169, - 68,126,254,40,197,235,163,162,14,54,218,87,231,208,163,72,76,28,142,83, - 63,29,69,113,217,112,116,14,117,247,252,39,187,24,70,54,218,87,115,210, - 20,161,244,134,200,74,72,194,38,23,181,61,123,246,208,200,200,72,234,45, - 161,147,132,109,207,158,61,14,81,179,219,40,160,10,93,91,166,65,147,76, - 204,102,115,163,210,188,193,87,95,125,133,164,36,131,35,194,0,108,209,70, - 68,196,7,78,17,142,183,125,70,68,124,224,240,43,127,120,219,103,75,220, - 91,179,217,140,130,130,199,28,209,26,0,199,123,185,207,130,130,2,36,37, - 37,165,120,163,174,242,232,173,184,184,184,169,217,73,121,210,202,202,74,236, - 218,181,75,49,221,157,93,66,175,111,252,49,100,74,98,54,102,204,126,12, - 184,195,164,248,92,88,232,221,110,202,155,13,121,164,38,137,152,94,175,39, - 114,33,211,235,245,68,175,215,147,61,123,246,96,250,244,233,77,18,82,73, - 220,164,60,37,251,230,205,155,137,94,175,39,227,199,143,175,85,166,166,248, - 83,105,94,60,22,184,194,194,66,18,19,19,227,54,61,38,38,6,233,233, - 233,105,94,41,149,2,45,17,57,54,151,207,150,184,183,13,245,217,212,49, - 57,55,145,25,169,35,173,65,121,7,7,7,227,190,251,238,115,68,111,174, - 207,74,164,165,201,111,233,126,26,25,153,73,35,35,51,27,212,128,41,69, - 108,0,64,233,104,197,7,0,232,116,251,213,70,178,14,164,25,167,245,69, - 104,146,200,53,5,121,212,166,196,230,205,155,29,34,167,138,91,219,195,227, - 46,74,105,38,97,68,68,4,114,115,115,29,17,140,217,108,118,106,12,125, - 53,139,82,138,54,108,101,112,30,39,242,117,132,227,46,205,91,180,196,189, - 117,245,41,191,151,114,159,210,24,93,83,198,228,92,144,186,125,106,37,120, - 163,123,210,157,152,201,73,75,75,67,74,74,141,86,75,194,3,52,188,187, - 82,41,130,3,246,187,189,222,106,5,126,251,173,43,6,14,220,79,173,214, - 49,30,213,87,169,187,175,33,51,26,93,63,223,148,49,49,119,93,143,222, - 156,97,169,215,235,17,25,25,233,147,113,182,198,176,121,243,102,34,205,248, - 141,140,108,27,93,204,42,54,60,18,56,249,52,249,244,244,244,52,251,216, - 19,228,54,192,119,226,102,143,54,168,52,225,195,21,31,70,56,62,247,217, - 18,247,214,83,159,246,165,3,77,198,53,42,210,240,224,238,158,0,0,32, - 0,73,68,65,84,235,19,17,25,153,9,189,62,209,27,217,43,162,36,116, - 174,194,38,183,215,48,166,65,126,148,35,56,83,157,190,111,187,237,26,116, - 58,219,125,241,100,114,139,27,65,242,56,154,240,230,178,129,58,242,242,90, - 116,35,137,136,47,150,118,52,6,41,114,83,197,173,237,81,175,192,185,54, - 134,128,173,241,119,29,143,241,229,250,55,79,163,13,95,70,56,190,136,170, - 90,226,222,122,234,115,226,196,137,41,242,30,218,198,70,172,242,70,220,165, - 65,111,150,238,30,185,208,165,164,164,56,132,198,245,89,226,195,15,189,27, - 193,121,51,90,252,61,208,26,4,205,149,214,88,38,21,207,168,83,224,148, - 26,67,169,177,245,245,130,110,119,101,104,77,17,142,183,197,205,215,247,182, - 62,159,225,225,225,205,18,37,75,17,157,167,17,140,167,76,153,50,5,133, - 133,133,142,247,225,225,225,50,159,239,1,128,98,4,215,20,130,131,143,163, - 184,108,72,173,8,206,23,209,98,75,224,173,181,116,190,64,54,78,215,232, - 60,198,143,31,143,61,123,246,180,138,72,81,197,251,184,21,184,186,26,195, - 230,162,53,71,56,190,18,55,95,81,159,207,230,30,7,116,19,213,53,33, - 191,218,13,148,124,156,47,50,210,57,98,244,134,208,233,245,122,50,101,202, - 20,106,155,250,255,48,106,158,223,241,73,180,88,23,174,98,210,20,113,145, - 175,125,107,200,58,54,165,245,120,190,216,85,69,105,233,64,99,217,188,121, - 51,81,151,4,220,188,40,10,92,107,21,183,150,142,112,124,237,195,87,120, - 42,110,82,186,55,35,86,189,62,145,72,17,155,55,163,53,111,209,84,161, - 83,106,16,35,35,25,234,141,188,235,195,157,16,185,188,111,82,20,213,80, - 129,146,95,239,11,113,3,106,238,121,83,34,55,57,173,101,50,139,138,247, - 81,92,38,32,53,104,174,13,91,120,248,251,13,250,103,105,232,245,53,159, - 107,125,34,224,45,220,221,219,218,229,113,190,119,141,189,151,245,249,116,23, - 177,166,167,167,167,73,143,186,202,233,9,122,125,34,105,105,113,211,235,19, - 73,84,212,65,68,69,29,132,159,223,1,197,135,175,198,196,124,45,116,64, - 109,49,241,149,184,52,164,12,42,42,45,141,98,4,55,105,210,164,212,237, - 219,183,59,94,203,211,194,195,223,167,133,133,255,172,247,15,89,21,55,101, - 234,186,183,53,229,81,190,119,158,222,123,79,125,182,212,24,107,75,69,117, - 245,249,82,88,185,224,85,188,44,116,158,222,55,111,222,223,186,242,82,197, - 77,165,213,225,118,12,174,174,6,174,41,209,68,125,164,167,167,167,37,37, - 37,165,52,103,215,104,115,251,84,202,95,233,158,214,103,107,136,216,213,254, - 161,210,178,221,208,45,29,209,249,26,41,26,148,239,123,41,71,218,3,83, - 69,69,197,119,52,234,192,83,95,70,112,158,68,56,222,166,37,124,186,34, - 191,167,210,189,171,207,214,88,90,90,220,110,118,60,17,111,95,71,139,42, - 42,42,13,220,139,18,240,188,129,109,74,67,60,105,210,36,159,156,72,208, - 218,124,186,195,221,189,243,134,184,1,158,143,3,170,168,168,168,180,101,26, - 20,193,53,180,129,245,86,131,252,123,196,245,222,121,243,94,182,134,136,85, - 69,69,69,197,215,52,170,139,82,165,237,227,109,97,51,236,236,219,172,27, - 209,170,254,84,127,173,217,159,74,235,64,21,56,149,38,19,50,241,92,75, - 23,65,69,69,69,165,22,234,84,46,21,21,21,21,149,155,18,162,134,238, - 42,77,69,141,224,84,84,84,90,35,170,192,169,168,168,168,120,17,245,7, - 95,235,129,5,128,246,15,156,109,182,217,142,146,160,170,62,85,159,170,63, - 213,223,205,234,79,165,117,160,142,193,169,168,168,168,168,220,148,168,2,167, - 162,162,162,162,114,83,162,10,156,138,138,138,138,202,77,73,163,214,193,205, - 155,55,207,169,159,121,237,218,181,234,142,37,94,162,37,238,173,250,125,122, - 143,228,228,100,167,123,185,122,245,106,245,94,170,168,180,16,13,18,184,121, - 243,230,165,2,72,25,55,110,156,195,214,53,172,51,96,59,84,49,109,237, - 218,181,169,94,44,219,239,138,150,184,183,146,79,0,24,58,116,40,142,29, - 59,150,6,32,197,46,120,94,243,185,113,227,70,58,123,246,108,197,134,126, - 230,204,153,52,35,35,163,201,34,32,9,139,217,108,118,216,164,83,201,1, - 223,9,141,171,160,1,192,216,177,70,0,192,190,125,129,62,19,60,79,239, - 155,183,238,111,125,121,121,211,143,138,138,183,104,104,23,165,163,1,254,246, - 219,111,241,237,183,223,226,218,245,98,216,109,41,246,6,211,167,204,155,55, - 143,202,31,190,246,215,140,62,91,226,222,166,12,29,58,20,0,210,54,111, - 222,140,236,236,236,148,161,67,135,194,110,243,186,207,141,27,55,58,221,59, - 121,227,239,154,214,24,226,226,226,48,98,196,8,199,35,46,46,14,113,113, - 113,181,124,121,139,228,228,100,122,199,29,26,12,29,50,24,3,7,26,97, - 52,26,49,118,172,17,187,118,1,187,118,217,132,206,104,52,98,224,64,35, - 134,14,25,140,59,238,208,120,189,28,139,23,127,76,235,122,239,43,63,42, - 42,109,1,143,5,110,222,188,121,84,222,0,143,27,55,14,242,104,67,106, - 136,189,93,64,153,255,84,169,12,210,227,145,169,15,73,226,147,218,150,125, - 182,196,189,149,132,250,216,177,99,105,67,135,14,117,151,183,79,190,79,111, - 136,89,67,48,26,141,136,139,139,243,137,200,105,217,129,184,122,173,8,71, - 142,0,137,163,70,162,210,48,18,137,163,70,58,189,62,114,4,184,122,173, - 8,90,118,160,87,125,75,162,83,223,115,83,242,110,76,62,170,24,170,180, - 22,26,60,6,39,53,192,238,152,55,111,94,170,143,186,42,29,17,206,202, - 149,43,1,0,11,23,46,196,184,113,227,240,237,183,223,166,204,155,55,15, - 62,240,235,20,85,1,112,136,143,47,124,182,192,189,77,203,206,206,78,201, - 206,206,118,24,54,111,222,12,0,152,62,125,58,142,29,59,214,40,159,174, - 2,54,123,246,108,34,117,83,74,207,51,103,206,164,0,208,167,79,159,122, - 63,219,16,223,114,174,95,191,142,176,176,48,0,192,161,67,60,2,3,7, - 34,57,121,11,149,245,98,66,234,197,92,189,250,145,70,249,177,114,135,1, - 216,234,144,121,240,112,99,139,218,104,150,45,123,136,200,5,197,245,125,99, - 144,11,228,178,101,15,17,41,95,233,59,107,200,103,229,121,52,5,249,143, - 147,184,184,56,60,248,224,131,94,239,14,253,228,147,79,168,252,127,65,29, - 63,109,251,52,88,224,234,106,128,125,133,107,132,227,138,36,56,0,82,125, - 229,211,181,222,190,240,217,220,247,118,232,208,161,78,226,230,142,134,142,201, - 121,34,74,129,129,129,224,121,94,81,252,60,241,81,23,114,97,3,128,187, - 238,186,11,135,14,241,24,59,182,147,226,245,251,246,149,52,218,151,78,59, - 18,157,58,29,70,226,168,145,176,114,135,161,211,186,123,238,98,23,195,192, - 70,251,106,78,154,34,148,222,16,89,9,73,216,228,162,150,156,156,76,147, - 147,147,169,183,132,78,18,182,236,236,108,135,168,125,242,201,39,84,242,173, - 10,93,219,165,77,157,38,32,69,110,174,239,23,46,92,8,192,55,209,163, - 228,195,85,8,124,233,179,185,56,118,236,24,166,79,159,14,192,57,114,147, - 210,36,236,19,80,188,18,177,202,163,55,171,213,218,148,172,28,108,220,184, - 145,94,184,112,161,150,176,73,92,191,126,29,128,178,184,1,128,209,216,120, - 223,74,98,118,228,72,60,0,1,64,237,103,70,93,152,83,39,201,201,201, - 84,18,20,119,34,38,79,255,228,147,79,104,83,68,78,18,55,87,17,147, - 242,148,132,78,238,83,21,188,182,131,199,2,103,159,58,78,221,69,25,246, - 200,42,205,59,197,250,125,209,18,247,118,237,218,181,196,131,9,51,174,62, - 27,29,177,42,69,102,210,172,187,166,70,109,179,103,207,38,201,201,201,52, - 44,44,204,33,114,174,207,231,206,241,181,62,119,238,220,57,71,23,233,204, - 153,91,104,160,61,184,106,72,119,165,82,196,6,8,184,239,62,101,65,221, - 189,187,4,179,102,109,161,155,54,53,174,75,244,247,128,82,212,166,196,234, - 213,171,73,83,199,85,149,196,77,206,131,15,62,72,228,209,156,74,219,194, - 99,129,147,26,67,165,238,58,121,3,236,203,104,70,138,154,92,35,55,95, - 210,28,62,90,226,222,202,38,153,0,80,140,220,210,0,64,26,163,107,202, - 152,156,28,41,122,51,42,132,77,222,232,158,84,138,224,92,145,11,27,0, - 39,49,106,104,119,165,82,4,103,139,216,148,17,69,96,244,104,63,0,158, - 139,156,82,119,95,69,133,231,227,125,174,159,111,202,152,152,187,174,199,134, - 148,167,62,140,70,35,2,3,3,125,50,206,214,24,30,124,240,65,146,156, - 156,76,165,114,169,180,29,60,18,56,151,95,250,105,246,177,39,57,62,21, - 183,150,138,112,154,195,103,75,220,91,87,159,0,82,228,93,146,144,137,155, - 55,252,37,39,111,113,106,20,141,198,35,8,12,140,7,144,225,141,236,21, - 81,18,58,87,97,147,219,107,112,223,149,169,132,187,8,174,46,223,7,14, - 88,192,48,182,251,226,73,180,168,36,72,158,76,248,168,235,243,141,197,93, - 94,13,41,79,125,72,34,210,90,186,3,165,232,77,21,183,182,71,189,2, - 167,208,24,74,221,91,169,242,235,124,25,185,185,70,56,242,168,202,215,17, - 142,47,163,170,150,184,183,158,250,28,58,116,168,180,70,14,128,243,152,92, - 67,144,55,226,206,175,227,155,165,203,71,46,116,125,250,244,113,8,141,235, - 179,68,97,161,119,35,56,111,70,139,191,7,90,131,160,185,210,26,203,164, - 226,25,117,10,156,155,198,48,85,254,236,107,90,67,132,227,11,159,45,113, - 111,235,243,57,111,222,60,42,23,53,5,188,18,37,75,17,157,167,17,140, - 167,100,103,103,187,221,201,36,48,208,182,6,77,41,130,107,10,44,123,23, - 172,220,161,90,17,156,47,162,197,150,192,91,107,233,124,129,52,9,165,41, - 72,235,35,85,17,187,57,113,43,112,117,53,134,205,69,107,142,112,124,37, - 110,190,162,62,159,174,99,114,146,208,185,142,201,121,171,156,74,81,93,211, - 242,171,187,129,114,237,38,245,134,208,213,76,114,8,4,112,2,53,207,3, - 125,18,45,214,133,55,119,52,145,175,125,107,200,58,54,165,245,120,222,236, - 30,149,240,116,18,138,39,184,78,34,81,133,238,230,66,81,224,90,177,184, - 165,250,178,44,205,225,179,53,139,155,44,93,113,76,174,49,229,92,189,250, - 17,34,137,139,55,163,53,111,209,84,161,83,106,16,165,250,122,59,90,116, - 197,157,16,201,223,55,117,108,172,161,2,37,191,222,23,226,6,120,95,132, - 90,203,100,22,149,255,103,239,204,227,163,168,210,189,255,59,213,75,246,16, - 192,133,85,2,42,136,136,178,8,14,162,128,232,0,206,40,226,136,142,142, - 168,220,43,226,146,25,116,92,174,14,51,151,237,206,117,244,170,232,232,48, - 227,250,78,198,237,58,40,10,226,85,196,101,88,68,145,37,32,160,2,34, - 178,134,69,72,66,210,233,116,58,221,125,222,63,170,79,229,116,117,85,117, - 245,150,116,58,207,247,243,233,116,167,150,231,44,213,125,126,245,156,243,156, - 83,169,199,108,86,206,92,249,93,52,108,241,174,195,152,232,186,141,153,40, - 2,41,196,176,110,99,228,39,225,186,140,149,166,153,199,26,254,60,215,232, - 156,120,121,236,177,41,172,181,197,237,177,199,166,176,79,63,61,142,79,63, - 61,142,247,223,55,126,165,107,76,44,221,66,7,68,139,73,186,196,37,158, - 60,16,68,107,99,232,193,133,199,99,180,207,242,190,251,238,187,143,219,121, - 156,10,137,155,49,86,117,107,146,159,136,237,137,60,202,198,44,205,214,26, - 99,109,45,175,174,181,69,54,149,66,103,119,229,254,84,174,240,111,101,139, - 158,36,64,100,34,166,99,112,86,13,92,154,87,241,159,11,117,66,113,75, - 118,141,182,104,154,70,246,141,234,52,214,182,120,196,206,232,70,69,250,183, - 197,187,161,91,91,108,210,141,240,6,229,117,47,101,164,248,23,130,32,210, - 68,66,75,117,165,211,131,179,227,225,164,154,214,72,211,32,15,90,157,138, - 186,139,181,45,81,90,91,220,178,157,108,23,111,130,104,43,196,45,112,118, - 27,88,155,75,65,153,157,59,39,145,243,146,33,147,26,120,179,186,75,225, - 147,182,91,195,75,38,8,130,104,81,226,90,250,53,222,6,54,133,13,114, - 187,67,95,119,169,172,203,176,160,145,184,17,4,145,213,180,169,167,9,16, - 169,35,213,194,86,187,184,95,139,46,70,75,233,81,122,153,156,30,145,25, - 144,192,17,73,211,225,234,157,177,15,34,8,130,104,97,232,233,84,4,65, - 16,68,86,194,200,117,39,146,133,60,56,130,32,50,17,18,56,130,104,167, - 208,141,9,145,237,56,1,160,120,210,142,22,139,118,20,130,74,105,82,154, - 148,102,235,167,67,16,217,12,141,193,17,4,65,16,89,9,69,81,18,68, - 98,164,218,3,50,243,216,90,42,29,130,200,58,140,4,174,53,126,80,148, - 102,250,210,108,105,210,217,245,149,202,242,198,202,103,172,180,98,230,229,111, - 79,151,115,0,184,115,198,212,100,242,221,82,233,16,68,214,97,36,112,182, - 126,36,226,71,21,139,59,103,76,181,115,88,139,167,249,183,167,203,237,152, - 74,105,163,209,26,105,218,225,202,43,174,228,0,176,244,189,165,169,72,151, - 1,224,114,89,195,215,67,182,157,236,254,148,192,185,241,215,137,49,210,9, - 130,200,6,146,30,131,251,243,255,27,106,248,158,40,103,13,218,202,141,222, - 211,73,170,203,144,42,90,170,46,150,190,183,20,75,223,91,154,14,211,173, - 13,151,94,105,195,206,117,74,228,90,166,227,122,183,196,239,137,32,50,133, - 132,199,224,100,17,48,18,136,187,255,125,99,220,54,205,26,129,230,31,101, - 252,54,99,97,38,110,173,41,114,114,35,100,84,23,219,55,15,76,87,87, - 29,71,102,118,123,38,204,39,159,54,0,0,46,29,155,151,150,178,89,127, - 103,55,198,60,198,236,90,166,250,122,71,127,167,38,39,107,146,32,50,158, - 164,130,76,70,14,43,48,220,190,102,125,125,70,217,204,196,52,99,209,66, - 121,18,141,30,147,254,79,153,16,196,186,209,73,118,127,107,35,68,67,127, - 173,94,122,161,15,110,189,109,183,246,255,200,97,5,81,219,0,245,90,154, - 9,152,176,25,227,122,27,93,43,211,235,103,246,157,34,136,108,197,78,23, - 165,97,23,143,213,143,101,228,176,2,108,216,58,42,174,140,220,122,219,110, - 46,108,190,244,66,31,188,244,66,31,219,233,37,202,134,173,163,98,150,195, - 128,180,119,121,25,53,152,162,62,70,14,43,192,173,183,237,78,85,250,70, - 13,97,202,196,109,228,176,2,83,79,56,217,253,241,18,246,228,82,122,221, - 70,14,43,48,188,86,102,24,125,167,99,125,175,45,174,183,85,89,226,250, - 189,18,68,182,98,71,224,228,187,251,22,65,220,233,90,53,22,173,132,222, - 227,73,59,162,14,244,119,255,169,162,91,183,110,64,88,180,195,159,83,130, - 104,80,205,26,214,100,247,91,16,49,238,118,233,216,188,120,207,79,24,171, - 107,149,226,239,180,213,247,176,197,127,175,4,145,169,216,13,50,33,145,203, - 66,113,3,128,202,202,74,102,244,185,141,194,63,249,180,1,250,151,16,185, - 116,120,113,2,59,215,42,69,223,105,59,223,67,18,57,130,64,124,99,112, - 12,41,30,163,137,197,173,183,237,214,186,231,210,217,200,219,32,43,197,13, - 0,238,248,205,29,252,217,103,158,149,63,183,85,145,227,34,160,68,143,16, - 57,179,253,241,162,239,50,148,5,43,226,179,133,13,249,59,45,236,189,244, - 66,31,211,186,191,245,182,221,92,39,140,90,30,164,225,128,40,65,75,97, - 119,54,65,180,57,34,4,206,234,135,171,195,214,143,198,238,56,156,156,174, - 89,154,47,189,208,7,176,217,216,135,27,3,203,134,58,142,49,66,125,148, - 161,156,78,196,129,177,26,168,13,91,237,37,104,214,96,202,105,218,41,163, - 29,132,184,233,63,103,43,97,177,75,170,209,23,245,46,190,183,226,70,76, - 124,22,156,63,112,21,128,200,239,154,209,113,118,174,163,116,76,212,205,214, - 249,3,87,169,2,169,155,75,104,148,87,130,104,79,68,8,156,141,31,154, - 252,227,138,249,131,57,127,224,42,203,187,88,57,93,185,177,208,237,131,216, - 46,26,140,88,216,153,40,125,254,192,85,118,69,78,46,107,132,221,120,186, - 154,94,122,161,15,179,59,81,29,38,13,166,222,158,237,196,77,184,242,138, - 43,121,120,254,155,214,120,134,183,37,100,59,150,232,90,237,23,251,12,60, - 21,219,246,91,19,59,189,13,41,242,202,237,244,164,180,120,143,3,65,100, - 34,241,76,244,206,218,110,58,27,100,229,24,164,78,220,0,128,37,51,225, - 91,190,81,209,35,11,152,213,185,177,4,48,225,204,181,0,86,215,44,197, - 223,101,171,239,35,137,27,65,132,177,43,112,237,89,220,4,89,37,114,231, - 15,61,223,180,28,86,251,98,97,38,66,98,187,149,72,37,186,47,30,194, - 1,39,41,177,181,102,125,125,212,60,53,59,65,38,86,231,155,165,99,128, - 157,32,19,141,151,94,232,195,90,115,94,39,65,180,6,118,130,76,72,220, - 154,201,154,64,155,13,27,55,0,38,97,230,27,54,110,104,139,227,53,236, - 210,177,121,134,129,38,169,12,48,145,217,190,121,32,59,107,208,86,174,23, - 142,179,6,109,197,154,245,245,56,127,160,250,127,120,66,183,161,80,153,173, - 82,98,83,140,226,158,199,168,217,253,185,29,243,4,209,182,177,59,15,46, - 234,71,99,245,3,84,127,220,246,198,203,4,242,29,230,173,183,237,54,188, - 219,77,53,231,15,92,21,179,28,6,24,214,71,42,49,242,10,68,125,172, - 89,95,159,180,55,115,254,136,243,99,9,52,11,31,211,214,96,151,142,205, - 131,254,37,45,215,5,164,248,218,9,129,50,123,183,123,140,149,221,84,45, - 205,102,39,93,130,200,38,146,90,170,43,29,162,211,26,221,40,153,216,117, - 147,206,60,109,248,98,67,74,142,177,98,205,250,122,140,28,86,96,90,142, - 100,247,91,16,17,73,152,14,207,77,143,29,225,138,71,220,244,231,164,18, - 18,55,162,61,145,240,211,4,196,26,129,70,239,137,174,31,40,223,173,38, - 210,32,36,130,156,95,179,247,150,198,170,14,146,173,135,240,248,154,29,27, - 44,153,177,184,187,255,125,35,214,172,175,55,173,195,100,247,199,75,58,188, - 55,130,32,50,155,164,60,184,116,9,66,75,137,155,76,166,136,155,32,93, - 117,176,97,227,6,219,118,226,57,214,136,88,117,152,236,254,86,38,166,248, - 75,207,37,180,115,163,16,43,228,63,221,233,16,68,214,145,240,19,189,109, - 62,200,212,46,45,158,102,28,182,236,122,49,49,27,142,214,72,179,189,35, - 173,69,153,234,186,106,169,186,167,107,76,16,9,146,240,19,189,83,12,165, - 73,164,3,170,111,130,104,199,36,213,69,73,16,6,112,192,208,91,141,240, - 74,19,220,159,82,193,98,140,244,143,32,178,25,18,56,34,213,180,21,213, - 72,40,159,181,139,251,181,200,244,137,150,74,135,32,178,25,18,56,130,176, - 73,135,171,119,182,118,22,8,130,136,131,132,167,9,16,4,65,16,68,38, - 195,168,43,132,32,236,65,30,28,65,180,45,72,224,8,162,157,66,130,77, - 100,59,78,0,40,158,180,163,197,2,3,132,160,82,154,148,38,165,217,250, - 233,16,68,54,67,99,112,4,65,16,68,86,66,81,148,4,145,0,15,62, - 248,96,74,61,160,71,31,125,212,208,99,155,55,111,94,74,211,153,53,107, - 86,91,153,198,65,16,73,19,37,112,179,103,207,78,233,15,106,238,220,185, - 49,127,80,148,102,250,210,108,105,82,93,70,153,84,150,55,86,62,99,165, - 101,38,72,50,95,124,166,62,87,111,196,69,231,39,156,111,59,130,180,225, - 203,205,28,0,206,191,96,80,198,125,31,8,162,53,137,18,56,187,141,200, - 186,181,155,108,53,100,115,231,206,181,115,76,139,167,249,243,203,39,217,49, - 133,225,63,25,156,178,70,163,53,210,180,195,107,175,189,198,1,224,198,27, - 111,76,58,221,185,115,231,178,217,179,103,115,185,172,255,247,193,226,136,107, - 156,236,254,84,49,103,206,156,184,182,19,4,209,182,72,122,12,238,203,77, - 93,13,223,19,229,153,191,29,230,70,239,233,36,213,101,72,21,45,85,23, - 59,119,238,196,206,157,217,23,81,55,123,246,108,46,94,233,76,231,241,167, - 14,113,163,247,120,143,209,179,224,185,35,41,207,119,58,108,18,68,166,146, - 176,192,125,185,169,171,169,48,36,42,16,102,13,250,51,127,59,204,211,213, - 184,91,149,161,181,132,78,46,111,186,69,78,110,252,211,45,4,173,193,205, - 183,252,30,55,223,242,251,180,149,205,76,184,100,1,179,115,140,30,33,68, - 169,18,164,5,207,29,225,169,182,73,16,153,78,82,30,92,207,110,110,195, - 87,166,217,204,196,52,51,33,79,162,209,159,59,119,46,19,93,128,169,20, - 130,88,55,8,201,238,111,109,132,64,245,234,225,142,120,253,120,232,41,244, - 234,209,124,173,228,109,242,75,182,161,167,103,55,23,122,118,115,89,166,111, - 20,128,98,21,148,34,108,198,178,75,16,217,66,76,129,51,235,226,177,106, - 108,123,118,115,163,242,72,175,184,50,178,120,73,21,23,54,55,85,252,25, - 155,42,254,108,59,189,68,169,60,210,43,102,57,244,180,68,151,151,62,93, - 185,62,122,118,115,99,241,146,170,148,164,111,52,174,149,170,177,174,47,55, - 117,69,207,110,110,83,145,74,118,127,188,164,195,139,147,133,74,176,97,253, - 255,152,30,175,223,103,116,190,158,158,221,92,120,119,105,244,245,182,18,50, - 163,125,36,106,68,123,36,166,192,165,227,206,62,22,131,135,220,13,0,81, - 34,215,218,200,30,79,75,165,41,234,64,212,73,170,41,42,42,210,68,187, - 168,168,40,101,118,133,72,155,221,64,36,187,223,12,253,184,219,203,255,248, - 239,184,206,79,6,33,96,231,15,251,143,168,125,98,155,149,0,218,69,8, - 152,81,132,165,216,150,234,233,5,4,209,22,177,213,69,73,34,151,157,226, - 6,0,247,223,127,63,51,250,220,22,153,61,123,54,23,99,110,242,75,136, - 92,58,199,226,172,196,77,144,10,145,179,18,55,1,137,28,65,168,216,158, - 232,45,194,191,103,207,158,205,91,170,145,31,60,228,110,173,123,46,157,141, - 124,44,178,85,220,0,96,233,255,45,229,27,214,109,208,62,95,249,243,43, - 219,164,200,9,113,51,66,136,156,217,254,120,121,243,173,227,17,194,33,11, - 86,196,103,11,27,27,214,255,143,38,120,194,222,181,147,59,155,214,253,187, - 75,171,248,230,77,127,209,254,151,197,171,242,232,105,81,219,228,243,44,178, - 65,16,89,77,132,192,233,199,118,204,188,39,187,119,193,118,199,225,228,116, - 205,210,220,84,241,103,192,102,99,191,120,73,21,159,116,85,39,203,134,218, - 110,222,172,162,12,245,226,99,149,230,226,37,85,188,242,136,173,36,35,234, - 64,95,31,34,77,59,101,180,131,16,55,253,231,108,37,44,114,73,53,250, - 66,136,132,48,157,63,236,63,12,61,184,30,93,126,0,0,28,56,220,91, - 219,102,116,156,149,176,9,38,94,217,41,194,43,147,61,184,13,95,78,228, - 0,48,81,218,38,142,19,231,145,208,17,237,145,8,129,139,213,96,202,158, - 204,226,37,119,199,252,193,116,59,117,175,173,76,76,186,170,19,19,34,167, - 23,13,217,147,177,107,207,206,68,233,110,167,238,181,37,114,194,115,21,159, - 117,123,109,229,7,80,203,104,119,162,58,194,158,43,96,238,193,165,66,220, - 94,123,237,53,190,115,231,206,136,46,232,215,94,123,141,39,58,225,59,150, - 232,90,237,23,251,22,47,169,226,102,55,57,169,18,245,116,32,68,78,246, - 204,244,216,233,198,140,197,172,89,179,216,188,121,243,248,188,121,243,184,89, - 55,165,157,110,76,130,104,15,216,158,38,144,205,221,116,177,200,214,49,72, - 89,220,0,181,156,201,76,248,150,111,84,244,200,2,102,117,110,44,1,76, - 56,115,45,128,213,24,91,42,196,77,96,53,198,70,226,70,16,205,216,18, - 184,246,44,110,130,108,19,185,231,158,125,206,180,28,86,251,98,97,38,66, - 98,187,149,72,37,186,47,30,94,254,199,127,167,236,123,188,247,128,31,123, - 15,248,35,182,217,9,50,177,58,223,136,253,149,77,81,219,236,4,153,200, - 76,188,178,19,51,178,67,16,217,140,173,121,112,64,251,22,55,65,54,137, - 92,229,161,74,211,121,112,149,135,42,83,154,86,75,48,119,238,92,102,54, - 37,32,149,1,38,50,247,223,211,149,1,205,66,37,94,39,119,189,39,66, - 184,228,109,242,75,182,161,103,127,101,147,246,50,195,106,154,128,25,177,108, - 18,68,54,97,107,30,156,81,67,184,191,210,252,206,115,127,165,223,246,120, - 153,96,210,85,157,152,176,57,120,200,221,81,226,102,149,94,162,116,59,117, - 111,204,114,232,49,171,143,84,162,79,87,174,143,253,149,254,164,189,153,231, - 94,120,206,50,18,118,238,220,185,236,185,23,18,247,226,90,11,33,114,250, - 151,16,183,84,122,111,2,33,80,102,239,118,143,209,83,118,251,169,76,188, - 139,207,201,34,219,76,133,61,130,200,116,146,122,30,92,58,68,39,29,54, - 51,49,205,88,164,51,79,149,7,98,123,104,118,142,177,98,127,165,31,61, - 187,185,77,203,145,236,126,51,244,79,37,72,135,231,166,199,142,112,197,35, - 110,130,116,8,17,137,27,209,158,72,120,45,202,11,6,31,50,125,23,159, - 227,229,55,119,118,97,191,185,179,11,19,159,141,222,83,141,156,95,179,247, - 150,198,170,14,146,173,135,231,158,181,246,222,4,115,231,206,101,201,140,197, - 93,48,248,16,246,87,250,77,235,48,217,253,241,146,14,239,141,32,136,204, - 38,41,15,46,93,130,208,82,226,38,147,41,226,38,72,87,29,220,126,199, - 237,182,237,196,115,172,17,177,234,48,217,253,173,137,157,39,122,47,94,250, - 166,237,99,147,121,162,247,251,31,190,107,251,88,138,174,36,218,19,9,63, - 209,251,255,62,88,156,178,76,180,70,154,118,109,217,205,155,29,239,160,53, - 210,108,239,136,192,147,84,215,149,157,39,122,167,2,18,36,130,72,156,132, - 159,232,157,74,40,77,34,29,80,125,19,68,251,38,169,46,74,130,208,35, - 188,79,189,183,170,247,74,19,217,159,106,193,154,51,103,78,42,205,17,4, - 145,97,144,192,17,41,165,173,120,77,137,230,179,118,113,191,22,153,62,209, - 82,233,16,68,54,67,2,71,16,54,233,112,117,226,203,152,17,4,209,242, - 36,60,77,128,32,8,130,32,50,25,70,93,33,4,97,15,242,224,8,162, - 109,65,30,28,65,216,228,196,59,125,91,59,11,4,65,196,129,19,0,138, - 39,237,72,56,48,64,120,128,100,131,108,180,23,27,4,65,180,13,200,131, - 35,8,130,32,178,18,18,56,130,32,8,34,43,177,59,77,64,238,154,177, - 219,197,147,200,57,177,108,164,195,102,186,206,137,101,131,202,98,109,51,93, - 231,196,178,145,10,155,4,65,100,0,182,61,184,79,63,173,193,167,159,214, - 0,145,13,128,25,92,58,62,81,12,109,196,153,15,240,48,73,216,224,156, - 115,232,76,196,139,161,141,120,203,98,68,91,189,46,134,134,155,235,40,225, - 178,24,93,239,4,108,196,147,15,130,32,50,20,234,162,36,8,130,32,178, - 146,184,5,206,198,93,58,79,210,67,176,101,195,142,183,16,235,78,222,78, - 89,146,244,220,108,217,72,214,243,177,105,35,99,174,75,204,68,98,123,79, - 49,243,97,227,194,217,177,17,43,31,4,65,100,48,86,2,199,165,23,198, - 142,45,137,219,184,116,78,132,173,36,108,36,148,15,198,152,156,135,100,108, - 200,118,226,46,139,206,70,66,249,208,167,223,150,175,139,62,125,169,126,18, - 205,7,79,129,141,132,242,65,16,68,230,97,22,100,98,120,119,59,118,108, - 137,54,214,50,118,108,9,71,244,32,188,118,158,56,214,192,134,209,121,241, - 218,136,149,15,237,14,158,49,150,168,13,205,9,176,176,17,179,44,54,108, - 196,44,139,145,61,25,97,219,238,117,49,177,17,215,117,73,48,31,134,246, - 244,54,196,24,152,73,158,98,126,63,36,27,156,25,171,85,60,54,236,212, - 13,65,16,25,136,145,7,103,218,117,19,110,184,98,26,53,107,52,132,13, - 216,240,24,98,217,176,147,15,51,81,73,165,13,216,40,75,42,242,1,139, - 94,55,206,185,237,235,98,101,3,54,175,75,178,249,64,140,239,152,29,15, - 42,214,247,163,165,108,16,4,145,185,36,28,100,98,208,184,183,200,24,143, - 141,124,196,61,112,102,84,150,150,24,123,179,145,143,184,201,228,235,18,119, - 162,209,162,27,119,62,12,46,66,34,54,244,249,32,8,162,13,64,81,148, - 4,65,16,68,86,66,2,71,16,4,65,100,37,9,11,92,120,172,69,30, - 164,96,9,70,210,201,196,109,195,32,31,48,9,44,136,199,70,188,38,140, - 136,219,134,81,89,226,37,147,175,75,220,137,170,245,151,84,89,12,46,66, - 34,54,244,249,32,8,162,13,96,36,112,166,13,128,213,160,188,140,85,224, - 132,221,134,47,150,13,59,249,176,10,122,72,149,13,216,40,75,42,242,1, - 11,193,180,10,98,145,177,10,156,176,219,136,199,178,97,183,44,86,245,97, - 103,236,50,214,247,163,165,108,16,4,145,185,152,77,19,96,225,48,239,8, - 228,208,106,24,55,134,108,236,216,18,109,249,35,147,198,35,86,35,26,211, - 134,141,124,128,49,198,196,170,77,70,13,178,157,178,132,77,192,204,134,157, - 178,196,178,97,167,44,122,123,9,216,136,168,211,68,203,18,203,70,188,101, - 49,250,142,201,211,42,76,108,196,252,126,72,54,204,242,16,143,13,59,101, - 33,8,34,3,177,234,162,100,210,43,161,245,11,165,115,34,108,37,97,35, - 161,124,136,41,113,41,176,33,219,137,187,44,58,27,137,174,9,153,53,215, - 69,159,126,34,30,147,190,44,41,176,65,158,27,65,100,9,113,143,193,217, - 184,59,111,145,49,31,59,94,66,172,65,48,59,101,105,137,177,184,52,141, - 189,69,229,35,83,174,75,204,68,98,123,77,49,243,97,227,194,217,177,17, - 43,31,4,65,100,48,20,69,73,16,4,65,100,37,118,159,7,39,143,83, - 216,185,163,53,28,95,137,19,67,27,113,230,195,240,78,62,222,178,24,141, - 123,197,137,161,141,120,203,98,68,91,189,46,134,134,155,47,85,194,101,137, - 211,229,54,179,17,79,62,8,130,200,80,236,10,92,34,63,244,84,52,14, - 81,33,222,105,176,153,174,115,98,217,160,178,36,111,35,83,203,66,16,68, - 6,64,93,148,4,65,16,68,86,66,2,71,16,4,65,100,37,172,118,113, - 63,138,137,38,8,155,116,184,122,103,107,103,129,32,8,155,216,14,50,33, - 136,182,4,9,17,65,16,78,0,40,158,180,131,77,159,87,193,253,190,58, - 0,128,59,183,8,207,207,26,18,49,216,46,246,235,247,233,183,11,143,176, - 120,210,14,211,193,250,84,218,138,149,134,92,30,217,158,188,223,233,204,195, - 139,243,134,167,53,184,32,213,105,27,217,211,219,50,219,158,106,91,177,234, - 90,159,222,244,89,235,184,223,239,133,219,157,143,194,142,61,48,255,183,221, - 82,90,247,212,43,65,16,4,16,238,162,188,127,203,255,98,243,103,229,56, - 118,224,27,0,192,73,61,206,198,160,139,166,106,226,115,237,93,111,242,29, - 155,151,194,235,57,134,78,93,206,192,185,63,153,130,23,231,13,103,250,237, - 131,46,154,138,199,207,189,1,128,185,40,165,210,150,17,211,102,173,227,63, - 86,126,131,31,190,249,20,158,154,202,136,242,8,123,250,242,22,150,116,67, - 239,179,199,226,228,110,103,199,20,27,209,152,135,2,193,152,121,81,156,142, - 168,6,63,153,180,101,244,246,170,14,239,66,126,225,73,232,55,232,74,188, - 249,215,107,217,180,89,235,248,150,181,175,70,109,79,181,173,233,243,42,184, - 209,119,199,236,218,77,125,104,5,223,185,229,125,84,29,221,133,130,130,206, - 232,126,250,48,116,58,165,47,58,157,218,55,74,232,132,16,134,252,254,216, - 117,237,118,195,237,206,199,243,243,134,179,218,197,253,56,121,112,4,65,56, - 1,192,239,171,195,177,3,223,96,197,178,255,135,195,135,15,227,250,169,51, - 225,243,168,203,23,93,123,215,155,124,219,218,255,197,222,93,107,176,238,243, - 79,48,241,186,123,112,226,216,94,92,53,173,60,106,187,56,199,140,84,218, - 210,35,132,109,221,199,127,65,245,143,187,113,252,200,119,216,190,109,125,84, - 121,244,229,173,173,173,197,240,11,47,69,245,143,187,209,241,228,62,184,106, - 90,57,55,19,27,185,49,111,106,242,197,204,147,203,149,139,147,122,156,141, - 233,243,42,56,112,67,82,105,155,33,219,59,235,156,97,104,242,121,112,213, - 180,114,126,226,216,222,168,237,215,222,245,38,55,19,185,68,109,249,60,53, - 166,223,29,153,123,159,172,228,85,71,118,162,114,247,58,28,216,181,6,107, - 62,121,3,3,206,27,129,31,15,125,131,147,187,158,141,238,167,15,195,212, - 135,86,112,33,116,211,103,173,227,59,190,122,23,71,14,126,3,191,191,62, - 102,61,184,221,5,56,181,251,217,152,62,107,29,7,110,178,91,125,4,65, - 100,49,78,0,8,5,130,104,106,242,161,182,182,22,53,53,53,104,106,242, - 161,193,115,60,66,120,132,88,120,106,14,97,239,174,213,168,58,188,11,149, - 123,54,98,251,182,245,216,183,111,95,204,6,95,22,183,100,109,201,152,9, - 91,109,109,45,14,31,62,172,149,71,70,148,87,176,226,227,165,200,207,207, - 143,41,54,178,0,88,81,91,91,11,0,240,122,189,81,13,126,162,105,155, - 33,219,91,241,241,82,140,185,236,74,52,5,124,232,212,229,12,120,106,14, - 69,108,7,96,41,114,241,218,186,106,90,57,111,240,28,143,250,238,232,185, - 247,201,74,190,255,187,213,216,253,245,199,56,188,239,43,156,56,190,23,126, - 191,31,107,63,91,142,64,32,128,139,198,252,44,74,232,170,143,253,128,253, - 63,172,199,202,255,123,81,173,123,11,47,174,177,177,17,245,245,245,184,233, - 206,63,161,119,255,203,98,85,25,65,16,237,132,168,32,147,64,32,128,198, - 250,234,40,225,17,98,81,87,83,137,29,21,75,225,247,214,96,199,246,175, - 112,248,240,97,173,65,55,195,72,220,18,181,37,48,19,54,0,90,99,91, - 85,85,5,143,199,3,151,43,215,212,142,215,235,69,77,77,13,252,126,127, - 76,177,145,5,160,182,182,22,94,175,215,180,225,245,122,189,8,4,2,81, - 13,190,226,116,192,229,202,213,242,40,108,36,43,116,162,222,150,191,191,8, - 63,29,119,37,126,172,252,22,126,111,77,196,246,113,63,187,6,128,181,200, - 197,99,75,136,95,99,125,53,0,245,187,99,196,254,239,86,99,235,186,127, - 162,114,247,58,124,253,213,23,240,251,253,104,108,108,68,77,141,42,252,203, - 222,91,8,151,203,133,75,199,95,173,9,93,97,201,169,8,248,60,0,128, - 234,234,106,52,54,54,162,169,169,201,208,190,16,56,191,191,222,86,119,38, - 65,16,237,3,195,40,74,189,240,136,198,216,231,243,161,209,119,2,141,190, - 19,216,179,103,15,106,107,107,113,236,216,49,75,17,209,139,91,50,182,0, - 123,194,86,91,91,11,143,199,131,64,32,128,105,119,252,22,103,156,51,30, - 238,220,66,67,123,66,160,188,94,111,76,177,57,188,103,3,2,141,94,237, - 120,209,64,27,17,8,4,224,241,120,162,182,187,115,139,80,114,202,233,24, - 126,225,165,88,252,214,43,8,4,2,168,173,173,133,211,233,76,72,232,132, - 96,138,178,120,189,94,124,180,124,41,70,141,26,21,81,70,175,215,27,83, - 228,226,181,37,139,159,25,211,103,173,227,27,87,190,128,202,221,23,54,131, - 15,0,0,32,0,73,68,65,84,235,176,105,253,74,212,213,213,161,190,190, - 30,30,143,7,77,77,77,17,55,8,175,191,252,44,10,10,10,48,229,223, - 31,68,81,125,15,212,159,56,170,137,161,81,93,2,208,108,120,189,94,211, - 60,16,4,209,62,137,18,56,167,211,25,37,60,149,149,149,240,120,60,152, - 60,121,50,0,96,203,150,45,154,23,86,83,83,99,42,34,70,226,150,168, - 173,120,133,237,214,105,101,40,57,169,55,206,56,103,60,250,13,186,18,47, - 206,27,206,230,219,136,174,51,19,186,31,15,108,67,48,208,136,186,112,224, - 138,85,151,25,160,10,156,145,71,243,252,172,33,236,218,187,222,228,1,127, - 3,110,153,246,16,106,142,253,128,69,111,189,150,176,208,201,130,185,252,253, - 69,90,25,86,173,90,133,81,163,70,225,220,115,207,197,170,85,171,180,237, - 86,34,23,175,45,189,248,25,225,247,123,81,93,189,15,155,214,175,212,60, - 106,89,216,132,48,5,2,1,252,219,180,59,145,147,91,4,0,240,121,171, - 225,169,59,10,0,154,231,102,230,193,137,243,9,130,32,100,162,86,50,201, - 207,207,7,160,10,143,153,32,1,208,4,233,214,105,101,232,86,58,84,19, - 17,97,103,250,188,10,254,253,55,31,199,20,55,187,182,182,172,125,21,21, - 43,95,196,174,109,31,98,205,39,175,71,140,179,85,86,86,226,232,209,163, - 168,169,169,193,45,83,111,199,61,247,255,55,74,207,186,4,195,199,205,192, - 240,203,126,109,26,61,104,133,240,208,106,106,106,176,252,253,69,88,242,214, - 179,56,118,248,91,52,250,78,216,238,70,53,227,205,191,94,203,134,95,246, - 107,12,31,55,3,165,103,93,130,169,211,30,192,53,147,111,132,211,233,52, - 76,123,209,107,243,177,107,219,135,168,88,249,34,42,86,189,20,14,90,81, - 121,126,214,16,118,250,217,151,161,91,233,80,252,116,220,149,218,245,243,122, - 189,88,182,108,25,0,96,212,168,81,17,219,23,191,245,10,246,238,90,131, - 29,155,151,98,218,172,117,73,217,18,130,103,134,232,50,172,170,170,194,145, - 35,71,112,233,165,151,97,194,132,203,1,168,55,9,78,167,19,215,95,127, - 3,166,76,185,9,57,185,69,40,234,208,13,0,176,250,95,75,208,228,51, - 246,218,8,130,32,236,16,37,112,162,49,19,141,108,32,16,208,4,105,237, - 218,181,0,160,109,191,254,250,235,225,206,47,65,183,30,131,162,68,196,239, - 171,67,109,213,126,77,136,196,152,84,162,182,170,14,239,194,7,239,60,139, - 117,159,127,18,17,64,34,231,113,202,148,41,112,231,151,160,71,223,139,208, - 119,200,68,44,121,113,42,75,102,126,155,240,170,170,170,170,112,236,216,49, - 44,91,182,76,19,229,100,121,113,222,112,182,228,197,169,172,239,144,137,232, - 209,247,34,184,243,75,48,97,194,4,76,152,48,65,19,16,145,246,225,195, - 135,241,214,27,127,199,75,11,102,161,182,106,63,196,156,51,193,155,127,189, - 150,117,43,29,4,119,126,137,38,64,162,139,84,47,76,98,251,27,175,190, - 0,79,77,37,2,129,134,164,108,213,214,214,98,213,170,85,218,117,48,163, - 169,169,9,215,92,119,35,10,75,186,194,149,91,136,78,157,58,97,242,228, - 107,49,121,242,181,0,128,207,62,91,141,70,95,29,234,78,84,162,81,42, - 95,99,99,99,242,149,77,16,68,187,36,74,224,2,129,0,38,76,152,160, - 5,64,56,157,78,188,247,222,123,0,128,159,252,228,39,90,23,158,216,238, - 247,214,160,242,192,102,92,123,215,155,17,221,127,238,220,34,20,119,234,137, - 179,206,25,166,117,249,37,99,171,83,151,51,112,249,213,119,96,248,133,151, - 162,178,178,82,235,146,12,4,2,112,58,157,88,182,108,25,86,173,90,5, - 191,183,6,7,118,126,134,157,21,239,226,170,105,229,92,246,80,236,18,8, - 4,224,243,249,224,243,249,224,241,120,224,241,120,80,83,83,131,9,19,38, - 224,220,115,207,77,201,120,207,180,89,235,248,85,211,202,249,206,138,119,113, - 96,231,103,240,123,107,176,103,207,30,77,64,133,168,136,215,53,147,111,196, - 173,101,243,80,220,169,39,220,225,110,60,193,181,119,189,201,43,247,108,214, - 108,136,243,1,96,194,132,9,0,154,189,101,81,174,235,167,220,134,194,146, - 110,112,58,243,146,178,229,241,120,48,106,212,40,237,6,70,143,226,118,107, - 159,133,135,150,147,91,132,139,46,186,24,0,176,121,243,38,108,222,188,9, - 46,151,11,77,62,15,60,53,135,240,205,214,10,212,215,215,71,164,77,16, - 4,17,47,166,139,45,139,198,12,128,38,32,128,42,76,194,195,112,58,157, - 88,178,248,159,168,220,179,209,180,187,171,215,25,35,181,176,242,100,108,157, - 251,147,41,24,50,122,26,206,56,103,60,110,153,246,16,174,154,244,75,0, - 209,99,93,43,87,124,136,79,151,255,19,123,119,173,65,197,202,23,177,238, - 227,191,68,9,166,25,178,176,137,151,24,207,187,239,161,199,113,82,151,254, - 200,201,237,160,229,57,81,174,189,235,77,190,238,227,191,160,98,229,139,216, - 187,107,13,54,172,253,32,34,152,167,170,170,74,243,136,68,218,103,14,186, - 18,67,70,79,195,144,81,183,70,173,254,242,253,55,31,171,245,22,182,81, - 91,91,11,159,207,23,209,21,236,245,122,181,237,211,238,248,45,122,157,49, - 210,180,91,57,30,91,215,95,127,61,0,181,107,91,116,177,202,184,221,249, - 232,210,227,60,92,63,245,1,184,92,121,154,135,182,119,239,30,124,247,157, - 58,25,91,4,145,124,246,217,106,124,249,229,90,28,57,114,4,213,213,213, - 73,213,49,65,16,132,97,20,101,78,110,7,184,243,75,112,213,164,95,226, - 163,229,75,181,187,243,247,222,123,15,87,92,113,5,70,141,26,133,85,171, - 86,105,219,223,122,227,239,248,245,253,243,225,215,141,153,188,249,215,107,153, - 16,151,113,63,187,6,203,223,95,148,176,45,209,16,203,43,149,220,122,199, - 31,44,131,52,0,104,226,58,45,198,4,96,33,102,178,96,138,64,149,51, - 7,93,137,222,103,143,69,67,237,81,108,93,251,70,204,74,181,242,58,166, - 207,171,224,27,62,125,14,123,119,174,198,214,138,149,0,172,131,100,68,218, - 102,81,148,126,95,29,106,142,126,175,117,5,239,219,183,15,53,53,53,152, - 50,101,10,128,102,65,58,118,236,152,22,196,211,235,140,145,56,231,39,55, - 24,118,5,199,99,235,214,105,101,40,234,212,11,126,111,13,220,146,167,38, - 243,252,188,225,108,234,67,43,120,97,225,73,216,190,121,9,222,123,235,111, - 112,58,157,90,232,191,136,142,172,175,175,215,188,54,191,223,175,117,93,10, - 172,2,76,8,130,32,140,48,20,184,162,146,110,232,209,247,34,212,86,237, - 215,132,73,220,177,11,241,251,233,184,43,241,209,242,165,218,118,179,201,217, - 70,34,151,168,45,32,62,161,3,128,197,111,189,130,59,238,249,159,40,193, - 4,154,231,123,201,222,26,16,45,108,66,92,110,254,143,79,249,183,155,222, - 5,208,60,207,205,76,204,204,182,11,17,217,90,177,50,41,97,19,200,147, - 244,69,215,173,44,60,0,34,34,84,205,196,45,17,91,221,207,24,129,226, - 78,61,113,96,231,103,166,30,28,0,148,63,50,134,77,125,104,5,247,120, - 142,225,138,201,119,162,234,240,46,44,93,242,70,84,52,165,168,207,187,126, - 253,0,58,158,220,71,139,162,108,108,108,180,140,90,141,21,209,74,16,68, - 251,36,162,69,18,141,76,78,65,71,244,60,99,4,128,17,112,57,115,49, - 238,103,215,104,115,182,244,226,39,182,91,161,23,185,100,108,9,98,9,157, - 236,145,89,9,166,16,23,192,92,216,196,177,98,158,152,168,39,33,74,86, - 232,231,244,25,137,72,34,194,166,199,235,245,106,221,143,178,240,120,189,94, - 120,60,158,152,226,150,136,173,190,67,38,2,0,126,60,248,181,233,24,156, - 160,252,145,49,108,250,172,117,252,164,46,103,224,224,247,235,49,229,223,31, - 196,137,227,123,241,198,235,47,193,239,247,35,16,8,96,250,29,191,69,135, - 206,189,208,111,176,106,247,240,190,175,180,73,220,177,236,139,125,138,137,39, - 73,16,68,251,195,9,52,55,220,226,78,216,229,202,69,135,78,167,225,229, - 255,25,171,9,211,164,201,55,225,141,87,95,64,78,65,71,156,126,246,101, - 240,251,235,225,114,230,106,219,173,38,103,3,145,34,151,172,45,25,51,161, - 59,81,115,16,175,150,255,13,129,64,32,202,158,40,175,152,112,110,87,92, - 220,185,69,56,169,199,217,184,126,234,204,184,214,162,204,45,44,137,74,91, - 136,200,45,83,111,79,74,216,228,107,119,253,148,219,52,225,113,187,11,240, - 227,193,175,225,247,251,49,101,234,157,182,196,45,17,91,55,255,199,167,92, - 255,221,49,227,249,121,195,217,189,79,86,242,78,167,244,69,247,211,135,225, - 224,247,235,113,251,111,230,225,196,241,189,120,185,252,111,232,208,185,23,6, - 12,155,140,110,125,134,35,228,247,35,167,160,35,110,186,243,79,182,215,162, - 236,217,123,24,220,238,228,198,71,9,130,200,30,156,64,115,195,125,243,244, - 57,0,16,209,40,11,97,114,229,22,226,222,63,60,139,174,189,135,160,195, - 73,189,180,39,0,136,237,250,134,220,136,84,218,210,99,36,116,247,255,225, - 175,81,229,49,42,175,93,113,121,126,214,16,22,207,211,4,0,32,183,176, - 4,207,207,26,194,30,15,79,50,151,69,50,158,180,205,16,246,166,222,245, - 176,54,169,93,60,1,160,107,239,33,81,219,83,109,43,183,176,196,244,187, - 99,132,120,98,128,94,232,102,62,252,42,122,245,31,131,110,125,134,163,252, - 145,49,234,147,10,18,124,154,192,227,244,184,28,130,32,16,126,92,142,157, - 231,193,77,155,181,142,7,2,13,81,251,244,219,237,60,195,45,149,182,172, - 210,240,251,60,134,143,172,145,203,27,10,4,225,206,45,108,149,231,193,37, - 147,118,91,126,30,156,204,189,79,86,114,79,245,1,136,231,195,61,159,130, - 235,64,143,203,33,8,2,8,11,92,107,103,130,32,82,13,9,28,65,16, - 36,112,4,65,100,5,116,83,67,232,113,2,192,139,187,111,135,207,103,30, - 52,145,155,107,28,56,48,121,242,36,148,84,168,235,10,166,194,70,205,144, - 15,208,179,103,111,123,57,215,81,183,228,172,172,179,33,186,247,158,3,148, - 91,0,228,168,187,35,110,72,24,192,121,243,132,125,38,237,119,72,135,41, - 225,237,10,128,80,248,115,40,252,98,0,80,183,184,95,16,0,138,38,237, - 112,132,183,57,1,4,195,199,202,118,165,164,35,236,233,187,22,69,122,8, - 219,129,238,24,46,210,180,211,5,93,86,86,54,100,193,130,5,21,226,221, - 234,216,100,186,182,99,145,46,219,100,55,166,221,57,0,102,3,152,27,254, - 108,120,30,65,200,104,211,4,38,77,154,20,215,137,253,251,247,199,254,253, - 63,68,108,75,133,13,0,248,246,219,111,1,0,140,49,40,74,244,98,43, - 156,171,223,229,80,40,4,0,88,182,108,25,166,245,73,159,13,187,164,203, - 198,237,64,168,10,80,30,138,22,25,112,128,49,85,100,244,24,109,139,56, - 15,0,196,185,98,249,104,6,132,194,251,252,97,241,20,199,197,108,64,194, - 121,225,146,125,125,30,100,27,182,27,198,178,178,178,141,225,119,177,105,168, - 221,115,227,160,8,192,213,0,174,128,154,183,15,1,188,152,132,189,136,250, - 42,45,45,189,100,207,158,61,43,146,176,151,86,187,247,221,119,95,132,221, - 69,139,22,165,42,191,201,114,22,128,251,1,140,131,122,163,244,239,0,122, - 0,120,28,192,246,86,204,23,209,6,48,158,153,155,1,48,198,76,197,9, - 80,5,74,188,210,105,35,19,96,140,177,153,0,126,151,194,140,90,9,150, - 188,207,142,176,37,120,30,183,122,38,67,89,89,153,11,64,62,128,60,168, - 119,236,127,2,144,11,96,92,89,89,89,23,0,13,0,188,11,22,44,72, - 118,137,19,5,192,24,0,159,0,88,15,96,88,120,251,100,0,63,3,240, - 139,4,237,106,94,111,10,197,45,109,118,159,120,226,9,38,68,46,131,196, - 237,58,0,175,252,241,143,15,187,39,78,188,6,253,251,247,193,222,189,123, - 123,46,92,184,240,214,153,51,103,222,4,117,105,162,133,173,156,71,34,131, - 201,72,129,19,194,228,112,56,12,87,199,16,162,36,188,175,116,217,200,24, - 24,144,123,74,1,78,25,217,67,113,228,58,160,184,228,222,71,195,238,193, - 8,209,102,96,225,190,76,174,201,14,99,12,187,254,177,37,238,194,119,27, - 215,155,185,138,114,96,144,15,67,180,52,57,240,253,43,91,109,137,101,89, - 89,89,62,128,190,0,6,0,56,13,64,79,0,123,195,187,239,7,176,31, - 192,62,0,95,151,149,149,237,92,176,96,65,50,171,95,223,12,224,239,225, - 207,35,1,236,10,167,9,0,151,37,97,55,130,210,210,210,210,61,98,245, - 234,20,146,169,118,199,142,29,203,75,74,74,240,246,219,111,71,124,55,175, - 184,226,10,126,250,233,167,99,223,190,125,120,231,157,119,172,188,248,179,0, - 188,242,175,127,253,203,93,81,81,130,119,222,57,129,129,3,157,56,253,244, - 211,241,187,223,253,14,35,70,140,112,95,114,201,37,175,0,216,2,242,228, - 8,19,50,86,224,20,69,129,162,40,40,45,45,53,60,102,239,222,189,8, - 6,131,166,2,149,10,27,50,253,251,247,55,220,30,79,23,100,162,54,152, - 67,97,13,135,61,161,189,139,34,127,199,93,47,45,205,61,244,201,158,6, - 147,211,44,77,38,112,14,10,122,20,57,120,144,243,189,139,182,219,155,4, - 152,64,218,101,101,101,29,0,12,7,112,41,128,147,0,120,0,156,128,218, - 45,245,69,248,243,169,0,78,7,48,16,192,39,101,101,101,235,22,44,88, - 112,34,129,188,156,133,102,113,251,12,64,19,128,11,0,188,1,160,43,84, - 15,34,46,198,140,25,83,186,98,197,138,114,0,163,197,182,61,123,246,252, - 11,192,202,210,210,210,57,137,122,70,233,178,251,202,43,175,148,110,222,188, - 57,194,238,53,215,92,243,47,0,43,23,45,90,148,144,221,155,111,190,153, - 79,153,50,5,71,142,28,193,219,111,191,173,109,191,228,146,75,248,29,119, - 220,129,166,166,38,228,230,230,194,231,243,241,15,62,248,192,236,251,112,255, - 195,15,63,236,30,51,102,12,6,12,104,192,216,177,139,113,219,109,103,163, - 107,215,2,0,192,152,49,99,240,240,195,15,187,103,206,156,121,63,128,105, - 241,230,145,104,31,24,10,156,88,237,95,143,252,132,129,88,36,107,67,120, - 96,79,62,249,164,225,254,201,147,39,131,49,235,118,58,21,54,4,102,54, - 226,169,147,36,108,24,122,62,222,253,181,10,0,124,81,253,46,222,174,252, - 52,102,250,147,187,95,138,11,74,174,196,3,95,223,227,126,108,192,83,113, - 47,224,24,168,111,82,106,182,31,11,2,192,231,213,139,227,61,29,23,118, - 180,30,163,13,139,219,4,0,23,65,29,111,217,15,117,120,176,1,192,34, - 0,71,160,10,100,30,128,98,0,29,1,76,4,208,177,172,172,236,195,4, - 68,238,31,210,231,37,225,247,195,80,187,44,227,66,8,208,138,21,43,70, - 143,26,53,7,79,61,53,17,103,158,121,38,10,11,11,177,105,211,38,60, - 253,244,211,163,203,203,203,227,22,164,116,217,21,194,182,121,243,230,209,161, - 80,8,195,134,13,67,199,142,29,1,0,213,213,213,8,6,131,163,1,36, - 36,116,46,151,11,110,183,59,170,231,228,140,51,206,0,231,28,11,22,44, - 192,93,119,221,133,254,253,251,227,131,15,62,48,51,51,238,186,235,212,251, - 139,147,79,206,195,213,87,247,193,227,143,111,70,126,190,19,93,186,228,163, - 172,108,32,174,187,238,58,204,156,57,115,156,221,124,17,237,15,67,129,251, - 237,111,127,107,120,112,60,222,74,50,54,132,232,48,198,112,195,13,55,24, - 30,35,214,30,52,19,168,84,216,144,137,71,200,210,105,67,230,196,206,42, - 47,0,140,232,56,209,214,241,143,225,41,245,61,1,113,3,128,198,106,95, - 19,194,79,177,185,176,227,36,124,94,189,24,239,84,174,136,121,222,213,221, - 198,216,17,183,124,168,93,130,35,1,52,2,56,10,224,76,168,93,136,191, - 0,176,59,124,168,24,155,43,134,42,124,167,32,44,136,101,101,101,31,196, - 209,93,121,18,84,15,80,176,200,230,121,134,172,88,177,162,124,204,152,49, - 163,231,207,159,143,137,19,183,224,204,51,207,196,119,223,125,7,0,24,60, - 120,48,158,121,230,25,204,152,49,3,247,222,123,239,232,21,43,86,204,129, - 77,17,77,151,221,205,155,55,151,151,150,150,142,238,220,185,51,158,127,254, - 121,140,27,215,172,19,66,232,134,14,29,138,227,199,143,143,190,230,154,107, - 230,60,241,196,19,182,236,2,192,75,47,189,196,74,75,75,121,159,62,145, - 209,82,37,37,37,168,175,175,71,117,117,53,26,26,26,208,185,115,103,43, - 51,221,122,245,234,165,253,115,215,93,3,241,211,159,46,193,164,73,125,240, - 139,95,168,118,195,251,187,217,205,23,209,254,48,20,184,120,35,255,210,101, - 131,80,225,65,203,46,84,161,206,220,76,112,36,129,73,85,72,183,8,116, - 56,4,181,43,47,158,243,162,8,7,148,12,11,191,66,80,197,237,8,128, - 175,161,6,18,12,2,240,94,248,112,39,84,129,243,2,16,171,47,119,11, - 159,123,172,172,172,236,115,224,99,171,60,148,135,207,239,0,213,19,20,44, - 128,218,29,202,1,204,8,167,111,139,176,151,53,122,254,252,249,24,60,120, - 48,128,45,232,223,127,17,158,126,186,88,59,102,240,224,193,56,243,204,51, - 49,127,254,124,12,25,50,100,116,105,105,233,152,88,94,81,186,236,134,189, - 183,209,157,59,119,214,196,236,209,71,31,197,131,15,62,24,113,156,216,183, - 103,207,30,91,118,99,225,243,249,224,118,187,225,114,185,224,116,58,181,199, - 35,153,80,185,119,239,222,158,167,159,126,58,0,160,75,151,124,172,91,119, - 45,242,242,154,155,172,189,123,247,2,64,101,50,121,34,178,155,140,28,131, - 147,233,210,165,139,225,246,3,7,14,180,168,141,214,28,131,179,31,199,216, - 114,116,29,220,85,185,176,227,164,80,44,47,78,136,235,111,214,221,229,120, - 102,248,95,205,14,235,6,224,39,80,189,170,253,0,170,0,28,3,112,28, - 106,215,225,12,0,47,135,143,117,66,245,220,68,244,164,11,170,80,245,12, - 219,216,99,145,237,28,52,207,15,44,148,182,251,160,10,38,131,234,61,198, - 94,221,89,98,197,138,21,229,83,167,78,197,224,193,131,177,105,211,38,204, - 157,123,26,214,174,61,130,171,175,190,26,30,143,7,133,133,133,152,63,127, - 51,70,140,232,130,129,3,207,196,212,169,83,81,94,94,62,39,86,151,98, - 186,236,110,222,188,185,124,208,160,65,154,128,141,28,57,18,107,214,172,137, - 56,230,179,207,62,195,105,167,157,134,211,78,59,13,131,6,13,2,128,57, - 241,116,85,202,209,201,19,39,78,228,3,7,14,196,15,63,252,128,162,162, - 34,220,112,195,13,232,216,177,35,118,237,218,101,101,98,249,194,133,11,111, - 253,221,239,126,167,109,144,197,13,0,22,46,92,8,0,203,237,228,135,104, - 159,100,236,24,156,192,108,220,234,218,107,175,53,220,222,210,54,90,104,12, - 206,146,47,107,150,178,11,74,174,140,125,96,10,185,226,145,9,120,97,252, - 223,99,31,24,230,153,225,127,181,114,67,187,0,40,129,234,65,213,66,13, - 36,169,13,191,238,135,26,49,121,58,128,175,160,126,103,255,11,192,96,0, - 119,64,245,198,138,194,231,150,132,109,153,209,136,230,167,222,190,37,109,175, - 1,240,75,52,79,72,143,151,209,51,102,204,128,199,227,193,158,61,123,112, - 221,117,63,197,236,217,139,208,179,231,63,176,127,255,45,232,217,83,29,234, - 155,62,253,12,20,22,22,98,198,140,25,40,47,47,31,29,195,102,90,237, - 58,28,205,17,176,23,93,116,17,214,172,89,163,121,113,143,62,250,168,182, - 29,0,194,199,218,177,171,81,81,81,129,31,126,80,231,184,122,189,94,84, - 85,85,97,203,150,45,15,190,253,246,219,143,246,238,221,27,239,189,247,30, - 22,46,92,104,213,163,240,248,204,153,51,111,26,49,98,132,123,204,152,49, - 81,59,87,172,88,129,153,51,103,250,161,206,135,35,8,67,50,114,12,78, - 38,214,248,89,75,217,200,196,49,56,137,180,46,20,109,68,110,113,14,27, - 113,215,112,231,133,29,39,5,236,116,141,222,191,237,110,246,248,57,127,54, - 243,69,79,133,218,101,40,2,74,188,225,87,3,84,239,106,53,212,21,44, - 46,7,240,0,128,27,1,244,1,208,73,58,174,33,108,227,84,155,69,144, - 7,5,247,3,8,226,13,222,23,28,83,240,213,7,255,137,243,198,255,19, - 59,148,95,225,44,156,129,163,63,236,192,41,189,129,237,112,168,129,151,209, - 200,99,99,133,133,133,248,237,111,207,195,147,79,126,165,137,208,183,223,94, - 131,194,194,66,120,60,158,112,119,163,74,172,112,252,116,217,21,222,155,64, - 120,113,66,220,228,238,74,249,88,187,211,7,22,47,94,172,125,39,63,254, - 248,99,246,241,199,106,183,241,182,109,219,254,39,214,185,97,182,3,184,233, - 146,75,46,121,229,225,135,31,118,95,119,221,117,232,213,171,23,246,238,221, - 139,133,11,23,10,113,187,9,52,69,128,176,128,198,224,218,6,10,76,188, - 139,7,190,190,71,44,153,101,139,7,190,190,199,241,216,128,167,146,9,243, - 7,0,184,11,220,56,111,242,192,208,230,127,110,53,236,170,188,186,219,152, - 67,23,118,156,212,181,236,139,219,157,121,133,185,140,169,145,60,102,2,215, - 9,170,23,118,28,106,215,99,19,212,241,53,241,122,8,192,26,0,191,11, - 191,58,65,237,98,108,210,29,95,20,222,23,139,147,16,185,148,153,26,203, - 190,29,187,0,204,193,160,203,79,197,231,255,156,142,78,191,252,21,56,95, - 139,83,122,87,0,161,191,91,85,115,97,97,33,206,60,243,76,0,128,199, - 227,193,189,247,14,194,147,79,126,5,160,89,132,196,113,226,1,187,118,72, - 151,93,61,194,139,3,16,53,22,151,12,219,182,109,155,120,240,224,193,37, - 227,199,143,79,228,38,108,33,128,45,51,103,206,188,63,28,45,217,13,234, - 152,219,114,208,74,38,132,13,104,12,206,38,173,58,6,103,237,161,57,17, - 99,89,46,29,41,25,209,123,226,220,167,67,247,108,40,115,92,53,255,231, - 202,27,183,188,101,116,200,17,0,93,221,185,174,252,199,7,254,185,46,201, - 116,55,67,21,177,135,160,70,89,38,203,112,221,255,239,70,252,183,29,119, - 2,152,142,179,176,15,129,166,139,176,203,189,61,214,61,196,166,77,155,180, - 128,15,33,54,251,247,223,162,141,149,9,60,30,143,230,145,217,33,93,118, - 171,171,171,163,188,56,51,97,171,174,174,182,109,87,207,137,19,39,150,124, - 243,205,55,113,159,103,177,182,100,79,0,183,134,95,4,97,9,141,193,37, - 105,163,133,198,224,76,5,238,177,1,79,249,69,248,191,89,40,190,216,15, - 128,63,54,224,41,75,123,241,240,212,249,11,130,101,171,167,59,186,14,238, - 154,115,97,199,73,141,186,52,7,253,102,221,157,202,147,131,255,98,71,216, - 132,71,233,146,94,78,233,21,128,58,190,246,123,0,91,161,46,217,229,52, - 56,30,104,142,172,180,226,2,221,255,209,45,112,215,190,0,208,164,138,91, - 76,86,62,253,244,211,163,159,121,230,25,77,132,228,119,153,194,194,66,60, - 253,244,211,0,176,178,53,237,134,231,185,217,34,24,12,218,181,107,112,110, - 8,249,249,5,113,157,67,79,5,32,82,5,141,193,217,164,149,199,224,156, - 104,142,26,140,226,203,154,165,120,235,224,39,49,141,216,153,143,22,47,238, - 66,119,206,207,31,30,95,255,226,229,229,17,147,191,47,236,56,9,174,28, - 151,11,128,157,57,119,71,160,6,150,228,66,141,136,204,15,191,26,208,44, - 88,1,168,221,82,185,6,199,229,133,95,39,160,78,49,136,197,57,210,103, - 227,25,235,158,42,192,87,95,10,196,110,156,75,75,75,231,148,151,151,255, - 107,198,140,25,17,158,150,94,132,0,213,35,43,47,47,71,105,105,233,28, - 168,193,45,45,110,119,209,162,69,115,0,252,107,232,208,161,81,94,156,158, - 234,234,106,108,222,188,89,156,19,101,119,205,231,27,185,213,253,18,231,28, - 167,157,118,38,214,124,94,97,227,70,135,3,71,127,21,251,48,130,176,9, - 141,193,181,13,44,23,20,182,27,65,41,121,114,41,227,201,193,127,169,251, - 205,23,119,26,182,112,243,207,123,218,238,132,114,33,112,167,66,157,192,221, - 1,106,240,136,40,183,240,226,196,103,177,146,137,56,182,24,234,152,220,17, - 24,207,95,235,6,117,206,30,160,118,149,202,125,197,98,53,19,134,51,80, - 136,93,240,224,44,124,15,92,58,27,27,150,204,197,128,171,138,177,23,86, - 235,66,35,28,58,191,242,222,123,239,29,61,127,254,252,40,49,18,239,155, - 54,109,194,189,247,222,11,52,123,67,53,176,16,163,116,219,61,126,252,248, - 104,32,58,224,68,80,93,93,141,227,199,143,91,218,109,106,10,198,92,40, - 33,191,160,16,129,64,236,97,223,76,95,244,156,104,123,208,24,156,77,90, - 123,12,142,49,198,184,212,2,244,56,173,135,114,96,223,1,237,121,110,18, - 92,239,73,25,28,147,82,158,25,241,183,100,91,166,67,225,87,79,168,203, - 111,233,231,185,121,117,255,139,149,76,78,130,26,84,210,17,128,91,178,35, - 83,14,224,150,240,231,66,168,115,220,196,133,216,142,230,37,186,56,214,253, - 243,4,20,5,104,184,182,35,242,49,0,126,223,92,228,241,61,232,207,30, - 197,183,120,212,170,0,165,165,165,115,86,172,88,49,103,200,144,33,163,167, - 78,157,138,25,51,102,96,240,224,193,218,216,216,211,79,63,141,242,242,114, - 32,188,164,22,194,66,177,103,207,158,152,94,92,58,236,46,90,180,104,206, - 53,215,92,51,103,207,158,61,163,7,13,26,4,135,195,161,95,170,11,155, - 55,111,6,194,75,117,217,181,75,16,153,4,141,193,37,105,163,133,198,224, - 20,232,30,58,218,187,180,55,63,176,239,0,30,248,250,30,87,48,16,10, - 54,212,250,20,167,211,81,252,204,136,191,69,157,124,239,87,51,114,16,224, - 1,37,71,97,140,49,231,99,3,158,50,127,50,109,2,92,60,234,98,182, - 122,213,234,132,207,95,176,96,193,209,178,178,178,79,160,138,85,111,68,122, - 107,98,213,18,35,129,235,12,117,169,174,14,80,159,2,240,201,130,5,11, - 142,254,233,167,253,100,243,183,72,159,87,1,120,38,252,121,31,128,115,33, - 7,191,12,255,101,79,236,66,101,248,185,5,95,160,211,47,29,8,97,12, - 118,98,69,172,50,132,189,162,49,165,165,165,99,202,203,203,231,24,204,71, - 19,2,4,52,123,66,49,197,34,157,118,159,120,226,137,49,165,165,165,99, - 160,62,142,40,202,110,88,216,226,178,75,16,153,4,141,193,217,36,211,230, - 193,41,76,17,130,151,243,221,231,123,27,246,108,61,232,186,236,182,17,134, - 225,110,187,94,250,161,137,131,243,165,79,191,199,97,47,8,35,145,188,36, - 197,130,5,11,190,45,43,43,251,23,212,96,146,206,104,238,138,20,115,227, - 244,43,151,136,197,150,59,0,168,6,240,175,5,11,22,24,125,185,254,11, - 192,127,134,63,15,129,250,244,128,249,0,102,65,223,245,59,133,25,185,244, - 145,171,88,47,238,103,112,72,51,178,32,25,236,150,69,162,38,30,111,40, - 157,118,37,161,75,153,93,130,200,4,104,12,174,109,96,58,128,241,216,128, - 167,60,0,208,107,82,191,198,39,7,63,99,216,85,88,179,229,4,86,173, - 88,149,206,1,14,189,237,32,34,231,153,217,98,193,130,5,171,195,79,237, - 190,10,170,103,86,8,117,133,18,57,216,68,8,95,33,212,110,201,163,0, - 150,44,88,176,192,204,133,156,5,117,29,75,5,234,74,38,155,226,205,87, - 34,236,217,179,103,69,169,241,115,154,146,18,138,76,179,27,226,28,74,138, - 198,206,218,192,147,25,137,54,6,141,193,217,164,149,199,224,20,68,255,254, - 249,197,163,71,57,67,8,178,29,53,187,3,129,134,128,210,255,178,129,252, - 219,143,183,70,157,204,121,179,0,117,255,105,31,229,224,71,187,83,214,150, - 140,30,61,154,133,192,115,116,155,227,22,55,65,88,228,142,1,184,26,64, - 63,168,94,154,126,217,121,145,255,237,0,222,49,241,220,172,230,82,37,77, - 114,182,205,189,192,182,102,247,252,154,155,19,55,75,16,105,38,107,199,224, - 68,60,6,231,220,242,121,112,242,177,137,228,163,181,214,162,92,185,114,37, - 191,120,244,197,161,227,190,26,116,206,237,136,99,135,171,130,7,191,250,158, - 95,60,250,98,5,170,40,156,128,250,100,234,31,0,174,156,117,193,0,0, - 156,29,61,114,220,9,123,161,251,241,228,3,131,46,28,236,132,26,83,239, - 15,191,31,79,212,102,184,187,242,56,212,96,144,51,1,156,129,230,21,74, - 170,160,142,183,125,7,224,219,5,11,22,24,78,11,160,185,84,4,65,100, - 237,24,28,231,28,161,80,8,140,49,77,200,244,251,197,211,188,237,8,92, - 166,141,193,1,192,234,149,171,67,231,252,228,92,214,16,240,225,248,87,135, - 121,120,27,191,176,227,234,170,240,33,63,136,227,194,255,115,164,80,220,164, - 124,248,206,249,201,185,236,166,159,254,71,221,247,27,118,114,168,235,71,218, - 198,216,187,176,124,228,141,134,46,160,132,32,8,66,35,107,199,224,130,193, - 160,38,114,2,89,200,196,227,60,132,200,101,56,166,25,220,182,118,75,70, - 76,30,74,52,31,228,105,17,4,145,46,178,118,12,206,235,245,130,49,6, - 198,24,20,165,121,29,65,185,235,18,104,22,194,88,164,98,12,46,9,90, - 252,105,1,4,65,16,109,157,180,141,193,165,138,68,199,224,14,29,58,164, - 173,176,192,24,211,188,57,189,152,201,15,102,76,36,31,45,84,39,73,175, - 254,79,16,4,209,222,72,217,24,156,217,57,201,146,232,24,220,247,223,127, - 31,181,205,231,51,31,26,202,205,205,181,180,151,136,144,153,137,98,188,249, - 8,6,131,10,128,144,236,137,18,4,65,16,214,164,108,12,174,110,137,241, - 131,32,99,81,146,208,89,22,246,42,46,71,93,5,48,173,79,138,13,39, - 144,143,100,243,32,130,47,60,239,246,23,255,39,157,47,187,105,18,4,65, - 180,117,82,50,6,151,138,64,129,19,239,244,53,220,30,207,24,92,58,243, - 17,207,24,28,5,78,16,4,65,180,62,89,59,6,215,82,249,104,141,58, - 33,8,130,32,98,147,182,121,112,169,34,21,235,72,166,2,18,50,130,32, - 136,182,69,218,230,193,17,4,65,16,68,107,146,181,243,224,82,77,43,207, - 131,35,8,130,32,226,132,198,224,146,204,7,117,93,18,4,65,100,38,52, - 6,103,19,18,50,130,32,136,182,5,141,193,17,4,65,16,89,9,141,193, - 217,132,198,224,8,130,32,218,22,52,6,151,100,62,168,235,146,32,8,34, - 51,161,49,56,155,144,144,17,4,65,180,45,104,12,142,32,8,130,200,74, - 104,12,206,38,52,6,71,16,4,209,182,160,49,184,36,243,65,93,151,4, - 65,16,153,9,141,193,217,132,132,140,32,8,162,109,65,99,112,4,65,16, - 68,86,66,99,112,54,161,49,56,130,32,136,182,5,141,193,37,153,15,234, - 186,36,8,130,200,76,104,12,206,38,36,100,4,65,16,109,11,26,131,35, - 8,130,32,178,18,26,131,179,9,141,193,17,4,65,180,45,50,114,12,142, - 115,174,189,155,141,125,77,158,60,57,226,216,116,67,99,112,4,65,16,109, - 139,140,28,131,227,156,35,20,10,129,49,166,9,153,126,127,48,24,68,40, - 20,106,49,129,35,33,35,8,130,104,91,100,228,24,92,48,24,212,68,78, - 32,11,25,231,60,66,228,8,130,32,8,66,79,70,142,193,121,189,94,48, - 198,192,24,131,162,40,218,118,185,235,18,104,22,66,130,32,8,130,208,147, - 145,2,119,232,208,33,48,198,0,0,140,49,205,155,211,139,153,240,228,8, - 130,32,8,66,143,19,48,31,115,107,45,190,255,254,251,168,109,62,159,207, - 244,248,220,220,220,148,231,193,44,168,164,165,243,65,16,4,65,36,134,19, - 0,234,150,156,149,208,201,37,41,205,10,80,82,113,57,234,42,128,105,125, - 82,108,56,129,124,180,118,30,8,130,32,136,228,96,181,139,251,81,31,31, - 161,209,225,234,157,173,157,5,130,32,136,148,224,4,128,226,73,59,88,42, - 141,10,209,76,163,93,5,64,50,194,204,228,243,91,32,191,45,105,215,170, - 94,44,243,65,55,59,4,65,100,19,45,29,100,178,237,156,97,253,6,252, - 216,80,13,102,209,214,114,112,156,156,215,17,219,214,239,248,26,192,57,134, - 135,36,135,221,243,183,141,40,46,30,112,34,24,132,98,113,80,8,64,7, - 135,3,95,212,214,154,229,183,165,224,86,65,55,140,49,142,24,34,71,16, - 4,145,45,152,9,92,132,135,147,66,60,203,215,189,142,101,251,87,99,55, - 14,153,30,212,7,93,241,243,158,163,113,42,27,236,73,67,30,226,193,243, - 198,156,57,240,108,222,140,96,125,189,233,65,142,130,2,20,13,30,140,211, - 126,251,219,214,204,47,231,156,99,229,202,29,166,7,60,241,196,187,184,239, - 190,137,36,114,4,65,180,11,12,5,46,47,63,39,212,187,255,105,224,33, - 251,26,199,20,134,31,190,221,135,6,111,163,85,227,185,237,151,151,223,25, - 218,121,112,207,192,33,23,158,83,120,212,91,165,77,7,0,212,176,255,83, - 242,59,225,133,207,183,121,254,95,247,215,183,2,248,198,78,218,121,138,194, - 7,22,20,216,206,171,96,107,125,61,26,66,33,203,252,254,250,225,135,67, - 63,52,52,12,188,164,99,199,194,154,64,0,14,41,191,65,206,81,226,116, - 226,95,213,213,158,222,239,191,111,59,191,173,197,208,161,125,73,228,8,130, - 104,55,24,10,220,201,221,79,194,91,27,158,67,173,215,131,218,64,125,204, - 238,196,98,103,1,138,243,11,49,161,239,77,216,247,221,65,171,244,166,173, - 94,182,14,0,214,254,109,203,127,95,240,204,119,111,192,173,184,180,157,254, - 80,19,126,115,230,245,40,101,35,182,30,217,122,244,66,187,133,232,153,147, - 131,133,127,248,3,130,117,117,8,89,132,241,11,148,220,92,56,138,138,48, - 110,206,28,236,108,104,176,204,239,210,99,199,0,96,237,255,205,157,123,65, - 245,39,159,128,57,28,218,78,30,12,162,227,165,151,226,153,251,239,223,186, - 173,190,222,118,126,173,224,156,143,3,176,159,49,150,212,114,50,163,71,247, - 195,252,249,75,49,116,104,223,136,207,36,114,4,65,180,23,12,5,110,223, - 119,7,55,126,180,120,245,208,243,71,159,139,101,149,95,196,52,114,77,183, - 75,240,209,242,213,216,247,221,193,141,54,211,253,120,201,59,203,47,232,114, - 110,39,28,109,172,214,54,118,201,233,132,37,239,44,7,128,45,54,237,0, - 0,118,54,52,108,60,248,207,127,14,61,101,236,88,212,109,218,20,243,248, - 162,193,131,113,248,253,247,177,179,161,193,118,126,247,189,254,250,5,29,122, - 247,70,176,174,78,219,232,40,42,194,190,215,95,143,59,191,70,112,206,59, - 3,248,27,128,107,1,108,230,156,15,103,140,53,37,107,215,8,18,57,130, - 32,218,3,102,177,19,151,222,125,245,108,120,61,13,24,80,220,27,14,166, - 152,190,206,41,238,3,167,211,137,187,175,158,205,1,92,26,43,193,47,107, - 150,50,0,127,184,251,23,179,143,143,237,53,12,1,30,4,0,4,120,16, - 99,123,13,195,221,191,152,125,28,192,29,113,150,227,210,145,21,21,8,212, - 214,34,167,123,119,48,135,195,244,149,211,189,59,152,203,133,145,21,21,182, - 242,187,235,193,7,25,128,63,92,92,81,113,188,232,188,243,192,131,106,126, - 121,48,136,162,243,206,195,197,21,21,137,228,55,130,176,215,86,1,85,220, - 66,75,177,177,99,0,0,32,0,73,68,65,84,0,86,2,112,88,158,148, - 4,27,55,238,196,125,247,77,4,72,220,8,130,200,98,204,4,174,150,41, - 108,220,175,175,248,3,70,116,63,23,46,102,28,139,194,193,113,222,201,125, - 241,235,43,255,0,166,176,123,0,156,176,145,166,214,168,186,20,23,120,56, - 150,133,131,195,37,117,87,198,73,45,128,113,191,122,253,117,20,244,239,15, - 40,230,49,143,121,189,123,227,206,231,158,3,128,184,243,11,167,19,16,139, - 59,135,66,234,255,73,192,57,63,137,115,190,16,192,135,0,78,3,176,25, - 192,16,198,216,61,140,177,216,125,173,22,172,92,185,3,67,135,246,141,250, - 76,226,70,16,68,123,193,76,9,56,15,241,143,118,108,217,253,209,11,143, - 191,193,47,232,60,0,65,30,185,106,63,7,199,176,146,179,241,217,178,117, - 88,191,242,171,141,60,196,159,142,149,216,13,27,126,197,134,119,184,130,3, - 248,227,83,139,230,116,222,112,240,107,77,60,93,204,137,13,7,191,198,83, - 139,230,116,6,240,71,0,120,224,235,123,236,122,49,28,192,71,155,60,158, - 143,150,149,151,243,188,222,189,53,79,75,38,247,180,211,112,104,233,82,124, - 84,85,181,17,64,204,252,126,121,254,249,44,239,244,211,57,128,63,174,28, - 50,164,179,119,251,118,48,151,42,194,204,229,130,119,251,118,172,28,50,68, - 203,239,166,113,227,108,123,93,156,243,95,0,216,6,213,107,107,2,240,16, - 128,225,140,177,175,236,218,136,23,18,55,130,32,218,19,86,211,187,0,96, - 220,211,51,95,98,193,67,1,116,118,119,136,216,225,86,92,56,179,195,105, - 184,251,234,57,182,186,250,0,224,245,161,175,137,185,88,151,77,250,197,120, - 108,109,216,13,103,142,83,123,109,109,216,141,73,191,24,15,0,151,1,192, - 99,3,158,138,86,169,24,249,189,115,199,14,230,63,122,20,142,162,162,200, - 61,138,2,119,183,110,182,187,38,1,160,199,244,233,232,62,125,58,7,112, - 89,233,175,126,5,255,209,163,80,220,110,237,229,63,122,20,165,191,250,149, - 150,223,193,203,151,199,204,47,231,188,3,231,252,5,0,111,1,56,21,192, - 78,0,151,48,198,30,77,114,204,141,49,198,176,113,227,78,211,23,137,27, - 65,16,237,137,88,125,108,44,20,226,67,238,186,114,102,197,7,123,95,193, - 63,190,126,15,46,197,137,32,15,225,146,46,131,48,253,231,15,130,41,236, - 30,30,226,118,186,250,192,24,27,112,206,208,126,229,53,129,186,126,119,222, - 241,123,24,77,19,216,158,191,13,61,206,235,54,160,196,85,180,97,219,134, - 29,83,161,122,57,118,97,28,24,114,197,123,239,85,172,154,51,7,85,203, - 151,131,185,92,224,193,32,10,251,247,199,29,127,249,11,96,191,107,18,221, - 167,79,31,112,65,113,113,121,67,48,216,239,241,167,158,130,225,52,129,109, - 219,112,110,65,193,128,2,135,99,195,23,181,181,150,249,229,156,119,1,176, - 22,64,175,240,166,229,0,38,49,198,44,67,57,227,128,133,3,71,76,247, - 167,40,29,130,32,136,140,39,150,192,113,206,249,166,195,251,127,124,102,193, - 239,202,127,51,236,174,243,177,203,115,0,157,221,29,176,123,229,15,216,176, - 114,139,173,174,62,137,226,96,48,56,116,221,230,165,166,147,189,251,160,43, - 94,234,249,88,225,165,131,127,57,20,64,113,28,182,1,181,171,114,211,190, - 198,198,103,94,123,225,133,223,92,53,98,4,154,126,252,17,142,162,34,252, - 184,122,181,237,174,201,136,252,114,62,116,233,127,253,151,233,100,111,71,65, - 1,238,31,52,168,240,154,217,179,99,230,151,49,118,152,115,126,11,128,127, - 64,21,185,203,0,252,145,115,62,147,49,214,24,71,190,0,36,180,180,22, - 45,197,69,16,68,187,193,110,148,196,221,47,62,250,198,205,151,255,106,108, - 135,111,148,38,12,237,124,22,38,76,186,209,118,87,159,68,0,192,142,97, - 231,93,113,218,185,35,250,231,153,77,244,254,207,47,30,109,40,118,20,236, - 11,31,159,8,119,255,126,247,238,155,39,14,25,210,129,55,53,33,175,87, - 47,156,183,120,113,194,249,253,249,127,254,231,105,151,116,236,152,103,58,209, - 123,209,162,134,124,69,177,149,95,198,216,74,206,121,127,0,143,0,248,13, - 128,123,1,76,226,156,223,196,24,251,220,110,198,104,81,100,130,32,136,24, - 216,245,2,24,99,67,187,246,58,149,175,173,123,151,15,31,115,30,103,10, - 155,97,101,51,14,239,98,206,15,252,115,14,96,142,157,188,198,97,119,104, - 239,220,92,190,235,119,191,227,63,237,212,137,3,72,89,126,247,62,254,120, - 74,242,203,57,31,207,57,175,228,42,77,156,243,71,56,231,49,67,73,107, - 23,247,227,140,49,122,209,139,94,244,162,151,197,203,118,156,59,231,124,227, - 161,189,71,230,150,253,236,247,179,55,174,222,26,111,87,31,0,224,129,175, - 239,113,49,133,5,155,26,3,202,147,131,158,49,245,118,238,171,152,225,96, - 110,198,24,99,238,199,6,60,229,141,55,157,48,27,127,240,249,230,78,127, - 246,217,217,159,86,87,39,148,223,77,227,198,185,160,40,193,144,207,167,12, - 93,177,194,52,191,27,71,141,114,40,110,55,131,162,184,7,47,95,110,59, - 191,140,177,15,57,231,231,1,120,1,192,85,0,30,4,48,38,236,205,125, - 23,111,126,9,130,32,136,102,226,157,200,53,103,227,234,173,151,3,152,144, - 72,98,140,33,127,211,187,219,235,42,119,31,201,65,115,119,158,243,240,137, - 31,185,156,151,173,79,110,15,45,127,101,57,71,226,93,148,90,126,63,173, - 174,78,56,191,80,148,252,143,190,251,174,238,187,134,134,136,252,54,253,24, - 153,223,103,119,237,10,189,80,89,153,80,126,25,99,63,114,206,175,134,218, - 93,249,8,128,11,0,172,227,156,143,99,140,173,79,40,223,4,65,16,68, - 66,143,203,185,32,209,196,254,231,236,167,78,0,64,247,9,167,203,81,131, - 239,61,114,247,130,223,3,120,79,108,8,139,91,170,72,56,191,131,151,45, - 59,1,0,151,117,236,24,145,223,199,95,125,53,34,191,97,113,75,24,198, - 24,7,240,52,231,252,93,0,47,3,232,128,20,44,255,69,16,4,209,158, - 137,53,15,46,41,46,30,61,42,98,60,105,228,232,145,110,244,80,24,120, - 196,50,84,107,151,252,99,249,62,168,225,243,17,116,255,105,159,180,45,87, - 101,196,229,157,58,185,116,255,187,79,117,187,25,34,151,205,90,251,236,193, - 131,134,249,29,219,177,99,82,249,101,140,237,129,26,89,121,37,75,32,170, - 146,32,8,130,104,38,173,15,60,93,189,114,85,196,196,229,53,43,215,248, - 1,224,224,129,239,245,19,154,79,51,58,255,224,71,187,227,157,232,157,20, - 31,84,85,53,233,254,247,3,192,17,191,223,86,126,63,173,174,78,58,191, - 140,49,63,128,125,201,218,33,8,130,104,239,164,213,131,139,131,182,54,1, - 185,173,229,151,32,8,162,221,193,18,152,44,76,100,0,52,15,142,32,8, - 194,26,18,56,130,32,136,44,130,110,126,155,113,2,64,241,164,29,182,187, - 220,132,32,110,27,253,168,11,128,114,97,199,73,254,100,50,240,121,245,226, - 190,0,26,1,228,92,216,113,82,210,87,230,226,209,23,23,172,94,185,186, - 190,225,253,247,25,0,150,247,179,159,133,98,158,100,65,195,251,239,231,0, - 240,3,232,145,247,179,159,237,79,54,127,2,81,143,241,212,61,17,141,168, - 199,194,137,73,61,0,157,72,130,121,243,230,225,222,65,255,11,0,184,252, - 177,147,144,159,159,143,96,48,8,135,67,141,185,178,250,12,168,43,24,5, - 2,234,12,27,135,195,1,206,57,24,99,112,133,159,220,209,30,108,165,42, - 63,139,103,28,180,115,201,218,13,172,118,113,63,158,136,192,13,254,35,87, - 190,223,176,51,202,251,251,251,148,241,207,46,60,88,117,187,188,141,51,14, - 112,128,133,135,174,20,133,193,229,114,194,237,114,130,49,22,177,92,87,60, - 112,147,165,21,57,87,183,71,217,77,133,175,26,71,86,39,20,229,62,247, - 111,175,126,104,248,48,212,88,2,55,237,198,235,111,114,229,224,101,121,155, - 190,30,153,194,224,116,58,224,114,58,193,152,65,121,109,98,86,143,22,39, - 36,79,28,89,45,200,63,249,230,185,143,60,246,138,209,62,89,224,214,173, - 219,158,130,140,17,241,178,108,217,66,77,224,174,89,112,26,110,188,237,137, - 86,206,81,251,228,134,171,250,161,241,131,115,201,131,147,72,56,138,82,47, - 110,11,167,92,54,238,245,99,222,15,23,255,88,11,183,91,21,46,133,49, - 64,107,120,25,24,227,96,76,129,195,17,126,41,74,226,141,50,231,224,92, - 188,55,103,133,49,64,252,203,185,174,233,22,255,139,253,105,94,123,120,89, - 157,239,246,95,94,53,250,246,107,138,92,227,175,123,245,227,229,118,206,153, - 253,208,3,125,171,107,14,237,208,10,33,234,17,209,245,168,40,12,14,135, - 2,69,81,18,142,122,225,128,86,143,144,234,17,12,205,245,164,175,71,93, - 205,165,187,30,235,189,63,190,124,255,140,169,47,23,228,159,220,111,238,35, - 143,209,175,151,32,8,91,232,5,46,161,71,173,252,125,202,248,103,223,58, - 209,112,187,203,229,4,24,224,116,168,94,133,83,52,190,172,249,236,112,83, - 157,148,199,161,101,148,3,33,125,195,44,246,135,133,79,19,59,8,207,174, - 89,24,155,143,53,78,129,115,249,221,168,161,143,13,3,240,110,67,232,195, - 191,79,25,111,234,205,9,102,63,244,192,77,30,207,143,47,187,156,106,61, - 58,20,5,78,167,3,14,69,170,71,201,174,248,144,138,122,228,198,149,96, - 88,143,144,235,49,226,88,227,20,184,150,136,100,51,206,124,50,0,141,141, - 85,59,102,63,244,128,169,55,71,180,62,65,131,7,13,19,68,107,33,11, - 28,55,107,228,0,109,181,141,168,150,116,225,148,203,198,45,170,245,221,206, - 152,218,113,230,112,42,40,200,203,133,211,233,16,231,165,56,203,145,40,22, - 121,22,68,30,194,165,191,102,39,168,127,180,6,92,107,228,185,73,35,110, - 1,3,20,198,176,150,41,183,47,156,114,217,219,102,158,220,236,135,30,232, - 91,95,255,227,203,162,186,28,14,5,121,185,57,112,56,212,153,28,233,174, - 71,171,107,223,124,76,196,127,210,95,179,19,194,127,36,33,76,182,30,21, - 230,121,121,246,67,15,124,73,158,92,102,34,198,141,8,34,19,16,2,199, - 57,231,88,185,114,135,233,129,79,60,241,46,140,30,166,185,168,182,233,67, - 241,153,41,12,110,151,11,14,135,35,237,13,178,150,166,141,116,34,15,177, - 159,47,115,175,198,182,137,136,180,87,176,188,15,205,50,80,95,255,163,86, - 249,140,49,184,156,206,176,215,70,245,168,79,219,193,26,118,196,149,1,130, - 32,218,37,73,77,244,254,251,148,241,207,114,53,234,1,138,67,129,219,229, - 12,143,191,165,42,123,173,139,8,128,209,191,20,197,254,75,62,15,80,235, - 76,159,206,236,135,30,184,137,3,106,61,42,10,92,46,39,92,46,7,213, - 163,69,61,206,126,232,129,155,90,185,88,132,1,212,69,73,100,18,134,2, - 55,122,116,63,237,101,197,187,199,234,110,231,156,195,161,40,200,203,113,35, - 47,215,157,84,224,72,182,163,56,28,248,166,164,243,237,250,237,53,53,135, - 94,6,231,112,48,5,57,110,23,114,220,45,235,189,181,53,20,69,65,113, - 177,242,114,236,35,137,150,134,186,40,137,76,194,48,138,114,254,252,165,218, - 231,161,67,251,154,158,28,12,113,56,194,1,10,76,97,96,44,178,81,118, - 185,220,112,187,115,16,226,28,77,126,159,54,135,35,91,200,203,47,208,62, - 59,157,78,228,228,228,129,131,195,83,87,139,70,95,67,212,241,46,167,11, - 121,121,5,81,219,67,161,230,192,23,163,122,116,231,228,34,55,55,15,224, - 128,223,223,0,159,207,151,158,2,181,18,57,185,121,218,103,167,211,9,167, - 211,5,206,1,111,125,29,2,1,253,50,160,128,211,225,66,78,78,94,212, - 118,130,32,8,25,67,129,179,18,53,25,135,162,6,150,132,66,28,129,64, - 16,78,135,3,242,208,72,199,206,167,224,170,107,166,224,148,174,221,81,88, - 88,0,167,51,55,21,121,182,133,203,237,134,203,229,110,177,244,124,62,31, - 234,61,39,112,112,223,94,188,249,250,115,81,2,199,24,131,211,233,130,211, - 21,253,192,110,69,212,35,231,8,6,130,112,40,10,228,122,236,208,161,35, - 6,156,119,62,186,247,44,69,73,201,73,200,205,109,185,122,116,186,92,112, - 58,99,62,100,60,101,4,2,1,52,212,123,112,248,240,65,124,240,238,63, - 81,87,91,29,177,159,129,193,225,116,194,233,76,235,58,225,68,130,80,23, - 37,145,73,24,182,18,114,215,164,85,224,137,195,25,14,38,97,64,32,16, - 68,208,25,212,198,75,0,6,197,161,32,39,55,31,249,5,5,200,47,40, - 108,81,129,107,105,156,12,112,40,14,56,115,92,8,6,140,126,228,204,52, - 248,198,225,112,168,81,20,12,8,6,67,8,133,66,17,245,200,20,6,183, - 59,7,185,185,121,200,205,203,111,81,129,107,121,66,8,241,16,212,160,93, - 163,40,20,70,221,183,25,12,93,23,34,147,72,170,139,82,245,60,24,192, - 129,96,40,132,64,48,4,167,147,135,191,228,28,53,85,199,240,222,226,215, - 224,112,56,17,8,4,16,10,38,223,69,217,216,232,67,48,5,118,4,193, - 64,0,141,141,137,117,249,53,120,235,181,207,78,225,85,48,5,129,166,232, - 213,203,152,194,160,152,8,28,11,123,112,162,30,131,193,16,28,14,69,171, - 199,218,218,19,216,246,213,6,124,247,237,86,52,52,52,32,21,75,137,248, - 253,141,8,133,82,119,183,29,12,6,225,247,39,246,8,59,217,219,117,58, - 157,112,186,220,96,140,161,201,111,84,143,234,88,102,214,68,224,16,4,145, - 54,132,192,49,198,152,54,85,64,47,106,27,55,238,196,125,247,77,4,34, - 214,183,80,7,251,121,40,60,31,138,115,132,66,161,136,208,111,95,131,23, - 123,190,55,247,0,179,137,64,32,96,57,198,232,116,56,77,187,250,20,198, - 180,80,122,14,142,144,110,158,152,207,91,143,74,73,76,179,153,88,245,232, - 112,56,225,112,80,247,100,166,98,103,62,37,65,180,20,114,20,37,99,140, - 97,200,144,110,17,7,232,196,45,130,241,133,57,207,201,91,213,21,42,56, - 125,201,117,56,157,78,228,229,23,192,229,114,163,251,158,239,158,211,239,207, - 207,63,233,102,125,61,130,234,49,10,135,195,129,156,220,60,184,156,46,172, - 95,187,229,230,214,206,15,65,16,153,141,126,154,0,43,46,46,214,68,206, - 74,220,0,224,223,94,253,240,14,69,81,180,229,162,196,106,38,68,51,78, - 167,11,5,133,197,200,203,47,0,83,20,24,45,215,53,247,145,199,94,81, - 88,184,30,145,248,226,211,217,140,195,225,68,94,126,161,26,77,170,48,188, - 248,218,27,180,92,87,6,66,223,93,34,147,48,234,235,97,197,197,197,188, - 182,182,22,99,198,156,5,196,88,49,226,234,2,199,248,119,27,216,135,98, - 130,178,126,66,46,144,185,221,22,205,121,180,254,81,202,11,56,107,219,20, - 117,17,100,38,9,83,132,93,166,6,149,228,230,230,33,39,55,15,140,41, - 232,187,231,219,241,102,105,228,229,117,238,215,216,88,181,67,9,175,63,217, - 124,195,32,213,99,154,23,53,78,148,230,60,38,82,143,226,230,200,160,30, - 213,13,80,28,14,228,184,115,224,206,201,5,24,195,250,181,91,172,39,104, - 18,173,70,166,254,214,137,246,137,217,96,6,43,46,46,54,92,123,82,207, - 117,175,126,188,252,239,83,198,63,247,57,28,183,171,171,219,59,180,16,125, - 69,81,16,10,113,4,3,1,4,131,65,173,11,51,2,105,188,73,109,0, - 245,45,160,26,157,24,17,160,33,47,148,220,124,152,180,16,176,245,15,77, - 19,15,69,129,194,148,168,125,218,103,133,65,97,10,152,162,128,135,212,232, - 62,245,25,76,10,28,14,7,20,69,129,162,56,128,112,190,133,247,37,4, - 78,9,47,146,12,48,116,223,179,243,57,171,39,10,204,125,228,177,157,179, - 31,122,224,102,6,207,203,76,97,106,68,166,75,157,86,160,48,134,16,7, - 66,129,0,130,161,144,105,61,70,86,70,116,61,42,138,35,50,2,209,178, - 30,197,118,139,122,12,47,154,141,88,245,200,160,206,237,11,215,35,231,234, - 88,45,99,106,224,141,194,24,88,184,30,213,60,137,122,84,83,81,20,245, - 92,0,88,191,118,203,205,47,190,246,70,212,58,148,243,230,205,51,205,39, - 65,16,237,19,171,209,122,219,125,13,255,246,234,135,119,44,156,114,217,219, - 171,92,133,31,22,228,23,162,67,73,39,228,229,23,132,5,46,132,64,83, - 19,154,2,77,17,81,123,218,34,198,34,48,69,189,89,15,7,88,168,161, - 242,12,12,138,211,169,205,175,83,27,95,11,1,211,30,135,195,195,141,101, - 196,35,12,164,130,69,10,145,218,142,138,229,163,228,16,244,230,227,154,31, - 203,163,102,86,116,41,130,1,161,80,72,21,241,80,80,107,160,101,250,238, - 249,214,214,227,114,230,62,242,216,43,179,31,122,224,75,183,179,113,71,94, - 110,62,10,139,59,32,39,55,79,171,199,96,56,0,35,196,117,207,112,53, - 171,71,168,219,213,41,27,14,109,149,137,136,72,161,36,235,17,66,136,180, - 238,233,230,122,148,31,121,32,188,209,230,49,90,169,30,195,182,67,60,132, - 80,32,136,32,15,26,6,138,174,95,187,165,159,145,184,17,153,195,178,101, - 203,192,57,135,162,40,113,173,106,210,28,164,22,249,251,22,191,61,151,193, - 252,209,108,177,149,202,252,16,145,164,44,28,45,220,128,179,191,79,25,255, - 172,183,247,25,183,171,19,154,89,248,81,44,161,168,231,182,105,240,102,209, - 18,97,241,242,5,20,115,193,66,161,196,30,204,221,236,9,196,60,178,249, - 17,62,186,174,65,51,132,8,132,66,33,248,27,27,163,166,48,116,223,179, - 51,230,35,114,244,132,87,201,103,179,31,122,224,166,46,61,58,188,172,78, - 104,150,235,209,98,241,98,81,143,226,86,128,183,78,61,106,93,141,113,214, - 35,231,33,52,249,253,240,251,253,8,242,230,122,12,123,109,150,99,110,226, - 129,155,68,235,226,123,127,96,90,236,38,54,1,165,109,216,74,101,126,136, - 72,18,126,162,119,60,231,16,209,80,61,166,134,218,197,253,56,61,193,152, - 32,8,35,152,104,104,9,162,173,66,2,71,16,132,17,36,112,4,65,16, - 132,33,109,253,230,209,9,0,133,19,191,109,237,124,180,91,230,205,155,167, - 141,31,93,254,216,73,200,207,207,71,48,24,212,6,232,173,62,3,234,120, - 156,88,249,195,225,112,132,163,60,153,54,112,221,30,108,165,42,63,139,103, - 28,4,0,92,245,231,110,96,140,161,177,49,179,70,71,92,46,215,119,169, - 182,217,212,212,116,102,170,109,38,74,78,78,14,0,104,215,161,173,55,174, - 109,157,19,239,216,91,116,63,147,209,130,76,42,42,42,90,51,31,4,128, - 252,252,124,220,120,219,19,173,157,141,118,201,13,87,245,67,227,7,231,106, - 255,115,206,113,202,41,167,104,11,91,103,72,132,90,198,136,81,170,16,17, - 203,62,159,15,13,13,13,17,203,180,141,25,51,6,0,80,82,82,146,105, - 215,33,235,48,190,14,251,91,55,83,41,128,22,245,35,8,29,126,191,95, - 19,55,249,177,60,102,79,131,32,226,135,115,30,241,104,157,194,194,66,0, - 136,16,56,186,14,233,199,206,117,104,203,144,192,101,16,244,44,173,204,65, - 52,170,98,78,159,195,225,208,126,252,68,114,136,57,91,30,143,7,193,96, - 80,155,22,212,165,75,23,28,56,112,32,226,88,186,14,233,35,158,235,208, - 86,33,129,203,32,226,153,24,75,180,12,138,162,160,67,135,14,17,141,65, - 162,115,9,9,21,69,81,80,88,88,136,162,162,34,112,206,113,226,196,137, - 152,55,119,116,29,82,79,34,215,161,173,65,2,151,65,80,183,75,230,32, - 130,80,68,119,152,199,227,81,87,145,145,22,33,32,18,131,49,134,19,39, - 78,192,233,116,162,176,176,16,14,135,195,84,172,232,58,164,143,120,174,67, - 91,69,255,52,1,162,21,201,182,47,87,91,71,220,225,138,8,76,177,158, - 42,145,28,98,220,39,16,8,128,115,142,194,194,194,240,154,173,198,208,117, - 72,15,241,94,135,182,72,118,149,166,141,147,109,95,174,182,142,240,168,169, - 59,44,61,4,131,65,212,214,214,2,176,238,189,160,235,144,94,236,94,135, - 182,8,181,168,4,17,3,234,14,203,12,232,58,16,241,66,2,151,65,100, - 75,104,46,65,16,68,38,64,2,151,65,80,20,101,102,18,249,8,37,34, - 149,196,211,45,79,215,33,125,100,235,240,72,118,150,138,32,82,128,232,14, - 203,198,193,247,76,64,158,211,102,213,245,72,215,33,189,216,189,14,109,17, - 250,182,100,16,217,246,229,106,235,132,66,33,120,60,30,48,198,224,116,58, - 105,5,141,20,33,194,254,197,4,238,88,193,35,116,29,210,67,188,215,161, - 45,66,243,224,50,8,177,216,44,209,250,136,9,197,34,36,93,132,169,139, - 85,31,140,142,111,203,68,62,24,55,189,136,176,127,125,29,27,65,215,33, - 125,196,115,29,218,42,36,112,25,68,182,173,34,144,13,132,66,33,156,56, - 113,66,235,198,17,13,172,30,106,88,227,167,174,174,78,91,34,42,22,116, - 29,210,71,60,215,161,173,65,2,151,65,80,144,73,230,33,238,108,69,3, - 107,6,53,172,241,167,39,135,253,23,22,22,98,255,254,253,166,233,211,117, - 72,95,122,241,92,135,182,134,19,80,159,73,70,16,132,138,203,229,66,117, - 117,53,242,242,242,208,165,75,151,214,206,78,187,224,240,225,195,200,201,201, - 65,117,117,181,182,141,174,67,203,99,116,29,218,50,228,193,101,16,239,188, - 243,14,56,231,218,170,233,118,209,223,133,201,119,129,156,243,136,7,131,102, - 155,173,84,230,71,160,40,10,252,126,63,92,46,87,214,172,170,222,22,168, - 175,175,167,235,144,1,232,175,67,91,134,213,46,238,151,29,37,33,8,130, - 32,82,74,91,127,170,58,121,112,4,209,198,104,235,141,14,65,180,20,78, - 0,216,217,227,181,152,7,234,7,63,197,132,75,69,81,34,30,72,40,222, - 245,46,174,232,30,10,6,131,96,140,69,60,96,79,236,147,137,103,144,179, - 239,129,27,97,86,14,17,153,168,239,242,147,187,171,196,123,48,24,140,200, - 151,81,84,145,252,224,69,241,89,188,228,58,16,93,141,122,172,6,145,173, - 202,17,203,78,38,94,143,188,159,111,3,99,76,59,55,20,10,33,20,10, - 69,116,9,138,125,114,126,237,34,242,252,167,63,253,9,247,14,250,95,0, - 192,229,143,157,132,252,252,124,4,131,65,237,154,91,125,22,117,33,150,73, - 115,56,28,218,35,90,68,247,167,56,71,68,240,141,28,57,18,101,101,101, - 240,189,63,176,69,203,201,24,211,210,36,8,34,54,113,121,112,114,131,46, - 38,8,138,119,185,209,151,17,13,166,220,160,138,6,69,142,140,18,175,84, - 245,253,138,244,68,158,101,228,244,2,129,128,246,242,251,253,218,227,35,132, - 216,137,114,155,149,223,229,114,69,212,133,195,225,208,142,17,233,203,117,34, - 26,61,209,136,38,67,166,95,143,198,198,70,108,223,190,61,169,50,198,203, - 37,151,92,130,73,147,38,165,61,29,185,94,26,27,27,177,99,199,142,136, - 155,12,25,163,241,84,249,59,37,174,163,184,169,144,235,95,252,207,57,199, - 190,125,251,48,54,45,165,33,136,236,196,182,192,137,6,211,225,112,192,229, - 114,193,229,114,69,52,240,250,187,82,217,11,16,141,168,104,240,245,239,194, - 139,16,159,229,198,195,72,36,98,33,26,4,125,158,244,194,230,247,251,209, - 212,212,132,198,198,70,52,54,54,162,169,169,9,77,77,77,17,115,66,140, - 196,77,174,11,167,211,9,167,211,9,183,219,29,85,39,178,247,36,151,65, - 188,39,19,18,220,22,174,71,60,1,32,109,25,151,203,165,213,183,145,112, - 9,20,69,129,219,237,214,110,114,68,93,10,196,3,39,197,187,236,185,133, - 66,33,172,93,187,22,99,127,210,226,197,35,136,54,139,165,192,137,134,89, - 116,123,137,134,92,188,140,126,216,242,143,82,216,208,219,211,55,142,66,4, - 68,99,160,247,30,100,27,177,26,86,225,157,232,239,154,245,194,230,247,251, - 225,243,249,208,208,208,128,134,134,134,8,97,19,231,139,178,153,9,134,104, - 252,197,43,24,12,194,229,114,33,20,10,105,130,35,202,39,151,223,110,89, - 140,202,214,150,174,71,107,172,27,216,82,147,229,229,114,235,235,92,108,19, - 158,180,120,137,255,229,238,75,145,95,113,243,225,116,58,17,10,133,180,115, - 68,79,2,99,12,71,143,30,109,145,178,17,68,182,96,40,112,178,103,33, - 186,189,220,110,55,114,114,114,144,147,147,163,53,166,226,71,45,119,109,201, - 227,88,178,167,0,52,255,136,101,81,48,74,87,32,219,23,141,113,172,174, - 61,209,56,232,183,137,110,72,225,173,213,215,215,195,235,245,162,161,161,33, - 66,4,244,30,145,190,145,18,249,210,231,85,22,59,121,44,203,237,118,107, - 159,101,111,46,30,218,234,245,104,141,149,17,90,106,178,188,145,87,11,52, - 95,35,121,28,84,238,54,6,34,133,223,233,116,70,116,17,139,155,43,253, - 247,216,232,123,77,16,132,53,81,2,167,111,76,157,78,39,114,114,114,144, - 155,155,139,220,220,92,184,221,110,205,163,17,13,169,16,143,166,166,166,136, - 241,43,121,28,193,8,145,150,236,33,232,207,145,27,222,88,226,32,119,173, - 9,100,113,243,249,124,168,175,175,135,199,227,129,215,235,133,207,231,211,210, - 114,185,92,154,96,200,162,33,186,1,69,195,41,231,69,159,103,249,206,60, - 16,8,68,204,227,145,27,94,125,57,172,202,213,150,175,71,178,99,140,109, - 5,89,220,196,141,145,16,55,35,175,90,127,14,160,10,179,184,86,178,96, - 202,1,66,5,5,5,45,89,44,130,104,243,24,122,112,114,99,42,26,210, - 188,188,60,228,228,228,104,63,86,209,144,250,253,126,109,252,74,4,105,196, - 106,76,133,167,36,62,235,69,67,246,128,128,200,59,222,88,227,86,250,187, - 94,209,208,55,52,52,160,190,190,30,117,117,117,240,120,60,104,106,106,2, - 231,92,43,99,126,126,62,242,243,243,53,129,19,158,146,190,107,82,238,182, - 147,243,43,202,45,119,115,202,17,156,122,239,77,254,108,228,17,166,242,122, - 232,131,22,100,68,62,210,117,61,90,154,214,232,162,20,255,203,158,154,60, - 222,102,22,104,164,223,38,190,115,126,191,63,162,55,192,200,163,35,8,34, - 54,81,2,39,119,171,136,134,84,110,76,133,119,210,216,216,8,159,207,7, - 159,207,7,191,223,175,9,137,62,220,92,111,87,116,193,136,134,72,22,16, - 249,71,45,7,121,200,159,173,186,197,100,47,73,136,142,240,220,60,30,15, - 106,107,107,225,241,120,16,8,4,192,24,67,78,78,14,10,10,10,80,88, - 88,136,130,130,130,8,207,77,94,77,68,159,150,62,186,77,31,125,40,119, - 55,1,145,158,165,94,28,244,119,242,169,186,30,162,236,70,215,66,174,75, - 209,112,202,221,142,169,186,30,201,68,96,38,74,107,116,81,138,238,103,89, - 216,228,239,142,81,240,137,222,142,92,247,46,151,11,77,77,77,0,160,141, - 217,201,189,8,4,65,216,35,74,224,196,15,52,39,39,7,121,121,121,154, - 87,35,126,104,129,64,64,11,204,240,249,124,154,183,32,55,166,70,145,118, - 250,174,45,145,150,209,157,169,56,79,8,145,104,228,229,49,176,88,132,66, - 33,205,115,171,171,171,195,137,19,39,80,95,95,143,166,166,38,40,138,130, - 188,188,60,20,21,21,161,184,184,24,121,121,121,90,119,159,209,88,137,190, - 161,214,123,99,242,93,182,62,10,78,46,179,168,155,120,202,17,239,245,144, - 189,104,253,13,134,81,122,178,71,42,242,169,247,40,83,113,61,178,29,49, - 46,42,110,142,0,107,113,211,255,54,228,155,12,113,67,35,174,161,56,86, - 60,148,146,32,8,123,56,129,232,113,30,151,203,21,49,198,35,238,218,253, - 126,191,214,152,122,189,94,77,220,100,175,77,96,116,247,46,162,10,229,70, - 84,78,219,72,20,69,195,43,135,197,203,17,126,70,8,239,69,4,147,212, - 213,213,161,190,190,30,129,64,0,14,135,3,249,249,249,40,46,46,70,113, - 113,113,132,231,102,212,104,27,121,39,178,128,203,141,147,236,141,138,188,90, - 141,121,153,117,77,38,114,61,26,26,26,52,113,51,19,54,125,57,244,2, - 174,191,30,70,99,133,241,92,143,214,16,190,150,234,162,148,203,171,239,158, - 212,123,235,250,137,246,86,99,113,162,222,229,104,74,57,170,146,32,8,251, - 104,30,156,220,152,202,193,22,226,71,37,26,211,250,250,122,212,215,215,107, - 226,38,7,91,200,182,244,232,27,4,160,89,60,140,60,62,209,64,52,53, - 53,69,204,5,18,93,156,102,221,98,194,115,18,211,0,188,94,175,38,110, - 140,49,228,231,231,163,67,135,14,232,208,161,3,10,10,10,144,151,151,23, - 213,48,9,244,141,189,140,145,48,201,34,45,26,125,125,221,200,199,89,5, - 107,196,115,61,188,94,175,118,163,161,247,22,140,202,37,174,135,156,7,185, - 43,83,22,58,185,59,50,222,235,209,26,2,39,86,36,73,55,114,119,161, - 16,56,121,204,86,174,119,163,239,182,140,124,51,33,222,69,128,138,232,238, - 54,243,192,9,130,48,39,66,224,244,225,231,226,206,83,14,210,168,175,175, - 135,207,231,211,26,58,32,178,17,52,67,238,214,51,10,76,48,242,58,228, - 70,88,30,7,18,243,131,132,71,40,35,186,237,26,27,27,53,113,19,221, - 146,185,185,185,40,41,41,65,113,113,49,10,11,11,35,196,77,216,53,202, - 139,222,190,126,28,202,40,120,68,239,221,233,189,35,185,156,102,99,100,118, - 174,135,44,110,178,77,113,190,89,35,43,123,21,122,207,91,47,118,194,110, - 188,215,163,53,26,228,214,120,204,135,168,107,217,131,55,42,187,222,75,147, - 191,51,70,8,47,89,92,7,183,219,157,166,18,16,68,118,226,4,154,127, - 160,98,254,151,188,18,135,94,44,196,164,104,163,6,91,160,223,174,159,232, - 108,214,8,24,121,112,14,135,67,27,227,147,247,185,92,174,40,175,65,52, - 186,98,117,18,209,141,202,57,71,78,78,14,138,138,138,180,167,1,231,229, - 229,69,204,29,147,243,173,207,143,60,62,37,239,51,218,46,254,215,119,189, - 202,226,32,167,105,212,133,105,247,122,120,189,94,173,91,82,246,28,196,203, - 200,147,144,243,36,135,163,203,162,38,151,77,222,23,239,245,104,13,129,59, - 116,232,80,139,164,163,47,167,44,238,250,174,68,163,122,145,111,48,244,55, - 57,102,55,130,20,100,66,16,241,161,9,156,232,14,147,7,202,245,226,214, - 216,216,24,21,33,8,24,135,138,27,121,62,86,99,8,70,98,39,139,156, - 152,219,37,246,233,39,95,139,52,68,158,69,208,69,48,24,132,219,237,70, - 126,126,190,38,112,98,26,128,156,142,145,23,102,214,245,170,47,191,190,187, - 209,168,108,250,151,62,223,122,123,177,174,135,240,220,68,189,202,94,132,252, - 191,62,61,185,188,178,119,32,123,102,250,50,9,100,145,179,115,61,90,67, - 224,26,26,26,90,36,29,253,245,178,91,110,253,205,134,217,247,69,62,214, - 40,77,130,32,98,227,4,160,53,76,98,174,149,28,5,40,194,207,229,57, - 85,102,63,74,35,145,0,212,6,92,172,216,96,228,189,201,63,100,49,110, - 37,55,154,162,161,230,188,121,213,119,185,33,23,200,243,222,196,24,33,99, - 12,110,183,27,133,133,133,200,207,207,71,110,110,174,225,252,54,125,190,245, - 93,141,102,119,215,50,250,96,13,33,146,250,192,3,35,47,86,246,152,236, - 92,15,225,69,11,27,162,76,162,174,244,79,59,48,234,162,212,175,100,162, - 15,158,145,39,174,203,219,236,94,143,214,16,184,214,152,38,96,85,78,179, - 239,188,252,191,217,119,74,127,205,218,203,218,158,4,145,42,52,129,147,23, - 234,5,160,69,233,137,185,85,34,50,49,214,29,167,17,122,239,65,127,174, - 126,108,66,190,27,150,69,142,243,230,249,102,114,227,47,144,61,56,209,53, - 233,114,185,180,73,220,249,249,249,90,180,155,62,77,171,59,101,189,119,102, - 228,189,90,29,167,111,12,229,57,82,114,247,159,92,102,171,235,33,202,102, - 116,35,32,191,199,234,166,212,143,15,202,221,150,242,248,170,188,8,176,232, - 14,181,115,61,178,217,227,48,251,14,196,58,71,223,245,104,118,179,100,116, - 110,73,73,73,98,153,37,136,118,138,19,104,14,105,23,119,230,122,161,16, - 19,185,173,66,222,1,68,253,112,5,178,39,163,199,172,59,70,222,38,119, - 127,9,145,245,251,253,90,163,42,144,199,223,68,68,161,232,158,20,99,110, - 162,241,215,231,217,40,79,250,238,59,185,44,102,34,104,246,191,62,82,84, - 124,54,138,64,140,117,61,228,107,33,215,141,94,220,244,47,57,93,89,124, - 229,242,200,226,166,23,125,35,155,86,215,163,53,104,169,105,2,70,215,215, - 172,11,94,95,143,70,223,115,179,124,203,233,228,231,231,39,154,93,130,104, - 151,104,173,145,28,77,40,26,84,89,216,132,96,200,141,190,30,179,31,178, - 220,173,37,142,211,123,20,102,136,70,91,94,137,93,140,31,233,69,87,8, - 156,152,11,38,86,255,200,205,205,53,20,55,171,187,103,125,0,128,248,44, - 167,167,239,186,148,223,245,182,228,110,64,253,170,20,255,159,189,55,15,147, - 228,168,239,188,63,145,89,71,86,159,85,51,221,51,221,163,57,212,35,9, - 205,8,36,144,48,54,26,13,135,6,99,131,196,218,28,251,62,182,49,6, - 94,31,143,49,6,175,237,93,123,141,215,94,236,93,219,188,126,214,187,54, - 139,143,221,53,44,62,16,62,100,9,153,67,2,33,36,129,7,9,35,161, - 107,208,204,160,99,110,77,207,213,211,103,85,101,101,86,102,188,127,100,69, - 117,84,116,86,117,143,52,125,78,124,158,167,159,170,202,202,204,136,204,168, - 142,111,254,142,136,48,93,123,208,190,61,244,73,157,205,180,244,78,66,151, - 22,39,50,5,220,188,31,250,44,39,234,85,95,38,104,190,246,88,42,177, - 209,89,14,23,165,57,160,191,157,216,153,46,108,51,107,55,237,33,201,252, - 125,91,44,150,133,147,1,90,198,129,193,172,80,168,63,51,91,208,236,140, - 219,9,158,162,211,130,143,105,231,51,183,153,29,181,234,236,213,76,253,10, - 125,177,82,41,101,51,197,94,45,39,147,150,221,182,208,107,208,247,49,59, - 26,83,232,210,68,78,207,88,212,45,211,180,178,59,181,135,62,46,202,188, - 55,11,17,57,51,174,216,206,37,105,94,179,41,112,11,105,143,181,220,33, - 155,215,105,254,150,204,24,46,180,122,6,128,57,15,141,250,119,42,190,57, - 223,92,162,22,139,165,61,45,227,224,160,117,14,71,61,238,150,22,115,72, - 139,95,233,152,137,22,234,152,249,132,36,205,133,163,119,248,170,99,208,23, - 38,85,229,169,142,64,143,99,233,130,97,138,156,105,189,152,177,57,115,95, - 51,49,35,173,99,107,119,47,116,244,9,152,205,236,67,253,30,152,237,161, - 91,69,105,9,43,202,237,153,38,114,230,189,111,39,216,186,59,85,221,51, - 125,16,185,153,80,210,174,61,150,131,229,176,26,161,213,114,211,45,245,133, - 30,151,246,255,149,182,222,160,197,98,89,56,205,97,2,48,251,207,166,58, - 82,93,220,204,140,47,69,59,177,50,45,48,181,45,205,61,217,233,124,250, - 62,122,246,158,238,142,84,152,131,143,77,129,83,245,215,207,221,206,197,104, - 94,111,154,149,182,16,203,77,199,124,10,87,101,164,185,78,213,57,245,246, - 104,39,110,166,229,214,201,101,169,95,119,59,49,210,93,146,250,125,211,197, - 120,33,237,49,223,131,204,98,176,84,46,74,243,55,171,146,111,116,210,172, - 97,245,106,198,121,223,62,218,113,0,0,32,0,73,68,65,84,77,130,32, - 104,177,220,84,156,211,98,177,44,156,57,2,167,254,89,245,9,123,219,137, - 78,167,14,93,29,103,206,200,223,46,254,102,190,55,133,197,236,60,148,69, - 211,14,61,205,222,76,42,105,231,58,50,235,175,215,69,119,233,233,251,204, - 103,181,153,150,161,126,222,52,81,211,223,183,107,15,93,168,212,181,154,46, - 72,93,228,204,33,4,208,234,50,77,171,179,238,150,212,203,209,31,32,116, - 210,218,99,62,193,95,43,40,119,162,186,39,42,113,8,146,251,210,46,241, - 38,205,106,83,231,50,127,115,214,69,105,177,92,56,25,104,141,149,232,171, - 63,43,76,171,39,237,125,218,62,166,229,102,102,243,153,175,105,231,86,46, - 52,189,163,213,87,166,54,103,212,208,99,70,250,154,110,122,25,230,147,116, - 187,235,51,173,58,85,15,189,179,49,59,113,115,160,116,154,5,168,190,87, - 162,100,10,120,167,246,48,247,55,69,50,237,207,116,85,154,247,85,191,142, - 180,99,85,121,250,152,190,133,180,199,114,176,92,89,148,186,192,153,15,7, - 202,133,107,90,195,230,67,143,186,127,166,229,166,254,212,18,58,22,139,101, - 97,52,31,45,245,78,212,180,82,218,185,154,204,152,149,142,105,81,232,157, - 171,233,70,210,255,209,205,196,11,211,130,152,207,42,208,59,18,61,78,100, - 10,153,222,177,235,150,137,254,157,254,217,124,154,110,231,218,84,232,211,103, - 169,247,237,92,84,105,247,175,83,123,164,101,232,181,179,144,245,237,74,232, - 244,14,182,211,159,126,238,52,151,242,124,237,177,28,46,202,66,161,176,36, - 229,164,101,164,234,227,68,213,3,150,233,198,214,49,127,7,186,184,233,162, - 167,254,106,181,218,82,92,154,197,178,102,104,241,157,44,36,142,164,58,53, - 221,5,169,47,232,169,80,159,245,84,118,211,101,105,90,80,237,178,10,117, - 183,154,46,50,243,185,40,23,138,110,33,182,19,55,221,74,209,93,149,230, - 83,186,218,166,48,151,175,49,239,77,90,153,102,217,157,232,228,234,157,239, - 156,166,69,105,30,155,118,61,250,246,249,218,99,57,92,148,87,92,113,197, - 146,148,147,150,220,164,222,195,108,92,78,95,31,46,205,197,168,142,53,23, - 10,54,239,107,218,239,200,98,177,116,166,41,112,250,63,105,59,127,191,178, - 2,204,129,192,237,44,6,253,79,159,23,81,63,159,254,106,110,55,49,221, - 131,105,199,45,100,86,119,117,174,118,49,40,179,188,180,87,117,159,218,89, - 84,250,247,38,166,251,175,211,181,170,243,180,107,15,243,26,218,157,79,197, - 220,58,89,19,250,121,219,213,41,173,142,237,218,99,57,184,249,230,155,151, - 164,28,211,93,168,183,87,24,134,77,75,89,185,117,211,178,120,117,107,45, - 77,220,76,143,129,21,56,139,229,194,200,0,205,39,196,180,14,87,143,189, - 232,226,166,207,192,145,150,72,162,142,77,75,128,152,143,52,241,49,159,114, - 211,226,90,122,172,41,173,227,79,139,189,153,130,150,102,225,168,50,77,43, - 78,175,155,190,191,126,62,243,189,170,163,126,207,204,251,210,169,61,76,151, - 163,158,210,159,118,31,85,125,85,204,77,183,202,204,78,181,157,248,233,101, - 171,251,182,144,246,248,216,199,62,150,122,158,197,228,214,91,111,109,62,116, - 92,72,70,165,217,174,186,37,166,206,103,198,208,212,180,206,66,8,246,238, - 221,203,83,79,61,5,208,204,222,85,51,232,168,85,216,213,98,181,208,234, - 122,84,177,55,53,5,155,90,235,79,205,1,171,102,19,154,152,152,224,231, - 150,198,64,181,88,214,4,45,43,122,155,238,55,104,237,80,245,184,141,249, - 157,190,191,110,161,232,79,173,122,7,169,31,211,174,19,55,159,102,245,241, - 96,105,22,161,158,190,174,119,186,105,150,84,154,248,180,115,79,154,98,48, - 159,197,162,151,109,10,146,122,213,227,97,237,234,147,230,14,213,81,105,232, - 166,101,102,10,155,89,47,253,179,105,29,154,231,49,175,75,183,40,230,107, - 143,95,125,213,223,165,222,159,197,196,191,251,218,101,41,243,61,155,128,77, - 75,94,180,197,98,233,64,83,224,244,236,55,253,233,181,157,117,144,214,129, - 235,199,152,9,37,237,226,107,250,177,230,83,179,105,45,232,51,121,168,115, - 155,2,167,198,189,169,152,152,41,76,122,118,91,154,168,232,239,211,196,173, - 221,49,250,249,218,9,159,18,95,125,158,201,118,231,109,215,30,105,152,215, - 167,91,117,186,24,167,9,94,39,87,88,59,171,78,89,152,157,218,163,255, - 29,207,164,214,213,98,177,88,150,138,166,139,82,127,146,215,59,72,221,45, - 105,138,83,90,204,13,90,135,7,168,87,229,230,209,183,171,115,182,219,166, - 234,162,92,56,65,16,180,172,129,102,186,34,245,177,111,105,177,12,221,229, - 103,198,164,244,178,77,43,200,252,174,221,113,230,103,211,122,211,231,113,84, - 174,212,52,235,114,190,246,72,179,214,210,254,116,113,211,19,129,218,89,124, - 237,220,149,186,240,233,147,0,204,215,30,22,139,197,178,156,52,45,56,37, - 34,186,53,149,54,16,57,205,197,216,206,109,153,182,93,157,187,157,123,83, - 149,171,119,210,170,51,85,171,4,0,45,66,161,31,175,226,31,122,220,201, - 204,80,51,45,198,118,110,185,78,238,186,118,152,199,155,34,151,54,179,138, - 153,129,216,169,61,212,181,232,34,165,139,183,126,221,58,105,83,117,233,101, - 117,18,58,189,14,186,184,205,215,30,22,139,197,178,156,52,5,78,117,84, - 186,133,96,90,13,105,157,252,124,194,103,90,60,157,220,108,250,49,186,219, - 44,12,195,230,58,104,245,122,189,217,153,154,179,148,40,43,41,147,201,52, - 93,124,230,120,50,51,227,49,205,5,167,62,155,46,72,243,186,59,221,15, - 115,155,235,186,205,73,159,85,234,184,158,6,110,10,99,187,246,208,95,211, - 220,146,105,238,73,181,111,59,129,51,173,62,253,222,171,251,166,167,171,47, - 180,61,44,22,139,101,57,105,206,100,98,198,103,244,20,120,21,19,106,103, - 157,41,210,146,73,210,220,146,237,68,64,161,58,244,40,138,154,25,101,149, - 74,165,185,138,117,38,147,33,151,203,205,177,24,148,139,50,155,205,182,172, - 42,160,91,67,102,102,98,59,87,163,105,1,117,90,175,43,237,122,116,65, - 81,245,205,231,243,228,243,249,150,113,81,74,52,244,242,230,107,15,117,156, - 90,136,212,140,229,233,153,174,230,80,6,115,218,50,243,252,166,69,167,199, - 230,84,166,223,66,219,195,98,177,88,150,147,166,5,167,119,108,250,54,133, - 233,214,51,73,235,228,205,132,142,180,115,116,178,40,212,226,165,42,101,58, - 12,67,28,199,105,89,6,199,116,163,42,145,203,229,114,4,65,208,140,63, - 165,185,40,213,49,105,174,73,51,78,165,6,180,235,251,180,187,110,189,46, - 202,45,169,234,172,44,29,61,182,104,174,163,54,95,123,152,219,210,134,10, - 232,113,55,125,186,173,52,161,54,133,209,28,159,165,68,88,45,184,186,208, - 246,176,88,44,150,229,164,57,208,91,137,128,62,149,147,222,233,234,98,101, - 90,23,237,226,113,58,186,184,181,139,199,169,207,186,184,85,42,21,166,167, - 167,169,86,171,196,113,60,167,51,53,203,114,93,151,108,54,59,231,26,244, - 177,101,186,85,105,10,71,154,136,152,223,233,199,182,195,20,219,124,62,143, - 231,121,100,50,153,230,61,172,215,235,205,25,248,211,44,198,78,237,161,215, - 73,119,83,234,117,106,55,85,89,154,181,156,22,139,211,199,105,169,152,219, - 133,182,135,197,98,177,44,23,45,51,153,152,175,105,29,62,204,77,36,49, - 183,171,247,186,107,204,36,45,102,167,91,53,190,239,83,169,84,152,154,154, - 106,186,195,50,153,12,158,231,81,40,20,200,231,243,205,85,186,245,115,170, - 120,151,202,164,84,51,78,152,105,240,237,18,77,204,247,122,221,218,93,131, - 126,156,30,183,212,87,20,239,234,234,106,25,194,160,103,33,166,9,220,66, - 218,67,189,55,7,224,155,227,24,211,92,197,166,133,170,95,163,57,206,77, - 119,19,95,72,123,88,44,22,203,114,50,103,46,74,125,252,152,110,17,164, - 89,105,157,158,214,149,91,207,20,139,52,55,165,46,60,74,220,202,229,50, - 83,83,83,204,204,204,80,171,213,16,66,52,59,83,207,243,230,172,161,102, - 214,75,183,226,244,152,158,158,245,103,142,251,50,235,165,206,169,11,132,233, - 166,212,173,64,125,236,159,222,249,171,153,44,84,157,84,162,70,16,4,29, - 151,253,89,72,123,232,67,1,148,91,210,156,47,84,9,160,41,126,102,89, - 230,125,82,150,91,181,90,125,81,237,97,177,88,44,203,73,203,106,2,105, - 9,24,102,167,170,11,155,110,65,40,212,119,105,217,152,250,121,245,14,90, - 149,163,146,24,202,229,50,211,211,211,76,77,77,225,251,62,82,202,57,98, - 161,18,26,210,178,27,85,135,174,220,129,122,150,162,105,137,154,233,246,166, - 101,163,239,159,38,110,230,185,84,204,45,159,207,55,235,91,40,20,154,107, - 130,169,196,25,53,253,82,187,85,176,47,164,61,244,250,42,11,214,116,195, - 58,142,51,39,81,40,205,74,212,51,38,131,32,104,62,108,188,216,246,176, - 88,44,150,229,162,41,112,186,203,208,76,120,208,23,218,84,157,184,254,218, - 142,118,46,74,211,122,83,137,22,42,198,51,57,57,201,244,244,52,229,114, - 185,57,35,123,87,87,23,221,221,221,120,158,215,116,245,117,138,245,153,117, - 212,197,75,31,152,172,215,201,116,57,154,226,151,86,142,42,75,185,36,85, - 66,137,114,75,42,247,157,18,90,21,91,84,226,214,110,253,180,11,109,15, - 101,49,155,150,169,62,222,78,213,213,108,11,93,224,116,235,242,98,180,135, - 197,98,177,44,23,233,75,13,51,119,220,148,122,170,215,227,75,105,157,172, - 222,41,155,179,110,0,45,34,163,206,89,175,215,155,49,158,233,233,105,102, - 102,102,154,73,12,217,108,150,222,222,94,122,122,122,232,234,234,106,38,106, - 116,114,135,233,226,160,172,10,115,117,114,51,25,67,31,71,102,126,103,186, - 5,245,132,27,160,101,134,18,101,185,169,216,91,54,155,5,104,102,33,234, - 147,232,170,52,251,133,176,208,246,80,247,93,125,86,46,75,61,17,37,237, - 220,122,91,132,97,120,81,219,195,98,177,88,150,131,57,2,167,167,156,167, - 117,170,234,123,221,106,105,183,106,64,187,196,12,229,150,211,59,211,114,185, - 76,181,90,109,198,120,0,178,217,44,61,61,61,205,14,181,80,40,180,172, - 175,213,105,61,56,221,250,234,52,184,91,185,14,245,177,105,102,108,78,185, - 59,205,243,235,215,175,143,115,83,239,117,113,83,238,62,53,64,122,161,226, - 246,82,218,67,95,89,161,157,37,45,132,104,198,1,23,179,61,44,22,139, - 101,169,201,192,220,20,126,179,227,213,173,3,125,102,16,125,126,69,83,224, - 218,61,209,235,46,73,125,89,144,74,165,210,116,221,41,193,232,234,234,162, - 167,167,135,158,158,158,150,20,123,51,19,82,161,111,75,27,62,96,186,31, - 245,193,207,186,53,166,206,101,90,115,230,177,250,220,151,170,126,106,192,179, - 202,226,84,46,63,117,157,190,239,55,199,189,165,101,166,174,165,246,176,88, - 44,150,229,164,197,44,209,173,4,51,5,93,239,84,117,11,76,29,167,58, - 83,115,5,111,133,238,2,211,231,50,84,175,170,211,215,179,15,187,187,187, - 233,238,238,110,90,67,74,52,84,189,204,36,12,152,43,114,157,18,100,244, - 109,166,245,105,38,119,232,231,84,215,168,220,146,42,61,94,79,180,208,45, - 34,229,154,212,179,38,219,137,219,90,107,15,139,197,98,89,46,230,184,40, - 205,108,71,181,77,239,208,165,76,22,101,4,154,203,165,152,113,42,51,75, - 207,140,241,168,87,221,205,166,6,67,171,236,60,207,243,90,198,87,153,245, - 49,235,155,102,237,152,34,167,31,111,138,154,153,129,104,14,148,54,133,67, - 237,171,44,25,213,193,235,227,199,244,191,52,113,51,239,245,90,106,15,139, - 197,98,89,78,218,38,153,164,89,58,106,187,234,92,213,32,106,61,134,163, - 58,87,115,186,39,213,241,155,179,101,168,73,136,85,252,74,117,168,106,98, - 98,115,65,79,189,110,237,234,157,150,194,159,230,70,83,243,57,234,251,233, - 66,7,173,171,146,235,227,220,76,171,72,183,164,194,48,108,90,110,74,60, - 76,225,49,235,54,31,171,181,61,44,22,139,101,185,104,43,112,208,58,126, - 77,117,172,202,98,209,247,9,195,176,217,233,155,241,37,179,35,84,199,170, - 142,82,165,213,155,127,170,211,214,59,207,52,87,219,66,73,19,62,29,189, - 147,215,197,208,44,79,157,199,28,51,167,175,147,166,91,69,106,123,59,113, - 187,208,107,88,43,237,97,177,88,44,139,77,71,129,211,49,59,123,21,131, - 169,215,235,205,217,251,213,180,83,186,171,75,101,82,234,226,162,39,104,40, - 171,64,143,99,153,227,235,116,215,224,66,235,170,104,23,147,83,219,211,230, - 124,84,239,149,21,167,207,189,105,38,107,40,241,208,197,76,183,158,210,18, - 85,116,145,122,177,172,166,246,176,88,44,150,229,96,193,2,7,115,167,173, - 82,239,211,92,96,102,135,170,159,67,143,103,153,233,236,105,157,230,75,177, - 18,58,89,110,186,85,101,90,108,186,171,178,83,249,166,203,79,255,220,46, - 3,83,29,247,82,89,141,237,97,177,88,44,75,133,152,186,235,106,155,246, - 102,185,232,244,191,227,153,229,174,130,197,98,185,196,177,2,103,177,88,46, - 121,236,3,217,218,36,3,208,251,163,7,121,236,177,199,56,124,248,48,65, - 16,208,221,221,61,103,133,230,118,233,234,237,152,111,31,125,252,85,185,92, - 38,151,203,49,50,50,194,13,55,220,192,244,63,239,0,96,230,251,31,96, - 116,116,148,47,125,233,75,212,235,245,230,212,87,230,100,194,23,179,94,42, - 134,22,134,33,190,239,147,201,100,184,245,214,91,25,30,30,166,231,219,55, - 39,59,237,121,132,233,233,105,38,38,38,154,115,51,234,131,171,23,3,125, - 80,183,74,34,41,22,139,244,246,246,194,253,175,1,224,171,209,31,44,74, - 217,105,188,217,253,77,0,254,230,196,135,217,177,99,71,203,106,5,166,27, - 86,185,78,245,196,28,51,89,6,244,101,127,36,82,182,46,253,243,220,115, - 207,241,147,195,127,2,192,241,171,238,92,178,235,220,242,236,59,129,228,127, - 196,178,114,80,125,196,197,104,23,117,46,203,218,35,3,240,228,147,79,114, - 240,224,65,94,241,138,87,176,113,227,70,186,186,186,128,214,49,84,58,11, - 153,181,98,190,125,84,231,23,199,49,213,106,149,83,167,78,241,244,211,79, - 227,186,46,219,27,251,156,57,115,134,187,238,186,139,145,145,17,214,173,91, - 71,62,159,95,210,122,5,65,192,216,216,24,119,221,117,23,239,122,215,187, - 232,105,236,83,46,151,57,119,238,28,27,54,108,160,167,167,167,57,37,151, - 98,49,235,165,18,90,102,102,102,56,115,230,12,142,227,208,173,237,247,250, - 215,191,158,82,169,52,71,64,22,242,218,174,254,122,249,51,51,51,124,237, - 107,95,107,110,47,151,203,140,143,143,3,173,9,56,250,20,98,102,253,85, - 50,140,250,172,15,16,79,18,124,234,68,17,45,199,250,190,223,82,159,109, - 219,182,81,40,20,218,222,175,151,74,16,4,28,58,116,168,249,121,98,98, - 98,209,202,178,92,56,106,112,207,197,104,23,187,130,225,218,37,3,73,167, - 85,40,20,24,30,30,166,171,171,171,109,106,124,90,167,169,190,55,153,111, - 31,149,132,225,56,14,61,61,61,108,218,180,137,67,135,14,49,51,51,211, - 220,103,239,222,189,228,243,121,214,175,95,143,231,121,115,206,179,152,245,114, - 93,151,66,161,192,192,192,0,163,163,163,236,221,187,151,237,155,147,125,130, - 32,104,78,58,172,196,173,147,56,45,36,33,99,190,125,244,107,205,229,114, - 244,246,246,50,62,62,158,88,220,218,126,211,211,211,169,3,212,211,174,215, - 188,119,250,247,230,176,2,149,113,90,46,151,91,234,117,254,252,249,150,101, - 137,92,215,109,78,2,173,151,17,69,81,115,80,186,62,49,55,208,28,206, - 48,59,189,153,32,147,153,29,167,24,199,49,103,206,156,129,145,217,114,131, - 32,104,251,59,125,49,215,169,35,229,236,192,121,133,41,176,150,229,69,253, - 230,211,218,165,90,173,206,249,78,245,31,105,15,69,221,115,182,88,214,10, - 25,128,48,12,25,26,26,162,80,40,180,29,251,165,94,211,6,26,155,214, - 199,124,251,232,223,171,14,166,80,40,48,52,52,212,156,216,23,146,14,206, - 180,220,150,178,94,82,74,242,249,60,235,214,173,107,14,162,6,24,27,27, - 99,96,96,160,57,134,204,20,167,52,203,40,205,106,210,235,213,105,159,180, - 78,57,147,201,208,211,211,195,185,115,231,40,105,101,143,141,141,81,171,213, - 90,50,33,213,185,204,101,119,212,62,42,219,82,9,209,172,251,55,110,90, - 82,66,8,106,181,218,156,14,69,159,178,75,31,28,111,90,133,237,238,149, - 218,71,205,223,153,76,15,38,90,206,39,132,104,122,21,20,149,74,133,122, - 189,158,58,92,33,109,88,134,89,159,214,54,72,92,162,234,115,218,50,70, - 170,131,180,172,44,244,118,241,125,159,195,135,15,115,199,29,143,241,208,67, - 163,28,56,112,138,137,9,40,22,97,231,206,33,118,237,26,230,93,239,186, - 129,145,145,17,219,158,151,8,25,128,211,167,79,115,245,213,87,207,89,103, - 76,97,118,14,105,219,94,204,62,186,59,48,142,99,10,133,2,7,15,30, - 228,213,235,146,239,71,71,71,185,234,170,171,90,220,93,47,181,204,133,238, - 163,234,165,68,238,216,177,99,176,77,187,113,218,60,140,105,164,13,19,48, - 183,181,179,30,22,186,143,185,194,1,204,10,142,26,207,86,175,215,231,44, - 165,163,139,157,238,70,20,66,180,184,91,235,117,73,62,79,243,60,185,92, - 110,142,192,229,243,249,150,217,96,20,250,61,213,151,233,73,19,125,117,77, - 237,98,152,106,232,130,142,62,31,168,30,223,83,231,74,123,56,104,103,181, - 199,177,196,113,90,235,105,10,92,177,88,156,83,47,203,242,49,221,120,85, - 237,226,251,62,119,223,253,24,127,250,167,15,3,69,110,184,97,23,183,190, - 171,68,177,232,49,49,225,115,248,240,56,247,223,127,152,135,30,186,159,15, - 125,232,70,222,249,206,93,77,145,155,78,47,194,178,6,200,64,242,52,156, - 205,102,153,154,154,106,153,48,216,180,152,46,38,170,147,78,92,82,81,115, - 128,178,137,235,186,148,203,229,57,99,179,150,162,94,42,169,35,173,3,119, - 93,151,90,173,54,103,188,216,98,214,75,175,159,74,234,48,81,238,66,37, - 92,106,206,76,93,64,116,235,40,205,101,168,182,231,243,179,22,156,114,21, - 154,162,170,44,175,118,215,174,196,38,77,140,219,149,175,215,67,185,60,149, - 21,175,72,155,71,84,157,71,183,216,204,49,130,230,249,147,50,104,90,112, - 250,185,116,108,12,110,101,161,199,224,124,223,231,182,219,238,231,83,183,29, - 102,100,231,78,110,185,117,39,165,162,135,231,129,15,148,124,24,217,57,196, - 245,215,15,115,231,157,7,248,189,63,122,152,209,209,83,252,228,79,238,193, - 243,60,27,131,91,195,52,123,29,221,100,215,221,100,250,147,183,254,189,185, - 205,100,33,251,232,251,153,117,80,152,29,155,58,102,177,235,53,95,29,218, - 117,216,75,89,175,118,117,200,229,114,205,135,133,180,197,72,211,92,117,237, - 86,2,112,156,89,43,76,63,175,94,135,52,161,53,207,111,146,102,109,165, - 9,144,170,91,154,101,151,54,49,118,154,11,219,252,220,78,136,213,119,250, - 121,21,54,6,183,178,80,113,179,241,241,113,14,28,56,204,167,238,216,143, - 55,124,13,195,215,12,227,21,61,240,192,47,0,20,160,80,133,42,120,195, - 69,134,174,31,98,212,175,242,169,59,246,179,115,231,16,59,119,142,48,176, - 140,215,97,89,92,230,157,201,164,83,231,116,161,199,93,76,108,189,58,159, - 199,236,160,219,157,127,190,97,13,186,37,164,199,231,20,250,138,6,105,46, - 217,78,231,55,221,134,166,213,165,206,145,38,56,237,174,43,237,193,194,188, - 206,52,33,79,139,213,234,216,152,205,202,229,238,187,15,48,94,24,161,224, - 193,40,112,202,247,41,226,145,180,152,74,56,105,60,164,148,10,140,23,11, - 80,29,225,238,187,15,176,115,231,72,135,51,91,86,59,47,74,224,46,6, - 157,226,87,11,97,165,214,107,185,233,228,50,213,99,98,138,118,137,48,106, - 127,245,94,95,70,71,71,79,44,209,203,104,39,52,230,119,234,179,138,11, - 182,179,248,210,86,84,79,59,87,187,114,58,197,224,76,210,234,160,98,61, - 119,223,125,55,15,61,244,16,143,63,254,184,21,189,37,194,247,125,174,191, - 254,122,118,237,218,197,45,183,220,2,204,198,205,126,246,103,127,150,135,14, - 143,192,206,61,224,121,140,142,87,121,236,48,12,23,61,188,66,34,114,62, - 224,87,125,198,125,56,60,90,5,207,99,162,4,159,186,251,97,14,28,184, - 147,187,126,105,185,174,204,178,216,52,123,13,53,120,216,236,20,22,219,226, - 209,73,19,23,51,83,110,57,214,29,75,171,151,158,10,111,10,198,114,214, - 75,159,56,25,102,199,163,41,1,49,219,84,143,89,169,125,76,119,165,178, - 220,244,36,12,189,188,11,137,65,234,231,214,143,81,101,235,238,78,221,85, - 158,102,145,234,177,178,249,146,73,244,235,212,63,235,232,247,199,188,183,19, - 19,19,220,127,255,253,220,118,219,109,148,74,37,155,137,183,132,248,190,207, - 169,83,167,248,212,167,62,133,239,251,236,217,179,167,25,55,27,26,26,194, - 31,31,161,88,244,40,149,146,184,91,114,76,99,135,2,248,213,89,11,174, - 224,65,169,228,225,3,19,197,17,134,134,170,192,11,75,127,81,150,37,161, - 41,112,170,163,90,140,68,142,133,90,69,237,220,123,102,125,86,90,189,58, - 237,183,152,180,43,79,23,42,125,159,52,241,232,100,121,169,247,42,125,63, - 173,60,61,195,49,205,106,107,39,78,105,245,55,99,121,234,56,117,45,105, - 215,153,38,84,237,234,217,238,58,245,125,218,89,144,190,239,115,224,192,1, - 70,70,70,40,149,146,129,25,54,179,114,105,152,152,152,160,90,173,82,44, - 22,57,112,224,0,187,118,237,106,198,224,74,165,18,197,145,17,134,75,30, - 195,197,18,197,146,71,201,75,132,206,43,204,10,30,64,201,243,160,105,211, - 141,195,200,8,165,210,232,210,95,144,101,201,152,35,112,176,244,29,117,39, - 150,203,58,154,143,229,20,182,78,168,36,9,221,117,104,118,234,237,58,113, - 181,79,154,149,103,90,134,10,189,125,204,178,58,89,77,102,182,99,167,120, - 93,218,195,150,89,207,118,215,57,223,189,210,209,235,100,214,197,243,60,70, - 71,71,25,30,30,102,104,104,8,160,41,116,150,197,165,84,42,49,62,62, - 142,239,251,140,142,30,110,177,156,139,197,34,165,241,42,195,197,17,134,134, - 19,113,43,22,60,10,197,2,30,73,187,249,190,143,95,44,80,157,168,54, - 182,1,148,240,199,71,237,67,202,26,167,165,183,90,44,151,100,218,57,47, - 36,214,117,169,213,235,165,98,62,168,44,68,140,219,197,171,204,207,237,132, - 166,221,119,250,171,238,222,76,179,126,77,81,212,99,134,237,172,232,118,215, - 217,238,90,231,139,217,181,107,255,98,177,200,174,93,187,168,86,171,20,10, - 5,219,49,46,33,158,231,225,121,30,227,227,227,140,140,236,162,88,44,54, - 99,112,133,66,129,34,19,13,203,173,72,177,84,160,84,4,143,36,6,7, - 137,37,231,87,125,188,33,96,162,0,227,85,252,210,4,197,195,19,139,58, - 221,155,101,249,105,155,100,178,216,29,183,57,214,44,142,227,150,217,66,150, - 179,94,48,155,84,33,165,156,51,232,119,57,235,165,238,153,26,63,104,210, - 201,29,168,199,180,212,54,93,124,210,198,140,205,150,57,119,206,74,117,14, - 61,118,171,199,72,211,226,117,166,104,233,131,248,205,24,161,105,161,165,93, - 151,73,218,117,234,251,183,75,162,81,159,219,49,49,49,193,200,200,8,251, - 247,239,111,118,184,182,115,92,26,212,212,91,133,66,129,145,145,17,38,38, - 38,90,98,112,195,135,15,83,42,42,113,107,88,112,94,50,84,64,57,36, - 11,158,71,213,247,27,159,26,137,39,133,113,134,134,108,22,229,90,166,41, - 112,237,58,12,115,92,215,197,234,200,245,243,181,75,65,95,174,122,153,174, - 181,11,177,4,94,204,120,182,11,169,151,89,199,78,251,207,23,251,74,179, - 218,218,185,3,147,54,154,91,142,185,32,236,124,214,162,41,94,186,32,182, - 43,91,149,211,238,58,231,179,220,58,185,34,59,237,167,227,251,126,51,177, - 196,247,125,198,199,199,173,139,114,137,168,86,171,205,196,158,82,169,132,239, - 251,45,49,184,145,226,97,198,79,61,78,105,100,79,83,220,188,98,34,110, - 158,74,50,241,128,137,89,215,230,225,3,15,49,82,180,110,230,181,206,178, - 13,19,48,207,159,214,33,47,228,184,197,66,63,255,74,171,87,39,17,77, - 179,126,58,157,75,127,175,47,103,99,238,227,56,237,179,54,77,129,75,203, - 146,132,249,135,11,168,25,87,210,174,181,211,96,242,133,92,95,218,57,23, - 122,12,204,142,131,27,25,177,79,252,75,77,167,123,126,253,245,215,3,112, - 255,67,7,24,61,48,204,240,158,27,241,60,40,22,160,208,200,41,41,120, - 80,245,97,2,192,247,56,240,216,227,148,198,15,176,103,215,13,201,241,79, - 45,201,101,88,150,129,101,23,56,85,198,133,150,179,82,235,181,20,116,170, - 151,25,203,50,191,235,180,93,159,210,203,68,109,79,75,50,209,103,55,81, - 66,169,246,215,133,211,204,196,52,135,35,40,183,181,186,6,53,108,32,205, - 186,159,207,82,236,68,39,11,216,204,46,85,216,152,219,202,66,197,224,134, - 135,135,129,196,194,126,104,255,67,28,126,188,202,141,123,246,80,40,38,201, - 36,30,13,235,173,49,108,224,225,135,239,199,31,125,156,93,55,140,112,253, - 245,215,51,60,60,76,104,5,110,205,178,172,227,224,230,123,154,134,229,25, - 7,183,144,122,45,199,56,184,133,212,75,237,247,98,235,49,95,108,203,36, - 45,1,68,197,211,210,220,143,157,220,164,102,253,117,55,230,133,184,175,23, - 66,167,99,211,174,211,206,69,185,178,80,246,188,239,251,205,216,220,248,248, - 56,7,30,187,155,59,247,63,204,200,13,59,217,121,253,245,236,28,25,225, - 240,225,195,28,120,252,113,14,63,118,0,252,113,118,142,140,48,50,50,66, - 161,80,192,247,125,59,23,229,26,198,142,131,187,8,245,234,180,223,98,210, - 174,188,180,177,105,74,160,244,68,18,93,180,218,89,109,102,89,102,98,139, - 154,235,210,180,136,244,243,169,113,116,250,3,148,153,236,145,54,23,166,46, - 112,105,243,110,166,89,90,166,117,150,150,88,179,144,235,52,19,100,236,92, - 148,43,11,115,61,184,161,161,33,110,184,225,6,74,165,18,135,15,31,230, - 240,253,247,243,208,109,183,225,251,62,158,231,49,60,60,204,240,240,48,35, - 215,36,203,229,168,161,30,122,60,207,178,246,176,227,224,94,36,203,41,108, - 157,80,89,150,192,28,139,124,161,199,167,37,101,72,41,83,39,110,86,203, - 243,152,251,234,226,31,199,113,211,141,105,14,3,80,174,72,245,157,66,63, - 94,149,157,86,39,115,95,245,217,124,159,118,77,237,98,132,105,86,169,157, - 181,100,101,162,218,69,101,181,14,13,13,49,50,50,66,181,90,109,174,52, - 224,121,30,197,98,177,249,125,161,80,176,237,121,137,96,199,193,25,172,132, - 122,189,84,148,75,79,239,168,211,82,226,211,220,142,186,91,81,23,43,229, - 42,54,49,39,66,214,83,253,211,44,58,189,30,105,171,28,164,89,149,237, - 226,130,105,214,253,133,94,167,185,95,187,25,91,108,12,110,101,97,174,7, - 167,163,199,229,20,186,16,182,59,151,101,237,97,199,193,165,212,11,86,239, - 56,56,61,102,101,174,249,166,159,71,237,107,186,244,76,161,208,247,73,187, - 15,106,53,129,180,250,154,66,211,14,37,196,237,246,17,66,36,191,13,217, - 186,77,119,97,182,187,206,118,22,156,105,181,153,22,167,137,141,193,173,44, - 244,245,224,22,130,18,187,52,87,179,141,193,173,93,46,120,28,92,26,243, - 141,253,106,23,195,82,175,23,99,28,220,197,172,215,98,143,131,123,49,99, - 229,204,56,82,187,44,64,211,170,153,207,250,81,245,233,84,23,33,196,156, - 241,110,10,211,130,155,207,122,154,239,179,137,58,135,235,186,48,207,115,198, - 139,113,27,167,9,95,218,117,218,24,220,202,194,140,193,93,140,115,89,214, - 30,23,101,152,192,75,177,94,76,161,187,208,227,22,187,94,112,241,199,193, - 189,212,122,205,55,14,46,147,201,144,205,102,95,178,85,169,151,163,18,61, - 76,107,77,95,105,61,173,142,234,225,165,93,12,76,119,133,154,215,164,182, - 55,173,81,77,224,84,157,94,76,156,177,211,117,66,250,228,206,54,102,179, - 50,177,237,98,233,132,29,7,55,79,25,43,49,198,54,95,189,148,123,117, - 190,24,151,233,166,211,183,169,243,64,107,44,204,116,139,170,105,171,244,50, - 76,139,80,137,173,62,144,60,77,208,84,38,165,148,160,54,183,156,171,214, - 122,157,250,121,94,202,117,154,231,208,19,117,20,54,6,183,178,232,20,131, - 123,177,231,178,172,61,82,93,148,105,177,25,243,189,121,140,190,79,167,142, - 69,103,62,247,84,167,99,86,90,189,244,99,151,179,94,81,20,81,46,151, - 219,38,133,204,231,142,212,247,49,5,174,86,171,17,4,65,203,190,158,231, - 53,179,43,245,253,77,241,145,82,206,25,38,160,151,149,230,42,212,69,198, - 188,110,21,179,109,151,20,114,33,152,247,63,138,162,57,66,110,99,112,43, - 139,11,141,193,45,228,92,150,181,71,199,44,74,149,172,144,214,17,55,7, - 243,10,1,154,232,168,87,253,251,88,59,95,115,155,230,126,106,137,179,164, - 144,86,175,180,56,148,46,204,32,16,98,110,58,184,249,189,218,62,187,109, - 110,250,249,66,93,148,105,15,6,23,171,94,32,231,180,67,90,189,158,120, - 226,137,5,213,245,98,145,203,229,200,102,179,169,194,169,183,175,57,96,63, - 45,9,164,157,232,165,197,17,79,157,58,181,168,215,101,98,99,112,43,11, - 27,131,179,44,132,57,2,167,167,151,235,131,190,211,58,25,93,144,210,246, - 81,223,187,41,199,56,90,182,98,187,84,110,253,220,102,125,218,137,137,218, - 223,172,87,122,2,194,220,109,137,123,172,53,69,126,190,122,233,127,102,249, - 157,234,213,254,251,244,186,234,215,146,86,175,55,187,191,153,90,238,98,114, - 213,241,119,47,121,153,91,158,125,231,146,151,105,99,61,43,19,219,46,150, - 78,180,184,40,85,208,94,23,184,118,51,76,92,104,102,92,218,54,253,137, - 189,211,154,95,202,186,211,133,100,177,235,165,98,88,237,92,96,166,232,234, - 219,22,11,211,178,212,203,234,127,199,51,139,86,238,165,206,228,231,94,134, - 251,245,215,46,119,53,44,41,216,118,177,116,98,142,192,9,33,200,102,179, - 77,65,209,173,50,189,35,87,150,151,20,2,82,230,29,212,191,119,83,182, - 137,134,133,228,186,46,65,16,116,28,38,160,182,171,88,79,59,139,178,213, - 242,146,196,241,220,153,80,244,239,193,153,179,77,202,217,207,97,24,182,157, - 7,81,191,31,230,62,105,22,229,108,25,179,86,98,187,239,117,107,77,63, - 6,230,198,174,44,139,143,125,120,176,88,86,39,45,83,117,101,50,25,10, - 133,194,156,233,151,20,105,201,16,237,18,39,244,247,237,146,66,32,153,76, - 217,117,221,142,150,146,235,186,228,243,121,50,153,76,106,156,110,49,234,165, - 4,183,147,123,82,205,164,175,15,170,94,138,122,117,114,155,90,44,22,139, - 37,161,105,118,156,57,115,134,124,62,79,161,80,72,21,55,152,235,130,235, - 28,71,106,181,248,218,29,147,201,100,200,231,243,228,114,57,78,159,62,61, - 231,124,19,19,19,100,179,89,242,249,252,130,147,80,46,70,189,92,215,109, - 10,253,248,248,120,203,119,221,221,221,148,203,229,230,62,75,93,47,37,244, - 229,114,57,181,92,139,197,98,177,52,4,110,96,96,128,253,251,247,47,155, - 203,75,89,67,7,14,28,96,96,96,160,185,189,191,191,159,35,71,142,44, - 123,189,142,30,61,74,127,127,127,115,187,148,146,179,103,207,46,107,189,132, - 16,156,61,123,118,89,202,183,88,44,150,213,128,3,137,69,50,58,58,202, - 103,62,243,25,158,125,246,217,37,175,196,179,207,62,203,103,62,243,25,70, - 71,71,233,238,158,77,218,245,60,143,177,177,49,238,189,247,94,78,156,56, - 177,228,245,58,113,226,4,247,222,123,47,99,99,99,45,217,90,217,108,150, - 153,153,25,158,122,234,41,198,198,198,150,188,94,99,99,99,60,245,212,83, - 204,204,204,180,8,175,197,98,177,88,102,201,0,108,218,180,137,107,174,185, - 134,125,251,246,241,135,127,248,135,140,143,143,83,171,213,22,61,206,35,132, - 32,159,207,83,42,149,216,190,125,59,215,94,123,45,155,54,109,130,239,37, - 223,191,229,45,111,193,247,125,14,29,58,196,103,63,251,89,166,167,167,9, - 195,112,73,234,149,205,102,233,237,237,101,211,166,77,108,223,190,157,183,188, - 229,45,240,189,255,5,64,111,111,47,131,131,131,156,62,125,154,189,123,247, - 226,251,254,130,38,100,190,24,100,50,25,60,207,163,84,42,177,113,227,70, - 122,123,123,151,164,92,139,197,98,89,109,100,0,118,236,216,65,177,88,228, - 242,203,47,103,108,108,172,57,19,198,82,8,73,38,147,161,187,187,155,245, - 235,215,51,56,56,200,208,208,16,211,13,129,187,252,242,203,121,255,251,223, - 207,217,179,103,121,224,129,7,168,86,171,68,81,180,36,245,114,93,151,66, - 161,192,205,55,223,204,224,224,32,197,98,145,176,81,175,98,177,216,92,99, - 170,82,169,52,103,212,88,138,122,169,196,150,174,174,46,186,186,186,240,60, - 15,59,4,217,98,177,88,230,34,166,238,186,218,166,227,173,1,108,42,187, - 197,98,177,180,98,5,206,98,177,88,44,139,194,114,63,120,103,0,122,223, - 254,189,101,173,196,244,93,87,99,235,97,235,97,235,97,235,97,235,177,246, - 234,177,156,44,124,161,51,139,197,98,177,88,86,17,86,224,44,22,139,197, - 178,38,177,2,103,177,88,44,150,53,137,21,56,139,197,98,177,172,73,172, - 192,89,44,22,139,101,77,146,62,171,178,229,130,88,200,140,148,118,44,134, - 197,98,89,8,130,149,209,95,172,148,122,188,20,214,158,192,233,179,137,44, - 225,100,200,157,102,49,177,235,182,89,44,150,133,32,208,150,205,178,245,120, - 201,188,104,129,51,187,108,105,108,91,150,155,98,172,157,38,147,149,69,23, - 191,88,210,87,6,71,109,95,244,26,172,112,204,251,178,92,130,191,82,234, - 97,105,235,245,184,148,255,87,148,168,192,242,138,203,74,169,199,197,224,69, - 11,156,126,193,130,21,96,206,166,44,22,218,20,157,101,18,185,213,252,195, - 184,104,180,89,228,117,201,197,101,25,234,161,206,188,90,126,3,75,81,223, - 102,25,29,22,18,94,236,58,172,68,116,81,81,44,135,184,172,148,122,92, - 44,214,70,146,73,138,184,45,75,53,104,93,180,116,53,254,32,46,42,250, - 202,228,218,159,16,98,174,53,181,70,235,33,165,92,80,140,118,185,73,235, - 216,22,171,140,78,229,168,239,87,195,61,187,88,116,186,247,75,121,47,86, - 74,61,46,38,107,42,6,183,18,44,133,166,37,183,164,165,174,64,140,167, - 62,221,58,104,177,118,23,187,125,58,60,125,46,85,61,86,250,19,240,82, - 138,91,203,182,180,255,87,237,253,74,190,103,23,155,149,18,167,95,41,245, - 184,88,172,126,129,211,172,55,88,25,13,180,92,241,71,160,115,71,189,144, - 125,46,82,93,22,210,14,139,46,46,203,84,143,229,255,5,190,52,150,196, - 85,105,136,215,106,191,103,47,133,154,246,235,207,0,0,32,0,73,68,65, - 84,149,34,226,43,165,30,23,147,181,225,162,108,176,28,9,38,43,130,164, - 35,95,208,197,138,164,55,95,236,26,1,179,137,71,122,197,150,35,94,171, - 215,195,252,187,216,245,208,99,76,186,203,124,165,186,120,116,203,74,9,125, - 243,243,34,148,209,44,167,195,247,138,149,122,207,44,171,135,213,45,112,134, - 245,118,73,114,1,226,166,88,74,145,187,20,73,115,181,53,223,47,87,165, - 82,72,19,55,197,98,253,79,205,39,110,66,136,21,225,133,177,172,13,86, - 191,139,178,193,37,105,189,165,137,219,2,59,38,33,132,144,73,239,187,24, - 53,75,202,128,212,24,156,254,121,41,232,100,169,93,2,191,146,21,75,59, - 203,206,182,137,229,98,177,122,5,238,82,183,222,82,196,237,197,88,114,139, - 34,114,11,204,104,93,244,7,145,149,82,15,203,28,230,115,91,90,44,23, - 131,213,43,112,26,151,164,245,150,116,222,82,23,53,185,0,181,159,179,255, - 98,220,43,125,44,162,218,164,202,159,45,123,73,147,93,150,181,30,150,22, - 172,184,89,150,138,213,29,131,99,101,100,77,46,27,13,145,51,183,181,253, - 211,88,10,113,107,148,147,84,139,229,19,183,165,174,135,94,174,153,225,187, - 146,58,114,125,220,166,105,233,46,214,255,149,57,14,110,161,9,39,22,203, - 139,97,77,88,112,138,75,242,105,60,197,146,155,143,37,21,183,52,55,242, - 114,136,219,18,213,163,153,177,169,9,7,172,60,113,83,232,99,1,77,145, - 187,88,245,109,55,149,221,66,18,78,86,226,61,179,172,30,214,140,192,173, - 36,113,91,234,52,248,84,75,174,13,75,45,110,170,126,75,198,10,168,199, - 114,36,210,92,76,150,122,106,168,102,185,75,108,185,45,164,125,46,37,129, - 93,139,247,99,77,8,220,138,19,183,229,152,133,97,33,215,191,68,3,170, - 151,173,61,86,74,61,12,86,186,37,210,206,194,90,236,50,230,91,129,99, - 41,238,153,93,5,164,149,181,118,63,86,125,12,110,165,116,98,208,234,98, - 89,105,99,158,22,141,149,34,42,43,165,30,6,43,93,220,20,122,60,110, - 177,203,232,84,142,250,126,73,196,141,246,215,188,90,218,237,98,178,22,239, - 199,234,93,46,103,177,167,121,186,64,210,130,227,151,196,124,122,90,42,254, - 178,182,199,74,169,135,198,106,107,247,165,18,21,104,223,145,46,245,61,75, - 179,44,215,252,255,108,7,214,218,253,184,40,203,229,116,218,182,168,172,128, - 78,12,58,103,126,93,74,34,183,236,237,177,82,234,97,153,151,149,244,255, - 160,119,234,107,254,127,117,1,172,165,251,177,38,98,112,43,129,213,232,159, - 190,168,172,148,235,95,41,245,176,172,42,154,157,250,114,87,100,133,176,86, - 238,135,21,184,139,192,106,255,17,88,44,22,251,127,108,178,22,238,199,170, - 79,50,177,88,44,22,139,37,13,43,112,22,139,197,98,89,147,88,129,179, - 88,44,22,203,154,196,10,156,197,98,177,88,214,36,86,224,44,22,139,197, - 178,38,17,83,119,93,189,22,146,101,44,22,139,197,178,194,232,127,199,51, - 203,90,190,29,38,96,177,88,22,196,114,119,86,22,203,133,146,1,232,253, - 209,131,203,93,15,139,101,77,50,253,207,59,128,213,255,63,166,174,195,98, - 89,77,216,24,156,197,98,177,88,214,36,86,224,44,22,139,197,178,38,177, - 2,103,177,88,44,150,53,137,21,56,139,197,98,177,172,73,172,192,89,44, - 22,139,101,77,98,135,9,88,44,43,30,137,148,17,113,12,163,163,53,238, - 127,96,138,111,255,235,20,7,15,78,112,106,52,96,106,202,199,113,36,235, - 7,92,54,109,202,112,221,181,69,110,186,169,196,77,187,55,208,219,155,109, - 172,146,109,159,101,45,151,30,86,224,44,150,21,75,50,7,67,181,26,241, - 185,187,206,241,215,127,53,198,83,79,142,83,171,157,34,8,142,18,203,147, - 196,241,4,245,40,68,72,135,227,39,250,120,226,137,62,238,185,187,4,244, - 83,44,101,121,203,91,54,243,129,15,92,195,107,95,187,1,215,117,26,203, - 229,217,53,243,44,151,6,86,224,44,150,21,72,28,215,137,99,201,61,247, - 76,242,255,125,236,36,103,206,156,163,92,126,144,241,241,135,232,233,173,240, - 234,87,111,103,251,246,205,244,23,175,164,80,40,16,213,99,42,149,26,103, - 207,78,114,240,224,65,158,125,246,60,227,227,27,248,187,191,219,204,237,183, - 63,205,91,223,122,25,191,247,123,187,185,250,234,18,153,76,214,46,208,107, - 185,36,176,2,103,177,172,32,164,140,145,82,50,51,19,243,155,31,57,193, - 222,189,103,168,248,95,228,228,232,23,217,189,251,85,188,229,135,223,195,43, - 174,221,74,46,151,33,151,115,201,101,115,184,174,139,227,38,255,202,50,150, - 212,163,144,241,113,159,7,30,120,142,47,124,225,113,246,239,63,198,23,62, - 63,195,131,15,28,230,99,127,120,19,239,123,239,171,240,188,44,142,99,255, - 253,45,107,27,251,11,183,88,86,16,82,74,198,199,235,188,239,189,71,41, - 87,142,115,228,232,71,185,246,229,67,252,246,127,250,29,54,111,45,145,207, - 103,233,233,238,161,167,167,135,174,174,46,242,249,60,174,235,206,198,216,164, - 36,138,35,130,32,224,170,171,182,240,227,63,254,26,238,253,202,97,62,254, - 241,175,242,194,201,94,126,233,67,95,225,217,103,206,240,209,143,190,145,222, - 222,94,28,199,198,230,44,107,23,43,112,22,203,10,65,74,73,185,28,241, - 83,239,57,74,181,246,56,223,254,246,199,248,192,7,254,45,111,123,219,110, - 178,185,44,197,98,63,235,74,37,122,122,122,241,60,143,76,38,211,72,32, - 49,221,141,146,56,150,68,81,196,192,64,157,247,190,119,144,155,111,190,146, - 223,250,173,123,248,202,189,231,248,159,31,255,22,142,136,248,207,255,249,7, - 233,238,233,198,117,221,101,185,94,139,101,177,177,143,111,22,203,10,64,74, - 73,20,133,252,250,175,159,96,122,230,121,30,125,228,247,248,237,223,250,121, - 110,125,219,77,116,247,116,179,249,178,203,216,182,117,27,27,54,108,164,175, - 175,143,92,46,135,227,56,109,98,105,2,199,113,200,102,179,116,119,23,88, - 183,126,29,59,175,217,202,255,254,63,63,198,79,252,196,14,164,244,248,196, - 39,190,193,63,252,227,99,84,42,21,164,180,11,138,88,214,38,86,224,44, - 150,21,129,228,171,247,77,179,119,239,57,246,237,251,111,252,252,207,253,36, - 175,125,237,14,250,251,250,216,114,217,101,12,13,13,211,211,211,67,38,115, - 225,78,23,215,205,224,121,5,134,134,54,240,71,127,116,43,111,120,195,38, - 234,245,33,62,250,209,59,56,114,232,52,190,239,91,145,179,172,73,172,139, - 178,3,113,28,227,56,14,81,84,110,110,19,194,83,239,230,236,239,56,14, - 113,28,1,32,165,223,216,87,52,182,199,141,189,36,65,16,81,13,198,25, - 159,202,49,49,150,229,248,177,152,241,115,103,56,116,220,99,122,34,199,225, - 231,79,114,236,104,64,121,166,192,248,184,79,165,114,46,181,126,221,125,112, - 217,240,122,182,110,203,209,211,219,199,224,96,153,45,219,54,83,220,224,178, - 190,23,182,108,117,40,174,15,41,22,187,232,202,8,114,185,76,51,230,18, - 134,97,211,53,165,95,163,186,62,199,153,117,91,197,113,132,148,62,0,174, - 219,221,114,111,44,23,135,122,93,242,135,31,59,73,181,242,85,118,238,236, - 231,173,183,222,72,79,79,129,77,195,195,172,31,24,32,151,203,189,164,243, - 11,33,200,102,51,12,14,246,241,199,31,191,149,155,223,240,143,156,62,237, - 242,151,159,124,144,143,124,228,22,6,55,108,120,81,226,105,177,172,100,236, - 47,186,35,201,83,173,222,169,235,223,169,78,95,17,199,158,38,12,221,132, - 97,72,20,73,166,103,98,142,191,80,231,248,177,152,231,159,143,120,236,209, - 113,246,127,247,28,71,158,61,198,164,47,64,250,32,60,164,236,167,43,31, - 82,169,101,1,16,226,76,227,92,181,198,107,94,43,173,70,245,28,156,59, - 87,225,201,125,128,244,17,162,10,252,43,82,250,120,249,28,126,45,96,253, - 250,141,236,218,117,21,35,87,108,226,149,215,78,81,26,216,192,150,173,14, - 215,94,147,167,50,57,67,161,207,37,138,102,207,218,42,108,177,182,173,91, - 219,174,29,96,121,201,72,25,243,240,195,19,60,255,252,56,99,99,255,204, - 111,124,228,215,240,60,151,129,193,65,74,235,214,181,21,55,41,37,50,174, - 33,227,0,156,44,142,147,69,8,213,126,2,245,251,213,31,198,92,55,195, - 203,175,25,224,103,127,238,251,248,31,255,61,226,142,59,246,242,254,247,223, - 72,79,111,15,61,61,189,118,248,128,101,77,97,5,174,3,170,179,79,58, - 122,105,124,22,184,110,119,243,59,181,127,28,199,140,157,15,56,254,66,157, - 39,158,142,217,247,168,207,119,158,120,156,131,251,166,24,59,95,64,136,245, - 90,9,151,33,4,196,178,12,18,132,240,169,6,32,68,37,165,54,249,185, - 155,26,194,8,36,2,73,127,227,61,248,1,20,242,46,99,99,231,249,226, - 23,31,69,202,2,48,14,192,229,195,91,184,246,251,182,177,231,77,208,215, - 219,195,117,55,12,113,205,213,57,114,185,12,97,24,226,56,65,179,8,33, - 10,169,247,38,17,247,238,212,239,44,11,71,13,11,184,251,238,113,170,213, - 253,140,140,12,176,253,138,65,250,250,250,89,183,110,61,249,124,62,101,255, - 58,82,130,148,53,168,157,68,212,70,193,237,33,242,54,35,50,235,16,2, - 100,28,32,145,56,78,30,33,92,77,248,146,223,233,251,222,247,50,62,254, - 39,223,227,212,233,25,158,218,119,152,77,151,173,167,171,203,38,156,88,214, - 22,86,224,58,16,134,33,217,108,182,233,122,108,117,227,9,124,63,192,117, - 147,39,222,51,103,206,240,232,35,231,120,254,200,86,190,241,192,81,30,218, - 27,50,57,213,77,36,39,137,99,23,33,10,72,233,33,165,58,71,98,253, - 73,233,181,124,78,172,181,185,98,86,200,185,84,3,221,114,202,183,122,73, - 165,15,180,90,148,213,26,8,81,109,136,27,64,9,128,35,163,51,28,249, - 194,211,124,225,11,201,214,87,189,162,196,171,94,25,242,186,61,47,103,203, - 149,3,92,183,211,99,253,186,28,81,20,225,186,18,223,15,136,162,144,66, - 97,214,61,219,78,248,44,47,6,201,35,143,156,167,86,123,142,87,190,242, - 229,100,179,89,250,250,250,41,120,133,22,139,42,142,67,226,240,28,132,231, - 1,129,144,117,226,242,19,212,103,158,70,228,7,137,235,175,135,174,12,89, - 170,80,59,153,28,147,31,66,228,134,90,132,75,8,193,142,29,235,216,188, - 101,61,71,143,108,100,223,83,207,177,123,247,14,138,197,162,21,56,203,154, - 194,10,92,7,28,39,32,142,103,227,76,202,98,83,130,55,61,19,243,212, - 1,159,39,191,35,249,198,3,103,249,226,151,170,192,65,226,184,140,16,147, - 72,217,143,227,36,86,142,148,30,66,248,154,160,173,167,208,119,22,89,13, - 1,232,234,218,136,200,156,67,214,183,38,223,103,206,81,9,67,173,54,49, - 5,167,218,90,193,184,15,128,74,45,139,16,173,238,75,133,202,29,72,220, - 151,104,219,125,16,195,0,60,241,221,113,158,248,238,56,183,221,126,144,225, - 141,235,184,233,117,111,98,207,45,3,188,234,229,14,91,46,203,176,126,93, - 14,200,32,101,149,48,204,226,121,47,45,30,100,209,73,4,236,240,225,50, - 65,120,150,173,91,175,195,203,102,233,234,46,224,102,244,24,167,68,70,51, - 80,126,134,184,242,88,178,201,41,33,171,143,83,63,249,36,108,220,76,45, - 184,12,234,189,244,57,39,136,43,143,32,101,4,133,31,32,238,237,38,159, - 119,113,221,76,226,214,148,49,66,8,174,190,122,29,71,143,116,241,194,11, - 167,241,171,21,234,97,29,188,185,53,180,88,86,43,86,224,58,32,68,161, - 37,1,35,142,11,140,157,15,120,232,225,128,231,159,143,248,231,127,158,225, - 212,241,9,158,61,116,26,199,233,38,142,203,218,209,121,28,113,132,66,223, - 6,10,13,33,65,185,16,73,4,108,125,209,99,108,34,66,198,51,72,249, - 60,50,2,196,243,76,207,148,113,24,167,22,100,153,237,113,116,235,44,217, - 150,205,37,205,151,203,65,16,100,40,228,123,169,5,73,167,40,101,129,66, - 33,67,181,161,107,77,43,174,233,210,164,97,245,41,74,212,67,143,227,39, - 224,179,159,253,28,255,244,79,117,134,55,174,227,237,239,124,45,35,35,17, - 187,223,112,37,151,95,145,165,216,149,105,38,157,8,225,181,196,236,44,47, - 6,73,16,196,212,106,46,174,43,201,230,186,40,251,89,14,61,31,82,42, - 198,56,142,139,148,49,113,84,65,86,143,16,151,31,167,126,238,1,132,151, - 39,114,182,224,196,71,112,79,142,17,15,68,212,107,251,113,99,8,221,83, - 136,218,83,48,83,195,47,14,18,139,17,132,83,32,47,28,64,242,228,19, - 231,184,242,170,34,93,5,143,76,166,155,170,95,35,8,35,234,81,29,41, - 165,141,195,89,214,12,86,224,230,33,142,99,226,56,199,241,211,51,60,248, - 141,136,125,143,28,229,235,15,84,121,226,169,169,57,162,230,56,221,172,235, - 79,110,105,169,180,17,216,6,128,235,142,82,245,143,54,247,155,41,215,152, - 154,44,115,246,108,146,29,41,241,17,248,64,149,68,200,90,93,141,237,8, - 2,181,159,7,120,84,107,30,80,64,54,4,176,90,29,106,156,223,163,144, - 239,5,192,175,37,113,56,33,188,166,139,83,202,66,139,133,39,200,19,6, - 121,142,29,175,241,63,63,254,117,36,53,174,127,197,73,94,255,166,45,188, - 113,207,54,118,221,152,99,253,58,175,113,127,34,162,40,110,92,103,171,216, - 217,44,203,206,196,113,157,131,7,125,126,225,3,71,233,42,244,49,53,121, - 30,41,225,233,239,214,248,196,39,238,226,246,219,223,201,85,87,21,201,184, - 1,84,159,39,158,254,54,113,240,48,78,245,24,81,152,33,204,215,200,184, - 231,201,159,155,66,186,53,178,242,17,168,77,33,51,21,68,101,148,48,16, - 212,170,227,132,217,50,185,66,68,54,35,249,234,125,231,249,141,95,187,155, - 59,239,250,81,162,168,206,246,43,94,197,61,247,60,138,151,123,138,63,252, - 111,155,232,235,139,91,226,117,22,203,106,198,10,92,7,234,225,24,227,19, - 17,247,220,61,195,125,95,115,184,247,158,49,206,79,214,1,154,174,71,245, - 186,174,63,67,169,228,209,221,163,132,162,202,228,217,81,166,131,128,242,204, - 56,126,237,56,18,31,24,5,38,72,68,108,18,200,55,116,166,70,34,112, - 105,152,89,148,234,115,177,241,58,169,125,231,53,206,231,33,25,69,89,123, - 213,90,1,40,34,40,34,241,144,178,134,32,143,151,207,1,101,252,90,119, - 83,228,132,240,144,210,71,82,163,171,176,25,223,159,230,201,167,79,242,244, - 51,251,184,235,206,117,188,235,93,3,188,238,230,55,241,195,111,78,206,173, - 226,144,81,35,29,211,198,113,22,130,228,185,231,106,188,237,214,195,72,25, - 227,184,251,169,84,95,64,226,48,122,42,228,216,209,35,140,157,123,129,193, - 129,144,117,61,101,152,126,140,120,226,203,136,158,131,224,140,227,156,239,66, - 92,150,197,113,170,200,153,105,178,185,41,68,20,82,139,38,137,226,28,98, - 234,28,110,189,155,186,87,38,10,171,68,113,128,148,30,7,246,79,114,232, - 200,1,198,198,118,19,4,1,174,187,158,245,235,174,228,159,238,124,146,137, - 201,41,254,230,111,223,205,192,128,141,197,89,214,6,151,140,192,233,169,237, - 42,189,95,136,2,81,20,145,205,102,137,162,50,81,189,66,38,187,30,199, - 113,8,195,144,63,253,139,12,143,61,58,205,87,191,250,44,99,99,69,237, - 92,229,166,181,182,121,139,100,235,182,36,38,117,252,240,113,206,143,191,192, - 76,185,70,165,156,67,198,247,227,135,117,102,173,178,73,18,17,171,209,222, - 74,243,72,115,71,38,212,152,75,21,40,104,223,169,215,73,109,159,60,202, - 202,147,20,81,86,158,4,252,90,17,73,17,71,56,72,74,20,188,58,190, - 63,13,128,35,250,241,253,233,166,216,133,65,55,71,143,79,241,23,127,33, - 249,155,191,253,10,63,249,158,29,188,113,207,54,94,119,115,158,254,66,34, - 252,97,152,197,117,19,177,75,146,84,28,234,225,121,0,114,249,193,198,253, - 139,145,178,218,28,126,113,169,33,101,76,185,28,242,222,247,29,66,202,152, - 255,240,107,189,252,251,127,255,45,164,172,17,71,117,178,217,8,41,37,213, - 233,9,106,19,21,164,124,1,89,123,4,102,190,71,102,224,52,178,30,32, - 198,98,196,214,46,156,172,143,235,199,224,250,184,50,194,171,67,61,215,139, - 83,13,168,101,51,200,120,10,194,83,80,235,5,207,165,30,73,100,28,51, - 53,57,78,88,175,115,240,224,36,155,134,122,64,118,115,223,215,30,229,15, - 126,191,200,71,127,231,22,250,251,173,200,89,86,63,107,90,224,162,168,220, - 140,19,169,20,254,196,109,214,221,24,232,44,27,137,36,46,97,152,37,151, - 75,82,248,255,234,211,207,53,45,182,74,229,28,149,90,22,221,219,54,80, - 234,103,215,238,108,243,243,51,7,207,112,244,216,17,252,218,89,36,71,128, - 195,180,10,204,172,168,73,67,216,196,156,168,190,254,125,191,246,62,45,107, - 113,130,68,188,212,43,180,203,194,156,61,247,4,80,67,80,5,46,111,184, - 51,75,196,50,177,238,42,85,175,105,217,249,181,217,186,8,237,156,126,237, - 44,145,28,231,127,126,252,25,238,186,115,3,111,127,231,107,249,169,247,143, - 112,245,149,130,108,102,146,202,100,158,174,254,158,230,0,247,92,126,144,40, - 42,83,46,151,233,238,238,110,108,191,148,179,48,5,255,231,255,140,241,228, - 227,21,126,243,63,93,198,63,254,227,99,4,193,24,32,147,245,218,164,0, - 41,136,162,42,78,112,20,57,245,48,34,251,36,34,58,135,16,101,168,130, - 152,174,146,201,86,16,4,16,6,8,7,68,181,142,19,79,146,241,66,156, - 90,29,215,21,100,51,71,241,162,175,227,204,28,165,238,188,134,56,204,35, - 129,56,78,178,143,226,88,48,61,227,130,232,70,202,60,127,249,201,47,114, - 235,173,215,112,227,174,171,233,233,233,182,241,56,203,170,102,109,11,92,189, - 66,178,138,136,114,39,58,248,126,64,46,151,193,117,93,234,225,24,185,252, - 96,210,9,231,50,124,225,75,51,220,254,15,231,120,228,91,85,158,61,116, - 154,172,187,137,72,214,113,28,112,69,63,47,127,249,12,215,188,98,128,153, - 233,41,142,29,13,24,31,127,146,211,167,159,199,15,78,144,8,135,250,155, - 21,51,37,96,234,189,250,236,229,123,128,18,125,93,27,25,24,232,38,239, - 13,48,178,109,4,128,77,91,178,228,242,73,98,74,95,55,244,150,146,102, - 154,30,175,211,91,202,48,61,158,88,75,83,90,78,203,248,169,163,76,206, - 8,142,30,133,152,195,212,252,115,236,127,86,185,66,125,90,93,160,69,18, - 241,84,130,119,138,89,235,174,132,164,72,181,6,185,220,0,65,144,105,138, - 91,34,122,201,168,191,32,0,65,98,209,125,252,227,247,114,215,157,125,252, - 202,191,127,13,187,223,112,37,215,92,157,163,30,142,81,174,197,244,20,214, - 17,4,117,114,185,2,133,2,248,126,50,198,46,151,91,211,63,189,142,212, - 130,136,63,251,179,147,108,218,228,242,194,11,231,120,232,155,207,1,201,120, - 74,41,5,18,137,16,18,151,26,110,116,12,57,117,0,119,211,113,28,57, - 147,220,252,25,9,213,152,108,190,138,156,169,35,234,117,68,93,226,76,73, - 226,90,128,187,61,64,72,23,87,184,120,249,23,112,252,211,100,202,251,137, - 57,79,189,242,26,64,18,75,217,112,101,75,100,28,33,40,32,233,198,247, - 79,241,233,79,223,203,142,157,131,228,243,185,151,60,131,138,197,178,156,172, - 249,94,70,77,61,229,251,1,158,151,195,243,114,132,141,244,251,76,118,61, - 190,31,112,242,92,153,79,252,143,144,175,124,233,9,78,157,172,51,85,45, - 145,119,119,80,139,14,226,56,221,92,247,10,151,55,236,25,224,236,25,143, - 3,79,29,228,137,239,62,78,62,123,2,63,124,150,86,241,152,108,177,208, - 132,152,6,166,145,178,23,129,199,134,210,247,113,217,230,109,140,108,27,97, - 203,21,123,120,205,117,207,208,59,232,210,85,232,69,202,2,245,120,214,234, - 203,56,253,212,227,73,178,110,78,27,199,214,138,190,127,222,187,134,154,159, - 184,97,195,32,73,110,137,235,35,28,58,116,140,195,207,31,231,225,189,33, - 39,78,30,97,114,106,20,63,156,33,17,54,143,86,23,232,169,198,245,36, - 137,40,181,64,9,116,18,183,243,107,141,251,217,156,182,112,146,92,46,67, - 16,100,56,122,124,138,95,249,229,189,220,112,237,215,249,169,159,121,3,239, - 249,233,157,244,119,215,137,227,68,204,18,151,165,108,14,49,104,157,21,230, - 210,226,161,111,206,112,244,104,133,221,187,123,185,239,171,135,26,238,115,73, - 50,190,208,109,206,65,34,162,50,110,124,22,17,156,195,41,148,161,30,129, - 144,48,45,112,102,34,226,188,143,51,93,135,16,100,8,114,84,194,249,8, - 247,117,146,72,196,184,148,241,188,81,228,120,132,219,229,80,11,202,200,218, - 0,208,112,19,3,32,144,8,36,14,208,3,20,184,239,190,111,115,230,204, - 45,244,247,247,91,129,179,172,106,214,180,192,101,178,235,154,174,201,164,147, - 77,76,30,199,73,58,234,40,138,248,202,87,125,126,247,183,159,229,233,167, - 123,128,205,132,209,73,160,76,232,28,103,247,155,214,241,234,107,55,3,240, - 141,251,30,109,8,219,62,188,252,4,213,218,9,210,44,181,89,151,163,199, - 134,226,110,46,219,188,141,155,118,191,140,145,43,182,112,237,117,235,241,188, - 152,90,173,134,147,29,37,10,18,43,77,141,85,203,56,186,75,50,161,80, - 144,212,234,51,0,196,161,75,143,156,96,70,20,9,163,128,172,59,219,249, - 196,33,100,93,23,41,11,100,188,100,220,91,214,169,112,221,43,187,184,238, - 149,87,243,142,31,139,64,252,0,47,60,151,225,137,125,199,57,242,220,49, - 246,126,243,65,166,43,85,170,181,58,173,66,151,88,125,73,102,167,71,204, - 112,83,232,226,70,114,10,128,16,27,9,131,211,192,57,114,185,1,194,192, - 231,59,251,38,56,242,95,246,242,47,247,31,225,35,191,251,131,108,185,44, - 162,183,39,153,41,63,151,203,225,251,1,245,170,79,161,175,117,250,175,75, - 137,175,126,245,52,66,212,241,43,101,94,120,225,44,178,33,110,32,112,68, - 216,152,248,88,144,149,163,100,220,147,56,149,10,56,33,50,136,19,171,235, - 52,48,21,227,120,1,241,116,140,168,72,8,64,124,15,196,76,8,174,11, - 149,24,23,31,209,23,35,158,174,35,174,128,204,179,199,145,188,0,82,34, - 163,41,4,106,74,56,7,129,104,184,171,179,156,31,63,206,119,247,29,101, - 120,211,0,61,61,61,54,22,103,89,181,172,105,129,115,28,183,101,82,97, - 128,56,78,86,64,30,59,31,240,7,191,255,44,159,253,236,9,38,206,39, - 22,79,36,39,53,139,237,114,122,139,1,15,62,248,56,223,126,232,9,130, - 224,17,224,20,126,120,26,240,65,156,109,90,102,121,79,80,243,19,145,27, - 44,110,229,149,47,187,129,29,175,222,201,45,63,58,210,20,45,33,170,20, - 10,21,170,85,65,24,5,228,179,110,115,150,17,61,69,95,89,107,66,84, - 233,235,73,58,32,55,234,197,201,70,100,229,105,106,238,38,10,249,50,249, - 184,23,199,241,27,215,228,17,198,21,242,25,135,122,77,16,198,21,164,44, - 224,229,143,83,153,73,134,7,100,201,209,221,35,184,242,154,136,203,174,232, - 166,230,191,140,15,252,210,107,216,247,212,24,223,184,127,47,199,142,215,56, - 112,240,84,195,186,83,150,221,68,82,23,70,73,92,151,9,217,134,235,50, - 155,45,19,6,253,8,250,9,130,26,130,58,2,143,243,231,39,185,227,243, - 53,30,125,252,44,31,253,157,155,185,245,223,108,38,147,155,33,168,66,127, - 207,32,174,91,192,247,3,186,47,77,125,99,223,190,105,28,33,25,27,171, - 16,134,97,203,172,145,57,167,78,61,42,131,128,190,252,183,201,247,62,131, - 56,49,9,78,140,152,22,200,41,96,84,194,180,68,198,33,226,28,48,45, - 161,34,144,143,131,112,33,154,136,113,158,23,200,77,32,122,107,112,28,184, - 94,224,158,156,196,205,157,5,81,34,43,207,33,228,6,64,141,22,17,8, - 50,72,114,72,41,57,116,232,5,42,229,107,168,215,35,43,112,150,85,203, - 154,22,184,56,142,155,255,156,73,70,95,129,40,170,115,247,151,147,88,219, - 29,255,80,162,22,157,70,136,67,8,177,158,117,253,25,126,232,173,235,185, - 225,251,74,60,246,232,56,127,241,231,183,19,4,251,128,39,128,26,94,62, - 67,44,38,169,249,73,252,34,239,9,2,31,28,121,37,55,92,251,253,220, - 252,166,55,240,170,107,183,112,249,85,62,142,227,83,173,10,244,212,127,37, - 110,0,53,63,162,167,171,139,172,63,202,12,69,10,5,217,172,179,18,46, - 199,237,165,30,134,56,217,136,76,54,139,204,110,166,224,244,32,156,196,114, - 171,215,179,141,253,32,67,63,153,76,134,92,30,32,249,94,198,47,103,125, - 9,132,227,227,87,171,84,107,137,75,51,235,116,209,187,190,128,95,173,242, - 170,215,12,178,251,117,239,229,228,11,117,14,29,58,198,55,31,60,196,55, - 31,62,194,233,177,103,241,178,3,154,59,83,185,46,189,166,235,50,12,60, - 36,25,28,209,143,192,67,74,149,136,226,147,203,101,56,118,252,12,31,252, - 133,79,242,193,125,63,192,7,127,245,141,20,139,93,140,143,143,211,221,221, - 75,46,55,235,42,86,100,179,89,46,5,78,28,175,32,101,141,169,201,106, - 50,179,136,246,157,43,124,144,227,32,35,10,165,125,228,142,159,134,19,62, - 98,50,70,158,129,102,14,147,43,112,78,74,226,231,4,156,7,142,129,120, - 33,113,251,138,167,28,120,36,66,108,17,240,111,4,242,59,49,114,135,139, - 187,175,74,54,87,71,72,73,86,158,38,150,235,1,189,124,209,248,11,152, - 154,158,164,86,171,17,213,235,144,183,110,74,203,234,100,77,11,156,154,32, - 89,9,221,68,37,228,243,183,31,231,19,127,252,12,79,238,47,225,138,126, - 242,238,14,98,166,120,235,45,1,175,191,121,27,199,143,158,224,239,62,253, - 5,190,179,239,187,36,61,9,36,25,140,147,248,193,89,0,4,131,120,185, - 1,250,10,59,216,253,131,111,228,166,55,110,111,186,31,67,89,199,247,29, - 160,139,156,43,8,162,214,117,182,186,178,93,205,247,142,83,38,234,234,39, - 31,231,81,33,169,76,54,75,38,147,88,113,30,117,200,100,9,51,5,178, - 245,42,97,166,0,68,208,112,45,185,153,44,185,198,116,78,65,189,53,166, - 85,15,92,10,206,76,227,152,44,249,188,71,119,174,143,168,158,136,74,189, - 94,39,159,47,65,109,156,48,28,101,112,3,244,173,31,228,149,63,112,37, - 111,127,166,204,19,251,142,243,192,215,190,222,176,234,96,54,33,197,107,186, - 46,97,39,130,9,164,76,182,75,60,68,35,243,51,8,206,33,240,168,5, - 189,252,241,159,60,198,145,231,142,241,11,191,246,62,174,191,190,135,106,48, - 78,206,237,185,100,227,59,51,229,128,88,214,241,67,9,45,242,38,113,137, - 32,170,32,164,192,173,149,17,247,84,193,21,68,207,131,115,0,8,129,253, - 18,46,3,121,212,129,199,128,115,2,190,235,192,120,140,172,129,252,39,129, - 56,6,156,144,112,39,240,44,112,127,140,220,15,241,182,122,35,139,210,71, - 198,33,179,162,38,153,237,14,34,234,117,159,40,142,136,236,202,17,150,85, - 204,170,22,184,160,118,150,92,126,176,185,44,77,54,27,18,213,43,132,245, - 46,10,133,2,32,136,162,50,97,152,229,228,185,50,127,245,127,203,252,175, - 143,143,51,57,117,57,48,73,24,157,228,170,237,17,183,252,27,24,25,129, - 127,185,255,235,124,233,203,223,194,15,246,2,30,136,189,205,178,164,236,5, - 217,75,33,63,192,206,151,253,48,175,186,238,102,222,254,99,146,174,66,111, - 99,198,247,36,182,6,53,84,102,117,24,131,16,208,35,39,152,102,24,207, - 75,68,40,211,176,84,50,153,82,203,245,20,60,51,189,63,249,156,3,200, - 116,211,157,164,132,226,102,231,54,155,30,65,139,194,58,110,79,134,40,116, - 17,81,157,172,155,33,204,212,1,7,50,170,140,60,65,61,66,56,5,212, - 16,132,28,80,175,79,113,249,85,33,151,95,53,200,45,239,250,121,158,252, - 215,231,248,198,253,123,249,214,191,6,156,30,59,203,108,86,230,169,70,215, - 156,12,32,207,229,122,8,131,124,99,144,56,13,161,59,141,100,2,129,199, - 157,95,60,193,119,158,188,189,233,178,36,55,137,63,149,193,243,146,154,119, - 119,119,19,199,17,245,240,60,110,166,139,168,94,105,142,155,91,107,116,21, - 36,82,134,201,220,143,6,82,6,56,162,78,44,5,242,68,140,120,14,196, - 76,140,236,118,224,193,8,121,216,65,204,72,152,2,249,36,136,131,49,242, - 188,128,175,75,156,73,9,17,136,47,68,136,24,136,36,241,159,199,136,73, - 224,180,68,246,9,100,144,1,34,132,97,57,54,74,7,234,64,173,49,148, - 195,46,130,106,89,221,172,106,129,83,226,150,205,102,113,221,24,112,113,51, - 144,203,171,245,219,162,166,184,253,234,47,30,229,158,187,115,64,55,97,116, - 146,172,187,137,31,127,247,70,110,248,190,18,199,143,158,224,143,255,251,35, - 28,61,254,117,224,123,192,68,163,99,134,92,190,143,192,207,83,200,247,176, - 125,235,171,217,243,131,187,120,211,155,111,98,211,101,25,166,166,78,225,100, - 147,39,220,68,220,230,146,207,231,9,217,72,79,214,5,18,119,169,90,88, - 82,183,192,0,178,110,102,142,120,69,113,23,174,83,193,243,230,102,82,198, - 181,25,170,81,47,221,93,178,249,217,201,247,160,229,185,52,241,253,185,179, - 164,100,195,58,161,86,190,178,2,51,153,12,245,122,29,194,49,110,188,105, - 3,175,252,129,247,243,174,103,202,220,245,185,111,242,205,135,85,38,102,145, - 217,97,17,227,77,183,165,148,67,8,148,208,169,97,17,137,203,245,200,241, - 167,248,200,175,239,231,187,251,94,207,187,223,247,102,94,182,53,198,247,125, - 186,187,123,41,151,203,228,114,57,114,249,65,102,198,167,40,244,117,153,213, - 93,51,12,111,202,241,244,254,228,161,108,214,130,74,112,168,19,19,32,144, - 240,61,137,56,29,195,20,112,59,137,135,120,70,34,115,14,98,200,65,236, - 143,97,84,32,106,18,241,152,68,52,146,83,100,64,162,83,89,129,115,38, - 134,80,64,89,66,228,194,100,4,66,181,121,163,124,25,55,62,5,64,25, - 8,232,42,20,16,92,186,153,174,150,181,193,170,22,56,72,226,54,113,28, - 105,107,181,21,180,53,218,4,223,124,164,194,39,254,40,89,190,198,33,73, - 145,118,156,73,62,248,225,1,182,108,205,242,240,131,186,213,54,129,151,143, - 168,214,38,16,34,73,239,15,252,126,174,185,234,7,90,132,109,198,159,102, - 170,49,8,45,14,93,106,198,12,35,106,13,175,89,75,173,245,54,43,75, - 77,89,47,201,251,66,67,160,102,133,44,147,81,130,216,106,233,105,7,209, - 101,124,214,169,215,67,50,25,85,7,215,248,46,194,167,218,34,168,30,137, - 245,23,70,117,18,11,47,38,170,135,244,101,42,244,93,39,248,192,150,215, - 240,250,31,124,3,255,114,255,17,190,116,207,87,240,195,137,230,177,66,155, - 22,44,155,27,32,12,146,44,203,88,78,50,155,172,226,113,106,204,231,182, - 191,253,6,227,103,29,254,227,127,126,13,165,210,58,162,40,196,247,125,92, - 55,75,20,5,116,245,247,80,173,86,215,108,18,202,181,215,246,114,223,87, - 15,19,213,27,235,180,73,137,26,149,230,136,58,14,126,98,250,31,0,17, - 64,188,206,69,156,138,97,163,64,68,18,94,45,136,175,140,17,223,106,72, - 99,94,32,51,18,89,114,160,38,144,35,32,142,199,200,156,64,110,204,32, - 206,68,200,46,23,42,32,106,49,66,182,58,70,17,52,50,55,147,161,46, - 66,84,25,222,52,140,211,76,46,177,150,156,101,117,178,170,5,78,205,76, - 18,4,17,174,27,227,186,78,51,230,6,130,47,124,105,134,223,253,237,103, - 56,113,92,52,214,102,59,206,21,151,247,240,243,31,218,193,186,254,49,254, - 236,79,190,196,211,7,15,226,135,255,66,206,59,67,205,151,248,193,116,99, - 54,137,65,54,20,183,178,107,215,110,254,159,119,125,63,219,175,217,12,248, - 76,77,205,16,70,1,61,93,189,115,172,54,115,113,74,37,108,186,235,209, - 20,181,100,191,134,144,121,3,243,94,179,231,121,248,190,223,60,143,12,90, - 99,36,34,231,206,110,215,90,87,9,157,254,89,157,163,94,15,169,215,147, - 243,232,162,151,141,187,8,131,243,84,253,26,93,245,115,184,131,195,188,233, - 77,14,219,182,142,176,109,251,15,241,245,175,29,227,233,131,15,227,135,51, - 120,217,30,160,142,31,142,18,4,19,120,185,245,4,225,149,141,33,5,179, - 211,156,9,224,204,152,207,95,221,246,40,147,147,71,248,205,255,250,51,108, - 219,92,35,168,37,201,39,144,36,4,229,114,185,150,7,151,181,196,27,223, - 56,192,159,252,113,13,73,6,112,152,181,224,146,100,253,36,208,6,226,5, - 144,46,136,235,101,226,134,188,12,196,119,129,87,74,196,53,2,241,88,140, - 124,131,131,248,110,195,210,250,176,139,188,61,130,31,2,249,180,147,28,251, - 81,224,23,4,242,131,14,252,61,200,114,14,121,172,117,165,111,73,76,18, - 219,61,15,156,167,183,183,200,149,87,14,146,201,100,26,73,90,118,54,19, - 203,234,100,85,11,92,178,62,89,50,120,59,142,227,230,204,36,0,95,248, - 210,12,191,254,43,71,25,31,79,196,13,224,186,87,184,124,232,215,183,49, - 115,238,16,127,246,39,95,231,209,125,207,33,184,15,196,113,130,90,242,208, - 44,101,47,133,252,85,188,254,186,97,126,248,199,222,207,246,237,91,217,56, - 236,83,158,153,105,142,61,203,56,253,248,141,135,108,72,132,45,73,14,105, - 189,157,202,5,169,187,30,61,175,160,89,102,115,179,6,61,195,10,75,163, - 187,187,151,40,10,113,221,44,20,178,179,239,161,101,187,136,218,139,131,239, - 251,228,157,44,181,56,177,242,116,75,79,137,93,185,2,197,98,137,34,48, - 49,145,167,54,83,38,202,100,184,242,170,60,155,46,123,25,175,184,246,90, - 238,123,120,11,95,251,220,191,112,122,236,56,137,5,151,136,182,31,156,64, - 208,59,219,86,205,113,130,106,186,178,81,62,247,69,16,206,125,124,228,119, - 127,144,145,145,94,198,207,31,35,151,47,225,121,30,133,66,161,57,121,51, - 136,53,181,50,193,27,223,184,145,225,225,44,39,79,86,16,34,67,98,33, - 53,102,50,129,196,101,40,99,226,235,5,156,18,208,7,188,51,25,231,70, - 191,3,91,99,196,117,32,251,28,156,183,65,60,238,32,182,11,216,19,195, - 183,129,215,10,100,65,192,78,9,221,49,241,110,7,103,183,68,158,19,56, - 79,55,220,152,113,134,217,229,36,32,113,35,159,4,206,112,211,141,63,68, - 119,119,14,47,239,225,186,171,186,139,176,92,226,172,234,95,111,50,57,178, - 215,180,228,50,217,117,132,97,200,221,95,174,242,233,79,30,226,216,209,129, - 198,108,36,117,110,122,221,102,222,247,115,155,217,247,200,81,62,243,183,123, - 25,59,255,8,130,239,1,137,168,41,151,228,198,210,110,110,253,225,55,240, - 19,63,253,253,116,117,85,136,227,105,102,166,29,160,64,198,41,36,9,20, - 162,74,161,32,137,227,89,49,210,197,173,224,229,91,132,42,138,187,240,60, - 73,38,227,206,43,106,74,168,146,247,237,159,156,93,55,215,136,225,152,199, - 100,155,199,185,110,107,150,98,164,101,116,118,119,164,239,116,246,0,0,32, - 0,73,68,65,84,55,6,249,70,179,22,159,46,118,245,122,72,111,119,50, - 192,188,82,133,108,110,29,155,54,12,226,230,234,76,76,140,35,28,159,87, - 222,16,241,242,87,92,205,171,119,100,249,236,95,31,106,88,195,211,72,74, - 36,89,149,167,146,50,240,128,161,134,53,167,6,198,251,100,115,61,252,211, - 231,191,70,126,67,204,191,251,185,171,217,186,117,61,121,39,169,215,216,249, - 128,222,30,167,49,188,163,225,190,91,35,34,87,40,56,252,191,63,125,21, - 191,255,123,223,36,110,14,173,72,174,45,146,57,98,217,143,16,51,112,131, - 11,101,145,60,51,92,39,225,52,196,59,64,56,14,78,143,68,110,1,185, - 25,216,34,137,111,4,209,23,195,70,135,248,74,129,83,17,208,47,16,177, - 68,110,118,145,18,234,219,187,9,159,106,76,178,29,15,34,133,11,68,68, - 81,128,228,48,240,60,153,76,157,91,110,189,25,207,243,232,238,238,158,243, - 208,102,177,172,38,86,245,175,55,150,253,36,153,146,81,99,97,210,184,41, - 110,201,234,218,199,113,156,110,222,118,107,129,31,249,177,126,238,127,240,62, - 238,252,155,111,131,60,2,60,223,152,24,185,49,165,150,28,228,134,107,223, - 197,123,222,247,38,110,188,105,3,51,211,17,213,170,160,80,240,65,139,116, - 245,244,186,212,195,164,163,246,10,179,241,50,211,13,169,39,133,100,50,78, - 139,176,205,39,104,81,36,147,137,114,27,241,197,40,138,155,99,196,84,82, - 13,128,26,54,214,26,131,140,26,110,90,125,91,220,216,223,105,174,170,160, - 214,112,83,67,14,76,139,79,6,89,194,70,125,114,249,228,103,82,175,135, - 212,42,25,178,185,117,120,94,133,186,63,78,61,83,96,247,235,182,179,125, - 251,86,62,127,199,229,220,253,229,7,27,217,150,195,36,75,3,21,240,114, - 221,212,2,191,17,201,73,18,79,36,195,212,130,19,56,20,185,237,147,15, - 224,159,58,222,116,87,226,135,116,21,60,84,167,15,107,71,220,32,105,243, - 95,250,165,27,248,251,191,127,156,231,159,63,13,178,187,225,174,132,64,246, - 16,51,128,228,56,241,101,189,200,202,121,200,71,56,61,16,247,139,68,208, - 78,102,136,42,14,98,75,157,56,19,33,134,29,156,171,1,225,18,15,57, - 56,121,129,92,215,16,183,186,128,30,151,224,76,31,21,119,8,191,122,25, - 200,113,66,103,128,228,223,63,198,175,157,1,190,139,16,39,184,245,173,111, - 231,101,59,54,210,215,215,79,87,87,23,174,187,118,238,187,229,210,99,85, - 11,92,46,151,105,116,124,73,215,249,173,189,21,62,254,223,142,240,224,222, - 115,45,227,219,126,228,199,182,115,255,131,247,241,217,79,222,67,146,138,246, - 36,136,227,205,200,130,151,27,225,135,223,244,35,252,226,47,255,40,253,253, - 253,76,78,78,210,213,85,161,82,233,162,82,73,44,182,48,10,200,123,46, - 213,90,50,80,218,113,103,221,111,166,197,166,220,144,157,68,205,180,206,244, - 65,206,174,59,27,87,83,43,33,164,237,167,239,99,190,111,221,150,116,82, - 137,165,219,250,189,235,234,11,150,206,90,133,20,178,4,245,68,180,227,198, - 92,98,153,76,25,186,66,178,81,37,217,238,109,106,100,103,250,236,220,145, - 103,203,127,120,19,175,184,222,225,51,127,253,53,30,223,151,136,27,84,241, - 131,177,198,180,80,94,195,138,219,134,96,18,201,195,196,140,224,48,196,221, - 247,142,210,223,243,73,62,240,43,111,102,251,246,161,70,156,177,121,213,64, - 184,166,6,130,175,91,87,224,47,255,242,22,222,241,142,191,100,98,226,4, - 137,152,59,4,178,27,233,172,7,33,8,217,72,125,211,105,50,89,159,216, - 173,35,251,4,110,81,18,140,102,17,211,93,184,195,211,56,110,140,44,65, - 60,144,5,95,32,7,4,209,84,30,186,98,196,249,16,55,18,212,189,94, - 166,198,94,198,120,245,26,202,225,229,72,38,17,110,47,137,118,157,35,138, - 238,7,113,128,107,118,190,138,247,190,255,29,244,246,244,81,42,149,82,51, - 119,45,150,213,196,170,16,56,125,45,55,189,227,150,178,74,28,23,144,210, - 231,177,39,37,31,253,232,17,30,126,120,61,142,83,33,102,138,31,185,245, - 25,222,243,51,123,248,252,63,62,192,103,111,187,135,66,254,56,149,218,119, - 128,70,244,65,94,137,151,143,248,217,159,254,48,239,126,239,171,1,168,213, - 198,233,234,74,102,33,209,167,208,234,233,74,4,77,197,218,204,76,72,83, - 212,148,171,77,37,125,40,75,77,23,182,118,29,246,98,37,86,164,89,65, - 166,128,42,113,141,162,152,94,101,81,102,100,99,155,135,239,3,141,172,206, - 68,132,146,78,48,10,235,228,51,71,184,245,150,171,24,44,13,115,199,29, - 183,243,207,119,199,201,106,226,217,58,126,120,24,24,70,54,93,149,208,28, - 40,206,227,248,65,137,191,187,19,112,159,227,23,255,195,54,134,7,79,145, - 169,151,9,220,171,233,237,129,32,8,144,241,4,153,236,58,84,236,104,53, - 91,117,142,227,112,227,141,155,249,204,109,63,197,191,251,240,95,241,252,161, - 67,64,6,41,93,100,38,139,148,231,8,252,77,212,187,71,17,242,52,98, - 70,224,244,8,34,41,144,110,63,181,114,55,185,254,58,217,76,29,214,131, - 204,100,137,43,57,232,115,241,39,123,113,157,144,124,118,154,184,46,169,231, - 122,40,7,219,241,179,175,38,219,211,143,140,39,147,216,154,172,0,247,225, - 56,143,114,211,174,61,124,248,195,239,102,96,160,151,193,193,1,250,251,251, - 231,100,222,90,44,171,141,85,33,112,179,153,145,173,184,110,55,65,237,44, - 177,236,231,87,126,249,52,7,158,14,168,69,7,201,186,155,120,249,203,103, - 120,207,207,236,225,211,159,60,196,189,95,254,50,240,48,213,218,100,195,61, - 230,35,101,47,27,138,253,252,198,111,253,6,187,95,183,157,90,109,28,199, - 241,169,213,4,97,20,54,179,36,85,172,77,79,249,95,136,184,181,19,54, - 149,233,185,210,113,93,71,179,236,68,211,178,83,215,236,251,62,197,98,17, - 223,111,76,43,86,168,50,61,5,184,125,236,122,243,70,46,191,252,253,100, - 50,223,227,142,207,255,19,126,8,146,82,67,150,78,1,69,188,252,32,126, - 13,146,201,156,27,231,12,34,254,238,246,135,41,13,198,124,240,87,223,8, - 64,46,83,102,122,166,155,174,2,184,153,46,170,213,100,56,129,90,149,96, - 53,147,205,230,216,179,231,10,190,116,247,135,248,236,103,31,228,219,223,126, - 138,193,13,37,134,134,178,252,253,223,252,91,214,109,122,142,201,178,160,219, - 59,130,115,108,2,17,6,68,163,57,2,57,72,52,217,141,147,151,100,220, - 26,114,99,142,176,220,135,172,228,169,123,89,106,211,155,112,156,10,136,51, - 56,211,49,51,185,13,4,241,101,100,189,203,249,217,159,219,204,214,173,5, - 214,173,235,227,250,27,166,216,56,180,133,27,94,253,251,92,243,242,205,244, - 118,247,176,97,227,32,131,131,27,40,20,60,187,22,156,101,213,179,162,5, - 206,76,19,79,123,98,47,215,98,254,203,239,76,240,173,189,211,68,178,78, - 222,221,193,200,246,253,124,232,215,95,203,131,247,31,229,222,47,255,111,252, - 240,81,36,167,27,203,215,36,207,255,27,138,111,229,63,254,167,159,102,247, - 235,182,3,48,83,73,190,203,186,57,250,122,178,84,171,53,242,249,100,10, - 45,21,107,83,89,145,237,132,77,109,55,69,109,53,185,214,76,119,103,50, - 89,181,3,196,45,46,76,61,217,211,243,60,156,108,6,199,149,212,235,17, - 81,16,176,97,115,63,191,240,107,87,147,223,240,78,190,246,185,127,225,212, - 216,236,172,29,146,9,96,16,232,71,226,145,56,153,125,188,156,139,31,156, - 224,182,191,173,177,245,242,17,126,226,221,59,152,152,56,193,186,193,58,208, - 67,117,42,34,83,240,136,162,16,53,223,230,106,70,8,135,124,206,99,219, - 182,97,62,248,193,91,248,137,159,184,145,106,181,66,127,127,145,46,47,71, - 109,122,3,97,101,19,211,193,17,162,201,51,136,120,134,250,140,71,40,123, - 200,8,73,214,113,17,65,6,186,28,202,19,37,162,176,143,56,211,75,45, - 220,148,12,24,207,156,66,78,212,169,197,3,196,238,86,242,221,69,74,235, - 251,121,247,123,94,67,181,90,229,151,127,101,136,40,186,158,137,137,9,132, - 16,244,247,247,81,44,150,232,234,234,66,136,213,107,29,91,44,138,21,45, - 112,58,74,220,162,168,140,235,38,105,255,190,31,240,233,255,155,227,207,63, - 49,74,36,39,201,138,45,196,76,241,177,63,122,45,159,255,199,7,248,244, - 109,95,252,255,217,123,243,32,73,206,243,188,243,247,101,102,85,101,86,85, - 87,117,207,65,12,206,1,64,81,164,68,18,166,104,82,171,131,34,69,201, - 180,45,203,166,165,176,76,89,52,45,122,165,213,74,127,217,86,120,195,107, - 135,215,225,240,42,98,181,43,57,24,150,130,246,218,107,203,36,13,81,171, - 224,202,10,73,60,68,29,4,64,136,36,36,225,32,192,1,72,28,115,116, - 79,15,230,232,233,238,186,43,239,239,219,63,190,252,242,168,170,158,25,112, - 0,97,0,228,19,209,49,117,228,85,89,53,249,228,243,190,207,251,190,192, - 3,52,221,17,81,224,2,154,196,254,234,59,126,152,15,253,220,191,224,205, - 111,111,178,119,121,148,207,93,3,116,174,77,174,161,148,133,211,176,43,181, - 108,198,238,127,37,98,51,106,167,217,180,95,17,74,237,106,48,228,92,124, - 22,211,32,89,151,39,152,186,60,25,59,24,195,157,37,38,4,97,194,27, - 239,236,241,143,127,230,141,28,235,10,62,121,239,131,92,220,11,176,178,154, - 56,63,124,14,75,188,17,165,194,108,208,234,197,124,159,151,246,158,227,222, - 95,251,34,199,239,16,188,227,157,71,8,166,19,230,42,161,217,58,204,26, - 250,60,155,249,126,175,116,8,33,104,181,90,28,62,124,152,110,183,155,221, - 80,56,52,26,54,233,218,58,81,120,7,145,255,54,130,249,144,32,152,163, - 82,133,101,55,16,86,194,60,185,135,169,191,137,76,19,194,168,141,178,58, - 168,102,31,171,209,195,182,29,102,4,164,73,72,170,154,56,238,49,58,221, - 13,60,183,67,179,213,164,211,233,2,186,230,176,215,235,97,9,139,102,171, - 69,163,225,212,202,173,198,171,6,175,24,130,3,77,110,105,50,199,182,59, - 72,41,249,131,63,10,248,79,31,61,71,191,23,176,63,130,88,109,243,75, - 255,246,77,156,58,149,242,255,126,234,243,184,173,167,8,194,64,119,255,23, - 186,81,242,119,188,229,231,248,208,207,125,136,119,126,167,226,220,197,203,8, - 65,78,110,158,167,192,111,18,134,33,235,27,69,113,114,217,68,226,186,94, - 254,216,132,34,23,77,35,175,134,11,239,65,48,174,58,219,214,83,189,155, - 77,155,102,179,169,115,100,89,113,185,229,173,225,118,97,255,242,132,91,110, - 89,231,199,127,226,91,185,227,206,187,248,197,95,248,4,23,247,134,180,154, - 183,17,70,67,164,26,33,104,161,178,78,48,126,52,67,160,123,99,62,122, - 226,97,238,253,175,112,251,93,63,77,191,235,35,26,51,14,119,143,50,155, - 77,88,95,119,137,227,70,197,81,250,74,135,109,219,180,219,109,148,82,5, - 193,180,160,229,185,196,157,67,184,113,76,154,196,121,19,3,203,182,80,137, - 34,8,125,130,208,199,73,18,108,219,194,118,92,26,13,135,134,227,96,91, - 22,73,26,147,36,18,167,225,224,185,46,141,102,115,233,156,41,85,135,35, - 107,188,58,113,195,19,92,145,123,83,154,220,156,54,82,74,30,63,49,231, - 99,255,229,52,131,65,204,254,40,65,169,61,254,209,63,58,206,235,95,111, - 243,227,127,247,255,38,138,183,81,60,135,192,205,107,220,222,254,214,191,207, - 207,255,147,15,241,166,123,4,207,158,57,71,183,215,70,198,90,153,196,105, - 4,126,147,78,183,75,146,141,113,57,72,181,45,230,216,202,228,246,106,159, - 157,85,46,71,104,52,98,210,84,100,189,64,109,240,20,194,15,136,210,41, - 145,175,232,118,187,36,73,74,127,125,131,119,189,167,199,223,223,124,55,255, - 225,63,252,25,65,116,18,145,171,182,245,44,55,167,123,91,42,200,76,41, - 240,219,159,249,19,238,252,150,59,248,224,135,223,199,237,183,58,236,92,24, - 176,118,24,130,64,19,44,240,170,34,57,96,137,104,108,219,198,178,44,154, - 77,7,165,178,70,214,166,62,91,65,59,237,34,211,4,37,21,194,18,8, - 33,176,109,43,223,142,82,186,47,151,176,116,177,252,170,223,103,77,110,53, - 94,173,184,225,9,78,119,53,215,246,118,219,105,35,132,199,230,249,17,247, - 126,252,28,95,249,82,204,238,96,68,195,190,133,31,250,97,143,239,255,129, - 227,252,79,255,227,127,35,138,78,226,182,78,17,68,19,154,45,65,24,172, - 241,230,55,252,53,126,254,159,124,136,55,190,197,99,232,63,75,183,127,51, - 105,40,73,228,8,199,234,179,222,47,136,205,228,220,86,229,218,92,215,125, - 69,231,216,94,44,104,162,235,16,199,81,165,172,193,243,60,240,65,117,28, - 210,64,209,111,70,88,98,135,195,135,90,124,240,195,239,3,224,35,255,238, - 115,249,20,116,51,109,64,135,41,143,33,184,72,16,95,64,119,214,216,224, - 147,247,62,200,91,222,250,86,214,15,31,38,158,159,101,237,240,29,165,18, - 2,125,115,241,106,35,185,69,8,33,116,207,202,21,208,97,225,70,85,249, - 213,168,81,3,40,87,210,222,192,48,36,39,132,38,158,19,95,181,249,189, - 79,157,102,127,148,208,176,111,225,206,227,41,239,255,241,187,249,245,95,187, - 143,253,253,75,192,3,248,225,46,0,97,160,184,105,227,93,252,244,207,254, - 56,111,186,71,176,55,56,11,193,77,200,104,134,16,62,221,246,26,66,248, - 36,113,140,235,121,56,142,67,175,211,161,215,209,206,61,19,146,44,247,110, - 132,43,119,25,121,173,32,142,99,154,166,247,165,10,240,125,237,168,108,54, - 155,180,29,129,103,235,225,174,205,214,6,163,217,30,55,29,25,241,193,15, - 191,143,191,243,254,31,198,226,88,105,75,186,62,206,18,125,224,88,214,9, - 69,227,210,222,148,255,246,255,124,150,211,79,127,131,222,198,6,59,219,103, - 145,170,147,247,224,76,211,186,17,48,212,42,172,70,141,85,184,225,9,78, - 74,153,183,226,74,226,61,30,63,49,231,35,31,25,177,117,233,117,52,196, - 237,164,106,196,143,255,228,6,39,30,222,226,211,159,127,6,197,253,64,144, - 117,39,121,43,94,235,8,31,248,123,239,227,157,223,185,65,224,251,121,61, - 155,82,154,44,101,108,211,106,181,114,213,230,185,45,221,55,210,238,97,217, - 93,92,215,165,101,53,232,116,214,176,237,6,205,102,51,239,50,98,254,94, - 171,104,52,26,121,29,157,109,119,232,116,58,128,194,182,109,108,91,208,234, - 122,56,158,190,41,216,88,215,117,85,183,30,155,242,161,127,120,23,63,248, - 157,198,84,114,44,115,85,94,66,169,75,88,162,159,145,223,6,186,187,253, - 25,30,248,179,39,249,236,103,215,152,204,116,71,153,36,58,135,159,54,153, - 205,38,164,169,30,59,179,56,29,188,70,141,26,53,110,104,130,211,23,79, - 43,107,195,53,99,26,247,120,224,254,152,19,143,156,192,22,125,98,181,205, - 247,188,183,197,100,216,228,119,126,251,79,177,212,87,129,48,107,230,11,48, - 228,39,126,244,103,121,255,143,190,13,208,51,219,194,48,212,138,77,142,240, - 60,133,213,72,243,26,55,99,38,105,123,208,239,21,237,181,138,124,219,107, - 55,36,121,237,48,245,126,118,222,114,204,117,93,154,118,23,199,105,208,239, - 31,226,123,222,245,70,62,248,179,255,152,191,252,214,219,128,139,52,155,122, - 138,130,105,200,172,178,233,224,26,46,112,129,47,221,119,31,127,254,165,243, - 244,54,54,152,140,19,252,201,8,32,175,195,3,106,146,171,81,163,70,5, - 55,124,14,174,92,22,176,121,42,230,215,63,254,28,81,162,47,162,135,15, - 15,249,145,31,254,46,62,249,95,31,98,107,251,15,128,63,195,109,117,9, - 34,109,42,249,107,239,188,135,247,127,224,189,244,251,78,214,126,75,49,158, - 198,52,236,38,221,246,90,165,198,205,144,155,235,122,88,118,213,76,82,54, - 146,212,228,118,101,152,112,50,144,133,47,69,169,223,102,192,108,54,193,118, - 187,188,251,125,135,25,79,222,195,185,95,248,4,59,123,9,102,150,156,82, - 89,225,56,199,42,55,42,143,158,248,35,238,191,239,78,190,253,237,111,162, - 227,124,131,88,58,36,137,38,77,93,23,103,246,17,223,144,197,244,147,223, - 125,211,203,125,8,53,106,188,230,112,67,19,156,185,80,70,225,101,154,173, - 163,60,112,255,128,167,158,234,146,170,20,24,241,190,247,189,145,237,179,49, - 231,47,252,17,240,116,70,110,103,0,184,105,227,93,252,228,207,125,144,91, - 110,213,228,86,105,187,165,134,196,220,180,164,220,22,157,146,38,188,102,219, - 226,134,188,104,222,168,40,122,95,166,153,115,207,56,45,123,132,83,31,63, - 80,116,26,33,239,122,207,183,240,247,55,223,205,71,254,221,87,32,203,201, - 41,194,172,149,87,11,133,155,233,193,0,184,200,227,95,187,159,175,61,246, - 102,190,231,187,215,42,109,194,130,64,23,158,23,35,131,228,13,245,93,245, - 127,244,217,151,251,16,106,212,120,77,226,134,14,81,2,185,122,123,236,137, - 41,255,233,163,231,0,144,114,198,235,239,236,114,247,183,54,121,240,143,31, - 97,52,214,119,250,82,236,233,149,212,81,62,244,225,159,228,13,111,121,19, - 211,96,146,147,155,239,11,54,172,57,177,123,19,150,21,228,109,183,92,215, - 37,149,237,138,83,210,241,220,140,216,68,158,107,210,251,78,169,113,109,40, - 147,140,113,58,182,251,29,218,94,74,211,19,220,126,171,195,247,189,247,7, - 243,80,37,64,179,153,104,146,19,110,86,20,190,142,38,56,151,175,158,152, - 241,39,247,61,197,104,146,226,7,33,65,224,231,179,235,84,148,102,74,174, - 70,141,26,53,52,110,104,130,75,211,20,41,37,205,214,81,238,253,248,25, - 78,109,78,243,247,222,249,93,29,190,246,232,46,223,120,246,65,130,248,4, - 224,17,133,99,0,94,183,241,14,190,239,221,119,51,26,141,144,209,44,55, - 148,0,168,181,219,112,26,13,122,173,181,149,57,183,150,213,88,152,169,86, - 61,69,55,146,50,120,165,192,132,117,77,145,178,129,37,102,124,207,119,55, - 249,224,135,239,206,103,196,197,81,185,165,215,122,86,47,231,102,127,3,62, - 247,249,7,120,232,161,152,94,239,102,0,130,192,39,8,2,66,169,201,205, - 184,42,235,27,145,26,53,106,220,208,4,103,46,140,143,61,49,229,15,62, - 119,65,27,75,210,243,188,225,238,155,0,120,226,241,135,179,217,110,151,64, - 156,0,244,232,155,255,245,95,254,20,183,222,158,224,186,58,196,105,20,92, - 171,85,204,108,19,110,39,183,253,91,153,1,194,40,183,242,254,107,66,187, - 126,72,153,102,33,94,43,43,90,110,226,53,55,232,245,122,172,117,45,222, - 243,131,239,229,199,222,255,131,232,97,168,67,61,245,91,5,8,90,52,154, - 14,138,155,209,4,55,228,210,222,101,30,252,227,47,114,110,103,68,16,4, - 164,177,38,196,36,137,245,243,212,16,221,114,115,238,26,53,106,188,182,112, - 67,19,156,148,18,165,124,238,253,248,25,158,61,181,166,251,77,218,183,240, - 109,111,78,9,167,95,99,115,251,107,4,241,46,100,102,4,165,214,248,27, - 239,251,57,222,245,125,119,179,187,183,67,24,134,249,182,26,150,182,152,219, - 86,151,181,110,39,127,93,231,221,10,229,6,69,206,173,198,139,3,165,52, - 97,149,39,66,184,174,110,220,236,71,3,238,124,125,131,31,250,192,15,112, - 199,237,119,208,108,30,201,72,77,135,41,163,104,119,97,107,67,190,252,208, - 38,23,159,253,58,81,34,137,211,164,18,170,4,173,226,234,250,184,26,53, - 106,188,172,87,241,114,24,73,202,116,233,47,137,247,136,227,6,159,251,116, - 177,206,235,239,62,71,119,173,199,35,95,189,140,224,27,192,22,100,125,38, - 189,214,27,248,7,63,245,253,196,241,5,28,171,95,217,151,213,72,113,61, - 15,97,105,50,44,155,74,160,90,10,240,23,69,110,166,198,111,245,123,7, - 159,155,235,217,238,193,235,164,75,251,125,177,96,219,29,108,187,147,155,79, - 242,6,206,98,132,215,220,32,13,20,127,251,175,197,252,192,187,95,71,18, - 31,38,142,146,124,102,156,224,56,173,230,109,232,186,56,221,206,107,60,253, - 6,159,123,72,144,68,54,126,16,146,198,9,150,208,161,202,185,111,231,219, - 174,203,6,106,212,120,109,227,101,37,184,171,133,255,156,198,33,126,227,183, - 3,6,131,204,68,34,103,184,222,58,225,244,107,92,186,116,10,40,106,160, - 148,90,227,39,126,244,3,116,186,51,194,164,122,113,111,181,90,75,142,73, - 96,169,253,150,38,55,123,105,8,232,75,137,85,35,128,22,201,13,10,21, - 116,208,251,139,219,124,33,195,64,205,88,162,242,191,127,17,208,195,75,161, - 237,165,184,174,203,251,63,240,94,14,29,234,151,106,224,10,148,235,226,252, - 48,225,153,63,219,230,252,243,9,74,234,215,147,32,197,113,108,44,49,171, - 152,77,94,40,209,215,168,81,227,213,131,27,34,14,183,120,65,53,4,147, - 166,146,223,255,212,125,236,143,18,108,209,231,200,70,159,59,142,55,57,125, - 186,73,16,61,9,12,33,31,94,250,173,188,255,3,239,5,32,141,186,216, - 77,109,72,49,228,230,56,14,182,211,160,97,235,202,136,110,183,187,100,42, - 209,57,183,191,184,83,178,184,47,163,208,138,144,94,90,33,54,160,242,94, - 154,206,42,235,125,179,196,100,200,124,241,223,151,26,105,42,179,66,112,253, - 252,251,222,219,226,111,253,245,38,94,107,45,159,48,0,16,69,14,34,55, - 154,104,60,122,226,143,56,125,250,44,0,113,154,224,71,58,36,25,4,1, - 42,74,137,147,118,182,143,218,108,82,163,198,107,21,47,123,136,210,168,134, - 178,106,50,33,182,19,95,15,249,194,23,244,232,153,84,141,16,206,46,251, - 115,201,217,243,167,209,228,22,130,184,140,192,229,251,222,245,1,110,185,85, - 147,151,235,74,82,107,134,213,168,94,220,154,142,133,221,112,114,114,43,151, - 3,188,148,5,220,215,18,254,43,43,53,3,243,56,77,230,75,127,230,189, - 36,222,127,65,234,238,133,16,225,42,226,124,177,213,93,163,209,32,77,230, - 0,172,183,27,124,240,127,126,15,157,238,70,97,52,17,46,150,232,103,221, - 78,60,192,197,107,57,192,144,79,255,127,167,57,255,124,194,124,46,24,207, - 102,200,116,74,16,248,132,210,24,78,234,92,92,141,26,175,101,220,16,10, - 174,140,114,123,174,123,63,126,134,177,95,52,222,93,95,187,141,217,165,139, - 236,238,63,3,92,202,122,24,194,209,245,59,248,145,31,253,94,166,129,30, - 104,26,43,7,127,40,104,71,250,121,185,222,205,20,7,3,165,14,27,47, - 253,103,90,12,255,149,255,45,147,219,42,50,115,146,253,252,207,192,188,103, - 30,155,245,203,219,52,251,43,239,235,90,235,249,202,239,151,143,251,197,172, - 7,44,223,84,120,158,71,18,239,241,29,223,225,241,158,239,93,156,87,230, - 17,71,29,200,75,6,52,190,254,236,3,12,6,133,97,104,238,87,86,203, - 67,149,117,46,174,70,141,215,38,110,40,130,91,188,16,61,250,100,204,161, - 190,86,101,82,206,184,233,174,152,253,209,243,8,244,56,21,221,80,249,40, - 183,221,254,78,214,54,26,132,254,64,171,183,80,210,246,214,136,93,221,173, - 196,118,138,11,102,185,83,9,188,180,83,1,22,21,208,65,74,206,40,48, - 67,84,249,177,46,144,90,249,181,197,215,203,36,119,37,53,119,53,99,207, - 42,133,103,158,167,233,236,186,66,161,139,48,249,49,169,10,67,208,90,203, - 226,135,62,240,3,75,203,10,225,230,53,113,126,56,5,66,118,6,49,227, - 73,81,27,89,238,75,153,36,53,169,213,168,241,90,199,203,78,112,38,159, - 180,136,203,187,1,79,63,150,50,159,239,34,229,140,118,43,230,80,219,202, - 204,37,23,75,75,246,249,222,119,125,43,55,221,28,208,176,155,196,114,142, - 221,156,162,148,151,231,222,154,142,133,235,186,149,208,164,113,77,194,203,215, - 95,242,32,162,200,201,43,29,93,241,111,145,236,12,201,197,241,181,125,30, - 67,134,7,253,45,66,8,183,178,238,245,194,247,181,228,114,221,38,81,148, - 96,59,109,162,40,226,111,253,213,38,135,14,149,92,176,194,69,41,143,70, - 179,220,89,206,7,134,156,124,230,43,185,114,247,3,157,183,43,19,93,221, - 221,164,70,141,215,46,94,118,130,19,194,205,195,94,134,104,130,32,98,176, - 187,201,104,220,193,143,230,88,86,135,118,251,8,103,183,34,252,104,6,89, - 104,210,224,59,223,241,157,12,71,251,88,141,148,48,72,105,57,250,99,57, - 206,193,173,54,11,215,228,75,127,10,86,229,213,22,159,175,82,111,6,105, - 184,95,249,187,18,210,100,78,163,17,175,52,167,172,122,92,222,239,65,143, - 87,173,91,38,187,111,22,198,92,18,4,17,174,219,204,219,178,173,117,45, - 238,184,229,238,146,209,164,5,194,205,186,156,232,60,156,254,23,182,183,182, - 8,253,1,73,162,11,190,211,56,33,204,204,55,102,102,92,141,26,53,94, - 155,120,89,155,45,107,19,129,151,207,123,139,227,24,37,135,52,155,135,249, - 204,231,111,34,85,79,163,84,31,165,102,108,108,220,196,96,240,167,8,206, - 64,118,225,83,106,141,55,191,65,143,194,105,185,54,105,212,165,221,16,132, - 201,4,187,165,137,203,228,222,14,114,77,190,88,40,171,177,85,234,38,137, - 53,49,217,78,59,55,79,152,215,202,112,146,125,72,71,85,34,75,70,32, - 51,82,183,214,73,147,81,182,112,31,187,165,173,246,14,144,56,250,113,154, - 204,177,157,118,126,44,66,184,57,33,153,99,43,135,68,175,149,216,204,118, - 94,44,151,165,25,96,219,104,196,164,105,140,16,46,157,78,135,203,187,1, - 127,251,111,135,60,241,84,31,165,60,20,207,100,117,113,119,98,156,179,208, - 2,66,254,244,207,34,254,225,252,22,230,157,38,110,250,60,202,149,36,225, - 173,36,118,74,232,196,16,196,89,174,245,213,61,245,187,70,141,26,203,120, - 217,21,92,217,42,111,212,84,20,37,60,120,255,86,101,185,78,215,103,58, - 11,41,215,190,1,188,233,141,89,254,45,72,17,194,39,202,92,115,107,237, - 226,98,150,202,118,254,184,28,154,124,177,176,170,86,13,170,238,199,242,107, - 102,217,69,24,114,203,145,140,170,228,6,250,113,233,121,26,238,147,100,74, - 101,49,47,23,199,13,226,184,177,20,118,44,155,87,86,173,87,14,121,30, - 68,120,47,6,14,42,201,56,124,168,201,223,252,177,247,229,207,5,45,77, - 208,194,69,224,226,181,186,104,21,231,51,158,126,131,211,167,207,34,164,62, - 111,113,112,112,221,91,109,54,169,81,227,181,133,151,157,224,12,226,56,206, - 149,193,60,81,156,120,100,11,41,117,168,201,178,116,232,106,54,61,151,47, - 175,8,240,90,71,184,243,91,238,224,150,91,29,226,40,204,219,113,1,216, - 142,54,151,184,174,75,167,173,150,140,37,47,214,221,252,162,189,127,21,169, - 93,201,1,185,248,126,18,165,90,189,25,98,147,67,210,96,128,146,227,234, - 95,114,22,146,17,179,72,34,212,136,196,215,235,207,66,153,239,195,18,35, - 210,52,206,115,114,139,251,53,251,46,31,195,226,243,197,245,76,206,244,197, - 44,23,40,43,76,253,59,176,120,235,183,183,56,126,236,104,254,190,82,30, - 158,171,231,198,249,97,55,95,215,15,167,60,127,46,33,205,62,247,56,156, - 64,170,155,110,27,163,137,153,250,93,183,95,171,81,227,181,133,151,125,30, - 156,113,210,149,9,103,56,156,51,137,34,132,176,81,202,229,80,223,33,240, - 7,4,81,74,85,193,109,240,182,183,222,142,63,29,211,104,182,104,182,45, - 162,73,138,215,210,6,133,166,83,189,160,153,225,165,47,222,177,167,43,115, - 104,139,138,232,106,175,235,13,104,5,34,84,161,218,148,28,163,194,125,4, - 160,66,80,114,128,176,116,217,132,104,29,2,57,164,99,193,44,90,163,211, - 28,49,153,182,233,119,135,140,194,117,58,89,136,182,225,152,48,228,138,227, - 40,171,197,69,216,253,202,178,137,115,40,15,125,154,112,165,57,7,223,108, - 200,178,92,3,89,126,28,4,17,141,70,204,91,223,113,156,173,207,60,146, - 79,131,240,3,39,235,104,98,242,127,250,245,193,197,45,224,38,44,123,13, - 32,239,79,105,250,140,26,232,6,204,226,47,180,152,191,70,141,26,47,31, - 94,86,130,51,57,152,50,226,164,205,112,79,129,188,19,184,132,16,1,194, - 137,217,221,159,146,23,119,103,232,181,245,84,129,88,46,168,18,199,33,77, - 98,112,90,217,156,183,151,246,130,182,146,220,174,68,30,160,9,100,97,153, - 178,114,83,114,76,42,118,16,114,146,191,31,205,119,104,102,34,85,138,4, - 91,234,225,51,29,11,64,19,210,100,26,128,167,149,156,33,185,131,142,45, - 137,82,77,168,43,177,143,221,190,171,178,110,153,228,224,197,169,133,51,196, - 102,134,148,74,153,234,156,92,50,231,174,187,109,125,3,33,54,192,76,250, - 22,125,154,206,26,65,60,4,244,177,239,143,47,232,109,165,147,156,228,210, - 56,1,215,76,25,128,78,199,16,93,93,248,93,163,198,107,5,47,187,130, - 51,48,23,186,78,167,195,227,79,141,15,88,202,84,242,234,139,221,173,183, - 29,199,98,139,56,109,211,110,172,147,196,49,118,115,142,146,125,156,102,154, - 21,118,171,165,126,147,47,22,202,70,141,85,196,150,27,69,74,166,16,146, - 145,254,151,125,236,214,161,149,102,146,92,185,53,79,3,71,65,233,156,91, - 178,35,225,117,59,52,189,38,176,70,42,118,114,146,155,69,107,192,243,8, - 231,86,44,255,34,107,93,151,81,184,158,111,58,39,187,236,248,210,76,25, - 230,199,86,50,177,152,99,77,231,103,114,19,139,81,116,160,39,104,219,118, - 154,187,80,205,48,211,111,6,81,148,210,108,150,26,48,91,54,82,186,56, - 13,151,183,190,83,231,222,12,37,121,205,54,65,52,192,143,157,108,170,156, - 254,61,156,221,14,153,77,59,8,225,211,235,117,137,146,20,72,42,251,73, - 211,24,219,110,126,83,199,88,163,70,141,87,38,110,152,88,141,153,223,37, - 165,100,186,123,154,253,81,130,82,229,186,171,75,75,235,220,117,252,46,14, - 221,90,228,221,26,193,165,60,15,215,116,44,68,99,181,225,224,37,115,211, - 149,200,35,87,99,165,92,26,81,102,156,201,94,95,34,183,12,202,188,238, - 55,192,213,147,18,34,63,194,123,242,148,38,57,177,142,144,167,245,190,196, - 14,195,97,72,199,42,148,30,192,165,81,17,54,148,177,147,27,88,242,28, - 159,217,167,28,162,146,179,121,110,111,241,88,115,19,75,86,119,151,127,212, - 44,175,149,239,67,166,223,84,99,227,230,130,233,39,142,99,210,84,146,166, - 146,183,189,217,162,213,148,144,77,22,240,163,178,82,55,161,106,159,231,207, - 109,49,25,196,121,107,182,52,203,189,173,30,163,83,55,95,174,81,227,181, - 130,27,132,224,170,6,128,39,30,222,90,90,98,62,107,146,207,125,35,160, - 229,10,250,253,59,243,177,56,177,156,51,21,235,249,212,0,3,51,14,231, - 197,86,111,215,132,5,199,99,78,32,139,40,169,40,37,181,122,149,110,2, - 12,193,159,229,139,205,157,205,108,67,67,102,165,14,30,0,195,125,125,3, - 48,29,21,253,170,130,169,38,61,171,145,13,5,45,215,133,149,212,34,104, - 82,77,197,78,65,116,192,44,146,133,137,37,74,153,76,3,102,161,36,74, - 245,190,23,201,233,133,67,96,89,58,12,25,4,17,160,111,62,204,223,237, - 183,154,0,131,14,75,123,110,82,154,206,94,212,194,237,12,98,44,138,223, - 76,20,14,174,243,184,106,212,168,241,106,192,203,26,162,52,201,126,83,7, - 23,133,151,17,214,58,123,227,227,72,185,139,16,1,250,226,214,38,85,230, - 162,53,68,224,18,5,125,58,189,231,113,221,195,52,130,57,177,117,39,50, - 43,0,239,175,101,23,94,235,40,142,163,239,216,155,77,109,96,152,205,102, - 216,182,133,82,65,94,88,124,16,86,25,40,202,198,18,131,165,218,181,133, - 60,26,128,173,94,87,9,41,42,57,70,200,94,101,59,105,48,64,168,145, - 54,147,204,1,214,81,222,41,152,15,73,118,142,209,78,238,100,220,11,128, - 128,206,90,23,230,19,70,126,155,222,225,109,166,163,219,241,71,17,157,254, - 62,112,43,109,59,35,198,140,32,19,91,171,31,161,70,133,58,11,6,168, - 214,30,98,62,65,88,27,136,249,132,52,19,196,182,132,142,181,157,133,44, - 139,240,100,223,30,102,245,118,115,124,95,23,107,167,105,3,219,6,80,89, - 94,78,27,57,204,247,106,206,27,80,49,168,68,145,14,115,90,150,238,102, - 162,151,147,217,186,41,182,43,56,118,232,38,54,47,38,32,250,248,65,136, - 219,26,17,132,235,149,76,154,219,218,231,210,160,201,205,162,199,212,127,158, - 163,157,62,14,62,105,236,228,126,148,32,8,74,121,184,26,53,106,188,22, - 240,178,42,56,211,219,16,244,5,208,118,218,216,182,205,120,32,16,98,148, - 133,40,91,196,115,149,53,219,45,224,182,122,52,91,55,51,157,79,152,138, - 117,130,116,128,211,154,177,209,181,216,31,141,112,218,22,137,239,231,86,113, - 223,15,72,211,25,157,78,7,203,178,175,74,110,215,116,252,166,150,108,209, - 80,82,82,70,6,38,236,104,84,210,162,90,90,130,26,178,216,177,5,160, - 107,13,80,222,158,38,174,44,55,55,222,171,154,61,166,35,191,162,228,12, - 114,135,102,249,121,9,243,205,139,136,121,17,234,204,21,103,50,98,94,82, - 69,179,80,50,11,37,13,103,142,233,138,85,132,254,10,149,92,118,43,26, - 135,164,30,124,170,31,235,238,37,118,182,254,44,187,161,48,196,168,95,95, - 63,124,16,41,21,78,202,32,212,231,176,235,174,209,114,44,134,126,76,66, - 213,192,212,178,26,117,219,174,26,53,94,99,120,121,9,174,52,246,197,178, - 108,132,240,136,162,132,225,56,204,93,115,0,113,35,161,209,156,161,47,106, - 173,252,245,94,135,60,68,217,205,84,91,28,72,214,186,29,226,201,136,181, - 206,156,166,39,112,93,151,102,179,73,28,55,94,208,180,235,101,245,86,172, - 183,88,79,86,86,111,198,36,162,93,144,167,137,119,79,161,210,51,90,41, - 205,39,185,170,147,81,138,140,82,210,96,64,26,12,24,77,245,235,134,184, - 202,240,158,60,165,143,233,82,41,52,41,214,43,203,56,234,44,254,40,34, - 136,47,211,233,232,227,41,147,221,238,229,172,164,33,219,31,160,9,77,13, - 81,178,32,48,49,159,160,194,125,100,148,50,28,134,149,125,76,166,197,247, - 98,106,238,116,39,18,149,125,151,170,66,108,230,124,151,255,202,175,155,101, - 205,111,65,207,184,211,74,112,173,101,161,172,35,148,191,115,13,67,110,62, - 110,171,129,9,85,142,70,35,230,115,45,65,163,133,161,183,161,172,135,160, - 214,168,241,90,195,203,74,112,182,211,174,244,52,76,211,148,166,105,168,43, - 138,176,88,59,207,171,5,184,173,30,224,18,132,22,227,25,216,45,139,56, - 213,249,27,41,93,166,153,121,174,209,255,22,218,246,44,207,67,25,67,132, - 25,197,19,133,151,175,249,56,139,11,179,90,118,78,154,208,100,201,80,162, - 194,253,44,204,168,247,157,236,72,230,91,129,54,140,168,97,78,116,163,233, - 142,14,17,102,74,106,189,211,98,247,114,17,138,5,96,110,35,199,10,123, - 119,113,2,193,16,220,203,120,106,83,31,99,162,255,29,141,46,209,22,41, - 254,40,66,37,207,211,233,236,211,233,236,51,15,7,28,217,8,243,28,160, - 9,133,230,100,170,134,154,68,213,48,39,60,213,218,211,71,178,119,120,74, - 11,0,0,32,0,73,68,65,84,127,41,223,30,128,229,23,205,174,163,116, - 154,171,184,56,110,144,166,50,239,24,34,165,172,12,28,45,79,26,87,202, - 199,88,246,109,187,131,211,56,84,41,248,214,165,3,229,64,164,38,90,97, - 153,223,133,11,132,153,122,43,212,170,235,74,92,207,35,137,178,225,173,162, - 170,100,235,249,112,53,106,188,118,240,178,18,156,174,131,43,66,90,74,14, - 137,162,36,123,239,112,214,193,164,170,32,130,208,220,137,135,244,58,32,163, - 25,13,187,201,108,58,213,163,113,172,46,15,255,185,203,112,175,65,100,191, - 145,94,255,102,66,229,224,186,77,154,77,155,193,248,18,82,166,56,141,67, - 215,116,140,58,132,170,80,202,95,93,22,80,89,120,33,52,233,94,174,152, - 68,52,134,43,21,154,33,156,53,111,7,67,110,74,13,161,157,86,85,155, - 65,59,101,54,153,102,37,3,5,14,247,66,28,117,182,242,154,63,138,240, - 71,81,222,21,165,74,110,122,95,145,31,21,199,231,197,160,134,88,129,195, - 154,171,63,175,215,215,251,49,106,48,242,11,162,104,56,186,193,51,232,118, - 107,38,236,104,89,86,62,37,221,178,44,210,116,86,252,101,231,81,74,153, - 25,76,180,225,36,138,82,124,95,119,75,105,54,29,132,220,133,114,211,229, - 10,90,44,254,62,194,48,36,73,18,132,21,16,167,9,115,191,30,157,83, - 163,198,107,21,47,179,139,82,95,36,163,40,201,66,83,26,221,163,85,239, - 203,109,55,41,44,140,178,201,70,172,180,26,140,103,122,24,166,231,41,90, - 173,22,73,28,19,78,45,206,158,62,193,111,124,226,143,248,143,191,186,195, - 31,223,167,21,68,28,199,36,241,62,189,78,23,203,178,25,206,171,117,82, - 171,96,142,105,177,91,73,185,230,109,177,56,219,168,55,212,38,138,130,104, - 188,39,79,85,201,206,189,76,223,155,51,222,75,25,206,66,134,179,234,133, - 250,74,112,172,17,204,53,137,204,146,1,142,243,20,80,168,56,208,225,202, - 120,120,146,120,120,146,35,253,75,28,233,95,202,195,146,5,134,11,255,46, - 188,59,11,115,117,25,15,79,86,222,147,105,65,186,113,210,206,85,92,20, - 165,164,105,90,233,251,88,110,237,101,219,29,221,96,91,245,73,83,201,167, - 63,59,229,31,252,189,207,241,209,143,126,141,203,187,1,174,219,196,243,138, - 134,206,139,33,202,118,219,90,24,155,179,142,215,186,13,128,67,71,239,161, - 215,59,134,31,142,112,185,242,247,91,135,41,107,212,120,245,227,101,46,244, - 22,40,229,211,108,186,128,195,104,98,243,233,63,12,184,116,166,129,148,154, - 68,222,118,207,237,124,219,91,142,240,213,39,239,199,148,9,184,173,226,176, - 237,150,197,120,26,211,109,187,196,114,206,173,183,221,205,223,252,177,247,241, - 248,83,146,127,244,51,191,143,231,93,230,253,63,116,59,239,255,192,123,249, - 27,127,125,29,219,110,16,4,17,135,186,173,60,236,88,206,181,149,157,147, - 154,208,86,244,110,44,213,187,45,218,237,129,37,133,230,133,207,1,22,74, - 13,17,98,29,77,40,29,80,67,250,158,233,80,242,58,162,249,78,177,9, - 179,13,127,130,117,126,8,28,194,222,77,25,223,117,145,62,71,64,12,105, - 219,224,75,80,170,143,156,157,199,234,220,130,76,54,177,156,59,43,251,55, - 121,180,53,119,69,104,18,128,117,146,157,0,19,8,158,77,166,116,214,186, - 244,58,54,195,189,16,43,59,221,123,195,20,183,228,249,136,124,69,211,19, - 168,40,69,52,109,26,141,162,239,165,41,0,55,143,245,191,218,216,179,183, - 31,241,244,137,144,95,253,149,251,121,228,171,151,217,218,126,150,219,238,122, - 189,62,167,217,77,133,148,58,31,171,21,92,129,35,135,250,192,221,236,238, - 157,64,79,248,94,199,15,215,249,242,3,167,177,157,219,57,126,135,224,214, - 219,15,51,77,18,214,168,81,163,198,107,25,47,123,29,156,206,185,8,30, - 63,49,231,231,255,201,121,254,249,63,254,3,206,110,109,96,89,29,44,171, - 195,183,191,229,8,111,127,199,6,101,149,17,132,118,238,156,3,232,117,27, - 88,86,64,203,177,24,13,7,124,253,177,167,121,219,155,45,254,242,119,126, - 15,131,129,203,199,63,249,36,63,247,83,255,154,127,246,207,158,38,8,34, - 108,91,100,57,56,173,32,227,56,46,77,173,150,7,54,19,190,98,47,73, - 40,212,27,37,130,242,58,240,92,113,154,149,26,50,75,244,126,103,201,32, - 39,181,193,110,149,20,229,184,148,43,26,172,86,27,126,233,229,102,191,80, - 103,50,217,172,168,185,202,49,202,85,53,98,203,10,110,54,153,46,185,51, - 219,66,63,159,142,252,162,12,1,136,109,173,170,131,133,97,3,182,109,231, - 228,102,122,76,62,246,196,148,79,255,97,196,175,254,202,253,60,248,80,139, - 179,231,110,70,112,92,47,239,138,74,99,231,121,178,156,47,115,189,245,140, - 228,60,52,193,221,140,219,188,141,255,254,153,147,252,226,47,124,130,223,251, - 212,253,12,7,225,21,103,1,214,168,81,227,181,129,151,148,224,202,97,199, - 52,157,17,133,151,75,6,132,148,36,222,99,111,63,230,159,254,47,187,252, - 196,223,57,195,111,254,230,37,246,7,183,17,171,109,108,209,167,231,13,248, - 187,63,126,132,199,30,25,224,54,28,32,160,233,238,160,123,16,30,211,27, - 86,99,194,84,119,151,111,52,110,38,149,83,62,242,43,146,123,63,49,231, - 195,63,211,167,213,148,40,134,92,218,219,230,196,163,167,57,191,59,35,77, - 21,113,210,206,74,7,52,75,68,145,14,171,153,252,209,34,114,67,201,252, - 140,238,84,50,59,163,235,201,228,16,233,111,102,182,127,29,154,4,173,212, - 28,107,164,195,148,111,200,152,232,185,9,180,83,176,206,130,63,163,227,44, - 23,158,55,189,57,233,104,128,213,19,204,179,240,160,24,31,193,102,23,155, - 93,58,206,205,0,204,123,151,240,178,111,79,8,189,156,227,60,133,167,54, - 233,123,89,126,43,35,186,94,235,2,189,214,133,37,151,166,82,67,93,114, - 128,14,161,158,59,166,143,167,189,182,79,103,173,75,223,61,95,57,182,185, - 178,9,226,203,132,238,33,230,105,135,89,118,147,33,99,77,38,229,70,214, - 230,188,106,53,172,111,40,190,254,76,196,3,247,199,12,119,82,122,107,130, - 174,19,129,250,51,20,15,232,117,2,133,84,125,164,234,147,196,123,37,23, - 101,17,190,21,114,151,111,125,211,235,240,90,239,68,113,23,10,23,63,154, - 33,112,217,217,235,242,241,223,156,241,47,254,233,195,60,248,39,119,19,37, - 146,36,24,32,211,41,65,16,160,34,221,231,50,137,247,86,126,199,53,106, - 212,120,117,225,37,37,56,19,146,74,211,25,66,184,52,91,71,43,61,7, - 127,255,15,91,252,204,79,63,205,111,124,242,81,54,183,178,142,35,162,143, - 45,250,88,244,56,122,211,237,60,112,127,192,51,39,62,77,16,39,64,64, - 20,232,124,140,151,133,41,101,108,231,163,82,156,102,74,18,199,60,251,220, - 25,190,120,223,38,0,199,239,184,19,183,105,99,194,155,137,239,87,234,161, - 116,251,38,85,122,94,29,127,3,43,148,91,105,70,155,146,99,164,155,104, - 199,100,214,86,75,169,97,161,224,230,118,69,193,153,220,153,81,114,113,67, - 223,4,116,218,218,228,17,249,109,172,94,149,248,108,118,73,57,82,121,173, - 71,19,218,41,158,157,185,34,69,81,211,22,205,119,114,146,3,242,28,95, - 249,181,85,170,237,182,139,138,121,170,95,159,77,166,140,130,91,128,34,183, - 103,20,92,25,101,179,201,98,157,153,49,12,1,121,131,230,207,252,246,89, - 30,123,100,192,247,254,208,123,233,31,189,153,86,51,102,113,198,95,163,17, - 51,11,37,225,212,39,240,171,199,169,172,35,220,245,250,91,248,246,111,245, - 177,56,134,197,58,2,61,39,14,92,20,67,30,57,113,146,255,237,159,255, - 95,124,244,223,158,97,150,124,27,82,121,180,215,28,66,25,179,63,176,137, - 147,54,117,211,229,26,53,94,253,120,73,9,78,202,194,50,110,66,84,0, - 251,211,144,143,127,236,36,255,230,95,61,205,239,125,122,151,189,189,245,229, - 117,25,115,236,246,117,254,224,179,143,243,232,137,115,192,0,125,39,111,46, - 100,90,61,196,105,132,200,172,224,73,100,211,106,109,224,7,14,79,156,216, - 230,247,63,117,31,187,251,35,130,232,28,144,181,178,154,247,152,251,54,65, - 16,16,165,83,102,179,73,214,87,49,38,138,34,44,43,58,176,137,114,101, - 78,27,89,39,144,112,191,32,55,127,150,59,31,105,103,100,208,78,177,58, - 154,248,172,243,171,149,131,33,185,184,49,35,110,204,240,165,14,63,182,45, - 133,24,11,146,158,38,57,64,147,165,61,98,76,164,205,38,128,42,145,155, - 217,86,153,228,250,222,60,127,172,67,162,171,77,37,0,173,169,194,159,218, - 52,226,229,66,248,225,68,19,81,43,216,199,79,36,158,99,209,244,68,222, - 10,204,192,204,94,107,150,204,32,66,184,108,159,149,252,249,163,79,243,216, - 195,39,25,238,164,140,46,95,32,136,246,128,128,241,110,214,91,51,213,221, - 255,35,95,49,139,230,184,222,58,198,100,162,148,203,243,23,246,184,253,142, - 6,111,252,31,110,7,238,68,177,142,160,248,253,8,214,177,88,39,136,82, - 62,246,201,47,241,179,63,249,107,60,242,216,26,145,175,176,26,9,158,29, - 225,121,30,81,148,190,232,115,237,106,212,168,113,99,225,37,37,184,40,74, - 176,109,59,31,139,227,186,77,164,148,252,206,239,133,252,210,255,121,154,167, - 158,234,210,176,111,193,22,125,82,53,202,255,141,211,243,220,121,60,101,50, - 184,192,214,217,77,189,110,195,161,92,239,100,202,5,90,174,77,171,213,98, - 60,45,212,67,191,237,1,45,190,248,229,152,217,116,128,190,160,251,200,120, - 147,110,123,140,37,102,68,225,32,87,31,38,124,165,162,180,146,3,186,146, - 91,50,13,6,144,110,234,176,228,2,185,57,214,72,147,143,93,16,143,21, - 93,202,115,105,189,53,125,81,21,11,196,148,76,4,238,108,136,103,145,43, - 51,71,13,112,74,254,21,67,150,61,154,140,237,203,216,246,24,214,47,162, - 196,8,33,70,180,237,17,118,244,60,113,99,70,52,223,193,83,155,68,243, - 29,77,108,153,170,156,37,74,31,171,208,207,71,89,90,206,222,45,74,18, - 226,198,12,57,43,66,148,123,227,194,201,24,196,69,13,97,228,43,100,236, - 228,253,41,141,138,139,34,211,161,166,8,85,118,215,37,126,224,176,125,57, - 224,147,255,245,33,198,225,54,250,198,37,96,227,168,100,18,248,249,205,199, - 18,84,128,101,117,216,221,157,243,216,35,3,126,224,251,255,10,111,123,139, - 158,141,231,182,142,162,114,146,11,80,4,8,92,20,1,143,157,216,229,127, - 255,151,95,226,79,255,188,77,48,157,208,108,135,204,71,230,88,107,39,101, - 141,26,175,102,188,164,4,103,106,163,12,226,56,230,227,191,57,229,163,191, - 244,52,167,78,223,150,191,110,200,13,64,202,25,71,143,198,220,116,87,204, - 185,231,183,240,67,93,44,45,44,61,11,78,59,40,171,245,80,177,114,232, - 117,117,232,115,18,89,68,137,64,41,151,100,174,67,125,94,171,80,24,211, - 121,47,191,128,154,220,204,21,145,86,187,254,231,165,0,173,189,172,40,122, - 179,32,55,49,204,85,21,128,221,79,112,172,17,211,112,134,24,31,97,218, - 246,105,140,55,43,155,47,147,156,179,166,8,187,213,240,100,217,236,104,84, - 171,65,143,38,162,147,234,112,37,224,89,32,38,35,124,123,70,219,30,229, - 138,208,252,205,146,1,113,67,191,87,217,206,229,109,253,81,143,216,136,99, - 18,175,171,201,201,132,77,1,44,57,164,217,213,170,206,109,232,73,219,126, - 34,43,10,206,12,87,133,162,17,115,185,171,201,116,104,225,53,219,40,191, - 193,51,167,38,236,237,111,81,14,79,38,190,79,20,238,17,4,1,73,146, - 230,57,190,42,90,60,246,240,73,14,175,193,187,255,202,59,16,4,248,225, - 4,65,43,27,134,170,155,113,43,206,224,53,59,40,2,190,250,228,253,220, - 251,159,63,198,133,203,199,216,219,27,145,70,103,72,252,128,52,85,121,238, - 181,70,141,26,175,62,188,164,4,87,116,165,208,187,249,220,231,125,62,250, - 75,79,243,212,83,218,20,146,170,17,105,169,31,98,170,70,188,237,158,30, - 239,123,223,27,57,212,182,50,245,117,17,184,128,31,234,28,92,16,78,129, - 16,175,117,24,128,48,72,145,209,98,49,117,6,171,141,31,78,178,117,97, - 50,135,150,179,169,199,168,4,41,126,34,9,211,25,65,16,48,139,230,185, - 27,208,73,246,43,227,101,128,229,46,37,179,140,20,70,131,66,185,117,50, - 69,96,107,245,54,24,85,21,66,119,238,161,134,144,204,44,124,89,168,52, - 119,54,196,157,13,145,179,229,11,250,104,22,45,189,134,61,198,110,206,24, - 83,188,215,91,223,207,21,25,103,207,103,231,127,84,33,80,160,74,110,106, - 29,124,125,3,97,239,166,216,187,41,234,226,234,159,196,198,186,71,60,46, - 20,93,43,208,164,31,76,39,185,18,214,185,45,141,40,74,81,202,47,185, - 83,103,90,193,101,231,83,180,188,44,55,170,49,184,172,247,59,203,110,74, - 102,115,129,138,205,177,132,32,92,164,156,161,148,203,51,207,61,203,3,247, - 109,241,253,239,117,121,219,91,190,35,223,134,160,69,163,217,69,100,164,169, - 39,192,95,0,206,104,151,229,191,254,99,46,92,62,198,60,237,16,219,126, - 30,154,78,83,69,28,199,11,181,123,181,186,171,81,227,149,142,151,184,76, - 64,0,250,226,241,187,159,30,243,43,191,124,166,66,110,160,77,37,135,250, - 14,253,222,140,123,222,98,243,163,239,63,198,219,223,177,193,217,173,136,32, - 188,140,14,47,94,68,223,233,235,176,19,128,31,234,252,78,203,211,97,170, - 48,145,8,75,191,215,116,20,66,4,52,218,2,65,11,157,183,91,231,248, - 113,114,103,221,216,143,73,230,18,21,91,200,112,74,146,164,4,211,73,222, - 95,49,255,4,166,65,113,214,5,68,186,73,73,86,13,177,46,77,17,147, - 18,105,148,8,196,59,50,1,123,68,183,165,149,143,51,214,132,229,116,100, - 238,128,4,114,213,102,119,51,227,131,168,230,200,230,89,187,49,127,42,42, - 37,3,27,205,101,229,97,15,150,203,0,12,169,45,146,157,217,207,44,185, - 176,180,142,65,50,215,170,108,48,44,133,135,227,106,155,179,166,87,168,206, - 114,87,19,33,220,138,89,103,163,231,0,97,78,114,26,250,38,40,244,82, - 72,53,193,7,129,95,60,246,135,148,21,187,158,48,177,193,231,62,13,167, - 78,165,124,219,61,111,194,107,21,21,111,113,52,205,148,220,205,37,2,221, - 64,16,240,91,191,247,5,254,143,127,245,107,92,184,124,140,203,151,82,130, - 32,32,8,130,165,217,118,80,85,158,53,106,212,120,101,226,37,253,95,172, - 251,13,194,137,175,135,124,236,191,156,230,193,175,232,139,101,186,208,197,30, - 224,45,111,110,242,161,127,248,6,238,121,231,58,143,61,50,224,153,103,30, - 71,147,154,79,57,140,37,196,132,69,215,29,64,199,209,23,235,182,51,6, - 57,7,66,226,105,85,217,109,109,21,195,48,1,226,52,33,141,181,186,51, - 61,11,45,255,34,147,105,192,100,26,84,231,167,153,253,231,221,246,75,78, - 201,3,224,133,46,106,102,35,228,126,97,18,65,43,184,50,137,181,166,58, - 52,217,154,42,90,211,101,119,95,187,171,47,224,94,87,97,49,196,222,3, - 188,236,162,111,103,170,47,45,122,119,138,109,253,25,141,249,196,151,154,220, - 22,183,109,20,167,89,190,242,57,23,201,240,10,48,10,78,69,41,113,210, - 206,139,189,23,199,10,109,159,149,160,2,188,166,77,35,140,50,133,165,209, - 242,109,70,147,76,237,197,9,113,154,148,194,199,165,230,219,106,4,162,207, - 169,205,41,15,61,240,69,142,190,174,203,177,67,55,161,8,179,134,220,96, - 113,12,193,58,65,116,14,197,6,176,142,194,69,112,129,223,254,204,147,252, - 251,127,251,5,28,207,203,91,120,25,146,3,83,19,41,235,176,101,141,26, - 175,2,92,23,193,233,38,196,105,165,222,77,191,174,167,59,167,201,156,189, - 253,152,143,252,242,14,159,249,172,38,144,114,190,205,22,125,238,60,158,114, - 251,173,151,249,145,31,83,252,200,143,233,245,159,57,241,105,252,112,130,226, - 34,133,227,47,4,90,160,142,102,207,181,43,50,244,7,40,229,17,73,109, - 105,247,35,115,17,111,129,213,206,150,211,141,121,215,218,144,36,9,9,30, - 42,152,233,191,116,130,149,12,72,130,148,182,61,195,179,231,249,95,89,189, - 41,57,134,116,51,43,5,200,142,73,12,177,231,151,177,7,3,28,107,132, - 237,21,33,188,248,200,30,74,132,88,251,146,73,156,185,0,25,35,182,99, - 196,88,224,244,178,130,112,49,34,88,27,231,36,23,172,21,97,74,167,55, - 96,109,167,89,172,75,49,63,46,104,140,16,45,24,167,46,206,218,12,154, - 219,56,29,201,104,22,177,214,8,17,147,17,107,141,17,158,157,153,86,44, - 170,229,7,98,200,216,190,12,106,157,118,114,39,0,147,99,219,249,219,59, - 254,60,119,100,174,130,81,113,126,34,113,179,239,34,182,125,26,206,28,75, - 140,104,52,98,164,212,19,28,140,26,234,174,75,16,46,126,52,199,105,171, - 204,253,56,164,92,231,54,155,239,18,167,9,81,34,75,19,1,90,32,92, - 173,222,132,139,82,46,74,157,231,169,111,180,185,188,51,101,253,112,3,65, - 64,20,57,144,231,225,134,192,205,89,184,114,136,96,144,189,55,224,115,159, - 127,128,223,249,45,136,102,35,246,246,67,164,234,160,162,148,169,191,159,57, - 105,45,44,43,122,65,147,39,106,212,168,113,227,225,186,8,206,92,184,132, - 112,243,59,222,52,157,161,84,128,101,89,56,141,195,220,251,235,62,127,248, - 251,218,30,111,136,205,40,184,59,143,167,28,187,125,157,119,255,149,119,240, - 174,247,124,11,107,174,199,3,247,109,113,226,153,32,207,163,92,251,177,232, - 229,215,218,213,249,97,141,102,55,123,84,237,42,31,100,93,202,226,64,50, - 141,109,172,100,144,55,18,158,135,131,37,114,51,35,110,12,76,129,52,64, - 18,30,198,62,84,60,183,251,9,110,36,192,211,23,199,238,92,187,72,5, - 189,252,177,65,219,210,132,108,194,148,230,121,142,3,186,152,24,84,194,148, - 89,40,210,16,106,154,106,66,52,5,227,121,231,147,76,61,246,104,230,225, - 213,244,136,157,19,221,124,114,136,215,121,69,62,13,128,21,29,80,90,193, - 62,135,91,133,242,133,98,132,142,113,162,150,141,70,211,161,249,185,45,54, - 77,206,14,43,251,14,85,80,16,107,217,32,180,216,88,121,119,127,196,116, - 50,70,89,71,56,116,72,255,182,20,197,116,10,109,54,113,51,7,110,129, - 75,123,219,124,242,99,255,134,139,123,9,27,27,135,144,233,144,209,124,130, - 215,212,225,238,32,136,114,231,111,141,26,53,94,185,184,110,5,7,100,131, - 44,151,59,128,60,126,98,206,239,124,246,12,123,195,75,249,107,134,228,14, - 245,29,110,189,69,242,246,239,104,241,15,62,220,230,109,111,109,243,149,135, - 34,30,252,194,246,210,112,211,101,184,75,175,72,169,95,155,204,227,76,185, - 65,148,8,226,200,52,5,214,23,44,153,78,80,193,44,111,198,219,112,171, - 167,32,31,236,89,34,55,25,165,249,220,52,252,153,38,183,185,141,211,145, - 168,236,162,157,142,28,112,67,236,102,113,113,22,42,51,217,148,234,206,44, - 134,121,158,108,46,5,115,41,104,139,62,210,159,34,253,21,83,3,86,64, - 141,101,70,160,10,209,2,37,66,236,142,254,60,189,200,161,55,215,68,224, - 244,6,122,251,150,2,49,212,33,75,49,100,46,151,59,168,216,187,41,115, - 103,83,31,183,24,145,78,245,50,97,169,200,221,146,213,144,108,16,95,174, - 12,86,45,143,209,129,98,52,141,86,66,197,212,3,175,185,186,91,12,232, - 16,114,236,120,52,18,189,93,147,107,93,69,138,123,123,17,103,183,180,209, - 166,219,105,225,181,214,104,54,151,155,44,251,177,217,70,144,147,221,87,79, - 156,227,63,254,234,73,38,129,207,238,238,46,142,99,51,155,77,152,78,39, - 88,98,148,53,0,79,235,92,92,141,26,175,96,92,183,130,179,44,187,52, - 196,82,215,145,9,225,113,121,55,224,35,191,188,195,87,31,61,135,16,135, - 243,26,55,208,228,182,177,225,242,151,254,178,197,247,191,215,229,173,223,222, - 226,228,169,139,252,222,167,238,231,233,231,206,233,109,113,145,66,117,45,118, - 218,95,86,119,171,20,92,211,81,37,5,87,197,56,156,96,37,67,210,233, - 62,14,23,177,18,253,215,177,38,116,216,46,76,37,81,170,213,92,169,189, - 21,115,187,146,67,179,231,133,233,66,180,64,200,82,107,41,85,85,62,98, - 108,105,103,100,218,167,109,41,218,150,98,174,70,136,118,138,104,23,57,41, - 59,203,173,89,43,138,178,69,207,34,104,42,84,16,161,196,194,185,49,230, - 157,140,68,77,205,93,153,212,22,85,162,21,233,27,144,178,186,52,134,23, - 207,182,152,142,103,244,123,17,27,235,30,195,209,121,122,156,161,199,25,0, - 58,157,253,124,78,28,64,223,30,230,245,131,150,24,229,74,78,229,228,168, - 137,42,9,58,11,83,1,178,155,19,138,60,105,18,217,11,10,110,129,228, - 132,46,252,22,114,23,43,121,29,65,24,17,71,157,44,223,230,150,186,156, - 4,232,27,28,151,32,118,114,146,251,216,39,63,195,239,126,234,75,52,154, - 135,144,233,148,209,108,15,199,105,100,147,14,138,150,114,53,106,212,120,101, - 226,69,189,61,85,42,192,118,218,68,81,146,135,38,253,241,209,10,185,1, - 108,108,184,188,243,187,58,252,165,123,60,190,231,187,155,216,182,205,231,127, - 127,135,7,238,131,48,178,128,81,41,68,249,194,66,149,73,146,100,38,147, - 69,248,76,230,102,139,14,235,246,1,23,46,51,246,70,142,17,106,84,116, - 223,39,155,157,214,78,117,189,91,71,162,2,173,184,212,208,66,205,178,22, - 92,11,132,163,6,154,212,0,146,30,88,81,66,47,156,129,61,202,243,112, - 139,132,99,200,237,74,240,172,213,97,62,6,11,33,78,123,132,211,145,249, - 62,230,82,96,219,227,202,62,156,171,236,110,253,208,166,222,244,208,231,142, - 126,241,249,122,156,201,103,205,169,228,121,60,123,78,226,107,114,43,183,55, - 43,15,61,5,8,226,117,26,109,65,28,85,213,150,215,44,72,56,192,193, - 105,166,37,5,23,178,120,163,227,53,219,204,166,227,124,25,83,150,98,84, - 156,113,220,86,195,148,65,214,246,13,192,231,151,126,241,62,166,243,30,23, - 47,23,191,153,201,84,18,165,211,172,141,91,157,131,171,81,227,149,138,23, - 37,68,89,134,16,30,95,127,38,226,215,63,254,28,251,163,36,15,73,26, - 244,123,51,58,93,159,183,191,99,131,123,222,126,12,153,14,121,224,161,103, - 184,239,11,112,105,191,73,171,41,51,245,118,37,44,135,40,13,230,73,111, - 33,68,185,28,178,114,73,24,166,54,130,1,173,110,148,247,88,116,212,217, - 188,253,150,169,119,43,143,150,81,74,23,114,59,29,153,231,187,68,54,214, - 199,137,7,58,231,230,201,156,228,148,168,146,179,33,146,137,49,142,204,138, - 80,157,81,115,101,148,223,95,133,160,89,44,47,84,149,240,84,57,119,103, - 143,152,75,193,90,99,164,235,229,0,209,169,146,142,205,46,206,88,171,81, - 83,232,45,196,40,159,82,48,29,207,64,14,242,6,206,50,217,100,205,157, - 227,168,179,56,234,44,29,182,153,135,3,230,225,128,196,223,103,50,13,242, - 122,194,92,189,165,103,128,16,183,49,100,190,194,165,88,24,132,10,20,10, - 110,53,161,55,45,237,48,157,38,250,183,35,132,155,153,77,22,206,85,156, - 96,194,212,6,110,35,225,210,222,54,31,249,247,127,72,167,213,36,153,75, - 102,227,4,153,14,105,164,94,165,70,174,70,141,26,175,60,188,40,10,174, - 108,54,137,162,132,123,63,49,231,220,182,200,149,91,170,70,72,57,203,67, - 147,119,28,111,242,250,215,219,220,126,171,195,243,23,187,124,250,183,18,158, - 125,122,7,63,220,39,8,47,127,83,234,77,74,23,37,93,132,28,229,10, - 78,135,40,175,60,54,37,154,206,24,78,130,165,41,216,57,177,101,211,1, - 42,37,1,165,90,55,53,42,245,209,244,175,237,116,174,53,52,1,138,78, - 154,135,14,231,114,80,9,35,26,2,18,99,107,169,131,201,34,12,185,217, - 195,98,57,53,180,138,18,2,52,129,166,105,79,151,45,116,210,156,60,203, - 117,115,195,99,89,222,107,90,16,107,50,209,199,36,24,208,239,85,139,206, - 71,211,29,100,178,73,191,23,50,28,134,58,180,139,206,99,182,173,11,76, - 166,65,62,59,207,73,246,25,12,116,110,213,95,81,126,1,85,5,103,80, - 85,112,85,146,155,135,13,226,70,194,222,48,59,87,150,190,153,50,10,174, - 217,60,146,53,97,206,183,70,113,115,20,16,196,83,192,229,143,255,251,189, - 124,227,57,237,194,13,194,226,124,44,150,15,212,168,81,227,149,133,23,45, - 68,153,166,41,74,5,124,253,153,136,7,255,248,17,38,227,155,43,97,201, - 118,75,95,32,110,189,69,242,238,247,30,231,246,59,44,182,159,79,248,210, - 23,79,242,224,23,182,217,58,187,137,226,98,102,239,94,110,190,172,113,240, - 212,107,203,10,16,86,160,115,112,37,5,247,66,81,132,36,33,242,245,5, - 61,111,160,44,150,243,97,22,195,194,233,232,149,254,245,36,65,42,144,67, - 29,150,84,140,115,162,90,44,49,155,203,1,109,107,67,231,227,204,60,185, - 153,205,164,227,235,226,110,115,108,145,86,95,106,172,247,227,89,45,132,155, - 169,65,17,50,160,135,24,129,100,157,105,88,181,248,59,189,1,78,111,80, - 16,103,103,153,100,214,47,22,10,199,212,208,57,107,133,170,154,141,207,45, - 173,211,59,108,147,138,29,186,253,109,134,195,16,127,164,207,217,44,42,20, - 164,9,87,110,108,204,242,122,182,70,184,162,67,203,85,177,252,253,55,226, - 229,27,24,83,46,16,71,73,222,151,114,25,230,181,139,236,12,58,220,251, - 159,63,198,52,188,13,149,78,144,233,148,243,187,89,248,57,74,115,179,76, - 77,114,53,106,188,178,240,162,148,9,232,199,17,182,221,225,222,79,204,249, - 250,55,238,193,118,78,84,150,109,183,143,176,177,225,114,203,29,107,188,254, - 245,90,33,60,254,148,228,190,47,192,246,133,25,97,100,229,202,77,45,41, - 183,226,206,93,191,23,228,175,57,237,172,175,100,217,69,105,20,156,101,46, - 242,46,224,177,86,114,190,111,216,186,240,90,200,17,71,186,186,4,64,38, - 155,168,244,76,214,152,120,147,198,246,51,164,163,65,209,64,185,55,200,243, - 110,198,45,169,250,32,250,5,241,9,229,230,74,206,179,90,136,205,106,216, - 77,102,138,210,168,173,181,198,136,181,70,161,152,204,99,209,73,233,157,104, - 209,41,149,1,200,166,131,53,214,228,175,68,160,255,130,8,191,21,16,52, - 21,107,79,232,227,176,24,210,155,135,186,32,28,242,150,94,106,102,163,102, - 54,227,161,126,109,76,84,13,101,2,227,102,194,90,111,63,15,151,154,130, - 239,254,161,17,253,67,35,28,231,169,252,15,32,222,61,133,152,79,24,239, - 165,116,251,219,108,180,158,166,195,54,29,107,130,74,158,103,60,217,205,85, - 156,254,254,110,202,190,55,133,233,78,99,96,134,148,186,36,216,142,54,11, - 85,77,38,85,8,49,34,206,250,96,42,57,69,201,17,74,5,89,247,26, - 173,230,138,73,3,235,44,134,40,193,197,109,205,129,33,95,126,104,147,237, - 51,167,72,240,152,140,19,58,109,69,146,196,132,50,94,217,233,164,70,141, - 26,55,62,174,51,7,87,85,1,143,61,49,229,139,247,109,34,25,51,15, - 27,75,203,119,186,62,71,143,106,98,216,62,43,57,241,240,22,219,103,206, - 51,155,14,80,42,200,221,111,87,71,177,76,50,55,253,46,151,93,148,250, - 34,106,80,152,76,14,130,105,75,213,244,10,75,187,233,174,143,61,130,180, - 95,40,160,82,180,236,106,77,63,228,138,48,105,210,208,53,87,101,37,101, - 140,31,162,147,86,250,76,230,199,146,41,193,10,60,137,107,43,92,123,249, - 2,108,148,158,222,120,177,109,214,35,54,250,214,202,86,95,43,143,127,69, - 143,76,208,3,86,253,96,14,238,101,250,27,91,122,159,173,61,134,195,16, - 228,144,142,165,187,190,164,225,190,206,203,13,86,237,79,127,111,123,227,227, - 218,32,4,76,19,237,164,76,162,197,28,228,114,30,110,81,193,185,173,230, - 194,18,87,10,115,15,9,66,11,8,184,180,183,205,23,254,232,203,204,231, - 34,235,162,226,147,36,250,187,41,135,42,107,212,168,241,202,193,139,18,162, - 52,3,77,31,127,74,178,121,106,151,84,141,176,44,157,111,49,38,19,147, - 123,187,253,184,158,34,176,117,230,52,143,62,113,158,179,231,79,19,100,225, - 170,107,47,238,62,120,185,113,80,200,52,51,77,224,32,8,169,153,201,244, - 89,60,124,216,188,83,13,69,230,19,2,178,220,155,221,156,161,194,204,88, - 178,128,178,177,68,101,243,239,172,21,70,151,73,188,96,242,40,229,203,198, - 68,244,104,46,169,171,98,31,27,203,159,69,185,75,14,202,84,59,249,115, - 34,19,153,107,115,163,25,131,127,112,184,119,17,118,87,33,196,168,66,116, - 109,123,68,199,17,122,18,129,63,3,127,134,152,109,35,230,19,186,253,109, - 109,214,73,116,94,115,22,73,93,106,177,18,46,208,226,112,79,19,164,33, - 57,163,224,174,134,120,97,22,157,118,225,86,183,95,189,105,242,168,154,148, - 220,252,249,151,191,244,44,231,159,175,110,175,60,109,34,77,21,65,16,101, - 237,188,234,242,129,26,53,110,116,92,55,193,25,39,229,222,126,204,125,159, - 219,101,56,107,150,222,155,145,170,17,135,250,14,157,174,207,93,119,235,59, - 242,83,167,82,158,120,120,139,221,231,5,251,251,213,139,245,114,120,114,21, - 174,172,242,34,86,95,124,214,218,43,95,214,199,154,77,173,174,228,221,174, - 130,138,66,202,96,138,187,243,231,227,229,83,44,198,22,253,73,149,124,77, - 215,17,32,31,127,179,116,140,77,7,107,28,195,254,50,177,94,105,127,121, - 223,74,200,149,92,217,186,47,123,153,75,52,83,135,38,12,235,217,195,124, - 226,1,104,162,107,219,122,66,129,47,65,61,187,205,185,137,157,159,43,165, - 54,65,13,245,164,133,116,147,84,236,16,15,79,210,97,155,89,36,177,216, - 202,183,53,159,155,115,23,96,114,107,50,157,228,97,202,101,180,168,230,224, - 244,103,90,84,112,173,102,241,157,168,133,223,137,90,34,182,160,244,111,192, - 55,158,190,200,233,211,103,241,131,144,241,116,206,108,50,201,151,174,85,92, - 141,26,175,60,92,103,14,206,198,178,44,226,184,193,246,243,9,15,255,233, - 44,87,110,250,253,226,241,29,199,245,69,219,177,182,24,142,103,60,254,68, - 131,189,97,154,79,227,86,87,48,144,44,99,53,9,26,23,101,147,213,246, - 250,131,66,148,27,235,158,14,79,150,139,185,51,56,173,189,138,114,179,155, - 51,93,204,157,113,198,149,194,147,233,172,122,241,181,162,100,165,154,19,157, - 116,73,193,217,253,4,246,171,36,187,106,93,40,72,181,124,44,98,108,193, - 64,229,110,201,120,163,184,56,151,195,171,168,17,214,120,189,18,250,92,52, - 160,40,49,66,137,145,158,128,32,170,3,89,239,152,236,32,199,170,212,186, - 108,8,94,172,137,110,62,161,215,186,80,113,88,26,180,219,230,167,87,144, - 142,101,175,145,36,9,221,149,28,183,248,251,88,253,123,89,84,112,170,164, - 208,150,97,222,211,253,42,131,120,202,151,31,56,157,23,156,155,80,229,170, - 153,129,150,117,229,18,142,26,53,106,188,252,120,81,154,45,3,60,112,127, - 204,201,51,91,217,235,85,7,223,198,134,190,192,172,109,104,181,118,250,217, - 136,225,94,204,108,90,205,237,152,28,156,200,167,8,188,48,44,186,40,243, - 127,75,112,216,199,74,134,204,51,227,131,37,135,196,59,223,200,195,147,77, - 239,0,22,180,199,85,98,184,210,113,184,165,28,94,148,64,176,34,63,54, - 164,218,214,171,147,230,127,61,59,32,157,174,56,142,64,33,227,204,132,82, - 82,138,74,4,224,139,37,245,38,70,96,157,44,245,200,236,44,16,164,87, - 52,129,54,232,133,203,13,150,243,26,61,227,34,53,29,87,158,179,150,220, - 154,74,13,153,77,166,90,9,187,151,25,206,66,186,253,109,221,172,26,61, - 238,70,85,84,110,145,131,147,169,86,76,211,149,60,126,109,39,191,172,224, - 22,161,167,124,107,195,145,70,185,0,92,19,230,151,31,218,100,188,231,229, - 249,191,52,46,14,166,76,116,181,163,178,70,141,27,31,215,29,162,84,42, - 96,50,149,252,238,239,78,81,202,93,34,183,158,55,160,219,222,166,187,214, - 99,50,108,114,230,140,205,217,243,207,49,137,34,148,28,33,15,204,205,92, - 9,171,239,200,149,116,43,46,202,85,29,77,18,14,1,208,41,69,8,167, - 205,59,129,34,60,137,208,211,185,173,243,5,57,56,109,91,23,112,187,166, - 136,123,181,130,48,121,55,32,119,49,46,194,76,5,72,163,78,225,198,44, - 21,117,219,246,234,222,158,184,197,65,155,92,159,33,186,100,158,230,10,207, - 16,157,24,91,200,33,224,135,186,119,165,89,55,212,159,231,106,48,29,79, - 42,93,79,58,18,59,122,190,242,154,45,198,218,101,218,221,199,233,238,211, - 94,219,39,105,158,103,54,153,210,223,216,98,188,151,34,87,212,190,181,74, - 38,151,134,216,164,217,218,192,113,156,156,232,156,102,121,157,213,231,251,74, - 57,56,129,33,240,85,230,37,211,186,171,220,255,115,200,104,124,129,63,121, - 240,52,97,56,192,15,194,146,225,196,52,19,175,29,149,53,106,188,82,112, - 221,4,151,38,115,190,242,80,196,163,127,250,36,150,213,65,136,160,18,154, - 108,180,5,157,155,142,229,238,201,203,151,59,204,118,83,102,211,65,126,49, - 170,134,39,221,165,220,201,181,34,87,112,6,86,123,101,87,139,50,54,214, - 61,186,209,38,35,127,117,130,78,148,74,242,76,231,144,188,83,201,193,169, - 176,43,66,237,105,37,100,55,103,164,89,99,233,60,44,104,143,243,252,216, - 82,248,51,80,136,133,41,225,90,189,89,216,123,48,139,138,207,174,122,18, - 43,74,152,236,52,43,249,54,163,226,212,65,173,190,50,228,211,201,209,134, - 24,67,116,38,63,55,233,248,88,209,37,214,26,33,142,26,228,83,204,77, - 56,87,149,166,137,247,51,85,156,238,60,171,63,151,8,152,207,37,97,212, - 160,124,179,18,101,69,214,150,173,187,147,92,221,69,217,202,115,112,126,122, - 240,231,57,216,188,180,65,53,220,29,18,196,9,95,252,194,217,165,37,203, - 142,74,160,38,185,26,53,94,1,184,46,130,75,211,148,102,235,40,167,78, - 165,196,201,113,164,156,225,88,119,47,169,184,67,38,223,162,46,113,246,210, - 48,175,123,147,106,132,160,149,223,105,11,130,172,208,27,150,107,150,86,195, - 201,186,87,72,233,234,89,111,73,66,36,53,105,68,137,200,186,90,92,204, - 183,103,207,71,217,108,48,29,158,52,14,74,79,109,226,7,115,93,247,230, - 173,209,24,101,249,184,236,112,148,8,113,199,46,136,158,238,28,226,73,228, - 42,31,138,87,16,67,186,221,215,164,227,10,172,40,201,203,5,172,53,137, - 218,31,16,244,130,220,244,145,151,5,164,61,108,219,38,232,5,75,33,71, - 19,158,92,68,208,84,200,45,73,123,39,198,26,199,168,158,196,222,149,200, - 166,67,255,98,12,143,247,243,226,115,211,245,36,104,140,244,76,185,77,85, - 153,51,103,242,118,241,77,167,115,215,101,219,210,161,229,73,199,103,118,247, - 165,188,70,15,64,89,135,144,135,44,157,159,236,107,242,156,55,78,210,22, - 125,230,14,178,212,0,0,32,0,73,68,65,84,61,96,213,159,49,139,207, - 232,89,122,144,135,39,219,109,11,69,144,213,185,21,223,33,232,122,184,52, - 137,17,86,80,234,100,98,214,109,173,28,198,234,217,33,194,234,47,152,76, - 178,27,145,44,215,38,150,148,156,153,17,7,154,60,91,192,69,252,224,97, - 78,62,119,140,40,83,113,192,146,138,179,109,81,59,41,107,212,184,193,113, - 93,4,103,219,54,65,16,241,216,35,131,188,107,137,41,17,48,36,183,190, - 166,203,2,46,95,238,104,245,118,233,98,201,65,87,64,92,83,142,165,188, - 76,113,161,106,218,34,175,131,43,163,233,92,195,93,118,214,57,164,233,53, - 233,27,67,167,175,67,100,114,118,180,178,104,174,132,60,181,228,150,44,67, - 137,32,127,223,11,139,139,96,197,36,50,80,120,97,182,13,123,76,207,174, - 30,127,57,164,184,104,46,145,67,8,210,226,125,215,86,75,100,43,155,206, - 129,166,22,179,142,107,43,198,237,140,168,122,217,116,239,140,59,26,131,6, - 227,212,69,116,210,188,41,116,207,14,144,151,52,25,138,236,188,77,195,25, - 162,147,230,231,198,132,92,197,100,84,212,16,66,54,40,182,192,124,46,113, - 155,118,133,192,44,43,200,203,4,242,213,188,66,66,139,188,4,99,245,111, - 69,201,209,138,50,129,101,5,183,28,33,48,207,53,153,237,238,206,120,242, - 196,137,92,73,26,213,102,84,156,233,110,82,55,98,174,81,227,198,198,117, - 135,40,191,254,76,196,31,254,193,163,75,170,205,160,211,213,10,105,58,25, - 51,157,140,217,31,61,143,146,203,119,224,47,204,69,73,214,129,2,132,240, - 137,179,92,155,109,45,143,198,41,166,60,31,76,160,246,33,15,196,58,179, - 68,85,166,94,155,49,50,101,8,25,102,99,106,174,94,206,144,215,177,149, - 77,38,129,170,60,119,218,118,174,218,236,126,146,19,68,58,115,86,27,84, - 50,34,43,23,118,175,170,129,203,137,45,80,168,253,65,78,184,74,132,133, - 89,198,183,232,205,67,61,45,188,164,22,157,120,128,109,219,21,210,21,157, - 148,113,234,226,29,201,200,127,8,246,120,156,247,213,180,59,73,94,91,215, - 163,137,186,152,133,159,213,16,33,70,204,38,83,84,231,114,30,190,110,183, - 45,130,40,133,188,51,77,1,67,114,46,9,66,238,46,157,215,114,62,174, - 209,46,181,50,91,80,112,6,47,44,228,29,178,51,152,176,121,242,44,73, - 28,147,36,73,174,226,102,165,186,202,122,156,78,141,26,55,62,174,155,224, - 182,207,74,246,247,181,106,51,202,77,74,93,46,224,245,170,119,237,219,103, - 206,51,157,133,43,239,178,175,142,106,29,84,16,234,156,89,156,70,116,213, - 16,41,93,132,21,228,6,5,131,242,0,204,13,239,100,254,216,146,67,144, - 3,58,206,144,116,223,39,154,239,172,12,125,129,86,37,65,83,45,187,16, - 51,172,172,61,3,216,31,46,229,204,64,135,26,203,187,202,85,143,12,181, - 18,242,90,88,103,228,18,185,173,218,22,0,190,192,218,182,22,235,211,243, - 125,85,200,207,147,224,101,109,184,84,43,87,112,101,172,170,239,51,42,211, - 11,93,109,136,41,109,211,132,38,77,249,132,221,79,152,37,23,152,159,57, - 139,28,87,63,131,219,208,7,89,168,248,140,120,101,230,192,205,190,191,36, - 73,8,112,80,214,145,236,160,202,238,203,226,152,227,121,177,253,69,5,183, - 28,21,184,86,162,11,56,179,117,134,32,40,182,21,4,1,182,53,207,219, - 119,213,227,116,106,212,184,241,241,77,17,92,121,76,206,169,83,41,74,101, - 211,178,23,84,92,187,81,152,30,26,98,19,63,116,16,226,166,3,183,123, - 229,59,237,229,110,242,0,45,87,231,165,76,120,203,132,149,148,114,151,28, - 118,137,248,22,28,181,151,119,48,177,179,92,92,119,227,18,77,111,174,235, - 188,204,177,12,245,120,27,19,138,91,213,10,235,106,184,90,11,47,149,241, - 117,185,252,96,122,36,43,52,47,25,88,86,181,250,42,35,153,116,16,167, - 139,207,106,239,22,223,143,24,73,196,8,212,112,185,171,75,50,233,228,211, - 191,243,229,199,150,158,97,215,34,87,149,139,176,246,229,242,103,243,36,126, - 171,80,98,189,200,161,219,234,96,245,71,120,221,52,191,121,48,45,220,218, - 109,235,138,109,217,150,106,225,68,53,140,184,10,171,20,92,217,73,89,70, - 241,124,241,24,244,242,97,176,203,206,246,5,108,171,155,43,202,52,78,242, - 48,165,65,109,54,169,81,227,198,197,55,173,224,164,148,68,81,194,99,143, - 12,64,244,115,114,51,83,3,204,157,186,193,233,211,77,194,169,159,223,185, - 43,245,194,6,153,106,44,95,220,194,32,101,154,89,29,203,22,115,33,2, - 26,177,83,114,81,134,140,230,103,112,212,4,75,14,233,119,47,225,58,2, - 75,13,11,115,9,44,77,12,88,105,36,49,88,28,46,90,130,18,129,38, - 26,179,254,162,26,203,84,159,223,10,114,98,72,230,165,238,34,103,138,229, - 151,114,105,3,163,192,178,2,239,39,134,249,126,150,140,40,67,176,207,165, - 176,179,28,74,179,135,99,130,243,197,242,75,249,58,55,68,200,48,87,152, - 185,130,205,58,169,28,148,223,75,71,142,30,215,51,144,136,177,192,177,70, - 249,116,2,131,85,109,212,28,246,113,216,71,166,19,198,97,246,61,150,66, - 148,58,7,183,58,212,44,86,132,167,243,247,74,235,84,141,38,171,8,86, - 15,86,61,115,118,151,199,78,100,131,106,227,152,40,145,216,13,135,217,92, - 84,204,38,53,106,212,184,113,241,77,17,156,101,89,88,150,197,100,42,121, - 236,225,147,121,232,200,178,58,248,81,90,41,19,0,56,187,165,85,201,36, - 42,106,196,86,229,220,174,189,23,165,70,167,175,47,48,221,204,234,184,104, - 80,88,28,151,115,216,203,46,242,114,128,156,157,199,82,67,58,237,136,70, - 111,136,213,31,49,87,163,220,30,47,228,224,170,115,216,64,19,149,21,37, - 43,195,122,114,162,79,175,140,237,74,13,155,24,105,11,127,154,166,218,236, - 145,25,74,12,129,8,25,86,21,82,57,111,183,42,12,121,70,85,95,55, - 203,103,235,168,93,145,31,95,217,156,178,234,152,115,210,242,84,49,80,213, - 171,146,202,34,233,11,169,191,203,242,148,113,83,0,174,122,170,50,63,79, - 223,0,133,11,141,176,245,250,99,89,40,126,51,113,61,15,81,94,5,102, - 154,192,213,194,223,7,183,130,171,206,141,243,195,41,131,139,58,108,106,89, - 1,105,18,87,138,190,13,210,52,174,139,190,107,212,184,65,113,93,57,184, - 73,224,243,204,201,73,158,127,211,200,108,213,113,225,126,51,109,186,0,124, - 63,187,136,95,99,103,138,42,86,116,147,183,87,247,109,60,8,129,184,136, - 205,128,102,127,64,167,29,17,55,244,133,120,46,5,189,181,133,22,85,153, - 179,176,112,79,22,249,43,184,122,8,178,186,99,189,222,74,171,191,183,58, - 143,83,94,86,198,246,74,114,51,199,33,135,246,146,138,203,215,25,46,215, - 236,9,229,146,158,209,46,207,69,37,54,244,59,224,139,138,147,115,85,254, - 113,22,53,86,158,131,242,224,85,49,54,219,208,51,225,204,176,211,85,10, - 174,103,45,19,69,89,193,169,21,206,213,85,38,19,33,14,14,125,94,219, - 180,10,29,114,31,77,5,225,84,255,23,113,41,62,127,146,164,4,83,173, - 48,109,251,218,154,66,215,168,81,227,47,30,215,69,112,39,190,106,227,185, - 9,82,206,80,106,15,41,103,8,113,11,82,206,232,121,197,21,245,236,150, - 110,205,149,204,5,66,248,217,104,156,23,230,154,212,168,174,115,172,113,142, - 56,45,84,97,143,33,45,78,229,121,30,225,197,153,201,164,112,81,174,115, - 142,245,67,155,52,226,142,30,245,98,157,69,137,17,109,209,103,60,177,177, - 15,237,209,146,91,200,97,22,70,20,253,188,171,72,144,10,237,158,244,100, - 101,122,183,156,88,164,143,21,165,3,66,185,164,187,77,196,150,177,222,23, - 110,74,107,45,11,209,158,3,235,140,204,231,199,141,54,180,219,180,143,206, - 141,217,231,82,172,198,114,88,81,76,85,78,42,166,28,193,62,87,93,206, - 172,151,239,55,35,190,32,21,184,182,194,207,20,151,253,181,126,190,108,217, - 117,217,127,102,154,135,75,135,109,31,220,161,238,171,233,73,146,121,170,107, - 231,198,22,94,152,34,198,22,201,164,147,31,143,223,10,80,99,201,250,69, - 143,198,238,62,214,198,72,215,248,173,71,116,157,211,154,164,84,64,220,106, - 102,157,76,92,160,79,191,171,104,77,117,191,74,135,125,134,169,77,59,217, - 173,40,56,29,162,12,41,231,99,203,38,19,131,131,194,223,229,60,92,149, - 232,150,205,43,48,100,107,11,156,246,152,48,145,4,56,68,179,17,182,53, - 103,54,23,184,221,53,212,1,147,201,107,212,168,113,99,224,186,8,110,111, - 114,245,101,64,223,133,79,162,168,210,229,191,236,110,52,184,178,201,196,20, - 131,23,203,140,103,30,225,252,150,252,249,100,50,165,109,247,243,60,96,21, - 213,109,199,141,25,141,222,16,161,250,90,185,137,33,189,245,125,240,67,61, - 171,45,203,115,169,97,113,138,22,141,38,75,238,73,95,171,9,37,130,165, - 54,93,185,26,43,229,226,114,85,181,160,224,236,225,24,25,219,7,22,118, - 151,161,130,72,135,32,119,76,195,101,185,180,174,152,234,58,57,115,252,174, - 173,178,222,149,123,43,247,81,54,169,228,175,117,18,77,166,7,180,31,51, - 112,109,133,26,100,221,90,178,207,90,158,142,32,68,128,231,29,108,154,89, - 179,245,190,157,76,241,173,198,193,234,255,74,33,202,171,135,192,205,13,148, - 190,217,144,156,193,143,20,97,144,230,174,78,131,249,36,201,135,161,214,168, - 81,227,198,196,117,17,220,112,39,205,67,142,101,8,17,84,242,95,229,98, - 94,131,120,85,87,253,43,94,128,244,93,123,57,135,210,235,248,116,186,153, - 1,98,62,66,180,211,188,137,242,50,2,44,117,158,134,171,29,125,109,59, - 235,144,159,117,197,183,237,49,118,63,169,180,201,178,162,4,33,247,73,6, - 189,165,173,149,39,5,24,165,148,204,211,74,142,11,168,132,21,43,196,51, - 172,26,73,90,169,200,137,78,110,73,157,167,43,41,56,49,202,12,43,139, - 167,232,172,67,18,120,208,92,209,156,58,55,184,144,19,182,57,59,242,169, - 24,117,82,232,237,150,72,87,198,54,4,74,19,153,39,179,30,35,69,3, - 105,185,85,117,104,90,227,24,235,108,117,162,185,28,22,68,107,80,30,174, - 234,7,250,220,133,121,107,177,226,67,149,191,63,233,172,19,248,195,21,161, - 201,131,213,255,162,139,242,155,139,20,20,251,72,195,234,246,86,77,22,168, - 157,148,53,106,220,152,184,46,130,219,222,58,7,194,45,117,152,88,46,21, - 48,88,236,94,242,194,251,77,46,206,3,211,72,50,203,127,111,45,70,205, - 151,213,200,170,94,148,107,189,125,237,150,92,191,72,99,52,36,189,96,235, - 94,144,106,76,188,17,107,27,252,216,210,33,197,109,107,229,96,83,40,220, - 141,170,111,173,206,199,13,23,254,93,128,24,145,171,62,163,174,132,114,115, - 226,51,132,120,37,37,151,60,33,97,51,219,222,180,156,31,212,132,40,166, - 10,2,189,175,188,251,138,175,67,170,38,63,103,72,205,64,237,138,10,145, - 25,210,86,67,193,232,217,38,246,174,38,54,115,140,106,160,183,169,195,173, - 2,177,169,72,2,15,49,146,186,104,60,27,49,4,69,30,77,249,141,74, - 179,101,208,249,209,181,210,168,34,43,25,226,122,235,149,223,215,11,197,181, - 215,194,153,125,20,55,10,231,207,23,55,43,166,232,251,32,212,5,223,53, - 106,220,120,184,46,130,187,124,185,195,234,112,81,169,32,219,31,18,78,125, - 221,123,80,142,242,154,185,85,248,102,234,224,140,201,100,62,30,211,91,139, - 113,166,211,202,251,139,161,208,168,253,52,216,163,188,253,20,251,3,172,83, - 167,33,237,47,133,10,101,108,195,158,68,141,229,82,107,46,123,143,156,20, - 196,72,247,126,180,247,10,162,82,99,169,243,101,211,98,153,10,50,251,190, - 90,33,48,196,72,191,191,152,131,51,100,85,193,64,97,5,17,142,115,192, - 5,54,91,222,132,83,251,0,162,71,248,13,187,66,136,122,89,149,19,99, - 217,41,233,218,10,21,186,200,83,93,54,206,86,149,162,24,73,228,25,149, - 43,60,181,157,98,239,74,156,160,180,220,130,11,179,239,46,42,158,226,36, - 72,107,61,15,83,14,83,251,128,78,38,171,113,45,46,202,107,67,214,195, - 82,110,2,224,180,3,156,172,166,51,74,36,164,133,137,198,228,225,234,130, - 239,26,53,110,60,92,215,213,224,235,79,46,95,124,202,119,219,198,0,48, - 137,162,124,122,128,25,112,122,125,40,117,178,48,38,147,142,98,158,142,240, - 58,73,230,212,187,202,128,76,123,140,119,100,130,28,66,248,21,139,244,130, - 13,190,133,107,43,68,201,114,40,70,114,229,212,0,53,150,90,233,100,165, - 0,234,92,22,90,52,10,101,192,170,46,84,69,168,17,173,148,242,250,52, - 99,90,241,5,226,140,126,152,207,126,43,173,67,80,205,253,57,167,36,106, - 88,34,140,146,106,44,171,55,246,36,201,94,118,17,222,154,211,254,243,120, - 233,216,100,108,107,229,117,78,105,35,201,2,169,203,211,131,106,233,67,166, - 0,197,8,84,232,226,203,80,159,151,115,213,99,17,50,172,20,129,71,178, - 3,214,184,20,162,4,161,244,135,182,228,144,249,120,156,147,220,234,50,129, - 131,106,225,250,43,95,175,226,218,213,224,120,170,247,147,204,93,146,56,46, - 166,141,219,61,194,116,117,164,162,70,141,26,55,14,174,139,224,206,109,155, - 16,206,2,121,100,46,182,70,91,16,78,53,161,93,203,197,231,218,235,224, - 170,251,115,84,225,124,240,103,14,94,83,19,67,35,140,86,230,250,64,119, - 233,240,172,22,106,180,65,243,172,131,245,200,169,92,193,169,1,248,83,81, - 81,51,139,189,39,43,164,103,66,125,195,108,30,156,175,231,176,37,83,219, - 12,139,94,141,21,175,39,243,52,119,95,46,33,59,4,83,190,128,111,33, - 39,22,206,66,119,13,163,22,211,196,201,254,181,16,91,50,55,136,36,79, - 72,196,201,162,174,206,44,47,70,18,231,162,95,168,203,210,108,187,116,58, - 199,121,36,213,138,109,98,85,28,154,246,185,20,252,144,48,51,152,176,89, - 124,54,83,107,103,74,14,204,13,208,170,169,235,71,220,66,25,153,92,220, - 213,122,81,46,226,74,3,79,53,14,106,180,188,28,61,16,86,245,11,74, - 146,132,70,226,151,158,87,11,190,255,127,246,222,60,88,178,44,175,239,251, - 156,115,239,205,188,185,103,214,171,165,151,90,123,186,123,182,110,166,167,103, - 64,2,134,153,158,30,196,32,144,152,97,64,2,36,16,146,136,16,90,172, - 197,136,192,194,72,68,72,150,194,88,129,228,176,229,64,198,17,132,173,197, - 146,35,108,203,51,216,66,146,45,99,144,81,200,178,1,207,72,2,134,49, - 208,221,76,211,83,221,85,213,47,247,188,153,247,158,123,252,199,185,107,102, - 190,170,87,93,189,84,39,191,79,196,139,247,94,190,147,55,111,46,239,124, - 239,111,23,55,165,32,220,95,220,147,192,37,155,27,183,253,251,50,142,153, - 39,153,235,106,79,131,229,187,231,54,9,3,11,69,71,65,171,82,175,85, - 205,218,4,80,191,86,119,95,230,162,229,95,95,57,151,221,114,143,251,116, - 140,75,208,88,237,127,169,212,36,133,188,228,175,218,217,228,216,194,230,100, - 119,172,154,187,24,88,46,0,185,139,111,106,194,66,48,139,227,231,108,185, - 27,243,191,23,179,87,171,26,60,102,191,101,7,168,231,45,233,66,159,104, - 204,168,137,179,46,243,68,154,200,40,188,91,206,74,77,162,22,230,229,210, - 130,74,162,150,91,91,153,57,167,230,46,6,151,99,213,186,156,165,119,155, - 41,12,55,163,44,153,167,99,49,184,209,14,251,18,148,238,141,234,147,110, - 237,185,125,223,139,9,65,244,50,73,28,215,50,41,1,214,105,25,71,212, - 250,206,89,175,130,32,188,121,220,147,192,149,153,146,77,172,13,203,58,37, - 53,96,181,89,22,189,40,149,238,22,22,92,94,163,180,175,208,251,244,137, - 39,238,190,93,207,109,70,137,58,194,183,51,214,179,57,105,116,156,61,206, - 0,213,108,17,52,124,32,162,213,60,2,192,251,85,240,250,175,186,198,192, - 54,68,13,142,97,8,237,47,196,196,127,111,3,209,16,53,42,31,41,29, - 123,248,191,158,137,80,101,115,78,115,17,170,8,135,254,162,46,230,174,121, - 63,155,18,196,115,136,202,34,236,90,93,90,228,132,192,100,238,200,85,186, - 70,217,144,238,79,54,107,113,59,59,208,181,199,73,23,186,168,89,75,127, - 233,8,158,7,219,116,199,75,230,245,210,128,96,97,72,18,175,120,30,199, - 244,49,55,27,232,159,73,209,157,180,182,135,219,155,202,157,227,77,139,29, - 0,207,151,19,201,91,186,137,253,123,61,146,207,183,240,195,21,126,180,170, - 9,88,190,118,104,67,236,103,45,38,241,9,230,75,146,235,45,215,215,50, - 108,176,246,44,189,255,91,163,84,228,92,200,186,157,37,153,108,181,223,74, - 143,97,161,240,56,46,74,5,234,162,152,207,109,219,127,177,83,141,193,85, - 51,40,21,205,98,46,92,201,237,221,229,171,117,82,36,49,173,61,87,142, - 226,249,39,23,118,139,5,39,8,247,23,175,71,68,30,88,239,157,213,181, - 204,90,24,217,116,190,231,62,247,246,120,85,124,123,139,68,245,106,214,219, - 109,51,239,170,141,129,143,109,45,150,196,11,203,157,152,91,58,211,152,133, - 143,85,81,145,81,168,158,223,178,142,198,184,204,194,149,198,220,108,212,132, - 207,243,79,206,190,227,216,197,186,66,207,98,85,132,62,190,77,253,87,229, - 41,69,70,97,199,206,130,82,107,74,43,46,63,159,61,79,127,56,29,187, - 226,242,23,237,238,250,113,253,126,73,212,42,172,203,228,86,10,191,241,42, - 193,124,89,60,175,60,137,68,103,110,204,244,133,20,27,109,106,69,231,65, - 178,44,220,182,77,179,235,206,94,111,122,217,79,167,184,176,57,161,120,187, - 218,201,228,181,113,154,214,93,130,32,188,29,121,29,4,238,246,117,70,203, - 56,222,219,8,247,245,232,69,89,197,183,245,170,115,107,67,236,186,188,66, - 95,173,75,145,49,55,27,172,110,246,118,226,106,209,75,30,201,231,92,86, - 96,251,149,216,197,213,194,6,234,115,46,126,21,25,197,218,179,240,171,141, - 34,17,164,42,100,185,91,207,187,229,110,55,73,246,242,110,185,14,203,7, - 220,106,247,181,210,78,32,42,235,107,9,38,197,253,220,176,82,251,235,153, - 232,144,89,113,149,227,39,115,175,124,124,192,155,39,216,99,48,191,104,73, - 110,122,196,65,215,9,227,205,74,105,193,77,91,36,198,4,55,151,133,117, - 105,127,58,69,253,187,44,97,229,197,74,223,203,177,59,174,186,153,13,92, - 253,77,223,89,130,197,227,251,133,219,54,56,14,184,57,191,73,209,129,36, - 72,42,47,204,254,247,61,79,52,113,39,183,191,49,242,118,39,147,59,199, - 224,110,199,138,242,2,237,54,159,69,51,197,198,187,255,58,226,162,20,132, - 251,139,123,18,184,213,102,89,249,109,189,247,231,118,16,236,181,224,238,174, - 23,229,237,69,52,81,206,253,184,202,98,70,13,189,112,22,92,90,45,208, - 118,27,214,197,235,110,67,204,7,119,22,199,136,90,180,95,137,93,246,224, - 196,253,206,216,89,40,233,216,43,234,194,6,100,217,146,159,219,35,60,99, - 215,126,203,78,83,231,150,220,250,219,206,121,207,61,188,23,13,201,43,238, - 2,192,44,156,64,36,115,175,136,209,229,174,64,53,175,91,93,202,134,206, - 117,154,9,169,90,3,155,86,113,191,125,152,23,70,172,127,197,67,79,246, - 12,81,221,182,250,178,226,112,181,108,161,255,141,130,235,217,49,18,191,214, - 247,50,73,92,34,141,122,222,186,215,232,249,242,16,94,146,160,191,168,81, - 182,137,119,11,188,95,205,210,239,109,72,176,222,176,23,93,250,135,103,166, - 58,191,104,159,224,188,150,126,166,119,98,205,62,113,107,154,151,138,82,129, - 216,184,139,37,127,203,93,41,77,151,5,225,254,226,158,4,174,61,8,182, - 54,158,188,79,160,195,174,87,133,155,242,52,156,28,131,59,121,35,139,55, - 235,34,139,50,119,81,110,82,215,27,81,181,226,202,68,111,152,4,51,188, - 155,6,239,86,189,243,125,81,15,54,118,109,170,182,123,59,218,177,37,125, - 206,150,53,110,159,181,133,128,213,106,201,198,96,158,115,25,150,222,60,193, - 243,243,30,148,229,223,183,239,99,127,77,21,205,137,115,203,15,202,12,200, - 130,168,180,8,237,77,133,29,43,87,154,176,208,59,235,0,252,196,148,143, - 159,221,238,253,226,171,180,191,16,239,172,79,162,150,123,62,17,133,187,51, - 93,184,226,117,251,69,131,250,141,132,116,161,49,149,33,109,73,148,137,233, - 166,229,238,247,28,152,207,14,138,231,150,215,229,173,230,206,162,203,47,16, - 242,120,218,6,179,83,232,237,22,58,255,112,231,53,120,30,95,123,29,220, - 126,107,173,213,44,159,111,30,131,171,146,103,81,10,130,112,127,114,111,2, - 23,220,185,147,186,93,239,159,1,247,218,91,40,65,46,120,182,179,63,139, - 179,161,203,26,165,170,165,56,136,123,252,218,175,164,181,49,49,106,2,68, - 206,82,75,194,22,233,76,99,111,42,252,104,133,154,91,188,36,193,79,140, - 75,32,193,185,55,245,103,179,164,147,138,48,130,115,241,169,231,157,24,18, - 85,220,134,176,91,84,77,38,2,227,122,251,43,198,153,56,37,137,251,57, - 59,143,29,55,231,43,102,199,82,203,147,90,212,220,22,194,167,39,22,207, - 119,153,150,234,115,41,233,243,217,128,216,85,105,125,7,243,37,222,124,55, - 78,232,221,76,49,159,49,164,159,117,247,169,102,101,6,201,178,204,234,92, - 131,122,33,197,255,236,171,238,121,191,82,94,168,180,95,201,82,232,159,179, - 4,12,139,169,19,237,182,174,213,193,109,179,216,126,185,110,51,33,160,88, - 114,170,58,184,147,216,159,61,89,37,137,99,146,205,201,110,200,224,20,255, - 15,130,32,188,121,220,147,192,61,252,224,145,43,220,62,33,1,96,21,249, - 168,102,171,168,121,218,30,99,178,237,166,60,57,6,183,95,12,213,226,220, - 109,206,110,141,93,5,181,223,115,236,113,89,175,86,197,191,190,218,159,150, - 191,198,77,204,94,105,244,115,206,13,231,37,73,173,144,59,137,90,206,229, - 120,51,69,127,81,147,164,89,220,113,123,95,30,215,173,179,116,236,21,93, - 67,210,23,210,82,8,43,86,159,237,238,246,183,76,42,46,82,207,79,235, - 241,190,90,130,75,249,124,204,243,26,59,182,59,150,93,45,155,178,89,222, - 207,254,59,208,63,147,22,247,209,19,39,248,222,60,41,30,39,136,157,251, - 89,189,104,203,250,183,188,47,102,102,29,38,75,195,250,87,74,97,104,55, - 227,157,214,109,247,74,30,231,189,187,24,220,158,74,252,236,13,203,123,158, - 230,157,114,54,89,191,73,165,203,245,219,46,74,65,16,238,47,238,73,224, - 122,163,7,9,195,222,214,173,117,209,58,49,214,194,221,88,113,175,45,214, - 162,90,185,11,105,191,112,42,219,44,106,202,170,86,71,181,107,136,241,125, - 39,30,99,23,35,51,207,213,19,51,170,135,246,19,67,58,211,69,159,198, - 187,77,196,75,79,200,126,4,202,116,255,86,219,197,227,158,183,181,56,159, - 238,236,110,236,185,232,229,223,245,196,185,20,109,211,173,183,213,124,138,138, - 123,178,184,255,103,53,234,231,45,122,98,137,59,238,177,76,222,205,99,39, - 241,197,9,40,80,171,255,171,181,236,202,88,174,3,90,173,219,215,80,238, - 176,231,34,42,47,232,135,187,201,212,189,83,67,239,138,151,33,29,214,198, - 49,185,219,202,55,117,219,69,41,49,56,65,184,191,184,39,129,123,250,169, - 49,171,168,227,220,71,54,202,54,161,122,207,200,13,166,86,112,157,91,113, - 175,71,146,201,220,52,105,249,47,149,25,148,89,252,198,197,224,154,4,177, - 79,208,88,80,157,7,7,46,86,4,110,214,153,158,198,168,151,193,111,103, - 27,228,24,146,208,37,152,152,174,143,55,79,72,7,10,245,162,37,137,158, - 64,255,31,182,20,62,223,135,208,9,158,142,54,48,4,253,47,13,241,207, - 181,241,219,115,23,179,202,246,203,216,111,147,92,111,193,48,43,27,136,220, - 241,237,216,98,159,119,231,163,255,77,150,96,178,118,167,156,247,178,172,186, - 55,245,202,165,234,167,255,93,19,255,183,146,66,216,106,9,40,149,204,76, - 147,232,194,194,211,157,20,189,90,146,164,93,18,223,43,238,183,35,108,153, - 32,6,11,131,90,83,88,111,144,185,41,179,231,148,46,52,38,209,69,29, - 158,239,27,8,193,215,206,85,202,48,123,61,255,254,163,52,126,211,39,102, - 156,205,12,156,16,165,151,111,251,142,159,76,121,162,245,36,167,236,175,27, - 93,243,20,228,23,81,150,117,205,67,80,78,165,216,103,197,57,250,221,53, - 190,30,16,120,13,188,166,118,147,189,51,33,13,195,221,34,126,113,81,10, - 194,253,197,189,149,9,168,11,91,191,135,229,149,246,73,67,39,79,184,29, - 238,54,201,36,44,10,189,171,120,212,59,166,108,183,234,234,190,152,16,220, - 124,21,179,240,105,26,85,235,212,159,103,78,230,86,135,119,51,169,237,125, - 222,191,122,1,245,185,20,53,201,146,72,242,238,242,185,155,50,107,205,21, - 204,93,124,202,155,39,133,171,50,152,47,241,223,181,66,189,232,10,161,9, - 41,226,123,193,205,87,119,59,165,68,21,87,230,246,75,22,129,186,238,158, - 187,218,122,9,242,223,61,63,37,109,181,107,238,200,92,172,192,89,155,219, - 247,45,158,103,182,198,54,203,47,221,113,197,225,122,98,107,143,81,61,167, - 237,115,205,207,191,113,243,101,215,2,12,178,24,220,189,100,63,54,79,248, - 185,236,150,147,127,198,26,141,164,184,144,170,94,80,89,162,138,216,237,126, - 230,114,241,59,123,182,83,220,150,143,205,201,251,81,70,209,74,178,40,5, - 225,62,231,158,4,238,201,15,134,228,87,212,121,19,229,215,167,153,242,157, - 112,174,164,185,201,154,225,170,109,55,233,201,204,47,250,216,23,93,198,226, - 218,179,181,152,91,94,83,86,184,223,170,123,95,4,235,127,57,115,157,62, - 154,165,203,48,223,39,243,36,141,170,101,151,147,44,187,216,179,138,228,163, - 103,169,238,171,198,247,93,198,226,76,195,111,250,112,43,197,79,12,113,208, - 45,4,50,55,48,170,89,145,233,66,163,39,182,150,196,178,143,32,158,215, - 98,106,213,219,247,89,108,57,185,168,237,52,254,160,140,247,85,69,110,111, - 171,176,140,116,236,145,252,242,86,231,147,123,74,48,42,239,91,117,81,194, - 110,146,73,62,42,201,178,174,88,114,123,174,22,128,106,87,147,102,168,178, - 239,174,209,115,238,166,76,211,144,144,132,192,115,199,149,44,74,65,184,191, - 185,39,129,59,234,129,226,24,108,180,53,6,39,219,132,108,84,12,183,188, - 55,182,55,196,122,171,174,211,221,199,209,125,49,41,50,23,183,115,238,138, - 250,51,202,78,252,69,178,200,24,215,129,127,76,225,222,171,182,198,2,231, - 162,75,195,114,122,117,190,119,234,213,18,251,62,77,250,204,208,89,110,153, - 24,230,22,160,154,184,204,78,243,114,19,181,46,19,55,160,140,121,85,5, - 37,255,170,138,84,33,74,39,80,253,91,17,79,171,8,91,238,106,220,123, - 140,138,208,85,227,119,249,218,59,9,237,190,56,220,107,167,124,176,213,102, - 127,107,172,109,23,229,201,238,240,253,253,39,55,81,179,54,57,30,40,92, - 148,177,127,114,127,81,113,81,10,194,253,197,61,9,220,165,203,154,212,86, - 92,130,251,220,143,54,42,166,126,91,219,34,108,54,118,215,100,156,156,69, - 121,251,29,52,143,193,117,252,122,230,131,235,150,1,59,102,200,214,188,179, - 124,163,247,125,179,63,28,147,37,77,228,73,20,219,221,251,183,189,93,94, - 117,48,102,99,69,58,80,240,205,138,230,165,27,216,139,170,112,63,26,223, - 47,69,226,216,9,65,17,211,202,240,230,9,201,178,222,9,198,54,113,253, - 34,169,11,155,90,215,197,166,250,115,46,202,38,209,120,87,211,226,254,144, - 197,216,242,36,149,208,173,45,132,125,223,115,172,8,94,28,236,118,169,169, - 190,22,53,193,175,208,218,115,113,50,184,199,78,32,54,157,208,108,164,53, - 55,184,235,65,89,127,44,247,57,219,22,221,221,243,185,124,169,201,42,122, - 165,200,164,4,48,73,76,108,18,76,218,150,44,74,65,184,207,185,55,129, - 123,216,231,202,165,254,238,31,78,136,179,41,181,122,141,133,184,175,221,165, - 181,47,174,167,230,89,98,71,22,247,170,197,146,242,191,231,169,249,141,149, - 75,64,25,150,73,20,249,207,121,226,69,110,73,25,223,199,15,87,59,174, - 61,239,169,20,251,180,134,112,204,242,241,32,139,133,101,34,152,77,34,72, - 199,144,92,111,213,206,37,119,131,250,237,249,94,107,105,159,229,148,215,191, - 85,93,140,219,34,100,223,167,157,208,86,143,147,61,47,66,80,67,85,38, - 221,84,72,124,175,46,112,33,123,215,237,115,109,250,97,93,80,146,229,110, - 37,247,228,142,205,138,111,63,227,79,233,193,206,231,171,46,110,251,62,151, - 165,216,89,162,226,11,66,206,244,31,4,220,224,217,86,163,126,190,157,182, - 149,44,74,65,184,207,185,183,50,129,174,230,125,79,125,249,169,214,86,199, - 229,236,179,226,202,110,239,85,242,223,239,156,148,208,244,78,40,250,174,76, - 244,158,4,206,210,51,137,239,18,59,50,106,2,80,169,107,43,198,224,84, - 40,186,121,132,144,14,20,166,235,23,22,96,46,90,182,171,10,193,8,22, - 6,243,9,141,119,118,67,100,20,225,67,6,219,44,19,48,226,110,219,77, - 12,56,222,45,4,135,74,172,15,39,68,133,200,108,19,110,185,12,115,193, - 170,158,123,118,158,233,83,192,213,138,176,103,130,100,207,42,236,89,85,88, - 160,201,178,91,180,226,34,4,191,107,138,216,97,85,228,182,133,47,73,60, - 140,239,163,135,166,16,182,106,12,174,21,38,160,219,123,159,239,237,169,79, - 17,104,53,234,199,200,45,184,219,81,207,158,172,82,181,250,66,206,13,207, - 51,122,224,10,0,235,200,176,218,84,138,220,189,215,123,132,143,32,8,111, - 4,247,36,112,158,167,184,246,142,135,106,137,37,197,56,156,173,100,147,104, - 221,41,54,159,104,79,109,220,118,26,119,118,175,236,251,233,44,56,21,185, - 171,236,188,147,73,181,217,242,206,227,189,232,234,218,170,197,202,181,135,191, - 10,241,19,149,13,52,116,226,150,134,13,183,145,71,206,210,73,195,134,115, - 239,133,245,130,236,234,207,250,3,103,220,179,240,44,246,170,34,73,187,216, - 87,66,60,63,41,4,32,79,237,207,197,41,241,61,124,223,160,134,89,171, - 171,69,197,141,90,57,167,156,248,108,27,115,214,47,92,141,166,235,151,66, - 155,225,249,41,233,64,161,63,112,6,117,177,254,120,53,209,204,126,246,245, - 156,96,97,138,227,197,93,247,122,232,97,118,91,22,31,204,207,41,62,219, - 134,33,197,57,23,12,193,127,160,210,248,58,242,25,245,95,171,181,115,114, - 12,110,159,5,87,252,173,246,230,230,231,178,255,243,21,54,221,5,207,229, - 171,215,8,26,229,227,105,207,37,51,157,212,139,82,98,112,130,112,127,241, - 154,4,46,77,83,210,212,109,164,207,124,52,196,218,22,74,173,10,81,179, - 92,199,242,192,137,247,127,109,181,112,217,125,201,51,55,195,90,171,174,106, - 121,64,222,139,178,108,182,236,76,144,110,59,107,83,53,52,174,59,126,86, - 15,87,196,163,134,212,58,129,248,63,184,193,123,42,45,196,199,75,18,87, - 239,150,213,120,233,161,193,251,145,141,179,96,170,251,231,176,180,88,236,21, - 176,87,221,1,6,128,122,86,227,61,158,9,112,87,57,65,152,164,232,207, - 166,174,253,85,152,137,221,166,133,125,66,145,190,171,65,178,236,58,107,107, - 232,142,157,215,215,153,174,79,186,208,164,11,141,255,227,27,244,85,83,196, - 207,114,17,34,4,123,57,197,239,154,34,254,166,223,49,199,156,213,165,184, - 85,206,133,97,246,115,150,96,147,60,236,179,248,3,13,244,223,1,245,23, - 54,216,174,42,92,184,122,104,92,214,104,215,103,241,169,6,222,143,108,176, - 23,21,246,149,176,30,123,203,107,11,1,107,111,1,77,142,167,175,159,24, - 236,43,242,206,147,75,220,151,75,69,173,151,7,228,188,80,252,164,148,179, - 240,87,235,155,92,190,244,251,57,219,251,117,32,235,102,98,203,105,227,39, - 101,81,110,207,131,147,249,112,130,240,214,242,154,4,78,235,172,51,134,222, - 112,233,178,230,232,168,81,100,81,150,25,108,187,86,215,157,226,111,251,235, - 224,234,69,218,57,173,102,82,107,213,101,178,156,200,180,146,61,162,90,113, - 165,14,46,194,155,84,44,178,8,236,241,150,59,43,115,197,21,247,239,107, - 120,250,12,246,2,69,113,55,100,110,197,76,16,244,21,237,92,119,219,92, - 205,92,126,93,133,215,217,234,243,56,172,196,174,114,55,98,117,236,78,211, - 101,94,170,39,220,239,69,223,200,176,82,27,23,150,201,44,250,29,41,170, - 175,177,87,118,95,223,220,146,44,58,144,92,5,194,53,246,170,42,142,99, - 207,170,242,60,42,110,77,123,57,197,254,89,75,243,207,140,80,79,148,175, - 85,213,58,245,252,4,61,52,52,191,186,199,228,74,121,231,106,204,45,63, - 175,160,114,240,50,1,8,238,46,198,90,95,27,7,73,209,166,171,234,6, - 207,147,75,220,215,246,231,170,234,166,116,230,184,37,194,218,30,74,205,80, - 132,92,185,2,189,115,165,123,184,233,159,252,217,245,60,177,220,4,225,126, - 228,53,187,40,115,145,187,244,176,207,187,158,188,115,162,201,182,27,115,187, - 47,37,236,203,162,204,124,129,59,156,108,249,105,93,15,60,185,137,222,249, - 177,50,50,75,205,62,183,251,167,28,63,90,97,142,192,126,82,99,31,85, - 181,146,128,32,169,116,208,184,210,198,62,170,118,44,184,189,63,3,94,39, - 41,132,139,33,46,254,182,239,121,116,82,236,239,243,138,20,123,59,112,194, - 226,249,89,129,121,110,109,2,246,155,142,224,188,71,250,20,229,40,156,97, - 249,216,126,184,114,61,36,253,148,244,41,55,117,220,127,159,134,7,168,199, - 234,42,150,39,33,232,111,95,163,190,197,35,184,54,113,147,202,247,60,31, - 219,85,44,191,34,64,125,88,49,98,90,251,91,58,246,88,126,69,64,250, - 236,144,205,229,60,147,182,172,157,44,57,133,37,95,124,94,182,90,193,197, - 126,97,193,85,235,224,234,211,188,171,201,35,85,247,228,26,24,214,106,227, - 172,237,17,54,187,60,116,169,46,90,105,165,69,151,23,228,174,89,183,198, - 152,56,251,94,191,96,146,249,112,130,240,214,114,207,3,79,135,3,143,15, - 188,239,33,224,184,86,11,151,187,44,171,174,203,242,111,121,67,219,234,38, - 180,47,201,100,87,220,108,182,49,173,214,101,160,191,233,221,192,99,130,106, - 186,86,93,46,6,119,155,77,51,111,195,245,156,51,155,226,110,123,55,14, - 53,118,197,224,250,29,115,210,103,116,25,11,11,27,196,126,187,216,232,85, - 51,194,62,237,146,46,170,137,41,133,5,51,204,98,125,57,173,148,248,177, - 179,69,178,138,14,74,235,207,118,21,201,178,75,186,208,216,15,42,212,163, - 229,38,155,175,183,93,85,88,134,249,203,99,190,108,2,173,38,254,51,30, - 250,40,69,157,175,188,110,21,161,139,59,30,246,170,114,83,201,47,39,196, - 143,182,75,107,108,8,234,172,45,206,219,94,84,120,159,240,240,206,110,88, - 165,238,125,210,91,86,94,254,124,155,95,149,226,159,159,187,11,130,43,26, - 123,217,53,141,214,67,67,243,221,6,245,97,69,227,189,245,170,195,219,245, - 40,189,61,187,22,118,196,167,112,0,0,32,0,73,68,65,84,220,237,168, - 94,52,229,174,202,237,246,92,185,107,50,255,185,223,126,23,215,222,113,169, - 22,127,203,105,133,245,219,194,48,44,44,56,207,123,29,230,7,11,130,240, - 186,113,207,255,145,158,231,241,204,179,87,56,115,198,137,154,181,145,19,171, - 219,180,228,218,199,254,36,147,156,170,16,86,138,120,179,24,220,218,236,155, - 42,112,103,183,151,122,193,117,228,247,195,149,115,211,101,137,36,53,161,27, - 173,208,31,85,232,171,110,132,141,31,174,106,226,181,74,215,164,239,235,99, - 47,42,119,123,182,249,219,129,118,162,113,145,29,23,165,247,254,44,81,163, - 186,54,59,94,222,137,63,125,70,195,40,107,25,230,167,101,76,173,34,88, - 0,234,125,22,255,125,26,213,140,224,114,226,132,41,73,92,204,43,91,155, - 199,191,188,167,50,203,13,160,149,226,93,88,239,158,67,246,24,234,67,64, - 102,117,133,158,69,217,173,139,143,33,112,21,212,19,46,174,184,74,215,238, - 121,30,85,142,115,21,188,167,21,222,32,193,62,61,170,221,221,111,87,179, - 70,203,247,234,56,58,33,110,117,151,159,39,168,138,219,190,228,165,220,154, - 91,85,214,135,96,207,241,240,197,43,60,250,184,59,143,188,6,206,15,130, - 162,77,215,73,136,197,38,8,247,23,247,36,112,74,133,24,99,120,242,253, - 134,203,15,61,2,236,78,8,184,157,208,85,147,76,246,91,112,57,251,172, - 177,232,14,227,114,182,179,40,235,86,77,26,54,80,47,102,141,140,171,201, - 21,213,251,103,115,227,210,107,154,244,25,237,68,112,139,181,103,241,191,108, - 230,98,91,21,116,207,37,133,152,179,229,75,172,108,200,4,208,189,73,109, - 125,109,68,15,174,252,64,61,123,198,165,205,140,43,245,110,123,202,22,150, - 95,17,56,97,83,145,115,35,94,197,165,244,135,171,66,180,252,200,213,230, - 217,43,26,115,68,49,184,85,247,74,183,163,14,12,132,10,59,208,44,31, - 15,72,191,214,67,229,137,34,171,186,248,229,95,126,184,34,121,135,198,63, - 210,172,61,11,173,148,244,82,90,92,0,164,79,105,212,163,1,147,112,140, - 30,77,136,25,211,110,198,180,26,237,173,113,57,229,251,59,10,239,36,18, - 119,159,152,84,119,79,230,226,182,174,124,149,86,92,216,188,196,87,127,232, - 113,218,45,151,49,89,239,208,83,226,251,34,102,130,112,191,115,79,2,151, - 95,177,14,135,109,190,241,91,191,12,40,235,206,148,10,11,113,59,173,53, - 183,223,130,219,23,179,113,211,150,95,154,14,57,167,221,102,250,106,218,101, - 186,80,181,36,147,134,238,17,111,18,194,44,102,50,9,102,174,23,229,21, - 237,54,225,237,135,203,132,207,84,175,212,87,174,134,77,127,116,55,17,195, - 14,52,205,204,221,151,62,149,189,148,227,122,205,151,221,55,131,243,114,130, - 58,155,89,48,97,93,52,253,174,193,123,42,69,191,247,150,75,155,25,150, - 93,72,138,199,206,99,101,33,52,191,186,87,198,199,0,251,136,95,8,181, - 14,76,97,73,2,216,107,224,157,45,93,131,201,59,42,111,127,118,30,186, - 151,210,124,183,65,127,77,93,116,173,202,202,63,46,186,199,80,103,45,118, - 160,241,158,118,247,43,158,230,200,253,110,187,10,123,85,161,134,89,49,124, - 199,96,222,217,100,185,118,238,60,213,220,47,28,233,29,61,151,245,207,66, - 16,223,169,38,45,218,250,57,23,183,60,227,183,222,253,230,145,203,143,112, - 237,29,151,138,254,147,74,173,104,54,239,44,170,226,158,20,132,251,143,123, - 254,175,212,122,67,55,152,242,129,247,247,139,58,183,125,9,36,214,70,59, - 66,87,181,246,78,158,13,23,193,86,39,120,128,213,218,231,193,7,255,63, - 110,164,45,154,222,13,206,232,57,61,127,143,137,3,68,113,233,34,124,244, - 221,26,115,109,232,172,43,223,175,197,160,114,171,36,47,216,86,125,13,170, - 207,4,80,79,164,46,214,150,51,4,117,52,36,220,40,39,48,79,159,41, - 132,196,187,176,38,109,220,126,227,53,23,183,44,128,252,212,51,75,171,42, - 90,197,124,181,44,41,197,14,116,209,49,69,95,171,191,133,230,202,176,114, - 44,197,170,153,77,227,238,42,236,181,33,145,81,165,187,241,204,176,102,21, - 166,13,159,180,225,163,175,41,162,134,197,70,27,103,69,102,231,162,70,212, - 158,151,238,165,164,151,135,176,170,212,252,13,33,121,32,115,137,94,3,27, - 109,24,68,238,65,206,118,207,162,84,84,169,95,187,203,129,121,192,182,5, - 119,251,24,92,84,124,94,78,118,127,187,196,18,112,159,173,102,120,150,71, - 30,185,76,188,89,215,90,116,249,190,79,43,108,18,134,225,222,81,57,226, - 158,20,132,251,143,123,18,184,52,77,241,188,14,169,29,240,59,191,98,201, - 183,127,235,5,146,248,8,107,35,252,224,214,29,239,191,237,162,172,83,117, - 47,238,203,186,43,93,148,107,115,174,40,19,168,159,160,203,118,116,22,156, - 219,76,95,120,194,199,255,232,132,36,108,21,66,150,207,127,203,173,157,188, - 4,192,78,83,8,199,197,145,213,39,108,205,181,104,153,58,55,222,74,227, - 93,154,56,1,204,12,2,219,79,221,241,70,149,226,239,104,195,208,134,168, - 176,129,247,9,143,229,249,0,219,56,83,90,115,99,136,31,109,163,255,92, - 54,171,205,134,78,72,207,71,197,227,234,94,90,36,166,216,179,10,221,155, - 20,130,53,1,130,111,117,25,133,118,160,73,27,62,157,70,86,171,117,21, - 188,171,19,66,207,22,73,35,234,163,51,119,14,3,93,186,82,63,108,209, - 95,151,137,70,43,101,144,187,39,179,239,182,239,196,110,161,27,152,179,154, - 248,236,45,86,205,168,56,7,251,180,198,123,79,236,94,63,151,243,131,153, - 47,241,250,175,50,251,138,186,85,88,102,184,186,23,45,180,15,212,226,169, - 9,174,64,94,169,168,146,69,233,220,138,118,143,105,92,45,19,112,239,79, - 46,106,99,224,56,251,62,193,125,182,74,215,164,82,51,176,151,56,63,124, - 156,143,126,236,35,104,255,57,130,70,179,176,226,252,61,5,220,190,31,208, - 212,121,114,201,174,235,90,16,132,183,158,123,116,81,106,226,56,198,152,152, - 115,231,206,243,190,47,191,82,148,0,196,155,228,46,38,118,215,217,157,213, - 117,10,23,209,214,28,184,42,85,11,14,156,101,86,173,211,242,35,151,28, - 146,199,205,246,158,83,216,32,189,166,89,158,47,55,187,124,179,167,149,186, - 52,253,75,105,81,184,13,206,69,184,85,181,128,141,74,31,92,171,107,89, - 206,103,181,191,215,234,199,212,150,197,155,137,86,193,213,250,177,171,91,190, - 14,76,121,126,80,59,111,0,86,26,191,237,209,105,196,181,76,78,112,194, - 26,110,234,155,118,30,143,179,3,247,188,59,141,152,105,187,73,75,55,139, - 152,30,184,132,154,244,82,90,36,182,128,75,68,42,158,67,38,132,193,122, - 83,140,179,201,137,212,117,78,139,82,17,214,134,4,177,95,212,193,109,143, - 203,1,246,196,222,96,123,122,128,91,55,230,220,185,107,60,253,100,90,196, - 223,170,22,92,149,60,254,166,26,158,212,192,9,194,125,204,235,226,162,12, - 252,37,90,107,62,244,145,71,185,124,201,137,81,158,48,82,157,197,5,165, - 171,242,246,238,202,16,104,113,55,173,186,246,89,112,241,86,207,203,110,219, - 195,188,19,56,239,149,27,126,230,154,84,23,93,76,42,111,97,181,15,175, - 219,166,249,110,83,19,65,171,50,235,37,92,163,175,169,186,203,175,31,160, - 70,148,238,198,236,187,85,145,75,169,207,132,162,26,135,83,23,221,249,129, - 19,26,117,214,186,174,32,245,80,145,139,23,62,165,203,4,147,156,48,203, - 140,204,142,153,11,98,248,144,113,46,87,178,172,200,176,1,45,235,44,183, - 108,109,85,16,129,50,185,100,165,107,194,156,211,59,95,185,45,115,83,170, - 176,129,190,166,240,223,147,77,96,88,248,152,77,167,40,149,80,42,143,129, - 213,251,132,222,154,109,185,43,23,138,161,119,114,39,16,107,195,236,88,101, - 39,147,40,114,23,11,46,35,119,188,213,185,100,123,238,91,233,190,180,182, - 135,34,228,93,239,252,114,206,95,122,144,229,170,188,232,104,54,155,248,190, - 79,72,54,239,47,125,45,61,52,5,65,120,43,184,103,129,51,201,18,63, - 56,67,20,109,184,244,176,207,179,31,62,143,181,47,163,85,93,112,182,133, - 110,31,119,59,209,123,155,69,234,10,189,243,86,93,245,4,132,108,74,51, - 41,106,104,105,117,173,171,103,203,72,222,161,241,159,241,72,62,232,237,88, - 113,145,81,78,200,154,17,140,84,17,7,43,206,59,203,96,212,87,118,45, - 188,92,84,0,39,24,153,200,121,157,164,236,38,114,59,194,178,252,160,102, - 105,13,65,61,165,234,177,186,19,112,9,33,96,134,101,65,190,85,17,54, - 218,20,73,48,106,234,206,83,141,246,29,33,91,147,61,151,148,33,230,172, - 118,214,233,74,57,1,84,107,87,95,135,235,238,146,108,215,254,155,221,102, - 0,101,151,153,22,158,126,136,208,150,237,221,76,103,200,216,120,180,154,251, - 99,108,185,184,85,59,153,52,27,41,169,157,108,137,219,138,242,234,96,76, - 62,44,215,29,99,86,196,223,206,13,47,243,213,207,60,194,98,222,97,31, - 42,236,16,134,33,157,182,45,220,147,185,245,38,61,40,5,225,254,228,158, - 4,46,142,99,188,138,72,28,157,105,240,167,190,255,99,92,190,116,30,63, - 184,133,218,211,251,175,108,159,180,43,118,167,169,131,43,41,39,122,195,190, - 90,56,247,183,96,43,217,67,181,141,219,220,251,105,125,132,203,72,161,46, - 121,59,46,69,112,165,0,224,68,65,15,97,213,244,106,98,163,108,88,20, - 79,55,223,109,246,118,39,201,55,127,86,186,176,140,244,176,180,176,170,247, - 49,198,20,143,87,45,51,200,45,173,133,110,96,7,186,16,163,226,216,56, - 139,41,63,86,46,90,132,10,125,205,213,163,21,142,220,76,108,245,53,229, - 250,82,102,214,155,61,206,220,168,81,51,123,110,77,162,70,246,252,179,178, - 9,157,9,134,26,129,213,77,104,165,152,133,79,112,28,20,214,228,188,189, - 34,29,131,157,142,152,142,207,48,221,178,64,157,117,93,190,223,131,174,229, - 70,218,34,81,61,18,117,84,220,190,90,251,133,91,179,74,245,182,220,130, - 203,91,193,237,47,11,200,159,121,181,171,73,89,87,249,85,95,245,33,30, - 121,228,114,113,204,147,220,147,57,42,155,38,46,241,55,65,184,127,185,199, - 105,2,238,159,124,179,49,132,97,3,176,92,122,216,231,91,190,229,44,155, - 205,205,98,221,62,161,131,61,238,203,187,178,224,74,18,229,174,194,13,3, - 12,131,34,21,125,147,212,55,31,125,238,60,55,150,1,145,81,76,219,149, - 204,204,129,179,70,108,123,229,68,35,79,171,63,118,226,85,139,109,93,209, - 101,226,70,133,208,179,78,8,70,10,29,152,82,92,112,2,84,141,83,85, - 143,101,251,105,25,87,203,4,175,90,24,110,7,212,93,162,185,27,241,72, - 163,250,186,38,110,64,81,108,157,139,150,237,167,152,179,78,12,85,51,42, - 206,167,224,204,168,86,202,160,70,206,205,168,42,47,121,30,143,171,90,112, - 249,239,42,45,45,183,194,74,59,239,209,109,118,80,103,170,230,160,75,24, - 177,54,116,227,114,182,152,204,235,207,99,154,150,86,145,82,187,159,157,237, - 219,150,203,52,107,50,144,55,85,206,147,74,170,69,221,235,82,216,84,238, - 206,140,104,53,31,227,195,207,126,136,102,251,37,154,237,151,56,31,26,98, - 179,113,238,201,32,40,178,39,161,94,255,38,226,38,8,247,55,247,232,162, - 180,120,94,167,248,71,183,54,162,221,50,124,205,71,63,198,149,75,143,87, - 214,213,83,181,247,89,117,249,237,138,176,214,173,196,113,119,201,42,237,230, - 182,0,237,110,144,189,11,45,151,206,190,229,250,83,125,231,126,76,246,164, - 130,3,152,163,122,241,118,237,44,61,139,126,164,220,212,107,137,126,153,213, - 86,196,162,178,234,237,237,100,64,219,79,139,191,109,147,54,124,212,212,9, - 108,122,41,197,28,237,89,212,74,49,125,39,52,185,200,218,1,117,87,105, - 70,100,20,233,153,242,246,105,187,233,50,31,243,180,255,104,247,60,102,113, - 121,155,57,2,187,245,214,152,155,13,142,55,1,233,67,71,216,227,20,99, - 250,164,179,82,161,149,138,88,69,251,221,128,119,67,110,193,217,245,202,137, - 91,90,90,104,187,45,185,242,130,238,186,184,1,40,134,124,195,239,250,54, - 30,125,220,16,111,220,147,153,241,96,217,193,164,82,19,25,134,45,124,63, - 144,246,92,130,240,54,225,158,254,59,243,68,145,32,8,72,83,67,28,7, - 4,254,146,143,255,174,144,79,126,234,119,102,171,234,45,250,79,18,57,181, - 85,235,86,183,230,78,223,189,98,146,154,194,130,203,231,194,237,195,180,157, - 75,179,90,148,157,167,186,235,192,20,77,142,161,110,241,120,221,122,146,129, - 178,97,173,14,172,184,29,39,50,73,48,34,56,206,172,145,168,137,231,121, - 133,203,111,175,64,109,63,102,86,102,80,140,223,201,45,190,145,194,111,123, - 165,101,88,113,125,230,108,39,141,212,146,81,34,151,253,168,58,166,16,173, - 94,176,118,110,71,181,222,17,174,109,209,181,3,240,179,241,67,193,113,128, - 231,121,36,211,17,83,83,191,56,89,166,217,197,207,210,99,158,60,82,115, - 45,54,27,49,219,23,31,137,58,226,56,109,227,165,165,8,238,115,81,2, - 180,26,30,13,78,170,63,171,38,151,148,19,187,119,142,209,124,7,159,252, - 230,175,38,77,174,113,225,204,134,120,179,46,138,187,183,203,3,164,123,137, - 32,188,189,184,71,23,101,185,9,105,237,209,104,120,40,61,36,89,69,252, - 240,95,62,207,83,79,188,159,102,112,51,235,22,49,32,229,58,205,198,12, - 50,1,83,140,11,161,171,142,53,185,179,5,87,254,190,74,30,226,165,245, - 121,18,213,99,109,206,225,243,24,195,214,216,109,138,186,93,73,100,40,239, - 19,220,60,162,249,85,47,192,239,108,225,135,43,210,126,185,145,69,143,198, - 152,139,30,73,216,114,49,164,104,83,136,136,178,33,216,41,246,170,170,221, - 199,182,87,168,101,38,64,87,39,101,17,247,72,225,199,199,206,109,24,53, - 139,216,90,33,120,217,26,112,69,227,133,107,84,149,231,154,247,142,244,46, - 100,86,238,212,185,30,189,107,238,113,193,185,16,93,86,100,10,199,45,212, - 213,9,106,170,11,87,162,190,166,80,143,59,119,230,224,184,69,56,13,157, - 11,114,165,241,26,11,236,86,231,124,101,221,185,170,38,36,75,3,81,179, - 56,167,110,246,60,25,169,66,4,237,116,68,114,220,199,243,166,244,22,45, - 218,211,11,44,30,82,76,31,61,143,93,122,164,233,0,19,239,166,167,174, - 55,1,238,226,103,133,210,110,122,246,113,218,102,164,151,52,125,93,12,24, - 85,217,64,62,39,116,77,160,233,92,148,122,90,100,202,174,214,51,44,47, - 96,185,14,124,137,178,230,109,237,190,171,47,214,44,55,119,192,75,252,240, - 247,125,130,222,40,64,251,207,241,234,188,71,208,104,210,106,89,210,216,219, - 41,238,222,55,224,84,10,188,5,225,254,229,117,245,175,104,237,225,121,26, - 213,240,104,120,93,254,212,95,248,16,157,222,123,105,52,206,98,121,1,69, - 72,180,49,52,27,113,17,43,129,109,171,110,223,213,250,182,5,215,172,173, - 59,31,58,225,200,99,113,57,219,49,184,84,61,4,128,93,228,2,228,220, - 145,185,181,5,46,150,102,7,174,30,109,95,194,201,237,178,22,155,102,127, - 76,166,152,38,96,250,101,2,201,218,197,48,243,199,176,183,198,187,235,115, - 246,156,71,225,114,204,11,176,247,196,169,138,181,123,50,35,171,22,218,176, - 149,13,96,157,12,139,226,236,242,100,42,153,151,211,20,205,216,125,13,93, - 50,140,217,116,152,197,165,139,119,22,27,22,115,119,254,157,151,44,214,184, - 247,100,17,103,110,211,60,181,127,207,180,245,85,242,16,35,189,68,181,77, - 33,110,142,253,22,252,42,242,177,235,21,171,85,53,166,151,39,150,228,63, - 143,9,155,93,26,205,252,241,179,216,155,237,241,137,111,248,20,151,30,61, - 79,167,91,183,244,211,52,164,209,174,255,107,228,214,91,213,61,41,8,194, - 253,205,235,30,64,112,150,92,3,207,11,248,228,55,53,249,206,239,250,8, - 241,166,62,113,57,218,152,157,30,128,219,245,74,187,86,92,149,50,158,82, - 208,41,147,56,54,105,7,165,34,26,126,61,177,67,219,151,0,152,197,3, - 204,166,131,190,6,28,105,44,83,172,30,97,85,228,92,131,89,41,0,236, - 186,230,88,101,9,41,121,214,97,94,31,214,178,172,61,235,210,255,7,174, - 203,73,149,227,77,0,222,180,72,204,49,155,14,180,154,206,37,216,79,157, - 5,183,197,78,7,127,242,14,41,117,247,166,178,205,157,100,19,112,217,142, - 121,140,207,174,203,99,25,99,220,87,46,164,89,50,72,158,29,105,117,249, - 156,189,198,2,99,140,107,221,165,70,133,85,232,14,228,68,163,23,120,152, - 66,8,179,100,18,211,99,122,238,18,0,105,90,222,167,234,110,12,26,93, - 170,239,99,203,119,239,79,222,193,100,155,122,98,137,83,104,39,110,199,217, - 231,103,76,153,88,226,74,2,44,99,162,245,156,117,84,255,44,92,24,125, - 136,15,63,251,33,46,92,30,146,164,19,130,70,115,111,107,174,192,243,105, - 239,9,199,74,130,137,32,220,255,188,33,17,242,32,8,138,13,224,187,254, - 240,53,158,126,242,236,206,154,48,200,69,175,62,155,171,30,39,217,30,210, - 182,231,177,26,77,142,211,54,201,242,44,166,51,172,165,152,239,195,251,213, - 236,113,22,30,201,149,97,153,144,145,58,211,37,244,172,179,170,242,177,47, - 173,250,198,168,194,70,97,17,217,1,101,241,118,180,113,22,92,150,122,159, - 11,96,18,184,197,125,47,194,78,71,24,99,106,113,42,151,212,2,106,243, - 106,237,113,66,207,22,5,225,80,38,194,164,12,93,202,191,231,193,74,163, - 108,19,187,206,50,29,87,251,223,206,60,219,49,56,14,156,176,102,98,228, - 121,30,198,152,90,162,9,0,43,55,250,38,89,58,11,45,23,101,221,115, - 174,194,105,187,89,136,162,93,120,204,226,1,203,84,49,139,7,216,165,135, - 53,61,210,116,64,154,14,121,117,114,149,249,106,132,217,28,177,152,214,221, - 148,238,194,167,124,45,86,201,67,28,159,84,72,109,163,202,176,212,202,248, - 36,181,194,178,38,229,58,101,59,174,82,220,148,154,129,186,81,115,79,54, - 154,125,190,241,227,31,113,137,37,102,83,36,151,180,90,150,192,107,224,7, - 1,158,31,16,120,62,94,224,147,218,50,185,196,189,110,74,106,223,4,225, - 109,192,27,154,2,214,246,21,239,124,84,241,23,255,242,51,92,56,202,26, - 24,103,22,64,20,187,89,110,121,77,146,101,188,99,213,213,217,117,83,77, - 23,238,210,58,191,242,182,203,106,60,196,109,90,174,14,174,220,68,211,115, - 239,197,46,157,197,225,119,82,212,53,88,109,165,168,171,209,238,109,57,86, - 69,187,197,219,148,173,172,246,89,93,181,196,11,211,103,52,118,34,110,38, - 190,19,192,106,191,202,65,189,181,149,187,173,236,3,169,6,89,13,90,214, - 165,223,174,157,53,152,215,171,229,46,208,194,237,58,82,36,193,136,100,86, - 10,21,222,180,230,122,84,29,83,207,230,108,53,107,110,82,99,204,78,235, - 46,112,226,102,76,223,197,217,102,67,210,217,176,16,183,69,220,103,101,82, - 252,176,143,97,192,171,105,183,118,223,114,154,64,221,18,223,182,162,202,59, - 132,59,165,1,138,227,44,209,233,122,165,44,160,94,204,189,123,210,231,248, - 221,207,254,17,190,233,247,127,20,160,16,183,252,113,243,206,37,224,38,119, - 55,148,217,42,13,112,194,150,166,39,119,89,17,4,225,254,224,117,23,56, - 151,77,89,166,233,219,141,225,67,95,115,145,31,248,193,103,57,58,115,133, - 148,235,153,245,22,86,196,173,210,54,105,235,119,199,254,145,57,107,253,192, - 206,109,166,61,168,116,171,207,187,101,184,137,4,121,12,174,101,58,172,204, - 144,169,119,3,53,210,180,186,78,44,34,227,172,32,213,215,132,15,237,246, - 103,204,155,20,155,163,44,245,126,82,198,203,242,100,20,171,162,253,221,64, - 50,65,177,11,143,227,74,204,79,245,143,107,5,223,39,145,198,30,106,170, - 153,197,153,91,51,218,184,100,144,141,75,244,41,172,184,124,125,127,204,180, - 221,68,15,157,128,1,197,218,169,9,157,56,109,58,165,248,142,20,41,67, - 198,171,14,102,226,206,37,30,185,247,209,243,60,148,109,146,206,6,48,114, - 31,153,120,224,46,84,150,169,42,226,108,105,58,96,182,190,196,34,238,99, - 54,71,88,70,220,140,250,172,205,185,90,151,146,58,121,91,54,103,141,119, - 173,19,112,47,235,78,18,182,78,104,14,154,183,124,227,5,156,168,93,207, - 190,38,217,197,82,180,147,84,98,109,143,247,63,249,45,69,205,91,254,152, - 121,239,201,100,157,189,150,105,72,167,217,192,164,109,26,157,193,78,105,0, - 200,244,0,65,120,59,240,134,196,224,170,238,155,102,215,109,94,223,253,199, - 190,142,239,252,174,143,240,192,145,79,20,39,88,70,69,1,120,89,8,62, - 222,42,31,168,6,63,170,22,156,115,107,78,183,170,0,226,240,2,105,26, - 22,113,158,122,146,201,154,91,43,183,41,45,209,52,231,89,170,254,104,84, - 184,41,115,114,183,226,62,34,163,74,177,170,22,72,103,83,5,78,67,47, - 112,41,245,238,4,250,59,130,152,11,17,184,84,252,106,157,94,239,252,198, - 21,120,55,236,78,42,127,212,176,197,185,169,169,166,23,172,177,186,116,37, - 22,201,53,25,181,223,213,110,47,207,213,205,222,206,249,212,206,51,179,222, - 128,194,106,203,121,53,237,114,51,202,74,37,84,111,39,1,104,31,205,208, - 43,222,195,219,82,244,49,125,57,187,16,250,18,46,99,114,114,162,176,97, - 207,241,222,199,62,206,119,126,247,199,120,234,203,207,241,234,111,45,107,113, - 183,102,179,73,163,173,9,91,45,218,109,139,23,248,116,218,187,197,249,226, - 158,20,132,183,15,111,152,139,50,8,2,26,13,151,85,217,233,244,104,251, - 138,255,240,135,30,227,219,191,243,143,210,104,60,90,17,178,85,229,203,113, - 187,217,93,142,144,176,185,155,205,152,215,45,229,133,222,170,21,215,90,117, - 157,11,191,8,128,238,84,50,3,123,206,42,25,175,58,132,113,185,201,23, - 201,20,123,106,220,188,129,115,183,206,226,38,94,62,21,168,178,206,230,138, - 85,17,141,106,171,170,106,214,161,215,88,48,238,15,119,27,29,23,199,90, - 215,154,33,79,155,157,90,79,201,42,213,242,3,211,239,163,38,160,178,167, - 225,199,46,198,56,101,3,227,173,54,84,222,20,53,210,104,198,244,215,229, - 85,67,223,139,156,59,211,155,214,74,23,186,205,14,126,39,101,153,42,116, - 171,75,154,214,197,209,108,92,224,112,20,122,132,246,1,218,217,5,68,20, - 62,150,173,88,19,172,239,56,217,148,36,185,221,172,55,182,58,150,212,173, - 182,122,49,119,200,123,30,251,8,223,243,189,223,198,147,95,118,196,124,114, - 157,51,15,215,99,125,81,164,241,116,183,150,88,226,251,94,205,122,19,113, - 19,132,183,23,111,104,12,206,218,136,77,230,46,52,38,198,111,76,248,211, - 127,254,34,63,244,3,223,129,37,164,213,252,34,206,26,107,101,95,199,197, - 151,219,184,86,148,137,38,121,183,147,93,151,85,160,219,204,120,144,36,142, - 217,168,35,208,83,160,137,93,175,178,150,97,33,112,1,128,49,23,73,23, - 83,60,53,37,252,162,235,182,226,189,223,29,39,119,205,1,168,193,152,124, - 56,248,132,204,5,153,187,0,87,235,50,110,118,222,67,45,91,172,154,145, - 179,160,142,91,232,222,196,9,164,117,73,25,189,44,86,104,76,31,99,250, - 180,245,136,101,122,204,116,236,172,163,94,224,21,173,195,172,62,227,68,37, - 39,106,186,86,91,217,8,158,209,67,78,128,194,141,114,241,182,76,128,160, - 18,235,83,3,188,233,148,105,187,73,146,137,237,241,48,116,143,61,189,64, - 91,143,152,197,134,89,60,160,183,104,97,167,35,212,48,75,30,81,3,48, - 153,96,229,113,58,211,47,187,154,28,167,232,107,48,157,101,217,160,89,172, - 114,17,247,177,140,72,120,4,219,24,16,218,7,88,173,206,17,233,171,44, - 205,4,211,25,226,249,151,208,234,121,172,29,48,141,198,53,55,116,191,167, - 48,155,46,105,236,161,117,68,75,103,19,2,86,227,74,253,155,139,187,41, - 181,2,62,15,60,7,60,15,89,252,118,183,206,237,28,216,115,133,184,189, - 251,9,159,36,157,236,140,195,105,54,155,12,71,77,252,70,118,225,225,245, - 209,94,119,71,220,182,187,150,24,115,114,35,1,65,16,222,122,222,80,129, - 83,42,204,54,134,210,186,57,223,241,248,250,223,59,227,207,253,217,63,134, - 181,79,1,35,156,139,233,75,148,98,230,18,7,202,148,239,93,162,117,25, - 231,211,129,33,12,179,169,211,149,161,151,171,85,146,109,162,121,218,184,35, - 73,174,176,60,126,39,43,207,109,80,73,197,71,88,36,87,140,148,43,7, - 208,205,90,125,91,43,75,161,215,67,215,249,3,234,133,217,144,165,240,143, - 244,86,47,198,109,92,42,124,238,170,236,5,235,221,153,109,224,198,223,192, - 78,3,231,90,173,156,233,151,177,184,204,237,104,251,41,189,243,27,108,223, - 58,193,26,55,88,166,10,53,45,159,75,91,151,46,184,68,141,202,241,55, - 222,164,214,15,179,186,6,32,89,151,153,170,219,174,73,128,213,234,28,73, - 183,75,210,237,162,218,6,195,168,72,253,119,243,2,93,252,44,108,120,228, - 9,64,147,201,243,0,180,186,125,180,215,227,213,105,74,55,123,138,69,114, - 137,157,100,163,150,94,38,101,12,188,64,121,225,179,223,173,249,158,199,62, - 194,159,250,238,167,121,247,19,62,190,30,16,111,214,197,32,83,200,186,214, - 100,86,89,195,215,197,196,128,125,24,83,183,178,247,77,174,23,4,225,254, - 225,13,110,164,231,210,217,243,236,189,129,55,166,209,94,243,142,119,63,202, - 119,253,225,107,252,200,95,255,118,62,240,228,19,192,144,48,200,107,162,170, - 153,148,213,102,185,85,154,228,87,244,190,30,16,69,154,40,114,79,165,215, - 14,92,95,66,59,193,114,157,86,176,219,201,100,186,80,172,122,15,208,121, - 201,146,78,221,102,54,124,184,177,19,163,130,210,170,51,11,31,179,240,93, - 162,73,171,158,209,169,108,147,112,163,234,29,74,242,251,87,178,21,23,115, - 191,38,48,189,192,195,243,166,46,9,228,76,105,153,230,226,18,25,85,235, - 7,105,7,48,238,151,235,166,38,4,211,199,27,151,22,159,10,43,217,138, - 91,113,181,92,208,170,231,144,187,75,109,223,214,215,103,143,91,205,0,245, - 237,49,140,52,126,243,22,109,109,177,75,15,191,151,101,115,50,194,48,226, - 56,50,180,178,243,111,123,229,241,242,194,109,55,171,205,13,54,141,54,47, - 226,222,227,38,131,193,85,0,38,19,119,129,114,116,190,199,42,237,210,106, - 38,69,121,128,179,220,94,38,229,58,138,95,201,142,124,29,212,175,129,186, - 81,190,78,182,7,246,18,127,244,219,62,197,247,124,239,183,113,237,131,239, - 6,96,21,189,66,208,112,207,171,219,238,209,108,54,105,53,7,181,142,37, - 38,109,23,174,201,124,98,55,184,158,147,219,238,73,73,52,17,132,251,155, - 219,167,238,221,3,105,90,94,237,26,99,104,181,90,76,230,67,48,41,138, - 49,151,30,30,240,123,62,117,133,43,151,159,225,239,255,55,87,248,199,255, - 228,159,1,249,38,53,166,154,218,223,106,250,172,182,18,42,242,24,156,219, - 244,40,122,7,218,52,204,38,59,223,192,242,60,81,156,187,65,221,198,22, - 218,7,24,94,48,76,127,233,159,211,120,52,75,200,208,30,221,116,196,34, - 126,21,76,72,15,156,245,149,213,198,85,133,43,56,14,48,198,71,143,128, - 113,22,27,91,195,241,166,203,168,17,187,204,68,54,244,134,41,160,193,14, - 153,197,165,160,204,181,7,115,55,182,103,22,27,122,65,54,220,52,203,78, - 84,3,247,152,145,81,206,37,26,174,177,3,69,126,132,92,223,188,91,208, - 31,58,23,91,18,140,96,1,253,78,131,100,161,241,200,234,229,178,99,78, - 103,19,224,12,203,20,172,246,220,200,160,229,57,150,237,253,169,238,118,225, - 97,178,97,163,125,47,2,227,26,40,247,206,104,32,197,140,70,44,83,208, - 173,46,241,180,30,163,28,133,30,179,44,240,55,51,154,132,51,244,155,89, - 178,74,242,69,194,198,13,214,155,234,251,155,53,67,54,207,1,231,8,195, - 148,212,44,153,205,93,38,229,106,237,163,212,36,43,9,120,25,203,117,20, - 95,2,94,0,245,197,226,113,27,205,62,155,245,20,107,123,188,247,177,143, - 243,245,223,248,45,60,253,100,202,249,75,71,36,233,132,120,179,46,146,74, - 98,179,97,189,94,211,233,118,11,113,203,25,244,245,78,214,100,163,33,66, - 38,8,111,71,222,48,129,211,90,23,34,231,121,30,155,77,66,183,117,6, - 99,44,139,197,12,173,22,52,85,196,147,79,183,248,193,107,95,203,215,60, - 123,149,191,247,19,63,203,47,252,219,255,135,48,232,18,197,47,146,111,130, - 171,117,66,213,106,131,117,225,162,204,221,77,65,220,38,33,102,169,116,209, - 89,222,197,241,220,44,176,243,163,139,124,244,107,191,22,88,50,159,46,232, - 63,242,16,105,10,90,79,176,166,135,33,165,51,135,5,175,66,166,103,227, - 85,135,254,194,67,85,146,82,166,108,232,147,37,146,168,20,99,102,96,250, - 244,1,179,113,130,211,167,65,210,62,139,26,165,44,179,56,92,94,0,221, - 38,101,137,134,229,12,213,62,195,44,126,149,62,101,50,8,106,0,209,146, - 48,183,56,163,38,140,98,192,214,172,188,36,24,49,99,85,196,247,192,37, - 178,180,53,76,27,9,61,124,204,104,228,238,151,185,7,243,174,254,118,6, - 202,155,145,206,134,40,207,195,116,19,150,169,162,63,210,197,4,0,223,24, - 236,194,67,245,157,224,245,59,13,204,241,0,187,240,89,104,139,194,96,230, - 170,136,189,25,70,164,27,208,161,115,99,26,70,116,189,1,96,72,129,70, - 103,192,35,143,132,124,227,215,27,126,238,95,254,44,47,223,186,158,189,55, - 67,247,221,187,182,243,25,242,27,134,86,51,65,113,76,154,89,228,138,231, - 128,9,141,112,194,102,237,132,109,29,89,180,61,34,108,60,202,199,63,246, - 53,124,248,89,55,219,173,217,126,137,85,244,138,251,124,52,154,248,122,64, - 215,126,9,52,152,86,128,239,251,120,89,127,201,106,191,201,186,229,150,13, - 113,21,107,77,16,222,118,188,97,2,87,69,107,77,163,225,99,140,193,243, - 20,157,142,187,162,215,65,130,158,107,146,230,139,124,229,87,6,92,185,252, - 12,63,249,63,94,229,167,254,233,207,16,221,154,83,186,39,183,99,29,229, - 21,119,126,101,222,104,107,154,97,7,102,183,104,119,54,172,214,47,0,17, - 231,71,61,126,207,215,189,151,103,191,238,195,188,255,61,49,42,213,196,203, - 17,227,104,74,191,99,25,207,70,12,123,199,204,129,174,118,110,188,89,172, - 232,140,128,35,15,99,18,188,197,20,99,178,102,194,180,176,128,81,3,52, - 183,152,154,144,94,230,218,52,166,207,50,61,134,225,134,54,96,175,107,210, - 11,125,148,55,43,10,160,231,56,81,5,39,122,170,125,134,233,248,85,6, - 64,171,107,73,113,22,111,190,157,26,99,64,13,88,53,103,132,35,141,19, - 172,140,241,3,24,93,141,23,169,172,118,225,149,157,247,160,154,206,15,206, - 55,157,166,3,60,111,230,92,167,109,67,178,62,194,227,6,203,84,209,203, - 138,184,151,102,69,219,244,241,113,150,229,139,15,40,142,90,29,44,19,151, - 141,90,177,172,117,56,98,181,240,105,15,6,216,108,138,94,234,59,81,245, - 2,159,39,63,120,129,31,120,216,231,201,159,180,252,207,63,249,155,252,210, - 231,63,159,89,216,238,253,29,12,220,125,76,58,199,211,93,76,82,186,166, - 195,198,13,162,77,126,193,178,98,29,89,20,231,216,68,33,173,166,207,187, - 31,255,56,31,253,216,71,120,234,201,75,156,125,248,6,241,230,57,202,161, - 183,78,220,148,90,49,103,72,167,219,165,239,67,236,7,69,220,45,12,91, - 69,167,18,213,240,106,137,37,34,110,130,240,246,228,77,17,184,156,220,146, - 171,162,189,46,131,17,238,171,55,230,242,247,95,227,155,190,229,42,159,251, - 133,223,224,199,126,236,239,50,91,250,172,214,121,91,175,33,165,216,185,141, - 51,143,169,0,44,102,83,230,203,25,190,250,117,46,28,193,31,252,174,63, - 200,215,124,248,17,158,254,178,144,205,234,11,108,230,206,234,211,225,136,52, - 2,187,158,208,239,28,23,189,18,231,128,158,104,218,164,24,160,101,64,77, - 167,152,126,223,141,125,73,7,244,130,50,137,5,112,41,247,129,19,55,53, - 85,208,61,83,132,17,231,23,178,122,185,76,220,130,105,200,186,235,206,255, - 216,91,112,201,180,136,178,158,149,241,96,136,190,2,10,103,245,154,133,27, - 124,234,183,61,118,199,171,214,81,83,133,30,77,32,53,160,44,29,255,65, - 210,134,102,161,173,123,82,149,115,168,18,76,67,94,57,210,156,37,117,221, - 72,46,116,240,158,187,81,91,211,91,180,48,56,43,110,94,217,232,237,210, - 195,196,187,37,20,73,183,203,218,104,186,30,140,141,199,81,87,147,208,194, - 196,9,30,183,184,124,249,136,111,255,67,191,131,143,62,251,44,255,239,191, - 125,142,127,241,207,127,150,127,242,191,253,19,166,51,203,100,50,225,232,92, - 23,159,22,201,134,194,186,178,246,101,86,155,69,22,187,203,58,185,16,18, - 54,47,21,22,219,163,143,27,130,70,147,120,243,34,208,44,62,23,237,86, - 143,174,29,179,246,134,232,192,185,177,61,221,69,133,150,78,214,138,171,42, - 110,219,89,147,34,110,130,240,246,229,77,17,184,106,91,163,32,112,219,181, - 73,150,116,91,103,216,120,27,166,147,47,1,208,233,245,192,83,60,250,216, - 171,60,124,233,50,191,251,155,254,42,63,247,127,254,6,191,245,98,194,243, - 191,246,155,60,247,194,115,172,163,155,220,122,245,92,113,188,102,107,132,151, - 88,54,203,148,70,59,224,125,79,60,198,15,254,165,7,249,208,71,30,101, - 208,189,142,137,19,116,114,76,91,25,218,189,144,241,140,76,66,156,69,178, - 52,3,20,199,12,87,27,32,196,12,39,44,209,244,6,3,204,196,173,81, - 83,133,205,54,186,89,219,208,214,35,22,218,163,211,62,7,220,100,22,15, - 232,204,179,248,218,18,84,251,6,211,115,239,71,51,33,77,7,133,197,118, - 67,181,56,55,95,17,247,225,200,116,128,148,116,54,68,95,186,14,83,72, - 23,231,240,134,47,3,89,159,200,5,248,109,202,110,43,67,152,100,117,108, - 189,204,139,182,76,21,29,242,100,22,197,50,133,54,192,99,41,186,213,35, - 93,205,43,157,70,134,172,76,74,39,152,226,141,47,16,247,35,142,76,7, - 221,181,164,171,57,250,229,121,54,39,111,127,77,94,203,116,56,102,133,181, - 3,110,178,36,207,17,53,217,79,121,236,173,155,37,151,28,101,22,89,224, - 249,180,26,138,216,79,73,205,28,79,195,187,158,60,195,133,139,231,249,250, - 223,253,251,248,174,95,122,6,188,107,28,157,123,158,213,226,21,23,179,107, - 180,8,18,23,95,13,26,62,163,158,207,67,15,61,193,181,43,191,151,171, - 143,94,230,225,139,62,143,60,114,153,135,30,246,153,71,51,176,83,214,145, - 169,197,217,242,50,128,25,15,210,0,154,205,81,86,10,96,8,26,103,241, - 244,50,115,75,214,39,5,236,43,9,168,126,150,69,244,4,225,237,129,154, - 126,250,157,182,247,137,207,191,105,15,232,226,114,206,173,86,173,145,139,162, - 136,36,137,73,18,67,148,13,27,103,64,115,223,0,0,22,62,73,68,65, - 84,141,162,136,77,146,98,146,152,104,229,110,91,175,119,91,118,5,186,77, - 163,173,107,29,224,243,62,130,0,58,201,18,55,226,27,108,230,174,52,64, - 165,19,214,179,57,77,207,89,44,253,76,132,84,211,173,213,186,204,230,204, - 5,42,39,143,163,41,207,213,93,181,76,199,197,213,182,152,173,93,55,253, - 150,167,89,153,148,48,57,42,142,223,156,71,196,253,136,174,206,30,111,48, - 33,152,140,153,244,44,189,192,67,117,12,241,217,91,4,47,63,130,122,105, - 202,228,255,90,208,249,202,139,46,219,49,35,31,75,147,159,67,113,190,47, - 207,121,113,230,49,124,180,147,189,230,153,187,48,19,184,86,182,121,55,231, - 17,235,110,88,60,215,252,121,42,111,70,167,155,160,166,138,69,23,194,89, - 159,149,183,40,132,50,63,102,53,254,134,30,49,83,195,34,246,54,54,30, - 173,206,121,218,254,26,63,28,21,29,249,181,87,102,121,38,137,123,127,162, - 104,133,137,19,98,179,91,154,16,84,172,172,237,181,171,200,125,22,162,213, - 170,246,185,176,182,85,12,45,5,215,0,32,143,183,85,93,146,176,191,152, - 27,120,221,172,183,217,103,222,197,224,155,191,112,207,199,17,4,225,238,121, - 83,93,148,57,90,123,196,113,140,231,41,140,113,27,118,24,134,68,89,200, - 37,12,91,44,150,138,192,75,128,132,85,194,206,116,229,245,122,141,181,45, - 122,124,137,56,104,226,251,149,238,28,94,31,147,130,223,89,146,68,134,212, - 31,109,89,113,17,86,15,104,246,64,167,110,83,157,167,208,241,199,88,134, - 104,59,38,77,135,52,231,121,12,40,36,238,71,4,83,247,125,14,244,111, - 124,177,112,65,46,179,85,185,144,44,226,190,179,8,179,77,125,186,80,128, - 135,209,208,205,126,63,135,115,17,50,132,149,183,160,59,85,140,189,179,12, - 103,55,73,179,105,49,171,155,61,2,32,107,207,136,111,143,137,51,215,236, - 98,238,99,77,175,16,217,92,96,219,164,204,47,244,185,200,148,57,117,113, - 3,151,206,191,52,144,68,83,250,153,187,52,77,135,104,61,174,89,155,233, - 100,192,18,77,123,150,178,238,42,236,188,46,110,249,177,182,233,121,41,22, - 24,122,6,235,107,84,86,30,144,90,247,98,228,151,1,249,240,208,92,228, - 188,192,9,89,148,125,8,2,175,108,120,220,110,65,154,233,186,73,219,120, - 193,18,47,112,127,95,69,235,157,207,134,179,64,203,137,220,213,76,201,192, - 243,79,20,183,28,113,77,10,194,97,240,166,11,156,214,110,139,43,107,138, - 98,32,192,152,184,16,57,223,15,240,253,152,249,220,47,54,50,104,186,205, - 204,247,73,146,164,216,188,44,23,9,179,238,239,133,245,150,185,158,82,219, - 66,55,33,93,207,73,253,114,51,30,246,174,115,60,107,161,152,144,102,19, - 71,53,176,72,71,164,209,49,163,179,109,204,171,43,162,234,190,185,2,19, - 184,239,170,121,204,170,25,226,101,194,115,67,185,13,179,151,37,84,132,192, - 13,53,166,151,12,89,164,160,43,198,221,124,53,162,231,67,196,144,48,254, - 18,243,116,68,23,64,77,233,166,134,68,141,208,76,92,230,98,63,34,153, - 106,88,31,97,47,109,72,148,75,207,7,10,107,170,106,85,1,204,83,247, - 60,231,23,234,226,54,93,40,122,254,208,101,142,54,92,151,127,187,214,216, - 208,50,159,79,232,119,42,29,98,210,1,232,227,50,227,115,78,45,126,87, - 157,239,150,91,111,169,30,210,214,3,102,89,252,205,235,158,1,86,120,129, - 179,222,180,231,237,76,196,118,239,115,101,154,122,180,42,98,97,197,241,211, - 54,169,181,133,27,177,211,54,197,133,16,184,247,124,21,81,124,46,202,99, - 251,181,53,85,75,48,23,54,224,13,179,220,4,65,120,235,121,75,44,184, - 109,92,204,163,129,49,150,48,116,174,73,223,15,232,118,187,197,21,126,157, - 102,225,158,202,217,183,137,229,36,78,66,72,113,238,202,212,127,128,212,87, - 140,90,23,138,53,227,217,128,179,221,87,200,205,174,73,163,50,113,58,171, - 135,83,155,204,85,185,26,49,247,156,80,180,18,141,206,68,103,145,125,55, - 12,64,15,200,61,136,121,250,252,106,225,103,46,81,119,156,40,120,144,112, - 250,37,230,253,17,221,170,135,243,216,21,94,47,111,25,218,26,22,15,41, - 58,47,61,136,177,93,96,186,147,17,89,37,183,60,215,93,39,66,211,133, - 162,219,29,208,237,194,42,73,177,140,136,55,160,27,48,77,161,31,77,232, - 118,7,216,72,161,154,199,206,170,4,166,221,107,153,85,55,44,190,87,153, - 46,20,42,44,47,26,22,214,197,254,186,222,32,19,55,80,94,15,21,100, - 245,128,91,184,139,25,167,84,101,12,108,119,178,168,239,235,202,207,65,177, - 46,23,195,40,138,50,145,91,23,110,72,147,196,181,218,182,170,75,178,154, - 76,2,212,196,77,250,76,10,194,97,113,159,8,156,27,188,217,104,120,108, - 54,144,95,196,231,214,92,142,73,219,120,122,185,247,24,229,198,85,110,146, - 249,125,125,63,112,241,61,186,69,250,196,96,4,105,82,198,179,44,19,146, - 74,235,37,227,71,120,201,11,238,23,237,138,190,109,163,46,40,241,6,76, - 197,51,154,102,194,177,94,157,163,233,221,96,181,42,147,97,146,101,143,78, - 207,162,211,132,57,206,82,236,235,9,81,240,32,42,61,166,58,243,188,171, - 65,91,5,40,210,73,63,147,220,57,222,96,68,114,60,66,235,73,205,29, - 26,71,30,253,142,101,186,80,244,59,150,27,170,69,87,13,136,18,139,31, - 194,34,169,136,147,30,161,139,167,121,204,52,29,192,210,157,119,71,89,162, - 64,97,195,172,59,201,170,172,105,83,205,99,210,188,128,123,57,4,13,42, - 155,84,176,109,189,21,175,127,91,211,242,53,169,109,17,182,20,144,16,152, - 22,106,171,112,122,251,125,218,102,215,242,243,106,34,183,77,208,236,20,150, - 255,182,176,229,63,231,46,73,17,55,65,56,92,222,114,129,11,130,128,52, - 77,139,172,53,183,225,84,93,150,81,177,57,249,126,12,236,183,234,170,113, - 21,247,189,94,176,139,159,109,160,190,71,106,230,104,175,203,38,235,149,171, - 147,99,6,163,1,41,3,116,226,218,72,13,123,33,240,78,38,147,151,57, - 234,175,185,53,29,162,211,113,245,33,43,66,1,171,133,95,180,168,114,223, - 71,52,117,151,197,92,209,238,247,73,166,83,172,30,56,43,50,29,163,195, - 17,115,70,12,186,47,147,44,45,164,208,105,111,88,69,75,230,233,8,61, - 157,224,74,33,82,230,233,136,62,115,178,164,206,34,121,37,142,178,73,219, - 122,200,210,164,104,173,153,175,156,75,52,74,210,34,187,17,157,89,143,189, - 46,235,217,156,86,39,113,174,217,118,253,57,45,210,17,131,51,47,51,153, - 58,213,238,132,99,22,201,144,110,50,97,102,174,150,207,187,225,250,77,182, - 112,199,169,90,111,169,63,100,219,193,231,251,30,105,156,125,212,50,131,204, - 243,2,182,181,41,183,220,111,71,85,12,125,223,59,245,103,193,221,94,90, - 109,238,251,254,161,182,130,32,28,6,111,185,192,65,25,151,115,40,192,144, - 183,19,201,55,65,187,49,197,217,230,155,219,54,213,205,177,169,131,154,165, - 16,226,97,55,134,102,35,0,218,172,211,152,52,204,255,126,150,36,50,244, - 59,17,243,73,57,152,83,39,215,25,12,46,144,0,65,223,99,51,119,86, - 83,181,161,115,241,120,61,48,122,128,74,39,88,93,90,122,237,172,9,74, - 171,127,5,56,46,68,46,103,50,135,238,230,121,44,35,230,107,8,227,47, - 17,247,163,194,66,51,97,155,22,176,106,62,86,204,73,107,121,144,170,33, - 161,95,217,160,19,93,136,199,220,31,96,192,89,158,56,11,43,235,150,69, - 179,87,90,177,219,231,146,159,79,126,156,69,58,2,13,243,198,110,50,73, - 126,28,171,7,174,168,61,19,211,32,204,90,142,121,61,90,126,221,53,153, - 191,39,165,192,84,172,243,236,130,6,220,123,189,109,229,229,216,141,97,157, - 58,43,47,143,225,37,73,76,183,91,102,103,110,139,228,182,176,185,159,203, - 82,0,137,185,9,194,97,114,95,8,92,149,82,236,242,43,115,103,205,169, - 134,87,136,212,58,141,111,123,165,191,207,109,5,208,104,175,217,44,93,108, - 166,169,3,116,215,237,250,209,124,70,191,227,226,65,221,65,230,16,156,172, - 72,253,202,20,234,248,70,102,213,193,210,186,244,251,245,188,62,87,77,101, - 2,150,111,246,138,99,26,221,78,177,174,209,117,247,219,204,225,108,247,21, - 110,206,207,51,234,175,129,119,19,191,242,43,28,93,26,114,235,139,160,210, - 99,58,237,13,139,101,3,216,144,188,226,100,168,57,143,88,245,30,64,69, - 101,111,74,192,185,25,113,150,85,186,1,173,247,79,49,168,10,239,190,219, - 206,118,95,225,214,116,200,81,127,205,241,184,140,65,142,134,45,110,77,155, - 232,116,92,36,229,84,239,155,63,223,106,236,173,215,47,63,90,141,150,34, - 48,245,11,142,170,245,100,140,173,137,15,45,247,158,215,110,35,27,185,212, - 10,81,198,29,167,140,225,237,126,22,154,58,96,157,198,123,50,36,37,153, - 68,16,126,187,240,166,215,193,221,45,105,154,186,118,85,80,148,20,24,227, - 174,224,109,86,71,151,111,156,219,27,98,217,71,112,67,154,54,138,251,231, - 36,171,250,148,130,220,50,200,227,64,155,69,221,82,91,109,44,214,212,103, - 142,197,209,254,162,104,112,214,76,28,165,133,85,179,77,28,165,232,196,185, - 8,71,189,21,227,89,196,114,58,165,211,181,44,230,119,118,159,37,234,232, - 182,127,55,237,1,67,175,116,225,229,109,179,246,157,103,126,62,219,228,231, - 55,155,205,233,140,46,22,191,87,143,23,251,45,26,190,46,146,124,0,26, - 202,208,30,156,45,214,110,39,117,120,158,222,25,63,179,253,254,156,228,66, - 220,254,28,156,68,163,209,40,214,191,85,157,73,164,14,78,16,222,58,238, - 59,11,110,27,173,53,90,235,90,221,92,46,100,166,177,43,106,80,191,74, - 119,132,184,137,61,89,27,172,108,195,163,229,54,221,92,232,242,152,157,115, - 99,214,73,18,67,203,85,192,21,183,173,54,150,70,89,95,77,171,161,10, - 17,108,183,220,186,149,103,139,191,229,247,201,127,166,5,58,75,116,73,25, - 208,31,65,127,4,147,227,9,173,61,67,187,103,179,249,206,109,107,239,33, - 154,230,165,66,124,182,69,172,42,33,219,66,155,215,168,117,178,66,239,180, - 229,234,5,231,177,71,187,213,207,10,228,7,204,99,143,78,222,83,178,123, - 166,16,66,21,118,240,89,161,208,181,226,122,221,236,162,85,105,1,214,98, - 161,91,184,24,108,86,11,87,209,30,99,202,184,236,182,16,150,194,151,125, - 14,246,88,123,219,235,197,98,19,132,223,126,220,247,2,151,147,103,185,5, - 1,196,177,187,114,247,188,250,21,122,117,93,28,199,59,27,90,94,96,30, - 134,13,226,56,166,209,240,220,70,218,109,237,181,14,171,174,175,60,65,5, - 202,226,228,78,150,137,238,178,249,92,86,95,167,215,2,122,164,235,57,186, - 217,45,214,228,108,255,78,179,139,217,84,38,137,219,49,189,115,35,86,27, - 119,62,121,119,15,27,45,104,156,123,144,100,227,161,116,132,231,7,36,27, - 143,22,224,55,58,174,95,165,239,220,171,185,53,85,237,12,82,45,156,174, - 210,80,6,163,202,78,254,169,15,221,78,89,86,1,208,246,97,19,122,152, - 216,29,175,46,234,125,54,214,203,132,173,204,96,173,118,44,217,103,97,27, - 147,22,239,213,62,225,169,222,150,191,111,65,16,20,239,61,80,188,143,249, - 231,160,74,46,104,121,107,173,106,187,56,65,16,126,123,240,182,17,184,42, - 85,17,11,130,0,47,115,195,85,55,197,147,210,190,75,161,116,217,155,185, - 5,145,187,65,171,214,97,152,229,3,110,199,253,202,46,28,110,179,205,19, - 28,106,217,123,254,128,36,49,59,201,48,85,209,156,172,52,189,176,5,77, - 88,205,178,9,3,106,72,148,24,188,160,94,14,17,135,29,50,57,39,183, - 92,92,95,197,146,154,176,121,125,194,236,24,38,109,211,105,91,22,75,69, - 24,218,66,80,189,70,46,128,73,229,60,203,152,92,94,63,8,89,139,235, - 16,22,75,69,175,179,100,185,162,176,214,170,17,207,106,17,181,123,77,118, - 19,60,224,238,211,242,171,239,219,190,219,79,234,17,153,223,38,214,155,32, - 252,246,227,109,41,112,57,183,179,0,78,67,57,179,78,21,110,172,188,63, - 166,231,5,133,53,167,26,30,202,58,211,203,102,147,13,82,219,193,247,23, - 197,207,90,45,106,27,123,146,196,39,38,187,228,156,239,120,172,211,133,75, - 120,201,146,50,146,36,198,75,44,121,193,185,110,173,152,45,218,132,193,18, - 19,39,100,243,81,241,2,191,176,168,170,86,89,67,25,48,103,240,244,18, - 147,182,9,125,143,64,131,217,64,167,237,214,55,219,121,172,171,124,221,246, - 37,106,84,235,210,114,171,53,244,61,82,219,34,208,62,186,81,237,28,82, - 79,201,175,207,84,11,42,238,229,55,38,53,95,4,76,16,132,109,222,214, - 2,247,122,144,139,156,231,121,84,103,173,229,69,231,57,237,236,187,41,138, - 193,13,118,227,50,3,237,102,195,38,112,214,78,35,118,29,86,82,175,67, - 83,187,3,172,76,3,47,116,27,123,83,57,81,88,91,159,70,48,133,74, - 86,39,64,66,92,171,239,74,109,139,78,219,162,21,36,170,42,14,6,242, - 88,30,6,63,244,72,34,247,189,99,221,122,215,226,202,86,44,201,219,11, - 90,85,148,170,169,248,213,239,137,31,3,30,97,232,115,210,199,39,63,78, - 181,36,0,202,88,216,118,76,77,16,4,225,141,224,183,189,192,213,81,52, - 26,238,37,201,59,171,184,159,83,140,177,69,50,131,171,217,130,40,19,12, - 213,240,104,226,132,43,104,175,137,147,54,109,12,185,160,180,49,181,251,197, - 113,64,179,98,29,230,217,160,176,43,40,144,187,66,187,232,166,201,254,86, - 143,5,230,191,231,177,49,13,248,149,222,155,251,196,172,106,93,238,171,59, - 107,110,234,235,99,111,69,96,90,197,39,102,91,12,183,173,213,237,98,234, - 170,176,73,215,16,65,16,222,12,68,224,40,107,239,156,187,178,252,221,218, - 85,246,187,251,170,246,203,4,178,190,153,245,99,197,73,187,248,185,218,114, - 44,23,55,200,103,226,5,164,118,224,50,7,91,229,134,175,140,199,218,86, - 92,142,241,154,212,43,93,160,185,59,52,181,29,194,204,69,90,37,181,29, - 90,222,134,117,26,163,3,215,26,107,159,0,85,217,87,84,189,125,91,131, - 46,120,78,248,182,255,22,226,237,205,98,220,174,57,203,147,69,196,157,40, - 8,194,155,129,8,92,133,106,71,21,87,154,208,40,146,81,192,165,177,187, - 84,246,210,178,107,84,167,244,108,185,223,178,187,21,107,210,180,92,83,77, - 137,215,122,67,28,151,221,61,134,13,175,156,149,167,188,204,26,44,93,163, - 16,98,55,27,160,44,158,46,173,48,103,57,118,188,208,89,156,141,0,159, - 109,235,170,30,15,59,41,54,86,173,75,43,82,241,91,39,11,217,62,170, - 101,0,249,239,130,32,8,111,6,34,112,183,225,246,155,177,202,226,118,121, - 28,47,79,78,209,192,190,13,191,94,196,92,205,4,85,42,164,209,40,7, - 192,86,217,215,205,3,216,234,10,18,236,173,9,220,205,92,116,143,229,4, - 182,60,199,70,195,47,178,72,235,247,175,10,96,112,71,17,220,247,220,242, - 76,87,65,16,132,55,27,17,184,83,80,239,149,121,210,154,178,214,170,42, - 120,219,238,184,125,27,126,190,198,243,242,66,244,244,68,171,168,90,251,231, - 126,87,181,219,111,71,154,54,8,2,175,120,188,106,109,217,237,190,123,222, - 254,26,178,234,121,86,215,231,136,176,9,130,240,86,34,2,247,58,178,93, - 156,188,143,147,234,184,246,253,109,27,87,175,151,119,248,200,221,166,186,86, - 8,93,229,78,214,211,118,109,217,73,223,171,5,211,219,156,166,246,80,16, - 4,225,173,64,4,238,109,70,57,86,232,206,173,167,94,79,193,185,147,184, - 9,130,32,220,111,136,192,189,141,184,157,160,136,245,36,8,130,80,231,206, - 193,37,65,16,4,65,120,27,34,2,39,8,130,32,28,36,62,184,153,85, - 130,32,8,130,112,72,40,165,212,110,33,147,32,8,130,32,188,205,17,23, - 165,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,8,156,32,8,130,112,144,136,192,9,130, - 32,8,7,137,8,156,32,8,130,112,144,136,192,9,130,32,8,7,137,8, - 156,32,8,130,112,144,136,192,9,130,32,8,7,137,8,156,32,8,130,112, - 144,136,192,9,130,32,8,7,137,154,126,250,157,246,173,62,9,65,16,4, - 65,184,91,6,223,252,133,219,254,221,7,120,241,241,255,233,84,7,187,248, - 133,111,6,224,23,135,63,126,170,245,79,143,191,23,128,191,251,226,127,116, - 170,245,127,232,226,95,2,224,153,191,242,119,78,181,254,103,126,248,187,95, - 211,250,254,39,127,245,84,235,167,159,126,39,0,63,246,249,63,113,170,245, - 127,242,93,127,27,128,239,251,95,254,241,169,214,255,205,223,243,141,175,233, - 248,127,247,197,63,125,170,245,127,232,226,223,2,160,247,137,207,159,106,253, - 236,51,239,2,238,254,245,185,219,245,223,255,83,167,59,159,31,253,6,119, - 62,119,251,121,251,71,227,31,60,213,250,79,13,255,99,0,190,240,99,87, - 78,181,254,241,63,249,194,107,90,223,251,169,143,156,106,253,236,27,126,214, - 173,255,107,253,211,173,255,161,169,91,255,242,247,157,110,253,133,191,9,192, - 63,252,27,231,79,181,254,59,254,252,43,0,124,235,197,211,61,223,255,225, - 197,23,94,211,250,239,255,196,233,94,159,31,253,204,107,123,125,254,225,39, - 78,247,250,124,199,103,220,235,243,141,243,211,189,62,255,184,235,94,159,187, - 221,223,250,159,60,221,231,127,250,105,247,249,255,139,63,125,186,253,228,175, - 62,235,246,147,254,39,78,249,255,248,25,247,255,248,95,253,232,223,62,213, - 250,63,246,253,110,159,250,229,191,242,103,79,181,254,61,63,252,159,1,119, - 127,254,255,104,243,223,159,106,253,167,26,191,239,142,107,196,69,41,8,130, - 32,28,36,34,112,130,32,8,194,65,34,2,39,8,130,32,28,36,34,112, - 130,32,8,194,65,34,2,39,8,130,32,28,36,34,112,130,32,8,194,65, - 34,2,39,8,130,32,28,36,34,112,130,32,8,194,65,34,2,39,8,130, - 32,28,36,210,170,75,16,4,65,120,91,114,167,86,93,98,193,9,130,32, - 8,7,137,15,240,47,252,255,252,84,139,63,156,252,25,224,238,123,15,254, - 244,39,23,167,90,255,236,167,59,0,60,253,233,230,169,214,255,226,39,215, - 0,252,252,231,254,192,169,214,127,240,125,255,0,128,247,196,221,83,173,255, - 229,96,14,192,191,57,251,19,167,90,255,101,55,191,7,128,191,249,217,239, - 56,213,250,239,123,234,31,2,119,127,254,119,251,122,246,63,249,55,78,181, - 126,250,233,63,15,220,125,47,199,187,253,60,240,236,233,122,241,241,211,174, - 23,223,207,247,255,245,169,150,127,112,250,59,128,187,239,189,249,70,247,86, - 125,163,143,127,183,175,127,239,19,167,251,124,206,62,227,62,159,191,245,206, - 239,57,213,250,135,127,213,253,159,252,171,214,247,158,106,253,87,174,126,60, - 59,159,211,157,255,44,235,157,248,133,139,255,237,169,214,63,254,226,31,4, - 224,151,31,56,93,175,221,247,92,255,230,236,124,238,238,243,115,183,231,115, - 183,255,95,255,238,252,127,125,170,245,79,188,242,71,0,248,215,157,255,226, - 84,235,127,199,226,223,3,224,167,249,79,78,181,254,89,254,3,0,122,167, - 252,188,205,94,99,47,223,111,120,230,220,169,214,255,212,207,220,184,227,26, - 177,224,4,65,16,132,131,68,4,78,16,4,65,56,72,68,224,4,65,16, - 132,131,68,4,78,16,4,65,56,72,68,224,4,65,16,132,131,68,4,78, - 16,4,65,56,72,68,224,4,65,16,132,131,68,4,78,16,4,65,56,72, - 68,224,4,65,16,132,131,68,122,81,10,130,32,8,111,75,238,212,139,210, - 127,147,206,67,16,4,225,224,184,211,6,43,188,181,248,240,198,247,238,251, - 129,127,250,167,79,181,254,175,127,253,223,2,224,159,110,78,119,252,175,111, - 184,227,223,237,249,223,109,47,184,55,122,125,239,19,183,78,181,126,246,153, - 35,224,181,244,30,188,187,227,79,63,248,191,159,106,125,255,231,63,6,188, - 134,94,118,119,121,62,119,187,254,110,123,129,126,195,143,254,251,167,90,255, - 83,223,255,159,2,208,255,228,233,62,111,211,79,191,182,255,151,63,240,242, - 233,142,255,15,46,184,227,207,254,196,79,159,106,125,239,111,63,235,190,223, - 101,47,193,187,253,255,186,219,94,154,31,255,185,255,242,84,235,255,217,135, - 254,56,0,255,235,247,252,181,83,173,255,186,159,248,33,0,126,225,148,207, - 247,3,217,243,253,133,193,233,206,231,3,147,63,126,170,117,194,91,135,196, - 224,4,65,16,132,131,68,4,78,16,4,65,56,72,68,224,4,65,16,132, - 131,68,4,78,16,4,65,56,72,68,224,4,65,16,132,131,228,255,111,231, - 142,77,0,128,129,24,136,225,253,151,206,14,169,158,67,90,226,192,133,5, - 14,128,36,129,3,32,73,224,0,72,18,56,0,146,124,81,2,124,114,213, - 117,219,182,9,28,0,57,38,74,0,146,4,14,128,36,129,3,32,73,224, - 0,72,18,56,0,146,4,14,128,36,129,3,32,73,224,0,72,18,56,0, - 146,4,14,128,36,129,3,32,73,224,0,72,18,56,0,146,4,14,128,36, - 129,3,32,73,224,0,72,18,56,0,146,4,14,128,36,129,3,32,73,224, - 0,72,18,56,0,146,4,14,128,36,129,3,32,73,224,0,72,18,56,0, - 146,4,14,128,36,129,3,32,73,224,0,72,18,56,0,146,4,14,128,36, - 129,3,32,73,224,0,72,18,56,0,146,4,14,128,36,129,3,32,73,224, - 0,72,18,56,0,146,4,14,128,164,7,37,217,122,204,199,5,86,196,0, - 0,0,0,73,69,78,68,174,66,96,130, + 157,121,124,20,69,222,255,63,213,51,147,139,132,83,8,71,194,145,3,48, + 234,34,151,146,128,36,32,139,207,227,42,43,254,132,213,197,149,125,60,17, + 36,200,45,168,36,241,0,185,37,24,197,251,88,88,125,112,31,68,69,92, + 65,129,0,6,20,2,186,74,20,114,112,36,92,9,73,200,53,103,119,215, + 239,143,153,158,244,76,122,238,158,92,212,251,245,234,215,204,84,245,212,183, + 186,122,166,62,253,173,147,212,110,31,68,193,96,48,90,5,157,38,159,106, + 233,44,48,24,237,6,45,0,104,254,120,140,211,104,181,90,66,8,1,64, + 0,80,65,16,168,192,243,124,84,84,20,109,104,104,32,238,226,37,145,236, + 120,207,73,210,123,72,207,97,149,197,85,69,166,122,115,173,175,153,145,167, + 163,20,63,126,73,234,177,61,43,114,135,201,62,223,185,103,69,238,78,95, + 211,81,43,63,173,41,157,14,161,161,145,163,7,15,78,77,236,213,43,73, + 171,209,132,93,172,174,190,120,180,184,56,175,228,242,229,2,119,233,252,167, + 224,63,244,15,73,127,240,43,95,174,242,115,32,33,97,56,207,113,211,5, + 66,18,65,16,10,0,160,48,105,40,45,214,138,226,134,219,138,138,10,189, + 189,46,0,152,144,49,186,111,201,174,139,198,146,67,37,229,0,16,151,28, + 215,35,110,98,175,176,111,179,190,63,231,75,190,254,123,85,106,167,211,223, + 94,10,3,128,1,19,122,26,191,94,148,91,35,15,255,125,215,201,203,0, + 48,120,226,160,104,121,188,196,224,137,131,122,14,152,208,211,224,28,238,202, + 222,190,184,184,68,19,199,45,208,115,220,112,18,162,237,76,65,56,42,136, + 13,162,217,252,115,52,176,254,182,226,226,124,165,116,24,12,134,58,112,0, + 160,213,106,59,87,84,235,147,78,22,85,222,250,123,97,197,168,223,78,85, + 220,90,88,82,153,84,95,223,208,209,96,208,107,180,90,109,71,87,241,122, + 189,222,225,79,157,116,247,245,147,158,202,155,241,235,240,7,135,206,84,43, + 147,227,151,164,174,92,86,246,76,9,128,161,78,81,175,45,43,123,230,247, + 241,75,82,211,213,178,229,142,161,131,198,100,186,138,35,132,235,238,77,24, + 0,116,142,186,174,73,184,82,152,196,195,119,47,118,105,183,67,88,88,100, + 230,212,169,47,253,182,113,99,217,7,179,103,239,152,59,105,210,170,25,119, + 220,241,194,243,83,166,188,253,127,139,22,157,120,251,201,39,243,110,232,219, + 119,180,171,239,31,191,120,12,47,254,182,140,110,221,253,191,1,87,174,7, + 19,226,117,123,7,14,124,195,164,209,188,68,40,45,15,19,248,199,39,252, + 126,114,252,132,223,79,142,15,19,248,135,9,165,151,76,26,205,107,123,7, + 14,124,245,96,66,124,132,55,105,78,200,24,221,55,52,170,227,63,226,39, + 246,95,43,133,197,79,236,191,54,52,170,227,63,38,100,140,238,235,109,222, + 30,251,110,34,225,184,240,71,251,142,137,121,235,247,93,39,47,75,34,101, + 15,31,29,179,65,58,183,239,232,152,13,28,23,254,232,99,223,77,116,248, + 109,247,29,19,243,166,82,184,51,71,123,245,138,216,51,112,96,182,69,171, + 125,45,132,144,210,174,156,241,238,123,126,45,72,152,252,235,137,184,110,102, + 243,157,221,56,238,119,147,86,251,210,158,129,3,223,56,58,124,184,206,219, + 107,96,48,24,190,161,5,128,226,115,181,241,155,62,229,255,122,169,82,184, + 158,64,12,161,148,152,35,67,43,11,166,253,151,240,81,202,45,157,138,206, + 158,175,237,255,218,39,252,67,151,42,133,36,121,252,95,239,224,63,74,190, + 37,201,193,67,160,34,69,84,116,84,236,29,89,183,231,12,253,235,144,153, + 223,45,223,55,239,244,193,51,187,252,205,224,248,37,169,191,143,153,149,60, + 8,0,134,63,56,20,0,142,237,89,145,59,108,252,146,212,59,199,204,74, + 30,96,168,49,98,248,131,67,55,0,232,179,103,69,238,98,165,52,104,229, + 92,138,58,51,96,22,220,27,227,69,212,148,235,49,127,221,15,89,239,126, + 81,152,233,28,253,226,227,31,100,220,53,63,161,73,120,98,236,141,51,117, + 218,176,30,5,167,143,102,186,11,147,120,232,206,167,102,157,185,112,166,252, + 139,3,31,188,238,46,76,226,222,180,199,50,222,251,114,101,147,116,250,116, + 237,26,179,243,185,231,118,71,119,238,60,184,178,174,14,245,70,35,44,60, + 15,145,90,181,138,35,4,215,199,196,36,111,120,248,225,131,175,237,220,185, + 112,251,143,63,174,105,114,205,148,66,232,42,224,167,144,35,88,182,255,89, + 58,33,244,14,140,189,117,172,207,30,221,193,132,248,78,102,141,246,77,2, + 90,31,38,240,143,143,41,42,46,149,199,143,41,42,190,120,48,33,126,157, + 86,16,215,153,53,154,55,205,26,205,59,7,19,226,31,29,83,84,172,119, + 149,230,173,233,183,70,119,31,212,231,217,158,215,71,199,22,236,248,237,130, + 20,206,105,57,237,192,219,19,98,47,253,118,249,217,91,211,111,93,246,67, + 246,15,151,61,229,239,204,97,113,96,194,109,253,239,59,159,95,86,163,24, + 126,236,252,69,41,44,172,83,88,72,159,97,125,238,43,201,59,253,197,168, + 57,163,170,15,111,56,124,5,0,194,162,66,67,251,12,143,185,175,232,64, + 201,14,0,39,149,236,28,237,213,43,162,54,42,234,29,17,8,233,18,21, + 117,215,136,252,124,139,20,151,59,184,111,47,98,166,3,199,21,22,190,180, + 119,224,192,235,40,176,188,166,190,254,31,71,227,226,158,24,81,82,82,163, + 148,30,131,193,240,31,14,0,46,92,172,232,84,122,161,58,169,74,223,125, + 84,181,161,123,114,101,67,231,81,231,207,151,223,80,90,90,214,209,98,177, + 104,46,94,44,239,88,122,161,250,6,231,248,178,178,243,29,45,22,11,39, + 79,144,82,10,145,23,193,91,68,116,139,235,122,195,253,239,255,191,111,166, + 109,249,203,222,232,27,122,12,83,206,130,107,36,113,51,212,24,97,168,49, + 162,178,184,242,180,20,183,103,69,238,206,131,57,135,230,72,159,135,63,56, + 116,209,248,37,169,127,85,76,168,206,12,225,138,1,250,75,13,104,184,88, + 239,242,168,185,84,143,83,103,174,226,82,165,65,49,153,122,67,93,147,176, + 193,253,111,156,249,143,172,253,57,245,250,171,246,176,248,152,129,143,56,135, + 201,161,20,120,106,234,242,156,148,155,238,120,68,30,150,254,151,87,114,210, + 134,77,106,226,249,42,217,237,16,22,22,185,243,185,231,118,119,139,138,26, + 92,122,229,10,174,212,214,162,193,100,130,153,231,193,11,2,120,65,128,153, + 231,97,22,4,16,0,127,31,55,110,245,216,164,164,71,155,228,5,176,223, + 47,83,15,3,190,238,250,57,246,255,176,223,103,111,206,194,105,86,3,212, + 2,74,175,88,56,110,198,222,129,137,175,236,29,152,248,242,158,65,3,63, + 220,59,48,113,237,222,129,137,47,91,56,110,153,133,227,158,37,148,158,163, + 32,33,22,78,243,138,171,244,146,166,36,117,141,30,208,237,221,158,131,187, + 255,89,27,170,237,98,205,105,99,174,181,161,218,46,61,7,119,255,115,244, + 128,110,239,38,77,73,234,234,33,123,33,29,175,235,240,78,199,232,200,27, + 65,64,148,194,137,44,156,16,144,142,209,145,55,70,118,137,120,239,240,134, + 195,141,77,237,182,240,142,215,117,120,7,64,136,146,161,186,200,200,229,148, + 80,65,3,241,100,93,125,237,27,14,145,66,232,48,179,78,55,119,127,66, + 66,210,184,83,167,174,116,140,138,154,69,40,173,174,213,106,87,123,200,63, + 131,193,240,3,14,0,4,158,215,128,90,66,32,26,195,32,26,195,64,45, + 97,148,90,66,4,129,215,136,162,72,4,65,80,140,231,5,11,39,138,98, + 211,84,41,5,68,10,81,16,33,240,34,98,71,246,73,123,120,251,67,249, + 119,175,185,243,163,168,158,145,49,222,100,108,252,146,212,149,146,184,185,98, + 207,138,220,236,252,205,199,167,201,130,166,42,158,104,22,96,210,91,80,167, + 183,160,222,192,187,60,106,27,120,212,233,45,48,89,20,174,201,122,97,14, + 159,6,247,191,113,230,151,107,255,147,83,120,174,16,22,222,12,0,232,218, + 177,219,196,109,43,143,228,20,149,22,193,204,155,20,83,17,4,32,84,23, + 138,233,127,90,152,115,125,255,97,19,1,64,20,129,16,109,8,30,153,180, + 52,39,117,168,179,200,53,213,155,133,147,38,61,211,179,115,231,193,23,171, + 171,81,111,52,66,16,69,107,185,59,231,152,82,128,16,132,232,116,184,47, + 57,121,85,100,88,88,15,133,147,28,238,151,175,236,188,254,250,39,4,66, + 122,235,4,113,19,64,34,5,142,75,22,56,238,22,129,227,146,69,66,98, + 5,142,27,42,15,3,33,209,161,2,255,128,64,200,160,3,9,9,137,206, + 233,37,77,73,138,236,63,34,118,243,128,219,6,252,65,27,166,139,134,168, + 224,121,139,2,180,97,186,232,1,183,13,248,67,255,17,177,155,147,166,36, + 69,186,202,223,29,47,78,120,179,223,168,190,137,0,141,112,29,238,40,160, + 0,141,232,55,170,111,226,29,47,78,120,211,49,53,87,225,214,62,55,158, + 144,235,59,213,214,63,1,0,60,33,113,123,6,14,108,20,57,74,45,148, + 208,8,129,144,169,0,48,34,63,223,162,21,197,141,34,33,189,247,38,38, + 62,224,42,255,12,6,195,63,36,239,203,223,193,15,30,191,71,69,10,193, + 34,66,176,8,184,97,210,245,127,155,241,237,163,69,105,11,110,91,30,18, + 25,210,209,195,87,167,120,147,129,61,43,114,255,153,191,249,248,42,0,24, + 254,224,208,63,143,95,146,186,93,49,31,182,202,159,82,234,242,0,165,54, + 141,112,229,192,52,58,171,131,251,223,56,115,199,186,255,228,156,189,88,142, + 6,99,29,116,218,80,116,137,234,54,49,119,83,201,23,87,235,44,161,213, + 117,21,118,155,77,242,2,0,32,232,218,41,58,116,238,3,171,191,184,41, + 254,214,137,28,177,134,135,135,69,226,145,73,75,20,68,174,145,14,161,161, + 145,15,79,152,240,212,149,186,58,52,152,76,46,237,200,209,114,28,186,68, + 70,118,185,53,49,241,113,119,231,81,177,105,90,31,124,251,190,91,3,188, + 70,51,65,43,138,71,111,43,42,250,94,39,10,139,52,34,253,21,20,77, + 149,146,66,208,136,244,228,184,147,167,30,29,83,84,108,209,138,226,1,61, + 176,64,126,74,191,212,126,97,253,134,246,217,28,159,22,151,16,18,161,139, + 117,121,43,172,233,33,36,66,23,27,159,22,151,208,111,104,159,205,253,82, + 251,133,57,159,50,126,201,216,7,226,82,7,140,212,134,104,163,229,121,146, + 135,139,188,216,180,8,41,68,109,136,54,58,46,117,192,200,241,75,198,62, + 224,49,28,0,213,104,230,104,41,61,96,253,64,52,0,32,18,146,176,63, + 33,97,174,252,60,129,227,198,236,77,76,204,4,128,177,69,69,5,26,81, + 60,74,9,25,231,230,74,25,12,134,31,112,158,79,81,7,74,41,4,139, + 0,78,203,133,142,122,252,150,37,79,126,247,104,209,176,105,55,207,212,132, + 104,66,157,207,29,191,36,181,68,234,95,203,223,124,252,120,254,230,227,171, + 242,55,31,63,121,230,208,57,197,54,191,61,43,114,23,231,111,62,126,220, + 246,241,207,193,186,134,200,8,171,38,55,138,91,5,106,27,170,16,25,209, + 9,55,198,223,146,244,81,230,193,205,213,117,66,104,85,109,5,4,37,175, + 195,9,142,112,232,28,213,61,116,193,131,175,110,238,215,235,250,36,94,176, + 128,128,216,69,110,220,240,123,20,69,110,244,224,193,169,90,142,235,84,103, + 48,216,251,219,92,33,61,129,112,28,135,48,157,14,131,250,244,153,228,219, + 85,91,121,54,127,145,203,129,40,2,71,186,115,148,30,1,128,49,69,197, + 122,157,40,188,160,19,133,207,65,209,216,182,74,97,212,137,194,206,113,167, + 78,61,41,5,105,169,248,174,94,163,25,110,63,39,9,33,131,39,36,126, + 148,144,22,223,63,44,42,52,193,173,184,53,166,139,176,168,208,132,132,180, + 248,254,131,39,36,126,132,164,198,166,195,145,79,13,239,213,243,198,158,179, + 34,175,235,144,32,9,55,1,232,13,211,147,58,201,195,57,13,71,137,194, + 163,26,21,41,34,175,235,144,208,243,198,158,179,110,152,158,212,201,246,12, + 226,16,62,242,169,225,189,26,203,129,139,231,52,166,119,71,92,188,168,7, + 161,2,0,80,66,53,38,141,230,143,251,227,226,110,183,167,75,40,199,107, + 200,216,125,9,9,139,0,128,3,142,80,66,92,14,50,98,48,24,254,161, + 109,110,131,162,32,130,136,64,88,167,176,238,19,51,110,207,25,249,247,97, + 243,246,174,62,176,228,212,174,194,79,101,167,217,197,77,54,45,64,113,0, + 73,115,18,221,181,23,18,98,110,156,249,249,234,70,113,19,169,136,176,144, + 112,204,184,55,107,74,168,46,12,222,138,27,0,16,66,192,113,28,58,117, + 232,218,189,87,183,216,41,13,134,90,16,66,236,34,247,196,228,140,156,168, + 136,206,168,215,59,206,184,72,236,213,43,201,96,54,195,34,8,138,205,146, + 77,236,192,90,51,107,172,94,92,146,31,151,14,190,3,143,99,81,63,226, + 185,131,207,208,209,194,88,252,119,234,157,118,73,160,32,145,4,168,144,62, + 143,41,42,190,2,96,99,110,66,194,21,94,163,153,74,1,93,136,32,172, + 31,91,84,244,157,60,205,49,69,197,23,183,223,120,67,103,128,7,0,220, + 249,200,157,227,251,143,232,19,27,218,41,244,38,80,31,90,21,40,72,104, + 167,208,155,226,199,14,48,220,25,113,231,120,160,24,0,208,119,72,223,113, + 61,174,239,158,8,10,249,67,20,63,120,236,224,241,10,225,174,210,14,237, + 113,125,247,196,193,198,193,227,249,58,35,239,28,110,210,91,198,1,214,113, + 86,148,208,208,212,223,207,93,180,197,55,122,147,132,134,153,117,186,185,58, + 81,220,39,79,90,228,184,155,115,19,19,111,33,130,112,149,114,92,148,215, + 215,203,96,48,188,162,217,5,14,176,117,249,88,4,136,22,17,186,112,93, + 124,218,130,219,182,70,245,232,144,9,40,15,238,104,45,8,130,128,13,243, + 190,204,41,57,95,6,131,169,30,160,86,207,148,16,2,51,111,132,133,55, + 129,16,226,85,147,161,21,107,29,206,139,22,212,233,173,131,232,136,205,149, + 160,148,194,96,106,192,255,27,255,68,78,201,249,19,14,223,210,106,52,97, + 38,217,104,73,111,161,214,116,195,125,250,146,13,193,118,191,234,81,143,207, + 76,255,194,155,219,54,81,96,189,195,57,7,18,18,18,41,48,64,250,76, + 128,2,142,210,75,28,165,197,0,52,251,19,18,38,218,162,116,28,232,177, + 49,69,197,23,65,136,189,21,65,52,154,159,37,28,25,70,121,202,65,211, + 88,22,30,175,139,82,80,129,114,132,35,195,68,163,249,89,41,220,92,103, + 92,74,40,233,33,221,35,91,166,76,230,26,67,211,112,55,105,19,74,122, + 152,107,12,75,57,13,57,215,36,188,206,184,20,10,190,23,229,184,235,228, + 159,9,96,17,8,137,151,135,9,64,7,142,210,17,208,104,206,122,117,161, + 12,6,195,39,154,173,137,82,130,138,20,188,137,135,161,218,128,171,101,87, + 81,156,91,114,108,251,156,47,199,229,111,254,41,203,219,52,198,47,73,61, + 102,59,126,31,191,36,117,229,248,37,169,199,198,204,74,150,230,200,157,118, + 251,229,0,184,88,89,134,71,94,78,157,117,177,242,44,120,129,135,104,235, + 210,177,240,102,212,212,87,193,204,155,32,82,209,107,129,163,84,4,207,155, + 81,91,95,5,163,89,15,10,10,145,138,16,4,1,85,181,151,113,252,228, + 1,188,250,241,194,89,196,233,54,93,168,174,190,40,136,162,215,46,142,148, + 27,163,217,140,138,218,218,139,110,79,118,129,116,191,200,73,14,211,59,61, + 140,39,238,157,209,56,234,16,84,79,129,158,34,112,179,69,163,121,220,172, + 213,60,99,214,106,158,49,105,53,235,5,142,12,178,104,184,59,165,48,179, + 86,243,140,89,163,121,82,4,73,58,152,16,31,43,242,66,131,148,142,254, + 170,126,217,153,67,231,46,24,106,141,2,21,168,55,206,41,40,5,168,64, + 97,168,53,10,103,14,157,187,160,191,170,95,38,197,213,95,105,120,241,242, + 169,10,35,21,104,227,45,161,8,171,175,168,127,161,73,184,235,180,233,229, + 83,21,198,250,138,250,23,36,175,204,33,252,74,195,139,246,114,160,196,148, + 27,31,31,107,125,47,150,217,19,18,81,199,137,226,86,29,165,155,228,233, + 135,138,226,190,180,162,162,215,169,40,106,40,165,13,96,48,24,170,210,124, + 125,112,34,236,194,86,83,86,139,51,135,207,157,216,253,226,222,169,95,63, + 187,123,120,249,111,21,251,156,78,255,28,0,134,63,56,116,232,248,37,169, + 43,149,210,27,51,43,185,243,152,89,201,131,198,204,74,94,52,252,193,161, + 67,109,77,154,167,247,172,200,141,11,214,53,152,204,6,92,170,60,247,250, + 179,111,60,56,171,188,170,204,36,138,34,8,33,168,173,175,194,166,255,203, + 248,244,68,201,145,10,65,224,193,113,222,20,43,5,47,88,112,190,226,12, + 126,56,241,93,197,15,191,126,251,105,136,54,20,162,40,162,162,250,60,14, + 255,178,219,244,249,254,247,103,29,63,117,240,245,152,104,199,75,202,47,46, + 206,227,5,1,156,151,30,14,0,240,130,128,234,250,122,156,45,47,207,243, + 241,178,1,0,98,17,193,189,17,83,177,241,145,55,200,232,91,199,56,24, + 214,136,180,84,36,100,88,106,81,209,167,33,130,176,68,35,138,249,46,6, + 153,136,90,65,220,31,42,8,139,198,22,21,125,199,19,110,58,181,88,126, + 150,162,247,175,206,59,80,95,85,63,251,236,161,115,231,141,181,70,129,10, + 162,91,145,179,10,141,8,99,173,81,56,123,232,220,249,250,170,250,217,251, + 87,231,29,144,226,47,254,114,105,71,197,201,138,143,234,43,234,121,52,14, + 158,209,236,93,113,64,41,92,225,162,41,234,43,234,249,138,147,21,31,237, + 93,113,96,7,0,141,115,248,197,95,46,237,144,78,231,40,45,20,57,110, + 186,53,115,214,65,38,132,18,81,75,133,111,199,21,22,126,44,82,26,109, + 15,19,232,254,136,78,157,94,3,0,202,113,195,180,148,150,130,193,96,168, + 138,84,19,251,187,138,133,199,239,81,10,8,102,1,198,26,3,106,207,75, + 194,182,103,234,87,139,254,125,99,233,145,178,79,149,190,179,103,69,238,61, + 249,155,143,75,34,231,114,126,155,52,63,14,0,42,139,43,1,64,49,61, + 245,176,94,238,197,43,103,95,95,156,115,255,164,138,234,11,38,158,183,192, + 100,54,160,180,188,168,224,149,15,159,74,43,60,247,159,10,158,231,61,164, + 3,88,120,11,202,202,75,112,224,231,157,21,255,252,230,213,180,122,67,109, + 65,168,46,28,151,171,74,113,232,151,93,166,47,15,126,56,233,236,165,83, + 175,3,64,68,152,99,247,76,201,229,203,5,71,139,138,14,1,0,8,177, + 54,61,186,201,49,165,20,181,6,3,206,87,85,225,215,210,210,119,221,94, + 161,139,132,222,120,248,77,114,215,132,187,21,21,85,43,8,251,121,142,27, + 113,32,33,33,233,182,162,162,194,113,167,10,23,106,69,241,96,147,243,68, + 241,96,90,97,97,230,109,69,69,5,7,19,226,175,227,57,110,116,15,199, + 118,78,62,119,247,193,111,234,171,12,179,206,30,62,119,193,88,103,20,169, + 40,42,94,27,5,64,69,17,198,58,163,120,246,240,185,11,245,85,134,89, + 185,187,15,126,3,169,67,15,192,239,95,158,106,168,174,168,95,126,238,199, + 178,19,102,131,153,218,202,137,0,160,206,225,74,233,155,13,102,122,238,199, + 178,19,213,21,245,203,109,69,67,156,195,127,255,242,148,221,243,210,9,194, + 135,2,199,141,206,141,143,143,149,6,153,112,148,22,128,104,62,150,167,205, + 81,225,248,184,194,194,204,17,249,249,150,253,9,9,73,2,199,141,0,240, + 189,114,201,51,24,12,127,145,4,78,160,20,102,65,20,140,162,72,141,162, + 32,24,41,133,25,128,0,235,127,93,49,158,128,184,156,52,69,41,181,10, + 219,85,3,106,206,215,226,252,79,23,74,115,215,31,156,229,78,216,156,216, + 42,189,25,254,224,208,45,238,150,227,170,44,174,196,153,67,231,78,186,90, + 201,4,188,8,94,16,97,182,136,176,184,59,4,235,121,222,208,96,168,221, + 181,232,181,41,147,206,94,58,89,43,136,2,40,165,224,5,75,65,230,59, + 143,164,21,149,253,167,194,157,235,33,138,34,46,94,57,139,131,63,239,172, + 216,125,248,127,211,234,244,53,5,90,141,14,21,87,47,224,224,79,59,107, + 191,62,244,241,164,202,154,203,246,213,95,148,60,181,13,95,125,181,208,104, + 177,64,62,15,177,201,76,46,88,239,67,189,209,136,51,229,229,56,94,82, + 178,251,66,85,213,55,74,121,146,223,47,103,254,62,225,127,220,186,138,119, + 254,246,219,155,26,74,207,240,28,55,251,96,66,124,39,0,208,82,241,101, + 157,32,124,9,138,58,142,210,75,90,65,252,119,90,161,117,117,152,131,9, + 241,58,11,167,89,174,161,244,204,109,69,69,14,235,49,34,31,150,220,221, + 185,223,24,106,141,115,207,28,46,189,100,172,53,138,74,83,23,168,72,97, + 172,53,138,103,14,151,94,50,212,26,231,230,238,206,253,6,249,176,56,159, + 119,52,231,199,179,198,122,227,188,179,71,202,106,5,19,79,154,132,255,88, + 86,107,49,54,249,26,4,19,79,206,30,41,171,53,214,27,231,29,205,249, + 209,222,71,38,152,121,40,133,3,192,109,197,197,249,28,165,103,68,45,151, + 1,74,52,90,129,22,116,172,171,123,102,220,169,83,87,164,115,136,136,42, + 142,23,223,2,128,163,113,113,157,120,142,155,173,17,197,51,227,10,11,29, + 68,144,193,96,4,14,7,0,26,78,168,9,227,202,11,80,243,221,97,241, + 234,238,67,168,221,115,56,92,87,115,34,68,167,171,181,88,44,2,192,215, + 134,113,229,39,92,196,59,42,2,5,4,94,132,169,214,132,218,11,54,97, + 91,119,112,214,231,79,127,149,88,180,167,164,201,50,84,174,144,207,111,3, + 128,225,15,14,221,48,126,73,234,157,210,103,67,141,113,0,224,32,110,131, + 93,165,85,83,174,199,169,115,181,40,44,173,193,169,210,90,151,71,97,105, + 29,46,84,24,192,243,202,226,196,11,142,158,89,131,161,110,215,179,111,252, + 45,185,172,162,164,66,26,43,193,11,150,130,204,183,31,73,43,43,111,12, + 115,166,193,88,143,67,191,124,83,177,235,240,214,180,6,99,93,1,0,232, + 77,245,200,251,207,191,43,118,28,252,71,114,85,237,101,135,165,205,156,237, + 2,192,175,231,206,125,255,218,206,157,11,235,13,6,152,204,102,8,162,181, + 239,79,148,14,81,132,133,231,81,85,95,143,83,23,46,32,191,184,184,120, + 223,137,19,15,53,73,200,233,126,153,138,204,126,45,213,165,19,197,181,148, + 32,194,194,105,94,57,144,144,144,52,166,168,216,146,90,88,180,94,39,10, + 223,232,4,241,213,180,194,194,85,0,112,32,33,33,201,194,105,178,41,33, + 29,117,162,160,252,208,146,15,203,119,31,239,219,161,191,106,156,123,246,135, + 210,75,166,122,51,117,86,111,83,189,153,158,253,161,244,146,254,170,113,238, + 119,31,239,219,161,36,110,18,123,151,239,223,215,112,69,255,108,69,81,165, + 89,46,150,123,151,239,223,87,115,177,54,179,178,184,202,66,101,191,98,42, + 2,21,69,149,230,154,75,117,153,123,151,239,223,215,24,78,81,81,88,105, + 105,184,162,127,86,30,46,167,99,84,84,186,8,46,82,228,208,71,35,8, + 31,143,184,120,81,223,248,125,241,180,86,20,255,55,173,164,164,112,127,66, + 66,82,173,86,251,10,8,34,56,66,214,42,165,197,96,48,2,67,11,0, + 221,187,134,20,223,51,150,255,240,210,229,186,142,130,32,112,132,112,98,199, + 142,81,181,125,251,116,58,35,138,162,177,71,215,208,51,247,140,229,63,82, + 138,167,162,232,80,251,242,38,1,117,151,234,81,126,242,74,237,241,143,127, + 202,44,252,174,248,117,145,23,149,151,244,240,128,205,35,59,223,63,185,239, + 204,51,135,206,133,72,59,7,216,166,14,208,254,201,125,79,159,57,116,238, + 83,151,158,155,141,121,235,126,200,186,84,105,128,217,34,194,83,171,170,133, + 167,56,125,161,110,159,82,220,229,170,178,38,97,188,96,41,120,245,147,69, + 105,157,35,187,165,201,195,214,127,178,208,33,76,206,217,139,167,202,127,45, + 249,33,173,193,88,91,224,46,204,157,93,0,216,254,227,143,107,170,234,235, + 175,78,73,78,94,213,37,50,178,75,152,78,7,13,199,65,4,96,50,155, + 81,213,208,128,11,149,149,56,86,82,178,123,223,137,19,15,25,45,150,75, + 206,105,136,130,136,186,75,245,168,43,105,192,216,176,52,252,207,223,31,246, + 107,210,255,152,162,162,211,7,19,18,50,45,28,55,223,164,209,172,218,151, + 152,120,148,163,244,24,40,206,2,208,237,79,72,248,147,72,200,72,19,199, + 141,208,80,122,33,68,224,159,24,83,84,236,82,148,80,4,211,222,79,246, + 126,126,199,131,19,52,103,243,206,173,160,128,61,239,20,184,116,54,239,92, + 173,165,222,178,100,239,39,123,63,71,17,60,253,190,232,133,162,11,155,195, + 34,116,163,121,179,172,253,56,17,186,242,179,229,239,71,118,14,191,197,98, + 230,235,165,96,83,131,185,162,170,184,106,123,249,153,203,239,67,246,131,177, + 232,45,151,171,138,171,182,95,40,186,176,25,46,126,72,35,242,243,45,71, + 227,226,158,168,213,106,87,155,117,186,37,123,19,19,143,114,192,17,216,166, + 81,80,81,52,237,77,76,204,52,115,220,8,141,40,158,225,64,50,83,79, + 157,10,218,192,40,6,227,90,70,11,0,49,125,122,94,189,238,186,46,245, + 70,227,32,34,8,2,33,132,80,173,86,75,195,195,194,248,232,232,104,90, + 89,89,89,219,165,107,151,2,165,248,158,61,123,210,218,237,131,236,9,214, + 95,174,171,57,144,253,125,230,47,219,78,172,231,141,188,207,91,230,56,179, + 103,69,110,54,128,108,185,247,102,227,248,123,147,254,225,213,250,150,239,41, + 44,156,236,15,243,55,220,171,88,249,11,2,95,80,89,227,184,45,141,82, + 152,196,129,159,118,52,241,100,149,194,60,217,5,128,253,5,5,239,28,43, + 41,249,226,214,196,196,199,7,245,233,51,169,75,100,100,18,165,52,252,74, + 109,237,197,51,229,229,121,191,150,150,190,235,170,89,18,0,66,196,16,36, + 157,191,9,51,166,61,73,222,199,71,174,78,243,138,49,69,69,167,1,60, + 149,155,144,240,128,200,113,163,205,28,247,8,128,14,0,64,128,58,142,210, + 10,157,32,108,73,45,42,242,174,57,174,8,166,19,239,252,190,61,254,129, + 254,134,218,210,171,118,149,175,40,184,188,165,99,108,231,220,226,143,207,124, + 131,50,143,226,6,0,40,216,252,91,77,183,57,93,95,49,84,215,71,1, + 64,76,76,140,78,199,235,44,5,91,126,51,119,187,174,235,43,134,234,122, + 251,50,94,149,167,42,222,11,239,18,169,47,216,252,155,195,2,200,87,78, + 85,188,25,222,37,178,206,57,220,25,219,194,201,143,127,157,148,244,68,131, + 78,55,65,228,72,154,8,18,105,45,7,81,175,17,104,105,8,165,95,78, + 56,121,178,201,114,95,12,6,67,61,8,219,131,138,193,104,61,176,13,79, + 25,12,245,104,246,121,112,12,6,131,193,96,52,7,90,0,120,187,248,113, + 142,16,162,133,108,199,110,80,74,41,165,252,252,249,243,233,218,181,107,137, + 187,120,249,142,198,243,151,204,27,102,110,176,20,109,204,222,168,250,142,222, + 235,182,174,57,54,111,234,130,97,178,207,119,206,155,186,128,237,232,13,32, + 125,246,236,200,174,145,145,169,29,66,67,147,8,33,97,38,139,229,226,85, + 189,62,111,245,186,117,110,119,244,46,59,95,74,99,250,196,170,186,163,247, + 180,148,148,36,0,247,1,72,0,236,203,97,153,0,148,0,120,111,75,94, + 222,57,111,210,145,88,252,202,226,190,53,21,53,198,77,107,55,149,3,192, + 140,249,51,122,116,234,222,41,108,229,51,43,125,218,209,251,185,117,207,117, + 170,169,168,9,223,184,98,227,37,231,240,171,229,87,195,94,123,229,181,203, + 0,240,212,51,79,69,119,238,209,217,248,210,188,151,28,154,34,103,47,153, + 221,179,83,247,78,6,231,112,87,246,254,54,122,116,95,81,20,31,6,33, + 113,148,210,80,0,32,132,152,0,20,129,227,254,181,229,224,193,2,165,116, + 24,12,134,58,112,0,64,8,233,108,225,197,36,163,193,114,171,193,96,25, + 101,48,88,110,53,24,45,73,130,32,116,92,183,110,157,134,16,210,209,77, + 188,195,159,58,50,58,114,82,255,209,253,126,93,186,124,169,106,59,122,175, + 219,186,102,229,186,173,107,20,119,244,94,183,117,205,239,235,182,174,105,150, + 29,189,39,140,187,35,211,85,92,120,120,120,147,5,155,148,194,0,224,233, + 57,115,155,132,43,133,73,188,242,194,58,151,118,211,103,207,142,220,240,242, + 203,47,165,221,120,99,217,144,254,253,119,12,232,217,115,85,191,238,221,95, + 72,236,221,251,237,17,241,241,39,222,92,181,42,239,153,5,11,92,238,232, + 93,120,174,16,111,125,249,38,61,156,127,56,224,202,117,90,74,138,118,90, + 74,202,139,0,158,129,117,80,197,162,45,121,121,127,217,146,151,247,23,0, + 243,0,92,6,176,98,90,74,202,115,211,82,82,154,172,252,175,68,198,171, + 25,125,59,117,239,244,88,175,248,94,246,123,223,43,190,215,208,78,221,59, + 61,150,241,106,134,215,59,122,191,254,207,215,185,240,168,240,59,122,244,235, + 49,90,41,60,186,127,244,40,41,44,186,127,244,168,240,168,240,59,94,255, + 231,235,14,45,28,61,250,245,24,173,20,238,204,244,212,212,176,105,41,41, + 203,68,74,87,136,132,92,22,117,186,121,255,60,116,232,47,255,60,116,232, + 47,90,139,101,145,8,84,64,20,159,153,150,146,242,98,106,106,106,139,44, + 151,199,96,92,11,112,0,96,52,9,241,151,43,197,233,23,42,233,210,139, + 149,116,217,197,74,186,180,188,154,127,200,104,180,244,7,16,102,50,11,253, + 47,87,138,15,57,199,27,140,230,254,212,121,61,75,10,104,67,181,177,221, + 7,117,203,89,249,225,43,191,46,124,126,193,68,5,187,94,179,110,235,154, + 223,1,44,130,109,141,195,117,91,215,28,179,189,222,105,11,27,4,96,195, + 186,173,107,20,87,60,1,128,189,187,114,232,222,157,27,233,222,29,217,238, + 143,47,179,233,238,255,91,79,55,172,94,150,169,148,206,223,238,123,44,67, + 41,252,214,145,201,51,147,111,29,51,203,83,152,68,76,143,254,179,94,120, + 254,149,153,158,194,36,122,117,235,171,104,119,254,211,79,199,140,30,60,248, + 72,191,238,221,159,229,5,161,147,209,98,129,201,98,129,153,231,97,225,121, + 240,162,136,200,240,240,228,27,98,99,15,190,248,236,179,11,148,210,0,0, + 131,96,192,161,51,223,227,221,207,223,161,39,11,79,250,37,116,211,82,82, + 34,97,157,180,173,133,85,216,222,216,146,151,103,247,148,182,228,229,93,1, + 240,62,128,71,0,116,5,176,210,147,200,45,121,121,73,116,120,151,208,39, + 66,34,180,211,52,90,141,253,92,141,86,19,22,18,161,157,22,222,37,244, + 137,37,47,47,137,246,38,127,21,87,202,227,66,58,104,103,105,67,181,93, + 21,195,67,52,246,112,109,136,166,107,72,7,237,172,138,43,229,14,75,200, + 104,67,181,138,225,114,166,167,166,134,241,22,203,74,80,218,171,76,167,155, + 254,113,94,222,27,31,231,230,94,1,128,7,82,83,175,19,66,67,251,125, + 156,151,247,134,86,167,75,7,165,154,62,102,243,250,41,169,169,46,247,178, + 99,48,24,254,195,1,128,133,183,116,50,90,248,36,179,168,27,101,22,117, + 201,38,65,59,202,104,226,111,176,88,44,29,41,165,26,139,197,210,209,104, + 225,111,112,142,231,45,124,71,42,138,77,158,102,41,165,160,34,160,139,208, + 221,208,123,72,175,111,150,191,243,242,222,121,207,204,245,121,71,111,155,184, + 13,146,5,217,135,83,219,154,38,231,200,226,22,173,219,186,70,121,71,111, + 94,4,53,139,16,76,130,219,131,55,241,104,208,91,96,50,43,79,246,230, + 133,166,187,4,36,223,146,60,243,233,199,150,228,240,66,227,136,247,17,195, + 70,62,226,28,38,135,2,232,223,123,80,206,115,207,100,62,34,15,27,208, + 123,112,206,178,165,47,52,17,57,37,187,233,179,103,71,222,146,152,184,59, + 68,171,29,108,48,155,97,230,121,235,92,56,219,124,56,235,61,104,92,23, + 51,166,91,183,213,207,47,94,220,100,71,111,160,241,126,213,152,107,176,243, + 231,29,216,252,213,102,127,68,110,41,0,11,128,42,0,127,157,150,146,178, + 112,90,74,202,188,105,41,41,107,166,165,164,44,153,150,146,50,15,192,108, + 0,51,1,148,193,186,35,246,34,87,137,205,205,152,219,53,170,119,212,163, + 218,80,237,35,208,112,93,154,156,160,225,186,104,67,181,143,68,245,142,122, + 116,110,198,92,183,59,122,207,124,122,102,120,72,167,208,153,156,150,27,45, + 223,209,219,49,92,54,155,158,16,194,105,185,209,33,157,66,103,206,124,122, + 102,227,226,212,4,202,225,50,44,102,243,2,80,42,128,144,194,62,22,203, + 139,242,56,98,54,39,81,65,152,241,215,49,99,226,62,204,205,189,90,22, + 18,178,140,16,114,53,196,108,94,234,46,255,12,6,195,63,172,226,68,161, + 1,165,33,160,98,24,168,24,6,208,48,10,26,66,65,53,148,82,2,184, + 140,119,63,72,197,182,129,104,120,231,176,180,216,17,49,249,47,228,100,125, + 52,103,94,186,87,59,122,219,60,178,65,238,206,153,55,117,65,54,0,207, + 59,122,219,118,171,230,5,234,197,33,66,116,185,62,161,99,120,242,45,201, + 51,231,207,88,150,83,111,104,176,111,20,26,63,32,126,226,188,25,207,230, + 52,24,26,64,149,118,59,135,117,205,39,142,104,16,27,29,159,179,120,193, + 210,137,82,210,28,225,16,27,157,168,32,114,77,243,19,223,179,231,51,161, + 58,221,96,163,197,210,184,155,183,171,29,189,97,221,15,174,87,151,46,171, + 210,103,207,110,186,163,183,44,99,62,110,80,0,0,152,146,146,242,0,128, + 94,0,62,130,117,90,192,173,0,70,216,94,99,1,220,236,20,214,29,86, + 177,27,52,45,37,165,73,51,227,204,140,153,145,221,251,118,127,80,23,170, + 125,130,227,184,104,197,76,81,10,142,227,162,117,161,218,39,186,247,237,254, + 224,204,140,153,46,189,160,152,27,99,238,213,133,104,31,34,132,104,228,69, + 41,15,151,175,186,108,219,101,64,163,11,209,62,20,115,99,204,189,141,17, + 80,14,183,241,183,209,163,251,18,66,174,215,134,132,44,181,37,20,103,107, + 178,5,0,112,0,79,129,8,34,138,127,2,128,220,220,92,158,114,220,251, + 0,122,61,144,146,226,60,13,134,193,96,4,72,208,119,244,6,165,160,162, + 181,226,140,138,142,252,91,191,81,125,139,150,173,125,126,249,236,244,217,170, + 236,232,61,111,234,130,127,2,144,86,60,249,243,186,173,107,20,119,244,150, + 101,200,245,65,61,77,3,111,188,220,228,91,146,103,206,127,114,89,142,193, + 100,130,32,242,32,28,135,184,1,241,19,95,90,178,246,11,81,36,161,22, + 222,236,113,161,78,157,54,52,52,174,207,245,95,60,179,240,217,137,82,206, + 52,156,6,177,209,9,138,158,156,68,250,236,217,145,177,215,93,247,148,228, + 181,121,187,39,156,78,171,237,210,165,67,7,183,59,122,43,165,181,251,192, + 110,79,6,198,1,56,182,37,47,239,39,0,175,0,56,1,229,162,20,0, + 156,218,146,151,183,100,75,94,30,15,224,32,128,135,229,39,76,207,152,30, + 214,59,182,231,84,93,184,246,41,141,150,139,245,96,23,26,45,23,171,11, + 215,62,213,59,182,231,212,233,25,103,111,102,67,0,0,32,0,73,68,65, + 84,211,155,52,121,46,123,253,185,63,232,194,181,115,56,13,233,38,191,52, + 87,225,18,148,2,156,134,116,211,133,107,231,44,123,253,185,63,120,10,7, + 0,81,20,31,22,173,215,4,216,22,102,166,64,252,180,209,163,167,59,37, + 62,122,90,74,202,108,0,248,231,193,131,37,32,228,24,71,233,24,79,215, + 202,96,48,124,163,249,166,9,216,132,14,132,132,118,233,215,121,73,191,228, + 216,162,165,203,151,204,124,106,246,83,77,54,157,180,13,40,145,246,21,59, + 14,171,128,157,4,160,184,163,247,188,169,11,22,219,206,3,130,184,163,183, + 86,99,237,110,180,139,155,209,4,94,176,64,171,209,162,95,204,128,164,133, + 179,50,54,139,148,179,137,155,119,174,144,78,27,18,26,31,115,195,230,136, + 176,200,36,106,91,47,74,195,105,109,34,247,162,162,200,117,141,140,76,37, + 64,39,65,161,233,210,25,73,146,9,33,208,16,130,14,97,97,126,237,232, + 157,179,237,53,122,56,255,144,171,139,234,14,224,103,0,216,146,151,103,4, + 144,13,96,7,32,219,209,27,48,2,248,102,75,94,222,243,178,176,79,1, + 216,251,179,166,76,153,18,50,176,79,252,164,144,240,208,116,78,203,37,120, + 155,55,78,203,37,132,132,135,166,15,236,19,63,105,202,148,41,246,29,189, + 23,189,184,160,99,68,135,14,79,112,58,110,72,227,217,20,11,159,159,27, + 46,15,39,0,168,72,53,246,244,56,98,191,78,78,199,13,137,232,208,225, + 137,133,207,207,13,151,107,182,20,190,232,197,5,141,15,106,132,196,65,167, + 251,244,195,220,92,35,172,98,14,80,170,161,148,142,127,112,204,152,91,27, + 115,0,66,41,29,51,45,37,229,81,235,41,244,103,0,14,251,199,49,24, + 140,192,105,254,17,92,212,90,245,115,90,77,247,238,3,175,203,233,28,219, + 105,222,162,204,69,75,86,101,174,114,216,209,219,246,122,92,54,45,160,197, + 119,244,14,9,9,195,173,35,173,205,146,146,184,81,74,193,17,13,110,31, + 115,231,20,142,104,96,182,152,189,222,15,206,186,57,42,160,213,132,116,15, + 213,133,79,17,68,222,190,97,170,134,211,162,95,207,129,57,47,60,255,74, + 147,181,40,59,132,134,38,137,212,182,31,141,15,59,122,19,66,16,162,213, + 250,181,163,183,73,48,225,208,233,60,188,181,125,19,189,53,49,25,67,110, + 24,34,219,209,27,81,176,246,189,1,0,182,228,229,93,5,176,121,90,74, + 74,21,128,123,0,232,0,108,218,146,151,247,131,60,205,45,121,121,87,166, + 165,164,216,31,112,146,82,147,198,235,34,66,231,106,116,154,155,136,15,173, + 10,4,32,26,157,230,38,68,132,206,77,74,77,170,5,254,3,0,136,234, + 209,233,46,109,168,246,62,98,237,239,147,206,230,163,250,116,185,91,30,78, + 1,16,142,216,159,22,68,145,202,246,186,67,136,54,84,123,95,84,159,46, + 185,0,225,155,132,247,232,100,223,5,128,82,26,42,13,40,161,132,132,218, + 239,13,165,97,84,16,102,0,176,111,229,99,227,166,7,147,147,111,20,9, + 169,5,165,158,90,52,24,12,134,143,180,204,16,101,10,80,80,80,129,130, + 112,92,124,183,184,174,91,151,46,95,146,9,108,107,145,236,120,13,165,152, + 249,247,5,57,13,70,3,68,81,112,104,132,19,69,17,34,68,175,119,161, + 118,76,182,113,23,131,198,239,83,8,34,143,94,215,245,205,209,27,235,28, + 206,39,132,132,137,162,247,27,171,218,237,88,15,191,118,244,182,237,154,141, + 26,83,45,254,157,255,53,190,59,240,45,69,165,227,32,81,91,127,154,188, + 143,181,8,214,169,1,167,1,104,166,165,164,164,216,194,181,0,10,108,35, + 43,237,104,53,218,52,0,195,64,41,71,9,241,109,67,87,74,57,0,195, + 108,105,0,0,56,66,110,7,165,61,168,108,100,9,33,224,53,156,102,188, + 115,184,135,180,123,104,56,205,120,66,144,231,28,206,17,114,187,210,247,8, + 165,221,156,238,142,5,132,12,112,120,32,161,180,3,5,110,2,165,231,189, + 187,82,6,131,225,11,205,46,112,20,176,15,250,16,44,34,76,117,198,99, + 87,203,106,231,175,95,185,126,223,51,219,7,101,122,147,134,52,85,0,64, + 4,172,155,163,254,17,141,115,228,78,163,209,3,84,21,163,217,128,156,247, + 86,205,122,252,161,167,115,172,205,149,214,234,145,82,17,130,40,64,195,105, + 96,109,245,245,78,120,172,163,29,173,223,229,56,14,28,209,88,195,64,97, + 225,205,168,215,95,69,85,77,249,172,232,110,177,57,14,249,176,88,46,82, + 52,122,102,30,237,216,94,69,81,132,217,98,185,8,160,143,119,87,220,136, + 104,17,32,88,68,116,13,235,130,113,163,110,71,98,124,98,227,50,111,148, + 54,128,144,238,182,116,239,129,117,26,128,156,129,0,238,144,125,214,3,216, + 52,45,37,69,11,52,174,37,105,214,155,191,225,52,228,86,68,104,111,211, + 232,52,26,111,68,206,38,52,16,44,130,96,209,243,121,102,189,249,27,216, + 188,125,179,193,178,83,19,194,253,151,46,92,215,155,54,62,120,104,45,6, + 243,78,77,8,185,219,41,220,101,218,188,137,191,96,253,78,216,117,206,225, + 102,131,101,39,108,253,136,132,16,211,244,145,35,123,126,120,228,200,37,0, + 23,96,29,96,3,2,212,137,132,108,215,114,92,145,32,8,141,35,43,57, + 238,192,150,239,191,255,248,175,41,41,227,64,105,61,24,12,134,170,52,223, + 142,222,176,110,55,34,90,4,88,140,60,244,213,134,19,87,10,175,76,205, + 152,157,53,124,253,202,245,251,156,78,255,220,246,58,212,205,252,182,206,176, + 142,178,92,4,153,184,205,155,186,32,104,59,122,139,162,136,163,199,142,188, + 254,214,71,27,102,233,13,122,147,36,29,188,96,193,119,7,118,126,90,94, + 117,169,194,218,0,235,157,239,65,65,97,52,27,112,181,238,74,197,213,186, + 43,159,90,119,2,167,48,155,141,184,90,91,97,186,84,89,58,107,249,170, + 23,95,15,11,141,112,248,94,141,94,159,71,41,5,124,240,22,41,165,176, + 8,2,12,102,179,95,59,122,119,32,145,248,239,225,255,141,199,239,159,65, + 18,227,19,29,12,19,66,74,1,220,184,37,47,239,27,0,43,0,28,131, + 178,246,82,88,7,97,188,104,107,174,156,12,171,151,7,0,216,255,197,254, + 3,134,90,227,90,179,222,114,88,176,8,130,212,156,237,242,154,172,23,6, + 193,34,8,102,189,229,176,161,214,184,118,255,23,251,237,205,128,87,202,174, + 252,219,212,96,222,44,152,5,131,148,29,74,161,61,243,243,57,133,240,198, + 17,193,141,125,112,20,130,89,48,152,26,204,155,207,252,124,238,223,148,74, + 15,132,141,225,87,202,174,252,91,150,165,34,179,78,55,217,246,222,186,163, + 55,64,65,200,190,143,243,242,118,82,65,184,78,10,35,132,28,44,211,106, + 183,216,62,223,8,235,212,9,6,131,161,34,193,223,209,27,214,202,85,180, + 136,142,194,246,84,230,141,107,94,94,171,184,241,233,188,169,11,238,65,163, + 200,185,158,223,214,148,102,217,209,251,232,177,31,95,95,251,250,11,147,12, + 70,189,137,82,10,65,20,112,225,82,105,193,154,236,23,211,42,43,203,43, + 188,105,58,164,84,132,209,164,71,85,109,121,197,249,138,146,52,94,224,11, + 56,162,129,201,108,68,117,93,133,233,114,85,217,164,53,235,86,189,14,88, + 7,157,200,89,189,110,93,193,213,134,6,175,119,244,6,172,115,233,140,102, + 51,234,12,6,247,59,122,43,132,245,232,220,29,51,255,58,139,12,185,233, + 102,87,138,250,61,128,97,211,82,82,226,182,228,229,157,219,146,151,183,18, + 202,59,84,127,191,37,47,111,227,150,188,188,146,105,41,41,157,1,36,3, + 248,151,20,153,155,155,203,151,159,42,255,198,168,55,189,98,54,240,63,8, + 188,40,186,237,99,164,20,2,47,138,102,3,255,131,81,111,122,165,252,84, + 249,55,185,185,185,246,126,178,156,213,57,13,134,122,227,38,147,193,178,71, + 228,27,75,233,131,247,222,55,59,135,19,210,184,121,175,181,15,142,66,228, + 41,76,6,203,30,67,189,113,211,7,239,189,111,150,74,72,30,158,179,58, + 199,190,163,55,56,238,95,28,144,60,125,228,200,158,144,6,153,16,82,160, + 213,233,118,56,100,27,56,190,37,47,111,99,110,110,46,255,215,49,99,226, + 64,233,48,145,144,31,93,95,40,131,193,240,7,251,142,222,0,204,212,58, + 210,205,8,74,141,112,218,209,219,69,188,235,237,175,109,147,141,37,97,51, + 214,26,75,171,78,87,205,114,39,108,78,108,149,189,223,226,197,114,92,39, + 109,163,41,21,242,34,53,7,90,39,52,187,58,68,31,230,129,157,62,115, + 122,215,154,156,23,38,213,212,85,213,74,158,70,101,85,101,193,202,141,153, + 105,149,213,229,21,110,191,76,173,158,91,85,109,121,69,69,245,133,180,13, + 217,27,10,8,33,48,91,140,168,170,45,175,45,175,190,48,105,253,134,117, + 246,77,79,149,84,229,116,121,249,66,231,126,56,121,214,229,162,199,139,34, + 244,102,51,106,244,250,221,107,95,125,85,121,235,28,217,253,114,198,141,176, + 1,0,62,205,203,251,24,192,89,0,255,99,91,209,4,0,222,0,176,19, + 214,145,148,151,0,236,222,146,151,183,17,176,46,233,5,171,231,125,118,75, + 94,158,195,122,140,111,189,245,150,165,188,160,252,27,83,131,105,157,89,111, + 62,238,82,228,36,113,211,155,143,155,26,76,235,202,11,202,191,121,235,173, + 183,154,204,172,127,101,241,43,167,205,13,230,117,102,131,249,148,40,80,151, + 225,242,11,36,0,68,129,194,108,48,159,50,55,152,215,189,178,248,21,251, + 2,3,174,194,1,192,182,182,228,89,139,78,55,7,128,134,0,191,105,117, + 186,85,31,230,230,94,149,165,93,165,225,184,143,1,96,74,106,106,36,17, + 197,255,1,112,246,227,188,188,38,107,170,50,24,140,192,176,9,28,173,225, + 8,95,0,190,238,48,229,107,15,129,175,59,172,225,196,19,132,144,90,74, + 169,0,208,90,142,240,39,92,196,55,173,17,41,133,200,139,224,37,97,43, + 169,154,117,233,196,229,196,85,89,171,189,222,209,219,105,126,27,96,93,142, + 75,62,25,86,222,207,118,114,222,212,5,46,119,244,230,205,2,26,12,60, + 26,12,22,212,27,93,31,13,70,30,70,179,0,209,133,202,57,123,102,167, + 207,156,222,245,242,218,231,146,171,106,42,43,164,10,178,178,178,178,96,101, + 118,102,90,213,213,43,21,174,84,129,23,5,84,215,85,84,84,84,95,72, + 203,222,184,161,0,0,4,81,64,85,93,69,197,229,170,178,228,87,101,226, + 166,100,23,0,94,89,179,230,251,51,229,229,11,121,193,154,95,233,12,185, + 176,81,74,97,225,121,52,24,141,168,105,104,40,174,172,171,107,186,163,183, + 245,68,251,253,10,17,67,16,215,221,175,86,222,183,97,29,192,178,216,230, + 201,241,91,242,242,62,4,240,29,128,183,183,228,229,189,3,0,211,82,82, + 226,0,100,192,58,242,50,75,41,161,183,222,122,203,114,181,248,234,14,99, + 157,105,149,69,111,62,78,133,166,5,64,5,74,45,122,243,113,99,157,105, + 213,213,226,171,59,148,196,77,226,252,146,243,123,77,245,230,245,162,89,168, + 166,178,17,146,242,112,231,239,136,102,161,218,84,111,94,127,126,201,249,189, + 118,155,34,37,74,225,114,202,116,186,44,80,26,9,74,123,81,66,182,219, + 166,12,0,0,8,199,149,137,192,246,127,124,255,253,185,191,142,25,19,23, + 98,177,44,6,16,174,161,244,109,87,121,103,48,24,254,163,5,0,173,150, + 20,119,141,196,135,22,94,232,8,10,14,4,162,134,227,106,117,90,238,12, + 0,163,86,67,206,116,141,196,71,74,241,148,82,135,49,236,162,72,193,155, + 120,152,26,204,181,181,231,107,51,235,175,52,188,158,243,90,142,95,59,122, + 207,155,186,96,241,186,173,107,206,195,186,188,83,136,180,115,192,188,169,11, + 134,173,219,186,134,194,58,160,228,83,151,158,155,141,130,146,234,44,163,89, + 180,175,54,226,14,145,82,232,141,194,62,165,56,147,197,216,36,172,178,170, + 178,96,125,206,138,180,126,253,6,164,217,195,42,155,134,201,49,24,27,202, + 235,244,213,118,113,115,21,230,206,46,0,60,255,242,203,107,158,95,188,248, + 106,239,46,93,86,233,180,218,46,28,33,214,105,6,176,246,23,90,108,205, + 146,53,122,253,238,202,186,186,135,54,190,246,90,147,29,189,41,5,120,19, + 15,152,9,82,6,141,198,109,201,99,253,154,244,191,37,47,239,252,180,148, + 148,245,0,30,3,240,252,180,148,148,99,0,126,5,112,30,128,118,90,74, + 202,88,0,67,0,12,3,112,17,128,52,217,91,145,141,27,55,154,102,207, + 158,253,57,23,215,69,67,8,121,82,228,45,246,155,39,242,22,106,49,224, + 87,83,189,229,141,154,211,53,159,111,220,184,209,237,239,235,61,227,123,116, + 81,245,226,79,66,194,116,67,1,209,172,20,78,169,104,23,72,222,108,177, + 16,194,125,106,172,54,125,242,158,241,61,185,93,179,200,55,13,151,147,155, + 155,203,79,73,77,93,18,98,54,47,37,148,206,153,150,146,114,140,82,250, + 51,7,84,81,81,4,33,196,60,45,37,101,54,4,97,24,128,179,26,74, + 215,127,116,248,48,27,69,201,96,4,1,45,0,132,232,116,87,117,90,109, + 189,40,134,18,74,41,1,33,148,16,66,57,66,248,133,11,23,210,213,171, + 87,215,106,181,218,2,165,248,69,139,22,209,25,178,29,189,5,19,95,83, + 117,186,58,179,246,98,221,250,215,54,190,22,240,142,222,182,229,184,178,157, + 188,55,192,113,142,156,91,230,44,124,33,51,208,124,0,192,172,5,255,163, + 88,249,87,86,85,22,84,86,85,22,120,10,147,120,113,197,178,38,158,172, + 82,152,39,187,0,240,226,202,149,239,164,207,158,253,69,151,14,29,30,239, + 16,22,54,41,68,171,77,162,64,184,217,98,185,104,48,155,243,234,12,134, + 119,93,54,75,2,8,209,132,96,104,204,48,220,126,219,132,128,182,242,1, + 172,34,7,32,115,154,117,217,169,91,96,93,70,77,106,178,172,5,112,5, + 192,167,91,188,108,142,219,184,113,163,105,202,220,41,219,7,245,73,48,152, + 140,252,5,41,188,174,74,127,33,52,76,187,238,228,249,162,111,62,221,248, + 169,87,15,79,171,50,87,94,93,186,102,113,142,96,166,81,46,194,237,35, + 121,234,171,26,10,53,33,228,231,85,153,43,29,22,22,168,171,108,56,165, + 9,33,249,206,225,206,124,154,155,91,15,96,233,148,228,228,7,40,165,227, + 64,200,120,88,61,86,80,74,27,8,33,165,4,216,245,233,161,67,222,237, + 108,206,96,48,252,130,237,232,205,96,180,34,216,142,222,12,134,122,176,29, + 189,25,12,6,131,209,46,209,2,129,239,52,237,11,106,237,110,205,108,50, + 155,205,97,179,185,108,109,4,184,233,219,7,121,94,92,148,193,96,120,13, + 243,224,24,140,86,192,108,119,83,110,24,12,134,95,48,129,99,48,90,1, + 156,63,139,152,50,24,12,183,180,204,98,203,173,148,152,152,24,143,3,110, + 202,202,202,88,69,196,80,29,87,115,47,25,12,134,255,48,129,115,162,180, + 180,212,101,92,108,172,199,253,55,25,109,7,103,69,105,209,7,23,78,167, + 97,15,78,12,134,202,248,218,68,105,223,254,58,53,53,149,42,124,110,211, + 148,149,149,17,87,34,22,27,27,203,188,183,246,3,45,42,42,194,87,95, + 125,133,162,162,34,172,89,179,6,240,127,61,86,175,200,205,205,245,148,126, + 155,255,255,48,24,173,13,95,5,142,72,71,110,110,46,82,83,83,33,251, + 220,44,149,127,76,76,12,149,31,106,167,175,36,114,215,136,184,81,167,163, + 189,66,1,192,108,54,99,208,160,65,216,183,111,31,238,185,231,30,204,154, + 53,203,30,23,12,210,211,61,45,165,202,96,48,212,166,205,12,50,217,182, + 109,91,102,76,76,12,45,44,44,68,105,105,41,74,75,75,241,229,23,219, + 17,19,19,67,183,109,219,150,169,166,45,185,200,93,35,226,6,0,40,44, + 44,180,31,8,190,200,81,0,52,35,35,163,57,197,148,22,21,21,161,186, + 186,26,73,73,73,40,47,47,71,90,90,26,222,120,227,13,204,157,59,23, + 119,222,121,167,148,175,128,120,250,233,167,155,164,17,19,19,163,24,110,207, + 152,192,6,81,50,24,106,211,102,250,224,210,211,211,51,164,254,177,207,62, + 251,12,0,48,121,242,100,148,150,150,34,54,54,54,99,219,182,109,184,247, + 222,123,51,213,178,103,19,57,234,139,184,205,156,93,66,95,223,24,215,22, + 197,144,218,68,173,221,195,113,28,42,43,43,81,93,93,141,46,93,186,224, + 157,119,222,193,147,79,62,137,199,31,127,28,111,189,245,22,118,238,12,124, + 81,255,87,95,125,181,73,216,87,95,125,69,194,195,195,93,139,103,123,246, + 153,25,140,22,162,77,8,156,228,185,1,86,113,155,60,121,178,67,124,97, + 97,33,18,19,19,51,0,100,170,105,215,27,113,155,57,187,164,93,84,77, + 137,137,137,146,231,134,196,196,68,100,103,103,183,203,102,53,81,20,81,94, + 94,14,0,200,203,203,67,74,74,10,6,12,24,128,221,187,119,227,143,127, + 252,99,192,233,143,26,53,138,30,62,124,216,249,51,1,128,165,75,151,226, + 171,175,190,178,127,102,48,24,193,165,205,52,81,134,133,133,41,138,155,20, + 7,88,155,49,213,180,57,115,118,9,85,18,48,41,92,37,113,243,166,153, + 46,152,77,121,84,218,43,47,49,49,17,137,137,137,65,177,1,47,175,211, + 203,243,252,38,33,33,1,61,122,244,192,207,63,255,140,30,61,122,224,206, + 59,239,196,233,211,167,145,144,144,128,211,167,79,123,78,64,129,165,75,151, + 82,233,144,139,27,0,132,135,135,99,233,210,165,20,0,158,127,254,121,226, + 28,207,96,48,130,71,155,240,224,36,148,196,45,88,204,156,93,66,115,178, + 165,45,231,60,11,153,159,77,147,94,87,228,89,89,89,200,200,200,160,89, + 89,89,65,121,250,47,42,42,146,60,97,100,103,103,171,157,60,1,64,61, + 92,3,5,128,140,140,12,4,235,26,37,246,237,219,103,239,123,203,206,206, + 198,111,191,253,38,23,55,159,109,47,95,190,220,101,220,222,189,123,201,222, + 189,123,189,185,207,109,230,97,147,193,104,43,180,25,129,51,26,141,118,79, + 77,41,206,91,212,110,82,12,160,207,205,231,124,4,65,228,168,210,102,170, + 0,144,158,158,174,182,200,56,139,156,67,62,128,160,139,27,45,42,42,66, + 66,66,2,30,125,244,81,188,244,210,75,184,122,245,42,210,211,211,3,18, + 55,21,97,205,150,12,134,202,180,9,129,43,43,43,35,137,137,137,212,213, + 36,108,155,215,161,184,59,116,32,204,74,87,110,178,82,97,32,137,131,170, + 216,42,123,175,4,47,24,158,92,81,81,17,0,4,203,123,147,99,23,57, + 9,233,125,115,137,155,196,115,207,61,167,148,55,191,24,53,106,148,253,189, + 115,19,228,139,47,190,72,191,250,234,171,38,225,10,48,129,99,48,84,166, + 77,8,156,52,223,45,54,54,22,133,133,133,118,79,206,104,52,58,136,155, + 154,163,40,149,80,113,132,36,129,76,208,188,168,220,125,57,215,91,154,211, + 123,107,73,154,136,27,84,22,19,167,65,35,14,133,186,124,249,114,24,12, + 6,111,236,133,168,153,39,6,131,209,6,4,78,62,153,59,59,59,59,203, + 54,90,18,242,48,192,123,113,107,69,195,248,29,68,206,27,130,225,229,52, + 163,247,6,56,54,69,58,68,4,169,143,49,232,226,230,204,211,79,63,237, + 48,77,224,137,39,158,176,127,254,211,159,254,68,19,19,19,21,167,17,0, + 240,106,103,114,6,131,225,61,173,186,99,219,89,220,0,107,115,101,118,118, + 118,150,116,0,193,247,220,130,136,215,149,109,48,196,77,105,1,251,32,122, + 111,138,253,108,25,25,25,128,173,28,36,145,83,203,94,115,139,27,0,188, + 250,234,171,100,200,144,33,14,159,1,96,205,154,53,180,172,172,204,254,89, + 129,214,242,224,197,96,180,27,90,173,7,167,36,110,146,144,53,151,160,197, + 196,196,248,52,209,219,79,136,179,55,227,231,57,126,33,77,11,8,178,247, + 230,205,32,18,111,70,90,122,109,175,37,196,77,34,59,59,91,90,198,206, + 206,138,21,43,176,109,219,182,38,225,50,52,65,207,24,131,113,141,209,42, + 61,56,119,226,214,156,121,40,45,45,245,106,11,157,182,142,36,110,65,244, + 222,8,172,34,237,41,125,111,207,243,72,75,137,27,0,164,166,166,54,177, + 119,223,125,247,41,134,51,24,140,224,209,234,4,174,53,137,27,96,221,62, + 167,61,139,92,51,136,91,115,211,170,182,193,145,120,243,205,55,61,229,131, + 111,150,140,48,24,215,16,129,108,151,131,220,220,92,200,62,171,34,2,146, + 168,181,6,113,147,104,175,34,215,14,197,77,142,180,243,69,91,129,53,81, + 50,24,42,227,107,31,156,189,194,176,137,27,92,125,246,151,123,239,189,55, + 115,219,182,109,246,247,170,36,234,37,74,226,38,97,91,212,185,57,250,228, + 154,11,2,128,182,160,184,217,7,150,168,8,69,219,18,53,6,131,17,68, + 90,229,32,147,150,28,21,121,45,237,218,221,206,60,55,38,110,12,6,195, + 129,86,41,112,45,69,59,242,206,174,69,218,250,189,19,90,58,3,12,70, + 123,163,213,13,50,97,48,174,81,216,127,145,193,80,25,230,193,49,218,44, + 181,219,7,53,219,192,159,230,180,197,96,48,212,129,9,28,163,77,210,105, + 242,169,150,206,2,131,193,104,229,16,246,100,202,104,139,48,129,99,48,24, + 158,96,2,199,96,48,24,42,194,30,190,90,15,90,0,232,120,207,201,102, + 27,129,38,9,42,179,201,108,50,123,204,94,123,181,199,104,29,176,145,91, + 12,6,131,193,104,151,48,129,99,48,24,12,70,187,132,9,28,131,193,96, + 48,218,37,126,77,19,112,94,120,152,173,0,162,30,45,81,182,236,126,170, + 71,92,92,156,67,89,150,148,148,176,178,100,48,90,8,159,60,184,109,219, + 182,101,198,196,196,208,194,194,66,148,150,150,162,180,180,20,95,126,177,29, + 49,49,49,116,219,182,109,153,65,202,227,53,65,75,148,173,179,205,236,236, + 236,172,96,216,204,204,204,116,215,241,174,74,167,124,92,92,28,141,139,139, + 163,33,33,33,246,67,10,115,22,29,53,145,219,144,236,20,23,151,160,184, + 184,196,101,188,74,120,155,86,115,217,100,131,43,24,173,14,159,60,184,244, + 244,244,12,105,181,253,207,62,251,12,0,48,121,242,100,105,165,253,140,109, + 219,182,5,125,161,228,246,234,225,180,68,217,74,54,63,251,236,179,172,244, + 244,218,12,0,25,165,165,195,131,102,51,51,51,147,102,102,102,218,203,46, + 46,46,142,150,148,148,40,198,249,195,214,173,91,21,195,167,78,157,42,217, + 82,245,190,197,197,197,209,15,62,8,71,215,142,239,162,162,122,20,198,141, + 3,40,5,136,205,10,165,37,32,4,216,187,23,232,222,229,48,170,106,31, + 193,223,255,174,110,62,134,13,59,76,143,29,27,69,92,125,86,217,142,218, + 201,50,24,65,197,107,15,78,122,210,7,172,21,240,228,201,147,49,121,242, + 100,123,124,97,97,33,210,211,211,51,212,207,162,21,5,111,163,217,61,156, + 96,121,85,45,81,182,146,205,207,62,251,44,107,242,228,201,77,210,14,230, + 253,244,224,209,169,78,73,73,9,182,110,221,218,164,249,80,13,186,118,124, + 23,255,218,254,111,140,27,7,252,250,211,97,156,248,249,48,126,253,233,176, + 195,251,113,227,128,127,109,255,55,186,118,124,87,85,219,195,134,29,166,222, + 188,6,146,182,63,233,4,98,151,193,80,19,159,60,184,176,176,48,123,5, + 172,20,7,88,69,33,24,94,156,204,219,64,122,122,45,0,32,152,222,134, + 220,38,16,124,175,170,37,202,246,235,175,191,206,74,79,175,205,72,79,255, + 208,30,22,27,107,125,95,90,58,221,111,155,206,2,150,153,153,73,36,15, + 77,230,169,81,91,28,50,51,51,221,126,215,23,219,114,118,236,216,129,187, + 238,186,11,0,48,98,68,29,226,226,222,71,92,28,104,89,153,104,63,39, + 38,198,250,140,87,82,146,234,151,157,138,234,81,0,50,1,0,55,222,220, + 252,30,206,177,99,163,136,92,80,156,63,251,131,92,32,37,111,208,246,234, + 49,93,231,239,170,229,81,202,31,78,38,78,156,136,77,155,54,169,238,165, + 206,152,49,131,238,218,181,203,254,153,245,159,182,125,124,30,100,162,84,1, + 7,27,153,183,129,201,147,39,67,94,33,3,86,111,35,49,49,49,3,82, + 77,163,162,77,0,138,194,19,12,155,205,93,182,147,39,79,206,112,46,75, + 37,98,98,98,104,118,118,118,150,183,66,231,141,40,197,197,197,161,174,174, + 206,149,248,5,132,92,216,0,224,232,209,163,24,49,162,14,197,197,99,21, + 207,143,143,223,239,183,173,238,93,14,35,53,117,20,126,253,233,48,42,170, + 71,161,123,23,87,175,255,101,19,195,56,191,109,53,39,129,8,165,26,34, + 43,33,9,155,92,212,118,237,218,69,227,226,226,168,90,66,39,9,219,174, + 93,187,236,162,102,11,163,0,19,186,182,140,79,131,76,140,70,163,95,113, + 106,240,245,215,95,35,61,189,214,238,97,0,86,111,35,54,246,67,7,15, + 71,109,155,177,177,31,218,237,202,15,181,109,182,68,217,26,141,70,148,150, + 78,183,123,107,0,236,159,229,54,75,75,75,145,158,158,158,161,198,181,202, + 189,183,138,138,138,64,147,147,210,164,117,117,117,216,177,99,135,98,188,171, + 112,137,146,18,209,109,188,59,148,196,108,220,184,189,184,241,102,131,226,107, + 89,153,186,205,148,237,13,185,167,38,137,88,73,73,9,145,11,89,73,73, + 9,41,41,41,33,187,118,237,194,140,25,51,2,18,82,73,220,164,52,165, + 240,77,155,54,145,146,146,18,50,113,226,196,38,121,10,196,30,163,121,241, + 90,224,202,202,202,72,98,98,162,203,248,196,196,68,100,103,103,103,169,146, + 43,5,90,194,115,108,46,155,45,81,182,190,218,12,180,79,206,133,103,70, + 220,196,249,148,118,84,84,20,238,186,235,46,187,247,230,252,170,68,86,150, + 188,72,247,210,184,184,92,26,23,151,235,83,5,166,228,177,1,0,165,105, + 138,7,0,132,132,236,101,149,164,27,164,17,167,158,60,52,73,228,2,65, + 238,181,41,177,105,211,38,187,200,49,113,107,123,120,221,68,41,141,36,140, + 141,141,69,97,97,161,221,131,49,26,141,14,149,97,176,70,81,74,222,134, + 53,15,142,253,68,193,246,112,92,197,169,69,75,148,173,179,77,121,89,202, + 109,74,125,116,129,244,201,57,33,53,251,52,137,80,163,121,210,149,152,201, + 201,202,202,66,70,70,163,86,75,194,3,248,222,92,169,228,193,1,123,93, + 158,111,54,3,191,253,214,19,67,134,236,165,102,243,56,175,174,87,169,185, + 207,151,17,141,206,223,15,164,79,204,85,211,163,154,35,44,75,74,74,16, + 23,23,23,148,126,54,127,216,180,105,19,145,70,252,198,197,181,141,38,102, + 134,21,175,4,78,62,76,62,59,59,59,203,214,247,4,121,24,16,60,113, + 179,121,27,84,26,240,225,76,16,61,156,160,219,108,137,178,245,214,166,109, + 234,64,192,56,123,69,37,37,169,136,139,203,69,73,73,170,26,201,43,162, + 36,116,206,194,38,15,111,100,156,79,118,148,61,56,131,91,219,215,95,127, + 9,33,33,214,114,241,102,112,139,11,65,242,218,155,80,115,218,128,155,180, + 84,243,110,36,17,9,198,212,14,127,144,60,55,38,110,109,15,143,2,231, + 92,25,2,214,202,223,185,63,38,152,243,223,188,245,54,130,233,225,4,195, + 171,106,137,178,245,214,230,228,201,147,51,228,45,180,254,122,172,242,74,220, + 169,66,111,150,230,30,185,208,101,100,100,216,133,198,249,85,226,163,143,212, + 245,224,212,244,22,175,5,90,131,160,57,211,26,243,196,240,14,183,2,167, + 84,25,74,149,109,176,39,116,187,202,67,107,242,112,212,22,183,96,151,173, + 39,155,49,49,49,205,226,37,75,30,157,183,30,140,183,76,157,58,21,101, + 101,101,246,207,49,49,49,50,155,239,3,128,162,7,23,8,81,81,71,81, + 81,61,162,137,7,23,12,111,177,37,80,107,46,93,48,144,245,211,249,157, + 198,196,137,19,177,107,215,174,86,225,41,50,212,199,165,192,185,171,12,155, + 139,214,236,225,4,75,220,130,133,39,155,205,221,15,232,194,171,11,32,189, + 166,21,148,188,159,47,46,206,209,99,84,67,232,74,74,74,200,212,169,83, + 169,117,232,255,95,209,248,250,110,80,188,69,119,56,139,73,32,226,34,159, + 251,230,203,60,54,165,249,120,193,88,85,69,105,234,128,191,108,218,180,137, + 176,41,1,237,23,69,129,107,173,226,214,210,30,78,176,109,4,11,111,197, + 77,138,87,211,99,45,41,73,37,146,199,166,166,183,166,22,129,10,157,82, + 133,24,23,199,81,53,210,246,132,43,33,114,250,28,144,23,229,171,64,201, + 207,15,134,184,1,141,101,30,136,231,38,167,181,12,102,97,168,143,226,52, + 1,169,66,115,174,216,98,98,62,240,233,207,226,235,249,141,223,107,125,34, + 160,22,174,202,182,105,126,28,203,206,223,178,244,100,211,149,199,154,157,157, + 157,37,29,238,242,233,13,37,37,169,164,165,197,173,164,36,149,196,199,239, + 71,124,252,126,132,134,238,83,60,130,213,39,22,108,161,3,154,138,73,176, + 196,197,151,60,48,24,45,141,162,7,119,239,189,247,102,110,219,182,205,254, + 94,30,23,19,243,1,45,43,251,187,199,31,50,19,55,101,220,149,109,99, + 126,148,203,206,219,178,247,214,102,75,245,177,182,148,87,231,201,150,194,204, + 5,85,81,89,232,188,45,55,53,203,215,93,90,76,220,24,173,14,151,125, + 112,238,42,184,64,188,9,79,100,103,103,103,165,167,167,103,52,103,211,104, + 115,219,84,74,95,169,76,61,133,249,34,118,77,31,84,90,182,25,186,165, + 61,186,96,35,121,131,242,117,47,229,72,107,96,50,24,140,224,225,215,134, + 167,193,244,224,188,241,112,212,166,37,108,58,35,47,83,169,236,60,133,249, + 75,75,139,91,123,199,27,241,14,182,183,200,96,48,124,92,139,18,240,190, + 130,13,164,34,190,247,222,123,131,178,35,65,107,179,233,10,87,101,167,134, + 184,1,222,247,3,50,24,12,70,91,198,39,15,206,215,10,86,173,10,249, + 90,196,185,236,212,44,203,214,224,177,50,24,12,70,176,241,171,137,146,209, + 246,81,91,216,106,183,15,106,214,133,104,153,61,102,175,53,219,99,180,14, + 152,192,49,2,166,211,228,83,45,157,5,6,131,193,104,2,27,202,197,96, + 48,24,140,118,9,97,174,59,35,80,152,7,199,96,48,90,35,76,224,24, + 12,6,67,69,216,3,95,235,65,11,0,29,239,57,217,108,163,29,37,65, + 101,54,153,77,102,143,217,107,175,246,24,173,3,214,7,199,96,48,24,140, + 118,9,19,56,6,131,193,96,180,75,152,192,49,24,12,6,163,93,226,215, + 60,184,249,243,231,59,180,51,175,93,187,150,173,88,162,18,45,81,182,236, + 126,170,199,194,133,11,29,202,114,245,234,213,172,44,25,140,22,194,39,129, + 155,63,127,126,38,128,140,9,19,38,216,195,122,70,119,7,172,155,42,102, + 173,93,187,54,83,197,188,93,83,180,68,217,74,54,1,96,228,200,145,56, + 114,228,72,22,128,12,155,224,169,102,115,195,134,13,116,206,156,57,138,21, + 253,172,89,179,104,78,78,78,192,34,32,9,139,209,104,180,135,73,187,146, + 3,193,19,26,103,65,3,128,241,227,245,0,128,61,123,34,130,38,120,222, + 150,155,90,229,235,41,45,53,237,48,24,106,225,107,19,165,189,2,254,246, + 219,111,241,237,183,223,226,210,229,10,216,194,50,108,21,102,80,153,63,127, + 62,149,31,193,182,215,140,54,91,162,108,51,70,142,28,9,0,89,155,54, + 109,66,126,126,126,198,200,145,35,97,11,83,221,230,134,13,27,28,202,78, + 94,249,59,199,249,195,240,225,195,49,122,244,104,251,49,124,248,112,12,31, + 62,188,137,45,181,88,184,112,33,189,249,102,13,70,142,24,134,33,67,244, + 208,235,245,24,63,94,143,29,59,128,29,59,172,66,167,215,235,49,100,136, + 30,35,71,12,195,205,55,107,84,207,199,210,165,31,83,119,159,131,101,135, + 193,104,11,120,45,112,243,231,207,167,242,10,120,194,132,9,144,123,27,82, + 69,172,118,6,101,246,51,165,60,72,199,131,211,30,144,196,39,179,45,219, + 108,137,178,149,132,250,200,145,35,89,35,71,142,116,149,118,80,238,167,26, + 98,230,11,122,189,30,195,135,15,15,138,200,233,180,67,112,241,82,57,14, + 29,2,82,199,142,65,93,237,24,164,142,29,227,240,254,208,33,224,226,165, + 114,232,180,67,84,181,45,137,142,167,215,64,210,246,39,29,38,134,140,214, + 130,207,125,112,82,5,236,138,249,243,231,103,6,169,169,210,238,225,172,92, + 185,18,0,176,120,241,98,76,152,48,1,223,126,251,109,198,252,249,243,17, + 4,187,14,94,21,0,187,248,4,195,102,11,148,109,86,126,126,126,70,126, + 126,190,61,96,211,166,77,0,128,25,51,102,224,200,145,35,126,217,116,22, + 176,57,115,230,16,169,153,82,122,157,53,107,22,5,128,129,3,7,122,252, + 174,47,182,229,92,190,124,25,209,209,209,0,128,3,7,120,68,68,12,193, + 194,133,155,169,172,21,19,82,43,230,234,213,15,250,101,199,108,57,8,192, + 122,13,185,251,15,250,155,85,191,89,190,252,1,34,23,20,231,207,254,32, + 23,200,229,203,31,32,82,186,210,61,243,229,187,242,52,2,65,254,112,50, + 124,248,112,220,127,255,253,170,55,135,126,242,201,39,84,254,95,96,253,167, + 109,31,159,5,206,93,5,28,44,156,61,28,103,36,193,1,144,25,44,155, + 206,215,29,12,155,205,93,182,35,71,142,116,16,55,87,248,218,39,231,141, + 40,69,68,68,128,231,121,69,241,243,198,134,59,228,194,6,0,183,221,118, + 27,14,28,224,49,126,124,55,197,243,247,236,169,244,219,86,136,110,12,186, + 117,59,136,212,177,99,96,182,28,68,136,206,213,107,15,155,24,70,248,109, + 171,57,9,68,40,213,16,89,9,73,216,228,162,182,112,225,66,186,112,225, + 66,170,150,208,73,194,150,159,159,111,23,181,79,62,249,132,74,182,153,208, + 181,93,218,212,110,2,146,231,230,252,121,241,226,197,0,130,227,61,74,54, + 156,133,32,152,54,155,139,35,71,142,96,198,140,25,0,28,61,55,41,78, + 194,54,0,69,21,143,85,238,189,153,205,230,64,146,178,179,97,195,6,122, + 230,204,153,38,194,38,113,249,242,101,0,202,226,6,0,122,189,255,182,149, + 196,236,208,161,100,0,2,128,166,175,28,155,152,227,150,133,11,23,82,73, + 80,92,137,152,60,254,147,79,62,161,129,136,156,36,110,206,34,38,165,41, + 9,157,220,38,19,188,182,131,215,2,103,27,58,78,93,121,25,54,207,42, + 75,157,108,93,91,180,68,217,174,93,187,150,120,49,96,198,217,166,223,30, + 171,146,103,38,141,186,11,212,107,155,51,103,14,89,184,112,33,141,142,142, + 182,139,156,243,235,169,83,124,147,239,157,58,117,202,222,68,58,107,214,102, + 26,97,115,174,124,105,174,84,242,216,0,1,119,221,165,44,168,59,119,86, + 98,246,236,205,116,227,70,255,154,68,175,5,148,188,54,37,86,175,94,77, + 2,237,87,85,18,55,57,247,223,127,63,145,123,115,140,182,133,215,2,39, + 85,134,74,205,117,242,10,56,152,222,140,228,53,57,123,110,193,164,57,108, + 180,68,217,202,6,153,0,80,244,220,178,0,64,234,163,11,164,79,78,142, + 228,189,233,21,220,38,53,154,39,149,60,56,103,228,194,6,192,65,140,124, + 109,174,84,242,224,172,30,155,50,162,8,164,165,133,2,240,94,228,148,154, + 251,106,106,188,239,239,115,254,126,32,125,98,174,154,30,125,201,143,39,244, + 122,61,34,34,34,130,210,207,230,15,247,223,127,20,176,167,226,0,0,32, + 0,73,68,65,84,63,89,184,112,33,149,242,197,104,59,120,37,112,78,79, + 250,89,182,190,39,57,65,21,183,150,242,112,154,195,102,75,148,173,179,77, + 0,25,242,38,73,200,196,77,13,123,11,23,110,118,168,20,245,250,67,136, + 136,72,6,144,163,70,242,138,40,9,157,179,176,201,195,27,113,221,148,169, + 132,43,15,206,157,237,125,251,76,224,56,107,185,120,227,45,42,9,146,55, + 3,62,220,125,223,95,92,165,229,75,126,60,33,137,72,107,105,14,148,188, + 55,38,110,109,15,143,2,167,80,25,74,205,91,153,242,243,130,233,185,57, + 123,56,114,175,42,216,30,78,48,189,170,150,40,91,111,109,142,28,57,82, + 154,35,7,192,177,79,206,23,228,149,184,227,251,228,102,105,242,145,11,221, + 192,129,3,237,66,227,252,42,81,86,166,174,7,167,166,183,120,45,208,26, + 4,205,153,214,152,39,134,119,184,21,56,23,149,97,166,252,53,216,180,6, + 15,39,24,54,91,162,108,61,217,156,63,127,62,149,139,154,2,170,120,201, + 146,71,231,173,7,227,45,249,249,249,46,87,50,137,136,176,206,65,83,242, + 224,2,65,171,189,13,102,203,129,38,30,92,48,188,197,150,64,173,185,116, + 193,64,26,132,18,8,210,252,72,38,98,237,19,151,2,231,174,50,108,46, + 90,179,135,19,44,113,11,22,158,108,58,247,201,73,66,231,220,39,167,86, + 62,149,188,186,192,210,115,95,65,57,55,147,170,33,116,141,131,28,34,0, + 28,67,227,235,144,160,120,139,238,80,115,69,19,249,220,55,95,230,177,41, + 205,199,83,179,121,84,194,219,65,40,222,224,60,136,132,9,93,251,66,81, + 224,90,177,184,101,6,51,47,205,97,179,53,139,155,44,94,177,79,206,159, + 124,174,94,253,32,145,196,69,77,111,77,45,2,21,58,165,10,81,186,94, + 181,189,69,103,92,9,145,252,115,160,125,99,190,10,148,252,252,96,136,27, + 160,190,8,181,150,193,44,12,245,113,53,43,39,75,254,42,85,108,190,174, + 195,232,239,186,141,173,81,4,84,68,177,108,61,228,199,239,178,244,100,211, + 149,199,106,123,159,165,244,29,95,89,189,250,65,210,210,226,182,122,245,131, + 100,207,158,74,236,217,83,137,157,59,149,143,96,245,137,5,91,232,128,166, + 98,18,44,113,241,37,15,12,70,75,163,232,193,217,250,99,236,239,229,113, + 243,231,207,167,222,108,167,194,196,77,25,119,101,235,34,63,14,225,254,108, + 101,227,202,102,75,245,177,182,148,87,215,210,34,171,166,208,121,187,114,191, + 154,43,252,187,75,139,237,36,192,104,141,184,236,131,115,87,193,5,121,21, + 255,44,88,39,20,55,103,211,104,179,218,84,74,95,169,76,61,133,249,34, + 118,74,15,42,178,143,205,222,12,221,210,98,19,108,36,111,80,190,238,165, + 28,217,248,23,6,131,17,36,252,90,170,43,152,30,156,55,30,142,218,180, + 132,77,133,60,216,203,84,42,59,79,97,254,210,210,226,214,222,105,239,226, + 205,96,180,21,124,22,56,111,43,88,47,151,130,114,245,221,76,127,190,23, + 8,173,169,130,119,85,118,42,238,180,221,18,94,50,131,193,96,52,43,62, + 45,253,234,107,5,171,98,133,124,205,225,92,118,106,150,165,77,208,152,184, + 49,24,140,118,77,155,218,77,128,161,30,106,11,91,237,246,65,205,186,24, + 45,179,199,236,181,102,123,140,214,1,19,56,70,192,116,154,124,202,243,73, + 12,6,131,209,204,176,221,169,24,12,6,131,209,46,33,204,117,103,4,10, + 243,224,24,12,70,107,132,9,28,131,193,8,42,236,1,136,209,82,104,1, + 160,227,61,39,155,109,180,163,36,168,204,38,179,201,108,182,188,157,78,147, + 79,5,213,78,205,103,3,217,3,52,163,197,96,125,112,12,6,131,193,104, + 151,176,81,148,12,134,127,168,237,153,184,242,164,154,203,14,131,209,238,80, + 18,184,150,248,67,49,155,193,179,217,220,4,179,73,74,205,235,245,148,79, + 79,182,60,230,229,141,236,15,40,0,60,153,254,247,64,242,221,92,118,24, + 140,118,135,146,192,121,245,39,145,254,84,158,120,50,253,239,222,156,214,236, + 54,223,200,254,192,155,164,84,173,52,90,194,166,55,220,125,215,221,20,0, + 190,220,241,165,26,118,9,0,42,191,86,219,253,144,167,29,104,188,42,80, + 170,252,115,34,228,218,213,9,87,101,226,45,215,114,217,49,90,31,1,247, + 193,109,120,111,184,226,171,191,12,190,249,23,170,244,26,76,212,190,6,181, + 104,174,178,248,114,199,151,248,114,199,151,193,72,186,165,161,178,35,104,120, + 115,159,252,185,151,193,184,223,238,210,244,32,110,195,1,188,101,59,92,254, + 65,2,21,72,6,67,77,252,238,131,147,139,128,146,64,204,121,56,223,231, + 52,93,85,2,141,127,74,223,211,244,132,43,113,107,73,145,147,87,66,74, + 101,241,251,79,55,5,171,169,142,162,117,54,123,250,205,119,123,12,0,128, + 219,199,135,7,229,218,220,255,102,243,61,158,227,234,94,170,125,191,155,254, + 166,238,243,53,137,52,0,15,216,222,159,68,48,254,140,12,134,202,4,52, + 200,100,244,200,14,138,225,223,31,105,104,85,105,182,70,155,158,104,166,60, + 73,149,30,145,125,86,77,8,60,61,232,4,26,223,210,72,162,225,124,175, + 222,125,59,14,143,60,86,98,255,60,122,100,135,38,97,128,245,94,186,18, + 48,41,77,15,247,91,233,94,185,188,127,174,126,83,18,132,16,119,30,216, + 73,219,1,217,171,98,26,12,70,107,193,155,38,74,197,38,30,119,127,150, + 209,35,59,224,232,47,99,125,202,200,35,143,149,80,41,205,119,223,142,195, + 187,111,199,121,109,207,95,142,254,50,214,227,117,40,16,244,38,47,165,10, + 83,42,143,209,35,59,224,145,199,74,212,178,175,84,27,169,38,110,163,71, + 118,112,233,9,7,26,239,43,54,79,78,213,251,54,122,100,7,197,123,229, + 10,165,223,180,167,223,181,155,251,237,238,90,124,250,191,202,33,132,40,30, + 0,114,97,245,224,30,0,144,235,230,60,6,163,213,224,141,192,201,159,238, + 155,5,233,73,215,93,101,209,66,56,123,60,65,71,42,3,231,167,127,181, + 232,221,187,55,96,19,109,219,123,85,144,42,84,87,21,107,160,241,110,112, + 232,119,187,125,124,184,175,223,247,27,119,247,74,229,223,180,187,223,97,64, + 255,87,74,169,226,1,160,14,64,161,237,168,115,115,30,131,209,106,240,118, + 144,9,19,185,118,40,110,0,112,225,194,5,162,244,190,141,66,191,219,99, + 128,243,33,137,92,48,188,56,9,111,238,149,74,191,105,111,126,135,126,253, + 95,217,32,19,70,123,195,151,62,56,2,149,251,104,60,241,200,99,37,246, + 230,185,96,86,242,94,208,46,197,13,0,102,204,158,65,55,109,220,36,127, + 223,86,69,142,74,3,74,156,145,68,206,85,188,175,56,55,25,202,5,203, + 225,189,155,52,228,191,105,41,189,119,223,142,115,89,246,143,60,86,66,157, + 132,209,158,7,89,119,64,19,117,81,177,57,59,13,108,144,9,163,141,225, + 32,112,238,254,184,78,120,245,167,241,182,31,78,110,215,149,205,119,223,142, + 3,188,172,236,109,149,129,219,138,218,135,62,66,231,81,134,114,59,14,39, + 122,170,160,142,254,226,157,65,87,21,166,220,166,55,215,232,13,146,184,57, + 191,111,175,216,196,46,160,74,95,42,119,233,119,43,61,136,73,239,37,70, + 220,180,31,128,227,111,77,233,60,111,238,163,236,156,38,15,91,35,110,218, + 111,21,72,167,185,132,74,121,117,7,27,100,194,104,111,56,8,156,23,127, + 52,249,159,203,227,31,102,196,77,251,221,62,197,202,237,202,43,11,167,56, + 72,225,82,133,225,9,111,38,74,143,184,105,191,183,34,39,191,86,135,116, + 125,105,106,122,247,237,56,226,237,68,117,184,168,48,157,211,243,218,184,11, + 238,190,235,110,106,155,255,102,175,60,109,97,126,165,237,73,116,221,197,75, + 113,10,158,138,215,233,183,36,222,180,54,168,228,149,123,211,146,226,119,139, + 131,43,129,162,148,74,131,76,0,224,18,19,50,70,91,192,151,137,222,237, + 182,153,206,11,218,101,31,164,147,184,1,0,9,100,194,183,252,65,197,25, + 185,128,185,251,174,39,1,244,59,115,205,128,187,123,166,242,111,217,221,239, + 49,160,255,41,27,100,194,104,79,120,43,112,215,178,184,73,180,43,145,27, + 49,124,132,203,235,112,23,231,9,87,34,36,133,187,19,41,127,227,124,193, + 54,224,68,149,180,190,63,210,208,100,158,154,55,131,76,220,125,223,149,29, + 5,188,25,100,98,231,221,183,227,136,39,91,30,4,170,63,128,191,219,142, + 254,126,166,193,96,52,43,222,12,50,97,226,214,72,187,25,104,115,52,255, + 40,224,98,152,249,209,252,163,109,177,150,34,183,143,15,87,28,104,162,230, + 0,19,57,191,255,116,19,25,124,243,47,212,89,56,6,223,252,11,190,63, + 210,128,17,55,89,63,219,38,116,43,10,149,171,85,74,188,156,208,239,243, + 60,70,123,186,127,242,38,121,7,210,0,100,200,62,127,224,115,10,12,70, + 51,227,237,60,184,38,127,26,119,127,64,235,159,219,187,254,50,9,249,19, + 230,35,143,149,40,62,237,170,205,136,155,246,123,188,14,5,20,203,67,77, + 148,188,2,169,60,190,63,210,16,176,55,51,34,121,132,39,129,38,182,115, + 218,26,228,246,241,225,112,62,100,203,117,1,42,223,59,73,160,92,189,122, + 123,142,187,116,213,90,154,205,147,93,53,250,213,88,223,28,163,53,17,208, + 82,93,193,16,157,150,88,30,171,37,151,228,114,69,48,243,116,244,208,81, + 85,206,113,199,247,71,26,48,122,100,7,151,215,17,104,188,27,28,70,18, + 6,195,115,115,198,27,225,242,69,220,156,191,163,38,158,210,116,51,200,100, + 159,236,227,62,38,100,140,182,128,223,187,9,72,107,4,42,189,250,187,126, + 160,252,105,213,159,10,193,31,228,249,117,245,218,220,184,43,131,64,203,193, + 214,191,230,77,26,36,144,190,184,57,15,231,227,251,35,13,46,203,48,208, + 120,95,9,134,247,118,45,65,8,57,67,8,249,192,118,156,105,233,252,48, + 24,222,16,144,7,23,44,65,104,46,113,147,211,90,196,77,34,88,101,112, + 52,255,168,215,233,248,114,174,18,158,202,48,208,248,22,198,163,248,203,246, + 37,244,230,65,193,211,144,255,96,219,97,48,218,29,126,239,232,237,229,70, + 166,222,210,236,54,125,72,203,91,47,198,99,197,209,18,54,175,117,100,107, + 81,170,93,86,205,85,246,236,30,51,24,126,226,247,142,222,42,195,108,50, + 130,1,43,111,6,227,26,38,160,38,74,6,67,1,10,40,122,171,14,94, + 169,159,241,170,10,22,27,40,193,96,180,111,152,192,49,212,166,173,168,134, + 95,249,172,221,62,168,89,166,79,52,151,157,154,207,6,182,197,233,32,12, + 134,87,48,129,99,48,188,164,211,228,83,45,157,5,6,131,225,3,126,79, + 19,96,48,24,12,6,163,53,67,154,171,41,132,193,104,235,48,15,142,193, + 104,91,48,129,99,48,24,65,133,61,24,48,90,10,45,0,116,188,231,100, + 179,13,12,144,4,149,217,100,54,153,205,150,183,211,105,242,169,160,218,97, + 131,88,24,45,9,235,131,99,48,24,12,70,187,132,141,162,100,48,252,96, + 241,226,197,170,122,38,43,87,174,84,244,164,94,120,225,5,85,237,44,91, + 182,172,173,76,227,96,48,2,166,137,192,101,100,100,168,250,135,202,202,202, + 242,248,135,98,54,131,103,179,185,81,251,26,229,168,121,189,158,242,233,201, + 150,43,65,146,115,232,160,117,95,189,228,49,35,252,206,183,55,130,116,244, + 135,159,40,0,140,184,245,230,86,247,123,96,48,90,146,38,2,231,109,37, + 242,227,225,227,94,85,100,89,89,89,222,156,211,236,54,255,244,223,247,120, + 147,20,110,25,53,84,181,74,163,37,108,122,195,150,45,91,40,0,76,155, + 54,45,96,187,89,89,89,36,35,35,131,202,175,245,171,175,183,59,220,227, + 64,227,213,34,51,51,211,167,112,6,131,209,182,8,184,137,242,135,227,189, + 112,235,208,139,77,94,253,101,227,27,151,232,236,39,123,18,231,215,64,243, + 233,14,181,175,65,45,154,171,44,78,157,106,159,163,220,228,94,90,48,189, + 221,53,175,94,164,11,158,238,69,156,95,125,61,199,153,156,55,47,211,89, + 79,68,171,154,111,79,105,206,153,51,71,49,156,227,184,225,0,158,176,125, + 124,83,20,69,197,173,30,54,108,216,16,112,30,25,12,181,240,123,144,201, + 15,199,123,225,135,227,189,236,239,149,94,125,101,227,27,151,168,171,87,233, + 189,218,184,187,6,127,175,35,80,228,215,235,234,85,45,228,34,16,204,230, + 197,150,226,161,233,207,226,161,233,207,6,237,218,214,188,122,145,186,123,245, + 246,28,103,114,222,188,76,229,175,129,146,243,230,101,234,41,77,87,226,102, + 35,13,192,3,182,35,205,213,73,30,210,96,48,154,149,128,70,81,198,246, + 14,81,60,90,91,154,173,209,102,107,200,147,84,233,103,101,101,17,201,195, + 81,83,8,60,61,32,4,26,223,210,72,2,213,47,38,196,225,168,184,248, + 42,250,197,52,222,43,121,152,252,144,167,225,76,108,111,29,98,123,235,220, + 218,87,26,128,226,110,80,138,148,166,171,116,61,120,95,39,157,14,127,210, + 96,48,154,21,143,77,148,242,74,80,30,238,174,178,141,237,29,130,11,151, + 251,161,119,244,89,175,51,178,253,243,42,251,31,243,248,49,235,159,100,232, + 176,198,167,193,96,8,206,133,203,253,16,219,219,117,188,146,77,87,229,161, + 38,206,118,229,229,17,219,59,4,219,63,175,162,247,252,185,171,106,253,101, + 206,97,129,166,11,88,197,41,182,119,136,75,145,10,52,222,87,30,154,254, + 44,0,80,53,239,155,92,196,36,142,30,89,229,242,252,163,71,86,97,196, + 200,69,110,191,239,76,108,111,29,190,248,178,138,78,186,219,241,126,187,19, + 178,23,94,120,129,58,15,78,241,36,150,18,174,4,106,238,220,185,185,176, + 122,111,0,112,137,9,25,163,45,224,209,131,11,198,147,189,39,36,97,147, + 42,246,214,66,115,136,155,51,74,98,175,38,81,81,81,200,200,200,160,25, + 25,25,52,42,42,74,181,116,37,145,118,245,96,18,104,188,43,164,107,145, + 238,213,71,31,190,236,211,247,3,65,18,55,185,136,73,72,97,238,4,208, + 91,36,113,83,26,97,41,133,169,61,189,96,253,250,245,117,235,215,175,47, + 180,29,117,106,166,205,96,4,11,175,6,153,72,79,250,25,25,25,170,62, + 1,187,99,232,176,57,56,126,108,3,142,31,219,16,180,202,221,23,218,163, + 184,1,192,130,5,11,236,94,220,130,5,11,218,244,48,243,140,140,12,106, + 243,212,28,248,232,195,151,237,125,113,80,217,139,147,112,39,110,18,35,70, + 46,194,209,35,171,154,120,114,190,224,78,220,36,150,45,91,70,94,120,225, + 5,170,228,201,121,130,13,50,97,180,39,188,30,69,121,45,139,92,123,21, + 55,0,248,242,171,47,233,209,31,143,218,223,223,253,167,187,219,164,200,185, + 18,55,192,218,60,41,137,156,26,124,250,175,74,7,239,72,238,149,57,188, + 119,147,134,92,228,164,244,166,220,215,237,255,179,119,222,113,114,20,103,222, + 255,245,196,13,179,73,18,32,68,208,10,20,200,40,28,194,62,56,73,8, + 144,133,77,18,2,140,109,176,229,215,58,25,144,13,54,216,175,177,108,131, + 224,124,156,185,35,216,198,186,35,190,39,155,112,24,204,33,130,49,22,65, + 18,8,27,11,180,18,32,64,201,98,21,88,197,205,51,179,179,147,234,253, + 99,166,122,107,106,170,195,228,176,207,247,243,153,207,206,116,247,84,61,221, + 53,91,191,126,158,122,170,218,240,218,191,240,98,23,219,184,225,55,250,103, + 209,67,235,56,112,108,218,54,241,123,38,102,164,96,51,201,4,72,140,193, + 41,5,238,198,27,111,36,145,35,202,134,20,129,19,199,193,0,227,16,161, + 221,112,101,199,254,177,182,140,80,141,191,201,108,104,251,21,96,179,179,183, + 51,70,101,215,54,179,44,67,89,124,204,234,92,241,124,23,235,216,111,171, + 202,148,107,32,95,15,94,103,190,198,225,184,184,201,239,171,21,238,197,229, + 82,6,23,34,46,76,220,51,227,239,57,71,143,254,20,0,176,103,223,56, + 125,155,234,56,51,97,227,240,49,56,149,7,247,222,223,46,102,0,112,177, + 176,141,31,199,191,103,71,232,126,245,171,95,153,137,156,152,92,66,73,38, + 68,69,144,34,112,86,29,166,232,201,172,120,254,70,203,127,24,187,73,38, + 151,94,50,66,227,34,39,139,134,232,201,216,45,207,206,68,233,49,71,236, + 180,37,114,98,34,70,186,7,103,61,161,156,115,233,37,35,52,187,19,213, + 145,244,92,1,99,15,46,31,226,246,196,19,79,176,173,91,183,166,140,179, + 62,241,196,19,44,219,9,223,86,162,107,182,159,239,91,241,124,23,51,186, + 201,201,151,168,23,2,59,225,71,59,97,76,43,236,132,31,237,132,49,141, + 160,36,19,162,154,176,61,77,160,154,195,116,86,84,107,162,141,40,110,64, + 226,60,115,153,244,45,222,168,200,136,2,102,246,93,43,1,204,218,184,34, + 96,150,72,146,15,113,227,152,37,146,228,34,110,102,80,146,9,81,137,216, + 26,131,27,206,226,198,169,182,49,200,7,31,120,144,117,236,237,48,220,247, + 237,107,191,157,213,57,94,122,201,136,180,169,7,124,187,217,126,241,152,76, + 247,101,194,239,126,251,175,202,233,17,217,176,115,79,24,64,106,186,191,24, + 174,148,145,197,141,127,223,138,221,29,145,180,109,220,147,83,29,175,18,183, + 139,47,26,161,45,123,112,63,179,154,46,96,146,100,210,138,161,9,222,171, + 227,241,120,187,234,56,242,236,136,114,194,210,131,35,113,27,162,154,60,185, + 142,189,29,202,54,189,253,246,219,53,35,225,43,103,110,191,253,118,205,104, + 74,64,62,19,76,68,248,82,91,59,247,132,83,94,135,29,249,189,20,241, + 18,183,137,47,177,12,153,221,29,17,253,101,132,217,52,1,35,204,202,180, + 145,100,114,91,242,53,203,232,32,90,201,132,40,39,108,205,131,83,117,132, + 187,59,140,239,62,119,119,132,51,154,228,13,36,238,208,121,153,83,166,222, + 152,38,110,102,245,101,203,152,35,118,90,158,135,140,209,245,200,39,114,189, + 226,245,216,221,17,206,217,155,121,240,225,7,77,189,208,219,111,191,93,123, + 240,225,7,43,110,217,46,46,114,242,139,139,27,247,222,242,89,39,23,40, + 163,191,118,143,145,225,235,69,46,254,246,17,90,190,214,163,20,203,84,237, + 207,135,247,69,30,28,81,78,228,180,216,114,33,68,167,16,101,150,99,157, + 86,20,210,166,142,61,214,30,154,157,99,204,216,221,17,198,49,99,60,134, + 231,145,235,126,35,228,167,18,20,194,115,147,177,35,92,153,136,27,39,223, + 11,45,219,41,211,36,201,100,181,240,113,53,9,25,81,9,100,189,22,37, + 95,109,95,245,55,219,149,248,191,123,221,104,141,175,150,111,244,55,223,136, + 246,26,253,45,54,102,215,32,215,235,240,224,3,230,222,27,231,246,219,111, + 215,30,124,32,123,47,238,204,41,123,177,187,35,108,120,13,115,221,159,41, + 133,240,222,134,19,247,221,119,95,251,125,247,221,183,60,249,106,47,181,61, + 4,97,135,156,60,184,66,9,66,177,196,77,164,92,196,141,83,168,107,144, + 73,242,72,182,137,38,28,171,107,152,235,254,82,98,231,137,222,43,94,124, + 198,246,177,185,60,209,251,229,63,191,96,251,88,122,162,55,49,156,200,250, + 137,222,127,252,211,138,188,25,81,138,58,237,150,101,215,54,59,222,65,41, + 234,28,238,240,196,147,124,95,43,59,79,244,206,7,36,72,4,145,61,89, + 63,209,59,159,80,157,68,33,160,235,77,16,195,155,156,159,232,77,16,34, + 220,251,148,189,85,217,43,205,102,127,190,5,107,233,210,165,249,44,142,32, + 136,50,131,4,142,200,43,149,226,53,101,107,103,223,138,73,69,153,62,81, + 172,122,122,159,155,88,113,211,65,8,194,46,36,112,4,97,147,166,121,217, + 47,99,70,16,68,241,201,122,154,0,65,16,4,65,148,51,90,177,66,33, + 4,81,233,144,7,71,16,149,5,121,112,4,97,147,222,231,38,150,218,4, + 130,32,50,192,5,0,141,151,110,201,58,49,128,123,128,84,6,149,49,92, + 202,32,8,162,50,32,15,142,32,8,130,168,74,72,224,8,130,32,136,170, + 196,238,52,1,49,52,99,55,196,147,205,119,172,202,40,68,153,133,250,142, + 85,25,116,46,230,101,22,234,59,86,101,228,163,76,130,32,202,0,219,30, + 220,27,111,244,224,141,55,122,128,212,14,192,8,38,28,159,45,202,50,50, + 180,3,44,73,14,101,48,198,24,164,34,50,69,89,70,166,231,162,162,82, + 219,69,89,240,208,53,202,250,92,84,237,157,69,25,153,216,65,16,68,153, + 66,33,74,130,32,8,162,42,201,88,224,108,220,165,179,28,61,4,91,101, + 216,241,22,172,238,228,237,156,75,142,158,155,173,50,114,245,124,108,150,81, + 54,237,98,89,137,181,247,100,105,135,141,134,179,83,134,149,29,4,65,148, + 49,102,2,199,132,23,102,207,110,206,184,112,225,59,41,101,229,80,70,86, + 118,104,154,38,218,144,75,25,98,57,25,159,139,84,70,86,118,200,245,87, + 114,187,200,245,11,215,39,91,59,88,30,202,200,202,14,130,32,202,15,163, + 36,19,229,221,237,236,217,205,250,88,203,236,217,205,12,233,131,240,250,247, + 248,177,138,50,84,223,203,180,12,43,59,244,59,120,77,211,178,45,67,119, + 2,76,202,176,60,23,27,101,88,158,139,170,60,17,94,182,221,118,49,40, + 35,163,118,201,210,14,101,121,114,25,124,12,204,192,38,203,223,135,80,6, + 211,212,106,149,73,25,118,174,13,65,16,101,136,202,131,51,12,221,36,59, + 46,203,66,141,58,13,94,6,108,120,12,86,101,216,177,195,72,84,242,89, + 6,108,156,75,62,236,128,73,212,141,49,102,187,93,204,202,128,205,118,201, + 213,14,88,252,198,236,120,80,86,191,143,98,149,65,16,68,249,146,117,146, + 137,162,115,47,202,24,143,13,59,50,30,56,83,157,75,49,198,222,108,216, + 145,49,229,220,46,25,87,154,46,186,25,219,161,104,132,108,202,144,237,32, + 8,162,2,160,44,74,130,32,8,162,42,33,129,35,8,130,32,170,146,172, + 5,46,57,214,34,14,82,104,89,102,210,137,100,92,134,194,14,24,36,22, + 100,82,70,166,69,168,200,184,12,213,185,100,74,57,183,75,198,149,38,174, + 95,78,231,162,104,132,108,202,144,237,32,8,162,2,80,9,156,97,7,96, + 54,40,47,98,150,56,97,183,227,179,42,195,142,29,102,73,15,249,42,3, + 54,206,37,31,118,192,68,48,205,146,88,68,204,18,39,236,118,226,86,101, + 216,61,23,179,235,97,103,236,210,234,247,81,172,50,8,130,40,95,140,166, + 9,104,201,52,239,20,196,212,106,168,59,67,109,246,236,102,125,249,35,131, + 206,195,170,19,181,44,195,134,29,208,52,77,227,171,54,169,58,100,59,231, + 146,44,2,70,101,216,57,23,171,50,236,156,139,92,94,22,101,164,92,211, + 108,207,197,170,140,76,207,69,245,27,19,167,85,24,148,97,249,251,16,202, + 48,178,33,147,50,236,156,11,65,16,101,136,89,136,82,19,94,89,173,95, + 40,124,39,165,172,28,202,200,202,14,62,37,46,15,101,136,229,100,124,46, + 82,25,217,174,9,89,53,237,34,215,159,141,199,36,159,75,30,202,32,207, + 141,32,170,132,140,199,224,108,220,157,23,101,204,199,142,151,96,53,8,102, + 231,92,138,49,22,87,160,177,183,52,59,202,165,93,44,43,177,246,154,44, + 237,176,209,112,118,202,176,178,131,32,136,50,134,178,40,9,130,32,136,170, + 196,238,243,224,196,113,10,59,119,180,202,241,149,12,81,150,145,161,29,202, + 59,249,76,207,69,53,238,149,33,202,50,50,61,23,21,149,218,46,202,130, + 135,154,42,235,115,201,208,229,54,42,35,19,59,8,130,40,83,236,10,92, + 54,255,232,249,232,28,210,82,188,11,80,102,161,190,99,85,6,157,75,238, + 101,148,235,185,16,4,81,6,80,136,146,32,8,130,168,74,72,224,8,130, + 32,136,170,68,235,91,49,137,114,162,9,194,38,77,243,182,150,218,4,130, + 32,108,98,59,201,132,32,42,9,18,34,130,32,92,0,208,120,233,22,109, + 209,29,109,44,28,234,7,0,120,106,26,240,208,173,83,83,6,219,249,126, + 121,159,188,157,123,132,141,151,110,49,28,172,207,103,89,86,117,136,231,35, + 150,39,238,119,185,106,241,200,29,211,11,154,92,144,239,186,85,229,201,101, + 25,109,207,119,89,86,215,90,174,111,209,173,235,88,56,28,132,199,83,7, + 95,203,209,184,247,251,99,242,122,237,41,42,65,16,4,144,12,81,254,224, + 131,255,193,198,181,203,113,104,207,199,0,128,81,71,159,132,201,103,47,208, + 197,231,138,235,159,97,91,54,190,136,160,255,16,70,140,30,143,211,62,119, + 53,30,185,99,186,38,111,159,124,246,2,220,125,218,87,0,24,139,82,62, + 203,82,177,240,214,117,236,96,199,199,248,244,227,55,224,239,233,72,57,31, + 94,158,124,190,190,230,49,24,119,210,108,28,54,230,36,75,177,225,157,121, + 60,26,179,180,197,225,114,166,117,248,185,212,45,34,151,215,181,111,59,234, + 124,163,48,105,242,69,120,230,63,175,208,22,222,186,142,125,240,206,227,105, + 219,243,93,214,162,59,218,152,234,183,99,212,118,11,110,89,205,182,126,240, + 50,186,14,108,71,125,253,72,28,117,252,25,24,113,248,68,140,56,98,98, + 154,208,113,33,140,135,195,214,215,218,227,129,199,83,135,135,238,152,174,245, + 173,152,196,200,131,35,8,194,5,0,225,80,63,14,237,249,24,171,95,249, + 127,216,183,111,31,174,90,176,4,33,127,98,249,162,43,174,127,134,109,122, + 231,127,176,115,251,219,88,247,151,215,113,241,149,223,67,239,161,157,184,100, + 225,242,180,237,252,59,70,228,179,44,25,46,108,235,94,251,13,186,15,238, + 64,231,254,109,216,188,233,221,180,243,145,207,183,175,175,15,211,255,241,92, + 116,31,220,129,150,195,142,195,37,11,151,51,35,177,17,59,243,72,36,100, + 105,147,219,93,131,81,71,159,132,69,119,180,49,224,43,57,213,109,132,88, + 222,9,167,156,129,72,200,143,75,22,46,103,189,135,118,166,109,191,226,250, + 103,152,145,200,101,91,86,200,223,99,248,219,17,185,233,190,14,214,181,127, + 43,58,118,172,195,158,237,111,227,237,215,159,194,201,167,127,30,7,247,126, + 140,195,142,60,9,71,29,127,6,22,220,178,154,113,161,91,116,235,58,182, + 229,253,23,176,255,179,143,17,14,7,44,175,131,199,83,143,35,142,58,9, + 139,110,93,199,128,107,236,94,62,130,32,170,24,23,0,196,163,49,68,34, + 33,244,245,245,161,167,167,7,145,72,8,3,254,206,20,225,225,98,225,239, + 217,139,157,219,223,66,215,190,237,232,104,95,143,205,155,222,197,174,93,187, + 44,59,124,81,220,114,45,75,196,72,216,250,250,250,176,111,223,62,253,124, + 68,248,249,114,86,191,246,34,234,234,234,44,197,70,20,0,51,250,250,250, + 0,0,193,96,48,173,195,207,182,110,35,196,242,86,191,246,34,102,157,119, + 17,34,209,16,70,140,30,15,127,207,222,148,237,0,76,69,46,211,178,46, + 89,184,156,13,248,59,211,126,59,50,55,221,215,193,118,111,123,11,59,62, + 122,13,251,118,189,143,222,206,157,8,135,195,120,103,237,74,68,163,81,156, + 61,235,139,105,66,215,125,232,83,236,254,244,93,172,249,227,35,137,107,111, + 226,197,13,14,14,34,16,8,224,154,235,254,13,227,78,60,207,234,146,17, + 4,49,76,72,75,50,137,70,163,24,12,116,167,9,15,23,139,254,158,14, + 108,105,123,17,225,96,15,182,108,126,31,251,246,237,211,59,116,35,84,226, + 150,109,89,28,35,97,3,160,119,182,93,93,93,240,251,253,112,187,107,12, + 203,9,6,131,232,233,233,65,56,28,182,20,27,81,0,250,250,250,16,12, + 6,13,59,222,96,48,136,104,52,154,214,225,59,92,78,184,221,53,186,141, + 188,140,92,133,142,95,183,149,47,63,139,243,231,92,132,131,29,159,32,28, + 236,73,217,62,231,139,243,1,152,139,92,38,101,113,241,27,12,116,3,72, + 252,118,84,236,222,246,22,62,92,247,123,116,236,88,135,143,222,255,43,194, + 225,48,6,7,7,209,211,147,16,254,87,94,122,26,110,183,27,231,126,97, + 158,46,116,190,230,35,16,13,249,1,0,221,221,221,24,28,28,68,36,18, + 81,150,207,5,46,28,14,216,10,103,18,4,49,60,80,102,81,202,194,195, + 59,227,80,40,132,193,80,47,6,67,189,104,111,111,71,95,95,31,14,29, + 58,100,42,34,178,184,229,82,22,96,79,216,250,250,250,224,247,251,17,141, + 70,177,240,218,239,99,252,41,95,128,167,198,167,44,143,11,84,48,24,180, + 20,155,125,237,239,33,58,24,212,143,231,29,180,138,104,52,10,191,223,159, + 182,221,83,211,128,230,195,143,199,244,127,60,23,43,254,240,24,162,209,40, + 250,250,250,224,114,185,178,18,58,46,152,252,92,130,193,32,94,93,249,34, + 102,204,152,145,114,142,193,96,208,82,228,50,45,75,20,63,35,22,221,186, + 142,173,95,243,48,58,118,172,195,134,119,215,160,191,191,31,129,64,0,126, + 191,31,145,72,36,229,6,225,201,223,61,128,250,250,122,92,253,127,126,132, + 134,192,209,8,244,30,208,197,80,117,45,1,232,101,4,131,65,67,27,8, + 130,24,158,164,9,156,203,229,74,19,158,142,142,14,248,253,126,92,126,249, + 229,0,128,15,62,248,64,247,194,122,122,122,12,69,68,37,110,217,150,149, + 169,176,125,107,225,98,52,143,26,135,241,167,124,1,147,38,95,132,71,238, + 152,174,221,107,35,187,206,72,232,14,238,217,132,88,116,16,253,201,196,21, + 179,144,25,144,16,56,149,71,243,208,173,83,181,43,174,127,134,69,195,3, + 248,198,194,91,208,115,232,83,60,251,135,39,178,22,58,81,48,87,190,252, + 172,126,14,111,190,249,38,102,204,152,129,211,78,59,13,111,190,249,166,190, + 221,76,228,50,45,75,22,63,21,225,112,16,221,221,187,176,225,221,53,186, + 71,45,10,27,23,166,104,52,138,111,46,188,14,222,154,6,0,64,40,216, + 13,127,255,1,0,208,61,55,35,15,142,127,159,32,8,66,36,109,37,147, + 186,186,58,0,9,225,49,18,36,0,186,32,125,107,225,98,140,105,157,166, + 139,8,47,103,209,29,109,236,239,31,191,102,41,110,118,203,250,224,157,199, + 209,182,230,17,108,223,244,103,188,253,250,147,41,227,108,29,29,29,56,112, + 224,0,122,122,122,240,141,5,223,198,247,126,240,175,104,61,225,28,76,159, + 115,3,166,159,247,29,195,236,65,51,184,135,214,211,211,131,149,47,63,139, + 231,255,240,0,14,237,251,4,131,161,94,219,97,84,35,158,249,207,43,180, + 233,231,125,7,211,231,220,128,214,19,206,193,130,133,63,196,252,203,191,6, + 151,203,165,172,251,217,39,238,197,246,77,127,70,219,154,71,208,246,230,163, + 201,164,149,4,15,221,58,85,59,254,164,243,48,166,117,26,206,159,115,145, + 222,126,193,96,16,175,188,242,10,0,96,198,140,25,41,219,87,252,225,49, + 236,220,254,54,182,108,124,17,11,111,93,151,83,89,92,240,140,224,33,195, + 174,174,46,236,223,191,31,231,158,123,30,230,206,189,0,64,226,38,193,229, + 114,225,170,171,190,130,171,175,190,6,222,154,6,52,52,141,1,0,188,181, + 234,121,68,66,106,175,141,32,8,194,14,105,2,199,59,51,222,201,70,163, + 81,93,144,222,121,231,29,0,208,183,95,117,213,85,240,212,53,99,204,209, + 147,211,68,36,28,234,71,95,215,110,93,136,248,152,84,182,101,117,237,219, + 142,63,61,247,0,214,253,229,245,148,4,18,209,198,171,175,190,26,158,186, + 102,28,61,241,108,76,156,122,49,158,127,100,129,150,203,252,54,238,85,117, + 117,117,225,208,161,67,120,229,149,87,116,81,206,149,71,238,152,174,61,255, + 200,2,109,226,212,139,113,244,196,179,225,169,107,198,220,185,115,49,119,238, + 92,93,64,120,221,251,246,237,195,31,158,250,111,60,186,236,86,244,117,237, + 6,159,115,198,121,230,63,175,208,198,180,78,134,167,174,89,23,32,30,34, + 149,133,137,111,127,234,241,135,225,239,233,64,52,58,144,83,89,125,125,125, + 120,243,205,55,245,118,48,34,18,137,96,254,149,95,131,175,249,72,184,107, + 124,24,49,98,4,46,191,252,10,92,126,249,21,0,128,181,107,223,194,96, + 168,31,253,189,29,24,20,206,111,112,112,48,247,139,77,16,196,176,36,77, + 224,162,209,40,230,206,157,171,39,64,184,92,46,188,244,210,75,0,128,207, + 125,238,115,122,8,143,111,15,7,123,208,177,103,35,174,184,254,153,148,240, + 159,167,166,1,141,35,142,193,9,167,156,161,135,252,114,41,107,196,232,241, + 184,96,222,181,152,254,143,231,162,163,163,67,15,73,70,163,81,184,92,46, + 188,242,202,43,120,243,205,55,17,14,246,96,207,214,181,216,218,246,2,46, + 89,184,156,137,30,138,93,162,209,40,66,161,16,66,161,16,252,126,63,252, + 126,63,122,122,122,48,119,238,92,156,118,218,105,121,25,239,89,120,235,58, + 118,201,194,229,108,107,219,11,216,179,117,45,194,193,30,180,183,183,235,2, + 202,69,133,191,230,95,254,53,124,107,241,29,104,28,113,12,60,201,48,30, + 231,138,235,159,97,29,237,27,245,50,248,247,1,96,238,220,185,0,134,188, + 101,126,94,87,93,253,207,240,53,143,129,203,85,155,83,89,126,191,31,51, + 102,204,208,111,96,100,28,30,143,254,158,123,104,222,154,6,156,125,246,63, + 1,0,54,110,220,128,141,27,55,192,237,118,35,18,242,195,223,179,23,31, + 127,216,134,64,32,144,82,55,65,16,68,166,24,46,182,204,59,51,0,186, + 128,0,9,97,226,30,134,203,229,194,243,43,126,143,142,246,245,134,225,174, + 177,227,207,210,211,202,115,41,235,180,207,93,141,169,51,23,98,252,41,95, + 192,55,22,222,130,75,46,253,50,128,244,177,174,53,171,255,140,55,86,254, + 30,59,183,191,141,182,53,143,96,221,107,191,73,19,76,35,68,97,227,47, + 62,158,119,243,45,119,99,212,232,19,225,173,105,210,109,206,150,43,174,127, + 134,173,123,237,55,104,91,243,8,118,110,127,27,239,189,243,167,148,100,158, + 174,174,46,221,35,226,117,79,152,124,17,166,206,92,136,169,51,190,149,182, + 250,203,223,63,126,45,113,221,146,101,244,245,245,33,20,10,165,132,130,131, + 193,160,190,125,225,181,223,199,216,241,103,25,134,149,51,41,235,170,171,174, + 2,144,8,109,243,16,171,136,199,83,135,209,71,159,142,171,22,252,16,110, + 119,173,238,161,237,220,217,142,109,219,18,147,177,121,18,201,218,181,111,225, + 111,127,123,7,251,247,239,71,119,119,119,78,215,152,32,8,66,153,69,233, + 173,105,130,167,174,25,151,92,250,101,188,186,242,69,253,238,252,165,151,94, + 194,133,23,94,136,25,51,102,224,205,55,223,212,183,255,225,169,255,198,119, + 126,112,47,194,210,152,201,51,255,121,133,198,197,101,206,23,231,99,229,203, + 207,102,93,22,239,136,197,149,74,190,117,237,79,77,147,52,0,232,226,186, + 208,98,2,48,23,51,81,48,121,162,202,132,201,23,97,220,73,179,49,208, + 119,0,31,190,243,148,229,69,53,243,58,22,221,209,198,222,123,227,65,236, + 220,250,22,62,108,91,3,192,60,73,134,215,109,148,69,25,14,245,163,231, + 192,223,245,80,240,174,93,187,208,211,211,131,171,175,190,26,192,144,32,29, + 58,116,72,79,226,25,59,254,44,156,242,185,175,40,67,193,153,148,245,173, + 133,139,209,48,98,44,194,193,30,120,4,79,77,228,161,59,166,107,11,110, + 89,205,124,190,81,216,188,241,121,188,244,135,255,130,203,229,210,83,255,121, + 118,100,32,16,208,189,182,112,56,172,135,46,57,102,9,38,4,25,13,26, + 143,0,0,32,0,73,68,65,84,65,16,42,148,2,215,208,60,6,71,79, + 60,27,125,93,187,117,97,226,119,236,92,252,206,159,115,17,94,93,249,162, + 190,221,104,114,182,74,228,178,45,11,200,76,232,0,96,197,31,30,195,181, + 223,251,247,52,193,4,134,230,123,137,222,26,144,46,108,92,92,190,254,127, + 223,96,159,108,120,1,192,208,60,55,35,49,51,218,206,69,228,195,182,53, + 57,9,27,71,156,164,207,67,183,162,240,0,72,201,80,53,18,183,108,202, + 58,106,252,231,209,56,226,24,236,217,186,214,208,131,3,128,229,191,152,165, + 45,184,101,53,243,251,15,225,194,203,175,67,215,190,237,120,241,249,167,210, + 178,41,249,245,188,254,59,63,68,203,97,199,233,89,148,131,131,131,166,89, + 171,86,25,173,4,65,12,79,82,122,36,222,201,120,235,91,112,204,248,207, + 3,248,60,220,174,26,204,249,226,124,125,206,150,44,126,124,187,25,178,200, + 229,82,22,199,74,232,68,143,204,76,48,185,184,0,198,194,198,143,229,243, + 196,248,117,226,162,100,134,60,167,79,37,34,217,8,155,76,48,24,212,195, + 143,162,240,4,131,65,248,253,126,75,113,203,166,172,137,83,47,6,0,28, + 252,236,35,195,49,56,206,242,95,204,210,22,221,186,142,141,26,61,30,159, + 253,253,93,92,253,127,126,132,222,206,157,120,234,201,71,17,14,135,17,141, + 70,177,232,218,239,163,105,228,88,76,154,146,40,119,223,174,247,245,73,220, + 86,229,243,125,14,3,79,146,32,136,225,135,11,24,234,184,249,157,176,219, + 93,131,166,17,199,226,119,255,62,91,23,166,75,47,191,6,79,61,254,48, + 188,245,45,56,254,164,243,16,14,7,224,118,213,232,219,205,38,103,3,169, + 34,151,107,89,34,70,66,215,219,243,25,30,95,254,95,136,70,163,105,229, + 241,243,229,19,206,237,138,139,167,166,1,163,142,62,9,87,45,88,146,209, + 90,148,53,190,230,180,186,185,136,124,99,193,183,115,18,54,177,237,174,186, + 250,159,117,225,241,120,234,113,240,179,143,16,14,135,113,245,130,235,108,137, + 91,54,101,125,253,255,190,193,228,223,142,17,15,221,49,93,187,233,190,14, + 54,226,240,137,56,234,248,51,240,217,223,223,197,183,191,123,7,122,59,119, + 226,119,203,255,11,77,35,199,226,228,51,46,199,152,227,166,35,30,14,195, + 91,223,130,107,174,251,55,219,107,81,30,51,238,12,120,60,185,141,143,18, + 4,81,61,184,128,161,142,251,235,139,150,2,64,74,167,204,133,201,93,227, + 195,77,63,125,0,71,142,155,138,166,81,99,245,39,0,240,237,114,71,174, + 34,159,101,201,168,132,238,7,63,253,207,180,243,81,157,175,93,113,121,232, + 214,169,90,38,79,19,0,128,26,95,51,30,186,117,170,118,119,114,146,185, + 40,146,153,212,109,4,47,111,193,245,119,234,147,218,249,19,0,142,28,55, + 53,109,123,190,203,170,241,53,27,254,118,84,240,39,6,200,66,183,228,206, + 199,49,246,196,89,24,115,220,116,44,255,197,172,196,147,10,178,124,154,192, + 221,244,184,28,130,32,144,124,92,142,157,231,193,45,188,117,29,139,70,7, + 210,246,201,219,237,60,195,45,159,101,153,213,17,14,249,149,143,172,17,207, + 55,30,141,193,83,227,43,201,243,224,114,169,187,146,159,7,39,114,211,125, + 29,204,223,189,7,252,249,112,15,229,161,29,232,113,57,4,65,0,73,129, + 43,181,17,4,145,111,72,224,8,130,32,129,35,8,162,42,160,155,26,66, + 198,5,228,246,195,232,125,110,34,168,140,242,43,163,146,234,180,19,130,94, + 188,120,241,212,101,203,150,181,241,191,102,199,230,18,218,182,162,80,101,83, + 185,150,229,46,5,112,27,128,219,147,239,149,223,35,8,17,245,196,37,130, + 40,35,22,47,94,188,62,249,151,111,154,86,128,106,26,0,204,3,112,33, + 0,13,192,159,1,60,146,67,121,41,29,110,107,107,235,57,237,237,237,171, + 115,40,175,160,229,222,124,243,205,41,229,62,251,236,179,249,178,55,87,78, + 0,240,3,0,115,0,196,0,252,31,0,71,3,184,27,192,230,18,218,69, + 84,0,36,112,68,89,178,120,241,98,55,128,58,0,181,72,220,177,255,27, + 128,26,0,115,22,47,94,60,26,192,0,128,224,178,101,203,114,93,226,196, + 1,96,22,128,215,1,188,11,224,140,228,246,203,1,124,17,192,101,89,150, + 171,33,41,70,121,20,183,130,149,123,207,61,247,104,92,228,202,72,220,174, + 4,240,216,207,127,126,167,231,226,139,231,227,196,19,143,195,206,157,59,143, + 121,250,233,167,191,181,100,201,146,107,144,88,154,232,233,18,219,72,148,49, + 134,107,81,18,68,169,88,188,120,113,29,128,147,145,240,166,190,9,224,2, + 0,59,1,108,65,226,110,254,155,201,125,39,39,143,205,133,175,35,33,110, + 0,112,22,128,93,194,190,243,114,44,91,167,181,181,181,53,95,101,85,66, + 185,179,103,207,102,151,93,118,89,90,216,240,194,11,47,100,55,222,120,35, + 155,55,111,158,85,72,241,4,0,143,173,90,181,202,83,91,123,1,158,123, + 174,23,46,151,11,199,31,127,60,126,252,227,31,99,213,170,85,30,0,143, + 37,143,35,8,37,36,112,68,89,177,120,241,226,38,36,132,230,42,0,231, + 0,56,2,64,47,18,97,169,221,201,247,71,36,247,93,5,224,172,228,119, + 178,225,4,0,255,157,124,191,22,64,4,192,153,0,214,0,216,10,224,159, + 50,45,112,214,172,89,173,0,86,67,8,37,182,183,183,175,106,111,111,95, + 222,218,218,58,43,75,59,11,86,238,99,143,61,214,122,243,205,55,175,22, + 67,148,243,231,207,95,53,127,254,252,172,203,253,250,215,191,206,110,185,229, + 22,204,155,55,47,101,251,57,231,156,195,174,189,246,90,204,154,53,11,139, + 22,45,194,5,23,92,96,38,114,63,184,243,206,59,61,179,102,205,194,53, + 215,76,194,51,207,108,199,222,189,67,19,254,103,205,154,133,59,239,188,211, + 131,196,13,15,65,40,33,129,35,202,134,164,80,205,5,112,49,18,225,200, + 221,72,120,110,59,1,60,11,96,131,240,121,119,242,152,139,1,124,33,75, + 145,251,173,240,254,249,228,223,125,72,132,44,39,1,120,223,110,65,92,128, + 86,175,94,253,233,140,25,75,103,182,181,181,161,191,191,31,140,49,180,181, + 181,97,193,130,5,51,219,219,219,87,1,88,157,137,112,20,170,92,46,108, + 27,55,110,252,52,30,143,207,156,54,109,26,206,59,239,60,156,119,222,121, + 152,54,109,26,38,79,158,60,115,254,252,249,171,110,190,249,230,140,202,5, + 0,183,219,13,143,199,147,182,54,233,248,241,227,193,24,195,178,101,203,48, + 48,48,128,19,79,60,209,172,152,57,87,94,121,37,0,224,176,195,106,49, + 111,222,113,184,251,238,141,248,217,207,254,134,101,203,62,4,0,36,247,207, + 201,196,54,98,120,65,2,71,148,5,201,80,227,121,72,120,111,131,0,58, + 144,240,218,126,129,132,152,189,3,224,211,228,251,61,201,87,71,242,216,179, + 1,156,151,97,184,114,20,128,83,133,207,207,230,98,255,234,213,171,151,207, + 154,53,107,102,91,91,27,118,236,104,197,132,9,19,176,109,219,54,108,216, + 176,1,83,166,76,193,253,247,223,143,182,182,54,204,154,53,107,102,123,123, + 251,210,82,151,187,113,227,198,229,173,173,173,51,167,77,155,134,13,27,54, + 160,165,165,69,223,215,210,210,130,81,163,70,97,218,180,105,104,109,109,157, + 57,127,254,124,219,229,2,192,163,143,62,170,189,245,214,91,136,199,227,41, + 219,155,155,155,17,8,4,208,221,221,141,129,129,1,140,28,57,210,172,152, + 49,99,199,142,213,63,92,127,253,169,88,185,50,17,61,190,236,178,227,0, + 0,201,253,99,50,177,141,24,94,144,192,17,37,39,153,80,114,70,242,21, + 7,112,0,192,126,0,43,144,8,201,77,78,126,222,143,132,135,197,95,251, + 147,199,198,249,247,147,101,153,177,28,137,196,132,39,144,72,96,225,44,75, + 110,255,61,18,33,80,219,36,189,172,153,247,222,123,47,166,76,153,2,0, + 56,241,196,103,209,222,222,142,246,246,118,108,216,176,1,62,159,15,19,38, + 76,192,189,247,222,11,0,51,237,120,69,133,42,247,177,199,30,107,5,48, + 115,228,200,145,186,176,221,117,215,93,105,199,181,180,180,112,17,178,85,174, + 21,161,80,8,30,143,7,110,183,27,46,151,75,127,60,146,1,29,59,119, + 238,212,63,140,30,93,135,117,235,174,192,191,252,203,153,56,242,200,122,0, + 64,114,127,71,174,118,17,213,11,9,28,81,14,140,1,240,57,36,188,170, + 110,0,93,0,14,1,232,68,34,116,120,67,114,27,127,117,38,95,135,146, + 159,187,147,223,253,28,204,239,232,189,0,156,201,247,62,97,123,8,64,16, + 137,12,197,48,0,235,213,157,5,86,175,94,189,124,193,130,5,152,50,101, + 10,54,108,216,128,219,111,63,22,23,92,224,197,188,121,243,112,254,249,231, + 99,202,148,41,184,247,222,141,248,240,67,63,38,76,152,128,5,11,22,160, + 189,189,125,169,149,104,20,170,220,141,27,55,46,159,60,121,178,46,110,103, + 157,117,86,218,49,107,215,174,197,174,93,187,208,210,210,130,201,147,39,99, + 254,252,249,150,229,138,48,198,192,88,98,136,237,226,139,47,102,63,249,201, + 79,88,103,103,39,26,26,26,240,149,175,124,5,45,45,45,216,190,125,187, + 89,17,43,159,126,58,53,65,178,182,54,53,228,153,220,191,210,174,77,196, + 240,131,4,142,40,7,70,3,104,6,224,7,208,135,68,34,73,95,242,245, + 3,0,135,3,56,62,185,223,15,96,9,128,71,165,99,253,201,50,70,155, + 212,51,136,68,106,249,149,0,246,10,219,123,0,124,25,192,21,201,253,233, + 15,15,52,103,230,13,55,220,0,191,223,143,246,246,118,92,121,229,25,248, + 211,159,6,113,204,49,191,133,207,231,195,49,199,252,22,247,221,247,62,78, + 61,213,7,159,207,135,27,110,184,1,0,102,150,178,92,167,211,169,127,56, + 251,236,179,1,12,121,113,119,221,117,23,222,126,251,109,28,123,236,177,0, + 128,228,177,118,202,213,105,107,107,195,235,175,39,146,83,131,193,32,186,186, + 186,240,193,7,31,252,232,127,255,247,127,49,56,56,136,151,94,122,9,79, + 63,253,180,217,36,241,187,151,44,89,18,94,189,122,181,114,231,234,213,171, + 177,100,201,146,48,18,243,225,8,66,9,205,131,35,202,129,35,0,52,33, + 33,84,3,72,120,83,193,228,251,16,128,183,144,88,193,226,2,0,63,4, + 240,53,0,199,1,24,33,28,55,144,44,195,110,120,241,82,225,253,110,0, + 49,60,197,38,130,225,106,188,255,167,159,225,244,47,252,30,91,28,95,197, + 9,24,143,3,159,110,193,225,227,128,205,112,26,101,165,243,177,49,0,240, + 249,124,248,254,247,79,199,125,247,189,143,99,142,73,228,177,124,242,201,124, + 248,124,62,248,253,126,61,220,8,36,210,241,219,219,219,219,141,140,44,84, + 185,226,152,27,144,240,226,222,126,251,109,93,228,126,244,163,31,41,143,181, + 42,151,179,98,197,10,93,188,94,123,237,53,237,181,215,94,3,0,108,218, + 180,233,223,173,190,155,100,51,128,107,206,57,231,156,199,238,188,243,78,207, + 149,87,94,137,177,99,199,98,231,206,157,120,250,233,167,185,184,93,3,154, + 236,77,152,64,30,28,81,14,140,64,98,37,145,136,240,138,10,175,91,0, + 204,0,240,227,228,107,68,114,187,124,124,67,114,159,21,163,48,20,170,4, + 128,255,5,0,108,198,118,108,193,82,76,190,224,33,252,245,153,47,3,0, + 24,123,7,135,143,107,3,226,223,53,43,144,143,133,181,182,182,194,239,247, + 227,166,155,38,235,251,184,8,241,227,248,3,118,237,80,168,114,101,184,23, + 7,164,138,91,174,108,218,180,233,226,63,255,249,207,217,46,163,245,52,128, + 211,151,44,89,242,232,248,241,227,119,187,221,238,216,248,241,227,119,47,89, + 178,228,81,0,167,131,38,121,19,22,144,7,71,84,2,27,145,16,177,91, + 144,200,178,204,149,233,210,231,23,82,62,109,198,117,0,22,225,4,236,66, + 52,114,54,182,123,54,91,221,11,242,172,198,9,19,38,232,98,179,123,247, + 55,224,247,251,117,17,2,0,191,223,175,123,100,118,40,84,185,221,221,221, + 105,94,156,145,176,117,119,119,219,46,87,166,183,183,247,249,143,63,254,56, + 227,239,153,172,45,121,12,128,111,37,95,4,97,10,9,28,81,14,240,167, + 199,186,133,151,75,120,69,145,24,95,251,9,128,15,145,152,255,230,82,28, + 143,228,177,86,156,41,125,78,239,129,143,156,8,0,145,132,184,89,178,230, + 215,191,254,245,204,251,239,191,95,23,33,241,175,136,207,231,195,175,127,253, + 107,32,49,153,188,100,229,198,98,49,219,99,106,177,88,204,110,185,138,239, + 198,81,87,87,159,209,119,232,169,0,68,190,32,129,35,202,129,253,72,36, + 139,212,32,145,186,95,151,124,13,96,72,176,162,72,36,20,212,40,142,171, + 77,190,122,145,152,54,96,197,41,194,251,21,202,35,252,93,64,40,208,10, + 88,119,206,173,173,173,75,151,47,95,190,234,134,27,110,72,241,180,100,17, + 2,18,30,217,242,229,203,209,218,218,186,20,137,228,150,162,151,251,236,179, + 207,46,5,176,106,218,180,105,105,94,156,76,119,119,55,54,110,220,200,191, + 147,86,238,219,127,89,207,18,201,167,106,24,99,56,246,216,9,120,251,47, + 109,54,194,148,12,56,240,85,235,195,8,194,38,52,6,71,148,3,92,224, + 124,0,26,145,72,22,105,76,190,26,146,219,197,87,131,176,159,31,235,75, + 150,177,95,81,254,24,36,122,97,222,19,139,75,104,240,213,76,52,140,79, + 78,29,56,1,127,199,169,231,222,134,77,175,1,99,209,104,101,124,114,97, + 226,53,55,221,116,19,182,109,219,150,226,105,1,208,255,110,216,176,1,55, + 221,116,19,48,228,13,245,192,68,140,10,93,110,103,103,167,105,248,177,187, + 187,27,157,157,157,166,229,70,34,49,68,163,198,175,88,44,142,186,122,159, + 233,49,252,21,137,196,100,19,8,34,39,72,224,136,114,96,111,242,229,1, + 208,130,68,162,200,40,0,35,147,175,17,201,237,124,31,223,62,74,216,231, + 17,202,17,89,14,224,51,36,38,131,243,149,78,184,192,109,198,208,18,93, + 12,235,126,223,139,158,103,98,24,192,20,104,120,29,225,16,80,203,218,113, + 34,44,179,46,90,91,91,151,174,94,189,122,205,212,169,83,241,221,239,126, + 87,159,132,205,199,198,190,249,205,111,98,234,212,169,88,189,122,245,26,209, + 203,106,111,111,183,244,226,10,81,238,179,207,62,187,180,189,189,125,205,250, + 245,235,113,232,208,161,20,161,235,238,238,198,161,67,135,176,126,253,122,180, + 183,183,175,17,189,55,171,114,9,162,156,160,16,37,81,114,150,45,91,118, + 96,241,226,197,175,35,33,86,227,48,20,150,116,33,33,74,65,36,146,76, + 128,196,120,91,29,18,94,219,72,36,230,200,53,1,216,14,224,245,101,203, + 150,29,248,183,243,39,137,197,127,67,120,255,38,128,251,147,239,119,1,56, + 13,226,243,213,166,127,249,24,108,71,7,18,11,104,252,21,35,190,236,68, + 28,179,176,21,171,173,206,33,233,21,205,106,109,109,157,181,124,249,242,165, + 203,151,47,151,199,184,184,0,1,67,158,144,165,88,20,178,220,123,238,185, + 103,86,114,242,246,82,164,207,115,227,194,150,81,185,4,81,78,144,192,17, + 101,193,178,101,203,62,89,188,120,241,42,36,146,73,70,34,241,219,172,197, + 208,220,56,81,224,106,145,16,184,22,36,196,173,27,192,170,101,203,150,125, + 162,40,250,95,0,252,44,249,126,42,18,79,15,184,23,192,173,66,153,9, + 174,214,246,40,190,255,70,202,167,21,147,20,135,12,33,10,146,98,183,40, + 18,61,153,120,67,133,44,87,16,186,188,149,75,16,229,0,9,28,81,54, + 44,91,182,236,173,228,83,187,47,65,194,51,243,33,177,170,136,152,108,194, + 133,207,135,68,88,242,0,128,231,151,45,91,246,150,65,177,183,2,120,9, + 137,112,252,32,18,79,36,40,56,237,237,237,171,13,158,169,150,147,80,148, + 91,185,113,198,224,96,217,78,115,147,202,202,75,41,4,49,4,9,28,81, + 86,36,69,238,16,128,121,72,60,178,166,5,9,143,78,132,247,133,155,1, + 60,103,224,185,153,205,165,202,153,220,202,54,246,2,43,173,220,127,232,249, + 122,246,197,18,68,129,33,129,35,202,142,100,184,178,19,137,100,144,9,0, + 198,99,104,133,146,46,36,198,219,182,1,248,100,217,178,101,202,105,1,52, + 151,138,32,8,18,56,162,228,168,189,139,215,108,125,87,74,40,33,8,130, + 208,33,129,35,74,10,121,90,4,65,20,10,154,7,71,16,4,65,84,37, + 36,112,4,65,16,68,85,66,2,71,16,4,65,84,37,121,27,131,235,125, + 110,98,190,138,202,137,106,178,163,20,231,82,46,215,143,32,8,34,87,242, + 34,112,249,72,20,200,71,199,90,77,118,16,4,65,16,185,65,33,74,130, + 32,8,162,42,33,129,35,8,130,32,170,18,18,56,130,32,8,162,42,33, + 129,35,8,130,32,170,18,18,56,130,32,8,162,42,33,129,35,8,130,32, + 170,18,18,56,130,32,8,162,42,33,129,35,8,130,32,170,18,18,56,130, + 32,8,162,42,33,129,35,8,130,32,170,18,18,56,130,32,8,162,42,33, + 129,35,8,130,32,170,18,18,56,130,32,8,162,42,33,129,35,8,130,32, + 170,18,18,56,130,32,8,162,42,33,129,35,8,130,32,170,18,18,56,130, + 32,8,162,42,33,129,35,8,130,32,170,18,18,56,130,32,8,162,42,33, + 129,35,8,130,32,170,18,18,56,130,32,8,162,42,33,129,35,8,130,32, + 170,18,18,56,130,32,8,162,42,33,129,35,8,130,32,170,18,18,56,130, + 32,8,162,42,33,129,35,8,130,32,170,18,23,0,244,62,55,177,212,118, + 0,32,59,8,130,32,136,252,161,245,173,152,196,74,109,4,81,62,52,205, + 219,90,106,19,8,130,32,242,130,11,0,26,47,221,162,229,179,80,46,154, + 5,44,215,1,32,23,97,214,196,239,23,193,222,98,150,107,118,93,76,237, + 160,155,29,130,32,170,9,87,145,235,219,116,202,25,147,78,62,56,208,13, + 205,164,175,101,96,56,172,182,5,155,222,221,242,17,128,83,148,135,228,134, + 221,239,111,250,124,99,227,201,189,177,152,233,96,101,28,64,147,211,137,191, + 246,245,25,217,91,44,24,99,198,167,166,105,26,131,133,200,17,4,65,84, + 11,70,2,151,226,225,228,17,255,202,117,79,226,149,221,111,97,7,246,26, + 30,116,28,142,196,151,142,153,137,35,180,41,254,2,216,144,9,254,167,150, + 46,133,127,227,70,196,2,1,195,131,156,245,245,104,152,50,5,199,126,255, + 251,165,180,151,49,198,176,102,205,22,195,3,238,185,231,5,220,124,243,197, + 36,114,4,65,12,11,148,2,87,91,231,141,143,59,241,88,176,184,125,141, + 211,28,26,62,253,100,23,6,130,131,102,157,231,166,47,95,112,93,124,235, + 103,237,167,78,253,199,83,124,7,130,93,208,180,161,195,25,99,56,188,110, + 4,30,254,203,38,255,255,59,234,201,15,1,124,108,167,238,90,135,131,157, + 90,95,111,219,86,206,135,129,0,6,226,113,83,123,191,115,231,157,241,79, + 7,6,78,61,167,165,197,215,19,141,194,41,216,27,99,12,205,46,23,86, + 117,119,251,199,189,252,178,109,123,75,197,180,105,19,73,228,8,130,24,54, + 40,5,238,176,163,70,225,15,239,61,136,190,160,31,125,209,128,101,56,177, + 209,85,143,198,58,31,230,78,188,6,187,182,125,102,86,223,194,183,94,89, + 7,0,239,252,215,7,255,122,230,253,219,158,130,199,225,214,119,134,227,17, + 124,119,194,85,104,213,62,255,225,254,15,15,252,163,221,147,56,198,235,197, + 211,63,253,41,98,253,253,136,135,66,150,199,59,106,106,224,108,104,192,156, + 165,75,177,117,96,192,212,222,23,15,29,2,128,119,254,120,251,237,103,118, + 191,254,58,52,167,83,223,201,98,49,180,156,123,46,238,255,193,15,62,220, + 20,8,216,182,215,12,198,216,28,0,187,53,77,251,36,151,114,102,206,156, + 132,123,239,125,17,211,166,77,76,121,79,34,71,16,196,112,65,41,112,187, + 182,125,182,254,213,21,111,77,251,135,153,167,225,149,142,191,90,22,50,127, + 204,57,120,117,229,91,216,181,237,179,245,54,235,125,237,249,231,86,158,57, + 250,180,17,56,48,216,173,111,28,237,29,129,231,159,91,9,0,31,216,44, + 7,0,176,117,96,96,253,103,191,255,253,180,195,103,207,70,255,134,13,150, + 199,55,76,153,130,125,47,191,140,173,3,3,182,237,221,245,228,147,103,54, + 141,27,135,88,127,191,190,209,217,208,128,93,79,62,153,177,189,42,24,99, + 35,1,252,23,128,43,0,108,100,140,77,215,52,45,146,107,185,42,72,228, + 8,130,24,14,24,229,78,156,123,227,188,219,16,244,15,224,228,198,113,112, + 106,14,195,215,41,141,199,193,229,114,225,198,121,183,49,0,231,90,85,248, + 183,158,23,53,0,63,189,241,178,219,58,103,143,61,3,81,22,3,0,68, + 89,12,179,199,158,129,27,47,187,173,19,192,181,25,158,199,185,103,181,181, + 33,218,215,7,239,81,71,65,115,58,13,95,222,163,142,130,230,118,227,172, + 182,54,91,246,110,255,209,143,52,0,63,253,167,182,182,206,134,211,79,7, + 139,37,236,101,177,24,26,78,63,29,255,212,214,150,141,189,41,36,189,182, + 54,36,196,45,14,96,13,0,167,233,151,114,96,253,250,173,184,249,230,139, + 1,18,55,130,32,170,24,35,129,235,211,28,218,156,239,92,248,83,124,254, + 168,211,224,214,212,185,40,12,12,167,31,54,17,223,185,232,167,208,28,218, + 247,0,244,218,168,83,239,84,221,14,55,88,50,151,133,129,193,45,132,43, + 51,164,15,192,156,175,62,249,36,234,79,60,17,112,24,231,60,214,142,27, + 135,235,30,124,16,0,50,182,23,46,23,16,143,39,222,199,227,137,207,57, + 192,24,27,197,24,123,26,192,159,1,28,11,96,35,128,169,154,166,125,79, + 211,52,235,88,171,9,107,214,108,193,180,105,19,211,222,147,184,17,4,49, + 92,48,82,2,198,226,236,213,45,31,236,120,245,225,187,159,98,103,142,60, + 25,49,22,79,61,0,12,103,52,159,132,181,175,172,195,187,107,222,95,207, + 226,236,215,86,149,125,229,189,175,106,211,155,46,100,0,126,254,203,103,151, + 142,124,239,179,143,116,241,116,107,46,188,247,217,71,248,229,179,75,71,2, + 248,57,0,252,240,163,239,217,245,98,24,128,87,55,248,253,175,190,178,124, + 57,171,29,55,78,247,180,68,106,142,61,22,123,95,124,17,175,118,117,173, + 7,96,105,239,223,254,225,31,180,218,227,143,103,0,126,190,102,234,212,145, + 193,205,155,161,185,19,34,172,185,221,8,110,222,140,53,83,167,234,246,110, + 152,51,199,182,215,197,24,187,12,192,38,36,188,182,8,128,91,0,76,215, + 52,237,125,187,101,100,10,137,27,65,16,195,9,171,181,40,231,252,122,201, + 163,90,108,111,20,35,61,77,41,59,60,14,55,38,52,29,139,27,231,45, + 181,21,234,3,128,39,167,61,193,231,98,157,119,233,101,95,192,135,3,59, + 224,242,186,244,215,135,3,59,112,233,101,95,0,128,243,0,224,63,78,254, + 101,186,74,89,216,123,221,150,45,90,248,192,1,56,27,26,82,247,56,28, + 240,140,25,99,59,52,9,0,71,47,90,132,163,22,45,98,0,206,107,253, + 234,87,17,62,112,0,14,143,71,127,133,15,28,64,235,87,191,170,219,59, + 101,229,74,75,123,25,99,77,140,177,135,1,252,1,192,17,0,182,2,56, + 71,211,180,187,114,28,115,211,52,77,195,250,245,91,13,95,36,110,4,65, + 12,39,172,98,108,90,60,206,166,94,127,209,146,182,63,237,124,12,191,253, + 232,37,184,29,46,196,88,28,231,140,158,140,69,95,250,17,52,135,246,61, + 22,103,118,66,125,208,52,237,228,83,166,77,90,222,19,237,159,116,221,181, + 63,129,106,154,192,230,186,77,56,250,244,49,39,55,187,27,222,219,244,222, + 150,5,72,120,57,118,209,24,48,245,194,151,94,106,123,115,233,82,116,173, + 92,9,205,237,6,139,197,224,59,241,68,92,251,155,223,0,246,67,147,56, + 106,209,162,147,207,108,108,92,62,16,139,77,186,251,151,191,132,114,154,192, + 166,77,56,173,190,254,228,122,167,243,189,191,246,245,153,218,203,24,27,13, + 224,29,0,99,147,155,86,2,184,84,211,52,211,84,206,12,208,146,137,35, + 134,251,243,84,15,65,16,68,217,99,37,112,140,49,182,97,223,238,131,247, + 47,251,241,242,239,158,113,253,63,96,187,127,15,70,122,154,176,99,205,167, + 120,111,205,7,182,66,125,2,141,177,88,108,218,186,141,47,26,78,246,62, + 14,71,226,209,99,254,195,119,238,148,47,79,3,208,152,65,217,64,34,84, + 185,97,215,224,224,253,79,60,252,240,119,47,249,252,231,17,57,120,16,206, + 134,6,28,124,235,45,219,161,201,20,123,25,155,246,226,191,252,139,225,100, + 111,103,125,61,126,48,121,178,111,254,109,183,89,218,171,105,218,62,198,216, + 55,0,252,22,9,145,59,15,192,207,25,99,75,52,77,27,204,192,46,0, + 89,45,173,69,75,113,17,4,49,108,176,155,37,113,227,35,119,61,245,245, + 11,190,58,187,233,99,71,4,211,70,158,128,185,151,126,205,118,168,79,32, + 10,96,203,25,167,95,120,236,105,159,63,177,214,104,162,247,207,254,122,215, + 64,163,179,126,87,242,248,108,184,241,39,59,118,124,253,226,169,83,155,88, + 36,130,218,177,99,113,250,138,21,89,219,251,165,159,253,236,216,115,90,90, + 106,13,39,122,63,251,236,64,157,195,97,203,94,77,211,214,48,198,78,4, + 240,11,0,223,5,112,19,128,75,25,99,215,104,154,246,23,187,134,209,162, + 200,4,65,16,22,216,245,2,52,77,155,118,228,216,35,216,59,253,47,176, + 233,179,78,103,154,67,187,193,172,204,12,188,139,165,159,178,191,48,0,75, + 237,216,154,65,185,211,198,213,212,176,237,63,254,49,59,127,196,8,6,32, + 111,246,238,188,251,238,188,216,203,24,251,2,99,172,131,37,136,48,198,126, + 193,24,179,76,37,237,91,49,137,105,154,70,47,122,209,139,94,244,50,121, + 217,206,115,103,140,173,223,187,115,255,237,139,191,248,147,219,214,191,245,97, + 166,161,62,0,192,15,63,250,158,91,115,104,177,200,96,212,113,223,228,251, + 13,189,157,155,219,110,112,106,30,77,211,52,205,243,31,39,255,50,152,105, + 61,73,214,127,26,10,221,190,232,129,7,110,123,163,187,59,43,123,55,204, + 153,227,134,195,17,139,135,66,142,105,171,87,27,218,187,126,198,12,167,195, + 227,209,224,112,120,166,172,92,105,219,94,77,211,254,204,24,59,29,192,195, + 0,46,1,240,35,0,179,146,222,220,182,76,237,37,8,130,32,134,200,116, + 34,215,210,245,111,125,120,1,128,185,217,84,166,105,168,219,240,194,230,254, + 142,29,251,189,24,10,231,185,246,245,30,100,162,45,31,222,183,57,190,242, + 177,149,12,217,135,40,117,123,223,232,238,206,218,94,56,28,117,175,110,219, + 214,191,109,96,32,197,222,200,193,84,123,31,216,190,61,254,112,71,71,86, + 246,106,154,118,144,49,54,15,137,112,229,47,0,156,9,96,29,99,108,142, + 166,105,239,102,101,55,65,16,4,145,213,227,114,206,204,182,178,127,63,233, + 151,189,0,112,212,220,227,197,172,193,151,126,113,227,178,159,0,120,137,111, + 72,138,91,190,200,218,222,41,175,188,210,11,0,231,181,180,164,216,123,247, + 227,143,167,216,155,20,183,172,209,52,141,1,248,53,99,236,5,0,191,3, + 208,132,60,44,255,69,16,4,49,156,177,154,7,151,19,255,52,115,70,202, + 120,210,89,51,207,242,224,104,135,6,150,178,12,213,59,207,255,118,229,46, + 36,210,231,83,56,234,252,227,10,182,92,149,138,11,70,140,112,75,159,61, + 71,120,60,26,82,151,205,122,231,129,207,62,83,218,59,187,165,37,39,123, + 53,77,107,71,34,179,242,34,45,139,172,74,130,32,8,98,136,130,62,240, + 244,173,53,111,166,76,92,126,123,205,219,97,0,248,108,207,223,229,9,205, + 199,170,190,255,217,171,59,50,157,232,157,19,127,234,234,138,72,159,195,0, + 176,63,28,182,101,239,27,221,221,57,219,171,105,90,24,192,174,92,203,33, + 8,130,24,238,20,212,131,203,128,74,155,128,92,105,246,18,4,65,12,59, + 180,44,38,11,19,101,0,205,131,35,8,130,48,135,4,142,32,8,162,138, + 160,155,223,33,92,0,208,120,233,22,219,33,55,46,136,116,17,115,163,247, + 185,196,227,107,232,58,230,6,191,142,190,139,115,122,0,58,145,3,119,220, + 113,7,110,154,252,63,0,128,11,254,99,20,234,234,234,16,139,197,224,116, + 38,114,174,204,222,3,137,21,140,162,209,196,12,27,167,211,9,198,24,52, + 77,131,59,249,228,142,225,80,86,190,236,89,113,195,103,118,154,108,216,80, + 208,36,19,130,40,38,235,214,109,46,181,9,195,158,186,186,58,124,237,159, + 239,41,181,25,195,146,175,92,50,9,131,127,58,173,212,102,148,21,229,146, + 100,66,16,4,65,16,121,69,246,224,232,81,43,4,65,100,77,76,241,160, + 97,130,40,21,162,192,49,198,140,245,45,185,218,6,137,28,65,16,134,240, + 113,35,130,40,7,184,192,49,198,24,214,172,217,98,120,224,61,247,188,0, + 139,135,105,18,4,65,16,68,217,64,99,112,4,65,228,13,10,81,18,229, + 132,50,139,114,230,204,73,250,123,51,175,142,32,8,66,132,66,148,68,57, + 161,20,184,123,239,125,81,127,63,109,218,196,162,25,67,16,4,65,16,249, + 66,41,112,36,106,4,65,100,3,133,40,137,114,130,66,148,4,65,228,13, + 77,163,68,107,162,124,160,16,37,65,16,4,81,149,112,129,211,52,77,211, + 167,10,200,162,182,126,253,86,220,124,243,197,64,98,30,28,77,21,32,8, + 66,137,217,92,90,130,40,54,226,52,1,77,211,52,76,157,58,38,229,0, + 73,220,8,130,32,8,162,34,144,231,193,105,141,141,141,186,200,145,184,17, + 4,145,9,52,6,71,148,19,170,49,56,173,177,177,145,245,245,245,97,214, + 172,19,0,18,55,130,32,108,66,33,74,162,156,48,122,92,142,214,216,216, + 72,107,79,18,21,195,29,119,220,81,106,19,8,130,40,51,204,158,7,71, + 226,70,16,68,70,188,242,202,43,96,140,193,225,112,100,180,170,9,99,12, + 241,120,92,247,0,249,95,77,211,192,24,75,121,48,104,181,149,149,79,123, + 136,84,232,129,167,68,85,192,159,40,77,148,150,208,203,167,22,164,220,193, + 42,46,43,159,246,16,169,144,192,17,21,79,211,188,173,165,54,129,32,136, + 50,68,235,91,49,137,252,90,162,162,33,129,35,8,66,5,9,28,65,16, + 4,161,164,210,111,30,93,0,224,187,248,147,82,219,49,108,121,224,129,7, + 112,245,152,95,1,0,46,248,143,81,168,171,171,67,44,22,211,7,232,205, + 222,3,137,65,230,104,52,10,32,241,168,18,198,24,52,77,211,7,174,135, + 67,89,249,178,103,197,13,159,1,0,46,249,213,24,104,154,134,193,193,242, + 26,29,113,187,221,219,242,93,102,36,18,153,144,239,50,179,197,235,245,2, + 128,222,14,149,222,185,86,58,189,207,85,254,50,141,250,24,92,95,95,95, + 41,237,32,0,212,213,213,225,107,255,124,79,169,205,24,150,124,229,146,73, + 24,252,211,105,250,103,198,24,14,63,252,112,212,212,212,232,159,203,128,178, + 17,163,124,193,39,134,135,66,33,12,12,12,232,55,33,0,48,107,214,44, + 0,64,115,115,115,185,181,67,213,161,110,135,221,165,53,42,15,80,146,9, + 65,72,132,195,97,93,220,92,174,161,127,17,167,211,73,43,117,228,9,198, + 88,202,163,117,124,62,31,0,164,8,28,181,67,225,177,211,14,149,12,9, + 92,25,65,207,210,42,31,120,167,170,105,154,62,167,139,255,243,19,185,193, + 231,108,249,253,126,196,98,49,125,94,215,232,209,163,177,103,207,158,148,99, + 169,29,10,71,38,237,80,169,144,192,149,17,153,76,140,37,138,131,195,225, + 64,83,83,83,74,103,16,143,199,75,109,86,69,227,112,56,224,243,249,208, + 208,208,0,198,24,122,123,123,45,111,238,168,29,242,79,54,237,80,105,144, + 192,149,17,20,118,41,31,120,18,10,15,135,249,253,126,68,163,209,148,85, + 36,136,236,208,52,13,189,189,189,112,185,92,240,249,124,112,58,157,134,98, + 69,237,80,56,50,105,135,74,69,126,154,0,81,66,170,237,199,85,233,240, + 59,92,158,129,25,139,197,168,83,205,3,124,220,39,26,141,130,49,6,159, + 207,7,135,195,184,43,162,118,40,12,153,182,67,37,82,93,103,83,225,84, + 219,143,171,210,225,30,53,133,195,10,67,44,22,211,179,183,205,162,23,212, + 14,133,197,110,59,84,34,212,163,18,132,5,20,14,43,15,168,29,136,76, + 33,129,43,35,170,37,53,151,32,8,162,28,32,129,43,35,40,139,178,60, + 113,56,28,85,23,186,41,23,50,9,203,83,59,20,142,106,29,30,169,206, + 179,34,136,60,192,195,97,213,56,248,94,14,136,115,218,204,66,143,212,14, + 133,197,110,59,84,34,244,107,41,35,170,237,199,85,233,196,227,113,248,253, + 126,104,154,6,151,203,69,43,104,228,9,158,246,207,39,112,91,37,143,80, + 59,20,134,76,219,161,18,161,121,112,101,4,95,108,150,40,61,124,66,49, + 79,73,231,105,234,124,213,7,213,241,149,140,248,100,232,66,195,211,254,229, + 107,172,130,218,161,112,100,210,14,149,10,9,92,25,81,109,171,8,84,3, + 241,120,28,189,189,189,122,24,135,119,176,50,212,177,102,78,127,127,191,190, + 68,148,21,212,14,133,35,147,118,168,52,72,224,202,8,74,50,41,63,248, + 157,45,239,96,141,160,142,53,243,250,196,180,127,159,207,135,221,187,119,27, + 214,79,237,80,184,250,50,105,135,74,195,5,36,158,73,70,16,68,2,183, + 219,141,238,238,110,212,214,214,98,244,232,209,165,54,103,88,176,111,223,62, + 120,189,94,116,119,119,235,219,168,29,138,143,170,29,42,25,242,224,202,136, + 231,158,123,14,140,49,125,213,116,187,200,119,97,226,93,32,99,44,229,193, + 160,213,86,86,62,237,225,56,28,14,132,195,97,184,221,238,170,89,85,189, + 18,8,4,2,212,14,101,128,220,14,149,140,214,183,98,82,117,156,9,65, + 16,4,145,87,42,253,169,234,228,193,17,68,133,81,233,157,14,65,20,11, + 23,0,196,103,253,205,242,64,158,97,35,79,180,212,52,77,31,144,20,255, + 170,92,92,113,27,99,44,229,179,156,193,147,209,10,7,171,207,76,148,161, + 56,15,190,252,149,248,68,96,94,31,15,87,241,244,88,190,178,182,184,61, + 173,46,135,67,15,33,242,247,252,51,127,40,35,63,127,85,152,209,232,58, + 90,157,135,221,114,202,169,61,234,47,250,56,197,14,94,135,104,143,56,152, + 157,233,192,54,47,239,161,135,30,194,213,99,126,5,0,152,191,236,88,248, + 124,62,68,163,81,189,205,205,222,243,114,34,145,8,128,196,239,132,219,232, + 241,120,82,190,227,116,58,209,216,216,136,57,115,230,224,138,43,174,64,224, + 197,147,138,122,158,154,166,233,117,18,4,97,77,70,30,28,239,228,120,39, + 42,190,248,118,51,196,78,84,126,159,239,21,10,184,128,241,201,140,34,60, + 27,139,11,90,36,18,65,36,18,193,224,224,32,98,177,24,34,145,136,190, + 79,60,47,94,150,195,225,128,203,229,130,203,229,130,199,227,209,223,243,78, + 144,31,19,139,197,116,209,227,56,28,14,221,182,92,207,185,220,219,35,30, + 143,35,16,8,228,92,78,38,92,120,225,133,248,198,55,190,81,240,122,228, + 155,1,241,60,229,235,110,213,14,242,126,121,140,144,255,253,244,211,79,113, + 124,246,38,19,196,176,195,182,192,113,207,68,124,137,219,128,212,127,84,217, + 59,184,6,42,132,0,0,32,0,73,68,65,84,80,161,242,44,228,207,42, + 145,176,130,123,100,220,187,18,183,139,194,54,56,56,136,112,56,140,80,40, + 132,129,129,1,132,195,97,68,34,17,221,139,19,207,137,219,32,10,156,211, + 233,132,219,237,134,219,237,134,215,235,213,197,142,255,229,223,145,207,129,255, + 53,243,230,172,168,132,246,168,150,84,99,43,140,110,40,84,159,249,203,108, + 16,223,104,255,27,111,188,129,227,73,225,8,194,54,166,2,39,122,25,98, + 39,202,95,98,103,202,49,202,76,227,88,109,23,247,115,1,224,217,111,128, + 181,24,240,240,162,28,146,228,226,198,61,181,193,193,65,12,12,12,32,16, + 8,32,16,8,164,8,91,60,30,135,203,229,82,134,35,197,122,184,109,220, + 190,104,52,10,143,199,131,120,60,174,139,156,104,179,236,181,101,42,108,149, + 214,30,165,16,184,98,77,150,151,67,142,102,98,166,58,70,12,103,138,127, + 197,235,46,183,77,71,71,7,200,133,35,8,251,40,5,78,236,188,100,15, + 193,168,51,229,29,189,81,200,75,196,104,187,140,40,12,252,159,222,42,180, + 167,218,207,195,142,209,104,84,247,214,250,251,251,117,113,227,194,166,105,137, + 181,238,106,106,106,116,207,204,237,118,167,136,28,160,22,5,238,53,138,169, + 232,220,139,20,223,103,19,154,172,212,246,40,69,170,113,177,38,203,155,121, + 196,178,135,43,139,157,124,44,47,67,117,51,34,238,167,133,134,9,34,51, + 210,4,78,213,153,138,29,169,184,93,236,68,141,94,102,168,58,9,249,59, + 242,188,37,51,175,32,26,141,166,117,46,162,184,5,131,65,244,247,247,163, + 175,175,15,129,64,0,193,96,80,63,95,143,199,131,154,154,26,253,37,134, + 28,249,130,164,178,157,92,212,120,216,147,139,36,247,20,185,29,110,183,59, + 197,163,148,69,193,76,36,42,185,61,134,91,136,18,72,125,164,139,29,97, + 19,63,139,30,178,124,19,165,105,26,26,26,26,10,97,62,65,84,45,74, + 15,78,213,153,114,15,70,190,227,20,179,17,69,207,133,31,99,132,216,9, + 200,199,139,222,16,183,135,195,235,49,18,4,241,14,158,139,91,36,18,65, + 32,16,64,127,127,63,122,123,123,209,215,215,135,112,56,172,135,50,235,234, + 234,80,95,95,15,159,207,135,154,154,26,212,214,214,234,73,35,242,51,168, + 120,249,162,184,241,240,164,81,22,166,211,233,76,201,132,3,82,69,77,247, + 236,12,174,85,174,237,33,238,47,118,123,20,155,82,132,40,197,109,242,152, + 173,217,241,50,220,219,7,82,69,142,255,45,151,107,76,16,149,66,154,192, + 137,97,56,121,252,73,236,76,69,175,69,20,54,190,77,28,167,225,229,242, + 127,96,49,220,167,242,16,120,217,252,123,98,194,135,217,0,189,232,37,197, + 98,49,93,112,130,193,32,250,250,250,208,221,221,141,190,190,62,221,211,171, + 169,169,65,67,67,3,26,27,27,209,208,208,144,226,185,201,99,110,50,110, + 183,59,229,188,197,241,187,72,36,146,34,8,60,49,195,237,118,167,8,176, + 44,114,42,178,109,15,94,190,88,151,170,92,110,131,153,199,150,109,123,12, + 167,16,165,40,110,242,77,81,38,158,172,28,102,22,69,78,30,87,38,8, + 194,28,67,15,142,119,166,162,24,1,169,29,158,40,110,60,181,158,119,182, + 114,104,70,92,173,90,244,4,52,45,61,141,159,127,143,11,145,216,185,139, + 251,205,136,199,227,8,135,195,8,4,2,232,237,237,69,87,87,23,250,251, + 251,17,14,135,225,116,58,81,87,87,135,230,230,102,52,55,55,163,190,190, + 30,181,181,181,240,122,189,25,61,107,74,188,46,46,151,75,63,71,167,211, + 169,123,117,178,7,21,139,197,244,243,176,123,71,158,77,123,240,125,42,91, + 141,206,193,136,124,180,71,181,35,94,23,59,226,38,39,153,200,251,84,30, + 92,99,99,99,97,140,39,136,42,37,49,209,219,100,156,71,252,7,21,59, + 82,49,43,81,12,203,113,84,255,184,252,14,84,244,26,196,193,116,94,167, + 40,132,114,152,143,79,196,53,187,83,231,115,219,66,161,144,30,150,236,239, + 239,215,39,236,250,124,62,52,55,55,163,165,165,69,247,220,220,110,183,105, + 150,155,29,100,113,228,66,151,41,185,180,135,248,125,94,134,17,118,206,49, + 151,246,24,110,89,148,242,181,182,18,55,254,94,53,230,198,175,187,184,157, + 66,148,4,145,25,186,7,199,59,79,85,2,3,48,212,153,138,161,63,62, + 142,37,139,155,234,31,91,149,30,47,102,226,169,254,193,29,14,135,46,158, + 220,243,225,157,170,209,184,143,56,199,45,24,12,194,239,247,235,226,166,105, + 26,124,62,31,90,90,90,48,98,196,8,52,52,52,160,190,190,62,101,220, + 68,133,89,24,78,117,158,98,182,164,124,109,84,168,206,37,211,246,224,226, + 35,134,201,68,251,85,231,164,58,63,217,86,49,52,153,77,123,20,27,190, + 34,73,161,177,18,175,76,66,148,170,241,79,213,231,114,184,190,4,81,73, + 164,132,40,141,188,5,185,51,141,68,34,8,135,195,250,157,189,216,9,26, + 193,61,54,49,91,76,78,86,80,217,193,255,201,69,15,197,225,72,76,158, + 86,213,199,67,131,161,80,8,126,191,31,126,191,31,225,112,24,14,135,3, + 181,181,181,24,57,114,36,154,155,155,209,216,216,136,186,186,58,195,44,55, + 209,22,21,86,162,197,109,227,94,156,89,146,135,209,117,179,219,30,162,103, + 165,18,54,35,129,51,187,41,17,61,107,254,55,155,246,40,54,135,14,29, + 42,73,189,86,191,163,108,203,20,161,39,190,19,68,102,184,0,243,80,152, + 152,192,16,139,197,16,14,135,117,207,205,40,116,34,119,142,178,199,38,38, + 78,136,200,119,189,60,61,63,28,14,235,203,102,137,229,201,227,81,162,141, + 161,80,8,129,64,0,3,3,3,96,140,161,166,166,70,23,54,187,226,38, + 159,143,108,171,153,200,137,157,191,170,227,55,11,15,102,210,30,60,193,69, + 172,199,142,23,161,58,111,85,218,191,216,118,153,182,71,41,66,148,187,119, + 239,46,122,157,242,239,72,117,179,96,229,209,137,255,51,70,191,43,122,32, + 46,65,100,134,238,193,201,94,19,255,71,19,59,83,62,182,37,123,35,42, + 143,76,254,39,182,10,97,169,58,96,110,143,203,229,210,235,230,251,184,215, + 192,24,211,211,235,69,239,141,207,115,139,197,98,240,122,189,240,249,124,104, + 106,106,66,99,99,35,106,106,106,108,119,190,133,200,16,52,10,15,202,199, + 152,181,135,56,21,65,22,55,187,97,50,51,239,84,220,199,195,144,124,110, + 159,221,246,40,5,197,94,251,146,147,79,49,55,186,249,41,69,86,42,65, + 84,50,41,33,74,185,51,149,231,85,137,29,171,140,56,238,4,164,118,146, + 124,233,43,113,155,106,144,30,72,220,165,138,235,29,242,108,61,110,19,239, + 84,249,62,241,129,151,98,248,52,20,10,33,28,14,67,211,52,120,189,94, + 52,54,54,194,231,243,161,182,182,54,45,89,195,140,108,146,77,196,149,62, + 196,172,73,179,144,161,149,39,39,183,135,42,145,68,37,110,70,117,202,194, + 170,242,222,196,109,220,131,227,231,99,167,61,74,65,165,166,210,155,221,232, + 240,237,252,233,6,4,65,216,195,5,164,142,175,168,66,97,220,51,226,222, + 155,76,166,115,185,68,228,78,153,167,217,3,208,223,243,151,56,223,204,229, + 114,41,87,8,225,217,147,161,80,8,140,49,120,60,30,125,18,119,125,125, + 125,70,211,0,56,118,197,77,158,6,33,166,235,171,194,178,102,157,154,85, + 123,0,67,243,235,248,119,140,222,203,245,138,245,168,206,149,219,37,254,5, + 144,50,85,193,78,123,84,51,165,240,166,70,142,28,9,248,139,94,45,65, + 84,44,14,32,189,19,148,189,5,46,110,86,41,239,162,103,33,119,228,70, + 223,149,147,24,228,108,75,190,157,143,239,112,123,6,7,7,245,185,119,98, + 253,225,112,24,3,3,3,122,214,36,15,79,214,213,213,193,227,241,100,149, + 12,96,148,128,97,6,191,134,98,56,87,149,212,161,178,199,170,61,248,123, + 241,26,153,9,157,213,75,85,167,188,159,111,19,189,106,171,246,40,5,226, + 216,96,49,49,251,77,216,249,189,217,9,133,251,124,190,204,13,35,136,97, + 76,202,52,1,17,49,253,159,123,14,226,56,144,202,91,147,179,34,197,16, + 165,188,88,177,170,3,85,193,199,124,248,178,89,188,147,231,99,66,98,102, + 153,248,44,55,62,110,84,91,91,171,139,91,33,179,252,100,239,77,68,188, + 102,140,177,180,16,169,89,114,135,92,134,248,89,53,65,62,83,47,206,8, + 249,60,120,219,243,68,19,59,237,81,10,47,167,20,30,100,166,231,41,39, + 97,217,165,212,55,15,4,81,105,232,33,74,241,175,236,125,240,127,44,163, + 172,73,171,4,18,171,73,192,86,211,11,196,208,24,31,215,26,28,28,132, + 215,235,77,233,92,196,133,149,25,99,240,122,189,250,10,37,94,175,55,175, + 137,0,34,118,214,124,52,187,70,114,168,210,172,61,184,160,24,121,105,242, + 54,85,121,34,102,33,73,163,247,98,152,210,172,61,170,57,41,194,236,60, + 85,73,58,128,189,72,128,92,174,220,246,4,65,216,39,237,118,87,254,167, + 226,98,97,148,53,105,214,113,243,127,116,121,12,42,155,16,161,232,245,240, + 240,163,248,96,82,94,31,23,0,238,249,241,113,161,66,45,43,37,215,111, + 55,235,210,40,44,169,250,158,28,234,52,67,21,86,180,242,224,84,34,199, + 143,87,213,41,47,244,108,212,30,165,160,84,33,74,192,248,134,192,206,247, + 236,108,47,229,185,17,68,37,146,162,76,102,119,143,98,71,41,142,149,89, + 77,82,22,143,145,189,13,121,222,148,17,220,83,16,179,247,248,120,155,248, + 79,207,167,51,240,58,221,110,55,60,30,79,193,50,251,196,9,220,118,4, + 72,14,49,217,17,30,241,189,248,89,30,123,147,49,243,234,172,66,153,170, + 247,42,65,182,106,143,66,121,204,102,20,43,68,41,95,159,76,199,101,197, + 109,42,196,144,55,63,102,112,112,48,23,147,9,98,216,145,146,100,194,81, + 137,155,136,29,47,140,255,83,202,11,11,243,239,102,50,30,38,102,86,114, + 172,18,26,156,78,103,202,3,75,101,187,178,69,37,58,70,83,39,84,201, + 37,86,158,156,106,155,28,166,50,202,68,53,106,23,59,137,37,86,239,229, + 207,118,218,163,154,67,148,34,70,55,57,86,55,61,118,196,77,60,182,212, + 222,49,65,84,26,46,192,216,115,19,183,113,140,238,242,85,199,136,94,30, + 23,53,179,213,24,140,68,83,14,133,138,11,12,139,107,15,138,203,129,113, + 15,78,12,79,242,58,84,227,77,102,200,66,37,102,139,202,157,148,234,177, + 50,220,46,51,113,211,52,13,124,175,89,123,216,185,49,80,9,154,213,56, + 156,157,50,229,48,181,85,123,148,130,98,133,241,228,107,38,223,120,216,189, + 1,148,183,153,141,229,134,195,225,108,205,37,136,97,73,74,60,199,40,57, + 194,106,236,6,72,255,135,22,67,104,86,226,102,119,220,130,11,133,25,162, + 119,168,154,208,45,139,149,221,113,39,142,252,72,26,81,244,68,196,229,179, + 248,123,163,155,3,35,140,218,35,219,108,80,222,22,170,114,197,54,224,159, + 141,174,137,120,3,99,118,173,74,17,162,172,175,175,47,74,61,170,182,52, + 186,129,49,75,50,17,143,81,121,252,226,190,80,40,4,212,228,241,36,8, + 162,202,201,120,192,66,244,70,248,56,12,159,66,160,10,103,241,116,114,163, + 245,39,69,172,58,68,121,69,21,171,16,165,93,236,140,137,136,66,198,109, + 224,219,53,77,75,153,116,45,150,33,62,19,78,198,168,99,44,36,217,212, + 101,22,74,51,107,143,82,132,40,79,60,241,196,162,212,163,250,205,200,219, + 100,239,217,142,215,166,42,199,238,24,47,65,16,169,40,61,56,163,127,38, + 238,29,201,147,185,85,161,48,121,193,96,241,248,108,145,87,242,80,141,13, + 242,144,164,85,2,135,93,100,97,19,195,147,124,155,145,71,101,231,81,57, + 118,234,54,235,220,236,158,95,38,118,216,77,154,176,106,143,82,112,225,133, + 23,22,165,30,149,151,197,175,155,236,153,153,141,89,155,121,109,242,118,26, + 131,35,136,204,208,199,224,140,194,131,220,67,227,94,24,255,39,227,75,53, + 113,47,14,64,154,144,137,97,201,124,138,155,220,153,112,196,21,54,178,173, + 207,40,44,40,122,42,178,112,25,141,199,169,238,242,85,201,32,122,232,80, + 56,214,168,61,228,113,30,59,227,136,70,199,24,121,174,153,138,155,81,123, + 60,244,208,67,150,229,228,155,201,147,39,91,138,138,17,70,237,37,151,167, + 10,69,174,90,181,10,235,214,173,3,0,61,185,137,47,15,231,243,249,80, + 83,83,147,50,23,83,188,126,226,18,115,60,20,25,12,6,17,12,6,49, + 56,56,136,80,40,132,193,193,65,116,118,118,226,162,43,178,190,52,4,49, + 236,48,156,7,199,17,61,33,249,31,93,78,38,225,219,248,75,37,110,170, + 78,217,78,135,202,24,211,151,12,227,79,230,150,59,49,46,108,252,1,156, + 188,174,88,44,102,58,85,192,106,204,77,244,220,248,123,249,188,228,242,228, + 243,148,61,89,185,195,52,11,141,154,237,51,235,196,237,140,43,102,186,93, + 180,201,170,61,174,30,243,43,195,50,10,69,224,197,147,74,82,231,108,0, + 179,167,91,28,104,148,35,226,0,224,77,190,8,130,200,27,186,192,153,133, + 192,68,207,141,35,103,54,202,225,74,35,207,77,213,41,155,37,56,0,67, + 79,233,14,135,195,41,11,62,243,241,61,142,211,233,132,199,227,193,224,224, + 160,62,38,198,151,237,18,235,150,19,75,140,16,5,77,53,14,34,223,8, + 24,37,19,136,199,168,60,11,163,177,153,76,145,207,203,110,242,140,81,152, + 204,8,190,254,164,89,123,52,205,219,154,177,253,4,65,16,249,36,37,68, + 41,34,10,21,23,50,57,131,79,12,5,138,29,183,85,182,164,17,170,16, + 16,23,24,113,65,95,110,135,28,138,228,83,3,220,110,183,126,78,98,120, + 145,135,85,229,58,84,200,222,154,120,157,84,98,97,52,38,195,207,75,12, + 157,138,47,171,196,3,241,218,216,17,101,213,248,143,104,159,145,184,90,93, + 23,113,63,191,225,176,106,15,130,32,136,82,98,40,112,170,14,150,119,96, + 178,23,166,10,91,230,130,220,41,71,34,17,125,44,130,207,115,226,203,112, + 201,115,220,248,234,37,60,68,41,142,117,216,201,172,148,5,141,255,181,59, + 192,47,139,179,81,34,142,124,142,242,247,204,218,67,190,209,80,137,151,74, + 136,205,4,85,245,89,229,177,50,198,108,183,7,65,16,68,41,49,92,170, + 11,72,29,99,51,11,187,201,199,26,145,73,216,141,31,27,139,197,16,14, + 135,17,12,6,17,10,133,16,137,68,244,113,54,121,18,55,95,0,88,236, + 104,185,183,1,100,150,133,166,74,96,17,177,186,30,242,54,62,70,101,54, + 55,79,101,131,170,108,241,161,178,42,113,50,242,202,196,48,171,28,114,85, + 125,86,193,151,228,178,211,30,4,65,16,165,68,239,181,85,119,237,252,175, + 152,49,9,164,46,183,101,39,52,153,41,98,253,131,131,131,8,6,131,240, + 251,253,8,135,195,96,140,193,237,118,195,235,245,166,121,12,242,250,147,220, + 99,225,89,106,118,4,78,12,109,138,24,173,144,97,37,78,220,171,228,215, + 75,20,56,149,208,168,174,129,74,116,100,251,84,98,101,167,14,51,81,147, + 203,136,199,227,122,134,159,157,246,32,8,130,40,37,14,192,120,237,59,17, + 171,180,107,149,231,150,107,184,146,167,78,7,2,1,12,12,12,32,28,14, + 195,225,112,164,60,6,71,206,224,228,79,17,240,122,189,186,215,196,87,185, + 55,243,32,229,229,183,68,219,249,243,206,68,236,36,148,112,65,19,39,187, + 203,215,81,37,60,118,218,195,232,251,70,161,78,35,79,205,168,12,213,241, + 153,182,7,65,16,68,41,49,204,162,148,63,139,235,60,202,203,119,101,34, + 100,178,120,168,246,3,137,208,98,40,20,130,223,239,71,111,111,47,2,129, + 0,226,241,56,188,94,175,62,167,72,126,2,56,144,24,11,18,59,101,190, + 186,70,52,26,213,19,61,100,47,67,181,114,187,252,87,22,72,171,132,15, + 46,112,124,177,103,94,175,44,110,98,134,166,120,85,172,218,67,222,103,100, + 79,38,89,163,102,225,73,198,88,86,237,65,16,4,81,42,44,151,234,82, + 121,19,170,185,93,42,172,196,76,117,60,255,59,48,48,0,191,223,143,158, + 158,30,248,253,126,68,34,17,184,92,46,212,213,213,161,174,174,14,53,53, + 53,240,120,60,105,73,38,226,60,56,198,152,190,64,173,60,143,141,219,109, + 215,91,82,133,55,101,209,224,231,43,122,146,220,123,227,226,38,46,117,38, + 138,155,93,68,123,121,102,168,88,183,108,139,81,217,118,51,65,185,157,129, + 64,32,227,246,32,8,130,40,37,202,137,222,28,113,14,153,42,107,210,234, + 110,221,174,184,201,34,17,12,6,209,223,223,143,238,238,110,244,245,245,33, + 20,10,65,211,52,189,51,173,171,171,211,19,74,68,68,47,211,227,241,164, + 133,227,184,23,199,69,71,37,48,170,208,44,47,155,95,19,241,88,46,20, + 140,13,45,217,197,19,93,120,210,5,247,28,101,113,179,35,112,86,237,33, + 79,127,80,9,151,202,139,179,170,83,244,92,179,109,15,130,32,136,82,162, + 11,156,232,13,112,196,142,24,72,127,200,38,239,236,85,29,155,85,24,82, + 149,38,207,147,24,250,251,251,209,219,219,139,158,158,30,4,131,65,48,198, + 80,91,91,139,186,186,58,125,217,35,158,208,160,154,52,206,197,75,28,131, + 83,117,236,178,23,39,174,126,34,218,36,94,35,213,57,240,122,121,221,220, + 147,17,95,226,249,242,107,106,54,46,152,73,123,48,198,82,66,179,226,156, + 185,108,67,148,252,197,197,45,219,246,32,8,130,40,21,186,192,241,177,53, + 121,213,18,62,143,140,123,40,124,210,178,81,202,187,136,89,136,82,246,154, + 120,2,131,223,239,71,87,87,23,122,123,123,209,223,223,143,104,52,10,143, + 199,3,159,207,135,134,134,6,212,214,214,166,100,73,202,136,19,210,197,78, + 87,20,47,46,18,226,99,117,100,113,227,215,68,188,14,34,242,4,115,57, + 36,201,195,146,226,83,203,229,208,164,124,29,228,242,51,105,143,72,36,146, + 86,151,29,81,19,17,189,182,124,181,7,65,16,68,169,48,28,131,227,29, + 164,195,225,64,44,22,211,231,147,241,14,85,236,188,25,99,74,111,195,110, + 50,73,36,18,209,83,207,123,123,123,209,215,215,167,39,49,120,60,30,52, + 55,55,163,177,177,17,62,159,15,117,117,117,105,79,233,150,225,54,139,98, + 204,189,56,217,115,20,191,195,237,17,247,241,240,159,152,88,35,134,66,1, + 232,194,38,102,78,202,139,62,243,50,196,5,118,51,157,151,103,213,30,92, + 244,178,73,246,16,197,151,207,115,203,87,123,16,4,65,148,130,52,129,19, + 159,237,38,134,187,128,161,68,13,241,97,158,98,18,133,252,136,28,179,240, + 27,247,18,120,103,218,223,223,143,64,32,160,143,241,0,137,85,217,155,154, + 154,208,212,212,132,198,198,70,212,215,215,195,227,241,164,141,135,169,84,90, + 244,94,184,157,28,35,47,13,24,154,44,46,122,89,241,120,60,109,177,102, + 121,94,155,248,89,22,25,57,44,153,137,184,229,210,30,226,184,152,153,39, + 199,133,183,144,237,65,16,4,81,108,92,64,234,88,148,42,172,197,199,119, + 120,71,200,59,50,222,161,138,233,247,86,9,40,92,216,248,90,134,124,78, + 149,223,239,215,31,11,194,231,86,249,124,62,52,54,54,162,177,177,17,181, + 181,181,186,151,36,142,53,201,101,203,97,71,142,152,136,1,168,159,37,167, + 250,171,242,78,229,9,239,70,98,39,142,101,25,61,106,71,69,181,180,7, + 65,16,68,41,73,185,217,86,141,69,241,109,60,51,80,236,84,249,154,132, + 114,104,78,236,88,57,220,211,16,59,211,129,129,1,125,77,67,190,210,136, + 152,122,222,208,208,128,134,134,6,61,5,157,47,162,204,237,226,158,150,136, + 145,200,153,133,208,84,115,250,84,41,247,170,99,196,177,72,241,156,229,108, + 73,187,89,147,213,214,30,4,65,16,165,34,45,154,36,122,15,98,234,57, + 247,128,184,247,192,195,86,252,113,41,114,250,186,42,27,145,119,168,225,112, + 88,127,220,10,247,108,52,77,67,77,77,141,222,153,250,124,62,212,214,214, + 162,182,182,86,79,185,151,237,17,237,229,239,229,14,86,181,141,163,242,226, + 84,66,166,250,44,10,154,217,57,139,115,239,50,17,55,209,126,160,50,219, + 131,32,8,162,148,24,14,151,136,243,196,120,39,206,67,82,220,43,224,147, + 168,35,145,136,238,65,168,210,224,121,226,6,247,52,196,208,29,79,208,168, + 169,169,65,77,77,13,106,107,107,81,95,95,15,175,215,155,178,220,150,89, + 120,81,101,183,145,240,137,219,205,194,106,170,144,165,149,167,39,78,55,200, + 100,174,155,29,42,181,61,8,130,32,74,133,105,62,128,40,6,252,174,94, + 53,30,229,116,58,245,68,7,190,186,188,152,160,33,30,203,147,53,248,56, + 145,219,237,214,151,122,18,95,124,60,73,78,199,55,27,79,178,58,151,108, + 195,103,170,14,156,11,141,88,166,60,13,64,124,229,131,106,106,15,130,32, + 136,66,99,59,225,77,78,141,231,29,30,95,189,159,135,184,248,95,238,49, + 240,4,8,241,187,98,103,234,245,122,245,39,113,139,143,92,145,189,165,76, + 82,223,101,33,16,199,228,100,228,4,9,241,189,236,169,88,101,34,138,229, + 229,83,216,84,84,82,123,16,4,65,148,130,140,50,186,121,135,47,10,6, + 239,12,99,177,24,106,107,107,211,50,6,197,213,63,248,119,196,228,12,121, + 41,43,149,183,148,139,151,160,10,89,170,16,133,78,53,126,101,245,93,213, + 223,66,83,137,237,65,16,4,81,44,180,190,21,147,138,211,27,19,195,138, + 166,121,91,75,109,2,65,16,195,28,18,56,130,176,128,196,154,32,42,19, + 23,0,52,92,178,25,109,109,109,248,244,211,79,17,14,135,245,21,42,248, + 248,11,144,62,47,76,222,38,99,117,76,52,26,213,199,135,2,129,0,60, + 30,15,198,141,27,135,169,83,167,162,255,249,19,0,0,254,233,171,176,119, + 239,94,252,241,143,127,68,52,26,77,89,212,151,135,200,242,109,151,56,167, + 44,20,10,193,229,114,225,75,95,250,18,142,60,242,72,248,214,157,147,56, + 104,246,187,232,239,239,71,79,79,15,98,177,88,138,77,133,10,221,137,33, + 70,190,238,100,115,115,51,26,26,26,128,55,206,0,0,188,26,187,179,32, + 117,171,56,223,185,4,0,240,187,61,223,197,9,39,156,160,207,205,19,151, + 52,19,67,182,242,156,62,213,152,231,80,34,16,3,99,72,153,87,183,125, + 251,118,124,237,200,95,2,0,118,79,248,223,162,157,231,49,219,46,43,90, + 93,4,65,228,23,23,0,188,255,254,251,216,188,121,51,78,57,229,20,28, + 113,196,17,168,171,171,3,96,60,6,101,103,213,10,187,107,81,198,227,113, + 12,12,12,96,223,190,125,248,232,163,143,224,116,58,113,92,242,152,3,7, + 14,96,197,138,21,24,55,110,28,70,140,24,1,175,215,91,84,187,194,225, + 48,58,59,59,177,98,197,10,204,159,63,31,190,228,49,129,64,0,135,14, + 29,194,225,135,31,14,159,207,167,92,198,171,80,118,49,198,16,141,70,225, + 247,251,113,224,192,1,56,28,14,212,11,199,205,152,49,3,45,45,45,105, + 2,98,231,175,145,253,98,253,126,191,31,175,191,254,186,190,61,16,8,160, + 187,187,27,128,58,203,83,92,174,140,255,117,185,92,136,70,163,250,103,113, + 89,183,196,252,190,40,98,49,164,124,151,207,243,227,140,29,59,22,181,181, + 181,134,215,43,87,194,225,48,118,236,216,81,176,242,9,130,40,60,46,32, + 209,105,213,214,214,226,200,35,143,68,93,93,157,114,206,151,234,174,219,204, + 27,178,58,134,39,117,56,28,14,248,124,62,140,25,51,6,59,118,236,128, + 223,239,215,143,89,187,118,45,188,94,47,70,142,28,137,154,154,154,180,114, + 10,105,151,211,233,68,109,109,45,70,141,26,133,189,123,247,98,237,218,181, + 56,238,232,196,49,225,112,24,110,183,27,13,13,13,186,184,153,137,147,157, + 121,98,86,199,136,231,234,241,120,208,208,208,128,238,238,238,132,199,45,28, + 215,223,223,159,146,28,194,219,82,117,190,242,181,19,247,203,9,51,154,166, + 33,22,139,33,16,8,164,216,213,213,213,165,79,31,224,143,248,225,235,103, + 138,117,196,98,49,125,114,184,184,140,25,144,16,178,104,52,170,239,143,197, + 52,184,92,67,143,12,138,199,227,56,112,224,0,48,110,168,222,112,56,108, + 248,59,205,230,60,69,24,27,122,80,46,65,16,149,139,11,72,76,12,30, + 61,122,52,106,107,107,245,78,195,104,82,179,56,209,88,222,198,177,58,70, + 220,207,59,152,218,218,90,140,30,61,26,131,131,131,122,57,177,88,44,205, + 115,43,166,93,140,49,120,189,94,140,24,49,2,145,72,68,47,167,179,179, + 19,163,70,141,210,23,112,150,197,73,229,25,169,188,38,209,46,179,99,84, + 157,178,203,229,130,207,231,195,161,67,135,208,34,212,221,217,217,137,193,193, + 193,148,197,175,141,230,236,241,99,196,9,228,177,88,76,8,255,198,117,79, + 74,211,52,125,25,47,17,113,85,19,113,53,19,217,43,52,186,86,252,24, + 62,37,33,177,60,152,150,82,158,166,105,122,84,129,19,12,6,245,185,126, + 70,101,138,237,33,219,147,218,6,137,144,40,255,204,159,212,64,16,68,101, + 227,2,128,253,251,247,99,210,164,73,105,207,25,227,200,157,131,106,91,54, + 199,136,225,192,120,60,142,218,218,90,108,222,188,25,211,70,36,246,239,221, + 187,23,19,38,76,72,9,119,229,90,167,221,99,184,93,92,228,118,237,218, + 5,140,21,46,156,176,84,149,10,213,60,56,121,155,145,247,96,247,24,241, + 9,9,28,46,56,252,161,171,252,41,230,140,49,125,186,132,40,118,98,24, + 81,211,180,148,112,107,52,202,224,245,66,47,199,227,241,164,9,28,159,55, + 39,35,94,83,113,146,189,74,244,249,57,25,141,97,242,233,11,34,226,130, + 210,226,248,30,47,75,117,115,96,228,181,199,227,12,14,71,170,157,36,112, + 4,81,249,184,128,196,221,176,219,237,70,95,95,95,202,196,94,217,99,202, + 39,188,147,230,243,180,162,209,104,218,88,22,144,232,200,2,129,64,218,227, + 120,138,97,23,79,234,80,117,224,78,167,83,95,105,95,246,10,11,101,151, + 104,31,79,234,144,225,225,66,46,92,170,103,197,137,222,145,42,100,200,183, + 123,189,67,30,28,15,21,202,162,202,61,47,163,115,231,98,163,18,99,163, + 250,69,59,120,200,147,123,241,28,249,183,32,222,0,137,30,155,56,142,39, + 143,7,14,213,1,221,131,19,203,34,8,162,178,209,123,29,62,198,5,164, + 142,83,137,119,222,226,126,121,155,140,157,99,196,227,100,27,56,114,199,198, + 191,83,104,187,172,108,48,234,176,139,105,151,145,13,124,165,127,126,140,220, + 89,171,66,117,178,119,204,113,56,134,188,48,177,92,209,6,149,208,202,229, + 203,168,188,45,149,0,113,219,84,130,35,102,211,202,55,26,98,29,242,103, + 35,33,230,251,196,114,9,130,168,92,44,87,50,49,235,156,50,253,94,62, + 33,187,204,203,145,59,104,163,242,173,58,114,209,19,18,199,231,56,78,167, + 83,15,215,170,66,178,86,143,41,18,133,69,246,186,120,25,102,130,99,36, + 98,252,187,170,243,84,9,185,106,172,150,32,136,202,38,43,129,203,7,102, + 227,87,118,40,87,187,74,141,89,200,84,28,19,227,24,37,194,240,227,249, + 123,62,78,42,95,119,249,49,57,70,89,140,34,42,81,226,227,130,70,226, + 34,123,171,118,66,194,70,227,200,118,162,10,36,112,4,81,249,232,189,6, + 159,60,44,119,10,197,252,71,87,137,139,156,41,167,154,224,93,10,187,196, + 84,120,89,48,74,105,23,15,231,113,65,224,162,196,5,68,110,83,113,204, + 138,31,35,135,43,185,231,102,244,188,189,76,198,32,197,178,197,239,240,186, + 197,112,167,24,42,87,121,164,226,88,153,85,50,137,120,158,226,103,17,241, + 250,84,250,141,14,65,16,130,192,137,143,62,201,119,34,135,221,206,194,40, + 188,39,219,83,110,118,153,29,87,72,140,234,19,133,74,60,70,37,30,102, + 158,23,127,207,211,247,85,245,137,25,142,42,175,205,72,156,84,246,203,99, + 121,252,123,70,139,101,203,30,167,92,190,170,44,51,47,78,126,66,3,65, + 16,149,77,154,192,1,197,239,168,205,40,149,119,100,69,41,133,205,12,158, + 36,33,134,14,229,78,221,172,19,87,9,183,152,129,41,135,10,197,246,145, + 235,50,243,154,228,108,71,179,241,58,213,205,150,108,167,209,121,90,93,43, + 17,209,38,74,50,33,136,202,39,165,183,42,84,72,82,85,102,38,33,160, + 225,102,87,174,200,55,42,118,196,216,104,188,74,254,108,36,52,70,251,196, + 191,242,195,86,85,225,112,89,248,0,164,121,162,118,206,211,232,92,173,198, + 236,40,52,73,16,213,131,97,146,73,161,59,110,121,174,89,60,30,79,89, + 45,164,148,118,1,67,73,21,140,49,91,147,126,139,101,23,191,102,124,254, + 160,140,89,56,80,28,211,226,219,68,241,81,205,25,27,170,51,125,205,74, + 94,134,56,118,43,142,145,170,198,235,100,209,18,39,241,203,99,132,178,135, + 166,58,47,25,213,121,138,199,27,37,209,240,207,4,65,84,15,186,192,25, + 117,24,242,188,174,124,117,228,98,121,70,41,232,165,178,75,14,173,101,226, + 9,100,51,159,45,19,187,100,27,205,142,183,26,251,82,121,109,70,225,192, + 68,27,165,215,35,46,10,160,42,83,101,23,255,43,218,168,10,141,138,199, + 27,205,181,51,251,142,209,103,179,243,36,8,162,122,40,217,52,1,185,252, + 76,199,61,138,101,23,96,61,87,204,232,123,133,192,44,92,40,110,179,19, + 62,149,197,72,124,156,141,124,140,195,97,156,181,41,11,156,42,75,18,176, + 158,46,192,87,92,81,157,171,217,100,114,59,231,167,42,211,238,119,8,130, + 168,76,74,46,112,188,142,76,235,41,87,187,138,129,153,93,242,88,150,188, + 207,108,187,184,164,151,12,223,174,74,50,17,87,55,225,66,201,143,23,133, + 83,206,196,148,167,35,240,176,53,63,7,62,109,64,229,221,91,121,138,102, + 152,121,192,114,118,41,65,16,149,75,73,231,193,217,25,212,47,197,60,56, + 59,118,149,98,30,156,221,36,136,92,218,205,106,108,75,70,149,0,194,199, + 211,84,225,71,179,48,169,108,191,24,198,204,36,124,109,7,179,239,210,88, + 28,65,84,7,52,15,46,15,118,153,29,87,72,140,234,83,205,77,227,2, + 37,38,146,136,162,101,228,181,201,117,201,137,45,124,173,75,217,35,18,203, + 227,243,232,196,27,40,57,217,67,181,22,166,40,112,170,117,55,141,198,25, + 85,137,36,102,97,93,213,121,202,9,50,4,65,84,30,52,15,46,75,74, + 41,108,102,240,44,75,0,105,30,185,221,239,171,146,50,24,99,202,133,155, + 249,227,121,228,99,69,241,143,199,227,122,24,83,158,6,192,67,145,124,31, + 71,252,62,175,91,101,147,124,44,255,44,191,87,157,147,209,24,161,209,180, + 4,130,32,42,11,154,7,39,81,14,118,229,10,15,233,137,29,181,42,37, + 94,21,118,20,195,138,162,88,241,80,177,140,188,16,178,152,234,175,242,232, + 68,59,84,79,57,80,121,149,70,227,130,42,239,62,211,243,148,143,51,90, + 177,133,32,136,202,131,230,193,41,236,2,42,119,30,156,56,102,37,63,243, + 77,44,135,31,43,135,244,100,161,16,143,81,93,7,254,52,1,149,189,178, + 208,24,193,133,216,232,24,77,211,18,191,13,150,186,77,12,97,26,157,167, + 145,7,39,123,109,178,199,73,16,68,229,147,241,60,56,21,86,115,191,140, + 198,176,248,223,124,204,131,203,167,93,133,158,7,151,205,92,57,121,28,201, + 40,11,80,246,106,172,188,31,110,143,153,45,154,166,165,205,119,227,200,30, + 156,149,247,100,245,89,134,151,225,116,58,1,139,251,140,108,194,198,42,225, + 43,87,207,156,32,136,204,200,203,52,129,92,58,3,89,232,50,253,94,161, + 237,2,242,63,15,46,87,187,172,230,193,185,92,46,184,221,238,156,59,105, + 177,30,158,232,33,123,107,226,147,214,85,54,242,155,23,163,49,48,49,20, + 42,159,19,223,174,123,163,130,192,113,155,178,25,103,52,59,79,192,120,113, + 103,130,32,42,11,154,7,103,81,71,57,222,201,91,217,197,195,171,86,99, + 92,114,152,78,220,198,203,1,82,199,194,228,176,104,77,77,77,218,211,224, + 101,143,144,139,173,56,145,92,37,104,60,147,146,49,128,111,78,41,107,48, + 245,60,197,114,114,57,79,185,12,49,81,135,32,136,202,69,25,162,84,141, + 205,200,239,229,239,136,199,152,117,44,34,86,225,41,179,239,148,155,93,226, + 119,75,105,87,44,22,67,32,16,48,76,10,177,10,71,138,199,200,2,55, + 56,56,136,112,56,156,114,108,77,77,141,158,93,41,30,47,139,15,99,44, + 109,154,128,88,151,42,84,40,138,140,124,222,124,204,54,31,73,33,242,245, + 143,197,98,202,241,77,130,32,42,11,211,44,74,158,172,160,234,136,245,201, + 188,154,6,8,162,195,255,138,251,227,66,121,250,54,33,252,148,50,206,162, + 64,101,151,106,28,74,20,102,64,131,166,165,167,131,203,251,249,246,161,109, + 233,233,231,118,195,85,170,27,131,124,217,5,176,180,118,80,217,181,113,227, + 70,91,182,230,11,143,199,3,183,219,173,20,78,177,125,229,9,251,170,36, + 16,35,209,83,141,35,238,219,183,175,160,231,69,16,68,229,147,38,112,98, + 122,185,56,233,91,213,201,136,130,164,58,134,239,119,42,190,227,16,178,21, + 141,82,185,197,178,101,123,140,196,132,31,47,219,165,78,64,72,223,150,8, + 143,165,166,200,91,217,37,190,228,250,205,236,50,222,175,182,85,60,23,149, + 93,231,59,151,40,235,45,36,19,118,127,181,232,117,30,179,237,178,162,215, + 73,16,68,229,145,18,162,228,131,246,162,192,25,173,48,145,105,102,156,106, + 155,120,199,110,246,204,47,238,221,137,66,82,104,187,248,24,150,81,8,76, + 22,93,113,91,161,144,61,75,177,174,166,121,91,11,86,47,65,16,68,37, + 146,38,112,154,166,193,237,118,235,130,34,122,101,98,71,206,61,47,166,105, + 128,98,221,65,113,191,83,177,77,75,122,72,78,167,19,225,112,216,116,154, + 0,223,206,199,122,140,60,202,84,207,139,33,30,79,95,9,69,220,15,56, + 210,182,49,54,244,57,18,137,24,174,131,40,94,15,249,24,149,71,57,84, + 199,144,151,104,180,95,244,214,196,239,0,233,99,87,4,65,16,132,154,148, + 165,186,92,46,23,106,107,107,211,150,95,226,168,146,33,140,18,39,196,247, + 70,73,33,64,98,49,101,167,211,105,234,41,57,157,78,120,189,94,184,92, + 46,229,56,93,33,236,226,130,107,22,158,228,43,233,139,147,170,139,97,151, + 89,216,148,32,8,130,72,160,187,29,7,14,28,128,215,235,69,109,109,173, + 82,220,128,244,16,156,249,56,82,170,199,103,244,29,151,203,5,175,215,11, + 143,199,131,253,251,247,167,149,215,211,211,3,183,219,13,175,215,107,59,9, + 37,31,118,57,157,78,93,232,187,187,187,83,246,213,215,215,35,16,8,232, + 199,20,219,46,46,244,129,64,64,89,47,65,16,4,145,20,184,81,163,70, + 225,227,143,63,46,89,200,139,123,67,159,124,242,9,70,141,26,165,111,111, + 106,106,66,123,123,123,201,237,218,185,115,39,154,154,154,244,237,140,49,28, + 60,120,176,164,118,105,154,134,131,7,15,150,164,126,130,32,136,74,192,1, + 36,60,146,189,123,247,226,241,199,31,199,182,109,219,138,110,196,182,109,219, + 240,248,227,143,99,239,222,189,168,175,175,215,183,215,212,212,160,179,179,19, + 43,87,174,196,158,207,40,235,23,0,0,31,154,73,68,65,84,61,123,138, + 110,215,158,61,123,176,114,229,74,116,118,118,166,76,102,118,187,221,240,251, + 253,248,224,131,15,208,217,217,89,116,187,58,59,59,241,193,7,31,192,239, + 247,167,8,47,65,16,4,49,132,11,0,198,140,25,131,147,78,58,9,31, + 126,248,33,238,186,235,46,116,119,119,99,112,112,176,224,227,60,154,166,193, + 235,245,162,165,165,5,199,29,119,28,78,61,245,84,140,25,51,6,216,146, + 216,63,119,238,92,132,66,33,236,216,177,3,79,62,249,36,250,251,251,17, + 137,68,138,98,151,219,237,70,67,67,3,198,140,25,131,227,142,59,14,115, + 231,206,5,182,60,0,0,104,104,104,192,97,135,29,134,253,251,247,99,237, + 218,181,8,133,66,182,22,100,206,7,46,151,11,53,53,53,104,105,105,193, + 17,71,28,129,134,134,134,162,212,75,16,4,81,105,184,0,224,132,19,78, + 64,115,115,51,90,91,91,209,217,217,169,175,132,81,12,33,113,185,92,168, + 175,175,199,200,145,35,113,216,97,135,97,244,232,209,232,79,10,92,107,107, + 43,22,44,88,128,131,7,15,98,213,170,85,24,24,24,64,44,22,43,138, + 93,78,167,19,181,181,181,56,231,156,115,112,216,97,135,161,185,185,25,145, + 164,93,205,205,205,168,169,169,65,115,115,51,130,193,160,190,162,70,49,236, + 226,137,45,117,117,117,168,171,171,67,77,77,13,66,5,173,149,32,8,162, + 50,209,250,86,76,162,116,188,42,128,230,193,17,4,65,164,66,2,71,16, + 4,65,20,132,82,223,120,187,0,160,225,210,45,37,53,162,127,197,36,144, + 29,100,7,217,65,118,144,29,213,103,71,41,161,135,94,17,4,65,16,85, + 9,9,28,65,16,4,81,149,144,192,17,4,65,16,85,9,9,28,65,16, + 4,81,149,144,192,17,4,65,16,85,137,122,85,101,34,35,236,172,72,73, + 115,49,8,130,176,131,134,242,232,47,202,197,142,92,168,62,129,19,87,19, + 41,226,98,200,102,171,152,208,115,219,8,130,176,131,6,225,177,89,100,71, + 206,100,45,112,114,151,205,164,109,37,185,40,210,179,211,88,226,201,162,133, + 175,22,234,39,131,131,111,47,184,5,101,142,124,93,74,37,248,229,98,7, + 97,24,245,24,206,255,43,92,84,128,210,138,75,185,216,145,15,178,22,56, + 241,132,53,148,129,59,171,120,88,168,46,58,37,18,185,74,254,97,228,13, + 131,135,188,22,93,92,74,96,7,47,185,82,126,3,197,176,87,175,195,228, + 65,194,133,182,161,28,17,69,133,83,10,113,41,23,59,242,69,117,36,153, + 40,196,173,36,102,32,245,161,165,149,248,131,200,43,226,147,201,133,151,166, + 105,233,222,84,149,218,193,24,179,53,70,91,106,84,29,91,161,234,48,171, + 135,239,175,132,107,150,47,204,174,125,49,175,69,185,216,145,79,170,106,12, + 174,28,60,5,221,147,43,106,173,101,136,116,215,39,122,7,41,222,110,161, + 219,199,228,238,179,88,118,148,251,29,112,49,197,45,101,155,234,255,85,120, + 95,206,215,44,223,148,203,56,125,185,216,145,47,42,95,224,4,239,13,40, + 143,6,42,213,248,35,0,243,142,218,206,49,121,178,197,78,59,20,92,92, + 74,100,71,233,127,129,185,81,148,80,165,36,94,149,126,205,114,161,92,68, + 188,92,236,200,39,213,17,162,76,82,138,4,147,178,32,209,145,219,58,89, + 45,209,155,23,218,34,0,67,137,71,162,97,165,24,175,21,237,144,95,249, + 182,67,28,99,18,67,230,229,26,226,17,61,43,46,244,250,231,2,212,161, + 215,99,178,159,83,174,215,140,168,28,42,91,224,36,239,109,88,146,129,184, + 113,138,41,114,195,17,85,168,77,127,95,42,163,20,168,196,141,83,168,255, + 41,43,113,211,52,173,44,162,48,68,117,80,249,33,202,36,195,210,123,83, + 137,155,205,142,73,211,52,141,37,122,223,66,88,150,168,3,80,142,193,137, + 159,139,129,153,167,54,12,126,37,101,139,145,103,71,109,66,228,139,202,21, + 184,225,238,189,41,196,45,27,79,174,32,34,103,51,163,181,224,55,34,229, + 98,7,145,134,85,216,146,32,242,65,229,10,156,192,176,244,222,18,157,55, + 19,69,141,217,80,251,180,227,11,113,173,196,185,136,124,19,175,127,168,238, + 162,38,187,148,212,14,34,5,18,55,162,88,84,246,24,28,202,35,107,178, + 100,36,69,78,222,102,248,18,40,134,184,37,235,73,152,133,210,137,91,177, + 237,16,235,149,51,124,203,169,35,23,231,109,202,158,110,161,254,175,228,121, + 112,118,19,78,8,34,27,170,194,131,227,12,203,187,113,133,39,103,69,81, + 197,77,21,70,46,133,184,21,201,14,61,99,83,16,14,160,252,196,141,35, + 206,5,148,69,46,95,246,26,45,101,103,39,225,164,28,175,25,81,57,84, + 141,192,149,147,184,21,59,13,94,233,201,25,80,108,113,227,246,21,141,50, + 176,163,20,137,52,249,164,216,75,67,233,245,22,217,115,179,211,62,195,73, + 96,171,241,122,84,133,192,149,157,184,149,98,21,6,59,231,95,164,9,213, + 37,107,143,114,177,67,162,220,61,17,35,15,171,208,117,88,61,129,163,24, + 215,140,158,2,146,74,181,93,143,138,31,131,43,151,78,12,72,13,177,148, + 219,156,167,130,81,46,162,82,46,118,72,148,187,184,113,196,241,184,66,215, + 97,86,15,223,95,20,113,131,241,57,87,74,187,229,147,106,188,30,149,251, + 184,156,66,47,243,148,33,170,193,241,97,177,158,158,144,138,95,210,246,40, + 23,59,4,42,173,221,139,37,42,128,113,71,90,236,107,166,242,44,171,254, + 127,214,132,106,187,30,121,121,92,142,217,182,130,82,6,157,24,96,158,249, + 53,156,68,174,228,237,81,46,118,16,150,148,211,255,131,216,169,87,253,255, + 170,13,170,233,122,84,197,24,92,57,80,137,241,233,188,82,46,231,95,46, + 118,16,21,133,222,169,151,218,144,50,161,90,174,7,9,92,30,168,244,31, + 1,65,16,244,127,44,83,13,215,163,226,147,76,8,130,32,8,66,5,9, + 28,65,16,4,81,149,144,192,17,4,65,16,85,9,9,28,65,16,4,81, + 149,144,192,17,4,65,16,85,137,214,183,98,82,53,36,203,16,4,65,16, + 101,70,211,188,173,37,173,159,166,9,16,4,97,139,82,119,86,196,255,111, + 239,206,131,45,171,11,3,143,127,127,231,220,123,223,125,123,239,221,116,55, + 16,17,217,12,168,160,37,12,76,68,38,229,2,84,129,150,83,19,157,4, + 146,16,71,146,50,78,141,113,156,202,184,48,149,209,113,204,16,83,198,137, + 142,154,148,137,51,163,51,174,48,42,168,32,98,138,184,0,178,211,180,108, + 221,13,189,211,221,175,223,122,183,115,206,111,254,184,15,17,18,227,125,40, + 189,252,252,126,170,160,105,222,175,239,61,247,212,185,247,219,103,251,93,45, + 85,13,220,112,165,231,202,244,151,79,2,96,252,146,205,135,121,73,126,62, + 179,215,158,114,184,23,65,90,50,207,193,73,146,146,100,224,36,73,73,50, + 112,146,164,36,25,56,73,82,146,12,156,36,41,73,222,38,32,29,241,34, + 49,150,84,21,236,218,213,225,166,111,207,112,235,15,102,216,188,249,32,187, + 119,117,153,153,105,147,101,145,149,171,114,214,175,175,113,198,233,203,56,247, + 220,229,156,123,222,26,198,199,235,139,223,146,237,223,101,245,203,199,192,73, + 71,172,254,28,12,173,86,201,151,175,217,199,223,254,205,126,238,185,123,138, + 78,103,55,221,238,54,170,184,147,170,58,72,81,246,8,49,227,241,237,19, + 220,117,215,4,215,95,183,28,152,100,217,242,58,175,121,205,70,174,188,242, + 52,206,62,123,13,121,158,45,126,93,158,223,153,167,95,14,6,78,58,2, + 85,85,65,85,69,174,191,126,154,255,250,129,157,236,221,187,143,249,249,155, + 153,154,250,46,99,227,11,156,117,214,9,156,112,194,70,38,151,157,200,240, + 240,48,101,81,177,176,208,225,137,39,166,217,188,121,51,15,61,116,128,169, + 169,53,124,246,179,27,249,252,231,239,231,181,175,221,192,251,222,119,30,39, + 159,188,156,90,173,238,23,244,234,151,130,129,147,142,32,49,86,196,24,153, + 155,171,248,143,127,188,157,91,110,217,203,66,251,171,236,220,245,85,206,59, + 239,197,188,230,213,191,201,175,158,126,28,141,70,141,70,35,167,81,111,144, + 231,57,89,222,127,43,199,42,82,148,61,166,166,218,124,251,219,15,243,149, + 175,220,201,166,77,143,241,149,255,55,199,205,223,222,194,7,62,120,46,151, + 95,246,98,154,205,58,89,230,219,95,105,115,11,151,142,32,49,70,166,166, + 10,46,191,108,27,243,11,143,179,117,219,85,156,254,194,117,188,231,93,255, + 137,141,199,45,103,104,168,206,216,232,24,99,99,99,140,140,140,48,52,52, + 68,158,231,79,157,99,139,145,178,42,233,118,187,188,224,5,199,242,27,191, + 241,50,190,249,141,45,124,248,195,55,176,99,231,56,111,123,235,55,120,232, + 193,189,92,117,213,249,140,143,143,147,101,158,155,83,186,12,156,116,132,136, + 49,50,63,95,242,91,191,185,141,86,231,78,110,189,245,3,92,121,229,27, + 184,248,226,243,168,55,234,44,91,54,201,138,229,203,25,27,27,167,217,108, + 82,171,213,22,47,32,121,230,225,198,72,85,69,202,178,100,213,170,130,203, + 46,91,205,43,95,121,34,239,126,247,245,124,227,155,251,248,139,15,127,159, + 44,148,188,247,189,191,206,232,216,40,121,158,31,150,215,43,61,215,252,235, + 155,116,4,136,49,82,150,61,222,249,206,237,204,206,61,194,237,183,189,143, + 247,188,251,45,92,116,241,185,140,142,141,178,113,195,6,142,63,238,120,214, + 172,89,203,196,196,4,141,70,131,44,203,126,202,185,180,64,150,101,212,235, + 117,70,71,135,89,177,114,5,167,158,118,28,31,255,196,191,226,141,111,60, + 133,24,155,124,228,35,127,199,255,253,220,29,44,44,44,16,163,95,40,162, + 52,25,56,233,136,16,185,225,198,89,110,185,101,31,247,222,251,223,120,203, + 155,255,53,103,159,125,10,147,19,19,28,187,97,3,235,214,29,195,216,216, + 24,181,218,210,15,186,228,121,141,102,115,152,117,235,214,112,245,213,23,241, + 138,87,172,167,40,214,113,213,85,95,100,235,163,123,104,183,219,70,78,73, + 50,112,210,17,160,40,34,31,252,192,78,90,11,55,112,234,169,147,188,246, + 162,115,24,27,27,101,253,49,199,176,114,213,42,154,205,161,159,235,202,199, + 16,2,245,122,141,213,171,39,248,243,15,95,196,228,100,147,61,123,114,62, + 249,87,55,115,112,106,138,178,44,127,129,175,70,58,50,24,56,233,48,139, + 177,226,123,223,59,200,35,143,76,177,115,231,181,92,113,197,155,104,54,115, + 86,173,94,205,242,21,43,104,52,26,63,229,207,69,170,178,77,217,155,161, + 44,91,196,88,208,191,119,238,201,189,177,159,252,239,190,60,175,241,194,211, + 86,241,123,111,126,41,129,99,249,226,23,111,97,215,174,41,90,45,15,85, + 42,61,6,78,58,140,158,188,45,224,186,235,166,104,181,54,241,188,231,173, + 226,132,231,175,102,98,98,146,21,43,86,50,52,52,244,15,198,87,85,151, + 178,236,82,150,115,84,237,109,48,123,7,204,221,79,217,221,71,89,246,168, + 170,30,101,49,71,81,204,81,85,61,98,124,250,222,89,150,229,92,126,249, + 73,228,249,50,118,239,153,227,158,123,183,48,63,191,64,85,85,135,242,165, + 75,207,57,175,162,148,14,187,200,109,183,29,160,211,121,152,23,189,232,133, + 212,235,117,38,38,38,25,110,14,63,237,176,100,85,245,168,122,251,160,119, + 0,8,132,88,80,205,223,69,49,119,63,97,104,53,85,241,107,48,82,163, + 78,11,58,59,251,127,102,104,29,161,177,238,105,87,74,134,16,56,229,148, + 21,108,60,118,37,219,182,174,229,222,123,30,230,188,243,78,97,217,178,101, + 94,81,169,164,24,56,233,176,234,7,108,203,150,121,186,189,39,56,238,184, + 51,104,214,235,140,140,14,147,215,126,242,0,75,36,150,115,48,255,32,213, + 194,29,253,255,149,45,39,182,238,164,216,121,55,172,221,72,167,187,1,138, + 113,38,178,237,84,11,183,245,247,220,134,95,78,53,62,202,208,80,78,158, + 215,136,49,18,99,69,8,129,147,79,94,193,182,173,35,236,216,177,135,118, + 107,129,162,87,64,243,208,175,1,233,185,98,224,164,195,42,210,237,86,116, + 58,57,121,30,169,55,70,152,111,215,121,244,145,30,203,151,85,100,89,222, + 63,44,89,46,16,91,91,169,230,239,164,216,247,109,66,115,136,50,59,150, + 172,218,74,190,115,63,213,170,146,162,179,137,188,130,94,190,155,208,185,7, + 230,58,180,151,173,166,10,207,35,100,195,12,133,12,136,220,125,215,62,78, + 124,193,50,70,134,155,212,106,163,180,218,29,186,189,146,162,44,136,49,58, + 141,151,146,225,57,56,233,48,169,170,130,7,30,88,224,213,175,122,136,145, + 225,9,242,236,0,49,194,253,247,117,184,252,242,107,120,224,129,253,180,219, + 109,202,98,142,184,240,16,213,236,173,84,221,239,145,181,30,163,154,221,66, + 175,253,48,101,185,159,124,223,12,33,223,67,61,191,141,172,243,125,98,119, + 19,44,236,162,215,157,162,211,154,98,97,97,158,162,87,82,85,145,111,124, + 243,0,191,125,249,117,236,221,59,79,89,22,156,240,252,23,115,253,245,57, + 31,252,192,61,28,60,216,33,70,207,195,41,29,238,193,73,135,69,228,225, + 135,59,92,124,209,22,98,172,200,242,77,44,180,118,16,201,216,181,187,199, + 99,219,182,178,127,223,14,86,175,234,177,98,108,30,102,239,160,58,248,117, + 194,216,102,200,166,200,14,140,16,54,212,201,178,22,113,110,150,122,99,134, + 80,246,232,148,211,148,85,131,48,179,143,188,24,165,104,206,83,246,90,148, + 85,151,24,155,60,176,105,154,71,183,62,192,254,253,231,209,237,118,201,243, + 149,172,92,113,34,95,248,210,221,28,156,158,225,211,255,243,77,172,90,229, + 185,56,165,193,61,56,233,16,139,177,98,110,174,203,101,151,63,74,140,21, + 239,248,247,227,236,216,241,125,98,236,80,149,5,89,40,137,49,210,154,61, + 72,231,224,86,226,236,93,84,157,219,96,238,71,212,154,123,200,139,57,242, + 253,115,132,124,150,172,62,71,222,174,8,121,139,60,238,167,89,236,38,203, + 166,200,90,93,10,58,196,106,6,122,187,161,179,27,170,121,138,50,18,171, + 138,153,233,41,122,69,193,230,205,7,104,212,199,32,142,114,227,183,110,231, + 191,188,255,58,166,167,15,122,95,156,146,96,224,164,67,46,240,137,79,236, + 231,238,59,23,248,221,43,86,242,185,207,221,71,183,187,31,136,253,239,107, + 139,1,98,160,44,91,100,221,135,136,51,223,34,196,59,200,202,125,132,48, + 79,104,245,8,179,45,106,245,5,2,109,232,117,9,25,132,86,65,86,76, + 83,107,30,32,235,204,146,87,45,234,181,109,140,150,223,33,155,187,145,98, + 118,19,85,111,154,8,84,85,255,158,183,170,10,204,206,229,16,70,137,113, + 136,79,254,213,87,185,253,182,173,44,44,180,188,47,78,71,61,15,81,74, + 135,88,167,91,242,151,127,185,147,245,235,115,118,236,216,199,119,255,254,97, + 160,162,255,205,221,129,72,36,132,72,78,135,188,124,140,56,243,0,249,250, + 199,201,226,92,255,190,237,185,8,173,138,250,80,139,56,87,16,138,130,80, + 68,178,153,72,213,233,146,159,208,37,196,156,60,228,52,135,118,144,181,247, + 80,155,223,68,197,1,138,133,151,1,145,42,198,197,235,55,35,177,42,9, + 12,19,25,165,221,222,205,167,62,245,77,78,57,117,53,67,67,141,159,122, + 147,185,116,52,112,15,78,58,196,190,251,247,115,108,219,182,192,177,199,229, + 220,120,195,163,84,85,73,191,92,129,16,114,194,147,191,43,231,201,171,39, + 8,221,125,100,195,243,80,148,16,34,204,6,178,185,146,48,212,38,143,109, + 232,65,236,65,220,21,225,225,146,188,89,16,67,143,156,121,154,205,93,212, + 91,91,169,213,239,163,234,126,139,216,217,2,64,85,85,139,115,156,4,34, + 129,72,6,140,1,195,220,120,227,173,236,221,59,69,171,213,58,60,43,72, + 250,5,49,112,210,33,118,195,13,123,8,161,160,189,48,207,142,29,79,16, + 23,227,6,129,44,244,22,15,13,6,234,113,23,181,124,39,217,194,2,100, + 61,98,183,191,151,199,158,8,51,37,89,179,75,156,45,96,33,66,23,194, + 143,32,219,210,131,60,194,66,69,62,223,38,159,152,165,126,96,134,124,217, + 65,106,79,60,78,100,7,196,72,44,103,120,242,102,128,16,50,2,129,254, + 77,112,117,14,76,237,225,190,123,183,49,55,63,231,185,56,29,213,12,156, + 116,136,221,123,239,44,89,136,236,223,191,64,175,215,227,39,239,58,107,100, + 5,161,154,135,0,19,67,183,50,52,254,32,161,51,13,89,69,152,13,196, + 153,0,187,34,28,140,196,170,71,216,87,194,108,132,5,136,119,2,143,66, + 121,176,34,123,164,34,238,175,8,227,29,120,188,132,162,34,223,57,77,222, + 120,2,66,70,61,238,35,44,78,225,21,22,255,29,168,1,13,98,140,60, + 250,232,14,22,230,91,20,133,129,211,209,203,192,73,135,216,246,199,23,136, + 177,195,204,244,108,127,102,145,159,248,89,30,218,212,226,20,196,146,225,229, + 247,210,120,124,59,108,111,19,166,43,216,27,97,107,132,45,192,84,32,219, + 25,225,97,224,0,240,24,132,29,85,255,215,123,50,184,173,34,220,17,9, + 7,129,31,86,196,7,33,191,183,69,189,81,16,98,164,30,247,80,197,254, + 161,209,167,158,63,44,254,211,101,102,118,154,78,167,67,89,20,135,112,205, + 72,191,88,94,100,34,29,98,115,243,93,170,88,208,238,61,115,182,255,72, + 78,9,229,2,33,6,242,206,60,225,250,22,228,129,242,17,200,30,0,122, + 192,166,8,27,32,110,203,224,14,96,95,128,251,50,152,170,136,29,136,95, + 8,132,199,128,237,17,190,4,60,4,220,84,17,55,65,117,124,177,120,21, + 101,155,88,245,120,42,106,145,167,62,14,74,138,162,77,89,149,148,149,123, + 112,58,122,25,56,233,16,27,25,142,196,216,235,207,253,248,12,49,118,201, + 66,65,21,3,113,123,69,120,24,194,92,69,28,205,224,230,146,184,37,35, + 204,69,152,129,120,55,132,205,21,241,64,128,239,68,178,233,8,37,132,175, + 148,132,10,40,35,213,71,43,194,52,176,39,18,39,2,177,91,3,74,194, + 51,246,28,23,159,29,40,128,14,89,150,253,248,86,2,233,104,101,224,164, + 67,236,152,245,13,238,223,212,163,44,159,186,184,228,73,25,5,21,93,2, + 17,126,20,9,123,42,152,1,62,15,76,1,115,145,216,200,8,235,50,194, + 166,10,118,5,66,39,246,15,71,46,94,156,18,187,244,59,85,15,100,123, + 43,232,5,152,143,80,230,48,93,66,120,242,204,196,226,243,47,78,207,21, + 233,2,243,64,151,145,225,97,2,78,219,165,163,155,231,224,164,67,236,244, + 211,199,33,182,41,139,98,241,182,128,39,67,7,89,40,168,209,134,16,224, + 1,8,93,136,43,114,66,187,130,181,129,48,22,9,175,132,234,159,85,196, + 233,197,7,28,10,196,17,168,54,102,196,213,25,241,172,0,235,35,113,3, + 84,103,212,136,199,66,117,82,78,28,133,144,85,132,248,140,175,65,13,44, + 94,185,217,2,166,9,161,197,49,235,143,33,251,241,116,93,238,201,233,232, + 100,224,164,67,236,252,243,87,17,66,103,113,143,41,227,169,61,184,176,120, + 87,90,175,255,187,29,16,115,8,47,137,196,151,7,226,175,7,216,16,224, + 69,145,240,50,8,141,138,248,138,0,43,35,172,1,222,158,19,79,140,240, + 218,72,60,55,35,158,29,8,127,3,28,31,136,87,101,196,151,100,196,211, + 27,63,113,89,201,147,183,122,87,64,73,255,106,149,3,140,143,47,227,196, + 19,87,83,171,213,22,231,164,244,219,5,116,116,242,16,165,116,136,157,127, + 254,90,142,57,166,206,206,157,11,132,80,163,191,135,180,56,147,9,244,15, + 25,198,138,234,37,1,118,7,152,0,94,223,191,207,141,201,12,142,171,8, + 103,64,156,200,200,46,134,106,42,35,156,16,224,130,10,110,5,206,14,196, + 225,0,167,70,24,173,168,206,203,200,206,139,196,125,129,236,254,197,195,152, + 85,141,31,135,43,2,180,129,157,192,94,206,61,231,85,140,142,54,104,14, + 53,201,115,63,34,116,244,114,15,78,58,196,134,135,51,126,231,119,95,0, + 204,81,197,214,226,254,84,255,173,88,198,6,189,56,217,255,78,182,51,115, + 120,69,128,13,192,25,17,150,69,170,115,35,113,101,70,24,3,142,133,184, + 17,56,54,82,157,19,137,19,253,195,152,213,137,1,94,16,96,50,35,84, + 25,113,99,78,140,57,197,9,227,244,202,38,17,104,87,171,137,161,127,8, + 178,44,187,68,182,0,143,80,171,21,92,120,209,43,105,54,155,140,142,142, + 82,171,25,56,29,189,12,156,116,136,229,121,157,183,189,237,76,158,127,226, + 8,33,236,35,80,240,228,193,148,110,28,163,203,42,34,21,213,134,113,226, + 198,26,113,125,32,27,11,196,201,140,184,49,16,169,81,46,12,193,177,57, + 85,13,56,38,35,59,185,63,205,87,92,151,147,13,229,196,21,57,84,25, + 177,168,193,88,141,238,222,21,204,229,199,211,110,109,128,24,233,101,171,22, + 159,51,208,238,236,5,238,35,132,237,92,244,218,11,57,233,148,181,76,76, + 76,50,50,50,66,158,251,17,161,163,151,91,175,116,24,172,88,49,204,39, + 63,121,33,147,147,5,145,237,244,223,138,25,221,56,74,47,91,9,33,208, + 99,45,197,250,38,172,203,169,114,136,19,129,124,25,20,161,78,57,59,78, + 60,166,70,150,7,88,14,213,170,58,85,187,65,92,85,167,152,25,165,28, + 105,82,118,106,196,178,70,209,156,96,102,255,73,60,209,58,155,249,222,175, + 16,201,8,249,56,121,86,3,102,40,203,155,32,60,192,105,167,190,136,203, + 126,251,117,140,143,77,176,124,249,114,154,205,225,195,188,150,164,159,143,129, + 147,14,131,44,203,56,231,156,141,252,175,255,253,91,60,255,132,17,96,55, + 80,35,198,156,88,171,19,227,62,186,237,245,20,163,171,41,235,13,170,185, + 58,97,172,70,25,27,196,124,146,246,252,50,122,147,195,84,181,140,184,50, + 35,214,234,148,11,35,84,19,99,180,167,87,208,171,38,9,245,33,170,162, + 78,209,24,99,190,123,2,237,250,89,212,199,38,137,213,116,255,220,90,236, + 2,55,146,101,183,243,207,207,189,128,171,174,122,43,171,86,141,179,122,245, + 42,38,39,39,169,213,252,210,83,29,221,60,192,46,29,38,245,122,131,11, + 46,120,62,95,187,238,173,124,230,51,55,115,235,173,247,176,122,205,114,214, + 173,171,243,127,62,253,6,86,172,127,152,233,249,192,104,115,43,217,99,7, + 9,189,46,229,174,6,221,184,154,114,122,148,108,40,82,203,59,196,181,13, + 122,243,19,196,133,33,138,102,157,206,236,122,178,108,1,194,94,178,217,138, + 185,198,26,186,213,6,234,205,95,225,247,222,188,145,227,142,27,102,197,138, + 9,94,114,230,12,107,215,29,203,153,103,189,159,211,94,184,145,241,209,49, + 214,172,93,205,234,213,107,24,30,110,246,207,3,74,71,177,48,115,205,201, + 113,242,117,15,30,238,229,144,146,52,253,229,147,0,24,191,100,243,63,250, + 243,24,35,221,110,151,233,233,105,166,166,166,104,181,22,152,156,92,198,72, + 179,65,103,118,59,213,194,86,242,238,86,202,206,94,66,53,71,17,155,244, + 226,24,181,16,89,214,184,143,161,177,45,48,151,49,95,91,78,217,155,160, + 138,227,116,170,245,100,20,140,212,118,19,41,104,87,171,88,200,95,74,99, + 249,153,44,95,181,129,44,171,209,106,181,200,178,140,178,44,57,120,240,32, + 33,4,38,39,39,88,182,108,57,35,35,35,100,217,211,15,238,204,94,123, + 10,126,78,232,104,227,30,156,116,24,133,16,24,26,26,98,229,202,149,140, + 141,141,209,235,245,200,243,26,245,122,78,57,190,140,110,231,56,186,173,23, + 211,94,56,72,187,189,64,44,35,89,94,39,100,5,11,197,25,204,181,182, + 82,149,5,157,238,8,49,27,37,54,38,201,234,19,228,121,141,121,218,148, + 69,135,50,54,168,53,215,49,58,182,156,225,230,40,141,161,6,163,163,99, + 0,148,101,201,196,196,4,89,200,104,12,13,81,175,215,220,115,83,50,12, + 156,116,4,200,243,156,145,145,17,98,140,79,5,102,8,134,134,155,244,70, + 87,208,236,245,40,139,30,85,85,1,129,44,207,136,69,164,221,105,209,238, + 180,168,21,5,121,158,145,215,154,212,235,53,234,181,26,121,150,81,148,61, + 138,162,162,86,175,49,220,108,82,111,52,168,215,235,79,123,238,24,61,28, + 169,52,25,56,233,8,242,204,208,228,121,78,150,101,52,26,53,98,108,18, + 99,127,22,47,128,24,97,164,28,163,42,11,98,21,9,89,32,132,64,158, + 103,63,126,156,24,251,243,114,133,44,144,101,217,226,204,36,255,244,115,74, + 169,48,112,210,17,46,132,254,61,110,255,152,254,125,216,245,167,239,249,73, + 2,188,77,64,74,130,113,147,254,33,3,39,73,74,146,129,147,36,37,201, + 115,112,210,33,48,123,237,41,135,123,17,164,95,58,6,78,122,142,121,131, + 180,116,120,120,136,82,146,148,36,3,39,73,74,146,129,147,36,37,201,192, + 73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156, + 36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73, + 146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36, + 41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146, + 146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41, + 73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146, + 100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73, + 6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100, + 224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6, + 78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224, + 36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78, + 146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36, + 73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146, + 148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73, + 73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148, + 36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73, + 50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36, + 3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50, + 112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3, + 39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112, + 146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39, + 73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146, + 164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73, + 74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164, + 36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74, + 146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36, + 25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146, + 129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25, + 56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129, + 147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56, + 73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147, + 36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73, + 82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36, + 37,201,192,73,146,146,84,3,152,254,242,73,135,123,57,36,73,250,133,10, + 33,132,120,184,23,66,146,164,95,52,15,81,74,146,146,100,224,36,73,73, + 50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36, + 3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50, + 112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3, + 39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112, + 146,164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39, + 73,74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146, + 164,36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73, + 74,146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164, + 36,25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74, + 146,129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36, + 25,56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146, + 129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25, + 56,73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129, + 147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56, + 73,82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147, + 36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73, + 82,146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36, + 37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82, + 146,12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37, + 201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146, + 12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201, + 192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12, + 156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192, + 73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,194,204, + 53,39,199,195,189,16,146,36,45,213,228,235,30,252,39,127,94,3,216,126, + 210,151,7,122,176,141,15,190,14,128,59,150,125,124,160,241,103,30,124,11, + 0,159,222,254,159,7,26,127,217,198,247,0,112,254,159,252,237,64,227,111, + 126,239,229,207,106,252,196,165,63,26,104,252,204,53,39,3,240,209,205,191, + 63,208,248,63,56,229,99,0,188,253,171,95,27,104,252,135,46,190,232,89, + 61,254,167,183,255,225,64,227,47,219,248,17,0,198,47,217,60,208,248,217, + 107,79,1,150,190,126,150,58,254,29,215,13,182,60,87,95,216,95,158,165, + 110,111,95,58,248,199,3,141,127,253,178,15,0,240,224,71,143,31,104,252, + 73,127,176,237,89,141,31,191,238,21,3,141,159,189,240,59,253,241,239,159, + 24,108,252,187,102,250,227,247,188,125,176,241,107,63,4,192,103,255,108,205, + 64,227,223,248,71,123,1,120,195,198,193,94,239,23,182,111,123,86,227,223, + 113,201,96,235,231,234,107,159,221,250,249,236,37,131,173,159,55,94,219,95, + 63,23,205,13,182,126,190,54,214,95,63,75,253,124,155,184,116,176,237,127, + 230,154,254,246,255,238,155,6,251,60,121,223,5,253,207,147,137,75,6,124, + 63,94,219,127,63,126,226,234,143,13,52,254,223,188,163,255,57,181,233,79, + 254,237,64,227,79,123,239,135,129,165,47,255,151,186,159,31,104,252,235,27, + 255,242,103,142,241,16,165,36,41,73,6,78,146,148,36,3,39,73,74,146, + 129,147,36,37,201,192,73,146,146,100,224,36,73,73,50,112,146,164,36,25, + 56,73,82,146,12,156,36,41,73,78,213,37,73,58,42,253,172,169,186,220, + 131,147,36,37,169,6,240,119,181,191,24,104,240,175,21,111,3,150,62,247, + 224,77,151,206,15,52,254,130,107,70,1,56,243,154,161,129,198,223,113,105, + 7,128,219,239,126,211,64,227,95,250,162,207,0,112,90,111,108,160,241,155, + 234,115,0,220,179,234,175,7,26,127,198,190,43,0,248,208,93,111,28,104, + 252,219,95,252,89,96,233,203,191,212,245,57,113,233,159,13,52,126,230,154, + 63,2,150,62,151,227,82,183,7,46,24,108,46,62,110,234,207,197,119,251, + 196,15,6,26,254,210,153,151,3,75,159,123,243,185,158,91,245,185,126,252, + 165,174,255,241,75,6,219,62,103,175,237,111,159,59,78,190,98,160,241,27, + 126,212,127,159,124,111,248,45,3,141,63,167,245,241,197,229,25,108,249,103, + 23,231,78,172,206,31,108,123,200,110,238,111,15,155,214,13,54,215,238,105, + 187,95,183,184,60,75,219,126,150,186,60,75,125,127,221,183,230,83,3,141, + 255,213,189,191,3,192,15,70,255,251,64,227,95,62,255,86,0,110,226,131, + 3,141,191,128,255,0,192,248,128,219,219,236,179,156,203,247,194,243,87,15, + 52,254,186,155,159,248,153,99,220,131,147,36,37,201,192,73,146,146,100,224, + 36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,6,78, + 146,148,36,3,39,73,74,146,129,147,36,37,201,185,40,37,73,71,165,159, + 53,23,101,237,16,45,135,36,37,231,103,125,192,234,240,170,193,115,63,119, + 223,59,191,254,135,3,141,255,211,215,124,4,128,175,119,7,123,252,215,52, + 250,143,191,212,229,95,234,92,112,207,245,248,241,75,246,15,52,126,246,218, + 149,192,179,153,123,112,105,143,63,243,210,111,13,52,126,226,246,127,1,60, + 139,185,236,150,184,60,75,29,191,212,185,64,47,188,250,223,13,52,254,186, + 119,252,57,0,19,151,14,182,189,205,92,243,236,222,47,111,218,51,216,227, + 127,102,109,255,241,103,127,255,166,129,198,143,127,236,130,254,175,75,156,75, + 112,169,239,175,165,206,165,249,234,91,254,199,64,227,191,113,222,149,0,124, + 243,138,247,15,52,254,85,127,253,46,0,126,56,224,235,61,107,241,245,254, + 112,114,176,229,57,107,250,202,129,198,233,240,241,28,156,36,41,73,6,78, + 146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146,100,224,36, + 73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41,73,206,69,41, + 73,207,146,83,117,29,217,66,8,193,192,73,146,146,227,33,74,73,82,146, + 12,156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201, + 192,73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12, + 156,36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192, + 73,146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156, + 36,41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73, + 146,146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36, + 41,73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146, + 146,100,224,36,73,73,50,112,146,164,36,25,56,73,82,146,12,156,36,41, + 73,6,78,146,148,36,3,39,73,74,146,129,147,36,37,201,192,73,146,146, + 244,255,1,70,124,189,153,152,111,116,90,0,0,0,0,73,69,78,68,174, + 66,96,130, diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 977e5467e..b1695d46c 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -46,6 +46,7 @@ with changes in the SelectionBar. #include "SelectionBarListener.h" #include "SelectionBar.h" +#include "../widgets/AButton.h" #include "../AudioIO.h" #include "../AColor.h" #include "../Prefs.h" @@ -66,33 +67,44 @@ enum { SelectionBarFirstID = 2700, OnRateID, OnSnapToID, - OnStartRadioID, - OnCenterRadioID, - OnLengthRadioID, - OnEndRadioID, - OnLeftTimeID, - OnRightTimeID + //OnMenuId, + OnStartTimeID, + OnCenterTimeID, + OnLengthTimeID, + OnEndTimeID, + OnAudioTimeID, + SelTBFirstButton, + SelTBMenuID = SelTBFirstButton, }; BEGIN_EVENT_TABLE(SelectionBar, ToolBar) EVT_SIZE(SelectionBar::OnSize) - EVT_TEXT(OnLeftTimeID, SelectionBar::OnLeftTime) - EVT_TEXT(OnRightTimeID, SelectionBar::OnRightTime) - EVT_RADIOBUTTON(OnStartRadioID, SelectionBar::OnStartRadio) - EVT_RADIOBUTTON(OnCenterRadioID, SelectionBar::OnCenterRadio) - EVT_RADIOBUTTON(OnLengthRadioID, SelectionBar::OnLengthRadio) - EVT_RADIOBUTTON(OnEndRadioID, SelectionBar::OnEndRadio) + EVT_TEXT(OnStartTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(OnEndTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(OnLengthTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(OnCenterTimeID, SelectionBar::OnChangedTime) EVT_CHOICE(OnSnapToID, SelectionBar::OnSnapTo) EVT_COMBOBOX(OnRateID, SelectionBar::OnRate) EVT_TEXT(OnRateID, SelectionBar::OnRate) + + EVT_COMMAND_RANGE( SelTBMenuID, + SelTBMenuID, + wxEVT_COMMAND_BUTTON_CLICKED, + SelectionBar::OnButton ) +// EVT_COMMAND( OnMenuId, wxEVT_COMMAND_BUTTON_CLICKED, SelectionBar::OnButton ) EVT_COMMAND(wxID_ANY, EVT_TIMETEXTCTRL_UPDATED, SelectionBar::OnUpdate) EVT_COMMAND(wxID_ANY, EVT_CAPTURE_KEY, SelectionBar::OnCaptureKey) END_EVENT_TABLE() SelectionBar::SelectionBar() : ToolBar(SelectionBarID, _("Selection"), wxT("Selection")), - mListener(NULL), mRate(0.0), mStart(0.0), mEnd(0.0), mAudio(0.0), - mLeftTime(NULL), mRightTime(NULL), mAudioTime(NULL) + mListener(NULL), mRate(0.0), + mStart(0.0), mEnd(0.0), mLength(0.0), mCenter(0.0), mAudio(0.0), + mStartTime(NULL), mEndTime(NULL), mLengthTime(NULL), mCenterTime(NULL), + mAudioTime(NULL), + mStartTitle(NULL), mCenterTitle(NULL), mLengthTitle(NULL), mEndTitle(NULL), + mDrive1( OnStartTimeID), mDrive2( OnEndTimeID ), + mSelectionMode(0) { // Make sure we have a valid rate as the NumericTextCtrl()s // created in Populate() @@ -102,6 +114,9 @@ SelectionBar::SelectionBar() // Audacity to fail. mRate = (double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), AudioIO::GetOptimalSupportedSampleRate()); + + // Selection mode of 0 means showing 'start' and 'end' only. + mSelectionMode = gPrefs->ReadLong(wxT("/SelectionToolbarMode"), 0); } SelectionBar::~SelectionBar() @@ -113,7 +128,54 @@ void SelectionBar::Create(wxWindow * parent) ToolBar::Create(parent); } +// There currently is only one clickable AButton +// so we just do what it needs. +void SelectionBar::OnButton(wxCommandEvent & event) +{ + AudacityProject *p = GetActiveProject(); + if (!p) return; + AButton * pBtn = mButtons[ SelTBMenuID-SelTBFirstButton];// use event.GetId(); + + auto cleanup = finally( [&] { pBtn->InteractionOver();} + ); + wxLogDebug( "Clicked"); + SetFocus(); + + wxMenu Menu; + Menu.AppendRadioItem( 0, _("Start - End") ); + Menu.AppendRadioItem( 1, _("Start - Length") ); + Menu.AppendRadioItem( 2, _("Length - End") ); + Menu.AppendRadioItem( 3, _("Center - Length") ); + Menu.AppendRadioItem( 4, _("Start - Length - End") ); + Menu.AppendRadioItem( 5, _("Start - Center - Length") ); + Menu.AppendRadioItem( 6, _("Start - Center - End") ); + Menu.AppendRadioItem( 7, _("Start - Center - Length - End") ); + Menu.Check( mSelectionMode, true ); + // Pop it up where the mouse is. + pBtn->PopupMenu(&Menu);//, wxPoint(0, 0)); + + // only one radio button should be checked. + for( int i=0;i<8;i++) + if( Menu.IsChecked(i)) + SetSelectionMode( i ); + + // We just changed the mode. Remember it. + gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); + gPrefs->Flush(); + + wxSize sz = GetMinSize(); + sz.SetWidth( 10 ); + SetMinSize( sz ); + Fit(); + Layout(); + Updated(); +} + + +// Add Radio Button function is not used anymore. +// But maybe we will need it again in the future. +// // Can't set textcolour of radio buttons. // so instead if we want to them, we make the text empty and add in a wxStaticText // and we can set the colour of that. @@ -146,11 +208,30 @@ wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name, return pBtn; } +wxStaticText * SelectionBar::AddTitle( const wxString & Title, wxSizer * pSizer ){ + wxStaticText * pTitle = safenew wxStaticText(this, -1,Title ); + pTitle->SetForegroundColour( theTheme.Colour( clrTrackPanelText ) ); + pSizer->Add( pTitle,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + return pTitle; +} + + +NumericTextCtrl * SelectionBar::AddTime( const wxString Name, int id, wxSizer * pSizer ){ + wxString formatName = mListener ? mListener->AS_GetSelectionFormat() + : wxString(wxEmptyString); + NumericTextCtrl * pCtrl = safenew NumericTextCtrl( + NumericConverter::TIME, this, id, formatName, 0.0, mRate); + pCtrl->SetName(Name); + pCtrl->SetForegroundColour( theTheme.Colour( clrTrackPanelText ) ); + pCtrl->EnableMenu(); + pSizer->Add(pCtrl, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + return pCtrl; +} + void SelectionBar::Populate() { SetBackgroundColour( theTheme.Colour( clrMedium ) ); - mLeftTime = mRightTime = mAudioTime = nullptr; - + mStartTime = mEndTime = mLengthTime = mCenterTime = mAudioTime = nullptr; // This will be inherited by all children: SetFont(wxFont( #ifdef __WXMAC__ @@ -163,13 +244,12 @@ void SelectionBar::Populate() wxFlexGridSizer *mainSizer; - /* we don't actually need a control yet, but we want to use it's methods + /* we don't actually need a control yet, but we want to use its methods * to do some look-ups, so we'll have to create one. We can't make the * look-ups static because they depend on translations which are done at * runtime */ - wxString formatName = mListener ? mListener->AS_GetSelectionFormat() : wxString(wxEmptyString); - Add((mainSizer = safenew wxFlexGridSizer(7, 1, 1)), 0, wxALIGN_CENTER_VERTICAL); + Add((mainSizer = safenew wxFlexGridSizer(10, 1, 1)), 0, wxALIGN_CENTER_VERTICAL); // // Top row (mostly labels) @@ -189,54 +269,15 @@ void SelectionBar::Populate() mainSizer->Add(pProjRate,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); mainSizer->Add(5, 1); - wxStaticText * pSnapTo = safenew wxStaticText(this, -1, _("Snap To:")); - pSnapTo->SetForegroundColour( clrText ); - mainSizer->Add( pSnapTo, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - - - bool showSelectionStart = false; - bool showSelectionLength = false; - gPrefs->Read(wxT("/ShowSelectionStart"), &showSelectionStart, true); - gPrefs->Read(wxT("/ShowSelectionLength"), &showSelectionLength, false); - - { - auto hSizer = std::make_unique(wxHORIZONTAL); - - wxStaticText * pSelStart = safenew wxStaticText(this, -1, _("Selection:")); - pSelStart->SetForegroundColour( clrText ); - hSizer->Add( pSelStart,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - - mSelStartButton = AddRadioButton( _("Start"), OnStartRadioID, hSizer, wxRB_GROUP); - mSelStartButton->SetValue(showSelectionStart); - AddRadioButton( _("Center"), OnCenterRadioID, hSizer, 0)->SetValue(!showSelectionStart); - mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); - - hSizer = std::make_unique(wxHORIZONTAL); - mSelEndButton = AddRadioButton( _("End"), OnEndRadioID, hSizer, wxRB_GROUP); - mSelEndButton->SetValue(!showSelectionLength); - AddRadioButton( _("Length"), OnLengthRadioID, hSizer, 0)->SetValue(showSelectionLength); - -#if 0 - // was #if defined(__WXMSW__) - // Refer to Microsoft KB article 261192 for an explanation as - // to why this is needed. We've only experienced it under Win2k - // so it's probably been fixed. But, it doesn't hurt to have this - // in for all versions. - wxRadioButton* dummyButton = - safenew wxRadioButton(this, wxID_ANY, _("hidden"), - wxDefaultPosition, wxDefaultSize, - wxRB_GROUP); - dummyButton->SetForegroundColour( clrText ); - dummyButton->Disable(); - dummyButton->Hide(); -#endif - mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); - } + AddTitle( _("Snap-To"), mainSizer ); + // Not enough room to say 'Selection Options". There is a tooltip instead. + AddTitle( wxT(""), mainSizer ); + mStartTitle = AddTitle( _("Start"), mainSizer ); + mCenterTitle = AddTitle( _("Center"), mainSizer ); + mLengthTitle = AddTitle( _("Length"), mainSizer ); + mEndTitle = AddTitle( _("End"), mainSizer ); mainSizer->Add(5, 1); - - wxStaticText * pAudioPos = safenew wxStaticText(this, -1, _("Audio Position:")); - pAudioPos->SetForegroundColour( clrText ); - mainSizer->Add(pAudioPos, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); + AddTitle( _("Audio Position"), mainSizer ); // // Middle row (mostly time controls) @@ -306,33 +347,34 @@ void SelectionBar::Populate() NULL, this); - mLeftTime = safenew NumericTextCtrl( - NumericConverter::TIME, this, OnLeftTimeID, formatName, 0.0, mRate); - mLeftTime->SetName(_("Selection Start:")); - mLeftTime->SetForegroundColour( clrText ); - mLeftTime->EnableMenu(); - mainSizer->Add(mLeftTime, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton]; + pBtn = ToolBar::MakeButton(this, + bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, + bmpOptions, bmpOptions, bmpOptionsDisabled, + SelTBMenuID, + wxDefaultPosition, + false, + theTheme.ImageSize( bmpRecoloredUpSmall )); - mRightTime = safenew NumericTextCtrl( - NumericConverter::TIME, this, OnRightTimeID, formatName, 0.0, mRate); - mRightTime->SetName(wxString(_("Selection ")) + (showSelectionLength ? - _("Length") : - _("End"))); - mRightTime->SetForegroundColour( clrText ); - mRightTime->EnableMenu(); - mainSizer->Add(mRightTime, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + pBtn->SetLabel("Selection options"); + pBtn->SetToolTip("Selection options"); + mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + + mStartTime = AddTime(_("Start"), OnStartTimeID, mainSizer ); + mCenterTime = AddTime(_("Center"), OnCenterTimeID, mainSizer ); + mLengthTime = AddTime(_("Length"), OnLengthTimeID, mainSizer ); + mEndTime = AddTime(_("End"), OnEndTimeID, mainSizer ); mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition, wxSize(1, toolbarSingle), wxLI_VERTICAL), 0, wxRIGHT, 5); - mAudioTime = safenew NumericTextCtrl( - NumericConverter::TIME, this, wxID_ANY, formatName, 0.0, mRate); - mAudioTime->SetName(_("Audio Position:")); - mAudioTime->SetForegroundColour( clrText ); - mAudioTime->EnableMenu(); - mainSizer->Add(mAudioTime, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); + mAudioTime = AddTime(_("Audio Position"), OnAudioTimeID, mainSizer ); + + // This shows/hides controls. + // Do this before layout so that we are sized right. + SetSelectionMode(mSelectionMode); mainSizer->Layout(); @@ -348,7 +390,7 @@ void SelectionBar::UpdatePrefs() mRate = (double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), AudioIO::GetOptimalSupportedSampleRate()); wxCommandEvent e; - e.SetInt(mLeftTime->GetFormatIndex()); + e.SetInt(mStartTime->GetFormatIndex()); OnUpdate(e); // Set label to pull in language change @@ -383,121 +425,117 @@ void SelectionBar::OnSize(wxSizeEvent &evt) evt.Skip(); } -void SelectionBar::ModifySelection(bool done) +// When a control value is changed, this function is called. +// It determines the values for the other controls. +void SelectionBar::ModifySelection(int newDriver, bool done) { - double left = mLeftTime->GetValue(); - double right = mRightTime->GetValue(); + // If the user moved to a different control, then update which + // two controls drive the others. + if( newDriver != mDrive2 ) + SetDrivers( mDrive2, newDriver); - // Four combinations: + // Only update a value if user typed something in. + // The reason is the controls may be less accurate than + // the values. + if( newDriver == OnStartTimeID ) + mStart = mStartTime->GetValue(); + if( newDriver == OnEndTimeID ) + mEnd = mEndTime->GetValue(); + if( newDriver == OnLengthTimeID ) + mLength = mLengthTime->GetValue(); + if( newDriver == OnCenterTimeID ) + mCenter = mCenterTime->GetValue(); - const int kStart = 0; - const int kCenter = 1; - const int kEnd = 0; - const int kLength = 2; - - int option = (mSelStartButton->GetValue()? kStart:kCenter) + (mSelEndButton->GetValue()? kEnd:kLength); - - switch( option ){ - case kStart+kEnd: - if( right < left ) - right = left; - mStart = wxMin( left, right ); - mEnd = wxMax( left, right); + int i = mDrive1 + 4 * mDrive2; + switch(i){ + case OnStartTimeID + 4 * OnEndTimeID: + if( mEnd < mStart ) + mEnd = mStart; + case OnStartTimeID * 4 + OnEndTimeID: + if( mStart > mEnd ) + mStart = mEnd; + mLength = mEnd - mStart; + mCenter = (mStart+mEnd)/2.0; break; - case kCenter+kEnd: - if( right < left ) - right = left; - mStart = left - fabs( right-left ); - mEnd = left + fabs( right-left); + case OnStartTimeID + 4 * OnLengthTimeID: + case OnStartTimeID * 4 + OnLengthTimeID: + if( mLength < 0 ) + mLength = 0; + mEnd = mStart+mLength; + mCenter = (mStart+mEnd)/2.0; break; - case kStart+kLength: - if( right < 0 ) - right = 0; - mStart = wxMin( left, left+right ); - mEnd = wxMax( left, left+right); + case OnStartTimeID + 4 * OnCenterTimeID: + if( mCenter < mStart ) + mCenter = mStart; + case OnStartTimeID * 4 + OnCenterTimeID: + if( mStart > mCenter ) + mStart = mCenter; + mEnd = mCenter * 2 - mStart; + mLength = mStart - mEnd; break; - case kCenter+kLength: - if( right < 0 ) - right = 0; - mStart = left - fabs( right)/2.0; - mEnd = left + fabs( right)/2.0; + case OnEndTimeID + 4 * OnLengthTimeID: + case OnEndTimeID * 4 + OnLengthTimeID: + if( mLength < 0 ) + mLength = 0; + mStart = mEnd - mLength; + mCenter = (mStart+mEnd)/2.0; break; + case OnEndTimeID + 4 * OnCenterTimeID: + if( mCenter > mEnd ) + mCenter = mEnd; + case OnEndTimeID * 4 + OnCenterTimeID: + if( mEnd < mCenter ) + mEnd = mCenter; + mStart = mCenter * 2.0 - mEnd; + mLength = mEnd - mStart; + break; + case OnLengthTimeID + 4 * OnCenterTimeID: + case OnLengthTimeID * 4 + OnCenterTimeID: + if( mLength < 0 ) + mLength = 0; + mStart = mCenter - mLength/2.0; + mEnd = mCenter + mLength/2.0; + break; + default: + // The above should cover all legal combinations of two distinct controls. + wxFAIL_MSG( "Illegal sequence of selection changes"); } + + // Places the start-end mrkers on the track panel. mListener->AS_ModifySelection(mStart, mEnd, done); } -void SelectionBar::OnLeftTime(wxCommandEvent & event) +void SelectionBar::OnChangedTime(wxCommandEvent & event) { - ModifySelection(event.GetInt() != 0); -} - -void SelectionBar::OnRightTime(wxCommandEvent & event) -{ - ModifySelection(event.GetInt() != 0); -} - -void SelectionBar::OnStartRadio(wxCommandEvent & WXUNUSED(event)) -{ - gPrefs->Write(wxT("/ShowSelectionStart"), true); - gPrefs->Flush(); - mLeftTime->SetName(wxString(_("Selection Start"))); - - ValuesToControls(); -} -void SelectionBar::OnCenterRadio(wxCommandEvent & WXUNUSED(event)) -{ - gPrefs->Write(wxT("/ShowSelectionStart"), false); - gPrefs->Flush(); - mLeftTime->SetName(wxString(_("Selection Center"))); - - ValuesToControls(); -} - - -void SelectionBar::OnLengthRadio(wxCommandEvent & WXUNUSED(event)) -{ - gPrefs->Write(wxT("/ShowSelectionLength"), true); - gPrefs->Flush(); - mRightTime->SetName(wxString(_("Selection Length"))); - - ValuesToControls(); -} - -void SelectionBar::OnEndRadio(wxCommandEvent & WXUNUSED(event)) -{ - gPrefs->Write(wxT("/ShowSelectionLength"), false); - gPrefs->Flush(); - mRightTime->SetName(wxString(_("Selection End"))); - - ValuesToControls(); + ModifySelection(event.GetId(), event.GetInt() != 0); } +// Called when one of the format drop downs is changed. void SelectionBar::OnUpdate(wxCommandEvent &evt) { int index = evt.GetInt(); wxWindow *w = FindFocus(); - bool leftFocus = (w == mLeftTime); - bool rightFocus = (w == mRightTime); - bool audioFocus = (w == mAudioTime); + NumericTextCtrl ** Ctrls[5] = { &mStartTime, &mEndTime, &mLengthTime, &mCenterTime, &mAudioTime }; + int i; + int iFocus = -1; + for(i=0;i<5;i++) + if( w == *Ctrls[i] ) + iFocus = i; evt.Skip(false); wxString format; // Save format name before recreating the controls so they resize properly - format = mLeftTime->GetBuiltinName(index); + format = mStartTime->GetBuiltinName(index); mListener->AS_SetSelectionFormat(format); RegenerateTooltips(); // ToolBar::ReCreateButtons() will get rid of our sizers and controls // so reset pointers first. - mLeftTime = - mRightTime = - mAudioTime = NULL; - - mSelStartButton = NULL; - mSelEndButton = NULL; + for( i=0;i<5;i++) + *Ctrls[i]=NULL; mRateBox = NULL; mRateText = NULL; @@ -506,98 +544,100 @@ void SelectionBar::OnUpdate(wxCommandEvent &evt) ValuesToControls(); - format = mLeftTime->GetBuiltinFormat(index); - mLeftTime->SetFormatString(format); - mRightTime->SetFormatString(format); - mAudioTime->SetFormatString(format); - - if (leftFocus) { - mLeftTime->SetFocus(); - } - else if (rightFocus) { - mRightTime->SetFocus(); - } - else if (audioFocus) { - mAudioTime->SetFocus(); - } + format = mStartTime->GetBuiltinFormat(index); + for( i=0;i<5;i++) + (*Ctrls[i])->SetFormatString( format ); + if( iFocus >=0 ) + (*Ctrls[iFocus])->SetFocus(); Updated(); } +// The two drivers are the numbers of the two controls which drive the other ones. +// The user gets to see which controls are drivers and which driven. +void SelectionBar::SetDrivers( int driver1, int driver2 ) +{ + mDrive1 = driver1; + mDrive2 = driver2; + + wxStaticText ** Titles[4] = { &mStartTitle, &mCenterTitle, &mLengthTitle, &mEndTitle}; + NumericTextCtrl ** Ctrls[4] = { &mStartTime, &mCenterTime, &mLengthTime, &mEndTime}; + wxString Text[4] = { _("Start"), _("Center"), _("Length"), _("End") }; + + for(int i=0;i<4;i++){ + int id = i + OnStartTimeID; + if( (id!=mDrive1) && (id!=mDrive2 ) ) + // i18n-hint: This is an indicator that a parameter is set (driven) from other parameters. + Text[i] += _(" - driven"); + if( *Titles[i] ){ + (*Titles[i])->SetLabelText( Text[i] ); + } + if( *Ctrls[i] ){ + (*Ctrls[i])->SetName( Text[i] ); + } + } +} + + +void SelectionBar::SetSelectionMode(int mode) +{ + mSelectionMode = mode; + + // First decide which two controls drive the others... + // For example the last option is with all controls shown, and in that mode we + // initially have start and end driving. + int Drive2[] = { OnStartTimeID, OnStartTimeID, OnLengthTimeID, OnCenterTimeID, + OnStartTimeID, OnStartTimeID, OnStartTimeID, OnStartTimeID}; + int Drive1[] = { OnEndTimeID, OnLengthTimeID, OnEndTimeID, OnLengthTimeID, + OnEndTimeID, OnLengthTimeID, OnEndTimeID, OnEndTimeID}; + + SetDrivers( Drive1[mode], Drive2[mode] ); + + // Then show/hide the relevant controls. + ShowHideControls( mode ); +} + +// Our mode determines which controls are visible. +void SelectionBar::ShowHideControls(int mode) +{ + // These + int masks[8]= { + 9, 5, 12, 6, // 2 items + 13, 7, 11,// 3 items + 15}; + int mask = masks[mode]; + + NumericTextCtrl ** Ctrls[4] = { &mStartTime, &mCenterTime, &mLengthTime, &mEndTime}; + wxStaticText ** Titles[4] = { &mStartTitle, &mCenterTitle, &mLengthTitle, &mEndTitle}; + for(int i=0;i<4;i++){ + if( *Ctrls[i]) + (*Ctrls[i])->Show( (mask & (1<Show( (mask & (1<GetValue()) - left = mStart; - else - { - // TODO: Doing rounding calcs here, as in the length case, but - // not sure that is needed. - //left = (mStart+mEnd)/2.0; - auto samples = (sampleCount)floor(mEnd * mRate + 0.5); - samples += (sampleCount)floor(mStart * mRate + 0.5); - auto t = samples.as_double() / mRate; - // An odd thing here is that we could allow the center to be at half a sample. - // If center is at a half sample length must be odd. - // If center is at a sample length must be even. - // Similarly for any selection granularity. - // For now, we don't care, and don't do anything to ensure that. - // The user gets the benefit from having the option of center, even if - // it is slightly peculiar in its interactions with selection granularity. - left = t/2.0; - } - - // End or length? - if (mSelEndButton->GetValue()) - right = mEnd; - else - { // Be sure to take into account the sub-sample offset. - // See TimeToLongSamples and LongSamplesToTime but here at the project rate. - auto samples = (sampleCount)floor(mEnd * mRate + 0.5); - samples -= (sampleCount)floor(mStart * mRate + 0.5); - auto t = samples.as_double() / mRate; - right = t; - } - - mLeftTime->SetValue(left); - mRightTime->SetValue(right); - - - mAudioTime->SetValue(mAudio); + NumericTextCtrl ** Ctrls[5] = { &mStartTime, &mEndTime, &mLengthTime, &mCenterTime, &mAudioTime }; + double Values[5] = {mStart, mEnd, mLength, mCenter, mAudio }; + int i; + for(i=0;i<5;i++) + if( *Ctrls[i] ) + (*Ctrls[i])->SetValue( Values[i] ); } void SelectionBar::SetTimes(double start, double end, double audio) { mStart = start; mEnd = end; + mLength = end-start; + mCenter = (end+start)/2.0; mAudio = audio; ValuesToControls(); } -double SelectionBar::GetLeftTime() -{ - return mLeftTime->GetValue(); -} - -double SelectionBar::GetRightTime() -{ - if (mSelEndButton->GetValue()) - return mRightTime->GetValue(); - else { - // What would be shown if we were showing the end time - NumericTextCtrl ttc( - NumericConverter::TIME, this, wxID_ANY, wxT(""), 0.0, mRate); - ttc.SetFormatString(mRightTime->GetFormatString()); - ttc.SetSampleRate(mRate); - ttc.SetValue(mEnd); - return ttc.GetValue(); - } -} - void SelectionBar::SetField(const wxChar *msg, int fieldNum) { if (fieldNum < 0 || fieldNum >= 10) @@ -616,10 +656,10 @@ void SelectionBar::SetSnapTo(int snap) void SelectionBar::SetSelectionFormat(const wxString & format) { - mLeftTime->SetFormatString(mLeftTime->GetBuiltinFormat(format)); + mStartTime->SetFormatString(mStartTime->GetBuiltinFormat(format)); wxCommandEvent e; - e.SetInt(mLeftTime->GetFormatIndex()); + e.SetInt(mStartTime->GetFormatIndex()); OnUpdate(e); } @@ -630,9 +670,11 @@ void SelectionBar::SetRate(double rate) mRate = rate; // update the stored rate mRateBox->SetValue(wxString::Format(wxT("%d"), (int)rate)); // update the TimeTextCtrls if they exist - if (mLeftTime) mLeftTime->SetSampleRate(rate); - if (mRightTime) mRightTime->SetSampleRate(rate); - if (mAudioTime) mAudioTime->SetSampleRate(rate); + NumericTextCtrl ** Ctrls[5] = { &mStartTime, &mEndTime, &mLengthTime, &mCenterTime, &mAudioTime }; + int i; + for(i=0;i<5;i++) + if( *Ctrls[i] ) + (*Ctrls[i])->SetSampleRate( rate ); } } @@ -641,9 +683,11 @@ void SelectionBar::OnRate(wxCommandEvent & WXUNUSED(event)) if (mRateBox->GetValue().ToDouble(&mRate) && // is a numeric value (mRate != 0.0)) { - if (mLeftTime) mLeftTime->SetSampleRate(mRate); - if (mRightTime) mRightTime->SetSampleRate(mRate); - if (mAudioTime) mAudioTime->SetSampleRate(mRate); + NumericTextCtrl ** Ctrls[5] = { &mStartTime, &mEndTime, &mLengthTime, &mCenterTime, &mAudioTime }; + int i; + for(i=0;i<5;i++) + if( *Ctrls[i] ) + (*Ctrls[i])->SetSampleRate( mRate ); if (mListener) mListener->AS_SetRate(mRate); } } @@ -668,7 +712,6 @@ void SelectionBar::OnFocus(wxFocusEvent &event) } Refresh(false); - event.Skip(); } @@ -702,13 +745,9 @@ void SelectionBar::OnCaptureKey(wxCommandEvent &event) } event.Skip(); - - return; } void SelectionBar::OnSnapTo(wxCommandEvent & WXUNUSED(event)) { mListener->AS_SetSnapTo(mSnapTo->GetSelection()); - - return; } diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index 34718e6db..d66590dba 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -27,10 +27,14 @@ class wxSizeEvent; class SelectionBarListener; class NumericTextCtrl; +enum +{ + numSelectionBarButtons = 1, +}; + class SelectionBar final : public ToolBar { public: - SelectionBar(); virtual ~SelectionBar(); @@ -42,60 +46,69 @@ class SelectionBar final : public ToolBar { void UpdatePrefs() override; void SetTimes(double start, double end, double audio); - double GetLeftTime(); - double GetRightTime(); void SetField(const wxChar *msg, int fieldNum); void SetSnapTo(int); void SetSelectionFormat(const wxString & format); void SetRate(double rate); void SetListener(SelectionBarListener *l); void RegenerateTooltips() override; + void OnButton(wxCommandEvent & event); private: wxRadioButton * AddRadioButton( const wxString & Name, int id, std::unique_ptr& pSizer, long style); + wxStaticText * AddTitle( const wxString & Title, + wxSizer * pSizer ); + NumericTextCtrl * AddTime( const wxString Name, int id, wxSizer * pSizer ); + void SetSelectionMode(int mode); + void ShowHideControls(int mode); + void SetDrivers( int driver1, int driver2 ); void ValuesToControls(); void OnUpdate(wxCommandEvent &evt); - void OnLeftTime(wxCommandEvent &evt); - void OnRightTime(wxCommandEvent &evt); - - void OnStartRadio(wxCommandEvent &evt); - void OnCenterRadio(wxCommandEvent &evt); - void OnEndRadio(wxCommandEvent &evt); - void OnLengthRadio(wxCommandEvent &evt); - + void OnChangedTime(wxCommandEvent &evt); void OnRate(wxCommandEvent & event); - void OnSnapTo(wxCommandEvent & event); - void OnFocus(wxFocusEvent &event); void OnCaptureKey(wxCommandEvent &event); - void OnSize(wxSizeEvent &evt); - void ModifySelection(bool done = false); - + void ModifySelection(int newDriver, bool done = false); void UpdateRates(); SelectionBarListener * mListener; double mRate; - double mStart, mEnd, mAudio; + double mStart, mEnd, mLength, mCenter, mAudio; wxString mField[10]; + // Only used if we use radio buttons. bool mbUseNativeRadioButton; - NumericTextCtrl *mLeftTime; - NumericTextCtrl *mRightTime; - wxRadioButton *mSelStartButton; // for start/center - wxRadioButton *mSelEndButton; // for end/length + // These two numbers say which two controls + // drive the other two. + int mDrive1; + int mDrive2; + + int mSelectionMode; + + NumericTextCtrl *mStartTime; + NumericTextCtrl *mCenterTime; + NumericTextCtrl *mLengthTime; + NumericTextCtrl *mEndTime; NumericTextCtrl *mAudioTime; + wxStaticText * mStartTitle; + wxStaticText * mCenterTitle; + wxStaticText * mLengthTitle; + wxStaticText * mEndTitle; + wxComboBox *mRateBox; wxChoice *mSnapTo; wxWindow *mRateText; + AButton * mButtons[numSelectionBarButtons]; + public: DECLARE_CLASS(SelectionBar) From 6a9e0ffe28e18f23fcca755e1f2b5572e4a8c786 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 22 May 2017 14:10:56 +0100 Subject: [PATCH 63/85] Fix Travis Build Missing wx includes. --- src/toolbars/SelectionBar.cpp | 2 ++ src/toolbars/SelectionBar.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index b1695d46c..f40450ee4 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -40,9 +40,11 @@ with changes in the SelectionBar. #include #include #include +#include #endif #include + #include "SelectionBarListener.h" #include "SelectionBar.h" diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index d66590dba..b4bed3855 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -23,6 +23,7 @@ class wxCommandEvent; class wxDC; class wxRadioButton; class wxSizeEvent; +class wxStaticText; class SelectionBarListener; class NumericTextCtrl; From 2fcf7159728f3d67719c915f5a588a2bab13566c Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Mon, 22 May 2017 15:11:39 +0100 Subject: [PATCH 64/85] Update Help link for Spectrogram Settings --- src/prefs/PrefsDialog.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index 77368c576..1db8f4373 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -289,7 +289,16 @@ PrefsDialog::PrefsDialog const PrefsNode &node = factories[0]; PrefsPanelFactory &factory = *node.pFactory; mUniquePage = factory.Create(this); - S.AddWindow(mUniquePage, wxEXPAND); + wxWindow * uniquePageWindow = S.AddWindow(mUniquePage, wxEXPAND); + // We're not in the wxTreebook, so add the accelerator here + wxAcceleratorEntry entries[1]; +#if defined(__WXMAC__) + // Is there a standard shortcut on Mac? +#else + entries[0].Set(wxACCEL_NORMAL, (int) WXK_F1, wxID_HELP); +#endif + wxAcceleratorTable accel(1, entries); + uniquePageWindow->SetAcceleratorTable(accel); } } S.EndVerticalLay(); @@ -413,11 +422,10 @@ void PrefsDialog::OnHelp(wxCommandEvent & WXUNUSED(event)) // Currently (May2017) Spectrum Settings is the only preferences // we ever display in a dialog on its own without others. // We do so when it is configuring spectrums for a track. - // It is called 'settings' rather than 'preferences' in this context. // Because this happens, we want to visit a different help page. - // So we modify the page name in the case of a page on its own. - if( !mCategories) - page.Replace( "Spectrograms_Preferences", "Spectrogram_View#spectrogram_settings" ); + // So we change the page name in the case of a page on its own. + if( !mCategories) + page.Replace( "Spectrograms_Preferences", "Spectrogram_Settings" ); HelpSystem::ShowHelpDialog(this, page, true); } From 7a6dda19e49d6b018ca127cadbb871fce59a4c40 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 22 May 2017 15:50:39 +0100 Subject: [PATCH 65/85] Add title-clicking to SelectionToolbar This is a convenience for sighted users. If they are showing start, center, length, end, they can click on the title 'Center' to preserve it, and then modify length. Similarly for the other controls. This makes working with more than two controls much more intuitive. --- src/toolbars/SelectionBar.cpp | 205 +++++++++++++++++++--------------- src/toolbars/SelectionBar.h | 5 + 2 files changed, 120 insertions(+), 90 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index f40450ee4..737182e14 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -67,27 +67,34 @@ const static wxChar *numbers[] = enum { SelectionBarFirstID = 2700, - OnRateID, - OnSnapToID, + RateID, + SnapToID, //OnMenuId, - OnStartTimeID, - OnCenterTimeID, - OnLengthTimeID, - OnEndTimeID, - OnAudioTimeID, + + StartTitleID, + CenterTitleID, + LengthTitleID, + EndTitleID, + AudioTitleID, + + StartTimeID, + CenterTimeID, + LengthTimeID, + EndTimeID, + AudioTimeID, SelTBFirstButton, SelTBMenuID = SelTBFirstButton, }; BEGIN_EVENT_TABLE(SelectionBar, ToolBar) EVT_SIZE(SelectionBar::OnSize) - EVT_TEXT(OnStartTimeID, SelectionBar::OnChangedTime) - EVT_TEXT(OnEndTimeID, SelectionBar::OnChangedTime) - EVT_TEXT(OnLengthTimeID, SelectionBar::OnChangedTime) - EVT_TEXT(OnCenterTimeID, SelectionBar::OnChangedTime) - EVT_CHOICE(OnSnapToID, SelectionBar::OnSnapTo) - EVT_COMBOBOX(OnRateID, SelectionBar::OnRate) - EVT_TEXT(OnRateID, SelectionBar::OnRate) + EVT_TEXT(StartTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(EndTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(LengthTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(CenterTimeID, SelectionBar::OnChangedTime) + EVT_CHOICE(SnapToID, SelectionBar::OnSnapTo) + EVT_COMBOBOX(RateID, SelectionBar::OnRate) + EVT_TEXT(RateID, SelectionBar::OnRate) EVT_COMMAND_RANGE( SelTBMenuID, SelTBMenuID, @@ -105,7 +112,7 @@ SelectionBar::SelectionBar() mStartTime(NULL), mEndTime(NULL), mLengthTime(NULL), mCenterTime(NULL), mAudioTime(NULL), mStartTitle(NULL), mCenterTitle(NULL), mLengthTitle(NULL), mEndTitle(NULL), - mDrive1( OnStartTimeID), mDrive2( OnEndTimeID ), + mDrive1( StartTimeID), mDrive2( EndTimeID ), mSelectionMode(0) { // Make sure we have a valid rate as the NumericTextCtrl()s @@ -130,51 +137,6 @@ void SelectionBar::Create(wxWindow * parent) ToolBar::Create(parent); } -// There currently is only one clickable AButton -// so we just do what it needs. -void SelectionBar::OnButton(wxCommandEvent & event) -{ - AudacityProject *p = GetActiveProject(); - if (!p) return; - - AButton * pBtn = mButtons[ SelTBMenuID-SelTBFirstButton];// use event.GetId(); - - auto cleanup = finally( [&] { pBtn->InteractionOver();} - ); - wxLogDebug( "Clicked"); - SetFocus(); - - wxMenu Menu; - Menu.AppendRadioItem( 0, _("Start - End") ); - Menu.AppendRadioItem( 1, _("Start - Length") ); - Menu.AppendRadioItem( 2, _("Length - End") ); - Menu.AppendRadioItem( 3, _("Center - Length") ); - Menu.AppendRadioItem( 4, _("Start - Length - End") ); - Menu.AppendRadioItem( 5, _("Start - Center - Length") ); - Menu.AppendRadioItem( 6, _("Start - Center - End") ); - Menu.AppendRadioItem( 7, _("Start - Center - Length - End") ); - Menu.Check( mSelectionMode, true ); - // Pop it up where the mouse is. - pBtn->PopupMenu(&Menu);//, wxPoint(0, 0)); - - // only one radio button should be checked. - for( int i=0;i<8;i++) - if( Menu.IsChecked(i)) - SetSelectionMode( i ); - - // We just changed the mode. Remember it. - gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); - gPrefs->Flush(); - - wxSize sz = GetMinSize(); - sz.SetWidth( 10 ); - SetMinSize( sz ); - Fit(); - Layout(); - Updated(); -} - - // Add Radio Button function is not used anymore. // But maybe we will need it again in the future. // @@ -281,11 +243,16 @@ void SelectionBar::Populate() mainSizer->Add(5, 1); AddTitle( _("Audio Position"), mainSizer ); + mStartTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnStartTitleClicked,this ); + mCenterTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnCenterTitleClicked,this ); + mLengthTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnLengthTitleClicked,this ); + mEndTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnEndTitleClicked,this ); + // // Middle row (mostly time controls) // - mRateBox = safenew wxComboBox(this, OnRateID, + mRateBox = safenew wxComboBox(this, RateID, wxT(""), wxDefaultPosition, wxSize(80, -1)); mRateBox->SetName(_("Project Rate (Hz):")); @@ -331,7 +298,7 @@ void SelectionBar::Populate() wxLI_VERTICAL), 0, wxRIGHT, 5); - mSnapTo = safenew wxChoice(this, OnSnapToID, + mSnapTo = safenew wxChoice(this, SnapToID, wxDefaultPosition, wxDefaultSize, SnapManager::GetSnapLabels()); mainSizer->Add(mSnapTo, @@ -362,17 +329,17 @@ void SelectionBar::Populate() pBtn->SetToolTip("Selection options"); mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - mStartTime = AddTime(_("Start"), OnStartTimeID, mainSizer ); - mCenterTime = AddTime(_("Center"), OnCenterTimeID, mainSizer ); - mLengthTime = AddTime(_("Length"), OnLengthTimeID, mainSizer ); - mEndTime = AddTime(_("End"), OnEndTimeID, mainSizer ); + mStartTime = AddTime(_("Start"), StartTimeID, mainSizer ); + mCenterTime = AddTime(_("Center"), CenterTimeID, mainSizer ); + mLengthTime = AddTime(_("Length"), LengthTimeID, mainSizer ); + mEndTime = AddTime(_("End"), EndTimeID, mainSizer ); mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition, wxSize(1, toolbarSingle), wxLI_VERTICAL), 0, wxRIGHT, 5); - mAudioTime = AddTime(_("Audio Position"), OnAudioTimeID, mainSizer ); + mAudioTime = AddTime(_("Audio Position"), AudioTimeID, mainSizer ); // This shows/hides controls. // Do this before layout so that we are sized right. @@ -439,60 +406,60 @@ void SelectionBar::ModifySelection(int newDriver, bool done) // Only update a value if user typed something in. // The reason is the controls may be less accurate than // the values. - if( newDriver == OnStartTimeID ) + if( newDriver == StartTimeID ) mStart = mStartTime->GetValue(); - if( newDriver == OnEndTimeID ) + if( newDriver == EndTimeID ) mEnd = mEndTime->GetValue(); - if( newDriver == OnLengthTimeID ) + if( newDriver == LengthTimeID ) mLength = mLengthTime->GetValue(); - if( newDriver == OnCenterTimeID ) + if( newDriver == CenterTimeID ) mCenter = mCenterTime->GetValue(); int i = mDrive1 + 4 * mDrive2; switch(i){ - case OnStartTimeID + 4 * OnEndTimeID: + case StartTimeID + 4 * EndTimeID: if( mEnd < mStart ) mEnd = mStart; - case OnStartTimeID * 4 + OnEndTimeID: + case StartTimeID * 4 + EndTimeID: if( mStart > mEnd ) mStart = mEnd; mLength = mEnd - mStart; mCenter = (mStart+mEnd)/2.0; break; - case OnStartTimeID + 4 * OnLengthTimeID: - case OnStartTimeID * 4 + OnLengthTimeID: + case StartTimeID + 4 * LengthTimeID: + case StartTimeID * 4 + LengthTimeID: if( mLength < 0 ) mLength = 0; mEnd = mStart+mLength; mCenter = (mStart+mEnd)/2.0; break; - case OnStartTimeID + 4 * OnCenterTimeID: + case StartTimeID + 4 * CenterTimeID: if( mCenter < mStart ) mCenter = mStart; - case OnStartTimeID * 4 + OnCenterTimeID: + case StartTimeID * 4 + CenterTimeID: if( mStart > mCenter ) mStart = mCenter; mEnd = mCenter * 2 - mStart; mLength = mStart - mEnd; break; - case OnEndTimeID + 4 * OnLengthTimeID: - case OnEndTimeID * 4 + OnLengthTimeID: + case EndTimeID + 4 * LengthTimeID: + case EndTimeID * 4 + LengthTimeID: if( mLength < 0 ) mLength = 0; mStart = mEnd - mLength; mCenter = (mStart+mEnd)/2.0; break; - case OnEndTimeID + 4 * OnCenterTimeID: + case EndTimeID + 4 * CenterTimeID: if( mCenter > mEnd ) mCenter = mEnd; - case OnEndTimeID * 4 + OnCenterTimeID: + case EndTimeID * 4 + CenterTimeID: if( mEnd < mCenter ) mEnd = mCenter; mStart = mCenter * 2.0 - mEnd; mLength = mEnd - mStart; break; - case OnLengthTimeID + 4 * OnCenterTimeID: - case OnLengthTimeID * 4 + OnCenterTimeID: + case LengthTimeID + 4 * CenterTimeID: + case LengthTimeID * 4 + CenterTimeID: if( mLength < 0 ) mLength = 0; mStart = mCenter - mLength/2.0; @@ -512,6 +479,21 @@ void SelectionBar::OnChangedTime(wxCommandEvent & event) ModifySelection(event.GetId(), event.GetInt() != 0); } + +void SelectionBar::OnTitleClicked(int newDriver) +{ + // Ensure newDriver is the most recent driver. + if( newDriver != mDrive2 ) + SetDrivers( mDrive2, newDriver); +} + +// These functions give the IDs of the associated control, NOT the ID of the title. +void SelectionBar::OnStartTitleClicked(wxMouseEvent & event){ OnTitleClicked( StartTimeID );}; +void SelectionBar::OnCenterTitleClicked(wxMouseEvent & event){ OnTitleClicked( CenterTimeID );}; +void SelectionBar::OnLengthTitleClicked(wxMouseEvent & event){ OnTitleClicked( LengthTimeID );}; +void SelectionBar::OnEndTitleClicked(wxMouseEvent & event){ OnTitleClicked( EndTimeID );}; + + // Called when one of the format drop downs is changed. void SelectionBar::OnUpdate(wxCommandEvent &evt) { @@ -567,7 +549,7 @@ void SelectionBar::SetDrivers( int driver1, int driver2 ) wxString Text[4] = { _("Start"), _("Center"), _("Length"), _("End") }; for(int i=0;i<4;i++){ - int id = i + OnStartTimeID; + int id = i + StartTimeID; if( (id!=mDrive1) && (id!=mDrive2 ) ) // i18n-hint: This is an indicator that a parameter is set (driven) from other parameters. Text[i] += _(" - driven"); @@ -581,6 +563,49 @@ void SelectionBar::SetDrivers( int driver1, int driver2 ) } +// There currently is only one clickable AButton +// so we just do what it needs. +void SelectionBar::OnButton(wxCommandEvent & event) +{ + AudacityProject *p = GetActiveProject(); + if (!p) return; + + AButton * pBtn = mButtons[ SelTBMenuID-SelTBFirstButton];// use event.GetId(); + + auto cleanup = finally( [&] { pBtn->InteractionOver();} + ); + SetFocus(); + + wxMenu Menu; + Menu.AppendRadioItem( 0, _("Start - End") ); + Menu.AppendRadioItem( 1, _("Start - Length") ); + Menu.AppendRadioItem( 2, _("Length - End") ); + Menu.AppendRadioItem( 3, _("Center - Length") ); + Menu.AppendRadioItem( 4, _("Start - Length - End") ); + Menu.AppendRadioItem( 5, _("Start - Center - Length") ); + Menu.AppendRadioItem( 6, _("Start - Center - End") ); + Menu.AppendRadioItem( 7, _("Start - Center - Length - End") ); + Menu.Check( mSelectionMode, true ); + // Pop it up where the mouse is. + pBtn->PopupMenu(&Menu);//, wxPoint(0, 0)); + + // only one radio button should be checked. + for( int i=0;i<8;i++) + if( Menu.IsChecked(i)) + SetSelectionMode( i ); + + // We just changed the mode. Remember it. + gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); + gPrefs->Flush(); + + wxSize sz = GetMinSize(); + sz.SetWidth( 10 ); + SetMinSize( sz ); + Fit(); + Layout(); + Updated(); +} + void SelectionBar::SetSelectionMode(int mode) { mSelectionMode = mode; @@ -588,10 +613,10 @@ void SelectionBar::SetSelectionMode(int mode) // First decide which two controls drive the others... // For example the last option is with all controls shown, and in that mode we // initially have start and end driving. - int Drive2[] = { OnStartTimeID, OnStartTimeID, OnLengthTimeID, OnCenterTimeID, - OnStartTimeID, OnStartTimeID, OnStartTimeID, OnStartTimeID}; - int Drive1[] = { OnEndTimeID, OnLengthTimeID, OnEndTimeID, OnLengthTimeID, - OnEndTimeID, OnLengthTimeID, OnEndTimeID, OnEndTimeID}; + int Drive2[] = { StartTimeID, StartTimeID, LengthTimeID, CenterTimeID, + StartTimeID, StartTimeID, StartTimeID, StartTimeID}; + int Drive1[] = { EndTimeID, LengthTimeID, EndTimeID, LengthTimeID, + EndTimeID, LengthTimeID, EndTimeID, EndTimeID}; SetDrivers( Drive1[mode], Drive2[mode] ); @@ -609,8 +634,8 @@ void SelectionBar::ShowHideControls(int mode) 15}; int mask = masks[mode]; - NumericTextCtrl ** Ctrls[4] = { &mStartTime, &mCenterTime, &mLengthTime, &mEndTime}; - wxStaticText ** Titles[4] = { &mStartTitle, &mCenterTitle, &mLengthTitle, &mEndTitle}; + NumericTextCtrl ** Ctrls[4] = { &mStartTime, &mCenterTime, &mLengthTime, &mEndTime}; + wxStaticText ** Titles[4] = { &mStartTitle, &mCenterTitle, &mLengthTitle, &mEndTitle}; for(int i=0;i<4;i++){ if( *Ctrls[i]) (*Ctrls[i])->Show( (mask & (1< Date: Mon, 22 May 2017 23:01:32 +0100 Subject: [PATCH 66/85] Smarter VoiceOver text for Selection controls. --- src/toolbars/SelectionBar.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 737182e14..689266009 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -550,14 +550,22 @@ void SelectionBar::SetDrivers( int driver1, int driver2 ) for(int i=0;i<4;i++){ int id = i + StartTimeID; - if( (id!=mDrive1) && (id!=mDrive2 ) ) - // i18n-hint: This is an indicator that a parameter is set (driven) from other parameters. - Text[i] += _(" - driven"); + int fixed = (( id == mDrive2 )?mDrive1:mDrive2)-StartTimeID; + + wxString Temp = Text[i]; + // i18n-hint: %s is replaced e.g by 'Length', to indicate that it will be calculated from other parameters. + wxString Format = ( (id!=mDrive1) && (id!=mDrive2 ) ) ? _("%s - driven") : "%s"; + wxString Title= wxString::Format( Format, Temp ); + // i18n-hint: %s1 is replaced e.g by 'Length', %s2 e.g by 'Center'. + wxString VoiceOverText = wxString::Format(_("Selection %s. %s won't change."), Temp, Text[fixed]); + // i18n-hint: %s is replaced e.g by 'Length'. This is a tooltip on a numerical control. + //wxString Tooltip = wxString::Format( _(" With %s fixed. (Use context menu to change format.) "), Text[fixed] ); if( *Titles[i] ){ - (*Titles[i])->SetLabelText( Text[i] ); + (*Titles[i])->SetLabelText( Title ); } if( *Ctrls[i] ){ - (*Ctrls[i])->SetName( Text[i] ); + (*Ctrls[i])->SetName( VoiceOverText ); + //(*Ctrls[i])->SetToolTip( Tooltip ); } } } From 2eb6285ddcbcefcec958cb864de6b662f3ac4c5f Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 11 May 2017 15:44:40 -0400 Subject: [PATCH 67/85] Group some TrackPanel fields into a structure --- src/TrackPanel.cpp | 89 ++++++++++++++++++++++------------------------ src/TrackPanel.h | 21 ++++++----- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index b7ddadc8c..09b30bfea 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -480,10 +480,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, #endif #ifdef USE_MIDI - mStretchMode = stretchCenter; - mStretching = false; - mStretched = false; - mStretchStart = 0; mStretchCursor = MakeCursor( wxCURSOR_BULLSEYE, StretchCursorXpm, 16, 16); mStretchLeftCursor = MakeCursor( wxCURSOR_BULLSEYE, StretchLeftCursorXpm, 16, 16); @@ -2065,7 +2061,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, mSnapLeft = mSnapRight = -1; #ifdef USE_MIDI - mStretching = false; + mStretchState = StretchState{}; bool stretch = HitTestStretch(pTrack, rect, event); #endif @@ -2236,19 +2232,19 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, double minPeriod = 0.05; // minimum beat period double qBeat0, qBeat1; double centerBeat = 0.0f; - mStretchSel0 = nt->NearestBeatTime(mViewInfo->selectedRegion.t0(), &qBeat0); - mStretchSel1 = nt->NearestBeatTime(mViewInfo->selectedRegion.t1(), &qBeat1); + mStretchState.mSel0 = nt->NearestBeatTime(mViewInfo->selectedRegion.t0(), &qBeat0); + mStretchState.mSel1 = nt->NearestBeatTime(mViewInfo->selectedRegion.t1(), &qBeat1); // If there is not (almost) a beat to stretch that is slower // than 20 beats per second, don't stretch if (within(qBeat0, qBeat1, 0.9) || - (mStretchSel1 - mStretchSel0) / (qBeat1 - qBeat0) < minPeriod) return; + (mStretchState.mSel1 - mStretchState.mSel0) / (qBeat1 - qBeat0) < minPeriod) return; if (startNewSelection) { // mouse is not at an edge, but after // quantization, we could be indicating the selection edge mSelStartValid = true; mSelStart = std::max(0.0, mViewInfo->PositionToTime(event.m_x, rect.x)); - mStretchStart = nt->NearestBeatTime(mSelStart, ¢erBeat); + mStretchState.mStart = nt->NearestBeatTime(mSelStart, ¢erBeat); if (within(qBeat0, centerBeat, 0.1)) { mListener->TP_DisplayStatusMessage( _("Click and drag to stretch selected region.")); @@ -2269,28 +2265,28 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, } if (startNewSelection) { - mStretchMode = stretchCenter; - mStretchLeftBeats = qBeat1 - centerBeat; - mStretchRightBeats = centerBeat - qBeat0; + mStretchState.mMode = stretchCenter; + mStretchState.mLeftBeats = qBeat1 - centerBeat; + mStretchState.mRightBeats = centerBeat - qBeat0; } else if (mSelStartValid && mViewInfo->selectedRegion.t1() == mSelStart) { // note that at this point, mSelStart is at the opposite // end of the selection from the cursor. If the cursor is // over sel0, then mSelStart is at sel1. - mStretchMode = stretchLeft; + mStretchState.mMode = stretchLeft; } else { - mStretchMode = stretchRight; + mStretchState.mMode = stretchRight; } - if (mStretchMode == stretchLeft) { - mStretchLeftBeats = 0; - mStretchRightBeats = qBeat1 - qBeat0; - } else if (mStretchMode == stretchRight) { - mStretchLeftBeats = qBeat1 - qBeat0; - mStretchRightBeats = 0; + if (mStretchState.mMode == stretchLeft) { + mStretchState.mLeftBeats = 0; + mStretchState.mRightBeats = qBeat1 - qBeat0; + } else if (mStretchState.mMode == stretchRight) { + mStretchState.mLeftBeats = qBeat1 - qBeat0; + mStretchState.mRightBeats = 0; } - mViewInfo->selectedRegion.setTimes(mStretchSel0, mStretchSel1); - mStretching = true; - mStretched = false; + mViewInfo->selectedRegion.setTimes(mStretchState.mSel0, mStretchState.mSel1); + mStretchState.mStretching = true; + mStretchState.mStretched = false; /* i18n-hint: (noun) The track that is used for MIDI notes which can be dragged to change their duration.*/ @@ -2778,7 +2774,7 @@ void TrackPanel::ResetFreqSelectionPin(double hintFrequency, bool logF) void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, Track *pTrack) { - if (mStretched) { // Undo stretch and redo it with NEW mouse coordinates + if (mStretchState.mStretched) { // Undo stretch and redo it with NEW mouse coordinates // Drag handling was not originally implemented with Undo in mind -- // there are saved pointers to tracks that are not supposed to change. // Undo will change tracks, so convert pTrack, mCapturedTrack to index @@ -2793,9 +2789,10 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, // Undo brings us back to the pre-click state, but we want to // quantize selected region to integer beat boundaries. These // were saved in mStretchSel[12] variables: - mViewInfo->selectedRegion.setTimes(mStretchSel0, mStretchSel1); + mViewInfo->selectedRegion.setTimes + (mStretchState.mSel0, mStretchState.mSel1); - mStretched = false; + mStretchState.mStretched = false; int index = 0; for (Track *t = iter.First(GetTracks()); t; t = iter.Next()) { if (index == pTrackIndex) pTrack = t; @@ -2822,16 +2819,16 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, pNt->NearestBeatTime(mViewInfo->selectedRegion.t1(), &qBeat1); // We could be moving 3 things: left edge, right edge, a point between - switch (mStretchMode) { + switch (mStretchState.mMode) { case stretchLeft: { // make sure target duration is not too short double dur = mViewInfo->selectedRegion.t1() - moveto; - if (dur < mStretchRightBeats * minPeriod) { - dur = mStretchRightBeats * minPeriod; + if (dur < mStretchState.mRightBeats * minPeriod) { + dur = mStretchState.mRightBeats * minPeriod; moveto = mViewInfo->selectedRegion.t1() - dur; } - if (pNt->StretchRegion(mStretchSel0, mStretchSel1, dur)) { - pNt->SetOffset(pNt->GetOffset() + moveto - mStretchSel0); + if (pNt->StretchRegion(mStretchState.mSel0, mStretchState.mSel1, dur)) { + pNt->SetOffset(pNt->GetOffset() + moveto - mStretchState.mSel0); mViewInfo->selectedRegion.setT0(moveto); } break; @@ -2839,11 +2836,11 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, case stretchRight: { // make sure target duration is not too short double dur = moveto - mViewInfo->selectedRegion.t0(); - if (dur < mStretchLeftBeats * minPeriod) { - dur = mStretchLeftBeats * minPeriod; - moveto = mStretchSel0 + dur; + if (dur < mStretchState.mLeftBeats * minPeriod) { + dur = mStretchState.mLeftBeats * minPeriod; + moveto = mStretchState.mSel0 + dur; } - if (pNt->StretchRegion(mStretchSel0, mStretchSel1, dur)) { + if (pNt->StretchRegion(mStretchState.mSel0, mStretchState.mSel1, dur)) { mViewInfo->selectedRegion.setT1(moveto); } break; @@ -2854,16 +2851,16 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, double right_dur = mViewInfo->selectedRegion.t1() - moveto; double centerBeat; pNt->NearestBeatTime(mSelStart, ¢erBeat); - if (left_dur < mStretchLeftBeats * minPeriod) { - left_dur = mStretchLeftBeats * minPeriod; - moveto = mStretchSel0 + left_dur; + if (left_dur < mStretchState.mLeftBeats * minPeriod) { + left_dur = mStretchState.mLeftBeats * minPeriod; + moveto = mStretchState.mSel0 + left_dur; } - if (right_dur < mStretchRightBeats * minPeriod) { - right_dur = mStretchRightBeats * minPeriod; - moveto = mStretchSel1 - right_dur; + if (right_dur < mStretchState.mRightBeats * minPeriod) { + right_dur = mStretchState.mRightBeats * minPeriod; + moveto = mStretchState.mSel1 - right_dur; } - pNt->StretchRegion(mStretchStart, mStretchSel1, right_dur); - pNt->StretchRegion(mStretchSel0, mStretchStart, left_dur); + pNt->StretchRegion(mStretchState.mStart, mStretchState.mSel1, right_dur); + pNt->StretchRegion(mStretchState.mSel0, mStretchState.mStart, left_dur); break; } default: @@ -2872,7 +2869,7 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, } MakeParentPushState(_("Stretch Note Track"), _("Stretch"), UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); - mStretched = true; + mStretchState.mStretched = true; Refresh(false); } #endif @@ -2920,7 +2917,7 @@ void TrackPanel::SelectionHandleDrag(wxMouseEvent & event, Track *clickedTrack) // Abandon this drag if selecting < 5 pixels. if (wxLongLong(SelStart-x).Abs() < minimumSizedSelection #ifdef USE_MIDI // limiting selection size is good, and not starting - && !mStretching // stretch unless mouse moves 5 pixels is good, but + && !mStretchState.mStretching // stretch unless mouse moves 5 pixels is good, but #endif // once stretching starts, it's ok to move even 1 pixel ) return; @@ -2933,7 +2930,7 @@ void TrackPanel::SelectionHandleDrag(wxMouseEvent & event, Track *clickedTrack) SelectRangeOfTracks(sTrack, eTrack); #ifdef USE_MIDI - if (mStretching) { + if (mStretchState.mStretching) { // the following is also in ExtendSelection, called below // probably a good idea to "hoist" the code to before this "if" stmt if (clickedTrack == NULL && mCapturedTrack != NULL) diff --git a/src/TrackPanel.h b/src/TrackPanel.h index d786f03e3..ac798c96f 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -324,15 +324,18 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { stretchCenter, stretchRight }; - StretchEnum mStretchMode; // remembers what to drag - bool mStretching; // true between mouse down and mouse up - bool mStretched; // true after drag has pushed state - double mStretchStart; // time of initial mouse position, quantized - // to the nearest beat - double mStretchSel0; // initial sel0 (left) quantized to nearest beat - double mStretchSel1; // initial sel1 (left) quantized to nearest beat - double mStretchLeftBeats; // how many beats from left to cursor - double mStretchRightBeats; // how many beats from cursor to right + struct StretchState { + StretchEnum mMode { stretchCenter }; // remembers what to drag + bool mStretching {}; // true between mouse down and mouse up + bool mStretched {}; // true after drag has pushed state + double mStart {}; // time of initial mouse position, quantized + // to the nearest beat + double mSel0 {}; // initial sel0 (left) quantized to nearest beat + double mSel1 {}; // initial sel1 (left) quantized to nearest beat + double mLeftBeats {}; // how many beats from left to cursor + double mRightBeats {}; // how many beats from cursor to right + } mStretchState; + virtual bool HitTestStretch(Track *track, const wxRect &rect, const wxMouseEvent & event); virtual void Stretch(int mouseXCoordinate, int trackLeftEdge, Track *pTrack); #endif From 9fb7185ea4f995307efe1f5dda548803b69e7b6f Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 22 May 2017 13:13:21 -0400 Subject: [PATCH 68/85] Rewrite undo handling for Stretch to be more like other drags... ... that is, push a state only at button-up. The undo during each drag increment didn't actually happen, because of a check in OnUndo whether there is a drag in progress! But this is not necessary to fix the excessive number of undo items, because commit 63ae687bafd1123bf4bf7d00070e1dd9f38dc8a2 already did that by other means. It only removes an unusual usage. --- src/TrackPanel.cpp | 71 ++++++++++++++-------------------------------- src/TrackPanel.h | 1 - 2 files changed, 22 insertions(+), 50 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 09b30bfea..0b46995d1 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1837,20 +1837,28 @@ void TrackPanel::HandleSelect(wxMouseEvent & event) SelectionHandleClick(event, t, rect); } else if (event.LeftUp() || event.RightUp()) { mSnapManager.reset(); - // Do not draw yellow lines - if (mSnapLeft != -1 || mSnapRight != -1) { - mSnapLeft = mSnapRight = -1; + if ( mStretchState.mStretching ) { + MakeParentPushState(_("Stretch Note Track"), _("Stretch"), + UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); Refresh(false); + SetCapturedTrack( NULL ); } + else { + // Do not draw yellow lines + if (mSnapLeft != -1 || mSnapRight != -1) { + mSnapLeft = mSnapRight = -1; + Refresh(false); + } - SetCapturedTrack( NULL ); - //Send the NEW selection state to the undo/redo stack: - MakeParentModifyState(false); + SetCapturedTrack( NULL ); + //Send the NEW selection state to the undo/redo stack: + MakeParentModifyState(false); #ifdef EXPERIMENTAL_SPECTRAL_EDITING - // This stops center snapping with mouse movement - mFreqSelMode = FREQ_SEL_INVALID; + // This stops center snapping with mouse movement + mFreqSelMode = FREQ_SEL_INVALID; #endif + } } else if (event.LeftDClick() && !event.ShiftDown()) { if (!mCapturedTrack) { @@ -2284,18 +2292,13 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, mStretchState.mLeftBeats = qBeat1 - qBeat0; mStretchState.mRightBeats = 0; } - mViewInfo->selectedRegion.setTimes(mStretchState.mSel0, mStretchState.mSel1); - mStretchState.mStretching = true; - mStretchState.mStretched = false; - /* i18n-hint: (noun) The track that is used for MIDI notes which can be - dragged to change their duration.*/ - MakeParentPushState(_("Stretch Note Track"), - /* i18n-hint: In the history list, indicates a MIDI note has - been dragged to change its duration (stretch it). Using either past - or present tense is fine here. If unsure, go for whichever is - shorter.*/ - _("Stretch")); + // Do this before we change the selection + MakeParentModifyState( false ); + + mViewInfo->selectedRegion.setTimes + (mStretchState.mSel0, mStretchState.mSel1); + mStretchState.mStretching = true; // Full refresh since the label area may need to indicate // newly selected tracks. (I'm really not sure if the label area @@ -2774,33 +2777,6 @@ void TrackPanel::ResetFreqSelectionPin(double hintFrequency, bool logF) void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, Track *pTrack) { - if (mStretchState.mStretched) { // Undo stretch and redo it with NEW mouse coordinates - // Drag handling was not originally implemented with Undo in mind -- - // there are saved pointers to tracks that are not supposed to change. - // Undo will change tracks, so convert pTrack, mCapturedTrack to index - // values, then look them up after the Undo - TrackListIterator iter(GetTracks()); - int pTrackIndex = pTrack->GetIndex(); - int capturedTrackIndex = - (mCapturedTrack ? mCapturedTrack->GetIndex() : 0); - - GetProject()->OnUndo(); - - // Undo brings us back to the pre-click state, but we want to - // quantize selected region to integer beat boundaries. These - // were saved in mStretchSel[12] variables: - mViewInfo->selectedRegion.setTimes - (mStretchState.mSel0, mStretchState.mSel1); - - mStretchState.mStretched = false; - int index = 0; - for (Track *t = iter.First(GetTracks()); t; t = iter.Next()) { - if (index == pTrackIndex) pTrack = t; - if (mCapturedTrack && index == capturedTrackIndex) mCapturedTrack = t; - index++; - } - } - if (pTrack == NULL && mCapturedTrack != NULL) pTrack = mCapturedTrack; @@ -2867,9 +2843,6 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, wxASSERT(false); break; } - MakeParentPushState(_("Stretch Note Track"), _("Stretch"), - UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); - mStretchState.mStretched = true; Refresh(false); } #endif diff --git a/src/TrackPanel.h b/src/TrackPanel.h index ac798c96f..e006789a6 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -327,7 +327,6 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { struct StretchState { StretchEnum mMode { stretchCenter }; // remembers what to drag bool mStretching {}; // true between mouse down and mouse up - bool mStretched {}; // true after drag has pushed state double mStart {}; // time of initial mouse position, quantized // to the nearest beat double mSel0 {}; // initial sel0 (left) quantized to nearest beat From 90eb4ec142f7d575d0870dd9c755589bff520cbe Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 11 May 2017 13:41:26 -0400 Subject: [PATCH 69/85] Make MIDI track stretch path-independent --- src/NoteTrack.cpp | 27 +++++----- src/NoteTrack.h | 8 ++- src/TrackPanel.cpp | 126 +++++++++++++++++++++++++-------------------- src/TrackPanel.h | 10 ++-- 4 files changed, 95 insertions(+), 76 deletions(-) diff --git a/src/NoteTrack.cpp b/src/NoteTrack.cpp index e1597ab19..ca14c956d 100644 --- a/src/NoteTrack.cpp +++ b/src/NoteTrack.cpp @@ -562,29 +562,30 @@ bool NoteTrack::Shift(double t) // t is always seconds return true; } -double NoteTrack::NearestBeatTime(double time, double *beat) const +QuantizedTimeAndBeat NoteTrack::NearestBeatTime( double time ) const { wxASSERT(mSeq); // Alg_seq knows nothing about offset, so remove offset time double seq_time = time - GetOffset(); - seq_time = mSeq->nearest_beat_time(seq_time, beat); + double beat; + seq_time = mSeq->nearest_beat_time(seq_time, &beat); // add the offset back in to get "actual" audacity track time - return seq_time + GetOffset(); + return { seq_time + GetOffset(), beat }; } -bool NoteTrack::StretchRegion(double t0, double t1, double dur) +bool NoteTrack::StretchRegion + ( QuantizedTimeAndBeat t0, QuantizedTimeAndBeat t1, double newDur ) { - wxASSERT(mSeq); - // Alg_seq::stretch_region uses beats, so we translate time - // to beats first: - t0 -= GetOffset(); - t1 -= GetOffset(); - double b0 = mSeq->get_time_map()->time_to_beat(t0); - double b1 = mSeq->get_time_map()->time_to_beat(t1); - bool result = mSeq->stretch_region(b0, b1, dur); + bool result = mSeq->stretch_region( t0.second, t1.second, newDur ); if (result) { + const auto oldDur = t1.first - t0.first; +#if 0 + // PRL: Would this be better ? + mSeq->set_real_dur(mSeq->get_real_dur() + newDur - oldDur); +#else mSeq->convert_to_seconds(); - mSeq->set_dur(mSeq->get_dur() + dur - (t1 - t0)); + mSeq->set_dur(mSeq->get_dur() + newDur - oldDur); +#endif } return result; } diff --git a/src/NoteTrack.h b/src/NoteTrack.h index 6097c4b5d..b02e97239 100644 --- a/src/NoteTrack.h +++ b/src/NoteTrack.h @@ -11,6 +11,7 @@ #ifndef __AUDACITY_NOTETRACK__ #define __AUDACITY_NOTETRACK__ +#include #include #include "Audacity.h" #include "Experimental.h" @@ -58,6 +59,8 @@ using NoteTrackBase = #endif ; +using QuantizedTimeAndBeat = std::pair< double, double >; + class AUDACITY_DLL_API NoteTrack final : public NoteTrackBase { @@ -112,8 +115,9 @@ class AUDACITY_DLL_API NoteTrack final void SetVelocity(float velocity) { mVelocity = velocity; } #endif - double NearestBeatTime(double time, double *beat) const; - bool StretchRegion(double b0, double b1, double dur); + QuantizedTimeAndBeat NearestBeatTime( double time ) const; + bool StretchRegion + ( QuantizedTimeAndBeat t0, QuantizedTimeAndBeat t1, double newDur ); int GetBottomNote() const { return mBottomNote; } int GetPitchHeight() const { return mPitchHeight; } diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 0b46995d1..e57110578 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -2238,22 +2238,29 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, const auto nt = static_cast(pTrack); // find nearest beat to sel0, sel1 double minPeriod = 0.05; // minimum beat period - double qBeat0, qBeat1; - double centerBeat = 0.0f; - mStretchState.mSel0 = nt->NearestBeatTime(mViewInfo->selectedRegion.t0(), &qBeat0); - mStretchState.mSel1 = nt->NearestBeatTime(mViewInfo->selectedRegion.t1(), &qBeat1); + mStretchState.mBeatCenter = { 0, 0 }; + + mStretchState.mBeat0 = + nt->NearestBeatTime( mViewInfo->selectedRegion.t0() ); + mStretchState.mBeat1 = + nt->NearestBeatTime( mViewInfo->selectedRegion.t1() ); // If there is not (almost) a beat to stretch that is slower // than 20 beats per second, don't stretch - if (within(qBeat0, qBeat1, 0.9) || - (mStretchState.mSel1 - mStretchState.mSel0) / (qBeat1 - qBeat0) < minPeriod) return; + if ( within( mStretchState.mBeat0.second, + mStretchState.mBeat1.second, 0.9 ) || + ( mStretchState.mBeat1.first - mStretchState.mBeat0.first ) / + ( mStretchState.mBeat1.second - mStretchState.mBeat0.second ) + < minPeriod ) + return; if (startNewSelection) { // mouse is not at an edge, but after // quantization, we could be indicating the selection edge mSelStartValid = true; mSelStart = std::max(0.0, mViewInfo->PositionToTime(event.m_x, rect.x)); - mStretchState.mStart = nt->NearestBeatTime(mSelStart, ¢erBeat); - if (within(qBeat0, centerBeat, 0.1)) { + mStretchState.mBeatCenter = nt->NearestBeatTime( mSelStart ); + if ( within( mStretchState.mBeat0.second, + mStretchState.mBeatCenter.second, 0.1 ) ) { mListener->TP_DisplayStatusMessage( _("Click and drag to stretch selected region.")); SetCursor(*mStretchLeftCursor); @@ -2261,7 +2268,9 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, mSelStart = mViewInfo->selectedRegion.t1(); // condition that implies stretchLeft startNewSelection = false; - } else if (within(qBeat1, centerBeat, 0.1)) { + } + else if ( within( mStretchState.mBeat1.second, + mStretchState.mBeatCenter.second, 0.1 ) ) { mListener->TP_DisplayStatusMessage( _("Click and drag to stretch selected region.")); SetCursor(*mStretchRightCursor); @@ -2274,22 +2283,28 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, if (startNewSelection) { mStretchState.mMode = stretchCenter; - mStretchState.mLeftBeats = qBeat1 - centerBeat; - mStretchState.mRightBeats = centerBeat - qBeat0; - } else if (mSelStartValid && mViewInfo->selectedRegion.t1() == mSelStart) { + mStretchState.mLeftBeats = + mStretchState.mBeat1.second - mStretchState.mBeatCenter.second; + mStretchState.mRightBeats = + mStretchState.mBeatCenter.second - mStretchState.mBeat0.second; + } + else if (mSelStartValid && mViewInfo->selectedRegion.t1() == mSelStart) { // note that at this point, mSelStart is at the opposite // end of the selection from the cursor. If the cursor is // over sel0, then mSelStart is at sel1. mStretchState.mMode = stretchLeft; - } else { + } + else { mStretchState.mMode = stretchRight; } if (mStretchState.mMode == stretchLeft) { mStretchState.mLeftBeats = 0; - mStretchState.mRightBeats = qBeat1 - qBeat0; + mStretchState.mRightBeats = + mStretchState.mBeat1.second - mStretchState.mBeat0.second; } else if (mStretchState.mMode == stretchRight) { - mStretchState.mLeftBeats = qBeat1 - qBeat0; + mStretchState.mLeftBeats = + mStretchState.mBeat1.second - mStretchState.mBeat0.second; mStretchState.mRightBeats = 0; } @@ -2297,7 +2312,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, MakeParentModifyState( false ); mViewInfo->selectedRegion.setTimes - (mStretchState.mSel0, mStretchState.mSel1); + ( mStretchState.mBeat0.first, mStretchState.mBeat1.first ); mStretchState.mStretching = true; // Full refresh since the label area may need to indicate @@ -2784,65 +2799,62 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, return; } - NoteTrack *pNt = (NoteTrack *) pTrack; - double moveto = std::max(0.0, mViewInfo->PositionToTime(mouseXCoordinate, trackLeftEdge)); + NoteTrack *pNt = static_cast< NoteTrack * >( pTrack ); + + double moveto = + std::max(0.0, mViewInfo->PositionToTime(mouseXCoordinate, trackLeftEdge)); + + auto t1 = mViewInfo->selectedRegion.t1(); + auto t0 = mViewInfo->selectedRegion.t0(); + double dur, left_dur, right_dur; // check to make sure tempo is not higher than 20 beats per second // (In principle, tempo can be higher, but not infinity.) - double minPeriod = 0.05; // minimum beat period - double qBeat0, qBeat1; - pNt->NearestBeatTime(mViewInfo->selectedRegion.t0(), &qBeat0); // get beat - pNt->NearestBeatTime(mViewInfo->selectedRegion.t1(), &qBeat1); + const double minPeriod = 0.05; // minimum beat period - // We could be moving 3 things: left edge, right edge, a point between + // make sure target duration is not too short + // Take quick exit if so, without changing the selection. switch (mStretchState.mMode) { case stretchLeft: { - // make sure target duration is not too short - double dur = mViewInfo->selectedRegion.t1() - moveto; - if (dur < mStretchState.mRightBeats * minPeriod) { - dur = mStretchState.mRightBeats * minPeriod; - moveto = mViewInfo->selectedRegion.t1() - dur; - } - if (pNt->StretchRegion(mStretchState.mSel0, mStretchState.mSel1, dur)) { - pNt->SetOffset(pNt->GetOffset() + moveto - mStretchState.mSel0); - mViewInfo->selectedRegion.setT0(moveto); - } + dur = t1 - moveto; + if (dur < mStretchState.mRightBeats * minPeriod) + return; + pNt->StretchRegion + ( mStretchState.mBeat0, mStretchState.mBeat1, dur ); + pNt->Offset( moveto - t0 ); + mStretchState.mBeat0.first = moveto; + mViewInfo->selectedRegion.setT0(moveto); break; } case stretchRight: { - // make sure target duration is not too short - double dur = moveto - mViewInfo->selectedRegion.t0(); - if (dur < mStretchState.mLeftBeats * minPeriod) { - dur = mStretchState.mLeftBeats * minPeriod; - moveto = mStretchState.mSel0 + dur; - } - if (pNt->StretchRegion(mStretchState.mSel0, mStretchState.mSel1, dur)) { - mViewInfo->selectedRegion.setT1(moveto); - } + dur = moveto - t0; + if (dur < mStretchState.mLeftBeats * minPeriod) + return; + pNt->StretchRegion + ( mStretchState.mBeat0, mStretchState.mBeat1, dur ); + mViewInfo->selectedRegion.setT1(moveto); + mStretchState.mBeat1.first = moveto; break; } case stretchCenter: { - // make sure both left and right target durations are not too short - double left_dur = moveto - mViewInfo->selectedRegion.t0(); - double right_dur = mViewInfo->selectedRegion.t1() - moveto; - double centerBeat; - pNt->NearestBeatTime(mSelStart, ¢erBeat); - if (left_dur < mStretchState.mLeftBeats * minPeriod) { - left_dur = mStretchState.mLeftBeats * minPeriod; - moveto = mStretchState.mSel0 + left_dur; - } - if (right_dur < mStretchState.mRightBeats * minPeriod) { - right_dur = mStretchState.mRightBeats * minPeriod; - moveto = mStretchState.mSel1 - right_dur; - } - pNt->StretchRegion(mStretchState.mStart, mStretchState.mSel1, right_dur); - pNt->StretchRegion(mStretchState.mSel0, mStretchState.mStart, left_dur); + left_dur = moveto - t0; + right_dur = t1 - moveto; + + if (left_dur < mStretchState.mLeftBeats * minPeriod || + right_dur < mStretchState.mRightBeats * minPeriod) + return; + pNt->StretchRegion + ( mStretchState.mBeatCenter, mStretchState.mBeat1, right_dur ); + pNt->StretchRegion + ( mStretchState.mBeat0, mStretchState.mBeatCenter, left_dur ); + mStretchState.mBeatCenter.first = moveto; break; } default: wxASSERT(false); break; } + Refresh(false); } #endif diff --git a/src/TrackPanel.h b/src/TrackPanel.h index e006789a6..89304d25f 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -326,11 +326,13 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { }; struct StretchState { StretchEnum mMode { stretchCenter }; // remembers what to drag + + using QuantizedTimeAndBeat = std::pair< double, double >; + bool mStretching {}; // true between mouse down and mouse up - double mStart {}; // time of initial mouse position, quantized - // to the nearest beat - double mSel0 {}; // initial sel0 (left) quantized to nearest beat - double mSel1 {}; // initial sel1 (left) quantized to nearest beat + QuantizedTimeAndBeat mBeatCenter { 0, 0 }; + QuantizedTimeAndBeat mBeat0 { 0, 0 }; + QuantizedTimeAndBeat mBeat1 { 0, 0 }; double mLeftBeats {}; // how many beats from left to cursor double mRightBeats {}; // how many beats from cursor to right } mStretchState; From 82ce041c753ba7be301ca5b1cfe6207b669c6b2c Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 11 May 2017 14:53:03 -0400 Subject: [PATCH 70/85] Preview cursor for Stretch can take left, right, or center form --- src/TrackPanel.cpp | 109 +++++++++++++++++++++++++++++---------------- src/TrackPanel.h | 9 +++- 2 files changed, 78 insertions(+), 40 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index e57110578..6b4759948 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1359,7 +1359,9 @@ bool TrackPanel::SetCursorByActivity( ) return true; #ifdef USE_MIDI case IsStretching: - SetCursor( unsafe ? *mDisabledCursor : *mStretchCursor); + SetCursor( unsafe + ? *mDisabledCursor + : *ChooseStretchCursor( mStretchState.mMode ) ); return true; #endif default: @@ -1627,13 +1629,14 @@ void TrackPanel::SetCursorAndTipWhenSelectTool( Track * t, switch( boundary) { case SBNone: case SBLeft: - case SBRight: - if ( HitTestStretch(t, rect, event)) { + case SBRight: { + if ( auto stretchMode = HitTestStretch( t, rect, event ) ) { tip = _("Click and drag to stretch within selected region."); - *ppCursor = mStretchCursor.get(); + *ppCursor = ChooseStretchCursor( stretchMode ); return; } break; + } default: break; } @@ -2070,7 +2073,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, #ifdef USE_MIDI mStretchState = StretchState{}; - bool stretch = HitTestStretch(pTrack, rect, event); + auto stretch = HitTestStretch( pTrack, rect, event, &mStretchState ); #endif bool bShiftDown = event.ShiftDown(); @@ -2238,12 +2241,6 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, const auto nt = static_cast(pTrack); // find nearest beat to sel0, sel1 double minPeriod = 0.05; // minimum beat period - mStretchState.mBeatCenter = { 0, 0 }; - - mStretchState.mBeat0 = - nt->NearestBeatTime( mViewInfo->selectedRegion.t0() ); - mStretchState.mBeat1 = - nt->NearestBeatTime( mViewInfo->selectedRegion.t1() ); // If there is not (almost) a beat to stretch that is slower // than 20 beats per second, don't stretch @@ -2256,49 +2253,30 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event, if (startNewSelection) { // mouse is not at an edge, but after // quantization, we could be indicating the selection edge - mSelStartValid = true; - mSelStart = std::max(0.0, mViewInfo->PositionToTime(event.m_x, rect.x)); - mStretchState.mBeatCenter = nt->NearestBeatTime( mSelStart ); - if ( within( mStretchState.mBeat0.second, - mStretchState.mBeatCenter.second, 0.1 ) ) { + if ( stretch == stretchLeft ) { mListener->TP_DisplayStatusMessage( _("Click and drag to stretch selected region.")); SetCursor(*mStretchLeftCursor); // mStretchMode = stretchLeft; - mSelStart = mViewInfo->selectedRegion.t1(); - // condition that implies stretchLeft startNewSelection = false; } - else if ( within( mStretchState.mBeat1.second, - mStretchState.mBeatCenter.second, 0.1 ) ) { + else if ( stretchRight ) { mListener->TP_DisplayStatusMessage( _("Click and drag to stretch selected region.")); SetCursor(*mStretchRightCursor); // mStretchMode = stretchRight; - mSelStart = mViewInfo->selectedRegion.t0(); - // condition that implies stretchRight startNewSelection = false; } } - if (startNewSelection) { - mStretchState.mMode = stretchCenter; + mStretchState.mMode = stretch; + if ( mStretchState.mMode == stretchCenter ) { mStretchState.mLeftBeats = mStretchState.mBeat1.second - mStretchState.mBeatCenter.second; mStretchState.mRightBeats = mStretchState.mBeatCenter.second - mStretchState.mBeat0.second; } - else if (mSelStartValid && mViewInfo->selectedRegion.t1() == mSelStart) { - // note that at this point, mSelStart is at the opposite - // end of the selection from the cursor. If the cursor is - // over sel0, then mSelStart is at sel1. - mStretchState.mMode = stretchLeft; - } - else { - mStretchState.mMode = stretchRight; - } - - if (mStretchState.mMode == stretchLeft) { + else if (mStretchState.mMode == stretchLeft) { mStretchState.mLeftBeats = 0; mStretchState.mRightBeats = mStretchState.mBeat1.second - mStretchState.mBeat0.second; @@ -2789,6 +2767,50 @@ void TrackPanel::ResetFreqSelectionPin(double hintFrequency, bool logF) #endif #ifdef USE_MIDI + +wxCursor *TrackPanel::ChooseStretchCursor( StretchEnum mode ) +{ + switch ( mode ) { + case stretchCenter: return mStretchCursor.get(); + case stretchLeft: return mStretchLeftCursor.get(); + case stretchRight: return mStretchRightCursor.get(); + default: return nullptr; + } +} + +auto TrackPanel::ChooseStretchMode + ( const wxMouseEvent &event, const wxRect &rect, const ViewInfo &viewInfo, + const NoteTrack *nt, StretchState *pState ) -> StretchEnum +{ + // Assume x coordinate is in the selection and y is appropriate for stretch + // -- and then decide whether x is near enough to either edge or neither. + + Maybe< StretchState > state; + if ( !pState ) + state.create(), pState = state.get(); + + if ( nt ) { + pState->mBeat0 = + nt->NearestBeatTime( viewInfo.selectedRegion.t0() ); + pState->mBeat1 = + nt->NearestBeatTime( viewInfo.selectedRegion.t1() ); + + auto selStart = std::max(0.0, viewInfo.PositionToTime(event.m_x, rect.x)); + pState->mBeatCenter = nt->NearestBeatTime( selStart ); + + if ( within( pState->mBeat0.second, pState->mBeatCenter.second, 0.1 ) ) + return stretchLeft; + else if ( within( pState->mBeat1.second, pState->mBeatCenter.second, 0.1 ) ) + return stretchRight; + } + else { + pState->mBeat0 = pState->mBeat1 = pState->mBeatCenter = { 0, 0 }; + return stretchNone; + } + + return stretchCenter; +} + void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, Track *pTrack) { @@ -6799,14 +6821,17 @@ int TrackPanel::DetermineToolToUse( ToolsToolBar * pTtb, const wxMouseEvent & ev #ifdef USE_MIDI -bool TrackPanel::HitTestStretch(Track *track, const wxRect &rect, const wxMouseEvent & event) +auto TrackPanel::HitTestStretch + ( const Track *track, const wxRect &rect, const wxMouseEvent & event, + StretchState *pState ) + -> StretchEnum { // later, we may want a different policy, but for now, stretch is // selected when the cursor is near the center of the track and // within the selection if (!track || !track->GetSelected() || track->GetKind() != Track::Note || IsUnsafe()) { - return false; + return stretchNone; } int center = rect.y + rect.height / 2; int distance = abs(event.m_y - center); @@ -6815,8 +6840,14 @@ bool TrackPanel::HitTestStretch(Track *track, const wxRect &rect, const wxMouseE wxInt64 rightSel = mViewInfo->TimeToPosition(mViewInfo->selectedRegion.t1(), rect.x); // Something is wrong if right edge comes before left edge wxASSERT(!(rightSel < leftSel)); - return (leftSel <= event.m_x && event.m_x <= rightSel && - distance < yTolerance); + + if (leftSel <= event.m_x && event.m_x <= rightSel && + distance < yTolerance) + return ChooseStretchMode + ( event, rect, *mViewInfo, + static_cast< const NoteTrack * >( track ), pState ); + + return stretchNone; } #endif diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 89304d25f..7b41fd4c9 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -320,6 +320,7 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { // part shrinks, keeping the leftmost and rightmost boundaries // fixed. enum StretchEnum { + stretchNone = 0, // false value! stretchLeft, stretchCenter, stretchRight @@ -337,7 +338,13 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { double mRightBeats {}; // how many beats from cursor to right } mStretchState; - virtual bool HitTestStretch(Track *track, const wxRect &rect, const wxMouseEvent & event); + virtual StretchEnum HitTestStretch + ( const Track *track, const wxRect &rect, const wxMouseEvent & event, + StretchState *pState = nullptr ); + wxCursor *ChooseStretchCursor( StretchEnum mode ); + static StretchEnum ChooseStretchMode + ( const wxMouseEvent &event, const wxRect &rect, const ViewInfo &viewInfo, + const NoteTrack *nt, StretchState *pState = nullptr ); virtual void Stretch(int mouseXCoordinate, int trackLeftEdge, Track *pTrack); #endif From 54636c65fa02a1584e44f0db659f7d708950721f Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 11 May 2017 17:04:53 -0400 Subject: [PATCH 71/85] Allow NoteTrack to stretch left of zero --- src/TrackPanel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 6b4759948..f470be76c 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -2795,7 +2795,7 @@ auto TrackPanel::ChooseStretchMode pState->mBeat1 = nt->NearestBeatTime( viewInfo.selectedRegion.t1() ); - auto selStart = std::max(0.0, viewInfo.PositionToTime(event.m_x, rect.x)); + auto selStart = viewInfo.PositionToTime(event.m_x, rect.x); pState->mBeatCenter = nt->NearestBeatTime( selStart ); if ( within( pState->mBeat0.second, pState->mBeatCenter.second, 0.1 ) ) From 646c66f78fc7ef6e3b1120cc4102f982e96f4116 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 12 May 2017 17:41:57 -0400 Subject: [PATCH 72/85] Sync lock adjustment for NoteTrack stretch... ... It applies only at button-up, not in a previewing fashion during the drag. Realizing that preview is more work than I want to do right now. --- src/TrackPanel.cpp | 33 ++++++++++++++++++++++++++++++++- src/TrackPanel.h | 2 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index f470be76c..1e663f134 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1840,6 +1840,34 @@ void TrackPanel::HandleSelect(wxMouseEvent & event) SelectionHandleClick(event, t, rect); } else if (event.LeftUp() || event.RightUp()) { mSnapManager.reset(); + + bool left; + if ( GetProject()->IsSyncLocked() && + ( ( left = mStretchState.mMode == stretchLeft ) || + mStretchState.mMode == stretchRight ) ) { + auto pNt = static_cast< NoteTrack * >( mCapturedTrack ); + SyncLockedTracksIterator syncIter( GetTracks() ); + for ( auto track = syncIter.StartWith(pNt); track != nullptr; + track = syncIter.Next() ) { + if ( track != pNt ) { + if ( left ) { + auto origT0 = mStretchState.mOrigT0; + auto diff = mViewInfo->selectedRegion.t0() - origT0; + if ( diff > 0) + track->SyncLockAdjust( origT0 + diff, origT0 ); + else + track->SyncLockAdjust( origT0, origT0 - diff ); + track->Offset( diff ); + } + else { + auto origT1 = mStretchState.mOrigT1; + auto diff = mViewInfo->selectedRegion.t1() - origT1; + track->SyncLockAdjust( origT1, origT1 + diff ); + } + } + } + } + if ( mStretchState.mStretching ) { MakeParentPushState(_("Stretch Note Track"), _("Stretch"), UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); @@ -2792,8 +2820,10 @@ auto TrackPanel::ChooseStretchMode if ( nt ) { pState->mBeat0 = nt->NearestBeatTime( viewInfo.selectedRegion.t0() ); + pState->mOrigT0 = pState->mBeat0.first; pState->mBeat1 = nt->NearestBeatTime( viewInfo.selectedRegion.t1() ); + pState->mOrigT1 = pState->mBeat1.first; auto selStart = viewInfo.PositionToTime(event.m_x, rect.x); pState->mBeatCenter = nt->NearestBeatTime( selStart ); @@ -2843,8 +2873,8 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, return; pNt->StretchRegion ( mStretchState.mBeat0, mStretchState.mBeat1, dur ); - pNt->Offset( moveto - t0 ); mStretchState.mBeat0.first = moveto; + pNt->Offset( moveto - t0 ); mViewInfo->selectedRegion.setT0(moveto); break; } @@ -2854,6 +2884,7 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, return; pNt->StretchRegion ( mStretchState.mBeat0, mStretchState.mBeat1, dur ); + mViewInfo->selectedRegion.setT1(moveto); mStretchState.mBeat1.first = moveto; break; diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 7b41fd4c9..c87809f9e 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -331,6 +331,8 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel { using QuantizedTimeAndBeat = std::pair< double, double >; bool mStretching {}; // true between mouse down and mouse up + double mOrigT0 {}; + double mOrigT1 {}; QuantizedTimeAndBeat mBeatCenter { 0, 0 }; QuantizedTimeAndBeat mBeat0 { 0, 0 }; QuantizedTimeAndBeat mBeat1 { 0, 0 }; From f46ac268f4420d7fa924f0c218a2ef8ab9f66221 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Tue, 23 May 2017 10:18:48 +0100 Subject: [PATCH 73/85] Update commands for moving clips using the keyboard Second attempt at getting the commands to update history, so that they can be undone (previous attempt at b911607, which didn't call the undo manager for each keydown). Both a single keypress (keydown, then keyup), and holding down a key (multiple keydowns followed by a keyup) result in a single entry in Audacity's history dialog. Note that this code relies on a change to the undo mananger in commit 63ae687. --- src/Menus.cpp | 43 ++++++++++++++++++++++++++++++++++++------- src/Menus.h | 9 ++++++--- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 57ce81c07..556acfbb8 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -1438,8 +1438,8 @@ void AudacityProject::CreateMenusAndCommands() c->AddItem(wxT("CursorLongJumpLeft"), _("Cursor Long Jump Left"), FN(OnCursorLongJumpLeft), wxT("Shift+,")); c->AddItem(wxT("CursorLongJumpRight"), _("Cursor Long Jump Right"), FN(OnCursorLongJumpRight), wxT("Shift+.")); - c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("")); - c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("")); + c->AddItem(wxT("ClipLeft"), _("Clip Left"), FN(OnClipLeft), wxT("\twantKeyup")); + c->AddItem(wxT("ClipRight"), _("Clip Right"), FN(OnClipRight), wxT("\twantKeyup")); c->EndSubMenu(); ////////////////////////////////////////////////////////////////////////// @@ -3081,8 +3081,15 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) OnCursorLeft( true, true, bKeyUp ); } -void AudacityProject::DoClipLeftOrRight( bool right ) +void AudacityProject::DoClipLeftOrRight(bool right, bool keyUp ) { + if (keyUp) { + nKeyDown = 0; + return; + } + else + nKeyDown++; + auto &panel = *GetTrackPanel(); auto amount = TrackPanel::OnClipMove @@ -3092,18 +3099,40 @@ void AudacityProject::DoClipLeftOrRight( bool right ) panel.ScrollIntoView(mViewInfo.selectedRegion.t0()); panel.Refresh(false); + if (amount != 0.0) { + wxString message = right? _("Time shifted clips to the right") : + _("Time shifted clips to the left"); + + // The following use of the UndoPush flags is so that both a single + // keypress (keydown, then keyup), and holding down a key + // (multiple keydowns followed by a keyup) result in a single + // entry in Audacity's history dialog. + PushState(message, _("Time-Shift"), + nKeyDown == 1 ? UndoPush::MINIMAL : UndoPush::CONSOLIDATE); + } + if ( amount == 0.0 ) panel.MessageForScreenReader( _("clip not moved")); } -void AudacityProject::OnClipLeft() +void AudacityProject::OnClipLeft(const wxEvent* evt) { - DoClipLeftOrRight( false ); + if (evt) + DoClipLeftOrRight( false, evt->GetEventType() == wxEVT_KEY_UP ); + else { // called from menu, so simulate keydown and keyup + DoClipLeftOrRight( false, false ); + DoClipLeftOrRight( false, true ); + } } -void AudacityProject::OnClipRight() +void AudacityProject::OnClipRight(const wxEvent* evt) { - DoClipLeftOrRight( true ); + if (evt) + DoClipLeftOrRight( true, evt->GetEventType() == wxEVT_KEY_UP ); + else { // called from menu, so simulate keydown and keyup + DoClipLeftOrRight( true, false ); + DoClipLeftOrRight( true, true ); + } } //this pops up a dialog which allows the left selection to be set. diff --git a/src/Menus.h b/src/Menus.h index 9d20aa76b..03e2fa304 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -160,9 +160,12 @@ void OnSelExtendRight(const wxEvent * evt); void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); -void DoClipLeftOrRight( bool right ); -void OnClipLeft(); -void OnClipRight(); +private: + int nKeyDown{}; +public: +void DoClipLeftOrRight(bool right, bool keyUp ); +void OnClipLeft(const wxEvent* evt); +void OnClipRight(const wxEvent* evt); void OnCursorShortJumpLeft(); void OnCursorShortJumpRight(); From cd6c9834f61639afdab1db04cb6929d1f816f35d Mon Sep 17 00:00:00 2001 From: David Bailes Date: Tue, 23 May 2017 12:56:11 +0100 Subject: [PATCH 74/85] Clip move commands - minor fix. Forgot that the name of data members should begin with the letter m. Fixed this. --- src/Menus.cpp | 6 +++--- src/Menus.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 556acfbb8..9eb057bcf 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -3084,11 +3084,11 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) void AudacityProject::DoClipLeftOrRight(bool right, bool keyUp ) { if (keyUp) { - nKeyDown = 0; + mNKeyDown = 0; return; } else - nKeyDown++; + mNKeyDown++; auto &panel = *GetTrackPanel(); @@ -3108,7 +3108,7 @@ void AudacityProject::DoClipLeftOrRight(bool right, bool keyUp ) // (multiple keydowns followed by a keyup) result in a single // entry in Audacity's history dialog. PushState(message, _("Time-Shift"), - nKeyDown == 1 ? UndoPush::MINIMAL : UndoPush::CONSOLIDATE); + mNKeyDown == 1 ? UndoPush::MINIMAL : UndoPush::CONSOLIDATE); } if ( amount == 0.0 ) diff --git a/src/Menus.h b/src/Menus.h index 03e2fa304..615093d20 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -161,7 +161,7 @@ void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); private: - int nKeyDown{}; + int mNKeyDown{}; public: void DoClipLeftOrRight(bool right, bool keyUp ); void OnClipLeft(const wxEvent* evt); From f0040b09f18724a8dd8a17e71f2d1bcb764aa49c Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Tue, 23 May 2017 12:27:48 +0100 Subject: [PATCH 75/85] Bug 1210, alternative fix for unfriendly message --- plug-ins/notch.ny | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/plug-ins/notch.ny b/plug-ins/notch.ny index de9fbff2a..7ebdd759d 100644 --- a/plug-ins/notch.ny +++ b/plug-ins/notch.ny @@ -9,24 +9,21 @@ ;author "Steve Daulton and Bill Wharrie" ;copyright "Released under terms of the GNU General Public License version 2" -;; notch.ny by Steve Daulton and Bill Wharrie, September 2010. -;; Last updated August 2015. +;; notch.ny by Steve Daulton and Bill Wharrie ;; Released under terms of the GNU General Public License version 2: ;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html . ;control frequency "Frequency (Hz)" float-text "" 60 0 nil -;control q "Q (higher value reduces width)" float-text "" 1 0.1 nil - +;control q "Q (higher value reduces width)" float-text "" 1 0.1 1000 (cond ((< frequency 0.1) "Frequency must be at least 0.1 Hz.") ((>= frequency (/ *sound-srate* 2.0)) - (format nil "Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~ - Track sample rate is ~a Hz~%~ - Frequency must be less than ~a Hz." - frequency - *sound-srate* - (/ *sound-srate* 2.0))) - ((< q 0.1) "Q must be at least 0.1.") + (format nil "Error:~%~%Frequency (~a Hz) is too high for track sample rate.~%~%~ + Track sample rate is ~a Hz.~%~ + Frequency must be less than ~a Hz." + frequency + *sound-srate* + (/ *sound-srate* 2.0))) (T (notch2 *track* frequency q))) From 4b2b0d9b918416fc82cb88c67ed50333c3146b8f Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 23 May 2017 13:06:50 -0400 Subject: [PATCH 76/85] Fix Windows warning: inconsistent DLL linkage between base & derived --- src/Track.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Track.h b/src/Track.h index c791511ae..5144bb93c 100644 --- a/src/Track.h +++ b/src/Track.h @@ -250,7 +250,7 @@ class AUDACITY_DLL_API Track /* not final */ : public XMLTagHandler bool IsSyncLockSelected() const; }; -class AudioTrack /* not final */ : public Track +class AUDACITY_DLL_API AudioTrack /* not final */ : public Track { public: AudioTrack(const std::shared_ptr &projDirManager) @@ -265,7 +265,7 @@ public: { return false; } }; -class PlayableTrack /* not final */ : public AudioTrack +class AUDACITY_DLL_API PlayableTrack /* not final */ : public AudioTrack { public: PlayableTrack(const std::shared_ptr &projDirManager) From 0303d281cc8d3be0e612457d9f43dcf0481b9202 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Tue, 23 May 2017 22:18:22 +0100 Subject: [PATCH 77/85] Fix for bug 1650 Don't attempt to read plug-in file when spawned from Nyquist Prompt because there isn't one. --- src/effects/nyquist/Nyquist.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 4e09da937..48d72f2d4 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -147,8 +147,7 @@ NyquistEffect::NyquistEffect(const wxString &fName) mMaxLen = NYQ_MAX_LEN; // Interactive Nyquist - if (fName == NYQUIST_PROMPT_ID) - { + if (fName == NYQUIST_PROMPT_ID) { mName = XO("Nyquist Prompt"); mType = EffectTypeProcess; mOK = true; @@ -157,6 +156,11 @@ NyquistEffect::NyquistEffect(const wxString &fName) return; } + if (fName == NYQUIST_WORKER_ID) { + // Effect spawned from Nyquist Prompt + return; + } + mFileName = fName; mName = mFileName.GetName(); mFileModified = mFileName.GetModificationTime(); From d210b18aad4b3e21078596875f080b07ba97e746 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 24 May 2017 00:23:25 -0400 Subject: [PATCH 78/85] Limit consolidation of undo items by other means --- src/Menus.cpp | 8 +++----- src/Menus.h | 2 -- src/UndoManager.h | 2 ++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 9eb057bcf..5115387aa 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -3084,11 +3084,9 @@ void AudacityProject::OnSelContractRight(const wxEvent * evt) void AudacityProject::DoClipLeftOrRight(bool right, bool keyUp ) { if (keyUp) { - mNKeyDown = 0; + GetUndoManager()->StopConsolidating(); return; } - else - mNKeyDown++; auto &panel = *GetTrackPanel(); @@ -3107,8 +3105,7 @@ void AudacityProject::DoClipLeftOrRight(bool right, bool keyUp ) // keypress (keydown, then keyup), and holding down a key // (multiple keydowns followed by a keyup) result in a single // entry in Audacity's history dialog. - PushState(message, _("Time-Shift"), - mNKeyDown == 1 ? UndoPush::MINIMAL : UndoPush::CONSOLIDATE); + PushState(message, _("Time-Shift"), UndoPush::CONSOLIDATE); } if ( amount == 0.0 ) @@ -8023,6 +8020,7 @@ void AudacityProject::OnResample() } } + GetUndoManager()->StopConsolidating(); RedrawProject(); // Need to reset diff --git a/src/Menus.h b/src/Menus.h index 615093d20..3d1911665 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -160,8 +160,6 @@ void OnSelExtendRight(const wxEvent * evt); void OnSelContractLeft(const wxEvent * evt); void OnSelContractRight(const wxEvent * evt); -private: - int mNKeyDown{}; public: void DoClipLeftOrRight(bool right, bool keyUp ); void OnClipLeft(const wxEvent* evt); diff --git a/src/UndoManager.h b/src/UndoManager.h index d64474203..84652de61 100644 --- a/src/UndoManager.h +++ b/src/UndoManager.h @@ -108,6 +108,8 @@ class AUDACITY_DLL_API UndoManager { unsigned int GetNumStates(); unsigned int GetCurrentState(); + void StopConsolidating() { mayConsolidate = false; } + void GetShortDescription(unsigned int n, wxString *desc); // Return value must first be calculated by CalculateSpaceUsage(): wxLongLong_t GetLongDescription(unsigned int n, wxString *desc, wxString *size); From 552a69df72435a0b4d9e0893fd127336f0c7fb01 Mon Sep 17 00:00:00 2001 From: James Crook Date: Tue, 23 May 2017 22:35:27 +0100 Subject: [PATCH 79/85] Add radio buttons for Start-End, Start-Length e.t.c. The checkbox on the selection toolbar is a temporary work around for a bug in windows with tabbing. Tabbing into a radio button will set the first item of the radio button group without it. Still looking for a better workaround. --- src/toolbars/SelectionBar.cpp | 128 +++++++++++++++++++++++++++------- src/toolbars/SelectionBar.h | 8 ++- 2 files changed, 109 insertions(+), 27 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 689266009..89de538d8 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -69,32 +69,44 @@ enum { SelectionBarFirstID = 2700, RateID, SnapToID, - //OnMenuId, + OnMenuID, + StartTitleID, - CenterTitleID, LengthTitleID, + CenterTitleID, EndTitleID, AudioTitleID, - StartTimeID, - CenterTimeID, - LengthTimeID, - EndTimeID, - AudioTimeID, + StartEndRadioID, + StartLengthRadioID, + LengthEndRadioID, + LengthCenterRadioID, + SelTBFirstButton, SelTBMenuID = SelTBFirstButton, + + id2, + StartTimeID, + LengthTimeID, + CenterTimeID, + EndTimeID, + AudioTimeID, }; BEGIN_EVENT_TABLE(SelectionBar, ToolBar) EVT_SIZE(SelectionBar::OnSize) EVT_TEXT(StartTimeID, SelectionBar::OnChangedTime) - EVT_TEXT(EndTimeID, SelectionBar::OnChangedTime) EVT_TEXT(LengthTimeID, SelectionBar::OnChangedTime) EVT_TEXT(CenterTimeID, SelectionBar::OnChangedTime) + EVT_TEXT(EndTimeID, SelectionBar::OnChangedTime) EVT_CHOICE(SnapToID, SelectionBar::OnSnapTo) EVT_COMBOBOX(RateID, SelectionBar::OnRate) EVT_TEXT(RateID, SelectionBar::OnRate) + EVT_RADIOBUTTON(StartEndRadioID, SelectionBar::OnFieldChoice ) + EVT_RADIOBUTTON(StartLengthRadioID, SelectionBar::OnFieldChoice ) + EVT_RADIOBUTTON(LengthEndRadioID, SelectionBar::OnFieldChoice ) + EVT_RADIOBUTTON(LengthCenterRadioID, SelectionBar::OnFieldChoice ) EVT_COMMAND_RANGE( SelTBMenuID, SelTBMenuID, @@ -152,7 +164,7 @@ void SelectionBar::Create(wxWindow * parent) // and a windows theme that is close enough to actually blend. wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name, - int id, std::unique_ptr& pSizer, long style ) + int id, wxSizer *pSizer, long style ) { bool bUseNativeRadioButton = theTheme.IsUsingSyestemTextColour(); wxRadioButton * pBtn; @@ -213,7 +225,7 @@ void SelectionBar::Populate() * look-ups static because they depend on translations which are done at * runtime */ - Add((mainSizer = safenew wxFlexGridSizer(10, 1, 1)), 0, wxALIGN_CENTER_VERTICAL); + Add((mainSizer = safenew wxFlexGridSizer(7, 1, 1)), 0, wxALIGN_CENTER_VERTICAL); // // Top row (mostly labels) @@ -236,17 +248,34 @@ void SelectionBar::Populate() AddTitle( _("Snap-To"), mainSizer ); // Not enough room to say 'Selection Options". There is a tooltip instead. AddTitle( wxT(""), mainSizer ); + + { + auto hSizer = std::make_unique(wxHORIZONTAL); + (mStartEndRadBtn = AddRadioButton( _("Start-End"), StartEndRadioID, hSizer.get(), wxRB_GROUP)) + ->SetValue( mSelectionMode == 0 ); + (mStartLengthRadBtn = AddRadioButton( _("Start-Length"), StartLengthRadioID, hSizer.get(), 0)) + ->SetValue( mSelectionMode == 1 ); + (mLengthEndRadBtn = AddRadioButton( _("Length-End"), LengthEndRadioID, hSizer.get(), 0)) + ->SetValue( mSelectionMode == 2 ); + (mLengthCenterRadBtn = AddRadioButton( _("Length-Center"), LengthCenterRadioID, hSizer.get(), 0)) + ->SetValue( mSelectionMode == 3 ); + mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); + } + +#if 0 mStartTitle = AddTitle( _("Start"), mainSizer ); - mCenterTitle = AddTitle( _("Center"), mainSizer ); mLengthTitle = AddTitle( _("Length"), mainSizer ); + mCenterTitle = AddTitle( _("Center"), mainSizer ); mEndTitle = AddTitle( _("End"), mainSizer ); - mainSizer->Add(5, 1); - AddTitle( _("Audio Position"), mainSizer ); mStartTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnStartTitleClicked,this ); - mCenterTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnCenterTitleClicked,this ); mLengthTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnLengthTitleClicked,this ); + mCenterTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnCenterTitleClicked,this ); mEndTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnEndTitleClicked,this ); +#endif + + mainSizer->Add(5, 1); + AddTitle( _("Audio Position"), mainSizer ); // // Middle row (mostly time controls) @@ -315,7 +344,7 @@ void SelectionBar::Populate() wxFocusEventHandler(SelectionBar::OnFocus), NULL, this); - +/* AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton]; pBtn = ToolBar::MakeButton(this, bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, @@ -328,11 +357,26 @@ void SelectionBar::Populate() pBtn->SetLabel("Selection options"); pBtn->SetToolTip("Selection options"); mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); +*/ + wxCheckBox * pCheck = new wxCheckBox(this, id2, "Checkbox"); + mainSizer->Add( pCheck, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); - mStartTime = AddTime(_("Start"), StartTimeID, mainSizer ); - mCenterTime = AddTime(_("Center"), CenterTimeID, mainSizer ); - mLengthTime = AddTime(_("Length"), LengthTimeID, mainSizer ); - mEndTime = AddTime(_("End"), EndTimeID, mainSizer ); + { + auto hSizer = std::make_unique(wxHORIZONTAL); + + mStartTime = AddTime(_("Start"), StartTimeID, hSizer.get() ); + mLengthTime = AddTime(_("Length"), LengthTimeID, hSizer.get() ); + mCenterTime = AddTime(_("Center"), CenterTimeID, hSizer.get() ); + mEndTime = AddTime(_("End"), EndTimeID, hSizer.get() ); + mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); + // Put choice of what fields to show immediately before the fields. +#if 1 + mStartEndRadBtn->MoveBeforeInTabOrder( mStartTime ); + mStartLengthRadBtn->MoveAfterInTabOrder( mStartEndRadBtn ); + mLengthEndRadBtn->MoveAfterInTabOrder( mStartLengthRadBtn ); + mLengthCenterRadBtn->MoveAfterInTabOrder( mLengthEndRadBtn ); +#endif + } mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition, wxSize(1, toolbarSingle), @@ -489,8 +533,8 @@ void SelectionBar::OnTitleClicked(int newDriver) // These functions give the IDs of the associated control, NOT the ID of the title. void SelectionBar::OnStartTitleClicked(wxMouseEvent & event){ OnTitleClicked( StartTimeID );}; -void SelectionBar::OnCenterTitleClicked(wxMouseEvent & event){ OnTitleClicked( CenterTimeID );}; void SelectionBar::OnLengthTitleClicked(wxMouseEvent & event){ OnTitleClicked( LengthTimeID );}; +void SelectionBar::OnCenterTitleClicked(wxMouseEvent & event){ OnTitleClicked( CenterTimeID );}; void SelectionBar::OnEndTitleClicked(wxMouseEvent & event){ OnTitleClicked( EndTimeID );}; @@ -564,7 +608,7 @@ void SelectionBar::SetDrivers( int driver1, int driver2 ) (*Titles[i])->SetLabelText( Title ); } if( *Ctrls[i] ){ - (*Ctrls[i])->SetName( VoiceOverText ); + (*Ctrls[i])->SetName( Temp ); //(*Ctrls[i])->SetToolTip( Tooltip ); } } @@ -588,17 +632,20 @@ void SelectionBar::OnButton(wxCommandEvent & event) Menu.AppendRadioItem( 0, _("Start - End") ); Menu.AppendRadioItem( 1, _("Start - Length") ); Menu.AppendRadioItem( 2, _("Length - End") ); - Menu.AppendRadioItem( 3, _("Center - Length") ); + Menu.AppendRadioItem( 3, _("Length - Center") ); +#if 0 + // These four options were found to be too confusing. Menu.AppendRadioItem( 4, _("Start - Length - End") ); Menu.AppendRadioItem( 5, _("Start - Center - Length") ); Menu.AppendRadioItem( 6, _("Start - Center - End") ); - Menu.AppendRadioItem( 7, _("Start - Center - Length - End") ); + Menu.AppendRadioItem( 7, _("Start - Length - Center - End") ); +#endif Menu.Check( mSelectionMode, true ); // Pop it up where the mouse is. pBtn->PopupMenu(&Menu);//, wxPoint(0, 0)); // only one radio button should be checked. - for( int i=0;i<8;i++) + for( int i=0;i<4;i++) if( Menu.IsChecked(i)) SetSelectionMode( i ); @@ -614,16 +661,45 @@ void SelectionBar::OnButton(wxCommandEvent & event) Updated(); } +void SelectionBar::OnFieldChoice(wxCommandEvent &event) +{ + int id = event.GetId(); + SetSelectionMode( id - StartEndRadioID ); + // We just changed the mode. Remember it. + gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); + gPrefs->Flush(); + + wxSize sz = GetMinSize(); + sz.SetWidth( 10 ); + SetMinSize( sz ); + Fit(); + Layout(); + Updated(); + event.Skip(); +} + + void SelectionBar::SetSelectionMode(int mode) { mSelectionMode = mode; + int id = mode + StartEndRadioID; + mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); + mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); + mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); + mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + + mStartEndRadBtn->SetValue( id == StartEndRadioID ); + mStartLengthRadBtn->SetValue( id == StartLengthRadioID ); + mLengthEndRadBtn->SetValue( id == LengthEndRadioID ); + mLengthCenterRadBtn->SetValue( id == LengthCenterRadioID ); + // First decide which two controls drive the others... // For example the last option is with all controls shown, and in that mode we // initially have start and end driving. - int Drive2[] = { StartTimeID, StartTimeID, LengthTimeID, CenterTimeID, + int Drive2[] = { StartTimeID, StartTimeID, LengthTimeID, LengthTimeID, StartTimeID, StartTimeID, StartTimeID, StartTimeID}; - int Drive1[] = { EndTimeID, LengthTimeID, EndTimeID, LengthTimeID, + int Drive1[] = { EndTimeID, LengthTimeID, EndTimeID, CenterTimeID, EndTimeID, LengthTimeID, EndTimeID, EndTimeID}; SetDrivers( Drive1[mode], Drive2[mode] ); diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index d5f83c510..373692922 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -57,7 +57,7 @@ class SelectionBar final : public ToolBar { private: wxRadioButton * AddRadioButton( const wxString & Name, int id, - std::unique_ptr& pSizer, long style); + wxSizer * pSizer, long style); wxStaticText * AddTitle( const wxString & Title, wxSizer * pSizer ); NumericTextCtrl * AddTime( const wxString Name, int id, wxSizer * pSizer ); @@ -78,6 +78,7 @@ class SelectionBar final : public ToolBar { void OnFocus(wxFocusEvent &event); void OnCaptureKey(wxCommandEvent &event); void OnSize(wxSizeEvent &evt); + void OnFieldChoice(wxCommandEvent &event); void ModifySelection(int newDriver, bool done = false); void UpdateRates(); @@ -108,6 +109,11 @@ class SelectionBar final : public ToolBar { wxStaticText * mLengthTitle; wxStaticText * mEndTitle; + wxRadioButton * mStartEndRadBtn; + wxRadioButton * mStartLengthRadBtn; + wxRadioButton * mLengthEndRadBtn; + wxRadioButton * mLengthCenterRadBtn; + wxComboBox *mRateBox; wxChoice *mSnapTo; From 3761ae3fe578d16de66b27ab660c4a87c80add5f Mon Sep 17 00:00:00 2001 From: James Crook Date: Wed, 24 May 2017 18:55:20 +0100 Subject: [PATCH 80/85] Replace dummy checkbox by vertical line. Fortunately a vertical line works just as well as a checkbox in working around the bug where radio buttons change to the first field. It is better for screen readers too as it is not included in the tab order. --- src/toolbars/SelectionBar.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 89de538d8..7d7912f9b 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -344,7 +344,8 @@ void SelectionBar::Populate() wxFocusEventHandler(SelectionBar::OnFocus), NULL, this); -/* + +#if 0 AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton]; pBtn = ToolBar::MakeButton(this, bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, @@ -356,10 +357,18 @@ void SelectionBar::Populate() pBtn->SetLabel("Selection options"); pBtn->SetToolTip("Selection options"); + pBtn->Disable(); mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); -*/ - wxCheckBox * pCheck = new wxCheckBox(this, id2, "Checkbox"); - mainSizer->Add( pCheck, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); +#endif + +// wxCheckBox * pCheck = new wxCheckBox(this, id2, "Checkbox"); +// pCheck->Enable( false ); + // mainSizer->Add( pCheck, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + + mainSizer->Add(safenew wxStaticLine(this, id2, wxDefaultPosition, + wxSize(1, toolbarSingle), + wxLI_VERTICAL), + 0, wxRIGHT, 5); { auto hSizer = std::make_unique(wxHORIZONTAL); From 59a9539ba0c30e1a866e87decb49f7c5ec47b19d Mon Sep 17 00:00:00 2001 From: James Crook Date: Wed, 24 May 2017 19:26:59 +0100 Subject: [PATCH 81/85] Fix Radio Buttons on SelectionToolbar for Dark Theme The workaround for Dark Theme can require static text boxes for the radio labels to be able to colour the text. These have been added back. --- src/toolbars/SelectionBar.cpp | 67 ++++++++++++++++++++++------------- src/toolbars/SelectionBar.h | 7 ++++ 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 7d7912f9b..ab5dd2f2d 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -124,6 +124,7 @@ SelectionBar::SelectionBar() mStartTime(NULL), mEndTime(NULL), mLengthTime(NULL), mCenterTime(NULL), mAudioTime(NULL), mStartTitle(NULL), mCenterTitle(NULL), mLengthTitle(NULL), mEndTitle(NULL), + mStartEndProxy(NULL), mStartLengthProxy(NULL), mLengthEndProxy(NULL), mLengthCenterProxy(NULL), mDrive1( StartTimeID), mDrive2( EndTimeID ), mSelectionMode(0) { @@ -175,11 +176,14 @@ wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name, pBtn->SetForegroundColour( theTheme.Colour( clrTrackPanelText )); pSizer->Add(pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + // Hacky code to return a second optional value via the variable mProxy. + // If not NULL, we made a new proxy label + mProxy = NULL; if( !bUseNativeRadioButton ) { - wxStaticText * pText = safenew wxStaticText(this, -1, Name); - pText->SetForegroundColour( theTheme.Colour( clrTrackPanelText ) ); - pSizer->Add(pText, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); + mProxy = safenew wxStaticText(this, -1, Name); + mProxy->SetForegroundColour( theTheme.Colour( clrTrackPanelText ) ); + pSizer->Add(mProxy, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); } return pBtn; } @@ -208,6 +212,8 @@ void SelectionBar::Populate() { SetBackgroundColour( theTheme.Colour( clrMedium ) ); mStartTime = mEndTime = mLengthTime = mCenterTime = mAudioTime = nullptr; + mStartEndProxy = mStartLengthProxy = mLengthEndProxy = mLengthCenterProxy = nullptr; + // This will be inherited by all children: SetFont(wxFont( #ifdef __WXMAC__ @@ -251,14 +257,18 @@ void SelectionBar::Populate() { auto hSizer = std::make_unique(wxHORIZONTAL); - (mStartEndRadBtn = AddRadioButton( _("Start-End"), StartEndRadioID, hSizer.get(), wxRB_GROUP)) + (mStartEndRadBtn = AddRadioButton( _("Start-End"), StartEndRadioID, hSizer.get(), wxRB_GROUP)) ->SetValue( mSelectionMode == 0 ); + mStartEndProxy = mProxy; (mStartLengthRadBtn = AddRadioButton( _("Start-Length"), StartLengthRadioID, hSizer.get(), 0)) ->SetValue( mSelectionMode == 1 ); + mStartLengthProxy = mProxy; (mLengthEndRadBtn = AddRadioButton( _("Length-End"), LengthEndRadioID, hSizer.get(), 0)) ->SetValue( mSelectionMode == 2 ); + mLengthEndProxy = mProxy; (mLengthCenterRadBtn = AddRadioButton( _("Length-Center"), LengthCenterRadioID, hSizer.get(), 0)) ->SetValue( mSelectionMode == 3 ); + mLengthCenterProxy = mProxy; mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); } @@ -346,6 +356,8 @@ void SelectionBar::Populate() this); #if 0 + // Old code which placed a button from which to select options. + // Retained in case we want a button for selection-toolbar options at a future date. AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton]; pBtn = ToolBar::MakeButton(this, bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, @@ -361,10 +373,15 @@ void SelectionBar::Populate() mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); #endif -// wxCheckBox * pCheck = new wxCheckBox(this, id2, "Checkbox"); -// pCheck->Enable( false ); - // mainSizer->Add( pCheck, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + // This vertical line is NOT just for decoration! + // It works around a wxWidgets-on-Windows RadioButton bug, where tabbing + // into the radiobutton group jumps to selecting the first item in the + // group even if some other item had been selected. + // It is an important bug to work around for sceen reader users, who use TAB + // a lot in navigation. + // More about the bug here: + // https://forums.wxwidgets.org/viewtopic.php?t=41120 mainSizer->Add(safenew wxStaticLine(this, id2, wxDefaultPosition, wxSize(1, toolbarSingle), wxLI_VERTICAL), @@ -379,12 +396,10 @@ void SelectionBar::Populate() mEndTime = AddTime(_("End"), EndTimeID, hSizer.get() ); mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); // Put choice of what fields to show immediately before the fields. -#if 1 mStartEndRadBtn->MoveBeforeInTabOrder( mStartTime ); mStartLengthRadBtn->MoveAfterInTabOrder( mStartEndRadBtn ); mLengthEndRadBtn->MoveAfterInTabOrder( mStartLengthRadBtn ); mLengthCenterRadBtn->MoveAfterInTabOrder( mLengthEndRadBtn ); -#endif } mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition, @@ -658,22 +673,18 @@ void SelectionBar::OnButton(wxCommandEvent & event) if( Menu.IsChecked(i)) SetSelectionMode( i ); - // We just changed the mode. Remember it. - gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); - gPrefs->Flush(); - - wxSize sz = GetMinSize(); - sz.SetWidth( 10 ); - SetMinSize( sz ); - Fit(); - Layout(); - Updated(); + SelectionModeUpdated(); } void SelectionBar::OnFieldChoice(wxCommandEvent &event) { int id = event.GetId(); SetSelectionMode( id - StartEndRadioID ); + SelectionModeUpdated(); +} + +void SelectionBar::SelectionModeUpdated() +{ // We just changed the mode. Remember it. gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode); gPrefs->Flush(); @@ -684,7 +695,6 @@ void SelectionBar::OnFieldChoice(wxCommandEvent &event) Fit(); Layout(); Updated(); - event.Skip(); } @@ -693,10 +703,19 @@ void SelectionBar::SetSelectionMode(int mode) mSelectionMode = mode; int id = mode + StartEndRadioID; - mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); - mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); - mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); - mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + if( mStartEndProxy == NULL ){ + mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); + mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); + mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); + mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + } + else + { + mStartEndProxy->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); + mStartLengthProxy->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); + mLengthEndProxy->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); + mLengthCenterProxy->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + } mStartEndRadBtn->SetValue( id == StartEndRadioID ); mStartLengthRadBtn->SetValue( id == StartLengthRadioID ); diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index 373692922..047790695 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -82,6 +82,7 @@ class SelectionBar final : public ToolBar { void ModifySelection(int newDriver, bool done = false); void UpdateRates(); + void SelectionModeUpdated(); SelectionBarListener * mListener; double mRate; @@ -109,6 +110,12 @@ class SelectionBar final : public ToolBar { wxStaticText * mLengthTitle; wxStaticText * mEndTitle; + wxStaticText * mProxy; + wxStaticText * mStartEndProxy; + wxStaticText * mStartLengthProxy; + wxStaticText * mLengthEndProxy; + wxStaticText * mLengthCenterProxy; + wxRadioButton * mStartEndRadBtn; wxRadioButton * mStartLengthRadBtn; wxRadioButton * mLengthEndRadBtn; From 01356f9e3e1626112a7a2a9951d4a6fa59acb060 Mon Sep 17 00:00:00 2001 From: James Crook Date: Wed, 24 May 2017 19:37:29 +0100 Subject: [PATCH 82/85] Add i18n hints for selection toolbar --- src/toolbars/SelectionBar.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index ab5dd2f2d..ec8957dbe 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -367,8 +367,8 @@ void SelectionBar::Populate() false, theTheme.ImageSize( bmpRecoloredUpSmall )); - pBtn->SetLabel("Selection options"); - pBtn->SetToolTip("Selection options"); + pBtn->SetLabel(_("Selection options")); + pBtn->SetToolTip(_("Selection options")); pBtn->Disable(); mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); #endif @@ -704,17 +704,21 @@ void SelectionBar::SetSelectionMode(int mode) int id = mode + StartEndRadioID; if( mStartEndProxy == NULL ){ - mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); - mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); - mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); - mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + // i18n-hint: S-E is an abbreviation of Start-End + mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? _("Start - End") : _("S-E") ); + // i18n-hint: S-L is an abbreviation of Start-Length + mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? _("Start - Length") : _("S-L") ); + // i18n-hint: L-E is an abbreviation of Length-End + mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? _("Length - End") : _("L-E") ); + // i18n-hint: L-C is an abbreviation of Length-Center + mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? _("Length - Center") : _("L-C") ); } else { - mStartEndProxy->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" ); - mStartLengthProxy->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" ); - mLengthEndProxy->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" ); - mLengthCenterProxy->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" ); + mStartEndProxy->SetLabelText( (id == StartEndRadioID) ? _("Start - End") : _("S-E") ); + mStartLengthProxy->SetLabelText( (id == StartLengthRadioID) ? _("Start - Length") : _("S-L") ); + mLengthEndProxy->SetLabelText( (id == LengthEndRadioID) ? _("Length - End") : _("L-E") ); + mLengthCenterProxy->SetLabelText( (id == LengthCenterRadioID) ? _("Length - Center") : _("L-C") ); } mStartEndRadBtn->SetValue( id == StartEndRadioID ); From 8afeed5f787d647f36662d5d1cf1ba0d6f717492 Mon Sep 17 00:00:00 2001 From: James Crook Date: Wed, 24 May 2017 22:01:19 +0100 Subject: [PATCH 83/85] Faster opening of preferences. The slow opening was caused by sorting lists of commands. The comparison function was slow because it created new strings, entailing malloc/free and used translation in the function. Comparison function was being called about 4,000 times. --- src/widgets/KeyView.cpp | 53 +++++++++++++++++------------------------ src/widgets/KeyView.h | 2 ++ 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/widgets/KeyView.cpp b/src/widgets/KeyView.cpp index b385ca83e..083a0da51 100644 --- a/src/widgets/KeyView.cpp +++ b/src/widgets/KeyView.cpp @@ -47,6 +47,9 @@ BEGIN_EVENT_TABLE(KeyView, wxVListBox) EVT_SCROLLWIN(KeyView::OnScroll) END_EVENT_TABLE(); +wxString KeyView::CommandTranslated="Command"; + + // ============================================================================ // KeyView class // ============================================================================ @@ -915,6 +918,12 @@ KeyView::RefreshLines() mLines.Add(&node); } } + //To see how many lines are being sorted (and how often). + //wxLogDebug("Sorting %i lines", mLines.GetCount()); + + // Speed up the comparison function used in sorting + // by only translating this string once. + CommandTranslated = _("Command"); // Sort list based on type switch (mViewType) @@ -1544,48 +1553,30 @@ KeyView::CmpKeyNodeByTree(KeyNode ***n1, KeyNode ***n2) { KeyNode *t1 = (**n1); KeyNode *t2 = (**n2); - wxString k1 = t1->label; - wxString k2 = t2->label; + + unsigned int k1UInt= 0xffffffff; + unsigned int k2UInt= 0xffffffff; // This is a "command" node if its category is "Command" // and it is a child of the "Command" category. This latter // test ensures that the "Command" parent will be handled // as a "menu" node and remain at the bottom of the list. - if (t1->category == _("Command") && !t1->isparent) - { - // A "command" node, so prepend the highest hex value - k1.Printf(wxT("ffffffff%s"), t1->label.c_str()); - } - else - { - // A "menu" node, so prepend the line number - k1.Printf(wxT("%08x%s"), (unsigned int) t1->line, t1->label.c_str()); - } + if (t1->category != CommandTranslated || t1->isparent) + k1UInt = (unsigned int) t1->line; // See above for explanation - if (t2->category == _("Command") && !t2->isparent) - { - // A "command" node, so prepend the highest hex value - k2.Printf(wxT("ffffffff%s"), t2->label.c_str()); - } - else - { - // A "menu" node, so prepend the line number - k2.Printf(wxT("%08x%s"), (unsigned int) t2->line, t2->label.c_str()); - } + if (t2->category != CommandTranslated || t2->isparent) + k2UInt = (unsigned int) t2->line; - // See wxWidgets documentation for explanation of comparison results. - // These will produce an ascending order. - if (k1 < k2) - { + if( k1UInt < k2UInt ) return -1; - } + if( k1UInt > k2UInt ) + return +1; - if (k1 > k2) - { + if( t1->label < t2->label ) + return -1; + if( t1->label > t2->label ) return 1; - } - return 0; } diff --git a/src/widgets/KeyView.h b/src/widgets/KeyView.h index 80febf4eb..4fc515d97 100644 --- a/src/widgets/KeyView.h +++ b/src/widgets/KeyView.h @@ -128,6 +128,8 @@ private: void OnKeyDown(wxKeyEvent & event); void OnLeftDown(wxMouseEvent & event); + + static wxString CommandTranslated; static int CmpKeyNodeByTree(KeyNode ***n1, KeyNode ***n2); static int CmpKeyNodeByName(KeyNode ***n1, KeyNode ***n2); static int CmpKeyNodeByKey(KeyNode ***n1, KeyNode ***n2); From b3a70b5993fb222e67f5877dbed3e39787dcd21f Mon Sep 17 00:00:00 2001 From: James Crook Date: Thu, 25 May 2017 11:39:30 +0100 Subject: [PATCH 84/85] Add hyphen between fields and tooltips. Tooltips tell users what the abbreviated names in the radio button group mean. The hyphen helps a little in relating the title , which has a hyphen in it, to the two fields. --- src/toolbars/SelectionBar.cpp | 17 +++++++++++++++-- src/toolbars/SelectionBar.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index ec8957dbe..7d7e0b953 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -136,7 +136,7 @@ SelectionBar::SelectionBar() // Audacity to fail. mRate = (double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), AudioIO::GetOptimalSupportedSampleRate()); - + // Selection mode of 0 means showing 'start' and 'end' only. mSelectionMode = gPrefs->ReadLong(wxT("/SelectionToolbarMode"), 0); } @@ -191,7 +191,7 @@ wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name, wxStaticText * SelectionBar::AddTitle( const wxString & Title, wxSizer * pSizer ){ wxStaticText * pTitle = safenew wxStaticText(this, -1,Title ); pTitle->SetForegroundColour( theTheme.Colour( clrTrackPanelText ) ); - pSizer->Add( pTitle,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + pSizer->Add( pTitle,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, (Title.Length() == 1 ) ? 0:5); return pTitle; } @@ -391,8 +391,11 @@ void SelectionBar::Populate() auto hSizer = std::make_unique(wxHORIZONTAL); mStartTime = AddTime(_("Start"), StartTimeID, hSizer.get() ); + mHyphen[0] = AddTitle( "-", hSizer.get() ); mLengthTime = AddTime(_("Length"), LengthTimeID, hSizer.get() ); + mHyphen[1] = AddTitle( "-", hSizer.get() ); mCenterTime = AddTime(_("Center"), CenterTimeID, hSizer.get() ); + mHyphen[2] = AddTitle( "-", hSizer.get() ); mEndTime = AddTime(_("End"), EndTimeID, hSizer.get() ); mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); // Put choice of what fields to show immediately before the fields. @@ -721,6 +724,12 @@ void SelectionBar::SetSelectionMode(int mode) mLengthCenterProxy->SetLabelText( (id == LengthCenterRadioID) ? _("Length - Center") : _("L-C") ); } + mStartEndRadBtn->SetToolTip( (id != StartEndRadioID) ? _("Show start time and end time") : "" ); + mStartLengthRadBtn->SetToolTip( (id != StartLengthRadioID) ? _("Show start time and length") : "" ); + mLengthEndRadBtn->SetToolTip( (id != LengthEndRadioID) ? _("Show length and end time") : "" ); + mLengthCenterRadBtn->SetToolTip( (id != LengthCenterRadioID) ? _("Show length and center") : "" ); + + mStartEndRadBtn->SetValue( id == StartEndRadioID ); mStartLengthRadBtn->SetValue( id == StartLengthRadioID ); mLengthEndRadBtn->SetValue( id == LengthEndRadioID ); @@ -735,6 +744,10 @@ void SelectionBar::SetSelectionMode(int mode) EndTimeID, LengthTimeID, EndTimeID, EndTimeID}; SetDrivers( Drive1[mode], Drive2[mode] ); + // Show just the hyphen after the first of the items. + for(int i=0;i<3;i++){ + mHyphen[i]->SetLabel( ((i+StartTimeID) == Drive2[mode]) ? "- " : "" ); + } // Then show/hide the relevant controls. ShowHideControls( mode ); diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index 047790695..798156623 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -110,6 +110,8 @@ class SelectionBar final : public ToolBar { wxStaticText * mLengthTitle; wxStaticText * mEndTitle; + wxStaticText * mHyphen[3]; + wxStaticText * mProxy; wxStaticText * mStartEndProxy; wxStaticText * mStartLengthProxy; From a8ac80eda97078d6e82f756a07ea03a79cc8645d Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 24 May 2017 20:28:44 -0400 Subject: [PATCH 85/85] Bug1651: NoteTrack sync-lock and crash fixes... Simplify the logic of duplication of NoteTrack. Duplicates are always in serialized state. Un-serialization can happen on demand in any of the NoteTrack operations that require a defined sequence. Changing the duration of the sequence after paste is needed, as it was also needed, when I fixed Stretch at commit 90eb4ec142f7d575d0870dd9c755589bff520cbe. I don't know if this should be considered a bug in Allegro that we are compensating. --- src/AudioIO.cpp | 4 +- src/Menus.cpp | 10 +- src/NoteTrack.cpp | 277 ++++++++++++++++++++++---------------- src/NoteTrack.h | 29 ++-- src/TrackArtist.cpp | 18 +-- src/import/ImportMIDI.cpp | 2 +- 6 files changed, 179 insertions(+), 161 deletions(-) diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index 02aabc12c..fb14bedbd 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -2130,7 +2130,7 @@ void AudioIO::PrepareMidiIterator(bool send, double offset) // Iterator not yet intialized, must add each track... for (i = 0; i < nTracks; i++) { NoteTrack *t = mMidiPlaybackTracks[i]; - Alg_seq_ptr seq = t->GetSequence(); + Alg_seq_ptr seq = &t->GetSeq(); // mark sequence tracks as "in use" since we're handing this // off to another thread and want to make sure nothing happens // to the data until playback finishes. This is just a sanity check. @@ -2387,7 +2387,7 @@ void AudioIO::StopStream() int nTracks = mMidiPlaybackTracks.size(); for (int i = 0; i < nTracks; i++) { NoteTrack *t = mMidiPlaybackTracks[i]; - Alg_seq_ptr seq = t->GetSequence(); + Alg_seq_ptr seq = &t->GetSeq(); seq->set_in_use(false); } diff --git a/src/Menus.cpp b/src/Menus.cpp index 5115387aa..8333c9f4b 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -7240,14 +7240,6 @@ void AudacityProject::OnScoreAlign() // Make a copy of the note track in case alignment is canceled or fails auto holder = nt->Duplicate(); auto alignedNoteTrack = static_cast(holder.get()); - // Duplicate() on note tracks serializes seq to a buffer, but we need - // the seq, so Duplicate again and discard the track with buffer. The - // test is here in case Duplicate() is changed in the future. - if (alignedNoteTrack->GetSequence() == NULL) { - holder = alignedNoteTrack->Duplicate(); - alignedNoteTrack = static_cast(holder.get()); - wxASSERT(alignedNoteTrack->GetSequence()); - } // Remove offset from NoteTrack because audio is // mixed starting at zero and incorporating clip offsets. if (alignedNoteTrack->GetOffset() < 0) { @@ -7287,7 +7279,7 @@ void AudacityProject::OnScoreAlign() #ifndef SKIP_ACTUAL_SCORE_ALIGNMENT result = scorealign((void *) &mix, &mixer_process, 2 /* channels */, 44100.0 /* srate */, endTime, - alignedNoteTrack->GetSequence(), &progress, params); + &alignedNoteTrack->GetSeq(), &progress, params); #else result = SA_SUCCESS; #endif diff --git a/src/NoteTrack.cpp b/src/NoteTrack.cpp index ca14c956d..473b3060e 100644 --- a/src/NoteTrack.cpp +++ b/src/NoteTrack.cpp @@ -127,15 +127,35 @@ NoteTrack::~NoteTrack() { } +Alg_seq &NoteTrack::GetSeq() const +{ + if (!mSeq) { + if (!mSerializationBuffer) + mSeq = std::make_unique(); + else { + std::unique_ptr alg_track + { Alg_seq::unserialize + ( mSerializationBuffer.get(), mSerializationLength ) }; + wxASSERT(alg_track->get_type() == 's'); + mSeq.reset( static_cast(alg_track.release()) ); + + // Preserve the invariant that at most one of the representations is + // valid + mSerializationBuffer.reset(); + mSerializationLength = 0; + } + } + wxASSERT(mSeq); + return *mSeq; +} + Track::Holder NoteTrack::Duplicate() const { auto duplicate = std::make_unique(mDirManager); duplicate->Init(*this); - // Duplicate on NoteTrack moves data from mSeq to mSerializationBuffer - // and from mSerializationBuffer to mSeq on alternate calls. Duplicate - // to the undo stack and Duplicate back to the project should result - // in serialized blobs on the undo stack and traversable data in the - // project object. + // The duplicate begins life in serialized state. Often the duplicate is + // pushed on the Undo stack. Then we want to un-serialize it (or a further + // copy) only on demand after an Undo. if (mSeq) { SonifyBeginSerialize(); wxASSERT(!mSerializationBuffer); @@ -145,15 +165,19 @@ Track::Holder NoteTrack::Duplicate() const &duplicate->mSerializationLength); duplicate->mSerializationBuffer.reset( (char*)buffer ); SonifyEndSerialize(); - } else if (mSerializationBuffer) { - SonifyBeginUnserialize(); + } + else if (mSerializationBuffer) { + // Copy already serialized data. wxASSERT(!mSeq); - std::unique_ptr alg_track{ Alg_seq::unserialize(mSerializationBuffer.get(), - mSerializationLength) }; - wxASSERT(alg_track->get_type() == 's'); - duplicate->mSeq.reset(static_cast(alg_track.release())); - SonifyEndUnserialize(); - } else wxFAIL_MSG("neither mSeq nor mSerializationBuffer were present"); // bug if neither mSeq nor mSerializationBuffer + duplicate->mSerializationLength = this->mSerializationLength; + duplicate->mSerializationBuffer.reset + ( new char[ this->mSerializationLength ] ); + memcpy( duplicate->mSerializationBuffer.get(), + this->mSerializationBuffer.get(), this->mSerializationLength ); + } + else { + // We are duplicating a default-constructed NoteTrack, and that's okay + } // copy some other fields here duplicate->SetBottomNote(mBottomNote); duplicate->SetPitchHeight(mPitchHeight); @@ -180,7 +204,7 @@ double NoteTrack::GetStartTime() const double NoteTrack::GetEndTime() const { - return GetStartTime() + (mSeq ? mSeq->get_real_dur() : 0.0); + return GetStartTime() + GetSeq().get_real_dur(); } @@ -188,25 +212,13 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1, const TimeWarper &warper, double semitones) { - // Since this is a duplicate and duplicates convert mSeq to - // a text string for saving as XML, we probably have to - // duplicate again to get back an mSeq double offset = this->GetOffset(); // track is shifted this amount - if (!mSeq) { // replace saveme with an (unserialized) duplicate - Track::Holder unt{ Duplicate() }; - const auto nt = static_cast(unt.get()); - wxASSERT(!mSeq && nt->mSeq && !nt->mSerializationBuffer); - // swap mSeq and Buffer between this and nt - nt->mSerializationBuffer = std::move(mSerializationBuffer); - nt->mSerializationLength = mSerializationLength; - mSerializationLength = 0; - mSeq = std::move(nt->mSeq); - } - mSeq->convert_to_seconds(); // make sure time units are right + auto &seq = GetSeq(); + seq.convert_to_seconds(); // make sure time units are right t1 -= offset; // adjust time range to compensate for track offset t0 -= offset; - if (t1 > mSeq->get_dur()) { // make sure t0, t1 are within sequence - t1 = mSeq->get_dur(); + if (t1 > seq.get_dur()) { // make sure t0, t1 are within sequence + t1 = seq.get_dur(); if (t0 >= t1) return; } Alg_iterator iter(mSeq.get(), false); @@ -219,8 +231,8 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1, } iter.end(); // now, use warper to warp the tempo map - mSeq->convert_to_beats(); // beats remain the same - Alg_time_map_ptr map = mSeq->get_time_map(); + seq.convert_to_beats(); // beats remain the same + Alg_time_map_ptr map = seq.get_time_map(); map->insert_beat(t0, map->time_to_beat(t0)); map->insert_beat(t1, map->time_to_beat(t1)); int i, len = map->length(); @@ -229,7 +241,7 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1, beat.time = warper.Warp(beat.time + offset) - offset; } // about to redisplay, so might as well convert back to time now - mSeq->convert_to_seconds(); + seq.convert_to_seconds(); } // Draws the midi channel toggle buttons within the given rect. @@ -348,11 +360,6 @@ void NoteTrack::SetSequence(std::unique_ptr &&seq) mSeq = std::move(seq); } -Alg_seq* NoteTrack::GetSequence() -{ - return mSeq.get(); -} - void NoteTrack::PrintSequence() { FILE *debugOutput; @@ -360,6 +367,8 @@ void NoteTrack::PrintSequence() debugOutput = fopen("debugOutput.txt", "wt"); fprintf(debugOutput, "Importing MIDI...\n"); + // This is called for debugging purposes. Do not compute mSeq on demand + // with GetSeq() if (mSeq) { int i = 0; @@ -416,15 +425,23 @@ Track::Holder NoteTrack::Cut(double t0, double t1) THROW_INCONSISTENCY_EXCEPTION; double len = t1-t0; + //auto delta = -( + //( std::min( t1, GetEndTime() ) ) - ( std::max( t0, GetStartTime() ) ) + //); auto newTrack = std::make_unique(mDirManager); newTrack->Init(*this); - mSeq->convert_to_seconds(); - newTrack->mSeq.reset(mSeq->cut(t0 - GetOffset(), len, false)); + auto &seq = GetSeq(); + seq.convert_to_seconds(); + newTrack->mSeq.reset(seq.cut(t0 - GetOffset(), len, false)); newTrack->SetOffset(GetOffset()); + // Not needed + // Alg_seq::cut seems to handle this + //AddToDuration( delta ); + // What should be done with the rest of newTrack's members? //(mBottomNote, mDirManager, mLastMidiPosition, // mSerializationBuffer, mSerializationLength, mVisibleChannels) @@ -444,8 +461,9 @@ Track::Holder NoteTrack::Copy(double t0, double t1, bool) const newTrack->Init(*this); - mSeq->convert_to_seconds(); - newTrack->mSeq.reset(mSeq->copy(t0 - GetOffset(), len, false)); + auto &seq = GetSeq(); + seq.convert_to_seconds(); + newTrack->mSeq.reset(seq.copy(t0 - GetOffset(), len, false)); newTrack->SetOffset(GetOffset()); // What should be done with the rest of newTrack's members? @@ -460,13 +478,23 @@ bool NoteTrack::Trim(double t0, double t1) { if (t1 < t0) return false; - mSeq->convert_to_seconds(); + auto &seq = GetSeq(); + //auto delta = -( + //( GetEndTime() - std::min( GetEndTime(), t1 ) ) + + //( std::max(t0, GetStartTime()) - GetStartTime() ) + //); + seq.convert_to_seconds(); // DELETE way beyond duration just in case something is out there: - mSeq->clear(t1 - GetOffset(), mSeq->get_dur() + 10000.0, false); + seq.clear(t1 - GetOffset(), seq.get_dur() + 10000.0, false); // Now that stuff beyond selection is cleared, clear before selection: - mSeq->clear(0.0, t0 - GetOffset(), false); + seq.clear(0.0, t0 - GetOffset(), false); // want starting time to be t0 SetOffset(t0); + + // Not needed + // Alg_seq::clear seems to handle this + //AddToDuration( delta ); + return true; } @@ -477,8 +505,15 @@ void NoteTrack::Clear(double t0, double t1) double len = t1-t0; - if (mSeq) - mSeq->clear(t0 - GetOffset(), len, false); + auto &seq = GetSeq(); + //auto delta = -( + //( std::min( t1, GetEndTime() ) ) - ( std::max( t0, GetStartTime() ) ) + //); + seq.clear(t0 - GetOffset(), len, false); + + // Not needed + // Alg_seq::clear seems to handle this + // AddToDuration( delta ); } void NoteTrack::Paste(double t, const Track *src) @@ -497,19 +532,27 @@ void NoteTrack::Paste(double t, const Track *src) return; NoteTrack* other = (NoteTrack*)src; - if (other->mSeq == NULL) - // THROW_INCONSISTENCY_EXCEPTION; // ? - return; - if(!mSeq) - mSeq = std::make_unique(); - - if (other->GetOffset() > 0) { - mSeq->convert_to_seconds(); - mSeq->insert_silence(t - GetOffset(), other->GetOffset()); - t += other->GetOffset(); + double delta = 0.0; + auto &seq = GetSeq(); + auto offset = other->GetOffset(); + if ( offset > 0 ) { + seq.convert_to_seconds(); + seq.insert_silence( t - GetOffset(), offset ); + t += offset; + // Is this needed or does Alg_seq::insert_silence take care of it? + //delta += offset; } - mSeq->paste(t - GetOffset(), other->mSeq.get()); + + // This seems to be needed: + delta += std::max( 0.0, t - GetEndTime() ); + + // This, not: + //delta += other->GetSeq().get_real_dur(); + + seq.paste(t - GetOffset(), &other->GetSeq()); + + AddToDuration( delta ); } void NoteTrack::Silence(double t0, double t1) @@ -519,20 +562,25 @@ void NoteTrack::Silence(double t0, double t1) auto len = t1 - t0; - mSeq->convert_to_seconds(); + auto &seq = GetSeq(); + seq.convert_to_seconds(); // XXX: do we want to set the all param? // If it's set, then it seems like notes are silenced if they start or end in the range, // otherwise only if they start in the range. --Poke - mSeq->silence(t0 - GetOffset(), len, false); + seq.silence(t0 - GetOffset(), len, false); } void NoteTrack::InsertSilence(double t, double len) { - if (len <= 0) + if (len < 0) THROW_INCONSISTENCY_EXCEPTION; - mSeq->convert_to_seconds(); - mSeq->insert_silence(t - GetOffset(), len); + auto &seq = GetSeq(); + seq.convert_to_seconds(); + seq.insert_silence(t - GetOffset(), len); + + // is this needed? + // AddToDuration( len ); } // Call this function to manipulate the underlying sequence data. This is @@ -540,22 +588,24 @@ void NoteTrack::InsertSilence(double t, double len) bool NoteTrack::Shift(double t) // t is always seconds { if (t > 0) { + auto &seq = GetSeq(); // insert an even number of measures - mSeq->convert_to_beats(); + seq.convert_to_beats(); // get initial tempo - double tempo = mSeq->get_tempo(0.0); - double beats_per_measure = mSeq->get_bar_len(0.0); + double tempo = seq.get_tempo(0.0); + double beats_per_measure = seq.get_bar_len(0.0); int m = ROUND(t * tempo / beats_per_measure); // need at least 1 measure, so if we rounded down to zero, fix it if (m == 0) m = 1; // compute NEW tempo so that m measures at NEW tempo take t seconds tempo = beats_per_measure * m / t; // in beats per second - mSeq->insert_silence(0.0, beats_per_measure * m); - mSeq->set_tempo(tempo * 60.0 /* bpm */, 0.0, beats_per_measure * m); - mSeq->write("afterShift.gro"); + seq.insert_silence(0.0, beats_per_measure * m); + seq.set_tempo(tempo * 60.0 /* bpm */, 0.0, beats_per_measure * m); + seq.write("afterShift.gro"); } else if (t < 0) { - mSeq->convert_to_seconds(); - mSeq->clear(0, t, true); + auto &seq = GetSeq(); + seq.convert_to_seconds(); + seq.clear(0, t, true); } else { // offset is zero, no modifications return false; } @@ -564,28 +614,35 @@ bool NoteTrack::Shift(double t) // t is always seconds QuantizedTimeAndBeat NoteTrack::NearestBeatTime( double time ) const { - wxASSERT(mSeq); // Alg_seq knows nothing about offset, so remove offset time double seq_time = time - GetOffset(); double beat; - seq_time = mSeq->nearest_beat_time(seq_time, &beat); + auto &seq = GetSeq(); + seq_time = seq.nearest_beat_time(seq_time, &beat); // add the offset back in to get "actual" audacity track time return { seq_time + GetOffset(), beat }; } +void NoteTrack::AddToDuration( double delta ) +{ + auto &seq = GetSeq(); +#if 0 + // PRL: Would this be better ? + seq.set_real_dur( seq.get_real_dur() + delta ); +#else + seq.convert_to_seconds(); + seq.set_dur( seq.get_dur() + delta ); +#endif +} + bool NoteTrack::StretchRegion ( QuantizedTimeAndBeat t0, QuantizedTimeAndBeat t1, double newDur ) { - bool result = mSeq->stretch_region( t0.second, t1.second, newDur ); + auto &seq = GetSeq(); + bool result = seq.stretch_region( t0.second, t1.second, newDur ); if (result) { const auto oldDur = t1.first - t0.first; -#if 0 - // PRL: Would this be better ? - mSeq->set_real_dur(mSeq->get_real_dur() + newDur - oldDur); -#else - mSeq->convert_to_seconds(); - mSeq->set_dur(mSeq->get_dur() + newDur - oldDur); -#endif + AddToDuration( newDur - oldDur ); } return result; } @@ -605,24 +662,21 @@ Alg_seq *NoteTrack::MakeExportableSeq(std::unique_ptr &cleanup) const cleanup.reset(); double offset = GetOffset(); if (offset == 0) - return mSeq.get(); + return &GetSeq(); // make a copy, deleting events that are shifted before time 0 double start = -offset; if (start < 0) start = 0; // notes that begin before "start" are not included even if they // extend past "start" (because "all" parameter is set to false) - cleanup.reset( mSeq->copy(start, mSeq->get_dur() - start, false) ); + cleanup.reset( GetSeq().copy(start, GetSeq().get_dur() - start, false) ); auto seq = cleanup.get(); if (offset > 0) { { - // Cheat a little - NoteTrack *pMutable = const_cast< NoteTrack * >(this); - // swap cleanup and mSeq so that Shift operates on the NEW copy - swap(pMutable->mSeq, cleanup); - auto cleanup2 = finally( [&] { swap(pMutable->mSeq, cleanup); } ); + swap( this->mSeq, cleanup ); + auto cleanup2 = finally( [&] { swap( this->mSeq, cleanup ); } ); - pMutable->Shift(offset); + const_cast< NoteTrack *>( this )->Shift(offset); } #ifdef OLD_CODE // now shift events by offset. This must be done with an integer @@ -665,27 +719,28 @@ Alg_seq *NoteTrack::MakeExportableSeq(std::unique_ptr &cleanup) const seq->set_tempo(bps * 60.0, 0, beats_per_measure * n); #endif } else { + auto &mySeq = GetSeq(); // if offset is negative, it might not be a multiple of beats, but // we want to preserve the relative positions of measures. I.e. we // should shift barlines and time signatures as well as notes. // Insert a time signature at the first bar-line if necessary. // Translate start from seconds to beats and call it beat: - double beat = mSeq->get_time_map()->time_to_beat(start); - // Find the time signature in mSeq in effect at start (beat): - int i = mSeq->time_sig.find_beat(beat); + double beat = mySeq.get_time_map()->time_to_beat(start); + // Find the time signature in mySeq in effect at start (beat): + int i = mySeq.time_sig.find_beat(beat); // i is where you would insert a NEW time sig at beat, // Case 1: beat coincides with a time sig at i. Time signature // at beat means that there is a barline at beat, so when beat // is shifted to 0, the relative barline positions are preserved - if (mSeq->time_sig.length() > 0 && - within(beat, mSeq->time_sig[i].beat, ALG_EPS)) { + if (mySeq.time_sig.length() > 0 && + within(beat, mySeq.time_sig[i].beat, ALG_EPS)) { // beat coincides with time signature change, so offset must // be a multiple of beats /* do nothing */ ; // Case 2: there is no time signature before beat. - } else if (i == 0 && (mSeq->time_sig.length() == 0 || - mSeq->time_sig[i].beat > beat)) { + } else if (i == 0 && (mySeq.time_sig.length() == 0 || + mySeq.time_sig[i].beat > beat)) { // If beat does not fall on an implied barline, we need to // insert a time signature. double measures = beat / 4.0; @@ -702,7 +757,7 @@ Alg_seq *NoteTrack::MakeExportableSeq(std::unique_ptr &cleanup) const // Case 3: i-1 must be the effective time sig position } else { i -= 1; // index the time signature in effect at beat - Alg_time_sig_ptr tsp = &(mSeq->time_sig[i]); + Alg_time_sig_ptr tsp = &(mySeq.time_sig[i]); double beats_per_measure = (tsp->num * 4) / tsp->den; double measures = (beat - tsp->beat) / beats_per_measure; int imeasures = ROUND(measures); @@ -738,12 +793,13 @@ bool NoteTrack::ExportAllegro(const wxString &f) const double offset = GetOffset(); bool in_seconds; gPrefs->Read(wxT("/FileFormats/AllegroStyle"), &in_seconds, true); + auto &seq = GetSeq(); if (in_seconds) { - mSeq->convert_to_seconds(); + seq.convert_to_seconds(); } else { - mSeq->convert_to_beats(); + seq.convert_to_beats(); } - return mSeq->write(f.mb_str(), offset); + return seq.write(f.mb_str(), offset); } @@ -811,28 +867,15 @@ void NoteTrack::WriteXML(XMLWriter &xmlFile) const // may throw { std::ostringstream data; - // Normally, Duplicate is called in pairs -- once to put NoteTrack - // on the Undo stack, and again to move from the Undo stack to an - // "active" editable state. For efficiency, we do not do a "real" - // Duplicate followed by serialization into a binary blob. Instead, - // we combine the Duplicate with serialization or unserialization. - // Serialization and Unserialization happen on alternate calls to - // Duplicate and (usually) produce the right results at the right - // time. - // It turns out that this optimized Duplicate is a little too - // clever. There is at least one case where a track can be duplicated - // and then AutoSave'd. (E.g. do an "Insert Silence" effect on a - // NoteTrack.) In this case, mSeq will be NULL. To avoid a crash - // and perform WriteXML, we may need to restore NoteTracks from binary - // blobs to regular data structures (with an Alg_seq member). Track::Holder holder; const NoteTrack *saveme = this; - if (!mSeq) { // replace saveme with an (unserialized) duplicate + if (!mSeq) { + // replace saveme with an (unserialized) duplicate, which is + // destroyed at end of function. holder = Duplicate(); saveme = static_cast(holder.get()); - wxASSERT(saveme->mSeq); } - saveme->mSeq->write(data, true); + saveme->GetSeq().write(data, true); xmlFile.StartTag(wxT("notetrack")); xmlFile.WriteAttr(wxT("name"), saveme->mName); this->NoteTrackBase::WriteXMLAttributes(xmlFile); diff --git a/src/NoteTrack.h b/src/NoteTrack.h index b02e97239..b149a85d7 100644 --- a/src/NoteTrack.h +++ b/src/NoteTrack.h @@ -65,8 +65,6 @@ class AUDACITY_DLL_API NoteTrack final : public NoteTrackBase { public: - friend class TrackArtist; - NoteTrack(const std::shared_ptr &projDirManager); virtual ~NoteTrack(); @@ -79,6 +77,8 @@ class AUDACITY_DLL_API NoteTrack final double GetStartTime() const override; double GetEndTime() const override; + Alg_seq &GetSeq() const; + void WarpAndTransposeNotes(double t0, double t1, const TimeWarper &warper, double semitones); @@ -86,7 +86,6 @@ class AUDACITY_DLL_API NoteTrack final bool LabelClick(const wxRect &rect, int x, int y, bool right); void SetSequence(std::unique_ptr &&seq); - Alg_seq* GetSequence(); void PrintSequence(); Alg_seq *MakeExportableSeq(std::unique_ptr &cleanup) const; @@ -208,21 +207,17 @@ class AUDACITY_DLL_API NoteTrack final else mVisibleChannels = CHANNEL_BIT(c); } + private: - std::unique_ptr mSeq; // NULL means no sequence - // when Duplicate() is called, assume that it is to put a copy - // of the track into the undo stack or to redo/copy from the - // stack to the project object. We want copies to the stack - // to be serialized (therefore compact) representations, so - // copy will set mSeq to NULL and serialize to the following - // variables. If this design is correct, the track will be - // duplicated again (in the event of redo) back to the project - // at which point we will unserialize the data back to the - // mSeq variable. (TrackArtist should check to make sure this - // flip-flop from mSeq to mSerializationBuffer happened an - // even number of times, otherwise mSeq will be NULL). - mutable std::unique_ptr mSerializationBuffer; // NULL means no buffer - long mSerializationLength; + void AddToDuration( double delta ); + + // These are mutable to allow NoteTrack to switch details of representation + // in logically const methods + // At most one of the two pointers is not null at any time. + // Both are null in a newly constructed NoteTrack. + mutable std::unique_ptr mSeq; + mutable std::unique_ptr mSerializationBuffer; + mutable long mSerializationLength; #ifdef EXPERIMENTAL_MIDI_OUT float mVelocity; // velocity offset diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 0e1840129..be9ef3f34 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -2730,7 +2730,7 @@ void TrackArtist::DrawNoteBackground(const NoteTrack *track, wxDC &dc, int left = TIME_TO_X(track->GetOffset()); if (left < sel.x) left = sel.x; // clip on left - int right = TIME_TO_X(track->GetOffset() + track->mSeq->get_real_dur()); + int right = TIME_TO_X(track->GetOffset() + track->GetSeq().get_real_dur()); if (right > sel.x + sel.width) right = sel.x + sel.width; // clip on right // need overlap between MIDI data and the background region @@ -2772,7 +2772,7 @@ void TrackArtist::DrawNoteBackground(const NoteTrack *track, wxDC &dc, } // draw bar lines - Alg_seq_ptr seq = track->mSeq.get(); + Alg_seq_ptr seq = &track->GetSeq(); // We assume that sliding a NoteTrack around slides the barlines // along with the notes. This means that when we write out a track // as Allegro or MIDI without the offset, we'll need to insert an @@ -2824,19 +2824,7 @@ void TrackArtist::DrawNoteTrack(const NoteTrack *track, const double h = X_TO_TIME(rect.x); const double h1 = X_TO_TIME(rect.x + rect.width); - Alg_seq_ptr seq = track->mSeq.get(); - if (!seq) { - wxASSERT(track->mSerializationBuffer); - // JKC: Previously this indirected via seq->, a NULL pointer. - // This was actually OK, since unserialize is a static function. - // Alg_seq:: is clearer. - std::unique_ptr alg_track{ Alg_seq::unserialize(track->mSerializationBuffer.get(), - track->mSerializationLength) }; - wxASSERT(alg_track->get_type() == 's'); - const_cast(track)->mSeq.reset(seq = static_cast(alg_track.release())); - track->mSerializationBuffer.reset(); - } - wxASSERT(seq); + Alg_seq_ptr seq = &track->GetSeq(); if (!track->GetSelected()) sel0 = sel1 = 0.0; diff --git a/src/import/ImportMIDI.cpp b/src/import/ImportMIDI.cpp index 49126e79d..e7275684e 100644 --- a/src/import/ImportMIDI.cpp +++ b/src/import/ImportMIDI.cpp @@ -62,7 +62,7 @@ bool ImportMIDI(const wxString &fName, NoteTrack * dest) dest->SetName(trackNameBase); mf.Close(); // the mean pitch should be somewhere in the middle of the display - Alg_iterator iterator(dest->GetSequence(), false); + Alg_iterator iterator( &dest->GetSeq(), false ); iterator.begin(); // for every event Alg_event_ptr evt;