From 30fc03d84d84232ac9bb72503a153527baa75f8d Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 09:33:38 +0100 Subject: [PATCH 01/17] lnwallet/test: pass in test channel type --- contractcourt/chain_arbitrator_test.go | 8 +- contractcourt/chain_watcher_test.go | 12 +- contractcourt/channel_arbitrator_test.go | 2 +- lnwallet/channel_test.go | 236 +++++++++++++++++------ lnwallet/test_utils.go | 38 ++-- 5 files changed, 208 insertions(+), 88 deletions(-) diff --git a/contractcourt/chain_arbitrator_test.go b/contractcourt/chain_arbitrator_test.go index 0ac7484a..2692e297 100644 --- a/contractcourt/chain_arbitrator_test.go +++ b/contractcourt/chain_arbitrator_test.go @@ -35,7 +35,9 @@ func TestChainArbitratorRepublishCloses(t *testing.T) { const numChans = 10 var channels []*channeldb.OpenChannel for i := 0; i < numChans; i++ { - lChannel, _, cleanup, err := lnwallet.CreateTestChannels(true) + lChannel, _, cleanup, err := lnwallet.CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatal(err) } @@ -149,7 +151,9 @@ func TestResolveContract(t *testing.T) { // With the DB created, we'll make a new channel, and mark it as // pending open within the database. - newChannel, _, cleanup, err := lnwallet.CreateTestChannels(true) + newChannel, _, cleanup, err := lnwallet.CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to make new test channel: %v", err) } diff --git a/contractcourt/chain_watcher_test.go b/contractcourt/chain_watcher_test.go index 466662c1..6dc47f53 100644 --- a/contractcourt/chain_watcher_test.go +++ b/contractcourt/chain_watcher_test.go @@ -63,7 +63,9 @@ func TestChainWatcherRemoteUnilateralClose(t *testing.T) { // First, we'll create two channels which already have established a // commitment contract between themselves. - aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -150,7 +152,9 @@ func TestChainWatcherRemoteUnilateralClosePendingCommit(t *testing.T) { // First, we'll create two channels which already have established a // commitment contract between themselves. - aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -274,7 +278,7 @@ func TestChainWatcherDataLossProtect(t *testing.T) { // First, we'll create two channels which already have // established a commitment contract between themselves. aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels( - false, + channeldb.SingleFunderBit, ) if err != nil { t.Fatalf("unable to create test channels: %v", err) @@ -443,7 +447,7 @@ func TestChainWatcherLocalForceCloseDetect(t *testing.T) { // First, we'll create two channels which already have // established a commitment contract between themselves. aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels( - false, + channeldb.SingleFunderBit, ) if err != nil { t.Fatalf("unable to create test channels: %v", err) diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index 0a73cd5e..b3301892 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -2005,7 +2005,7 @@ func TestRemoteCloseInitiator(t *testing.T) { // First, create alice's channel. alice, _, cleanUp, err := lnwallet.CreateTestChannels( - true, + channeldb.SingleFunderTweaklessBit, ) if err != nil { t.Fatalf("unable to create test channels: %v", diff --git a/lnwallet/channel_test.go b/lnwallet/channel_test.go index 511631bb..1b1ac942 100644 --- a/lnwallet/channel_test.go +++ b/lnwallet/channel_test.go @@ -60,7 +60,12 @@ func testAddSettleWorkflow(t *testing.T, tweakless bool) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(tweakless) + chanType := channeldb.SingleFunderTweaklessBit + if !tweakless { + chanType = channeldb.SingleFunderBit + } + + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(chanType) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -390,7 +395,9 @@ func TestCheckCommitTxSize(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -449,7 +456,9 @@ func TestCooperativeChannelClosure(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -522,7 +531,9 @@ func TestForceClose(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -808,7 +819,9 @@ func TestForceCloseDustOutput(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -926,7 +939,9 @@ func TestDustHTLCFees(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -970,7 +985,7 @@ func TestDustHTLCFees(t *testing.T) { // The commitment fee paid should be the same, as there have been no // new material outputs added. - defaultFee := calcStaticFee(0) + defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0) if aliceChannel.channelState.LocalCommitment.CommitFee != defaultFee { t.Fatalf("dust htlc amounts not subtracted from commitment fee "+ "expected %v, got %v", defaultFee, @@ -1003,7 +1018,9 @@ func TestHTLCDustLimit(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1046,7 +1063,7 @@ func TestHTLCDustLimit(t *testing.T) { t.Fatalf("incorrect # of outputs: expected %v, got %v", 2, len(bobCommitment.txn.TxOut)) } - defaultFee := calcStaticFee(0) + defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0) if bobChannel.channelState.LocalCommitment.CommitFee != defaultFee { t.Fatalf("dust htlc amount was subtracted from commitment fee "+ "expected %v, got %v", defaultFee, @@ -1092,7 +1109,9 @@ func TestHTLCSigNumber(t *testing.T) { // Create a test channel funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. Alice's dustlimit is 200 sat, while // Bob has 1300 sat. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1266,7 +1285,9 @@ func TestChannelBalanceDustLimit(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1280,7 +1301,7 @@ func TestChannelBalanceDustLimit(t *testing.T) { // This amount should leave an amount larger than Alice's dust limit // once fees have been subtracted, but smaller than Bob's dust limit. // We account in fees for the HTLC we will be adding. - defaultFee := calcStaticFee(1) + defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 1) aliceBalance := aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis() htlcSat := aliceBalance - defaultFee htlcSat += HtlcSuccessFee( @@ -1337,7 +1358,9 @@ func TestStateUpdatePersistence(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1678,7 +1701,9 @@ func TestCancelHTLC(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1711,7 +1736,7 @@ func TestCancelHTLC(t *testing.T) { // With the HTLC committed, Alice's balance should reflect the clearing // of the new HTLC. aliceExpectedBalance := btcutil.Amount(btcutil.SatoshiPerBitcoin*4) - - calcStaticFee(1) + calcStaticFee(channeldb.SingleFunderTweaklessBit, 1) if aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis() != aliceExpectedBalance { t.Fatalf("Alice's balance is wrong: expected %v, got %v", @@ -1756,12 +1781,13 @@ func TestCancelHTLC(t *testing.T) { } expectedBalance := btcutil.Amount(btcutil.SatoshiPerBitcoin * 5) + staticFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0) if aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis() != - expectedBalance-calcStaticFee(0) { + expectedBalance-staticFee { t.Fatalf("balance is wrong: expected %v, got %v", aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis(), - expectedBalance-calcStaticFee(0)) + expectedBalance-staticFee) } if aliceChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis() != expectedBalance { @@ -1778,11 +1804,11 @@ func TestCancelHTLC(t *testing.T) { expectedBalance) } if bobChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis() != - expectedBalance-calcStaticFee(0) { + expectedBalance-staticFee { t.Fatalf("balance is wrong: expected %v, got %v", bobChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis(), - expectedBalance-calcStaticFee(0)) + expectedBalance-staticFee) } } @@ -1792,7 +1818,9 @@ func TestCooperativeCloseDustAdherence(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -1957,7 +1985,9 @@ func TestCooperativeCloseDustAdherence(t *testing.T) { func TestUpdateFeeAdjustments(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2012,7 +2042,9 @@ func TestUpdateFeeAdjustments(t *testing.T) { func TestUpdateFeeFail(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2046,7 +2078,9 @@ func TestUpdateFeeFail(t *testing.T) { func TestUpdateFeeConcurrentSig(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2132,7 +2166,9 @@ func TestUpdateFeeSenderCommits(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2254,7 +2290,9 @@ func TestUpdateFeeReceiverCommits(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2403,7 +2441,9 @@ func TestUpdateFeeReceiverSendsUpdate(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2432,7 +2472,9 @@ func TestUpdateFeeMultipleUpdates(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2552,7 +2594,9 @@ func TestAddHTLCNegativeBalance(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, _, cleanUp, err := CreateTestChannels(true) + aliceChannel, _, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2633,7 +2677,9 @@ func TestChanSyncFullySynced(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -2753,7 +2799,9 @@ func TestChanSyncOweCommitment(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -3064,7 +3112,9 @@ func TestChanSyncOweCommitmentPendingRemote(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -3187,7 +3237,9 @@ func TestChanSyncOweRevocation(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -3377,7 +3429,9 @@ func TestChanSyncOweRevocationAndCommit(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -3546,7 +3600,9 @@ func TestChanSyncOweRevocationAndCommitForceTransition(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -3775,7 +3831,9 @@ func TestChanSyncFailure(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4028,7 +4086,9 @@ func TestFeeUpdateRejectInsaneFee(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, _, cleanUp, err := CreateTestChannels(true) + aliceChannel, _, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4056,7 +4116,9 @@ func TestChannelRetransmissionFeeUpdate(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4245,7 +4307,9 @@ func TestFeeUpdateOldDiskFormat(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4472,7 +4536,9 @@ func TestChanSyncUnableToSync(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4509,7 +4575,9 @@ func TestChanSyncInvalidLastSecret(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4599,7 +4667,9 @@ func TestChanAvailableBandwidth(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4735,7 +4805,9 @@ func TestChanAvailableBalanceNearHtlcFee(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4915,7 +4987,9 @@ func TestSignCommitmentFailNotLockedIn(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, _, cleanUp, err := CreateTestChannels(true) + aliceChannel, _, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -4940,7 +5014,9 @@ func TestLockedInHtlcForwardingSkipAfterRestart(t *testing.T) { t.Parallel() // First, we'll make a channel between Alice and Bob. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5254,7 +5330,9 @@ func TestInvalidCommitSigError(t *testing.T) { t.Parallel() // First, we'll make a channel between Alice and Bob. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5301,7 +5379,9 @@ func TestChannelUnilateralCloseHtlcResolution(t *testing.T) { // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5460,7 +5540,7 @@ func TestChannelUnilateralClosePendingCommit(t *testing.T) { // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( - false, + channeldb.SingleFunderBit, ) if err != nil { t.Fatalf("unable to create test channels: %v", err) @@ -5587,7 +5667,9 @@ func TestDesyncHTLCs(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5654,7 +5736,9 @@ func TestMaxAcceptedHTLCs(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5786,7 +5870,9 @@ func TestMaxAsynchronousHtlcs(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -5921,7 +6007,9 @@ func TestMaxPendingAmount(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6005,7 +6093,7 @@ func TestChanReserve(t *testing.T) { // We'll kick off the test by creating our channels which both // are loaded with 5 BTC each. aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( - true, + channeldb.SingleFunderTweaklessBit, ) if err != nil { t.Fatalf("unable to create test channels: %v", err) @@ -6214,7 +6302,7 @@ func TestChanReserveRemoteInitiator(t *testing.T) { // We start out with a channel where both parties have 5 BTC. aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( - true, + channeldb.SingleFunderTweaklessBit, ) if err != nil { t.Fatal(err) @@ -6267,7 +6355,7 @@ func TestChanReserveLocalInitiatorDustHtlc(t *testing.T) { t.Parallel() aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( - true, + channeldb.SingleFunderTweaklessBit, ) if err != nil { t.Fatal(err) @@ -6313,7 +6401,9 @@ func TestMinHTLC(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6366,7 +6456,9 @@ func TestNewBreachRetributionSkipsDustHtlcs(t *testing.T) { // We'll kick off the test by creating our channels which both are // loaded with 5 BTC each. - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6538,7 +6630,9 @@ func compareLogs(a, b *updateLog) error { func TestChannelRestoreUpdateLogs(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6707,7 +6801,9 @@ func restoreAndAssert(t *testing.T, channel *LightningChannel, numAddsLocal, func TestChannelRestoreUpdateLogsFailedHTLC(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6830,7 +6926,9 @@ func TestChannelRestoreUpdateLogsFailedHTLC(t *testing.T) { func TestDuplicateFailRejection(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6908,7 +7006,9 @@ func TestDuplicateFailRejection(t *testing.T) { func TestDuplicateSettleRejection(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -6989,7 +7089,9 @@ func TestDuplicateSettleRejection(t *testing.T) { func TestChannelRestoreCommitHeight(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -7176,7 +7278,9 @@ func TestChannelRestoreCommitHeight(t *testing.T) { func TestForceCloseFailLocalDataLoss(t *testing.T) { t.Parallel() - aliceChannel, _, cleanUp, err := CreateTestChannels(false) + aliceChannel, _, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -7207,7 +7311,9 @@ func TestForceCloseFailLocalDataLoss(t *testing.T) { func TestForceCloseBorkedState(t *testing.T) { t.Parallel() - aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false) + aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } @@ -7284,7 +7390,9 @@ func TestForceCloseBorkedState(t *testing.T) { func TestChannelMaxFeeRate(t *testing.T) { t.Parallel() - aliceChannel, _, cleanUp, err := CreateTestChannels(true) + aliceChannel, _, cleanUp, err := CreateTestChannels( + channeldb.SingleFunderTweaklessBit, + ) if err != nil { t.Fatalf("unable to create test channels: %v", err) } diff --git a/lnwallet/test_utils.go b/lnwallet/test_utils.go index 5253acdd..cbe1b2b3 100644 --- a/lnwallet/test_utils.go +++ b/lnwallet/test_utils.go @@ -91,7 +91,7 @@ var ( // the test has been finalized. The clean up function will remote all temporary // files created. If tweaklessCommits is true, then the commits within the // channels will use the new format, otherwise the legacy format. -func CreateTestChannels(tweaklessCommits bool) ( +func CreateTestChannels(chanType channeldb.ChannelType) ( *LightningChannel, *LightningChannel, func(), error) { channelCapacity, err := btcutil.NewAmount(10) @@ -206,11 +206,6 @@ func CreateTestChannels(tweaklessCommits bool) ( } aliceCommitPoint := input.ComputeCommitmentPoint(aliceFirstRevoke[:]) - chanType := channeldb.SingleFunderTweaklessBit - if !tweaklessCommits { - chanType = channeldb.SingleFunderBit - } - aliceCommitTx, bobCommitTx, err := CreateCommitmentTxns( channelBal, channelBal, &aliceCfg, &bobCfg, aliceCommitPoint, bobCommitPoint, *fundingTxIn, chanType, @@ -244,12 +239,21 @@ func CreateTestChannels(tweaklessCommits bool) ( if err != nil { return nil, nil, nil, err } - commitFee := calcStaticFee(0) + commitFee := calcStaticFee(chanType, 0) + var anchorAmt btcutil.Amount + if chanType.HasAnchors() { + anchorAmt += 2 * anchorSize + } + + aliceBalance := lnwire.NewMSatFromSatoshis( + channelBal - commitFee - anchorAmt, + ) + bobBalance := lnwire.NewMSatFromSatoshis(channelBal) aliceCommit := channeldb.ChannelCommitment{ CommitHeight: 0, - LocalBalance: lnwire.NewMSatFromSatoshis(channelBal - commitFee), - RemoteBalance: lnwire.NewMSatFromSatoshis(channelBal), + LocalBalance: aliceBalance, + RemoteBalance: bobBalance, CommitFee: commitFee, FeePerKw: btcutil.Amount(feePerKw), CommitTx: aliceCommitTx, @@ -257,8 +261,8 @@ func CreateTestChannels(tweaklessCommits bool) ( } bobCommit := channeldb.ChannelCommitment{ CommitHeight: 0, - LocalBalance: lnwire.NewMSatFromSatoshis(channelBal), - RemoteBalance: lnwire.NewMSatFromSatoshis(channelBal - commitFee), + LocalBalance: bobBalance, + RemoteBalance: aliceBalance, CommitFee: commitFee, FeePerKw: btcutil.Amount(feePerKw), CommitTx: bobCommitTx, @@ -449,14 +453,14 @@ func txFromHex(txHex string) (*btcutil.Tx, error) { // calculations into account. // // TODO(bvu): Refactor when dynamic fee estimation is added. -func calcStaticFee(numHTLCs int) btcutil.Amount { +func calcStaticFee(chanType channeldb.ChannelType, numHTLCs int) btcutil.Amount { const ( - commitWeight = btcutil.Amount(724) - htlcWeight = 172 - feePerKw = btcutil.Amount(24/4) * 1000 + htlcWeight = 172 + feePerKw = btcutil.Amount(24/4) * 1000 ) - return feePerKw * (commitWeight + - btcutil.Amount(htlcWeight*numHTLCs)) / 1000 + return feePerKw * + (btcutil.Amount(CommitWeight(chanType) + + htlcWeight*int64(numHTLCs))) / 1000 } // ForceStateTransition executes the necessary interaction between the two From dc6c4637b6f52e58afae6291c4400bbdf34ca7b3 Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Fri, 13 Dec 2019 11:14:22 +0100 Subject: [PATCH 02/17] lnwallet+channeldb: add anchor resolutions Co-authored-by: Joost Jager --- lnwallet/channel.go | 139 +++++++++++++++++++++++++++++++++++++++ lnwallet/channel_test.go | 63 +++++++++++++++++- 2 files changed, 199 insertions(+), 3 deletions(-) diff --git a/lnwallet/channel.go b/lnwallet/channel.go index aca93b99..6f64d34d 100644 --- a/lnwallet/channel.go +++ b/lnwallet/channel.go @@ -5115,6 +5115,11 @@ type UnilateralCloseSummary struct { // RemoteCommit is the exact commitment state that the remote party // broadcast. RemoteCommit channeldb.ChannelCommitment + + // AnchorResolution contains the data required to sweep our anchor + // output. If the channel type doesn't include anchors, the value of + // this field will be nil. + AnchorResolution *AnchorResolution } // NewUnilateralCloseSummary creates a new summary that provides the caller @@ -5229,12 +5234,20 @@ func NewUnilateralCloseSummary(chanState *channeldb.OpenChannel, signer input.Si closeSummary.LastChanSyncMsg = chanSync } + anchorResolution, err := NewAnchorResolution( + chanState, commitTxBroadcast, + ) + if err != nil { + return nil, err + } + return &UnilateralCloseSummary{ SpendDetail: commitSpend, ChannelCloseSummary: closeSummary, CommitResolution: commitResolution, HtlcResolutions: htlcResolutions, RemoteCommit: remoteCommit, + AnchorResolution: anchorResolution, }, nil } @@ -5685,6 +5698,16 @@ func extractHtlcResolutions(feePerKw chainfee.SatPerKWeight, ourCommit bool, }, nil } +// AnchorResolution holds the information necessary to spend our commitment tx +// anchor. +type AnchorResolution struct { + // AnchorSignDescriptor is the sign descriptor for our anchor. + AnchorSignDescriptor input.SignDescriptor + + // CommitAnchor is the anchor outpoint on the commit tx. + CommitAnchor wire.OutPoint +} + // LocalForceCloseSummary describes the final commitment state before the // channel is locked-down to initiate a force closure by broadcasting the // latest state on-chain. If we intend to broadcast this this state, the @@ -5717,6 +5740,11 @@ type LocalForceCloseSummary struct { // ChanSnapshot is a snapshot of the final state of the channel at the // time the summary was created. ChanSnapshot channeldb.ChannelSnapshot + + // AnchorResolution contains the data required to sweep the anchor + // output. If the channel type doesn't include anchors, the value of + // this field will be nil. + AnchorResolution *AnchorResolution } // ForceClose executes a unilateral closure of the transaction at the current @@ -5855,12 +5883,20 @@ func NewLocalForceCloseSummary(chanState *channeldb.OpenChannel, signer input.Si return nil, err } + anchorResolution, err := NewAnchorResolution( + chanState, commitTx, + ) + if err != nil { + return nil, err + } + return &LocalForceCloseSummary{ ChanPoint: chanState.FundingOutpoint, CloseTx: commitTx, CommitResolution: commitResolution, HtlcResolutions: htlcResolutions, ChanSnapshot: *chanState.Snapshot(), + AnchorResolution: anchorResolution, }, nil } @@ -6019,6 +6055,109 @@ func (lc *LightningChannel) CompleteCooperativeClose(localSig, remoteSig []byte, return closeTx, ourBalance, nil } +// NewAnchorResolutions returns the anchor resolutions for all currently valid +// commitment transactions. Because we have no view on the mempool, we can only +// blindly anchor all of these txes down. +func (lc *LightningChannel) NewAnchorResolutions() ([]*AnchorResolution, + error) { + + lc.Lock() + defer lc.Unlock() + + var resolutions []*AnchorResolution + + // Add anchor for local commitment tx, if any. + localRes, err := NewAnchorResolution( + lc.channelState, lc.channelState.LocalCommitment.CommitTx, + ) + if err != nil { + return nil, err + } + if localRes != nil { + resolutions = append(resolutions, localRes) + } + + // Add anchor for remote commitment tx, if any. + remoteRes, err := NewAnchorResolution( + lc.channelState, lc.channelState.RemoteCommitment.CommitTx, + ) + if err != nil { + return nil, err + } + if remoteRes != nil { + resolutions = append(resolutions, remoteRes) + } + + // Add anchor for remote pending commitment tx, if any. + remotePendingCommit, err := lc.channelState.RemoteCommitChainTip() + if err != nil && err != channeldb.ErrNoPendingCommit { + return nil, err + } + + if remotePendingCommit != nil { + remotePendingRes, err := NewAnchorResolution( + lc.channelState, + remotePendingCommit.Commitment.CommitTx, + ) + if err != nil { + return nil, err + } + + if remotePendingRes != nil { + resolutions = append(resolutions, remotePendingRes) + } + } + + return resolutions, nil +} + +// NewAnchorResolution returns the information that is required to sweep the +// local anchor. +func NewAnchorResolution(chanState *channeldb.OpenChannel, + commitTx *wire.MsgTx) (*AnchorResolution, error) { + + // Return nil resolution if the channel has no anchors. + if !chanState.ChanType.HasAnchors() { + return nil, nil + } + + // Derive our local anchor script. + localAnchor, _, err := CommitScriptAnchors( + &chanState.LocalChanCfg, &chanState.RemoteChanCfg, + ) + if err != nil { + return nil, err + } + + // Look up the script on the commitment transaction. It may not be + // present if there is no output paying to us. + found, index := input.FindScriptOutputIndex(commitTx, localAnchor.PkScript) + if !found { + return nil, nil + } + + outPoint := &wire.OutPoint{ + Hash: commitTx.TxHash(), + Index: index, + } + + // Instantiate the sign descriptor that allows sweeping of the anchor. + signDesc := &input.SignDescriptor{ + KeyDesc: chanState.LocalChanCfg.MultiSigKey, + WitnessScript: localAnchor.WitnessScript, + Output: &wire.TxOut{ + PkScript: localAnchor.PkScript, + Value: int64(anchorSize), + }, + HashType: txscript.SigHashAll, + } + + return &AnchorResolution{ + CommitAnchor: *outPoint, + AnchorSignDescriptor: *signDesc, + }, nil +} + // AvailableBalance returns the current balance available for sending within // the channel. By available balance, we mean that if at this very instance a // new commitment were to be created which evals all the log entries, what diff --git a/lnwallet/channel_test.go b/lnwallet/channel_test.go index 1b1ac942..47355f57 100644 --- a/lnwallet/channel_test.go +++ b/lnwallet/channel_test.go @@ -526,13 +526,36 @@ func TestCooperativeChannelClosure(t *testing.T) { // force close generates HTLC resolutions that are capable of sweeping both // incoming and outgoing HTLC's. func TestForceClose(t *testing.T) { + t.Run("tweakless", func(t *testing.T) { + testForceClose(t, &forceCloseTestCase{ + chanType: channeldb.SingleFunderTweaklessBit, + expectedCommitWeight: input.CommitWeight, + }) + }) + t.Run("anchors", func(t *testing.T) { + testForceClose(t, &forceCloseTestCase{ + chanType: channeldb.SingleFunderTweaklessBit | + channeldb.AnchorOutputsBit, + expectedCommitWeight: input.AnchorCommitWeight, + anchorAmt: anchorSize * 2, + }) + }) +} + +type forceCloseTestCase struct { + chanType channeldb.ChannelType + expectedCommitWeight int64 + anchorAmt btcutil.Amount +} + +func testForceClose(t *testing.T, testCase *forceCloseTestCase) { t.Parallel() // Create a test channel which will be used for the duration of this // unittest. The channel will be funded evenly with Alice having 5 BTC, // and Bob having 5 BTC. aliceChannel, bobChannel, cleanUp, err := CreateTestChannels( - channeldb.SingleFunderTweaklessBit, + testCase.chanType, ) if err != nil { t.Fatalf("unable to create test channels: %v", err) @@ -594,6 +617,36 @@ func TestForceClose(t *testing.T) { 1, len(closeSummary.HtlcResolutions.IncomingHTLCs)) } + // Verify the anchor resolutions for the anchor commitment format. + if testCase.chanType.HasAnchors() { + // Check the close summary resolution. + anchorRes := closeSummary.AnchorResolution + if anchorRes == nil { + t.Fatal("expected anchor resolution") + } + if anchorRes.CommitAnchor.Hash != closeSummary.CloseTx.TxHash() { + t.Fatal("commit tx not referenced by anchor res") + } + if anchorRes.AnchorSignDescriptor.Output.Value != + int64(anchorSize) { + + t.Fatal("unexpected anchor size") + } + if anchorRes.AnchorSignDescriptor.WitnessScript == nil { + t.Fatal("expected anchor witness script") + } + + // Check the pre-confirmation resolutions. + resList, err := aliceChannel.NewAnchorResolutions() + if err != nil { + t.Fatalf("pre-confirmation resolution error: %v", err) + } + + if len(resList) != 2 { + t.Fatal("expected two resolutions") + } + } + // The SelfOutputSignDesc should be non-nil since the output to-self is // non-dust. aliceCommitResolution := closeSummary.CommitResolution @@ -612,12 +665,16 @@ func TestForceClose(t *testing.T) { // Factoring in the fee rate, Alice's amount should properly reflect // that we've added two additional HTLC to the commitment transaction. - totalCommitWeight := int64(input.CommitWeight + (input.HTLCWeight * 2)) + totalCommitWeight := testCase.expectedCommitWeight + + (input.HTLCWeight * 2) feePerKw := chainfee.SatPerKWeight( aliceChannel.channelState.LocalCommitment.FeePerKw, ) commitFee := feePerKw.FeeForWeight(totalCommitWeight) - expectedAmount := (aliceChannel.Capacity / 2) - htlcAmount.ToSatoshis() - commitFee + + expectedAmount := (aliceChannel.Capacity / 2) - + htlcAmount.ToSatoshis() - commitFee - testCase.anchorAmt + if aliceCommitResolution.SelfOutputSignDesc.Output.Value != int64(expectedAmount) { t.Fatalf("alice incorrect output value in SelfOutputSignDesc, "+ "expected %v, got %v", int64(expectedAmount), From 1c93e9e03d7bb2fe8d89faea5c4ca01a6069cfcd Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Mon, 9 Dec 2019 12:17:58 +0100 Subject: [PATCH 03/17] sweep: isolate min fee rate bucket --- sweep/sweeper.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sweep/sweeper.go b/sweep/sweeper.go index 59971493..95c0ff2b 100644 --- a/sweep/sweeper.go +++ b/sweep/sweeper.go @@ -714,7 +714,15 @@ func (s *UtxoSweeper) sweepCluster(cluster inputCluster, func (s *UtxoSweeper) bucketForFeeRate( feeRate chainfee.SatPerKWeight) int { - return int(feeRate-s.relayFeeRate) / s.cfg.FeeRateBucketSize + // Create an isolated bucket for sweeps at the minimum fee rate. This is + // to prevent very small outputs (anchors) from becoming uneconomical if + // their fee rate would be averaged with higher fee rate inputs in a + // regular bucket. + if feeRate == s.relayFeeRate { + return 0 + } + + return 1 + int(feeRate-s.relayFeeRate)/s.cfg.FeeRateBucketSize } // clusterBySweepFeeRate takes the set of pending inputs within the UtxoSweeper From 29e1489179bccb6ac6568111b7341669c583f949 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 11 Mar 2020 18:14:26 +0100 Subject: [PATCH 04/17] sweep: leave exclusive group unchanged on parameter update Exclusive group is a static property that doesn't need to be updated. Requiring the exclusive group to be passed into UpdateParams creates a burden for the caller to make sure they supply the existing group. This change will be beneficial for users that bump anchor sweeps that have exclusive groups set. --- lnrpc/walletrpc/walletkit_server.go | 2 +- sweep/sweeper.go | 28 +++++++++++++++++++++++----- sweep/sweeper_test.go | 6 +++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lnrpc/walletrpc/walletkit_server.go b/lnrpc/walletrpc/walletkit_server.go index 42534c65..1cc5282d 100644 --- a/lnrpc/walletrpc/walletkit_server.go +++ b/lnrpc/walletrpc/walletkit_server.go @@ -486,7 +486,7 @@ func (w *WalletKit) BumpFee(ctx context.Context, // bump its fee, which will result in a replacement transaction (RBF) // being broadcast. If it is not aware of the input however, // lnwallet.ErrNotMine is returned. - params := sweep.Params{ + params := sweep.ParamsUpdate{ Fee: feePreference, Force: in.Force, } diff --git a/sweep/sweeper.go b/sweep/sweeper.go index 95c0ff2b..f176f703 100644 --- a/sweep/sweeper.go +++ b/sweep/sweeper.go @@ -82,6 +82,18 @@ type Params struct { ExclusiveGroup *uint64 } +// ParamsUpdate contains a new set of parameters to update a pending sweep with. +type ParamsUpdate struct { + // Fee is the fee preference of the client who requested the input to be + // swept. If a confirmation target is specified, then we'll map it into + // a fee rate whenever we attempt to cluster inputs for a sweep. + Fee FeePreference + + // Force indicates whether the input should be swept regardless of + // whether it is economical to do so. + Force bool +} + // String returns a human readable interpretation of the sweep parameters. func (p Params) String() string { return fmt.Sprintf("fee=%v, force=%v, exclusive_group=%v", @@ -174,7 +186,7 @@ type PendingInput struct { // intent to update the sweep parameters of a given input. type updateReq struct { input wire.OutPoint - params Params + params ParamsUpdate responseChan chan *updateResp } @@ -1119,7 +1131,7 @@ func (s *UtxoSweeper) handlePendingSweepsReq( // is actually successful. The responsibility of doing so should be handled by // the caller. func (s *UtxoSweeper) UpdateParams(input wire.OutPoint, - params Params) (chan Result, error) { + params ParamsUpdate) (chan Result, error) { // Ensure the client provided a sane fee preference. if _, err := s.feeRateForPreference(params.Fee); err != nil { @@ -1169,10 +1181,16 @@ func (s *UtxoSweeper) handleUpdateReq(req *updateReq, bestHeight int32) ( return nil, lnwallet.ErrNotMine } - log.Debugf("Updating sweep parameters for %v from %v to %v", req.input, - pendingInput.params, req.params) + // Create the updated parameters struct. Leave the exclusive group + // unchanged. + newParams := pendingInput.params + newParams.Fee = req.params.Fee + newParams.Force = req.params.Force - pendingInput.params = req.params + log.Debugf("Updating sweep parameters for %v from %v to %v", req.input, + pendingInput.params, newParams) + + pendingInput.params = newParams // We'll reset the input's publish height to the current so that a new // transaction can be created that replaces the transaction currently diff --git a/sweep/sweeper_test.go b/sweep/sweeper_test.go index 85908f7e..5fbfce4c 100644 --- a/sweep/sweeper_test.go +++ b/sweep/sweeper_test.go @@ -1179,7 +1179,7 @@ func TestBumpFeeRBF(t *testing.T) { // We'll first try to bump the fee of an output currently unknown to the // UtxoSweeper. Doing so should result in a lnwallet.ErrNotMine error. _, err := ctx.sweeper.UpdateParams( - wire.OutPoint{}, Params{Fee: lowFeePref}, + wire.OutPoint{}, ParamsUpdate{Fee: lowFeePref}, ) if err != lnwallet.ErrNotMine { t.Fatalf("expected error lnwallet.ErrNotMine, got \"%v\"", err) @@ -1208,13 +1208,13 @@ func TestBumpFeeRBF(t *testing.T) { ctx.estimator.blocksToFee[highFeePref.ConfTarget] = highFeeRate // We should expect to see an error if a fee preference isn't provided. - _, err = ctx.sweeper.UpdateParams(*input.OutPoint(), Params{}) + _, err = ctx.sweeper.UpdateParams(*input.OutPoint(), ParamsUpdate{}) if err != ErrNoFeePreference { t.Fatalf("expected ErrNoFeePreference, got %v", err) } bumpResult, err := ctx.sweeper.UpdateParams( - *input.OutPoint(), Params{Fee: highFeePref}, + *input.OutPoint(), ParamsUpdate{Fee: highFeePref}, ) if err != nil { t.Fatalf("unable to bump input's fee: %v", err) From c0b1b3be140637b27889ccdb14cf2eaa08331a29 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Thu, 12 Mar 2020 14:08:06 +0100 Subject: [PATCH 05/17] cnct: always set trigger height to close height Prior to this change, the trigger height for closed channels was set to the current best block height. As this height is in some cases used as a height hint, the spend may have been missed. --- contractcourt/channel_arbitrator.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 2a58ea52..1c4ee8e8 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -354,9 +354,6 @@ func (c *ChannelArbitrator) Start() error { return err } - log.Infof("ChannelArbitrator(%v): starting state=%v", c.cfg.ChanPoint, - c.state) - _, bestHeight, err := c.cfg.ChainIO.GetBestBlock() if err != nil { c.cfg.BlockEpochs.Cancel() @@ -391,14 +388,19 @@ func (c *ChannelArbitrator) Start() error { case channeldb.RemoteForceClose: trigger = remoteCloseTrigger } - triggerHeight = c.cfg.ClosingHeight log.Warnf("ChannelArbitrator(%v): detected stalled "+ - "state=%v for closed channel, using "+ - "trigger=%v", c.cfg.ChanPoint, c.state, trigger) + "state=%v for closed channel", + c.cfg.ChanPoint, c.state) } + + triggerHeight = c.cfg.ClosingHeight } + log.Infof("ChannelArbitrator(%v): starting state=%v, trigger=%v, "+ + "triggerHeight=%v", c.cfg.ChanPoint, c.state, trigger, + triggerHeight) + // Next we'll fetch our confirmed commitment set. This will only exist // if the channel has been closed out on chain for modern nodes. For // older nodes, this won't be found at all, and will rely on the From 7f3d4e7d49dd470c627f71cfd4b20447de42896e Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Fri, 24 Jan 2020 09:38:24 +0100 Subject: [PATCH 06/17] cnct: create channel interface for arbitrator Allows unit testing of the channel arbitrator with fewer dependencies. This is a preparation for the addition of anchor sweeping. --- contractcourt/chain_arbitrator.go | 99 ++++++++++++++++-------- contractcourt/channel_arbitrator.go | 26 ++++--- contractcourt/channel_arbitrator_test.go | 18 +++-- 3 files changed, 94 insertions(+), 49 deletions(-) diff --git a/contractcourt/chain_arbitrator.go b/contractcourt/chain_arbitrator.go index 7a9cb309..4d97b10b 100644 --- a/contractcourt/chain_arbitrator.go +++ b/contractcourt/chain_arbitrator.go @@ -220,6 +220,61 @@ func NewChainArbitrator(cfg ChainArbitratorConfig, } } +// arbChannel is a wrapper around an open channel that channel arbitrators +// interact with. +type arbChannel struct { + // channel is the in-memory channel state. + channel *channeldb.OpenChannel + + // c references the chain arbitrator and is used by arbChannel + // internally. + c *ChainArbitrator +} + +// ForceCloseChan should force close the contract that this attendant is +// watching over. We'll use this when we decide that we need to go to chain. It +// should in addition tell the switch to remove the corresponding link, such +// that we won't accept any new updates. The returned summary contains all items +// needed to eventually resolve all outputs on chain. +// +// NOTE: Part of the ArbChannel interface. +func (a *arbChannel) ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) { + // First, we mark the channel as borked, this ensure + // that no new state transitions can happen, and also + // that the link won't be loaded into the switch. + if err := a.channel.MarkBorked(); err != nil { + return nil, err + } + + // With the channel marked as borked, we'll now remove + // the link from the switch if its there. If the link + // is active, then this method will block until it + // exits. + chanPoint := a.channel.FundingOutpoint + + if err := a.c.cfg.MarkLinkInactive(chanPoint); err != nil { + log.Errorf("unable to mark link inactive: %v", err) + } + + // Now that we know the link can't mutate the channel + // state, we'll read the channel from disk the target + // channel according to its channel point. + channel, err := a.c.chanSource.FetchChannel(chanPoint) + if err != nil { + return nil, err + } + + // Finally, we'll force close the channel completing + // the force close workflow. + chanMachine, err := lnwallet.NewLightningChannel( + a.c.cfg.Signer, channel, nil, + ) + if err != nil { + return nil, err + } + return chanMachine.ForceClose() +} + // newActiveChannelArbitrator creates a new instance of an active channel // arbitrator given the state of the target channel. func newActiveChannelArbitrator(channel *channeldb.OpenChannel, @@ -247,42 +302,10 @@ func newActiveChannelArbitrator(channel *channeldb.OpenChannel, // all interfaces and methods the arbitrator needs to do its job. arbCfg := ChannelArbitratorConfig{ ChanPoint: chanPoint, + Channel: c.getArbChannel(channel), ShortChanID: channel.ShortChanID(), BlockEpochs: blockEpoch, - ForceCloseChan: func() (*lnwallet.LocalForceCloseSummary, error) { - // First, we mark the channel as borked, this ensure - // that no new state transitions can happen, and also - // that the link won't be loaded into the switch. - if err := channel.MarkBorked(); err != nil { - return nil, err - } - // With the channel marked as borked, we'll now remove - // the link from the switch if its there. If the link - // is active, then this method will block until it - // exits. - if err := c.cfg.MarkLinkInactive(chanPoint); err != nil { - log.Errorf("unable to mark link inactive: %v", err) - } - - // Now that we know the link can't mutate the channel - // state, we'll read the channel from disk the target - // channel according to its channel point. - channel, err := c.chanSource.FetchChannel(chanPoint) - if err != nil { - return nil, err - } - - // Finally, we'll force close the channel completing - // the force close workflow. - chanMachine, err := lnwallet.NewLightningChannel( - c.cfg.Signer, channel, nil, - ) - if err != nil { - return nil, err - } - return chanMachine.ForceClose() - }, MarkCommitmentBroadcasted: channel.MarkCommitmentBroadcasted, MarkChannelClosed: func(summary *channeldb.ChannelCloseSummary, statuses ...channeldb.ChannelStatus) error { @@ -339,6 +362,16 @@ func newActiveChannelArbitrator(channel *channeldb.OpenChannel, ), nil } +// getArbChannel returns an open channel wrapper for use by channel arbitrators. +func (c *ChainArbitrator) getArbChannel( + channel *channeldb.OpenChannel) *arbChannel { + + return &arbChannel{ + channel: channel, + c: c, + } +} + // ResolveContract marks a contract as fully resolved within the database. // This is only to be done once all contracts which were live on the channel // before hitting the chain have been resolved. diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 1c4ee8e8..8c6ba271 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -64,6 +64,18 @@ type WitnessBeacon interface { AddPreimages(preimages ...lntypes.Preimage) error } +// ArbChannel is an abstraction that allows the channel arbitrator to interact +// with an open channel. +type ArbChannel interface { + // ForceCloseChan should force close the contract that this attendant + // is watching over. We'll use this when we decide that we need to go + // to chain. It should in addition tell the switch to remove the + // corresponding link, such that we won't accept any new updates. The + // returned summary contains all items needed to eventually resolve all + // outputs on chain. + ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) +} + // ChannelArbitratorConfig contains all the functionality that the // ChannelArbitrator needs in order to properly arbitrate any contract dispute // on chain. @@ -72,6 +84,10 @@ type ChannelArbitratorConfig struct { // channel. ChanPoint wire.OutPoint + // Channel is the full channel data structure. For legacy channels, this + // field may not always be set after a restart. + Channel ArbChannel + // ShortChanID describes the exact location of the channel within the // chain. We'll use this to address any messages that we need to send // to the switch during contract resolution. @@ -88,14 +104,6 @@ type ChannelArbitratorConfig struct { // channel. ChainEvents *ChainEventSubscription - // ForceCloseChan should force close the contract that this attendant - // is watching over. We'll use this when we decide that we need to go - // to chain. It should in addition tell the switch to remove the - // corresponding link, such that we won't accept any new updates. The - // returned summary contains all items needed to eventually resolve all - // outputs on chain. - ForceCloseChan func() (*lnwallet.LocalForceCloseSummary, error) - // MarkCommitmentBroadcasted should mark the channel as the commitment // being broadcast, and we are waiting for the commitment to confirm. MarkCommitmentBroadcasted func(*wire.MsgTx, bool) error @@ -791,7 +799,7 @@ func (c *ChannelArbitrator) stateStep( // We'll tell the switch that it should remove the link for // this channel, in addition to fetching the force close // summary needed to close this channel on chain. - closeSummary, err := c.cfg.ForceCloseChan() + closeSummary, err := c.cfg.Channel.ForceCloseChan() if err != nil { log.Errorf("ChannelArbitrator(%v): unable to "+ "force close: %v", c.cfg.ChanPoint, err) diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index b3301892..46316d0c 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -360,13 +360,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog, resolvedChan <- struct{}{} return nil }, - ForceCloseChan: func() (*lnwallet.LocalForceCloseSummary, error) { - summary := &lnwallet.LocalForceCloseSummary{ - CloseTx: &wire.MsgTx{}, - HtlcResolutions: &lnwallet.HtlcResolutions{}, - } - return summary, nil - }, + Channel: &mockChannel{}, MarkCommitmentBroadcasted: func(_ *wire.MsgTx, _ bool) error { return nil }, @@ -2088,3 +2082,13 @@ func TestRemoteCloseInitiator(t *testing.T) { }) } } + +type mockChannel struct{} + +func (m *mockChannel) ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) { + summary := &lnwallet.LocalForceCloseSummary{ + CloseTx: &wire.MsgTx{}, + HtlcResolutions: &lnwallet.HtlcResolutions{}, + } + return summary, nil +} From dd77d9263e1b7f66ca284a02d99797cfaaac08dc Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Fri, 24 Jan 2020 12:08:13 +0100 Subject: [PATCH 07/17] cnct: persist anchor resolutions --- contractcourt/briefcase.go | 74 ++++++++++++++++++++++++++++- contractcourt/briefcase_test.go | 13 +++++ contractcourt/channel_arbitrator.go | 2 + 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/contractcourt/briefcase.go b/contractcourt/briefcase.go index 22adcbdc..6a3bfa8b 100644 --- a/contractcourt/briefcase.go +++ b/contractcourt/briefcase.go @@ -29,6 +29,11 @@ type ContractResolutions struct { // HtlcResolutions contains all data required to fully resolve any // incoming+outgoing HTLC's present within the commitment transaction. HtlcResolutions lnwallet.HtlcResolutions + + // AnchorResolution contains the data required to sweep the anchor + // output. If the channel type doesn't include anchors, the value of + // this field will be nil. + AnchorResolution *lnwallet.AnchorResolution } // IsEmpty returns true if the set of resolutions is "empty". A resolution is @@ -37,7 +42,8 @@ type ContractResolutions struct { func (c *ContractResolutions) IsEmpty() bool { return c.CommitResolution == nil && len(c.HtlcResolutions.IncomingHTLCs) == 0 && - len(c.HtlcResolutions.OutgoingHTLCs) == 0 + len(c.HtlcResolutions.OutgoingHTLCs) == 0 && + c.AnchorResolution == nil } // ArbitratorLog is the primary source of persistent storage for the @@ -263,6 +269,10 @@ var ( // the full set of resolutions for a channel. resolutionsKey = []byte("resolutions") + // anchorResolutionKey is the key under the logScope that we'll use to + // store the anchor resolution, if any. + anchorResolutionKey = []byte("anchor-resolution") + // actionsBucketKey is the key under the logScope that we'll use to // store all chain actions once they're determined. actionsBucketKey = []byte("chain-actions") @@ -630,7 +640,26 @@ func (b *boltArbitratorLog) LogContractResolutions(c *ContractResolutions) error } } - return scopeBucket.Put(resolutionsKey, b.Bytes()) + err = scopeBucket.Put(resolutionsKey, b.Bytes()) + if err != nil { + return err + } + + // Write out the anchor resolution if present. + if c.AnchorResolution != nil { + var b bytes.Buffer + err := encodeAnchorResolution(&b, c.AnchorResolution) + if err != nil { + return err + } + + err = scopeBucket.Put(anchorResolutionKey, b.Bytes()) + if err != nil { + return err + } + } + + return nil }) } @@ -710,6 +739,18 @@ func (b *boltArbitratorLog) FetchContractResolutions() (*ContractResolutions, er } } + anchorResBytes := scopeBucket.Get(anchorResolutionKey) + if anchorResBytes != nil { + c.AnchorResolution = &lnwallet.AnchorResolution{} + resReader := bytes.NewReader(anchorResBytes) + err := decodeAnchorResolution( + resReader, c.AnchorResolution, + ) + if err != nil { + return err + } + } + return nil }) if err != nil { @@ -1045,6 +1086,35 @@ func decodeCommitResolution(r io.Reader, return binary.Read(r, endian, &c.MaturityDelay) } +func encodeAnchorResolution(w io.Writer, + a *lnwallet.AnchorResolution) error { + + if _, err := w.Write(a.CommitAnchor.Hash[:]); err != nil { + return err + } + err := binary.Write(w, endian, a.CommitAnchor.Index) + if err != nil { + return err + } + + return input.WriteSignDescriptor(w, &a.AnchorSignDescriptor) +} + +func decodeAnchorResolution(r io.Reader, + a *lnwallet.AnchorResolution) error { + + _, err := io.ReadFull(r, a.CommitAnchor.Hash[:]) + if err != nil { + return err + } + err = binary.Read(r, endian, &a.CommitAnchor.Index) + if err != nil { + return err + } + + return input.ReadSignDescriptor(r, &a.AnchorSignDescriptor) +} + func encodeHtlcSetKey(w io.Writer, h *HtlcSetKey) error { err := binary.Write(w, endian, h.IsRemote) if err != nil { diff --git a/contractcourt/briefcase_test.go b/contractcourt/briefcase_test.go index 0cccd5a6..3408b2c6 100644 --- a/contractcourt/briefcase_test.go +++ b/contractcourt/briefcase_test.go @@ -46,6 +46,15 @@ var ( Index: 2, } + testChanPoint3 = wire.OutPoint{ + Hash: chainhash.Hash{ + 0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, + 0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, + 0x2d, 0xe7, 0x93, 0xe4, + }, + Index: 3, + } + testPreimage = [32]byte{ 0x52, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, @@ -540,6 +549,10 @@ func TestContractResolutionsStorage(t *testing.T) { }, }, }, + AnchorResolution: &lnwallet.AnchorResolution{ + CommitAnchor: testChanPoint3, + AnchorSignDescriptor: testSignDesc, + }, } // First make sure that fetching unlogged contract resolutions will diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 8c6ba271..6b517daf 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -2090,6 +2090,7 @@ func (c *ChannelArbitrator) channelAttendant(bestHeight int32) { CommitHash: closeTx.TxHash(), CommitResolution: closeInfo.CommitResolution, HtlcResolutions: *closeInfo.HtlcResolutions, + AnchorResolution: closeInfo.AnchorResolution, } // When processing a unilateral close event, we'll @@ -2156,6 +2157,7 @@ func (c *ChannelArbitrator) channelAttendant(bestHeight int32) { CommitHash: *uniClosure.SpenderTxHash, CommitResolution: uniClosure.CommitResolution, HtlcResolutions: *uniClosure.HtlcResolutions, + AnchorResolution: uniClosure.AnchorResolution, } // When processing a unilateral close event, we'll From c376cdb733103ef04caabd7e1351820ed5361397 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 13:23:17 +0100 Subject: [PATCH 08/17] input: add anchor witness type --- input/size.go | 45 +++++++++ input/size_test.go | 8 ++ input/witnessgen.go | 21 +++++ lnrpc/walletrpc/walletkit.pb.go | 140 +++++++++++++++------------- lnrpc/walletrpc/walletkit.proto | 6 ++ lnrpc/walletrpc/walletkit_server.go | 2 + 6 files changed, 155 insertions(+), 67 deletions(-) diff --git a/input/size.go b/input/size.go index 3db21fbb..32a89bcd 100644 --- a/input/size.go +++ b/input/size.go @@ -1,8 +1,12 @@ package input import ( + "math/big" + "github.com/btcsuite/btcd/blockchain" + "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/wire" + "github.com/lightningnetwork/lnd/keychain" ) const ( @@ -406,6 +410,47 @@ const ( OfferedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + OfferedHtlcScriptSize ) +// dummySigner is a fake signer used for size (upper bound) calculations. +type dummySigner struct { + Signer +} + +// SignOutputRaw generates a signature for the passed transaction according to +// the data within the passed SignDescriptor. +func (s *dummySigner) SignOutputRaw(tx *wire.MsgTx, signDesc *SignDescriptor) ( + []byte, error) { + + // Always return worst-case signature length, excluding the one byte + // sighash flag. + return make([]byte, 73-1), nil +} + +var ( + // dummyPubKey is a pubkey used in script size calculation. + dummyPubKey = btcec.PublicKey{ + X: &big.Int{}, + Y: &big.Int{}, + } + + // dummyAnchorScript is a script used for size calculation. + dummyAnchorScript, _ = CommitScriptAnchor(&dummyPubKey) + + // dummyAnchorWitness is a witness used for size calculation. + dummyAnchorWitness, _ = CommitSpendAnchor( + &dummySigner{}, + &SignDescriptor{ + KeyDesc: keychain.KeyDescriptor{ + PubKey: &dummyPubKey, + }, + WitnessScript: dummyAnchorScript, + }, + nil, + ) + + // AnchorWitnessSize 116 bytes + AnchorWitnessSize = dummyAnchorWitness.SerializeSize() +) + // EstimateCommitTxWeight estimate commitment transaction weight depending on // the precalculated weight of base transaction, witness data, which is needed // for paying for funding tx, and htlc weight multiplied by their count. diff --git a/input/size_test.go b/input/size_test.go index 91643402..fb57427c 100644 --- a/input/size_test.go +++ b/input/size_test.go @@ -280,3 +280,11 @@ func TestTxWeightEstimator(t *testing.T) { } } } + +// TestSizes guards calculated constants to make sure their values remain +// unchanged. +func TestSizes(t *testing.T) { + if input.AnchorWitnessSize != 116 { + t.Fatal("unexpected anchor witness size") + } +} diff --git a/input/witnessgen.go b/input/witnessgen.go index 7fc509cb..1a1fba6e 100644 --- a/input/witnessgen.go +++ b/input/witnessgen.go @@ -125,6 +125,10 @@ const ( // output on the counterparty's commitment transaction after a // confirmation. CommitmentToRemoteConfirmed StandardWitnessType = 13 + + // CommitmentAnchor is a witness that allows us to spend our anchor on + // the commitment transaction. + CommitmentAnchor StandardWitnessType = 14 ) // String returns a human readable version of the target WitnessType. @@ -138,6 +142,9 @@ func (wt StandardWitnessType) String() string { case CommitmentToRemoteConfirmed: return "CommitmentToRemoteConfirmed" + case CommitmentAnchor: + return "CommitmentAnchor" + case CommitmentNoDelay: return "CommitmentNoDelay" @@ -218,6 +225,16 @@ func (wt StandardWitnessType) WitnessGenerator(signer Signer, Witness: witness, }, nil + case CommitmentAnchor: + witness, err := CommitSpendAnchor(signer, desc, tx) + if err != nil { + return nil, err + } + + return &Script{ + Witness: witness, + }, nil + case CommitmentNoDelay: witness, err := CommitSpendNoDelay(signer, desc, tx, false) if err != nil { @@ -348,6 +365,10 @@ func (wt StandardWitnessType) SizeUpperBound() (int, bool, error) { case CommitmentToRemoteConfirmed: return ToRemoteConfirmedWitnessSize, false, nil + // Anchor output on the commitment transaction. + case CommitmentAnchor: + return AnchorWitnessSize, false, nil + // Outgoing second layer HTLC's that have confirmed within the // chain, and the output they produced is now mature enough to // sweep. diff --git a/lnrpc/walletrpc/walletkit.pb.go b/lnrpc/walletrpc/walletkit.pb.go index a8b56236..ce1e0813 100644 --- a/lnrpc/walletrpc/walletkit.pb.go +++ b/lnrpc/walletrpc/walletkit.pb.go @@ -84,6 +84,10 @@ const ( //A witness type that allows us to sweep an output that sends to a nested P2SH //script that pays to a key solely under our control. WitnessType_NESTED_WITNESS_KEY_HASH WitnessType = 12 + // + //A witness type that allows us to spend our anchor on the commitment + //transaction. + WitnessType_COMMITMENT_ANCHOR WitnessType = 13 ) var WitnessType_name = map[int32]string{ @@ -100,6 +104,7 @@ var WitnessType_name = map[int32]string{ 10: "HTLC_SECOND_LEVEL_REVOKE", 11: "WITNESS_KEY_HASH", 12: "NESTED_WITNESS_KEY_HASH", + 13: "COMMITMENT_ANCHOR", } var WitnessType_value = map[string]int32{ @@ -116,6 +121,7 @@ var WitnessType_value = map[string]int32{ "HTLC_SECOND_LEVEL_REVOKE": 10, "WITNESS_KEY_HASH": 11, "NESTED_WITNESS_KEY_HASH": 12, + "COMMITMENT_ANCHOR": 13, } func (x WitnessType) String() string { @@ -828,73 +834,73 @@ func init() { func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) } var fileDescriptor_6cc6942ac78249e5 = []byte{ - // 1047 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xea, 0x46, - 0x10, 0x2d, 0x21, 0x21, 0x30, 0x40, 0x42, 0x96, 0x3c, 0x7c, 0xb9, 0xb9, 0x0d, 0x75, 0x1f, 0x42, - 0x7d, 0x80, 0x9a, 0xa8, 0x55, 0x1f, 0x52, 0xd5, 0x84, 0x38, 0x22, 0x82, 0x60, 0x6a, 0x3b, 0x37, - 0xba, 0x55, 0xa5, 0x95, 0x03, 0x1b, 0x62, 0x01, 0xb6, 0xef, 0x7a, 0x29, 0xf8, 0x6b, 0x7f, 0x44, - 0xa5, 0xfe, 0x95, 0xfe, 0xba, 0xca, 0xeb, 0x07, 0x6b, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0x67, - 0x8e, 0x67, 0x67, 0xc7, 0x33, 0x81, 0x57, 0x0b, 0x73, 0x3a, 0x25, 0x8c, 0xba, 0xc3, 0x56, 0xf8, - 0x6b, 0x62, 0xb1, 0xa6, 0x4b, 0x1d, 0xe6, 0xa0, 0x42, 0x42, 0xd5, 0x0a, 0xd4, 0x1d, 0x86, 0x68, - 0xed, 0xd0, 0xb3, 0xc6, 0x76, 0x20, 0x0f, 0xfe, 0x12, 0x1a, 0xa2, 0xf2, 0x2f, 0x90, 0xeb, 0x12, - 0x5f, 0x23, 0xef, 0x51, 0x03, 0x2a, 0x13, 0xe2, 0xe3, 0x27, 0xcb, 0x1e, 0x13, 0x8a, 0x5d, 0x6a, - 0xd9, 0x4c, 0xca, 0xd4, 0x33, 0x8d, 0x1d, 0x6d, 0x6f, 0x42, 0xfc, 0x1b, 0x0e, 0x0f, 0x02, 0x14, - 0xbd, 0x01, 0xe0, 0x4a, 0x73, 0x66, 0x4d, 0x7d, 0x69, 0x8b, 0x6b, 0x0a, 0x81, 0x86, 0x03, 0x72, - 0x19, 0x8a, 0x97, 0xa3, 0x11, 0xd5, 0xc8, 0xfb, 0x39, 0xf1, 0x98, 0x2c, 0x43, 0x29, 0x7c, 0xf4, - 0x5c, 0xc7, 0xf6, 0x08, 0x42, 0xb0, 0x6d, 0x8e, 0x46, 0x94, 0x7b, 0x17, 0x34, 0xfe, 0x5b, 0xfe, - 0x04, 0x8a, 0x06, 0x35, 0x6d, 0xcf, 0x1c, 0x32, 0xcb, 0xb1, 0xd1, 0x11, 0xe4, 0xd8, 0x12, 0x3f, - 0x93, 0x25, 0x17, 0x95, 0xb4, 0x1d, 0xb6, 0xec, 0x90, 0xa5, 0xfc, 0x2d, 0xec, 0x0f, 0xe6, 0x8f, - 0x53, 0xcb, 0x7b, 0x4e, 0xcc, 0x3e, 0x86, 0xb2, 0x1b, 0x42, 0x98, 0x50, 0xea, 0xc4, 0xae, 0xa5, - 0x08, 0x54, 0x02, 0x4c, 0xfe, 0x0d, 0x90, 0x4e, 0xec, 0x91, 0x3a, 0x67, 0xee, 0x9c, 0x79, 0x51, - 0x5e, 0xe8, 0x14, 0xc0, 0x33, 0x19, 0x76, 0x09, 0xc5, 0x93, 0x05, 0x8f, 0xcb, 0x6a, 0x79, 0xcf, - 0x64, 0x03, 0x42, 0xbb, 0x0b, 0xd4, 0x80, 0x5d, 0x27, 0xd4, 0x4b, 0x5b, 0xf5, 0x6c, 0xa3, 0x78, - 0xbe, 0xd7, 0x8c, 0xea, 0xd7, 0x34, 0x96, 0xea, 0x9c, 0x69, 0x31, 0x2d, 0x7f, 0x09, 0xd5, 0x94, - 0x7b, 0x94, 0xd9, 0x11, 0xe4, 0xa8, 0xb9, 0xc0, 0x2c, 0x39, 0x03, 0x35, 0x17, 0xc6, 0x52, 0xfe, - 0x06, 0x90, 0xe2, 0x31, 0x6b, 0x66, 0x32, 0x72, 0x43, 0x48, 0x9c, 0xcb, 0x19, 0x14, 0x87, 0x8e, - 0xfd, 0x84, 0x99, 0x49, 0xc7, 0x24, 0x2e, 0x3b, 0x04, 0x90, 0xc1, 0x11, 0xf9, 0x02, 0xaa, 0xa9, - 0xb0, 0xe8, 0x25, 0xff, 0x79, 0x06, 0xf9, 0xaf, 0x2c, 0x94, 0x06, 0xc4, 0x1e, 0x59, 0xf6, 0x58, - 0x5f, 0x10, 0xe2, 0xa2, 0x2f, 0x20, 0x1f, 0x64, 0xed, 0xc4, 0x57, 0x5b, 0x3c, 0xdf, 0x6f, 0x4e, - 0xf9, 0x99, 0xd4, 0x39, 0x1b, 0x04, 0xb0, 0x96, 0x08, 0xd0, 0xf7, 0x50, 0x5a, 0x58, 0xcc, 0x26, - 0x9e, 0x87, 0x99, 0xef, 0x12, 0x7e, 0xcf, 0x7b, 0xe7, 0xc7, 0xcd, 0xa4, 0xb9, 0x9a, 0x0f, 0x21, - 0x6d, 0xf8, 0x2e, 0xd1, 0x8a, 0x8b, 0xd5, 0x43, 0xd0, 0x20, 0xe6, 0xcc, 0x99, 0xdb, 0x0c, 0x7b, - 0x26, 0x93, 0xb2, 0xf5, 0x4c, 0xa3, 0xac, 0x15, 0x42, 0x44, 0x37, 0x19, 0xaa, 0x43, 0x29, 0xce, - 0xfa, 0xd1, 0x67, 0x44, 0xda, 0xe6, 0x02, 0x08, 0xf3, 0xbe, 0xf2, 0x19, 0x41, 0x5f, 0x01, 0x7a, - 0xa4, 0x8e, 0x39, 0x1a, 0x9a, 0x1e, 0xc3, 0x26, 0x63, 0x64, 0xe6, 0x32, 0x4f, 0xda, 0xe1, 0xba, - 0x83, 0x84, 0xb9, 0x8c, 0x08, 0x74, 0x0e, 0x47, 0x36, 0x59, 0x32, 0xbc, 0x8a, 0x79, 0x26, 0xd6, - 0xf8, 0x99, 0x49, 0x39, 0x1e, 0x51, 0x0d, 0xc8, 0xab, 0x98, 0xeb, 0x70, 0x2a, 0x88, 0xa1, 0x61, - 0xf5, 0xc9, 0x08, 0x8b, 0xc5, 0xcf, 0x87, 0x31, 0x09, 0xd9, 0x4e, 0x6e, 0x01, 0x5d, 0xc0, 0xf1, - 0x2a, 0x26, 0x75, 0x84, 0xc2, 0x5a, 0x90, 0xbe, 0x3a, 0xcb, 0x21, 0xec, 0x3c, 0x39, 0x74, 0x48, - 0xa4, 0xdd, 0x7a, 0xa6, 0x91, 0xd7, 0xc2, 0x07, 0xf9, 0x18, 0x0e, 0xc5, 0xab, 0x89, 0xbb, 0x52, - 0x7e, 0x80, 0xa3, 0x35, 0x3c, 0xba, 0xea, 0x9f, 0x60, 0xcf, 0x0d, 0x09, 0xec, 0x71, 0x46, 0xca, - 0xf0, 0xbe, 0x3c, 0x11, 0x2e, 0x44, 0x8c, 0xd4, 0xca, 0xae, 0xe8, 0x23, 0xff, 0x99, 0x81, 0xbd, - 0xab, 0xf9, 0xcc, 0x15, 0xba, 0xee, 0x7f, 0xb5, 0xc3, 0x19, 0x14, 0xc3, 0x02, 0xf1, 0x62, 0xf1, - 0x6e, 0x28, 0x6b, 0x10, 0x42, 0x41, 0x89, 0x36, 0x6e, 0x35, 0xbb, 0x71, 0xab, 0x49, 0x25, 0xb6, - 0xc5, 0x4a, 0x1c, 0xc0, 0x7e, 0x92, 0x57, 0x78, 0xd6, 0xcf, 0xff, 0xc8, 0x42, 0x51, 0x68, 0x2e, - 0x54, 0x85, 0xfd, 0xfb, 0x7e, 0xb7, 0xaf, 0x3e, 0xf4, 0xf1, 0xc3, 0xad, 0xd1, 0x57, 0x74, 0xbd, - 0xf2, 0x01, 0x92, 0xe0, 0xb0, 0xad, 0xde, 0xdd, 0xdd, 0x1a, 0x77, 0x4a, 0xdf, 0xc0, 0xc6, 0xed, - 0x9d, 0x82, 0x7b, 0x6a, 0xbb, 0x5b, 0xc9, 0xa0, 0x13, 0xa8, 0x0a, 0x4c, 0x5f, 0xc5, 0xd7, 0x4a, - 0xef, 0xf2, 0x5d, 0x65, 0x0b, 0x1d, 0xc1, 0x81, 0x40, 0x68, 0xca, 0x5b, 0xb5, 0xab, 0x54, 0xb2, - 0x81, 0xbe, 0x63, 0xf4, 0xda, 0x58, 0xbd, 0xb9, 0x51, 0x34, 0xe5, 0x3a, 0x26, 0xb6, 0x83, 0x57, - 0x70, 0xe2, 0xb2, 0xdd, 0x56, 0x06, 0xc6, 0x8a, 0xd9, 0x41, 0x9f, 0xc2, 0x47, 0xa9, 0x90, 0xe0, - 0xf5, 0xea, 0xbd, 0x81, 0x75, 0xa5, 0xad, 0xf6, 0xaf, 0x71, 0x4f, 0x79, 0xab, 0xf4, 0x2a, 0x39, - 0xf4, 0x19, 0xc8, 0x69, 0x03, 0xfd, 0xbe, 0xdd, 0x56, 0x74, 0x3d, 0xad, 0xdb, 0x45, 0x67, 0xf0, - 0x7a, 0x2d, 0x83, 0x3b, 0xd5, 0x50, 0x62, 0xd7, 0x4a, 0x1e, 0xd5, 0xe1, 0x74, 0x3d, 0x13, 0xae, - 0x88, 0xfc, 0x2a, 0x05, 0x74, 0x0a, 0x12, 0x57, 0x88, 0xce, 0x71, 0xbe, 0x80, 0x0e, 0xa1, 0x12, - 0x55, 0x0e, 0x77, 0x95, 0x77, 0xb8, 0x73, 0xa9, 0x77, 0x2a, 0x45, 0xf4, 0x1a, 0x4e, 0xfa, 0x8a, - 0x1e, 0xd8, 0x6d, 0x90, 0xa5, 0xf3, 0xbf, 0xb7, 0xa1, 0xf0, 0xc0, 0x5b, 0xab, 0x6b, 0x31, 0xf4, - 0x03, 0x94, 0xaf, 0x09, 0xb5, 0x7e, 0x27, 0x7d, 0xb2, 0x64, 0x5d, 0xe2, 0xa3, 0x03, 0xa1, 0xef, - 0xc2, 0x0d, 0x52, 0x3b, 0x4e, 0x46, 0x64, 0x97, 0xf8, 0xd7, 0xc4, 0x1b, 0x52, 0xcb, 0x65, 0x0e, - 0x45, 0xdf, 0x41, 0x21, 0x8c, 0x0d, 0xe2, 0xaa, 0xa2, 0xa8, 0xe7, 0x0c, 0x4d, 0xe6, 0xd0, 0x17, - 0x23, 0x7f, 0x84, 0x7c, 0xf0, 0xbe, 0x60, 0x7f, 0x20, 0x71, 0xf2, 0x08, 0xfb, 0xa5, 0x76, 0xb2, - 0x81, 0x47, 0x5f, 0x4c, 0x07, 0x50, 0xb4, 0x2e, 0xc4, 0xdd, 0x22, 0xda, 0x08, 0x78, 0xad, 0x26, - 0x7e, 0x47, 0x6b, 0x5b, 0xa6, 0x07, 0x45, 0x61, 0xc4, 0xa3, 0x37, 0x82, 0x74, 0x73, 0xb1, 0xd4, - 0x3e, 0x7c, 0x89, 0x5e, 0xb9, 0x09, 0xb3, 0x3c, 0xe5, 0xb6, 0xb9, 0x1a, 0x52, 0x6e, 0xff, 0xb6, - 0x02, 0x34, 0x28, 0xa7, 0x06, 0x06, 0x3a, 0x7b, 0x61, 0x20, 0x24, 0xf9, 0xd5, 0x5f, 0x16, 0x44, - 0x9e, 0x3f, 0xc3, 0x6e, 0xf4, 0x49, 0xa2, 0x57, 0x82, 0x38, 0x3d, 0x3e, 0x52, 0x15, 0x5b, 0xfb, - 0x82, 0xaf, 0xbe, 0xfe, 0xb5, 0x35, 0xb6, 0xd8, 0xf3, 0xfc, 0xb1, 0x39, 0x74, 0x66, 0xad, 0x69, - 0x30, 0x71, 0x6d, 0xcb, 0x1e, 0xdb, 0x84, 0x2d, 0x1c, 0x3a, 0x69, 0x4d, 0xed, 0x51, 0x8b, 0x4f, - 0x9a, 0x56, 0x62, 0xf1, 0x98, 0xe3, 0xff, 0x90, 0x5c, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x3b, - 0x08, 0xac, 0xe2, 0xd9, 0x08, 0x00, 0x00, + // 1055 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xe2, 0x46, + 0x14, 0x2d, 0x21, 0x21, 0x70, 0x81, 0xc4, 0x19, 0xf2, 0xf0, 0xb2, 0xd9, 0x86, 0xba, 0x0f, 0xa1, + 0x3e, 0x40, 0x4d, 0xd4, 0xaa, 0x0f, 0xa9, 0x2a, 0x21, 0x8e, 0x88, 0x20, 0x98, 0xda, 0xce, 0x46, + 0x5b, 0x55, 0x1a, 0x39, 0x30, 0x21, 0x56, 0xc0, 0xf6, 0x8e, 0x87, 0x02, 0x7f, 0xa4, 0xd2, 0xfe, + 0x95, 0xfe, 0xba, 0xca, 0xe3, 0x07, 0x63, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0xe7, 0x1e, 0xdf, + 0xb9, 0x73, 0x7d, 0x6f, 0xe0, 0xd5, 0xdc, 0x9a, 0x4c, 0x08, 0xa3, 0xde, 0xb0, 0x19, 0xfe, 0x7a, + 0xb6, 0x59, 0xc3, 0xa3, 0x2e, 0x73, 0x51, 0x21, 0xa1, 0xaa, 0x05, 0xea, 0x0d, 0x43, 0xb4, 0x7a, + 0xe8, 0xdb, 0x63, 0x27, 0x90, 0x07, 0x7f, 0x09, 0x0d, 0x51, 0xe5, 0x37, 0xc8, 0x75, 0xc9, 0x52, + 0x27, 0xef, 0x51, 0x1d, 0xa4, 0x67, 0xb2, 0xc4, 0x8f, 0xb6, 0x33, 0x26, 0x14, 0x7b, 0xd4, 0x76, + 0x98, 0x9c, 0xa9, 0x65, 0xea, 0x3b, 0xfa, 0xde, 0x33, 0x59, 0x5e, 0x73, 0x78, 0x10, 0xa0, 0xe8, + 0x0d, 0x00, 0x57, 0x5a, 0x53, 0x7b, 0xb2, 0x94, 0xb7, 0xb8, 0xa6, 0x10, 0x68, 0x38, 0xa0, 0x94, + 0xa1, 0xd8, 0x1a, 0x8d, 0xa8, 0x4e, 0xde, 0xcf, 0x88, 0xcf, 0x14, 0x05, 0x4a, 0xe1, 0xa3, 0xef, + 0xb9, 0x8e, 0x4f, 0x10, 0x82, 0x6d, 0x6b, 0x34, 0xa2, 0xdc, 0xbb, 0xa0, 0xf3, 0xdf, 0xca, 0x67, + 0x50, 0x34, 0xa9, 0xe5, 0xf8, 0xd6, 0x90, 0xd9, 0xae, 0x83, 0x8e, 0x20, 0xc7, 0x16, 0xf8, 0x89, + 0x2c, 0xb8, 0xa8, 0xa4, 0xef, 0xb0, 0x45, 0x87, 0x2c, 0x94, 0xef, 0x61, 0x7f, 0x30, 0x7b, 0x98, + 0xd8, 0xfe, 0x53, 0x62, 0xf6, 0x29, 0x94, 0xbd, 0x10, 0xc2, 0x84, 0x52, 0x37, 0x76, 0x2d, 0x45, + 0xa0, 0x1a, 0x60, 0xca, 0x1f, 0x80, 0x0c, 0xe2, 0x8c, 0xb4, 0x19, 0xf3, 0x66, 0xcc, 0x8f, 0xf2, + 0x42, 0xa7, 0x00, 0xbe, 0xc5, 0xb0, 0x47, 0x28, 0x7e, 0x9e, 0xf3, 0xb8, 0xac, 0x9e, 0xf7, 0x2d, + 0x36, 0x20, 0xb4, 0x3b, 0x47, 0x75, 0xd8, 0x75, 0x43, 0xbd, 0xbc, 0x55, 0xcb, 0xd6, 0x8b, 0xe7, + 0x7b, 0x8d, 0xa8, 0x7e, 0x0d, 0x73, 0xa1, 0xcd, 0x98, 0x1e, 0xd3, 0xca, 0xd7, 0x50, 0x49, 0xb9, + 0x47, 0x99, 0x1d, 0x41, 0x8e, 0x5a, 0x73, 0xcc, 0x92, 0x33, 0x50, 0x6b, 0x6e, 0x2e, 0x94, 0xef, + 0x00, 0xa9, 0x3e, 0xb3, 0xa7, 0x16, 0x23, 0xd7, 0x84, 0xc4, 0xb9, 0x9c, 0x41, 0x71, 0xe8, 0x3a, + 0x8f, 0x98, 0x59, 0x74, 0x4c, 0xe2, 0xb2, 0x43, 0x00, 0x99, 0x1c, 0x51, 0x2e, 0xa0, 0x92, 0x0a, + 0x8b, 0x5e, 0xf2, 0x9f, 0x67, 0x50, 0x3e, 0x64, 0xa1, 0x34, 0x20, 0xce, 0xc8, 0x76, 0xc6, 0xc6, + 0x9c, 0x10, 0x0f, 0x7d, 0x05, 0xf9, 0x20, 0x6b, 0x37, 0xbe, 0xda, 0xe2, 0xf9, 0x7e, 0x63, 0xc2, + 0xcf, 0xa4, 0xcd, 0xd8, 0x20, 0x80, 0xf5, 0x44, 0x80, 0x7e, 0x84, 0xd2, 0xdc, 0x66, 0x0e, 0xf1, + 0x7d, 0xcc, 0x96, 0x1e, 0xe1, 0xf7, 0xbc, 0x77, 0x7e, 0xdc, 0x48, 0x9a, 0xab, 0x71, 0x1f, 0xd2, + 0xe6, 0xd2, 0x23, 0x7a, 0x71, 0xbe, 0x7a, 0x08, 0x1a, 0xc4, 0x9a, 0xba, 0x33, 0x87, 0x61, 0xdf, + 0x62, 0x72, 0xb6, 0x96, 0xa9, 0x97, 0xf5, 0x42, 0x88, 0x18, 0x16, 0x43, 0x35, 0x28, 0xc5, 0x59, + 0x3f, 0x2c, 0x19, 0x91, 0xb7, 0xb9, 0x00, 0xc2, 0xbc, 0x2f, 0x97, 0x8c, 0xa0, 0x6f, 0x00, 0x3d, + 0x50, 0xd7, 0x1a, 0x0d, 0x2d, 0x9f, 0x61, 0x8b, 0x31, 0x32, 0xf5, 0x98, 0x2f, 0xef, 0x70, 0xdd, + 0x41, 0xc2, 0xb4, 0x22, 0x02, 0x9d, 0xc3, 0x91, 0x43, 0x16, 0x0c, 0xaf, 0x62, 0x9e, 0x88, 0x3d, + 0x7e, 0x62, 0x72, 0x8e, 0x47, 0x54, 0x02, 0xf2, 0x32, 0xe6, 0x3a, 0x9c, 0x0a, 0x62, 0x68, 0x58, + 0x7d, 0x32, 0xc2, 0x62, 0xf1, 0xf3, 0x61, 0x4c, 0x42, 0xb6, 0x93, 0x5b, 0x40, 0x17, 0x70, 0xbc, + 0x8a, 0x49, 0x1d, 0xa1, 0xb0, 0x16, 0x64, 0xac, 0xce, 0x72, 0x08, 0x3b, 0x8f, 0x2e, 0x1d, 0x12, + 0x79, 0xb7, 0x96, 0xa9, 0xe7, 0xf5, 0xf0, 0x41, 0x39, 0x86, 0x43, 0xf1, 0x6a, 0xe2, 0xae, 0x54, + 0xee, 0xe1, 0x68, 0x0d, 0x8f, 0xae, 0xfa, 0x17, 0xd8, 0xf3, 0x42, 0x02, 0xfb, 0x9c, 0x91, 0x33, + 0xbc, 0x2f, 0x4f, 0x84, 0x0b, 0x11, 0x23, 0xf5, 0xb2, 0x27, 0xfa, 0x28, 0x7f, 0x65, 0x60, 0xef, + 0x72, 0x36, 0xf5, 0x84, 0xae, 0xfb, 0x5f, 0xed, 0x70, 0x06, 0xc5, 0xb0, 0x40, 0xbc, 0x58, 0xbc, + 0x1b, 0xca, 0x3a, 0x84, 0x50, 0x50, 0xa2, 0x8d, 0x5b, 0xcd, 0x6e, 0xdc, 0x6a, 0x52, 0x89, 0x6d, + 0xb1, 0x12, 0x07, 0xb0, 0x9f, 0xe4, 0x15, 0x9e, 0xf5, 0xcb, 0x0f, 0x59, 0x28, 0x0a, 0xcd, 0x85, + 0x2a, 0xb0, 0x7f, 0xd7, 0xef, 0xf6, 0xb5, 0xfb, 0x3e, 0xbe, 0xbf, 0x31, 0xfb, 0xaa, 0x61, 0x48, + 0x1f, 0x21, 0x19, 0x0e, 0xdb, 0xda, 0xed, 0xed, 0x8d, 0x79, 0xab, 0xf6, 0x4d, 0x6c, 0xde, 0xdc, + 0xaa, 0xb8, 0xa7, 0xb5, 0xbb, 0x52, 0x06, 0x9d, 0x40, 0x45, 0x60, 0xfa, 0x1a, 0xbe, 0x52, 0x7b, + 0xad, 0x77, 0xd2, 0x16, 0x3a, 0x82, 0x03, 0x81, 0xd0, 0xd5, 0xb7, 0x5a, 0x57, 0x95, 0xb2, 0x81, + 0xbe, 0x63, 0xf6, 0xda, 0x58, 0xbb, 0xbe, 0x56, 0x75, 0xf5, 0x2a, 0x26, 0xb6, 0x83, 0x57, 0x70, + 0xa2, 0xd5, 0x6e, 0xab, 0x03, 0x73, 0xc5, 0xec, 0xa0, 0xcf, 0xe1, 0x93, 0x54, 0x48, 0xf0, 0x7a, + 0xed, 0xce, 0xc4, 0x86, 0xda, 0xd6, 0xfa, 0x57, 0xb8, 0xa7, 0xbe, 0x55, 0x7b, 0x52, 0x0e, 0x7d, + 0x01, 0x4a, 0xda, 0xc0, 0xb8, 0x6b, 0xb7, 0x55, 0xc3, 0x48, 0xeb, 0x76, 0xd1, 0x19, 0xbc, 0x5e, + 0xcb, 0xe0, 0x56, 0x33, 0xd5, 0xd8, 0x55, 0xca, 0xa3, 0x1a, 0x9c, 0xae, 0x67, 0xc2, 0x15, 0x91, + 0x9f, 0x54, 0x40, 0xa7, 0x20, 0x73, 0x85, 0xe8, 0x1c, 0xe7, 0x0b, 0xe8, 0x10, 0xa4, 0xa8, 0x72, + 0xb8, 0xab, 0xbe, 0xc3, 0x9d, 0x96, 0xd1, 0x91, 0x8a, 0xe8, 0x35, 0x9c, 0xf4, 0x55, 0x23, 0xb0, + 0xdb, 0x20, 0x4b, 0x6b, 0xc5, 0x6a, 0xf5, 0xdb, 0x1d, 0x4d, 0x97, 0xca, 0xe7, 0x7f, 0x6f, 0x43, + 0xe1, 0x9e, 0x77, 0x5c, 0xd7, 0x66, 0xe8, 0x27, 0x28, 0x5f, 0x11, 0x6a, 0xff, 0x49, 0xfa, 0x64, + 0xc1, 0xba, 0x64, 0x89, 0x0e, 0x84, 0x76, 0x0c, 0x17, 0x4b, 0xf5, 0x38, 0x99, 0x9c, 0x5d, 0xb2, + 0xbc, 0x22, 0xfe, 0x90, 0xda, 0x1e, 0x73, 0x29, 0xfa, 0x01, 0x0a, 0x61, 0x6c, 0x10, 0x57, 0x11, + 0x45, 0x3d, 0x77, 0x68, 0x31, 0x97, 0xbe, 0x18, 0xf9, 0x33, 0xe4, 0x83, 0xf7, 0x05, 0x6b, 0x05, + 0x89, 0x03, 0x49, 0x58, 0x3b, 0xd5, 0x93, 0x0d, 0x3c, 0xfa, 0x90, 0x3a, 0x80, 0xa2, 0x2d, 0x22, + 0xae, 0x1c, 0xd1, 0x46, 0xc0, 0xab, 0x55, 0xf1, 0xf3, 0x5a, 0x5b, 0x3e, 0x3d, 0x28, 0x0a, 0x93, + 0x1f, 0xbd, 0x11, 0xa4, 0x9b, 0xfb, 0xa6, 0xfa, 0xf1, 0x4b, 0xf4, 0xca, 0x4d, 0x18, 0xf1, 0x29, + 0xb7, 0xcd, 0x8d, 0x91, 0x72, 0xfb, 0xb7, 0xcd, 0xa0, 0x43, 0x39, 0x35, 0x47, 0xd0, 0xd9, 0x0b, + 0x73, 0x22, 0xc9, 0xaf, 0xf6, 0xb2, 0x20, 0xf2, 0xfc, 0x15, 0x76, 0xa3, 0x2f, 0x15, 0xbd, 0x12, + 0xc4, 0xe9, 0xa9, 0x92, 0xaa, 0xd8, 0xda, 0x87, 0x7d, 0xf9, 0xed, 0xef, 0xcd, 0xb1, 0xcd, 0x9e, + 0x66, 0x0f, 0x8d, 0xa1, 0x3b, 0x6d, 0x4e, 0x82, 0x41, 0xec, 0xd8, 0xce, 0xd8, 0x21, 0x6c, 0xee, + 0xd2, 0xe7, 0xe6, 0xc4, 0x19, 0x35, 0xf9, 0x00, 0x6a, 0x26, 0x16, 0x0f, 0x39, 0xfe, 0x7f, 0xca, + 0xc5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x3f, 0xcd, 0xa5, 0xf0, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/walletrpc/walletkit.proto b/lnrpc/walletrpc/walletkit.proto index 267af2fd..96f2ce06 100644 --- a/lnrpc/walletrpc/walletkit.proto +++ b/lnrpc/walletrpc/walletkit.proto @@ -164,6 +164,12 @@ enum WitnessType { script that pays to a key solely under our control. */ NESTED_WITNESS_KEY_HASH = 12; + + /* + A witness type that allows us to spend our anchor on the commitment + transaction. + */ + COMMITMENT_ANCHOR = 13; } message PendingSweep { diff --git a/lnrpc/walletrpc/walletkit_server.go b/lnrpc/walletrpc/walletkit_server.go index 1cc5282d..edfeb35c 100644 --- a/lnrpc/walletrpc/walletkit_server.go +++ b/lnrpc/walletrpc/walletkit_server.go @@ -390,6 +390,8 @@ func (w *WalletKit) PendingSweeps(ctx context.Context, witnessType = WitnessType_WITNESS_KEY_HASH case input.NestedWitnessKeyHash: witnessType = WitnessType_NESTED_WITNESS_KEY_HASH + case input.CommitmentAnchor: + witnessType = WitnessType_COMMITMENT_ANCHOR default: log.Warnf("Unhandled witness type %v for input %v", pendingInput.WitnessType, pendingInput.OutPoint) From 3b517390d8db4ce4dd0f989b1b300bdf4e9f27a1 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 11 Mar 2020 08:52:20 +0100 Subject: [PATCH 09/17] cnct+sweeper: give contract court access to relay fee Relay fee is needed later to sweep anchors at the minimum fee rate. --- contractcourt/commit_sweep_resolver_test.go | 5 +++++ contractcourt/interfaces.go | 5 +++++ sweep/sweeper.go | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/contractcourt/commit_sweep_resolver_test.go b/contractcourt/commit_sweep_resolver_test.go index c142167e..e5c7df05 100644 --- a/contractcourt/commit_sweep_resolver_test.go +++ b/contractcourt/commit_sweep_resolver_test.go @@ -10,6 +10,7 @@ import ( "github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnwallet" + "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/sweep" ) @@ -120,6 +121,10 @@ func (s *mockSweeper) CreateSweepTx(inputs []input.Input, feePref sweep.FeePrefe return nil, nil } +func (s *mockSweeper) RelayFeePerKW() chainfee.SatPerKWeight { + return 253 +} + var _ UtxoSweeper = &mockSweeper{} // TestCommitSweepResolverNoDelay tests resolution of a direct commitment output diff --git a/contractcourt/interfaces.go b/contractcourt/interfaces.go index 18dfbc0e..5497dad8 100644 --- a/contractcourt/interfaces.go +++ b/contractcourt/interfaces.go @@ -9,6 +9,7 @@ import ( "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/invoices" "github.com/lightningnetwork/lnd/lntypes" + "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/sweep" ) @@ -51,4 +52,8 @@ type UtxoSweeper interface { // estimate before generating the required witnesses. CreateSweepTx(inputs []input.Input, feePref sweep.FeePreference, currentBlockHeight uint32) (*wire.MsgTx, error) + + // RelayFeePerKW returns the minimum fee rate required for transactions + // to be relayed. + RelayFeePerKW() chainfee.SatPerKWeight } diff --git a/sweep/sweeper.go b/sweep/sweeper.go index f176f703..3b9acebe 100644 --- a/sweep/sweeper.go +++ b/sweep/sweeper.go @@ -384,6 +384,12 @@ func (s *UtxoSweeper) Start() error { return nil } +// RelayFeePerKW returns the minimum fee rate required for transactions to be +// relayed. +func (s *UtxoSweeper) RelayFeePerKW() chainfee.SatPerKWeight { + return s.relayFeeRate +} + // Stop stops sweeper from listening to block epochs and constructing sweep // txes. func (s *UtxoSweeper) Stop() error { From e8e99c65339074f3b311e32e6a2d39cd613dc469 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Thu, 12 Mar 2020 17:34:55 +0100 Subject: [PATCH 10/17] cnct: simplify channel arbitrator state logging --- contractcourt/channel_arbitrator.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 6b517daf..313e8a53 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -850,28 +850,24 @@ func (c *ChannelArbitrator) stateStep( // We are waiting for a commitment to be confirmed, so any // other trigger will be ignored. case chainTrigger, userTrigger: - log.Infof("ChannelArbitrator(%v): noop trigger %v", - c.cfg.ChanPoint, trigger) nextState = StateCommitmentBroadcasted // If this state advance was triggered by any of the // commitments being confirmed, then we'll jump to the state // where the contract has been closed. case localCloseTrigger, remoteCloseTrigger: - log.Infof("ChannelArbitrator(%v): trigger %v, "+ - " going to StateContractClosed", - c.cfg.ChanPoint, trigger) nextState = StateContractClosed // If a coop close or breach was confirmed, jump straight to // the fully resolved state. case coopCloseTrigger, breachCloseTrigger: - log.Infof("ChannelArbitrator(%v): trigger %v, "+ - " going to StateFullyResolved", - c.cfg.ChanPoint, trigger) nextState = StateFullyResolved } + log.Infof("ChannelArbitrator(%v): trigger %v moving from "+ + "state %v to %v", c.cfg.ChanPoint, trigger, c.state, + nextState) + // If we're in this state, then the contract has been fully closed to // outside sub-systems, so we'll process the prior set of on-chain // contract actions and launch a set of resolvers. From d2b6472843e70c072e239dcc59b76dd902df2429 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 14:01:39 +0100 Subject: [PATCH 11/17] cnct: pre-confirmation anchor sweep Start anchor sweep attempts immediately after the commitment transaction has been published. This makes the anchor known to the sweeper and allows the user to bump the fee on it to get their commitment transaction confirmed in case the fee committed too is insufficient for timely confirmation. --- contractcourt/chain_arbitrator.go | 27 +++++++ contractcourt/channel_arbitrator.go | 80 +++++++++++++++++++- contractcourt/channel_arbitrator_test.go | 94 +++++++++++++++++++++++- lntest/itest/lnd_test.go | 35 ++++++--- 4 files changed, 221 insertions(+), 15 deletions(-) diff --git a/contractcourt/chain_arbitrator.go b/contractcourt/chain_arbitrator.go index 4d97b10b..a9dde542 100644 --- a/contractcourt/chain_arbitrator.go +++ b/contractcourt/chain_arbitrator.go @@ -231,6 +231,33 @@ type arbChannel struct { c *ChainArbitrator } +// NewAnchorResolutions returns the anchor resolutions for currently valid +// commitment transactions. +// +// NOTE: Part of the ArbChannel interface. +func (a *arbChannel) NewAnchorResolutions() ([]*lnwallet.AnchorResolution, + error) { + + // Get a fresh copy of the database state to base the anchor resolutions + // on. Unfortunately the channel instance that we have here isn't the + // same instance that is used by the link. + chanPoint := a.channel.FundingOutpoint + + channel, err := a.c.chanSource.FetchChannel(chanPoint) + if err != nil { + return nil, err + } + + chanMachine, err := lnwallet.NewLightningChannel( + a.c.cfg.Signer, channel, nil, + ) + if err != nil { + return nil, err + } + + return chanMachine.NewAnchorResolutions() +} + // ForceCloseChan should force close the contract that this attendant is // watching over. We'll use this when we decide that we need to go to chain. It // should in addition tell the switch to remove the corresponding link, such diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 313e8a53..f0cc1f31 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -13,9 +13,11 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/channeldb" + "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" + "github.com/lightningnetwork/lnd/sweep" ) var ( @@ -74,6 +76,10 @@ type ArbChannel interface { // returned summary contains all items needed to eventually resolve all // outputs on chain. ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) + + // NewAnchorResolutions returns the anchor resolutions for currently + // valid commitment transactions. + NewAnchorResolutions() ([]*lnwallet.AnchorResolution, error) } // ChannelArbitratorConfig contains all the functionality that the @@ -847,9 +853,31 @@ func (c *ChannelArbitrator) stateStep( // to be confirmed. case StateCommitmentBroadcasted: switch trigger { - // We are waiting for a commitment to be confirmed, so any - // other trigger will be ignored. + + // We are waiting for a commitment to be confirmed. case chainTrigger, userTrigger: + // The commitment transaction has been broadcast, but it + // doesn't necessarily need to be the commitment + // transaction version that is going to be confirmed. To + // be sure that any of those versions can be anchored + // down, we now submit all anchor resolutions to the + // sweeper. The sweeper will keep trying to sweep all of + // them. + // + // Note that the sweeper is idempotent. If we ever + // happen to end up at this point in the code again, no + // harm is done by re-offering the anchors to the + // sweeper. + anchors, err := c.cfg.Channel.NewAnchorResolutions() + if err != nil { + return StateError, closeTx, err + } + + err = c.sweepAnchors(anchors, triggerHeight) + if err != nil { + return StateError, closeTx, err + } + nextState = StateCommitmentBroadcasted // If this state advance was triggered by any of the @@ -979,6 +1007,54 @@ func (c *ChannelArbitrator) stateStep( return nextState, closeTx, nil } +// sweepAnchors offers all given anchor resolutions to the sweeper. It requests +// sweeping at the minimum fee rate. This fee rate can be upped manually by the +// user via the BumpFee rpc. +func (c *ChannelArbitrator) sweepAnchors(anchors []*lnwallet.AnchorResolution, + heightHint uint32) error { + + // Use the chan id as the exclusive group. This prevents any of the + // anchors from being batched together. + exclusiveGroup := c.cfg.ShortChanID.ToUint64() + + // Retrieve the current minimum fee rate from the sweeper. + minFeeRate := c.cfg.Sweeper.RelayFeePerKW() + + for _, anchor := range anchors { + log.Debugf("ChannelArbitrator(%v): pre-confirmation sweep of "+ + "anchor of tx %v", c.cfg.ChanPoint, anchor.CommitAnchor) + + // Prepare anchor output for sweeping. + anchorInput := input.MakeBaseInput( + &anchor.CommitAnchor, + input.CommitmentAnchor, + &anchor.AnchorSignDescriptor, + heightHint, + ) + + // Sweep anchor output with the minimum fee rate. This usually + // (up to a min relay fee of 3 sat/b) means that the anchor + // sweep will be economical. Also signal that this is a force + // sweep. If the user decides to bump the fee on the anchor + // sweep, it will be swept even if it isn't economical. + _, err := c.cfg.Sweeper.SweepInput( + &anchorInput, + sweep.Params{ + Fee: sweep.FeePreference{ + FeeRate: minFeeRate, + }, + Force: true, + ExclusiveGroup: &exclusiveGroup, + }, + ) + if err != nil { + return err + } + } + + return nil +} + // launchResolvers updates the activeResolvers list and starts the resolvers. func (c *ChannelArbitrator) launchResolvers(resolvers []ContractResolver) { c.activeResolversLock.Lock() diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index 46316d0c..b78f3c31 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -197,6 +197,8 @@ type chanArbTestCtx struct { resolutions chan []ResolutionMsg log ArbitratorLog + + sweeper *mockSweeper } func (c *chanArbTestCtx) CleanUp() { @@ -314,6 +316,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog, incubateChan := make(chan struct{}) chainIO := &mockChainIO{} + mockSweeper := newMockSweeper() chainArbCfg := ChainArbitratorConfig{ ChainIO: chainIO, PublishTx: func(*wire.MsgTx) error { @@ -343,7 +346,8 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog, return true }, - Clock: clock.NewDefaultClock(), + Clock: clock.NewDefaultClock(), + Sweeper: mockSweeper, } // We'll use the resolvedChan to synchronize on call to @@ -420,6 +424,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog, blockEpochs: blockEpochs, log: log, incubationRequests: incubateChan, + sweeper: mockSweeper, }, nil } @@ -2083,7 +2088,92 @@ func TestRemoteCloseInitiator(t *testing.T) { } } -type mockChannel struct{} +// TestChannelArbitratorAnchors asserts that the commitment tx anchor is swept. +func TestChannelArbitratorAnchors(t *testing.T) { + log := &mockArbitratorLog{ + state: StateDefault, + newStates: make(chan ArbitratorState, 5), + } + + chanArbCtx, err := createTestChannelArbitrator(t, log) + if err != nil { + t.Fatalf("unable to create ChannelArbitrator: %v", err) + } + chanArb := chanArbCtx.chanArb + chanArb.cfg.PreimageDB = newMockWitnessBeacon() + chanArb.cfg.Registry = &mockRegistry{} + + // Setup two pre-confirmation anchor resolutions on the mock channel. + chanArb.cfg.Channel.(*mockChannel).anchorResolutions = + []*lnwallet.AnchorResolution{ + {}, {}, + } + + if err := chanArb.Start(); err != nil { + t.Fatalf("unable to start ChannelArbitrator: %v", err) + } + defer func() { + if err := chanArb.Stop(); err != nil { + t.Fatal(err) + } + }() + + // Create htlcUpdates channel. + htlcUpdates := make(chan *ContractUpdate) + + signals := &ContractSignals{ + HtlcUpdates: htlcUpdates, + ShortChanID: lnwire.ShortChannelID{}, + } + chanArb.UpdateContractSignals(signals) + + errChan := make(chan error, 1) + respChan := make(chan *wire.MsgTx, 1) + + // With the channel found, and the request crafted, we'll send over a + // force close request to the arbitrator that watches this channel. + chanArb.forceCloseReqs <- &forceCloseReq{ + errResp: errChan, + closeTx: respChan, + } + + // The force close request should trigger broadcast of the commitment + // transaction. + chanArbCtx.AssertStateTransitions( + StateBroadcastCommit, + StateCommitmentBroadcasted, + ) + + // With the commitment tx still unconfirmed, we expect sweep attempts + // for all three versions of the commitment transaction. + <-chanArbCtx.sweeper.sweptInputs + <-chanArbCtx.sweeper.sweptInputs + + select { + case <-respChan: + case <-time.After(5 * time.Second): + t.Fatalf("no response received") + } + + select { + case err := <-errChan: + if err != nil { + t.Fatalf("error force closing channel: %v", err) + } + case <-time.After(5 * time.Second): + t.Fatalf("no response received") + } +} + +type mockChannel struct { + anchorResolutions []*lnwallet.AnchorResolution +} + +func (m *mockChannel) NewAnchorResolutions() ([]*lnwallet.AnchorResolution, + error) { + + return m.anchorResolutions, nil +} func (m *mockChannel) ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) { summary := &lnwallet.LocalForceCloseSummary{ diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index cc344372..d84ed114 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -8604,13 +8604,19 @@ func assertNumPendingChannels(t *harnessTest, node *lntest.HarnessNode, // on chain as he has no funds in the channel. func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest, carol *lntest.HarnessNode, carolStartingBalance int64, - dave *lntest.HarnessNode, daveStartingBalance int64) { + dave *lntest.HarnessNode, daveStartingBalance int64, + anchors bool) { // Upon reconnection, the nodes should detect that Dave is out of sync. // Carol should force close the channel using her latest commitment. + expectedTxes := 1 + if anchors { + expectedTxes = 2 + } + ctxb := context.Background() - forceClose, err := waitForTxInMempool( - net.Miner.Node, minerMempoolTimeout, + _, err := waitForNTxsInMempool( + net.Miner.Node, expectedTxes, minerMempoolTimeout, ) if err != nil { t.Fatalf("unable to find Carol's force close tx in mempool: %v", @@ -8633,12 +8639,13 @@ func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest, } // Generate a single block, which should confirm the closing tx. - block := mineBlocks(t, net, 1, 1)[0] - assertTxInBlock(t, block, forceClose) + block := mineBlocks(t, net, 1, expectedTxes)[0] // Dave should sweep his funds immediately, as they are not timelocked. - daveSweep, err := waitForTxInMempool( - net.Miner.Node, minerMempoolTimeout, + // We also expect Dave to sweep his anchor, if present. + + _, err = waitForNTxsInMempool( + net.Miner.Node, expectedTxes, minerMempoolTimeout, ) if err != nil { t.Fatalf("unable to find Dave's sweep tx in mempool: %v", err) @@ -8653,8 +8660,7 @@ func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest, assertNumPendingChannels(t, carol, 0, 1) // Mine the sweep tx. - block = mineBlocks(t, net, 1, 1)[0] - assertTxInBlock(t, block, daveSweep) + block = mineBlocks(t, net, 1, expectedTxes)[0] // Now Dave should consider the channel fully closed. assertNumPendingChannels(t, dave, 0, 0) @@ -8925,6 +8931,7 @@ func testDataLossProtection(net *lntest.NetworkHarness, t *harnessTest) { // on chain, and both of them properly carry out the DLP protocol. assertDLPExecuted( net, t, carol, carolStartingBalance, dave, daveStartingBalance, + false, ) // As a second part of this test, we will test the scenario where a @@ -14048,9 +14055,14 @@ func testChanRestoreScenario(t *harnessTest, net *lntest.NetworkHarness, } defer shutdownAndAssert(net, t, carol) - // Now that our new node is created, we'll give him some coins it can - // use to open channels with Carol. + // Now that our new nodes are created, we'll give them some coins for + // channel opening and anchor sweeping. ctxt, _ := context.WithTimeout(ctxb, defaultTimeout) + err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, carol) + if err != nil { + t.Fatalf("unable to send coins to dave: %v", err) + } + ctxt, _ = context.WithTimeout(ctxb, defaultTimeout) err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, dave) if err != nil { t.Fatalf("unable to send coins to dave: %v", err) @@ -14216,6 +14228,7 @@ func testChanRestoreScenario(t *harnessTest, net *lntest.NetworkHarness, // end of the protocol. assertDLPExecuted( net, t, carol, carolStartingBalance, dave, daveStartingBalance, + testCase.anchorCommit, ) } From 07a39b1ebf49af316239fda2f0d2c918b68ce01b Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 15:07:14 +0100 Subject: [PATCH 12/17] cnct: do not persist stateless resolvers Preparation for the anchor resolver which does not have persistent state. --- contractcourt/briefcase.go | 9 +++++++-- contractcourt/channel_arbitrator_test.go | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/contractcourt/briefcase.go b/contractcourt/briefcase.go index 6a3bfa8b..1114f6db 100644 --- a/contractcourt/briefcase.go +++ b/contractcourt/briefcase.go @@ -372,6 +372,13 @@ func fetchContractWriteBucket(tx *bbolt.Tx, scopeKey []byte) (*bbolt.Bucket, err func (b *boltArbitratorLog) writeResolver(contractBucket *bbolt.Bucket, res ContractResolver) error { + // Only persist resolvers that are stateful. Stateless resolvers don't + // expose a resolver key. + resKey := res.ResolverKey() + if resKey == nil { + return nil + } + // First, we'll write to the buffer the type of this resolver. Using // this byte, we can later properly deserialize the resolver properly. var ( @@ -400,8 +407,6 @@ func (b *boltArbitratorLog) writeResolver(contractBucket *bbolt.Bucket, return err } - resKey := res.ResolverKey() - return contractBucket.Put(resKey, buf.Bytes()) } diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index b78f3c31..dcf969e9 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -83,6 +83,11 @@ func (b *mockArbitratorLog) InsertUnresolvedContracts( b.Lock() for _, resolver := range resolvers { + resKey := resolver.ResolverKey() + if resKey == nil { + continue + } + b.resolvers[resolver] = struct{}{} } b.Unlock() From d84b596f55707f71691be049a42de8ce104e30b8 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 15:13:50 +0100 Subject: [PATCH 13/17] cnct: do not ignore resolver reports after resolution Preparation for anchor resolver. The recovered anchor amount should still be included in the pending channel report even after it has been resolved. This also fixes an existing bug that in some cases caused the recovered amount from an htlc resolver not to be included in the total. --- contractcourt/channel_arbitrator.go | 4 ---- rpcserver.go | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index f0cc1f31..34ed98d3 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -575,10 +575,6 @@ func (c *ChannelArbitrator) Report() []*ContractReport { continue } - if r.IsResolved() { - continue - } - report := r.report() if report == nil { continue diff --git a/rpcserver.go b/rpcserver.go index 841520a3..bed4e79d 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2817,6 +2817,12 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint, case contractcourt.ReportOutputIncomingHtlc, contractcourt.ReportOutputOutgoingHtlc: + // Don't report details on htlcs that are no longer in + // limbo. + if report.LimboBalance == 0 { + break + } + incoming := report.Type == contractcourt.ReportOutputIncomingHtlc htlc := &lnrpc.PendingHTLC{ Incoming: incoming, From ea397c9d6e6d6ec65f0812785c2ce63ea582eed3 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Mon, 25 Nov 2019 13:17:44 +0100 Subject: [PATCH 14/17] cnct: resolve anchors post-confirmation Sweeping anchors and being able to bump the fee was already added in a previous commit. This commit extends anchor sweeping with an anchor resolver object that becomes active after the commitment tx confirms. At that point, the anchors do not serve the purpose of getting the commitment tranaction confirmed anymore. It is however still possible to reclaim some of their value if using a low fee rate. --- contractcourt/anchor_resolver.go | 165 ++++++++++++++++++++ contractcourt/channel_arbitrator.go | 34 +++- contractcourt/channel_arbitrator_test.go | 63 ++++++++ contractcourt/commit_sweep_resolver_test.go | 18 ++- contractcourt/interfaces.go | 8 + 5 files changed, 282 insertions(+), 6 deletions(-) create mode 100644 contractcourt/anchor_resolver.go diff --git a/contractcourt/anchor_resolver.go b/contractcourt/anchor_resolver.go new file mode 100644 index 00000000..02f44cfc --- /dev/null +++ b/contractcourt/anchor_resolver.go @@ -0,0 +1,165 @@ +package contractcourt + +import ( + "errors" + "io" + + "github.com/btcsuite/btcd/wire" + "github.com/lightningnetwork/lnd/input" + "github.com/lightningnetwork/lnd/lnwallet" + "github.com/lightningnetwork/lnd/sweep" +) + +// anchorResolver is a resolver that will attempt to sweep our anchor output. +type anchorResolver struct { + // anchorSignDescriptor contains the information that is required to + // sweep the anchor. + anchorSignDescriptor input.SignDescriptor + + // anchor is the outpoint on the commitment transaction. + anchor wire.OutPoint + + // resolved reflects if the contract has been fully resolved or not. + resolved bool + + // broadcastHeight is the height that the original contract was + // broadcast to the main-chain at. We'll use this value to bound any + // historical queries to the chain for spends/confirmations. + broadcastHeight uint32 + + // chanPoint is the channel point of the original contract. + chanPoint wire.OutPoint + + contractResolverKit +} + +// newAnchorResolver instantiates a new anchor resolver. +func newAnchorResolver(anchorSignDescriptor input.SignDescriptor, + anchor wire.OutPoint, broadcastHeight uint32, + chanPoint wire.OutPoint, resCfg ResolverConfig) *anchorResolver { + + r := &anchorResolver{ + contractResolverKit: *newContractResolverKit(resCfg), + anchorSignDescriptor: anchorSignDescriptor, + anchor: anchor, + broadcastHeight: broadcastHeight, + chanPoint: chanPoint, + } + + r.initLogger(r) + + return r +} + +// ResolverKey returns an identifier which should be globally unique for this +// particular resolver within the chain the original contract resides within. +func (c *anchorResolver) ResolverKey() []byte { + // The anchor resolver is stateless and doesn't need a database key. + return nil +} + +// Resolve offers the anchor output to the sweeper and waits for it to be swept. +func (c *anchorResolver) Resolve() (ContractResolver, error) { + // Attempt to update the sweep parameters to the post-confirmation + // situation. We don't want to force sweep anymore, because the anchor + // lost its special purpose to get the commitment confirmed. It is just + // an output that we want to sweep only if it is economical to do so. + relayFeeRate := c.Sweeper.RelayFeePerKW() + + resultChan, err := c.Sweeper.UpdateParams( + c.anchor, + sweep.ParamsUpdate{ + Fee: sweep.FeePreference{ + FeeRate: relayFeeRate, + }, + Force: false, + }, + ) + + // After a restart or when the remote force closes, the sweeper is not + // yet aware of the anchor. In that case, offer it as a new input to the + // sweeper. An exclusive group is not necessary anymore, because we know + // that this is the only anchor that can be swept. + if err == lnwallet.ErrNotMine { + anchorInput := input.MakeBaseInput( + &c.anchor, + input.CommitmentAnchor, + &c.anchorSignDescriptor, + c.broadcastHeight, + ) + + resultChan, err = c.Sweeper.SweepInput( + &anchorInput, + sweep.Params{ + Fee: sweep.FeePreference{ + FeeRate: relayFeeRate, + }, + }, + ) + if err != nil { + return nil, err + } + } + + select { + case sweepRes := <-resultChan: + switch sweepRes.Err { + + // Anchor was swept successfully. + case nil: + c.log.Debugf("anchor swept by tx %v", + sweepRes.Tx.TxHash()) + + // Anchor was swept by someone else. This is possible after the + // 16 block csv lock. + case sweep.ErrRemoteSpend: + c.log.Warnf("our anchor spent by someone else") + + // The sweeper gave up on sweeping the anchor. This happens + // after the maximum number of sweep attempts has been reached. + // See sweep.DefaultMaxSweepAttempts. Sweep attempts are + // interspaced with random delays picked from a range that + // increases exponentially. + // + // We consider the anchor as being lost. + case sweep.ErrTooManyAttempts: + c.log.Warnf("anchor sweep abandoned") + + // An unexpected error occurred. + default: + c.log.Errorf("unable to sweep anchor: %v", sweepRes.Err) + + return nil, sweepRes.Err + } + + case <-c.quit: + return nil, errResolverShuttingDown + } + + c.resolved = true + return nil, nil +} + +// Stop signals the resolver to cancel any current resolution processes, and +// suspend. +// +// NOTE: Part of the ContractResolver interface. +func (c *anchorResolver) Stop() { + close(c.quit) +} + +// IsResolved returns true if the stored state in the resolve is fully +// resolved. In this case the target output can be forgotten. +// +// NOTE: Part of the ContractResolver interface. +func (c *anchorResolver) IsResolved() bool { + return c.resolved +} + +func (c *anchorResolver) Encode(w io.Writer) error { + return errors.New("serialization not supported") +} + +// A compile time assertion to ensure anchorResolver meets the +// ContractResolver interface. +var _ ContractResolver = (*anchorResolver)(nil) diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index 34ed98d3..fe2289ab 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -467,7 +467,7 @@ func (c *ChannelArbitrator) Start() error { // receive a chain event from the chain watcher than the // commitment has been confirmed on chain, and before we // advance our state step, we call InsertConfirmedCommitSet. - if err := c.relaunchResolvers(commitSet); err != nil { + if err := c.relaunchResolvers(commitSet, triggerHeight); err != nil { c.cfg.BlockEpochs.Cancel() return err } @@ -483,7 +483,9 @@ func (c *ChannelArbitrator) Start() error { // starting the ChannelArbitrator. This information should ideally be stored in // the database, so this only serves as a intermediate work-around to prevent a // migration. -func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error { +func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet, + heightHint uint32) error { + // We'll now query our log to see if there are any active unresolved // contracts. If this is the case, then we'll relaunch all contract // resolvers. @@ -558,6 +560,19 @@ func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error { htlcResolver.Supplement(*htlc) } + // The anchor resolver is stateless and can always be re-instantiated. + if contractResolutions.AnchorResolution != nil { + anchorResolver := newAnchorResolver( + contractResolutions.AnchorResolution.AnchorSignDescriptor, + contractResolutions.AnchorResolution.CommitAnchor, + heightHint, c.cfg.ChanPoint, + ResolverConfig{ + ChannelArbitratorConfig: c.cfg, + }, + ) + unresolvedContracts = append(unresolvedContracts, anchorResolver) + } + c.launchResolvers(unresolvedContracts) return nil @@ -1856,8 +1871,8 @@ func (c *ChannelArbitrator) prepContractResolutions( } } - // Finally, if this is was a unilateral closure, then we'll also create - // a resolver to sweep our commitment output (but only if it wasn't + // If this is was an unilateral closure, then we'll also create a + // resolver to sweep our commitment output (but only if it wasn't // trimmed). if contractResolutions.CommitResolution != nil { resolver := newCommitSweepResolver( @@ -1867,6 +1882,17 @@ func (c *ChannelArbitrator) prepContractResolutions( htlcResolvers = append(htlcResolvers, resolver) } + // We instantiate an anchor resolver if the commitmentment tx has an + // anchor. + if contractResolutions.AnchorResolution != nil { + anchorResolver := newAnchorResolver( + contractResolutions.AnchorResolution.AnchorSignDescriptor, + contractResolutions.AnchorResolution.CommitAnchor, + height, c.cfg.ChanPoint, resolverCfg, + ) + htlcResolvers = append(htlcResolvers, anchorResolver) + } + return htlcResolvers, msgsToSend, nil } diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index dcf969e9..bbe1c51f 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -2168,6 +2168,69 @@ func TestChannelArbitratorAnchors(t *testing.T) { case <-time.After(5 * time.Second): t.Fatalf("no response received") } + + // Now notify about the local force close getting confirmed. + closeTx := &wire.MsgTx{ + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{}, + Witness: [][]byte{ + {0x1}, + {0x2}, + }, + }, + }, + } + + chanArb.cfg.ChainEvents.LocalUnilateralClosure <- &LocalUnilateralCloseInfo{ + SpendDetail: &chainntnfs.SpendDetail{}, + LocalForceCloseSummary: &lnwallet.LocalForceCloseSummary{ + CloseTx: closeTx, + HtlcResolutions: &lnwallet.HtlcResolutions{}, + AnchorResolution: &lnwallet.AnchorResolution{ + AnchorSignDescriptor: input.SignDescriptor{ + Output: &wire.TxOut{ + Value: 1, + }, + }, + }, + }, + ChannelCloseSummary: &channeldb.ChannelCloseSummary{}, + CommitSet: CommitSet{ + ConfCommitKey: &LocalHtlcSet, + HtlcSets: map[HtlcSetKey][]channeldb.HTLC{}, + }, + } + + chanArbCtx.AssertStateTransitions( + StateContractClosed, + StateWaitingFullResolution, + ) + + // We expect to only have the anchor resolver active. + if len(chanArb.activeResolvers) != 1 { + t.Fatalf("expected single resolver, instead got: %v", + len(chanArb.activeResolvers)) + } + + resolver := chanArb.activeResolvers[0] + _, ok := resolver.(*anchorResolver) + if !ok { + t.Fatalf("expected anchor resolver, got %T", resolver) + } + + // The anchor resolver is expected to offer the anchor input to the + // sweeper. + <-chanArbCtx.sweeper.updatedInputs + + // The mock sweeper immediately signals success for that input. This + // should transition the channel to the resolved state. + chanArbCtx.AssertStateTransitions(StateFullyResolved) + select { + case <-chanArbCtx.resolvedChan: + case <-time.After(5 * time.Second): + t.Fatalf("contract was not resolved") + } } type mockChannel struct { diff --git a/contractcourt/commit_sweep_resolver_test.go b/contractcourt/commit_sweep_resolver_test.go index e5c7df05..279cc6e8 100644 --- a/contractcourt/commit_sweep_resolver_test.go +++ b/contractcourt/commit_sweep_resolver_test.go @@ -94,12 +94,14 @@ func (i *commitSweepResolverTestContext) waitForResult() { } type mockSweeper struct { - sweptInputs chan input.Input + sweptInputs chan input.Input + updatedInputs chan wire.OutPoint } func newMockSweeper() *mockSweeper { return &mockSweeper{ - sweptInputs: make(chan input.Input), + sweptInputs: make(chan input.Input), + updatedInputs: make(chan wire.OutPoint), } } @@ -125,6 +127,18 @@ func (s *mockSweeper) RelayFeePerKW() chainfee.SatPerKWeight { return 253 } +func (s *mockSweeper) UpdateParams(input wire.OutPoint, + params sweep.ParamsUpdate) (chan sweep.Result, error) { + + s.updatedInputs <- input + + result := make(chan sweep.Result, 1) + result <- sweep.Result{ + Tx: &wire.MsgTx{}, + } + return result, nil +} + var _ UtxoSweeper = &mockSweeper{} // TestCommitSweepResolverNoDelay tests resolution of a direct commitment output diff --git a/contractcourt/interfaces.go b/contractcourt/interfaces.go index 5497dad8..ded07f32 100644 --- a/contractcourt/interfaces.go +++ b/contractcourt/interfaces.go @@ -56,4 +56,12 @@ type UtxoSweeper interface { // RelayFeePerKW returns the minimum fee rate required for transactions // to be relayed. RelayFeePerKW() chainfee.SatPerKWeight + + // UpdateParams allows updating the sweep parameters of a pending input + // in the UtxoSweeper. This function can be used to provide an updated + // fee preference that will be used for a new sweep transaction of the + // input that will act as a replacement transaction (RBF) of the + // original sweeping transaction, if any. + UpdateParams(input wire.OutPoint, params sweep.ParamsUpdate) ( + chan sweep.Result, error) } From ab451f634e5e708a71e83de330aa09455c0b2330 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 10 Mar 2020 13:39:01 +0100 Subject: [PATCH 15/17] cnct+lnrpc: report anchor resolution --- contractcourt/anchor_resolver.go | 40 + contractcourt/channel_arbitrator.go | 3 + lnrpc/rpc.pb.go | 1454 ++++++++++++++------------- lnrpc/rpc.proto | 8 + lnrpc/rpc.swagger.json | 12 + rpcserver.go | 17 +- 6 files changed, 826 insertions(+), 708 deletions(-) diff --git a/contractcourt/anchor_resolver.go b/contractcourt/anchor_resolver.go index 02f44cfc..1cf7a820 100644 --- a/contractcourt/anchor_resolver.go +++ b/contractcourt/anchor_resolver.go @@ -3,8 +3,10 @@ package contractcourt import ( "errors" "io" + "sync" "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcutil" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/sweep" @@ -30,6 +32,13 @@ type anchorResolver struct { // chanPoint is the channel point of the original contract. chanPoint wire.OutPoint + // currentReport stores the current state of the resolver for reporting + // over the rpc interface. + currentReport ContractReport + + // reportLock prevents concurrent access to the resolver report. + reportLock sync.Mutex + contractResolverKit } @@ -38,12 +47,23 @@ func newAnchorResolver(anchorSignDescriptor input.SignDescriptor, anchor wire.OutPoint, broadcastHeight uint32, chanPoint wire.OutPoint, resCfg ResolverConfig) *anchorResolver { + amt := btcutil.Amount(anchorSignDescriptor.Output.Value) + + report := ContractReport{ + Outpoint: anchor, + Type: ReportOutputAnchor, + Amount: amt, + LimboBalance: amt, + RecoveredBalance: 0, + } + r := &anchorResolver{ contractResolverKit: *newContractResolverKit(resCfg), anchorSignDescriptor: anchorSignDescriptor, anchor: anchor, broadcastHeight: broadcastHeight, chanPoint: chanPoint, + currentReport: report, } r.initLogger(r) @@ -101,6 +121,7 @@ func (c *anchorResolver) Resolve() (ContractResolver, error) { } } + var anchorRecovered bool select { case sweepRes := <-resultChan: switch sweepRes.Err { @@ -110,6 +131,8 @@ func (c *anchorResolver) Resolve() (ContractResolver, error) { c.log.Debugf("anchor swept by tx %v", sweepRes.Tx.TxHash()) + anchorRecovered = true + // Anchor was swept by someone else. This is possible after the // 16 block csv lock. case sweep.ErrRemoteSpend: @@ -136,6 +159,14 @@ func (c *anchorResolver) Resolve() (ContractResolver, error) { return nil, errResolverShuttingDown } + // Update report to reflect that funds are no longer in limbo. + c.reportLock.Lock() + if anchorRecovered { + c.currentReport.RecoveredBalance = c.currentReport.LimboBalance + } + c.currentReport.LimboBalance = 0 + c.reportLock.Unlock() + c.resolved = true return nil, nil } @@ -156,6 +187,15 @@ func (c *anchorResolver) IsResolved() bool { return c.resolved } +// report returns a report on the resolution state of the contract. +func (c *anchorResolver) report() *ContractReport { + c.reportLock.Lock() + defer c.reportLock.Unlock() + + reportCopy := c.currentReport + return &reportCopy +} + func (c *anchorResolver) Encode(w io.Writer) error { return errors.New("serialization not supported") } diff --git a/contractcourt/channel_arbitrator.go b/contractcourt/channel_arbitrator.go index fe2289ab..46aab0d0 100644 --- a/contractcourt/channel_arbitrator.go +++ b/contractcourt/channel_arbitrator.go @@ -162,6 +162,9 @@ const ( // ReportOutputUnencumbered is an uncontested output on the commitment // transaction paying to us directly. ReportOutputUnencumbered + + // ReportOutputAnchor is an anchor output on the commitment tx. + ReportOutputAnchor ) // ContractReport provides a summary of a commitment tx output. diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index e8637661..f49fdbeb 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -324,6 +324,34 @@ func (PeerEvent_EventType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_77a6da22d6a3feb1, []int{51, 0} } +type PendingChannelsResponse_ForceClosedChannel_AnchorState int32 + +const ( + PendingChannelsResponse_ForceClosedChannel_LIMBO PendingChannelsResponse_ForceClosedChannel_AnchorState = 0 + PendingChannelsResponse_ForceClosedChannel_RECOVERED PendingChannelsResponse_ForceClosedChannel_AnchorState = 1 + PendingChannelsResponse_ForceClosedChannel_LOST PendingChannelsResponse_ForceClosedChannel_AnchorState = 2 +) + +var PendingChannelsResponse_ForceClosedChannel_AnchorState_name = map[int32]string{ + 0: "LIMBO", + 1: "RECOVERED", + 2: "LOST", +} + +var PendingChannelsResponse_ForceClosedChannel_AnchorState_value = map[string]int32{ + "LIMBO": 0, + "RECOVERED": 1, + "LOST": 2, +} + +func (x PendingChannelsResponse_ForceClosedChannel_AnchorState) String() string { + return proto.EnumName(PendingChannelsResponse_ForceClosedChannel_AnchorState_name, int32(x)) +} + +func (PendingChannelsResponse_ForceClosedChannel_AnchorState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{72, 4, 0} +} + type ChannelEventUpdate_UpdateType int32 const ( @@ -5770,11 +5798,12 @@ type PendingChannelsResponse_ForceClosedChannel struct { //mature. BlocksTilMaturity int32 `protobuf:"varint,5,opt,name=blocks_til_maturity,json=blocksTilMaturity,proto3" json:"blocks_til_maturity,omitempty"` /// The total value of funds successfully recovered from this channel - RecoveredBalance int64 `protobuf:"varint,6,opt,name=recovered_balance,json=recoveredBalance,proto3" json:"recovered_balance,omitempty"` - PendingHtlcs []*PendingHTLC `protobuf:"bytes,8,rep,name=pending_htlcs,json=pendingHtlcs,proto3" json:"pending_htlcs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RecoveredBalance int64 `protobuf:"varint,6,opt,name=recovered_balance,json=recoveredBalance,proto3" json:"recovered_balance,omitempty"` + PendingHtlcs []*PendingHTLC `protobuf:"bytes,8,rep,name=pending_htlcs,json=pendingHtlcs,proto3" json:"pending_htlcs,omitempty"` + Anchor PendingChannelsResponse_ForceClosedChannel_AnchorState `protobuf:"varint,9,opt,name=anchor,proto3,enum=lnrpc.PendingChannelsResponse_ForceClosedChannel_AnchorState" json:"anchor,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PendingChannelsResponse_ForceClosedChannel) Reset() { @@ -5855,6 +5884,13 @@ func (m *PendingChannelsResponse_ForceClosedChannel) GetPendingHtlcs() []*Pendin return nil } +func (m *PendingChannelsResponse_ForceClosedChannel) GetAnchor() PendingChannelsResponse_ForceClosedChannel_AnchorState { + if m != nil { + return m.Anchor + } + return PendingChannelsResponse_ForceClosedChannel_LIMBO +} + type ChannelEventSubscription struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -11043,6 +11079,7 @@ func init() { proto.RegisterEnum("lnrpc.ChannelCloseSummary_Initiator", ChannelCloseSummary_Initiator_name, ChannelCloseSummary_Initiator_value) proto.RegisterEnum("lnrpc.Peer_SyncType", Peer_SyncType_name, Peer_SyncType_value) proto.RegisterEnum("lnrpc.PeerEvent_EventType", PeerEvent_EventType_name, PeerEvent_EventType_value) + proto.RegisterEnum("lnrpc.PendingChannelsResponse_ForceClosedChannel_AnchorState", PendingChannelsResponse_ForceClosedChannel_AnchorState_name, PendingChannelsResponse_ForceClosedChannel_AnchorState_value) proto.RegisterEnum("lnrpc.ChannelEventUpdate_UpdateType", ChannelEventUpdate_UpdateType_name, ChannelEventUpdate_UpdateType_value) proto.RegisterEnum("lnrpc.Invoice_InvoiceState", Invoice_InvoiceState_name, Invoice_InvoiceState_value) proto.RegisterEnum("lnrpc.Payment_PaymentStatus", Payment_PaymentStatus_name, Payment_PaymentStatus_value) @@ -11218,709 +11255,712 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 11219 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x6b, 0x8f, 0x1c, 0x49, - 0x72, 0x18, 0xfb, 0x35, 0xdd, 0x1d, 0xfd, 0x9c, 0x9c, 0x57, 0x73, 0xb8, 0x5c, 0x72, 0x6b, 0xf7, - 0x96, 0x3c, 0xee, 0x1d, 0xc9, 0xe5, 0x1d, 0xf7, 0x4e, 0xbb, 0xf6, 0xe9, 0x7a, 0x66, 0x7a, 0x38, - 0x7d, 0x9c, 0xd7, 0x56, 0xf7, 0xec, 0x6a, 0x4f, 0x96, 0xeb, 0x6a, 0xba, 0x73, 0x66, 0x4a, 0xec, - 0xae, 0xea, 0xad, 0xaa, 0x9e, 0xc7, 0x1d, 0xd6, 0x1f, 0xfc, 0x10, 0x0c, 0xbf, 0x00, 0xc1, 0x96, - 0x01, 0xcb, 0x16, 0x6c, 0xd8, 0x30, 0x0c, 0xc3, 0x80, 0x20, 0xe3, 0x64, 0xc0, 0x1f, 0xfc, 0x5d, - 0x5f, 0x6c, 0xe8, 0x83, 0xe4, 0x2f, 0x86, 0x20, 0x40, 0xb0, 0x7c, 0xfe, 0xaa, 0x9f, 0x60, 0x64, - 0x44, 0x66, 0x55, 0x56, 0x77, 0x0d, 0xc9, 0xbd, 0x5b, 0xdf, 0x17, 0x72, 0x2a, 0x32, 0xf2, 0x1d, - 0x19, 0x19, 0x8f, 0x8c, 0x68, 0x28, 0xfb, 0x93, 0xc1, 0xc3, 0x89, 0xef, 0x85, 0x1e, 0x2b, 0x8c, - 0x5c, 0x7f, 0x32, 0x58, 0x7f, 0xe3, 0xd4, 0xf3, 0x4e, 0x47, 0xfc, 0x91, 0x3d, 0x71, 0x1e, 0xd9, - 0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0x40, 0x48, 0xc6, 0x8f, 0xa0, 0xfe, 0x8c, 0xbb, 0x3d, - 0xce, 0x87, 0x26, 0xff, 0x7c, 0xca, 0x83, 0x90, 0xbd, 0x07, 0x8b, 0x36, 0xff, 0x31, 0xe7, 0x43, - 0x6b, 0x62, 0x07, 0xc1, 0xe4, 0xcc, 0xb7, 0x03, 0xde, 0xca, 0xdc, 0xcd, 0xdc, 0xaf, 0x9a, 0x4d, - 0x2a, 0x38, 0x8c, 0xe0, 0xec, 0x2d, 0xa8, 0x06, 0x02, 0x95, 0xbb, 0xa1, 0xef, 0x4d, 0xae, 0x5a, - 0x59, 0xc4, 0xab, 0x08, 0x58, 0x87, 0x40, 0xc6, 0x08, 0x1a, 0x51, 0x0f, 0xc1, 0xc4, 0x73, 0x03, - 0xce, 0x1e, 0xc3, 0xf2, 0xc0, 0x99, 0x9c, 0x71, 0xdf, 0xc2, 0xca, 0x63, 0x97, 0x8f, 0x3d, 0xd7, - 0x19, 0xb4, 0x32, 0x77, 0x73, 0xf7, 0xcb, 0x26, 0xa3, 0x32, 0x51, 0x63, 0x4f, 0x96, 0xb0, 0x7b, - 0xd0, 0xe0, 0x2e, 0xc1, 0xf9, 0x10, 0x6b, 0xc9, 0xae, 0xea, 0x31, 0x58, 0x54, 0x30, 0xfe, 0x7e, - 0x16, 0x16, 0xbb, 0xae, 0x13, 0x7e, 0x6a, 0x8f, 0x46, 0x3c, 0x54, 0x73, 0xba, 0x07, 0x8d, 0x0b, - 0x04, 0xe0, 0x9c, 0x2e, 0x3c, 0x7f, 0x28, 0x67, 0x54, 0x27, 0xf0, 0xa1, 0x84, 0x5e, 0x3b, 0xb2, - 0xec, 0xb5, 0x23, 0x4b, 0x5d, 0xae, 0xdc, 0x35, 0xcb, 0x75, 0x0f, 0x1a, 0x3e, 0x1f, 0x78, 0xe7, - 0xdc, 0xbf, 0xb2, 0x2e, 0x1c, 0x77, 0xe8, 0x5d, 0xb4, 0xf2, 0x77, 0x33, 0xf7, 0x0b, 0x66, 0x5d, - 0x81, 0x3f, 0x45, 0x28, 0xdb, 0x80, 0xc6, 0xe0, 0xcc, 0x76, 0x5d, 0x3e, 0xb2, 0x8e, 0xed, 0xc1, - 0x8b, 0xe9, 0x24, 0x68, 0x15, 0xee, 0x66, 0xee, 0x57, 0x9e, 0xdc, 0x7c, 0x88, 0xbb, 0xfa, 0x70, - 0xf3, 0xcc, 0x76, 0x37, 0xb0, 0xa4, 0xe7, 0xda, 0x93, 0xe0, 0xcc, 0x0b, 0xcd, 0xba, 0xac, 0x41, - 0xe0, 0xc0, 0x58, 0x06, 0xa6, 0xaf, 0x04, 0xad, 0xbd, 0xf1, 0x9f, 0x32, 0xb0, 0x74, 0xe4, 0x8e, - 0xbc, 0xc1, 0x8b, 0x9f, 0x73, 0x89, 0x52, 0xe6, 0x90, 0x7d, 0xdd, 0x39, 0xe4, 0xbe, 0xec, 0x1c, - 0x56, 0x61, 0x39, 0x39, 0x58, 0x39, 0x0b, 0x0e, 0x2b, 0xa2, 0xf6, 0x29, 0x57, 0xc3, 0x52, 0xd3, - 0xf8, 0x3a, 0x34, 0x07, 0x53, 0xdf, 0xe7, 0xee, 0xdc, 0x3c, 0x1a, 0x12, 0x1e, 0x4d, 0xe4, 0x2d, - 0xa8, 0xba, 0xfc, 0x22, 0x46, 0x93, 0xb4, 0xeb, 0xf2, 0x0b, 0x85, 0x62, 0xb4, 0x60, 0x75, 0xb6, - 0x1b, 0x39, 0x80, 0x9f, 0x65, 0x20, 0x7f, 0x14, 0x5e, 0x7a, 0xec, 0x29, 0x54, 0xed, 0xe1, 0xd0, - 0xe7, 0x41, 0x60, 0x85, 0x57, 0x13, 0x3a, 0x29, 0xf5, 0x27, 0x4c, 0x4e, 0xb1, 0x4d, 0x45, 0xfd, - 0xab, 0x09, 0x37, 0x2b, 0x76, 0xfc, 0xc1, 0x5a, 0x50, 0x94, 0x9f, 0xd8, 0x6f, 0xd9, 0x54, 0x9f, - 0xec, 0x36, 0x80, 0x3d, 0xf6, 0xa6, 0x6e, 0x68, 0x05, 0x76, 0x88, 0x2b, 0x96, 0x33, 0xcb, 0x04, - 0xe9, 0xd9, 0x21, 0xbb, 0x05, 0xe5, 0xc9, 0x0b, 0x2b, 0x18, 0xf8, 0xce, 0x24, 0x44, 0xe2, 0x29, - 0x9b, 0xa5, 0xc9, 0x8b, 0x1e, 0x7e, 0xb3, 0xf7, 0xa0, 0xe4, 0x4d, 0xc3, 0x89, 0xe7, 0xb8, 0xa1, - 0xa4, 0x97, 0x86, 0x1c, 0xc8, 0xc1, 0x34, 0x3c, 0x14, 0x60, 0x33, 0x42, 0x60, 0xef, 0x40, 0x6d, - 0xe0, 0xb9, 0x27, 0x8e, 0x3f, 0x26, 0x8e, 0xd0, 0x5a, 0xc0, 0xbe, 0x92, 0x40, 0xe3, 0x0f, 0xb2, - 0x50, 0xe9, 0xfb, 0xb6, 0x1b, 0xd8, 0x03, 0x01, 0x60, 0x6b, 0x50, 0x0c, 0x2f, 0xad, 0x33, 0x3b, - 0x38, 0xc3, 0xa9, 0x96, 0xcd, 0x85, 0xf0, 0x72, 0xc7, 0x0e, 0xce, 0xd8, 0x2a, 0x2c, 0xd0, 0x28, - 0x71, 0x42, 0x39, 0x53, 0x7e, 0x89, 0x03, 0xe2, 0x4e, 0xc7, 0x56, 0xb2, 0xab, 0x1c, 0x52, 0x4c, - 0xd3, 0x9d, 0x8e, 0x37, 0x75, 0xb8, 0x98, 0xfc, 0xb1, 0xd8, 0x6e, 0xea, 0x80, 0xa6, 0x57, 0x46, - 0x08, 0xf6, 0xf1, 0x16, 0x54, 0x65, 0x31, 0x77, 0x4e, 0xcf, 0x68, 0x8e, 0x05, 0xb3, 0x42, 0x08, - 0x08, 0x12, 0x2d, 0x84, 0xce, 0x98, 0x5b, 0x41, 0x68, 0x8f, 0x27, 0x72, 0x4a, 0x65, 0x01, 0xe9, - 0x09, 0x00, 0x16, 0x7b, 0xa1, 0x3d, 0xb2, 0x4e, 0x38, 0x0f, 0x5a, 0x45, 0x59, 0x2c, 0x20, 0xdb, - 0x9c, 0x07, 0xec, 0x6b, 0x50, 0x1f, 0xf2, 0x20, 0xb4, 0xe4, 0x66, 0xf0, 0xa0, 0x55, 0xc2, 0x93, - 0x5f, 0x13, 0xd0, 0xb6, 0x02, 0xb2, 0x37, 0x00, 0x7c, 0xfb, 0xc2, 0x12, 0x0b, 0xc1, 0x2f, 0x5b, - 0x65, 0xda, 0x05, 0xdf, 0xbe, 0xe8, 0x5f, 0xee, 0xf0, 0x4b, 0x41, 0x35, 0xcf, 0x78, 0xa8, 0x2d, - 0x5a, 0x20, 0xa9, 0xd3, 0xd8, 0x05, 0xa6, 0x81, 0xb7, 0x78, 0x68, 0x3b, 0xa3, 0x80, 0x7d, 0x00, - 0xd5, 0x50, 0x43, 0x46, 0x36, 0x58, 0x89, 0x48, 0x48, 0xab, 0x60, 0x26, 0xf0, 0x8c, 0x33, 0x28, - 0x6d, 0x73, 0xbe, 0xeb, 0x8c, 0x9d, 0x90, 0xad, 0x42, 0xe1, 0xc4, 0xb9, 0xe4, 0x44, 0xec, 0xb9, - 0x9d, 0x1b, 0x26, 0x7d, 0xb2, 0x3b, 0x00, 0xf8, 0x87, 0x35, 0x8e, 0xa8, 0x69, 0xe7, 0x86, 0x59, - 0x46, 0xd8, 0x5e, 0x60, 0x87, 0x6c, 0x1d, 0x8a, 0x13, 0xee, 0x0f, 0xb8, 0xda, 0xb7, 0x9d, 0x1b, - 0xa6, 0x02, 0x6c, 0x14, 0xa1, 0x30, 0x12, 0xad, 0x1b, 0x7f, 0x54, 0x80, 0x4a, 0x8f, 0xbb, 0xd1, - 0x29, 0x63, 0x90, 0x17, 0x0b, 0x22, 0x4f, 0x16, 0xfe, 0xcd, 0xde, 0x86, 0x0a, 0x2e, 0x5d, 0x10, - 0xfa, 0x8e, 0x7b, 0x4a, 0x54, 0xbd, 0x91, 0x6d, 0x65, 0x4c, 0x10, 0xe0, 0x1e, 0x42, 0x59, 0x13, - 0x72, 0xf6, 0x58, 0x51, 0xb5, 0xf8, 0x93, 0xdd, 0x84, 0x92, 0x3d, 0x0e, 0x69, 0x78, 0x55, 0x04, - 0x17, 0xed, 0x71, 0x88, 0x43, 0x7b, 0x0b, 0xaa, 0x13, 0xfb, 0x6a, 0x2c, 0xce, 0x72, 0x44, 0x0e, - 0x55, 0xb3, 0x22, 0x61, 0x48, 0x10, 0x4f, 0x60, 0x49, 0x47, 0x51, 0x9d, 0x17, 0xa2, 0xce, 0x17, - 0x35, 0x6c, 0x39, 0x86, 0x7b, 0xd0, 0x50, 0x75, 0x7c, 0x9a, 0x0f, 0x92, 0x49, 0xd9, 0xac, 0x4b, - 0xb0, 0x9a, 0xe5, 0x7d, 0x68, 0x9e, 0x38, 0xae, 0x3d, 0xb2, 0x06, 0xa3, 0xf0, 0xdc, 0x1a, 0xf2, - 0x51, 0x68, 0x23, 0xc5, 0x14, 0xcc, 0x3a, 0xc2, 0x37, 0x47, 0xe1, 0xf9, 0x96, 0x80, 0xb2, 0x6f, - 0x40, 0xf9, 0x84, 0x73, 0x0b, 0x17, 0xab, 0x55, 0x4a, 0x1c, 0x3c, 0xb5, 0x43, 0x66, 0xe9, 0x44, - 0xed, 0xd5, 0x37, 0xa0, 0xe9, 0x4d, 0xc3, 0x53, 0xcf, 0x71, 0x4f, 0x2d, 0xc1, 0xef, 0x2c, 0x67, - 0x88, 0x34, 0x94, 0xdf, 0xc8, 0x3e, 0xce, 0x98, 0x75, 0x55, 0x26, 0x38, 0x4f, 0x77, 0xc8, 0xde, - 0x85, 0xc6, 0xc8, 0x0e, 0x42, 0xeb, 0xcc, 0x9b, 0x58, 0x93, 0xe9, 0xf1, 0x0b, 0x7e, 0xd5, 0xaa, - 0xe1, 0x42, 0xd4, 0x04, 0x78, 0xc7, 0x9b, 0x1c, 0x22, 0x50, 0x50, 0x36, 0x8e, 0x93, 0x06, 0x01, - 0x77, 0x33, 0xf7, 0x6b, 0x66, 0x59, 0x40, 0xa8, 0xd3, 0xcf, 0x60, 0x09, 0xb7, 0x67, 0x30, 0x0d, - 0x42, 0x6f, 0x6c, 0x09, 0x5e, 0xed, 0x0f, 0x83, 0x56, 0x05, 0x69, 0xed, 0xeb, 0x72, 0xb0, 0xda, - 0x1e, 0x3f, 0xdc, 0xe2, 0x41, 0xb8, 0x89, 0xc8, 0x26, 0xe1, 0x8a, 0x0b, 0xfd, 0xca, 0x5c, 0x1c, - 0xce, 0xc2, 0xd9, 0x37, 0x80, 0xd9, 0xa3, 0x91, 0x77, 0x61, 0x05, 0x7c, 0x74, 0x62, 0xc9, 0x45, - 0x6c, 0xd5, 0xef, 0x66, 0xee, 0x97, 0xcc, 0x26, 0x96, 0xf4, 0xf8, 0xe8, 0xe4, 0x90, 0xe0, 0xec, - 0x03, 0xc0, 0xc3, 0x64, 0x9d, 0x70, 0x3b, 0x9c, 0xfa, 0x3c, 0x68, 0x35, 0xee, 0xe6, 0xee, 0xd7, - 0x9f, 0x2c, 0x46, 0xeb, 0x85, 0xe0, 0x0d, 0x27, 0x34, 0xab, 0x02, 0x4f, 0x7e, 0x07, 0xeb, 0x5b, - 0xb0, 0x9a, 0x3e, 0x24, 0x41, 0x54, 0x62, 0x55, 0x04, 0x31, 0xe6, 0x4d, 0xf1, 0x27, 0x5b, 0x86, - 0xc2, 0xb9, 0x3d, 0x9a, 0x72, 0xc9, 0xd3, 0xe9, 0xe3, 0xc3, 0xec, 0x77, 0x33, 0xc6, 0x1f, 0x66, - 0xa0, 0x4a, 0xb3, 0x94, 0xb2, 0xc8, 0xdb, 0x50, 0x53, 0xd4, 0xc0, 0x7d, 0xdf, 0xf3, 0x25, 0x57, - 0x53, 0x94, 0xd7, 0x11, 0x30, 0x71, 0xab, 0x28, 0xa4, 0x89, 0xcf, 0x9d, 0xb1, 0x7d, 0xaa, 0x9a, - 0x56, 0xa4, 0x74, 0x28, 0xc1, 0xec, 0xfd, 0xb8, 0x3d, 0xdf, 0x9b, 0x86, 0x5c, 0xde, 0x79, 0x55, - 0x39, 0x3d, 0x53, 0xc0, 0xa2, 0xd6, 0xf1, 0xeb, 0x35, 0xe8, 0xdc, 0xf8, 0x9d, 0x0c, 0x30, 0x31, - 0xec, 0xbe, 0x47, 0x0d, 0x48, 0x0a, 0x9d, 0xad, 0x99, 0x79, 0xed, 0x13, 0x92, 0x7d, 0xd9, 0x09, - 0x31, 0xa0, 0x40, 0x63, 0xcf, 0xa7, 0x8c, 0x9d, 0x8a, 0x7e, 0x90, 0x2f, 0xe5, 0x9a, 0x79, 0xe3, - 0x7f, 0xe5, 0x60, 0x79, 0x93, 0xae, 0xec, 0xf6, 0x60, 0xc0, 0x27, 0xd1, 0xd9, 0xb9, 0x03, 0x15, - 0xd7, 0x1b, 0x72, 0x45, 0xb1, 0x34, 0x30, 0x10, 0x20, 0x8d, 0x5c, 0xcf, 0x6c, 0xc7, 0xa5, 0x81, - 0xd3, 0x62, 0x96, 0x11, 0x82, 0xc3, 0x7e, 0x17, 0x1a, 0x13, 0xee, 0x0e, 0xf5, 0x23, 0x42, 0x42, - 0x55, 0x4d, 0x82, 0xe5, 0xe9, 0xb8, 0x03, 0x95, 0x93, 0x29, 0xe1, 0x09, 0xc6, 0x92, 0x47, 0x1a, - 0x00, 0x09, 0x6a, 0x13, 0x7f, 0x99, 0x4c, 0x83, 0x33, 0x2c, 0x2d, 0x60, 0x69, 0x51, 0x7c, 0x8b, - 0xa2, 0xdb, 0x00, 0xc3, 0x69, 0x10, 0xca, 0x13, 0xb3, 0x80, 0x85, 0x65, 0x01, 0xa1, 0x13, 0xf3, - 0x4d, 0x58, 0x1a, 0xdb, 0x97, 0x16, 0xd2, 0x8e, 0xe5, 0xb8, 0xd6, 0xc9, 0x08, 0xef, 0x9c, 0x22, - 0xe2, 0x35, 0xc7, 0xf6, 0xe5, 0x27, 0xa2, 0xa4, 0xeb, 0x6e, 0x23, 0x5c, 0xb0, 0x15, 0x25, 0xee, - 0xf8, 0x3c, 0xe0, 0xfe, 0x39, 0x47, 0x4e, 0x90, 0x8f, 0x64, 0x1a, 0x93, 0xa0, 0x62, 0x44, 0x63, - 0x31, 0xef, 0x70, 0x34, 0xa0, 0x63, 0x6f, 0x16, 0xc7, 0x8e, 0xbb, 0x13, 0x8e, 0x06, 0xe2, 0x5e, - 0x11, 0x7c, 0x64, 0xc2, 0x7d, 0xeb, 0xc5, 0x05, 0x9e, 0xe1, 0x3c, 0xf2, 0x8d, 0x43, 0xee, 0x3f, - 0xbf, 0x10, 0x57, 0xff, 0x20, 0x40, 0x46, 0x64, 0x5f, 0xb5, 0x2a, 0x78, 0xc0, 0x4b, 0x83, 0x40, - 0xb0, 0x20, 0xfb, 0x4a, 0x1c, 0x42, 0x31, 0x5a, 0x1b, 0x77, 0x81, 0x0f, 0xb1, 0xf9, 0x00, 0x39, - 0x6a, 0x0d, 0x07, 0xdb, 0x96, 0x05, 0xa2, 0x9f, 0x40, 0x50, 0xbd, 0x1a, 0xec, 0xc9, 0xc8, 0x3e, - 0x0d, 0x90, 0xa5, 0xd4, 0xcc, 0xaa, 0x04, 0x6e, 0x0b, 0x98, 0xf1, 0x29, 0x09, 0x59, 0xda, 0xde, - 0xca, 0x33, 0x23, 0xae, 0x7a, 0x84, 0xe0, 0xbe, 0x96, 0x4c, 0xf9, 0x95, 0xb6, 0x69, 0xd9, 0x94, - 0x4d, 0x33, 0x7e, 0x2f, 0x03, 0x55, 0xd9, 0x32, 0x0a, 0x25, 0xec, 0x21, 0x30, 0xb5, 0x8b, 0xe1, - 0xa5, 0x33, 0xb4, 0x8e, 0xaf, 0x42, 0x1e, 0x10, 0xd1, 0xec, 0xdc, 0x30, 0x9b, 0xb2, 0xac, 0x7f, - 0xe9, 0x0c, 0x37, 0x44, 0x09, 0x7b, 0x00, 0xcd, 0x04, 0x7e, 0x10, 0xfa, 0x44, 0xd1, 0x3b, 0x37, - 0xcc, 0xba, 0x86, 0xdd, 0x0b, 0x7d, 0x71, 0x46, 0x84, 0xc8, 0x33, 0x0d, 0x2d, 0xc7, 0x1d, 0xf2, - 0x4b, 0x24, 0xa3, 0x9a, 0x59, 0x21, 0x58, 0x57, 0x80, 0x36, 0xea, 0x50, 0xd5, 0x9b, 0x33, 0x4e, - 0xa1, 0xa4, 0xe4, 0x25, 0x14, 0x18, 0x66, 0x86, 0x64, 0x96, 0xc3, 0x68, 0x24, 0x37, 0xa1, 0x94, - 0x1c, 0x81, 0x59, 0x0c, 0x5f, 0xbb, 0x63, 0xe3, 0x7b, 0xd0, 0xdc, 0x15, 0xc4, 0xe3, 0x0a, 0x62, - 0x95, 0xf2, 0xdf, 0x2a, 0x2c, 0x68, 0x87, 0xa6, 0x6c, 0xca, 0x2f, 0x71, 0xe7, 0x9e, 0x79, 0x41, - 0x28, 0x7b, 0xc1, 0xbf, 0x8d, 0x3f, 0xca, 0x00, 0xeb, 0x04, 0xa1, 0x33, 0xb6, 0x43, 0xbe, 0xcd, - 0x23, 0xb6, 0x70, 0x00, 0x55, 0xd1, 0x5a, 0xdf, 0x6b, 0x93, 0x40, 0x46, 0x02, 0xc5, 0x7b, 0xf2, - 0x18, 0xcf, 0x57, 0x78, 0xa8, 0x63, 0x13, 0x9b, 0x4f, 0x34, 0x20, 0x4e, 0x59, 0x68, 0xfb, 0xa7, - 0x3c, 0x44, 0x31, 0x4e, 0xca, 0xfb, 0x40, 0x20, 0x21, 0xc0, 0xad, 0xff, 0x2a, 0x2c, 0xce, 0xb5, - 0xa1, 0xf3, 0xe5, 0x72, 0x0a, 0x5f, 0xce, 0xe9, 0x7c, 0xd9, 0x82, 0xa5, 0xc4, 0xb8, 0x24, 0xa5, - 0xad, 0x41, 0x51, 0x1c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, 0x3c, 0xe1, 0x5c, 0x88, 0xc1, 0x8f, - 0x60, 0xf9, 0x84, 0x73, 0xdf, 0x0e, 0xb1, 0x10, 0x4f, 0x8c, 0xd8, 0x21, 0xd9, 0xf0, 0xa2, 0x2c, - 0xeb, 0xd9, 0xe1, 0x21, 0xf7, 0xc5, 0x4e, 0x19, 0xff, 0x3b, 0x03, 0x0d, 0xc1, 0x41, 0xf7, 0x6c, - 0xf7, 0x4a, 0xad, 0xd3, 0x6e, 0xea, 0x3a, 0xdd, 0xd7, 0x2e, 0x43, 0x0d, 0xfb, 0xcb, 0x2e, 0x52, - 0x6e, 0x76, 0x91, 0xd8, 0x5d, 0xa8, 0x26, 0xc6, 0x5a, 0xc0, 0xb1, 0x42, 0x10, 0x0d, 0xf2, 0x17, - 0x5f, 0xc6, 0x77, 0xa1, 0x19, 0x0f, 0x5b, 0xae, 0x21, 0x83, 0xbc, 0x20, 0x49, 0xd9, 0x00, 0xfe, - 0x6d, 0xfc, 0xab, 0x0c, 0x21, 0x6e, 0x7a, 0x4e, 0x24, 0x9d, 0x0a, 0x44, 0x21, 0xf7, 0x2a, 0x44, - 0xf1, 0xf7, 0xb5, 0x52, 0xfd, 0x2f, 0x3e, 0x59, 0x71, 0x74, 0x02, 0xee, 0x0e, 0x2d, 0x7b, 0x34, - 0x42, 0xe6, 0x5b, 0x32, 0x8b, 0xe2, 0xbb, 0x3d, 0x1a, 0x19, 0xf7, 0x60, 0x51, 0x1b, 0xdd, 0x4b, - 0xe6, 0xb1, 0x0f, 0x6c, 0xd7, 0x09, 0xc2, 0x23, 0x37, 0x98, 0x68, 0x82, 0xdb, 0x2d, 0x28, 0x0b, - 0x0e, 0x2b, 0x46, 0x46, 0x47, 0xb6, 0x60, 0x0a, 0x96, 0x2b, 0xc6, 0x15, 0x60, 0xa1, 0x7d, 0x29, - 0x0b, 0xb3, 0xb2, 0xd0, 0xbe, 0xc4, 0x42, 0xe3, 0xbb, 0xb0, 0x94, 0x68, 0x4f, 0x76, 0xfd, 0x16, - 0x14, 0xa6, 0xe1, 0xa5, 0xa7, 0x44, 0xf3, 0x8a, 0xa4, 0x10, 0xa1, 0x00, 0x9a, 0x54, 0x62, 0x7c, - 0x04, 0x8b, 0xfb, 0xfc, 0x42, 0x1e, 0x62, 0x35, 0x90, 0x77, 0x21, 0xff, 0x0a, 0xa5, 0x10, 0xcb, - 0x8d, 0x87, 0xc0, 0xf4, 0xca, 0xb2, 0x57, 0x4d, 0x47, 0xcc, 0x24, 0x74, 0x44, 0xe3, 0x5d, 0x60, - 0x3d, 0xe7, 0xd4, 0xdd, 0xe3, 0x41, 0x60, 0x9f, 0x46, 0xc7, 0xbe, 0x09, 0xb9, 0x71, 0x70, 0x2a, - 0x79, 0x94, 0xf8, 0xd3, 0xf8, 0x16, 0x2c, 0x25, 0xf0, 0x64, 0xc3, 0x6f, 0x40, 0x39, 0x70, 0x4e, - 0x5d, 0x14, 0xac, 0x64, 0xd3, 0x31, 0xc0, 0xd8, 0x86, 0xe5, 0x4f, 0xb8, 0xef, 0x9c, 0x5c, 0xbd, - 0xaa, 0xf9, 0x64, 0x3b, 0xd9, 0xd9, 0x76, 0x3a, 0xb0, 0x32, 0xd3, 0x8e, 0xec, 0x9e, 0xc8, 0x57, - 0xee, 0x64, 0xc9, 0xa4, 0x0f, 0x8d, 0xef, 0x65, 0x75, 0xbe, 0x67, 0x1c, 0x01, 0xdb, 0xf4, 0x5c, - 0x97, 0x0f, 0xc2, 0x43, 0xce, 0xfd, 0xd8, 0x4a, 0x15, 0xd3, 0x6a, 0xe5, 0xc9, 0x9a, 0x5c, 0xd9, - 0x59, 0x66, 0x2a, 0x89, 0x98, 0x41, 0x7e, 0xc2, 0xfd, 0x31, 0x36, 0x5c, 0x32, 0xf1, 0x6f, 0x63, - 0x05, 0x96, 0x12, 0xcd, 0x4a, 0xbd, 0xfe, 0x31, 0xac, 0x6c, 0x39, 0xc1, 0x60, 0xbe, 0xc3, 0x35, - 0x28, 0x4e, 0xa6, 0xc7, 0x56, 0x92, 0x2f, 0x3f, 0xe7, 0x57, 0x42, 0xdb, 0x9b, 0xad, 0x21, 0xdb, - 0xfa, 0xbb, 0x19, 0xc8, 0xef, 0xf4, 0x77, 0x37, 0xd9, 0x3a, 0x94, 0x1c, 0x77, 0xe0, 0x8d, 0x85, - 0xe0, 0x45, 0x73, 0x8e, 0xbe, 0xaf, 0x3d, 0x60, 0xb7, 0xa0, 0x8c, 0xf2, 0x9a, 0x50, 0x6d, 0xa5, - 0xe8, 0x53, 0x12, 0x80, 0x5d, 0x6f, 0xf0, 0x42, 0xe8, 0xd4, 0xfc, 0x72, 0xe2, 0xf8, 0xa8, 0x35, - 0x2b, 0x65, 0x38, 0x4f, 0x77, 0x7d, 0x5c, 0x40, 0x1a, 0xb1, 0xf1, 0x57, 0x45, 0x28, 0xca, 0xdb, - 0x96, 0x6e, 0xee, 0xd0, 0x39, 0xe7, 0xf1, 0xcd, 0x2d, 0xbe, 0x84, 0x3c, 0xe0, 0xf3, 0xb1, 0x17, - 0x46, 0x02, 0x1b, 0xed, 0x41, 0x95, 0x80, 0x52, 0x64, 0xd3, 0x84, 0x06, 0x32, 0x31, 0xe4, 0x08, - 0x69, 0xa0, 0x5f, 0xe5, 0xb7, 0xa0, 0xa8, 0xee, 0xfe, 0x7c, 0xa4, 0xd3, 0x2c, 0x0c, 0x48, 0x5a, - 0x5b, 0x87, 0xd2, 0xc0, 0x9e, 0xd8, 0x03, 0x27, 0xbc, 0x92, 0x0c, 0x21, 0xfa, 0x16, 0xad, 0x8f, - 0xbc, 0x81, 0x3d, 0xb2, 0x8e, 0xed, 0x91, 0xed, 0x0e, 0xb8, 0xd4, 0xdd, 0xab, 0x08, 0xdc, 0x20, - 0x98, 0xd0, 0xcf, 0xe5, 0x38, 0x15, 0x16, 0xa9, 0xf0, 0x72, 0xf4, 0x0a, 0x4d, 0x08, 0x97, 0xde, - 0x78, 0xec, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x26, 0xc8, 0x36, 0xc7, 0xd9, 0xca, 0xe2, - 0x0b, 0x5a, 0xba, 0x32, 0x75, 0x45, 0xc0, 0x4f, 0xc9, 0x90, 0x30, 0x2f, 0x8b, 0xe5, 0x34, 0x59, - 0xec, 0x3d, 0x58, 0x9c, 0xba, 0x01, 0x0f, 0xc3, 0x11, 0x1f, 0x46, 0x63, 0xa9, 0x20, 0x52, 0x33, - 0x2a, 0x50, 0xc3, 0x79, 0x08, 0x4b, 0x64, 0x74, 0x08, 0xec, 0xd0, 0x0b, 0xce, 0x9c, 0xc0, 0x0a, - 0x84, 0x86, 0x44, 0xea, 0xee, 0x22, 0x16, 0xf5, 0x64, 0x49, 0x8f, 0x54, 0xa4, 0xb5, 0x19, 0x7c, - 0x9f, 0x0f, 0xb8, 0x73, 0xce, 0x87, 0x28, 0xa7, 0xe5, 0xcc, 0x95, 0x44, 0x1d, 0x53, 0x16, 0xa2, - 0xd0, 0x3d, 0x1d, 0x5b, 0xd3, 0xc9, 0xd0, 0x16, 0xc2, 0x4a, 0x9d, 0x84, 0x61, 0x77, 0x3a, 0x3e, - 0x22, 0x08, 0x7b, 0x0c, 0x4a, 0x12, 0x93, 0xf2, 0x61, 0x23, 0xc1, 0xcf, 0x04, 0xb1, 0x9a, 0x55, - 0x89, 0x41, 0x82, 0x62, 0x42, 0xe6, 0x6c, 0xce, 0xc8, 0x9c, 0x2d, 0x28, 0x4e, 0x7c, 0xe7, 0xdc, - 0x0e, 0x79, 0x6b, 0x91, 0x18, 0xb8, 0xfc, 0x14, 0x9c, 0xc1, 0x71, 0x9d, 0xd0, 0xb1, 0x43, 0xcf, - 0x6f, 0x31, 0x2c, 0x8b, 0x01, 0xec, 0x01, 0x2c, 0x22, 0x8d, 0x04, 0xa1, 0x1d, 0x4e, 0x03, 0x29, - 0x81, 0x2e, 0x21, 0x31, 0xa1, 0x0c, 0xdd, 0x43, 0x38, 0x0a, 0xa1, 0xec, 0x5b, 0xb0, 0x4a, 0x64, - 0x81, 0x35, 0xa4, 0x64, 0x8d, 0x02, 0xc1, 0x32, 0x2e, 0xc5, 0x12, 0x96, 0x0a, 0xfa, 0x96, 0xf2, - 0xb5, 0x90, 0x0e, 0x9e, 0xc2, 0x9a, 0x24, 0x93, 0xb9, 0x5a, 0x2b, 0x58, 0x6b, 0x99, 0x8a, 0x67, - 0xaa, 0x3d, 0x84, 0x45, 0x31, 0x24, 0x67, 0x60, 0xc9, 0xda, 0xe2, 0x24, 0xac, 0x8a, 0xd1, 0xa3, - 0xa6, 0xd4, 0xa0, 0x42, 0x13, 0xcb, 0x9e, 0xf3, 0x2b, 0xf6, 0x3d, 0x68, 0x10, 0xc9, 0xa0, 0x7a, - 0x85, 0x9c, 0x7e, 0x1d, 0x39, 0xfd, 0x8a, 0xb2, 0x70, 0x46, 0xa5, 0xc8, 0xec, 0xeb, 0x83, 0xc4, - 0xb7, 0x38, 0x0e, 0x23, 0xe7, 0x84, 0x87, 0xce, 0x98, 0xb7, 0xd6, 0x88, 0xc0, 0xd4, 0xb7, 0x38, - 0xa9, 0xd3, 0x09, 0x96, 0xb4, 0x88, 0x2f, 0xd0, 0x17, 0xd2, 0xee, 0xc8, 0x0b, 0xb8, 0x32, 0x51, - 0xb5, 0x6e, 0xca, 0x43, 0x28, 0x80, 0x92, 0xed, 0x19, 0x3f, 0xcd, 0xd0, 0x3d, 0x26, 0x8f, 0x7d, - 0xa0, 0x69, 0x65, 0x74, 0xe0, 0x2d, 0xcf, 0x1d, 0x5d, 0x49, 0x1e, 0x00, 0x04, 0x3a, 0x70, 0x47, - 0x78, 0x08, 0x1d, 0x57, 0x47, 0x21, 0x96, 0x59, 0x55, 0x40, 0x44, 0xba, 0x03, 0x95, 0xc9, 0xf4, - 0x78, 0xe4, 0x0c, 0x08, 0x25, 0x47, 0xad, 0x10, 0x08, 0x11, 0x84, 0x5a, 0x4a, 0x84, 0x40, 0x18, - 0x79, 0xc4, 0xa8, 0x48, 0x18, 0xa2, 0x20, 0x4b, 0xe6, 0x3e, 0x72, 0x81, 0xaa, 0x89, 0x7f, 0x1b, - 0x1b, 0xb0, 0x9c, 0x1c, 0xb4, 0xbc, 0x2f, 0x1e, 0x40, 0x49, 0xb2, 0x18, 0x65, 0xaf, 0xa8, 0x6b, - 0x16, 0x64, 0xa1, 0x59, 0x45, 0xe5, 0xc6, 0x6f, 0x2d, 0xc0, 0x92, 0x84, 0x6e, 0x8a, 0x15, 0xe9, - 0x4d, 0xc7, 0x63, 0xdb, 0x4f, 0xe1, 0x5d, 0x99, 0x97, 0xf3, 0xae, 0xec, 0x1c, 0xef, 0x4a, 0x2a, - 0xac, 0xc4, 0xfa, 0x92, 0x0a, 0xab, 0xd8, 0x02, 0xd2, 0x21, 0x74, 0xf3, 0x65, 0x4d, 0x82, 0xfb, - 0x64, 0x26, 0x9d, 0xe3, 0xb4, 0x85, 0x14, 0x4e, 0xab, 0xf3, 0xc9, 0x85, 0x19, 0x3e, 0xf9, 0x16, - 0xd0, 0x5e, 0x2b, 0xb6, 0x5f, 0x24, 0xb5, 0x02, 0x61, 0xd2, 0x06, 0x7a, 0x0f, 0x1a, 0xb3, 0xac, - 0x89, 0x78, 0x60, 0x3d, 0x85, 0x31, 0x39, 0x63, 0x8e, 0x97, 0x8c, 0x86, 0x5c, 0x96, 0x8c, 0xc9, - 0x19, 0xf3, 0x5d, 0x2c, 0x51, 0xf8, 0x1d, 0x00, 0xea, 0x1b, 0x69, 0x1d, 0x90, 0xd6, 0xdf, 0x4d, - 0xee, 0x85, 0xbe, 0xea, 0x0f, 0xc5, 0xc7, 0xd4, 0xe7, 0x48, 0xfc, 0x65, 0xac, 0x89, 0x74, 0xff, - 0x1c, 0xea, 0xde, 0x84, 0xbb, 0x56, 0xcc, 0x22, 0x2a, 0xd8, 0xd4, 0x3b, 0x2f, 0x69, 0xaa, 0xab, - 0x70, 0xcd, 0x9a, 0xa8, 0x1b, 0x7d, 0xb2, 0x3d, 0x5a, 0x78, 0xae, 0xb5, 0x56, 0xfd, 0x12, 0xad, - 0xd5, 0xb1, 0x72, 0xf4, 0x6d, 0xfc, 0x83, 0x0c, 0x54, 0xb4, 0x61, 0xb3, 0x15, 0x58, 0xdc, 0x3c, - 0x38, 0x38, 0xec, 0x98, 0xed, 0x7e, 0xf7, 0x93, 0x8e, 0xb5, 0xb9, 0x7b, 0xd0, 0xeb, 0x34, 0x6f, - 0x08, 0xf0, 0xee, 0xc1, 0x66, 0x7b, 0xd7, 0xda, 0x3e, 0x30, 0x37, 0x15, 0x38, 0xc3, 0x56, 0x81, - 0x99, 0x9d, 0xbd, 0x83, 0x7e, 0x27, 0x01, 0xcf, 0xb2, 0x26, 0x54, 0x37, 0xcc, 0x4e, 0x7b, 0x73, - 0x47, 0x42, 0x72, 0x6c, 0x19, 0x9a, 0xdb, 0x47, 0xfb, 0x5b, 0xdd, 0xfd, 0x67, 0xd6, 0x66, 0x7b, - 0x7f, 0xb3, 0xb3, 0xdb, 0xd9, 0x6a, 0xe6, 0x59, 0x0d, 0xca, 0xed, 0x8d, 0xf6, 0xfe, 0xd6, 0xc1, - 0x7e, 0x67, 0xab, 0x59, 0x30, 0x7e, 0x05, 0xca, 0xf1, 0x44, 0x2b, 0x50, 0x3c, 0xda, 0x7f, 0xbe, - 0x7f, 0xf0, 0xe9, 0x7e, 0xf3, 0x06, 0x2b, 0x43, 0x01, 0xfb, 0x6f, 0x66, 0x18, 0xc0, 0x02, 0xf5, - 0xd9, 0xcc, 0xb2, 0x12, 0xe4, 0x37, 0x0e, 0xfa, 0x3b, 0xcd, 0x9c, 0xf1, 0xe7, 0x19, 0x58, 0xc1, - 0x29, 0x0f, 0x67, 0x99, 0xc0, 0x5d, 0xa8, 0x0c, 0x3c, 0x6f, 0x22, 0x14, 0xa4, 0x58, 0x10, 0xd0, - 0x41, 0xe2, 0x80, 0x13, 0xcf, 0x3d, 0xf1, 0xfc, 0x01, 0x97, 0x3c, 0x00, 0x10, 0xb4, 0x2d, 0x20, - 0x82, 0x06, 0x25, 0x11, 0x13, 0x06, 0xb1, 0x80, 0x0a, 0xc1, 0x08, 0x65, 0x15, 0x16, 0x8e, 0x7d, - 0x6e, 0x0f, 0xce, 0xe4, 0xe9, 0x97, 0x5f, 0xec, 0xeb, 0xb1, 0xea, 0x3e, 0x10, 0x34, 0x35, 0xe2, - 0x43, 0x3c, 0x02, 0x25, 0xb3, 0x21, 0xe1, 0x9b, 0x12, 0x2c, 0x2e, 0x11, 0xfb, 0xd8, 0x76, 0x87, - 0x9e, 0xcb, 0x87, 0x52, 0x43, 0x88, 0x01, 0xc6, 0x21, 0xac, 0xce, 0xce, 0x4f, 0xf2, 0x8b, 0x0f, - 0x34, 0x7e, 0x41, 0x02, 0xfb, 0xfa, 0xf5, 0xa4, 0xa0, 0xf1, 0x8e, 0x7f, 0x9c, 0x87, 0xbc, 0x10, - 0xe0, 0xae, 0x95, 0xf5, 0x74, 0x89, 0x3c, 0x37, 0xe7, 0xb5, 0x41, 0x0b, 0x01, 0xdd, 0xec, 0x64, - 0x86, 0x2a, 0x23, 0x04, 0x6f, 0xf4, 0xa8, 0xd8, 0xe7, 0x83, 0x73, 0x69, 0x87, 0xa2, 0x62, 0x93, - 0x0f, 0xce, 0x51, 0x15, 0xb2, 0x43, 0xaa, 0x4b, 0xe7, 0xbd, 0x18, 0xd8, 0x21, 0xd6, 0x94, 0x45, - 0x58, 0xaf, 0x18, 0x15, 0x61, 0xad, 0x16, 0x14, 0x1d, 0xf7, 0xd8, 0x9b, 0xba, 0x43, 0x3c, 0xde, - 0x25, 0x53, 0x7d, 0xa2, 0x93, 0x08, 0x39, 0x91, 0xb8, 0x3f, 0xe8, 0x34, 0x97, 0x04, 0xa0, 0x2f, - 0x6e, 0x90, 0xf7, 0xa1, 0x1c, 0x5c, 0xb9, 0x03, 0xfd, 0x0c, 0x2f, 0xcb, 0xf5, 0x11, 0xb3, 0x7f, - 0xd8, 0xbb, 0x72, 0x07, 0x78, 0x62, 0x4b, 0x81, 0xfc, 0x8b, 0x3d, 0x85, 0x52, 0x64, 0xae, 0x25, - 0x0e, 0x7c, 0x53, 0xaf, 0xa1, 0x6c, 0xb4, 0xa4, 0x15, 0x47, 0xa8, 0xec, 0x11, 0x2c, 0xa0, 0x4d, - 0x35, 0x68, 0x55, 0xb1, 0x92, 0x12, 0xd3, 0xc5, 0x30, 0xd0, 0x3f, 0xc3, 0x87, 0x68, 0x5f, 0x35, - 0x25, 0xda, 0xfa, 0x73, 0xa8, 0x25, 0xda, 0xd2, 0x75, 0xdf, 0x1a, 0xe9, 0xbe, 0xef, 0xe8, 0xba, - 0x6f, 0x7c, 0x13, 0xc8, 0x6a, 0xba, 0x2e, 0xfc, 0xab, 0x50, 0x52, 0x53, 0x11, 0xe7, 0x4f, 0x9e, - 0x1d, 0xab, 0xf7, 0xd9, 0xfe, 0x66, 0xf3, 0x06, 0x6b, 0x40, 0xa5, 0xbd, 0x89, 0x47, 0x1a, 0x01, - 0x19, 0x81, 0x72, 0xd8, 0xee, 0xf5, 0x22, 0x48, 0xd6, 0xd8, 0x86, 0xe6, 0xec, 0x48, 0x05, 0x4d, - 0x86, 0x0a, 0x26, 0x2d, 0xce, 0x31, 0x40, 0x68, 0x36, 0x64, 0x44, 0x26, 0xf1, 0x99, 0x3e, 0x8c, - 0xa7, 0xd0, 0x14, 0xf7, 0x9a, 0x58, 0xaa, 0x40, 0xb3, 0xdc, 0x8e, 0x84, 0x48, 0xa6, 0x5b, 0x9d, - 0x4b, 0x66, 0x85, 0x60, 0xd8, 0x95, 0xf1, 0x01, 0x2c, 0x6a, 0xd5, 0x62, 0x4d, 0x54, 0xdc, 0x95, - 0xb3, 0x9a, 0x28, 0xea, 0x1d, 0x54, 0x62, 0xac, 0xc1, 0x8a, 0xf8, 0xec, 0x9c, 0x73, 0x37, 0xec, - 0x4d, 0x8f, 0xc9, 0x55, 0xe8, 0x78, 0xae, 0xd0, 0x47, 0xca, 0x51, 0xc9, 0xf5, 0x44, 0xfe, 0x50, - 0x2a, 0xad, 0x59, 0x24, 0x8d, 0x75, 0xad, 0x07, 0xac, 0xf8, 0x10, 0xff, 0x4d, 0x28, 0xaf, 0xe5, - 0x08, 0x24, 0x96, 0xf5, 0xb0, 0xd3, 0x31, 0xad, 0x83, 0xfd, 0xdd, 0xee, 0xbe, 0x60, 0x94, 0x62, - 0x59, 0x11, 0xb0, 0xbd, 0x8d, 0x90, 0x8c, 0xd1, 0x84, 0xfa, 0x33, 0x1e, 0x76, 0xdd, 0x13, 0x4f, - 0xb9, 0xc5, 0x7e, 0x56, 0x80, 0x46, 0x04, 0x8a, 0x95, 0xdf, 0x73, 0xee, 0x07, 0x8e, 0xe7, 0xa2, - 0x1c, 0x5b, 0x36, 0xd5, 0xa7, 0xb8, 0xdd, 0x9c, 0x21, 0x77, 0x43, 0x27, 0xbc, 0xb2, 0x12, 0x96, - 0xb2, 0xba, 0x02, 0xcb, 0x5b, 0x74, 0x19, 0x0a, 0xf6, 0xc8, 0xb1, 0x95, 0x87, 0x95, 0x3e, 0x04, - 0x74, 0xe0, 0x8d, 0x3c, 0x1f, 0x45, 0xd6, 0xb2, 0x49, 0x1f, 0xec, 0x31, 0x2c, 0x0b, 0xd1, 0x59, - 0x37, 0x5f, 0x22, 0xff, 0x20, 0xa3, 0x1d, 0x73, 0xa7, 0xe3, 0xc3, 0xd8, 0x84, 0x29, 0x4a, 0xc4, - 0xdd, 0x29, 0x6a, 0x48, 0x61, 0x29, 0xaa, 0x40, 0x5a, 0xd8, 0xa2, 0x3b, 0x1d, 0xb7, 0xb1, 0x24, - 0xc2, 0x7f, 0x02, 0x2b, 0x02, 0x3f, 0x12, 0xaf, 0xa2, 0x1a, 0x0d, 0xac, 0x21, 0x1a, 0xeb, 0xca, - 0xb2, 0xa8, 0xce, 0x2d, 0x28, 0xd3, 0xa8, 0xc4, 0x8e, 0x17, 0x48, 0xfa, 0xc6, 0xa1, 0x70, 0x3f, - 0x98, 0x73, 0x86, 0x2e, 0x90, 0x20, 0x30, 0xe3, 0x0c, 0xd5, 0xdc, 0xa9, 0xa5, 0x59, 0x77, 0xea, - 0x13, 0x58, 0x39, 0x16, 0x24, 0x78, 0xc6, 0xed, 0x21, 0xf7, 0xad, 0x98, 0xb0, 0x49, 0xcb, 0x58, - 0x12, 0x85, 0x3b, 0x58, 0x16, 0x9d, 0x03, 0x21, 0xe7, 0x08, 0xb6, 0xc0, 0x87, 0x56, 0xe8, 0x59, - 0x28, 0xfe, 0x20, 0x83, 0x29, 0x99, 0x35, 0x02, 0xf7, 0xbd, 0x4d, 0x01, 0x4c, 0xe2, 0x9d, 0xfa, - 0xf6, 0xe4, 0x4c, 0xea, 0x01, 0x11, 0xde, 0x33, 0x01, 0x64, 0x6f, 0x40, 0x51, 0x90, 0xbc, 0xcb, - 0xc9, 0x67, 0x45, 0x92, 0xb6, 0x02, 0xb1, 0x77, 0x60, 0x01, 0xfb, 0x08, 0x5a, 0x4d, 0xa4, 0xf7, - 0x6a, 0xcc, 0xc8, 0x1d, 0xd7, 0x94, 0x65, 0x42, 0x98, 0x9c, 0xfa, 0x0e, 0x71, 0x99, 0xb2, 0x89, - 0x7f, 0xb3, 0xef, 0x6b, 0x2c, 0x6b, 0x09, 0xeb, 0x2a, 0x79, 0x60, 0x86, 0xd2, 0xae, 0xe3, 0x5e, - 0x5f, 0x29, 0x33, 0xfa, 0x41, 0xbe, 0x54, 0x69, 0x56, 0x8d, 0xef, 0x40, 0x81, 0x56, 0x47, 0x10, - 0x21, 0xae, 0x5d, 0x46, 0x12, 0x21, 0x42, 0x5b, 0x50, 0x74, 0x79, 0x78, 0xe1, 0xf9, 0x2f, 0x94, - 0x2d, 0x59, 0x7e, 0x1a, 0x3f, 0x46, 0x23, 0x48, 0xe4, 0x28, 0x27, 0x7d, 0x4e, 0x90, 0x07, 0x6d, - 0x6f, 0x70, 0x66, 0x4b, 0xbb, 0x4c, 0x09, 0x01, 0xbd, 0x33, 0x7b, 0x8e, 0x3c, 0xb2, 0xf3, 0xbe, - 0xf2, 0x77, 0xa0, 0xae, 0x5c, 0xf3, 0x81, 0x35, 0xe2, 0x27, 0xa1, 0x24, 0xf7, 0xaa, 0xf4, 0xcb, - 0x07, 0xbb, 0xfc, 0x24, 0x34, 0xf6, 0x60, 0x51, 0x12, 0xe4, 0xc1, 0x84, 0xab, 0xae, 0xbf, 0x9b, - 0x26, 0x4f, 0x57, 0x9e, 0x2c, 0x25, 0x2f, 0x5a, 0x7a, 0x72, 0x90, 0x10, 0xb2, 0x8d, 0x8f, 0x81, + // 11277 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5b, 0x8f, 0x24, 0xd7, + 0x79, 0xd8, 0xf6, 0x6d, 0xba, 0xfb, 0xeb, 0xeb, 0x9c, 0xb9, 0xf5, 0xce, 0x72, 0xb9, 0xcb, 0x22, + 0x45, 0xae, 0x96, 0xd2, 0xec, 0x72, 0x25, 0x52, 0x32, 0x19, 0xcb, 0xea, 0x99, 0xe9, 0xd9, 0x69, + 0xed, 0xdc, 0x58, 0xdd, 0x43, 0x9a, 0x72, 0x9c, 0x52, 0x4d, 0xf7, 0x99, 0x99, 0xf2, 0x76, 0x57, + 0x35, 0xab, 0xaa, 0xe7, 0x22, 0x81, 0x79, 0xc8, 0xc5, 0x08, 0x82, 0x24, 0x80, 0x91, 0x28, 0x40, + 0x9c, 0x18, 0x09, 0x12, 0x04, 0x41, 0x10, 0xc0, 0x70, 0x20, 0x07, 0xc8, 0x43, 0xde, 0xfd, 0x92, + 0xc0, 0x0f, 0x76, 0x5e, 0x02, 0xc3, 0x80, 0x91, 0xc4, 0x79, 0x0b, 0xfc, 0x13, 0x82, 0xf3, 0x7d, + 0xe7, 0x54, 0x9d, 0xea, 0xae, 0xd9, 0x5d, 0x4a, 0x8c, 0x5e, 0x76, 0xa7, 0xbe, 0xf3, 0x9d, 0xfb, + 0x77, 0xbe, 0xf3, 0x5d, 0x4f, 0x43, 0xd9, 0x9f, 0x0c, 0x36, 0x26, 0xbe, 0x17, 0x7a, 0xac, 0x30, + 0x72, 0xfd, 0xc9, 0x60, 0xfd, 0xb5, 0x33, 0xcf, 0x3b, 0x1b, 0xf1, 0x47, 0xf6, 0xc4, 0x79, 0x64, + 0xbb, 0xae, 0x17, 0xda, 0xa1, 0xe3, 0xb9, 0x01, 0x21, 0x19, 0x3f, 0x82, 0xfa, 0x53, 0xee, 0xf6, + 0x38, 0x1f, 0x9a, 0xfc, 0xf3, 0x29, 0x0f, 0x42, 0xf6, 0x2e, 0x2c, 0xda, 0xfc, 0xc7, 0x9c, 0x0f, + 0xad, 0x89, 0x1d, 0x04, 0x93, 0x73, 0xdf, 0x0e, 0x78, 0x2b, 0x73, 0x3f, 0xf3, 0xa0, 0x6a, 0x36, + 0xa9, 0xe0, 0x28, 0x82, 0xb3, 0x37, 0xa0, 0x1a, 0x08, 0x54, 0xee, 0x86, 0xbe, 0x37, 0xb9, 0x6e, + 0x65, 0x11, 0xaf, 0x22, 0x60, 0x1d, 0x02, 0x19, 0x23, 0x68, 0x44, 0x3d, 0x04, 0x13, 0xcf, 0x0d, + 0x38, 0x7b, 0x0c, 0xcb, 0x03, 0x67, 0x72, 0xce, 0x7d, 0x0b, 0x2b, 0x8f, 0x5d, 0x3e, 0xf6, 0x5c, + 0x67, 0xd0, 0xca, 0xdc, 0xcf, 0x3d, 0x28, 0x9b, 0x8c, 0xca, 0x44, 0x8d, 0x7d, 0x59, 0xc2, 0xde, + 0x81, 0x06, 0x77, 0x09, 0xce, 0x87, 0x58, 0x4b, 0x76, 0x55, 0x8f, 0xc1, 0xa2, 0x82, 0xf1, 0xf7, + 0xb2, 0xb0, 0xd8, 0x75, 0x9d, 0xf0, 0x53, 0x7b, 0x34, 0xe2, 0xa1, 0x9a, 0xd3, 0x3b, 0xd0, 0xb8, + 0x44, 0x00, 0xce, 0xe9, 0xd2, 0xf3, 0x87, 0x72, 0x46, 0x75, 0x02, 0x1f, 0x49, 0xe8, 0x8d, 0x23, + 0xcb, 0xde, 0x38, 0xb2, 0xd4, 0xe5, 0xca, 0xdd, 0xb0, 0x5c, 0xef, 0x40, 0xc3, 0xe7, 0x03, 0xef, + 0x82, 0xfb, 0xd7, 0xd6, 0xa5, 0xe3, 0x0e, 0xbd, 0xcb, 0x56, 0xfe, 0x7e, 0xe6, 0x41, 0xc1, 0xac, + 0x2b, 0xf0, 0xa7, 0x08, 0x65, 0x9b, 0xd0, 0x18, 0x9c, 0xdb, 0xae, 0xcb, 0x47, 0xd6, 0x89, 0x3d, + 0x78, 0x3e, 0x9d, 0x04, 0xad, 0xc2, 0xfd, 0xcc, 0x83, 0xca, 0x93, 0xdb, 0x1b, 0xb8, 0xab, 0x1b, + 0x5b, 0xe7, 0xb6, 0xbb, 0x89, 0x25, 0x3d, 0xd7, 0x9e, 0x04, 0xe7, 0x5e, 0x68, 0xd6, 0x65, 0x0d, + 0x02, 0x07, 0xc6, 0x32, 0x30, 0x7d, 0x25, 0x68, 0xed, 0x8d, 0xff, 0x90, 0x81, 0xa5, 0x63, 0x77, + 0xe4, 0x0d, 0x9e, 0xff, 0x9c, 0x4b, 0x94, 0x32, 0x87, 0xec, 0xab, 0xce, 0x21, 0xf7, 0x65, 0xe7, + 0xb0, 0x0a, 0xcb, 0xc9, 0xc1, 0xca, 0x59, 0x70, 0x58, 0x11, 0xb5, 0xcf, 0xb8, 0x1a, 0x96, 0x9a, + 0xc6, 0xd7, 0xa1, 0x39, 0x98, 0xfa, 0x3e, 0x77, 0xe7, 0xe6, 0xd1, 0x90, 0xf0, 0x68, 0x22, 0x6f, + 0x40, 0xd5, 0xe5, 0x97, 0x31, 0x9a, 0xa4, 0x5d, 0x97, 0x5f, 0x2a, 0x14, 0xa3, 0x05, 0xab, 0xb3, + 0xdd, 0xc8, 0x01, 0xfc, 0x65, 0x06, 0xf2, 0xc7, 0xe1, 0x95, 0xc7, 0xde, 0x87, 0xaa, 0x3d, 0x1c, + 0xfa, 0x3c, 0x08, 0xac, 0xf0, 0x7a, 0x42, 0x27, 0xa5, 0xfe, 0x84, 0xc9, 0x29, 0xb6, 0xa9, 0xa8, + 0x7f, 0x3d, 0xe1, 0x66, 0xc5, 0x8e, 0x3f, 0x58, 0x0b, 0x8a, 0xf2, 0x13, 0xfb, 0x2d, 0x9b, 0xea, + 0x93, 0xdd, 0x05, 0xb0, 0xc7, 0xde, 0xd4, 0x0d, 0xad, 0xc0, 0x0e, 0x71, 0xc5, 0x72, 0x66, 0x99, + 0x20, 0x3d, 0x3b, 0x64, 0x77, 0xa0, 0x3c, 0x79, 0x6e, 0x05, 0x03, 0xdf, 0x99, 0x84, 0x48, 0x3c, + 0x65, 0xb3, 0x34, 0x79, 0xde, 0xc3, 0x6f, 0xf6, 0x2e, 0x94, 0xbc, 0x69, 0x38, 0xf1, 0x1c, 0x37, + 0x94, 0xf4, 0xd2, 0x90, 0x03, 0x39, 0x9c, 0x86, 0x47, 0x02, 0x6c, 0x46, 0x08, 0xec, 0x2d, 0xa8, + 0x0d, 0x3c, 0xf7, 0xd4, 0xf1, 0xc7, 0xc4, 0x11, 0x5a, 0x0b, 0xd8, 0x57, 0x12, 0x68, 0xfc, 0x41, + 0x16, 0x2a, 0x7d, 0xdf, 0x76, 0x03, 0x7b, 0x20, 0x00, 0x6c, 0x0d, 0x8a, 0xe1, 0x95, 0x75, 0x6e, + 0x07, 0xe7, 0x38, 0xd5, 0xb2, 0xb9, 0x10, 0x5e, 0xed, 0xda, 0xc1, 0x39, 0x5b, 0x85, 0x05, 0x1a, + 0x25, 0x4e, 0x28, 0x67, 0xca, 0x2f, 0x71, 0x40, 0xdc, 0xe9, 0xd8, 0x4a, 0x76, 0x95, 0x43, 0x8a, + 0x69, 0xba, 0xd3, 0xf1, 0x96, 0x0e, 0x17, 0x93, 0x3f, 0x11, 0xdb, 0x4d, 0x1d, 0xd0, 0xf4, 0xca, + 0x08, 0xc1, 0x3e, 0xde, 0x80, 0xaa, 0x2c, 0xe6, 0xce, 0xd9, 0x39, 0xcd, 0xb1, 0x60, 0x56, 0x08, + 0x01, 0x41, 0xa2, 0x85, 0xd0, 0x19, 0x73, 0x2b, 0x08, 0xed, 0xf1, 0x44, 0x4e, 0xa9, 0x2c, 0x20, + 0x3d, 0x01, 0xc0, 0x62, 0x2f, 0xb4, 0x47, 0xd6, 0x29, 0xe7, 0x41, 0xab, 0x28, 0x8b, 0x05, 0x64, + 0x87, 0xf3, 0x80, 0x7d, 0x0d, 0xea, 0x43, 0x1e, 0x84, 0x96, 0xdc, 0x0c, 0x1e, 0xb4, 0x4a, 0x78, + 0xf2, 0x6b, 0x02, 0xda, 0x56, 0x40, 0xf6, 0x1a, 0x80, 0x6f, 0x5f, 0x5a, 0x62, 0x21, 0xf8, 0x55, + 0xab, 0x4c, 0xbb, 0xe0, 0xdb, 0x97, 0xfd, 0xab, 0x5d, 0x7e, 0x25, 0xa8, 0xe6, 0x29, 0x0f, 0xb5, + 0x45, 0x0b, 0x24, 0x75, 0x1a, 0x7b, 0xc0, 0x34, 0xf0, 0x36, 0x0f, 0x6d, 0x67, 0x14, 0xb0, 0x0f, + 0xa0, 0x1a, 0x6a, 0xc8, 0xc8, 0x06, 0x2b, 0x11, 0x09, 0x69, 0x15, 0xcc, 0x04, 0x9e, 0x71, 0x0e, + 0xa5, 0x1d, 0xce, 0xf7, 0x9c, 0xb1, 0x13, 0xb2, 0x55, 0x28, 0x9c, 0x3a, 0x57, 0x9c, 0x88, 0x3d, + 0xb7, 0x7b, 0xcb, 0xa4, 0x4f, 0x76, 0x0f, 0x00, 0xff, 0xb0, 0xc6, 0x11, 0x35, 0xed, 0xde, 0x32, + 0xcb, 0x08, 0xdb, 0x0f, 0xec, 0x90, 0xad, 0x43, 0x71, 0xc2, 0xfd, 0x01, 0x57, 0xfb, 0xb6, 0x7b, + 0xcb, 0x54, 0x80, 0xcd, 0x22, 0x14, 0x46, 0xa2, 0x75, 0xe3, 0x8f, 0x0a, 0x50, 0xe9, 0x71, 0x37, + 0x3a, 0x65, 0x0c, 0xf2, 0x62, 0x41, 0xe4, 0xc9, 0xc2, 0xbf, 0xd9, 0x9b, 0x50, 0xc1, 0xa5, 0x0b, + 0x42, 0xdf, 0x71, 0xcf, 0x88, 0xaa, 0x37, 0xb3, 0xad, 0x8c, 0x09, 0x02, 0xdc, 0x43, 0x28, 0x6b, + 0x42, 0xce, 0x1e, 0x2b, 0xaa, 0x16, 0x7f, 0xb2, 0xdb, 0x50, 0xb2, 0xc7, 0x21, 0x0d, 0xaf, 0x8a, + 0xe0, 0xa2, 0x3d, 0x0e, 0x71, 0x68, 0x6f, 0x40, 0x75, 0x62, 0x5f, 0x8f, 0xc5, 0x59, 0x8e, 0xc8, + 0xa1, 0x6a, 0x56, 0x24, 0x0c, 0x09, 0xe2, 0x09, 0x2c, 0xe9, 0x28, 0xaa, 0xf3, 0x42, 0xd4, 0xf9, + 0xa2, 0x86, 0x2d, 0xc7, 0xf0, 0x0e, 0x34, 0x54, 0x1d, 0x9f, 0xe6, 0x83, 0x64, 0x52, 0x36, 0xeb, + 0x12, 0xac, 0x66, 0xf9, 0x00, 0x9a, 0xa7, 0x8e, 0x6b, 0x8f, 0xac, 0xc1, 0x28, 0xbc, 0xb0, 0x86, + 0x7c, 0x14, 0xda, 0x48, 0x31, 0x05, 0xb3, 0x8e, 0xf0, 0xad, 0x51, 0x78, 0xb1, 0x2d, 0xa0, 0xec, + 0x1b, 0x50, 0x3e, 0xe5, 0xdc, 0xc2, 0xc5, 0x6a, 0x95, 0x12, 0x07, 0x4f, 0xed, 0x90, 0x59, 0x3a, + 0x55, 0x7b, 0xf5, 0x0d, 0x68, 0x7a, 0xd3, 0xf0, 0xcc, 0x73, 0xdc, 0x33, 0x4b, 0xf0, 0x3b, 0xcb, + 0x19, 0x22, 0x0d, 0xe5, 0x37, 0xb3, 0x8f, 0x33, 0x66, 0x5d, 0x95, 0x09, 0xce, 0xd3, 0x1d, 0xb2, + 0xb7, 0xa1, 0x31, 0xb2, 0x83, 0xd0, 0x3a, 0xf7, 0x26, 0xd6, 0x64, 0x7a, 0xf2, 0x9c, 0x5f, 0xb7, + 0x6a, 0xb8, 0x10, 0x35, 0x01, 0xde, 0xf5, 0x26, 0x47, 0x08, 0x14, 0x94, 0x8d, 0xe3, 0xa4, 0x41, + 0xc0, 0xfd, 0xcc, 0x83, 0x9a, 0x59, 0x16, 0x10, 0xea, 0xf4, 0x33, 0x58, 0xc2, 0xed, 0x19, 0x4c, + 0x83, 0xd0, 0x1b, 0x5b, 0x82, 0x57, 0xfb, 0xc3, 0xa0, 0x55, 0x41, 0x5a, 0xfb, 0xba, 0x1c, 0xac, + 0xb6, 0xc7, 0x1b, 0xdb, 0x3c, 0x08, 0xb7, 0x10, 0xd9, 0x24, 0x5c, 0x71, 0xa1, 0x5f, 0x9b, 0x8b, + 0xc3, 0x59, 0x38, 0xfb, 0x06, 0x30, 0x7b, 0x34, 0xf2, 0x2e, 0xad, 0x80, 0x8f, 0x4e, 0x2d, 0xb9, + 0x88, 0xad, 0xfa, 0xfd, 0xcc, 0x83, 0x92, 0xd9, 0xc4, 0x92, 0x1e, 0x1f, 0x9d, 0x1e, 0x11, 0x9c, + 0x7d, 0x00, 0x78, 0x98, 0xac, 0x53, 0x6e, 0x87, 0x53, 0x9f, 0x07, 0xad, 0xc6, 0xfd, 0xdc, 0x83, + 0xfa, 0x93, 0xc5, 0x68, 0xbd, 0x10, 0xbc, 0xe9, 0x84, 0x66, 0x55, 0xe0, 0xc9, 0xef, 0x60, 0x7d, + 0x1b, 0x56, 0xd3, 0x87, 0x24, 0x88, 0x4a, 0xac, 0x8a, 0x20, 0xc6, 0xbc, 0x29, 0xfe, 0x64, 0xcb, + 0x50, 0xb8, 0xb0, 0x47, 0x53, 0x2e, 0x79, 0x3a, 0x7d, 0x7c, 0x98, 0xfd, 0x6e, 0xc6, 0xf8, 0xc3, + 0x0c, 0x54, 0x69, 0x96, 0x52, 0x16, 0x79, 0x13, 0x6a, 0x8a, 0x1a, 0xb8, 0xef, 0x7b, 0xbe, 0xe4, + 0x6a, 0x8a, 0xf2, 0x3a, 0x02, 0x26, 0x6e, 0x15, 0x85, 0x34, 0xf1, 0xb9, 0x33, 0xb6, 0xcf, 0x54, + 0xd3, 0x8a, 0x94, 0x8e, 0x24, 0x98, 0xbd, 0x17, 0xb7, 0xe7, 0x7b, 0xd3, 0x90, 0xcb, 0x3b, 0xaf, + 0x2a, 0xa7, 0x67, 0x0a, 0x58, 0xd4, 0x3a, 0x7e, 0xbd, 0x02, 0x9d, 0x1b, 0x3f, 0xcd, 0x00, 0x13, + 0xc3, 0xee, 0x7b, 0xd4, 0x80, 0xa4, 0xd0, 0xd9, 0x9a, 0x99, 0x57, 0x3e, 0x21, 0xd9, 0x17, 0x9d, + 0x10, 0x03, 0x0a, 0x34, 0xf6, 0x7c, 0xca, 0xd8, 0xa9, 0xe8, 0x07, 0xf9, 0x52, 0xae, 0x99, 0x37, + 0xfe, 0x47, 0x0e, 0x96, 0xb7, 0xe8, 0xca, 0x6e, 0x0f, 0x06, 0x7c, 0x12, 0x9d, 0x9d, 0x7b, 0x50, + 0x71, 0xbd, 0x21, 0x57, 0x14, 0x4b, 0x03, 0x03, 0x01, 0xd2, 0xc8, 0xf5, 0xdc, 0x76, 0x5c, 0x1a, + 0x38, 0x2d, 0x66, 0x19, 0x21, 0x38, 0xec, 0xb7, 0xa1, 0x31, 0xe1, 0xee, 0x50, 0x3f, 0x22, 0x24, + 0x54, 0xd5, 0x24, 0x58, 0x9e, 0x8e, 0x7b, 0x50, 0x39, 0x9d, 0x12, 0x9e, 0x60, 0x2c, 0x79, 0xa4, + 0x01, 0x90, 0xa0, 0x36, 0xf1, 0x97, 0xc9, 0x34, 0x38, 0xc7, 0xd2, 0x02, 0x96, 0x16, 0xc5, 0xb7, + 0x28, 0xba, 0x0b, 0x30, 0x9c, 0x06, 0xa1, 0x3c, 0x31, 0x0b, 0x58, 0x58, 0x16, 0x10, 0x3a, 0x31, + 0xdf, 0x84, 0xa5, 0xb1, 0x7d, 0x65, 0x21, 0xed, 0x58, 0x8e, 0x6b, 0x9d, 0x8e, 0xf0, 0xce, 0x29, + 0x22, 0x5e, 0x73, 0x6c, 0x5f, 0x7d, 0x22, 0x4a, 0xba, 0xee, 0x0e, 0xc2, 0x05, 0x5b, 0x51, 0xe2, + 0x8e, 0xcf, 0x03, 0xee, 0x5f, 0x70, 0xe4, 0x04, 0xf9, 0x48, 0xa6, 0x31, 0x09, 0x2a, 0x46, 0x34, + 0x16, 0xf3, 0x0e, 0x47, 0x03, 0x3a, 0xf6, 0x66, 0x71, 0xec, 0xb8, 0xbb, 0xe1, 0x68, 0x20, 0xee, + 0x15, 0xc1, 0x47, 0x26, 0xdc, 0xb7, 0x9e, 0x5f, 0xe2, 0x19, 0xce, 0x23, 0xdf, 0x38, 0xe2, 0xfe, + 0xb3, 0x4b, 0x71, 0xf5, 0x0f, 0x02, 0x64, 0x44, 0xf6, 0x75, 0xab, 0x82, 0x07, 0xbc, 0x34, 0x08, + 0x04, 0x0b, 0xb2, 0xaf, 0xc5, 0x21, 0x14, 0xa3, 0xb5, 0x71, 0x17, 0xf8, 0x10, 0x9b, 0x0f, 0x90, + 0xa3, 0xd6, 0x70, 0xb0, 0x6d, 0x59, 0x20, 0xfa, 0x09, 0x04, 0xd5, 0xab, 0xc1, 0x9e, 0x8e, 0xec, + 0xb3, 0x00, 0x59, 0x4a, 0xcd, 0xac, 0x4a, 0xe0, 0x8e, 0x80, 0x19, 0x9f, 0x92, 0x90, 0xa5, 0xed, + 0xad, 0x3c, 0x33, 0xe2, 0xaa, 0x47, 0x08, 0xee, 0x6b, 0xc9, 0x94, 0x5f, 0x69, 0x9b, 0x96, 0x4d, + 0xd9, 0x34, 0xe3, 0xf7, 0x32, 0x50, 0x95, 0x2d, 0xa3, 0x50, 0xc2, 0x36, 0x80, 0xa9, 0x5d, 0x0c, + 0xaf, 0x9c, 0xa1, 0x75, 0x72, 0x1d, 0xf2, 0x80, 0x88, 0x66, 0xf7, 0x96, 0xd9, 0x94, 0x65, 0xfd, + 0x2b, 0x67, 0xb8, 0x29, 0x4a, 0xd8, 0x43, 0x68, 0x26, 0xf0, 0x83, 0xd0, 0x27, 0x8a, 0xde, 0xbd, + 0x65, 0xd6, 0x35, 0xec, 0x5e, 0xe8, 0x8b, 0x33, 0x22, 0x44, 0x9e, 0x69, 0x68, 0x39, 0xee, 0x90, + 0x5f, 0x21, 0x19, 0xd5, 0xcc, 0x0a, 0xc1, 0xba, 0x02, 0xb4, 0x59, 0x87, 0xaa, 0xde, 0x9c, 0x71, + 0x06, 0x25, 0x25, 0x2f, 0xa1, 0xc0, 0x30, 0x33, 0x24, 0xb3, 0x1c, 0x46, 0x23, 0xb9, 0x0d, 0xa5, + 0xe4, 0x08, 0xcc, 0x62, 0xf8, 0xca, 0x1d, 0x1b, 0xdf, 0x83, 0xe6, 0x9e, 0x20, 0x1e, 0x57, 0x10, + 0xab, 0x94, 0xff, 0x56, 0x61, 0x41, 0x3b, 0x34, 0x65, 0x53, 0x7e, 0x89, 0x3b, 0xf7, 0xdc, 0x0b, + 0x42, 0xd9, 0x0b, 0xfe, 0x6d, 0xfc, 0x51, 0x06, 0x58, 0x27, 0x08, 0x9d, 0xb1, 0x1d, 0xf2, 0x1d, + 0x1e, 0xb1, 0x85, 0x43, 0xa8, 0x8a, 0xd6, 0xfa, 0x5e, 0x9b, 0x04, 0x32, 0x12, 0x28, 0xde, 0x95, + 0xc7, 0x78, 0xbe, 0xc2, 0x86, 0x8e, 0x4d, 0x6c, 0x3e, 0xd1, 0x80, 0x38, 0x65, 0xa1, 0xed, 0x9f, + 0xf1, 0x10, 0xc5, 0x38, 0x29, 0xef, 0x03, 0x81, 0x84, 0x00, 0xb7, 0xfe, 0x6b, 0xb0, 0x38, 0xd7, + 0x86, 0xce, 0x97, 0xcb, 0x29, 0x7c, 0x39, 0xa7, 0xf3, 0x65, 0x0b, 0x96, 0x12, 0xe3, 0x92, 0x94, + 0xb6, 0x06, 0x45, 0x71, 0x20, 0x84, 0x70, 0x90, 0x21, 0xa9, 0xf2, 0x94, 0x73, 0x21, 0x06, 0x3f, + 0x82, 0xe5, 0x53, 0xce, 0x7d, 0x3b, 0xc4, 0x42, 0x3c, 0x31, 0x62, 0x87, 0x64, 0xc3, 0x8b, 0xb2, + 0xac, 0x67, 0x87, 0x47, 0xdc, 0x17, 0x3b, 0x65, 0xfc, 0xcf, 0x0c, 0x34, 0x04, 0x07, 0xdd, 0xb7, + 0xdd, 0x6b, 0xb5, 0x4e, 0x7b, 0xa9, 0xeb, 0xf4, 0x40, 0xbb, 0x0c, 0x35, 0xec, 0x2f, 0xbb, 0x48, + 0xb9, 0xd9, 0x45, 0x62, 0xf7, 0xa1, 0x9a, 0x18, 0x6b, 0x01, 0xc7, 0x0a, 0x41, 0x34, 0xc8, 0x5f, + 0x7c, 0x19, 0xdf, 0x86, 0x66, 0x3c, 0x6c, 0xb9, 0x86, 0x0c, 0xf2, 0x82, 0x24, 0x65, 0x03, 0xf8, + 0xb7, 0xf1, 0x2f, 0x32, 0x84, 0xb8, 0xe5, 0x39, 0x91, 0x74, 0x2a, 0x10, 0x85, 0xdc, 0xab, 0x10, + 0xc5, 0xdf, 0x37, 0x4a, 0xf5, 0xbf, 0xf8, 0x64, 0xc5, 0xd1, 0x09, 0xb8, 0x3b, 0xb4, 0xec, 0xd1, + 0x08, 0x99, 0x6f, 0xc9, 0x2c, 0x8a, 0xef, 0xf6, 0x68, 0x64, 0xbc, 0x03, 0x8b, 0xda, 0xe8, 0x5e, + 0x30, 0x8f, 0x03, 0x60, 0x7b, 0x4e, 0x10, 0x1e, 0xbb, 0xc1, 0x44, 0x13, 0xdc, 0xee, 0x40, 0x59, + 0x70, 0x58, 0x31, 0x32, 0x3a, 0xb2, 0x05, 0x53, 0xb0, 0x5c, 0x31, 0xae, 0x00, 0x0b, 0xed, 0x2b, + 0x59, 0x98, 0x95, 0x85, 0xf6, 0x15, 0x16, 0x1a, 0xdf, 0x85, 0xa5, 0x44, 0x7b, 0xb2, 0xeb, 0x37, + 0xa0, 0x30, 0x0d, 0xaf, 0x3c, 0x25, 0x9a, 0x57, 0x24, 0x85, 0x08, 0x05, 0xd0, 0xa4, 0x12, 0xe3, + 0x23, 0x58, 0x3c, 0xe0, 0x97, 0xf2, 0x10, 0xab, 0x81, 0xbc, 0x0d, 0xf9, 0x97, 0x28, 0x85, 0x58, + 0x6e, 0x6c, 0x00, 0xd3, 0x2b, 0xcb, 0x5e, 0x35, 0x1d, 0x31, 0x93, 0xd0, 0x11, 0x8d, 0xb7, 0x81, + 0xf5, 0x9c, 0x33, 0x77, 0x9f, 0x07, 0x81, 0x7d, 0x16, 0x1d, 0xfb, 0x26, 0xe4, 0xc6, 0xc1, 0x99, + 0xe4, 0x51, 0xe2, 0x4f, 0xe3, 0x5b, 0xb0, 0x94, 0xc0, 0x93, 0x0d, 0xbf, 0x06, 0xe5, 0xc0, 0x39, + 0x73, 0x51, 0xb0, 0x92, 0x4d, 0xc7, 0x00, 0x63, 0x07, 0x96, 0x3f, 0xe1, 0xbe, 0x73, 0x7a, 0xfd, + 0xb2, 0xe6, 0x93, 0xed, 0x64, 0x67, 0xdb, 0xe9, 0xc0, 0xca, 0x4c, 0x3b, 0xb2, 0x7b, 0x22, 0x5f, + 0xb9, 0x93, 0x25, 0x93, 0x3e, 0x34, 0xbe, 0x97, 0xd5, 0xf9, 0x9e, 0x71, 0x0c, 0x6c, 0xcb, 0x73, + 0x5d, 0x3e, 0x08, 0x8f, 0x38, 0xf7, 0x63, 0x2b, 0x55, 0x4c, 0xab, 0x95, 0x27, 0x6b, 0x72, 0x65, + 0x67, 0x99, 0xa9, 0x24, 0x62, 0x06, 0xf9, 0x09, 0xf7, 0xc7, 0xd8, 0x70, 0xc9, 0xc4, 0xbf, 0x8d, + 0x15, 0x58, 0x4a, 0x34, 0x2b, 0xf5, 0xfa, 0xc7, 0xb0, 0xb2, 0xed, 0x04, 0x83, 0xf9, 0x0e, 0xd7, + 0xa0, 0x38, 0x99, 0x9e, 0x58, 0x49, 0xbe, 0xfc, 0x8c, 0x5f, 0x0b, 0x6d, 0x6f, 0xb6, 0x86, 0x6c, + 0xeb, 0xef, 0x64, 0x20, 0xbf, 0xdb, 0xdf, 0xdb, 0x62, 0xeb, 0x50, 0x72, 0xdc, 0x81, 0x37, 0x16, + 0x82, 0x17, 0xcd, 0x39, 0xfa, 0xbe, 0xf1, 0x80, 0xdd, 0x81, 0x32, 0xca, 0x6b, 0x42, 0xb5, 0x95, + 0xa2, 0x4f, 0x49, 0x00, 0xf6, 0xbc, 0xc1, 0x73, 0xa1, 0x53, 0xf3, 0xab, 0x89, 0xe3, 0xa3, 0xd6, + 0xac, 0x94, 0xe1, 0x3c, 0xdd, 0xf5, 0x71, 0x01, 0x69, 0xc4, 0xc6, 0x5f, 0x15, 0xa1, 0x28, 0x6f, + 0x5b, 0xba, 0xb9, 0x43, 0xe7, 0x82, 0xc7, 0x37, 0xb7, 0xf8, 0x12, 0xf2, 0x80, 0xcf, 0xc7, 0x5e, + 0x18, 0x09, 0x6c, 0xb4, 0x07, 0x55, 0x02, 0x4a, 0x91, 0x4d, 0x13, 0x1a, 0xc8, 0xc4, 0x90, 0x23, + 0xa4, 0x81, 0x7e, 0x95, 0xdf, 0x81, 0xa2, 0xba, 0xfb, 0xf3, 0x91, 0x4e, 0xb3, 0x30, 0x20, 0x69, + 0x6d, 0x1d, 0x4a, 0x03, 0x7b, 0x62, 0x0f, 0x9c, 0xf0, 0x5a, 0x32, 0x84, 0xe8, 0x5b, 0xb4, 0x3e, + 0xf2, 0x06, 0xf6, 0xc8, 0x3a, 0xb1, 0x47, 0xb6, 0x3b, 0xe0, 0x52, 0x77, 0xaf, 0x22, 0x70, 0x93, + 0x60, 0x42, 0x3f, 0x97, 0xe3, 0x54, 0x58, 0xa4, 0xc2, 0xcb, 0xd1, 0x2b, 0x34, 0x21, 0x5c, 0x7a, + 0xe3, 0xb1, 0x23, 0xb4, 0x0c, 0x12, 0xc3, 0x72, 0x66, 0x99, 0x20, 0x3b, 0x1c, 0x67, 0x2b, 0x8b, + 0x2f, 0x69, 0xe9, 0xca, 0xd4, 0x15, 0x01, 0x3f, 0x25, 0x43, 0xc2, 0xbc, 0x2c, 0x96, 0xd3, 0x64, + 0xb1, 0x77, 0x61, 0x71, 0xea, 0x06, 0x3c, 0x0c, 0x47, 0x7c, 0x18, 0x8d, 0xa5, 0x82, 0x48, 0xcd, + 0xa8, 0x40, 0x0d, 0x67, 0x03, 0x96, 0xc8, 0xe8, 0x10, 0xd8, 0xa1, 0x17, 0x9c, 0x3b, 0x81, 0x15, + 0x08, 0x0d, 0x89, 0xd4, 0xdd, 0x45, 0x2c, 0xea, 0xc9, 0x92, 0x1e, 0xa9, 0x48, 0x6b, 0x33, 0xf8, + 0x3e, 0x1f, 0x70, 0xe7, 0x82, 0x0f, 0x51, 0x4e, 0xcb, 0x99, 0x2b, 0x89, 0x3a, 0xa6, 0x2c, 0x44, + 0xa1, 0x7b, 0x3a, 0xb6, 0xa6, 0x93, 0xa1, 0x2d, 0x84, 0x95, 0x3a, 0x09, 0xc3, 0xee, 0x74, 0x7c, + 0x4c, 0x10, 0xf6, 0x18, 0x94, 0x24, 0x26, 0xe5, 0xc3, 0x46, 0x82, 0x9f, 0x09, 0x62, 0x35, 0xab, + 0x12, 0x83, 0x04, 0xc5, 0x84, 0xcc, 0xd9, 0x9c, 0x91, 0x39, 0x5b, 0x50, 0x9c, 0xf8, 0xce, 0x85, + 0x1d, 0xf2, 0xd6, 0x22, 0x31, 0x70, 0xf9, 0x29, 0x38, 0x83, 0xe3, 0x3a, 0xa1, 0x63, 0x87, 0x9e, + 0xdf, 0x62, 0x58, 0x16, 0x03, 0xd8, 0x43, 0x58, 0x44, 0x1a, 0x09, 0x42, 0x3b, 0x9c, 0x06, 0x52, + 0x02, 0x5d, 0x42, 0x62, 0x42, 0x19, 0xba, 0x87, 0x70, 0x14, 0x42, 0xd9, 0xb7, 0x60, 0x95, 0xc8, + 0x02, 0x6b, 0x48, 0xc9, 0x1a, 0x05, 0x82, 0x65, 0x5c, 0x8a, 0x25, 0x2c, 0x15, 0xf4, 0x2d, 0xe5, + 0x6b, 0x21, 0x1d, 0xbc, 0x0f, 0x6b, 0x92, 0x4c, 0xe6, 0x6a, 0xad, 0x60, 0xad, 0x65, 0x2a, 0x9e, + 0xa9, 0xb6, 0x01, 0x8b, 0x62, 0x48, 0xce, 0xc0, 0x92, 0xb5, 0xc5, 0x49, 0x58, 0x15, 0xa3, 0x47, + 0x4d, 0xa9, 0x41, 0x85, 0x26, 0x96, 0x3d, 0xe3, 0xd7, 0xec, 0x7b, 0xd0, 0x20, 0x92, 0x41, 0xf5, + 0x0a, 0x39, 0xfd, 0x3a, 0x72, 0xfa, 0x15, 0x65, 0xe1, 0x8c, 0x4a, 0x91, 0xd9, 0xd7, 0x07, 0x89, + 0x6f, 0x71, 0x1c, 0x46, 0xce, 0x29, 0x0f, 0x9d, 0x31, 0x6f, 0xad, 0x11, 0x81, 0xa9, 0x6f, 0x71, + 0x52, 0xa7, 0x13, 0x2c, 0x69, 0x11, 0x5f, 0xa0, 0x2f, 0xa4, 0xdd, 0x91, 0x17, 0x70, 0x65, 0xa2, + 0x6a, 0xdd, 0x96, 0x87, 0x50, 0x00, 0x25, 0xdb, 0x33, 0x7e, 0x96, 0xa1, 0x7b, 0x4c, 0x1e, 0xfb, + 0x40, 0xd3, 0xca, 0xe8, 0xc0, 0x5b, 0x9e, 0x3b, 0xba, 0x96, 0x3c, 0x00, 0x08, 0x74, 0xe8, 0x8e, + 0xf0, 0x10, 0x3a, 0xae, 0x8e, 0x42, 0x2c, 0xb3, 0xaa, 0x80, 0x88, 0x74, 0x0f, 0x2a, 0x93, 0xe9, + 0xc9, 0xc8, 0x19, 0x10, 0x4a, 0x8e, 0x5a, 0x21, 0x10, 0x22, 0x08, 0xb5, 0x94, 0x08, 0x81, 0x30, + 0xf2, 0x88, 0x51, 0x91, 0x30, 0x44, 0x41, 0x96, 0xcc, 0x7d, 0xe4, 0x02, 0x55, 0x13, 0xff, 0x36, + 0x36, 0x61, 0x39, 0x39, 0x68, 0x79, 0x5f, 0x3c, 0x84, 0x92, 0x64, 0x31, 0xca, 0x5e, 0x51, 0xd7, + 0x2c, 0xc8, 0x42, 0xb3, 0x8a, 0xca, 0x8d, 0xdf, 0x5e, 0x80, 0x25, 0x09, 0xdd, 0x12, 0x2b, 0xd2, + 0x9b, 0x8e, 0xc7, 0xb6, 0x9f, 0xc2, 0xbb, 0x32, 0x2f, 0xe6, 0x5d, 0xd9, 0x39, 0xde, 0x95, 0x54, + 0x58, 0x89, 0xf5, 0x25, 0x15, 0x56, 0xb1, 0x05, 0xa4, 0x43, 0xe8, 0xe6, 0xcb, 0x9a, 0x04, 0xf7, + 0xc9, 0x4c, 0x3a, 0xc7, 0x69, 0x0b, 0x29, 0x9c, 0x56, 0xe7, 0x93, 0x0b, 0x33, 0x7c, 0xf2, 0x0d, + 0xa0, 0xbd, 0x56, 0x6c, 0xbf, 0x48, 0x6a, 0x05, 0xc2, 0xa4, 0x0d, 0xf4, 0x1d, 0x68, 0xcc, 0xb2, + 0x26, 0xe2, 0x81, 0xf5, 0x14, 0xc6, 0xe4, 0x8c, 0x39, 0x5e, 0x32, 0x1a, 0x72, 0x59, 0x32, 0x26, + 0x67, 0xcc, 0xf7, 0xb0, 0x44, 0xe1, 0x77, 0x00, 0xa8, 0x6f, 0xa4, 0x75, 0x40, 0x5a, 0x7f, 0x3b, + 0xb9, 0x17, 0xfa, 0xaa, 0x6f, 0x88, 0x8f, 0xa9, 0xcf, 0x91, 0xf8, 0xcb, 0x58, 0x13, 0xe9, 0xfe, + 0x19, 0xd4, 0xbd, 0x09, 0x77, 0xad, 0x98, 0x45, 0x54, 0xb0, 0xa9, 0xb7, 0x5e, 0xd0, 0x54, 0x57, + 0xe1, 0x9a, 0x35, 0x51, 0x37, 0xfa, 0x64, 0xfb, 0xb4, 0xf0, 0x5c, 0x6b, 0xad, 0xfa, 0x25, 0x5a, + 0xab, 0x63, 0xe5, 0xe8, 0xdb, 0xf8, 0xfb, 0x19, 0xa8, 0x68, 0xc3, 0x66, 0x2b, 0xb0, 0xb8, 0x75, + 0x78, 0x78, 0xd4, 0x31, 0xdb, 0xfd, 0xee, 0x27, 0x1d, 0x6b, 0x6b, 0xef, 0xb0, 0xd7, 0x69, 0xde, + 0x12, 0xe0, 0xbd, 0xc3, 0xad, 0xf6, 0x9e, 0xb5, 0x73, 0x68, 0x6e, 0x29, 0x70, 0x86, 0xad, 0x02, + 0x33, 0x3b, 0xfb, 0x87, 0xfd, 0x4e, 0x02, 0x9e, 0x65, 0x4d, 0xa8, 0x6e, 0x9a, 0x9d, 0xf6, 0xd6, + 0xae, 0x84, 0xe4, 0xd8, 0x32, 0x34, 0x77, 0x8e, 0x0f, 0xb6, 0xbb, 0x07, 0x4f, 0xad, 0xad, 0xf6, + 0xc1, 0x56, 0x67, 0xaf, 0xb3, 0xdd, 0xcc, 0xb3, 0x1a, 0x94, 0xdb, 0x9b, 0xed, 0x83, 0xed, 0xc3, + 0x83, 0xce, 0x76, 0xb3, 0x60, 0xfc, 0x0a, 0x94, 0xe3, 0x89, 0x56, 0xa0, 0x78, 0x7c, 0xf0, 0xec, + 0xe0, 0xf0, 0xd3, 0x83, 0xe6, 0x2d, 0x56, 0x86, 0x02, 0xf6, 0xdf, 0xcc, 0x30, 0x80, 0x05, 0xea, + 0xb3, 0x99, 0x65, 0x25, 0xc8, 0x6f, 0x1e, 0xf6, 0x77, 0x9b, 0x39, 0xe3, 0xcf, 0x33, 0xb0, 0x82, + 0x53, 0x1e, 0xce, 0x32, 0x81, 0xfb, 0x50, 0x19, 0x78, 0xde, 0x44, 0x28, 0x48, 0xb1, 0x20, 0xa0, + 0x83, 0xc4, 0x01, 0x27, 0x9e, 0x7b, 0xea, 0xf9, 0x03, 0x2e, 0x79, 0x00, 0x20, 0x68, 0x47, 0x40, + 0x04, 0x0d, 0x4a, 0x22, 0x26, 0x0c, 0x62, 0x01, 0x15, 0x82, 0x11, 0xca, 0x2a, 0x2c, 0x9c, 0xf8, + 0xdc, 0x1e, 0x9c, 0xcb, 0xd3, 0x2f, 0xbf, 0xd8, 0xd7, 0x63, 0xd5, 0x7d, 0x20, 0x68, 0x6a, 0xc4, + 0x87, 0x78, 0x04, 0x4a, 0x66, 0x43, 0xc2, 0xb7, 0x24, 0x58, 0x5c, 0x22, 0xf6, 0x89, 0xed, 0x0e, + 0x3d, 0x97, 0x0f, 0xa5, 0x86, 0x10, 0x03, 0x8c, 0x23, 0x58, 0x9d, 0x9d, 0x9f, 0xe4, 0x17, 0x1f, + 0x68, 0xfc, 0x82, 0x04, 0xf6, 0xf5, 0x9b, 0x49, 0x41, 0xe3, 0x1d, 0xff, 0x30, 0x0f, 0x79, 0x21, + 0xc0, 0xdd, 0x28, 0xeb, 0xe9, 0x12, 0x79, 0x6e, 0xce, 0x6b, 0x83, 0x16, 0x02, 0xba, 0xd9, 0xc9, + 0x0c, 0x55, 0x46, 0x08, 0xde, 0xe8, 0x51, 0xb1, 0xcf, 0x07, 0x17, 0xd2, 0x0e, 0x45, 0xc5, 0x26, + 0x1f, 0x5c, 0xa0, 0x2a, 0x64, 0x87, 0x54, 0x97, 0xce, 0x7b, 0x31, 0xb0, 0x43, 0xac, 0x29, 0x8b, + 0xb0, 0x5e, 0x31, 0x2a, 0xc2, 0x5a, 0x2d, 0x28, 0x3a, 0xee, 0x89, 0x37, 0x75, 0x87, 0x78, 0xbc, + 0x4b, 0xa6, 0xfa, 0x44, 0x27, 0x11, 0x72, 0x22, 0x71, 0x7f, 0xd0, 0x69, 0x2e, 0x09, 0x40, 0x5f, + 0xdc, 0x20, 0xef, 0x41, 0x39, 0xb8, 0x76, 0x07, 0xfa, 0x19, 0x5e, 0x96, 0xeb, 0x23, 0x66, 0xbf, + 0xd1, 0xbb, 0x76, 0x07, 0x78, 0x62, 0x4b, 0x81, 0xfc, 0x8b, 0xbd, 0x0f, 0xa5, 0xc8, 0x5c, 0x4b, + 0x1c, 0xf8, 0xb6, 0x5e, 0x43, 0xd9, 0x68, 0x49, 0x2b, 0x8e, 0x50, 0xd9, 0x23, 0x58, 0x40, 0x9b, + 0x6a, 0xd0, 0xaa, 0x62, 0x25, 0x25, 0xa6, 0x8b, 0x61, 0xa0, 0x7f, 0x86, 0x0f, 0xd1, 0xbe, 0x6a, + 0x4a, 0xb4, 0xf5, 0x67, 0x50, 0x4b, 0xb4, 0xa5, 0xeb, 0xbe, 0x35, 0xd2, 0x7d, 0xdf, 0xd2, 0x75, + 0xdf, 0xf8, 0x26, 0x90, 0xd5, 0x74, 0x5d, 0xf8, 0xd7, 0xa0, 0xa4, 0xa6, 0x22, 0xce, 0x9f, 0x3c, + 0x3b, 0x56, 0xef, 0xb3, 0x83, 0xad, 0xe6, 0x2d, 0xd6, 0x80, 0x4a, 0x7b, 0x0b, 0x8f, 0x34, 0x02, + 0x32, 0x02, 0xe5, 0xa8, 0xdd, 0xeb, 0x45, 0x90, 0xac, 0xb1, 0x03, 0xcd, 0xd9, 0x91, 0x0a, 0x9a, + 0x0c, 0x15, 0x4c, 0x5a, 0x9c, 0x63, 0x80, 0xd0, 0x6c, 0xc8, 0x88, 0x4c, 0xe2, 0x33, 0x7d, 0x18, + 0xef, 0x43, 0x53, 0xdc, 0x6b, 0x62, 0xa9, 0x02, 0xcd, 0x72, 0x3b, 0x12, 0x22, 0x99, 0x6e, 0x75, + 0x2e, 0x99, 0x15, 0x82, 0x61, 0x57, 0xc6, 0x07, 0xb0, 0xa8, 0x55, 0x8b, 0x35, 0x51, 0x71, 0x57, + 0xce, 0x6a, 0xa2, 0xa8, 0x77, 0x50, 0x89, 0xb1, 0x06, 0x2b, 0xe2, 0xb3, 0x73, 0xc1, 0xdd, 0xb0, + 0x37, 0x3d, 0x21, 0x57, 0xa1, 0xe3, 0xb9, 0x42, 0x1f, 0x29, 0x47, 0x25, 0x37, 0x13, 0xf9, 0x86, + 0x54, 0x5a, 0xb3, 0x48, 0x1a, 0xeb, 0x5a, 0x0f, 0x58, 0x71, 0x03, 0xff, 0x4d, 0x28, 0xaf, 0xe5, + 0x08, 0x24, 0x96, 0xf5, 0xa8, 0xd3, 0x31, 0xad, 0xc3, 0x83, 0xbd, 0xee, 0x81, 0x60, 0x94, 0x62, + 0x59, 0x11, 0xb0, 0xb3, 0x83, 0x90, 0x8c, 0xd1, 0x84, 0xfa, 0x53, 0x1e, 0x76, 0xdd, 0x53, 0x4f, + 0xb9, 0xc5, 0xfe, 0xb2, 0x00, 0x8d, 0x08, 0x14, 0x2b, 0xbf, 0x17, 0xdc, 0x0f, 0x1c, 0xcf, 0x45, + 0x39, 0xb6, 0x6c, 0xaa, 0x4f, 0x71, 0xbb, 0x39, 0x43, 0xee, 0x86, 0x4e, 0x78, 0x6d, 0x25, 0x2c, + 0x65, 0x75, 0x05, 0x96, 0xb7, 0xe8, 0x32, 0x14, 0xec, 0x91, 0x63, 0x2b, 0x0f, 0x2b, 0x7d, 0x08, + 0xe8, 0xc0, 0x1b, 0x79, 0x3e, 0x8a, 0xac, 0x65, 0x93, 0x3e, 0xd8, 0x63, 0x58, 0x16, 0xa2, 0xb3, + 0x6e, 0xbe, 0x44, 0xfe, 0x41, 0x46, 0x3b, 0xe6, 0x4e, 0xc7, 0x47, 0xb1, 0x09, 0x53, 0x94, 0x88, + 0xbb, 0x53, 0xd4, 0x90, 0xc2, 0x52, 0x54, 0x81, 0xb4, 0xb0, 0x45, 0x77, 0x3a, 0x6e, 0x63, 0x49, + 0x84, 0xff, 0x04, 0x56, 0x04, 0x7e, 0x24, 0x5e, 0x45, 0x35, 0x1a, 0x58, 0x43, 0x34, 0xd6, 0x95, + 0x65, 0x51, 0x9d, 0x3b, 0x50, 0xa6, 0x51, 0x89, 0x1d, 0x2f, 0x90, 0xf4, 0x8d, 0x43, 0xe1, 0x7e, + 0x30, 0xe7, 0x0c, 0x5d, 0x20, 0x41, 0x60, 0xc6, 0x19, 0xaa, 0xb9, 0x53, 0x4b, 0xb3, 0xee, 0xd4, + 0x27, 0xb0, 0x72, 0x22, 0x48, 0xf0, 0x9c, 0xdb, 0x43, 0xee, 0x5b, 0x31, 0x61, 0x93, 0x96, 0xb1, + 0x24, 0x0a, 0x77, 0xb1, 0x2c, 0x3a, 0x07, 0x42, 0xce, 0x11, 0x6c, 0x81, 0x0f, 0xad, 0xd0, 0xb3, + 0x50, 0xfc, 0x41, 0x06, 0x53, 0x32, 0x6b, 0x04, 0xee, 0x7b, 0x5b, 0x02, 0x98, 0xc4, 0x3b, 0xf3, + 0xed, 0xc9, 0xb9, 0xd4, 0x03, 0x22, 0xbc, 0xa7, 0x02, 0xc8, 0x5e, 0x83, 0xa2, 0x20, 0x79, 0x97, + 0x93, 0xcf, 0x8a, 0x24, 0x6d, 0x05, 0x62, 0x6f, 0xc1, 0x02, 0xf6, 0x11, 0xb4, 0x9a, 0x48, 0xef, + 0xd5, 0x98, 0x91, 0x3b, 0xae, 0x29, 0xcb, 0x84, 0x30, 0x39, 0xf5, 0x1d, 0xe2, 0x32, 0x65, 0x13, + 0xff, 0x66, 0xdf, 0xd7, 0x58, 0xd6, 0x12, 0xd6, 0x55, 0xf2, 0xc0, 0x0c, 0xa5, 0xdd, 0xc4, 0xbd, + 0xbe, 0x52, 0x66, 0xf4, 0x83, 0x7c, 0xa9, 0xd2, 0xac, 0x1a, 0xdf, 0x81, 0x02, 0xad, 0x8e, 0x20, + 0x42, 0x5c, 0xbb, 0x8c, 0x24, 0x42, 0x84, 0xb6, 0xa0, 0xe8, 0xf2, 0xf0, 0xd2, 0xf3, 0x9f, 0x2b, + 0x5b, 0xb2, 0xfc, 0x34, 0x7e, 0x8c, 0x46, 0x90, 0xc8, 0x51, 0x4e, 0xfa, 0x9c, 0x20, 0x0f, 0xda, + 0xde, 0xe0, 0xdc, 0x96, 0x76, 0x99, 0x12, 0x02, 0x7a, 0xe7, 0xf6, 0x1c, 0x79, 0x64, 0xe7, 0x7d, + 0xe5, 0x6f, 0x41, 0x5d, 0xb9, 0xe6, 0x03, 0x6b, 0xc4, 0x4f, 0x43, 0x49, 0xee, 0x55, 0xe9, 0x97, + 0x0f, 0xf6, 0xf8, 0x69, 0x68, 0xec, 0xc3, 0xa2, 0x24, 0xc8, 0xc3, 0x09, 0x57, 0x5d, 0x7f, 0x37, + 0x4d, 0x9e, 0xae, 0x3c, 0x59, 0x4a, 0x5e, 0xb4, 0x14, 0x72, 0x90, 0x10, 0xb2, 0x8d, 0x8f, 0x81, 0xe9, 0xd7, 0xb0, 0x6c, 0x4f, 0x4a, 0xb5, 0xca, 0x04, 0xaf, 0x3c, 0x59, 0x91, 0xec, 0xec, 0x0c, - 0xc5, 0xea, 0x04, 0xd3, 0xc1, 0x40, 0x3d, 0x99, 0x28, 0x99, 0xea, 0xd3, 0xf8, 0x93, 0x0c, 0x2c, - 0x61, 0x63, 0x4a, 0x1f, 0x90, 0x4c, 0xf6, 0xe7, 0x1e, 0xa4, 0xd8, 0x1f, 0x5d, 0xf6, 0xa1, 0x8f, - 0x2f, 0x6f, 0xf4, 0xcc, 0xcf, 0x19, 0x3d, 0xbf, 0x0e, 0xcd, 0x21, 0x1f, 0x39, 0xf8, 0x7a, 0x46, - 0x89, 0x12, 0xa4, 0x01, 0x34, 0x14, 0x5c, 0x29, 0x71, 0xff, 0x3c, 0x03, 0x8b, 0x24, 0xa9, 0xa0, - 0x3a, 0x2c, 0x17, 0xea, 0x23, 0xa5, 0xff, 0x49, 0x56, 0x25, 0xe7, 0x14, 0xdf, 0xe0, 0x08, 0x25, - 0xe4, 0x9d, 0x1b, 0x52, 0x2f, 0x94, 0x50, 0xf6, 0x21, 0xea, 0x30, 0xae, 0x85, 0xc0, 0x94, 0xd7, - 0x38, 0xc9, 0x4d, 0xd9, 0xb9, 0x81, 0x0a, 0x8e, 0x8b, 0xa0, 0x8d, 0x92, 0x50, 0x48, 0x05, 0xd8, - 0xd8, 0x86, 0x5a, 0xa2, 0x9b, 0x84, 0x65, 0xb6, 0x4a, 0x96, 0xd9, 0x39, 0xef, 0x47, 0x76, 0xde, - 0xfb, 0xf1, 0xf7, 0xf2, 0xc0, 0x04, 0x49, 0xcd, 0xec, 0xda, 0x8c, 0xeb, 0x30, 0x3b, 0xe7, 0x3a, - 0x7c, 0x0c, 0x4c, 0x43, 0x50, 0x1e, 0xcd, 0x5c, 0xe4, 0xd1, 0x6c, 0xc6, 0xb8, 0xd2, 0xa1, 0xf9, - 0x18, 0x96, 0xa5, 0x40, 0x1b, 0xf9, 0x0a, 0xd1, 0xe4, 0x46, 0xfb, 0xc3, 0x48, 0xb2, 0x55, 0x3e, - 0x43, 0x34, 0xbf, 0x29, 0xb7, 0x61, 0x60, 0x87, 0xd2, 0x52, 0x85, 0x6e, 0xc3, 0x9e, 0x3d, 0x67, - 0xfa, 0x5e, 0x78, 0x25, 0x15, 0x14, 0xe7, 0xa8, 0x40, 0x33, 0x9c, 0x94, 0x92, 0x86, 0x13, 0x03, - 0x6a, 0xca, 0x39, 0x48, 0x6f, 0x22, 0x48, 0x7a, 0xab, 0x48, 0x0f, 0x21, 0xbe, 0x8b, 0xb8, 0x0f, - 0x4d, 0x65, 0xdd, 0x88, 0x4c, 0x33, 0xe4, 0xef, 0x97, 0xc6, 0xb1, 0x4d, 0x65, 0xa0, 0x49, 0x18, - 0xc2, 0x2b, 0x33, 0x86, 0xf0, 0xf7, 0x60, 0x31, 0x10, 0x44, 0x64, 0x4d, 0x5d, 0xf9, 0x38, 0x87, - 0x0f, 0x51, 0x75, 0x2a, 0x99, 0x4d, 0x2c, 0x38, 0x8a, 0xe1, 0xf3, 0x66, 0x87, 0xda, 0xbc, 0xd9, - 0x81, 0x3d, 0x8d, 0xfd, 0x68, 0xc1, 0x99, 0x33, 0xc6, 0x8b, 0x3b, 0x7e, 0xc8, 0x22, 0x17, 0xb8, - 0x77, 0xe6, 0x8c, 0x4d, 0xe5, 0xb4, 0x15, 0x1f, 0xc6, 0x7f, 0xcd, 0x40, 0x53, 0xd0, 0x41, 0x82, - 0xce, 0x7f, 0x05, 0xf0, 0x44, 0xbe, 0x26, 0x99, 0x57, 0x04, 0xae, 0xa2, 0xf2, 0xef, 0x00, 0x92, - 0xad, 0x25, 0xf4, 0x44, 0x49, 0xe4, 0xad, 0x24, 0x91, 0xc7, 0x8c, 0x6c, 0xe7, 0x06, 0x29, 0x00, - 0x02, 0x92, 0xe6, 0xbf, 0xcc, 0xa7, 0xf8, 0x2f, 0xb5, 0xa3, 0xb0, 0x03, 0xf0, 0x9c, 0x5f, 0xed, - 0x7a, 0x03, 0xd4, 0xd0, 0x6e, 0x03, 0x08, 0x82, 0x3c, 0xb1, 0xc7, 0x8e, 0xb4, 0xae, 0x14, 0xcc, - 0xf2, 0x0b, 0x7e, 0xb5, 0x8d, 0x00, 0xb1, 0x1b, 0xa2, 0x38, 0x3e, 0x0f, 0x05, 0xb3, 0xf4, 0x82, - 0x5f, 0xd1, 0x61, 0xb0, 0xa0, 0xf6, 0x9c, 0x5f, 0x6d, 0x71, 0x12, 0xd7, 0x3c, 0x5f, 0x50, 0x82, - 0x6f, 0x5f, 0x08, 0xf9, 0x2c, 0xe1, 0x7b, 0xac, 0xf8, 0xf6, 0xc5, 0x73, 0x7e, 0xa5, 0xfc, 0xa0, - 0x45, 0x51, 0x3e, 0xf2, 0x06, 0xf2, 0x06, 0x52, 0xaf, 0x28, 0xe2, 0x41, 0x99, 0x0b, 0x2f, 0xf0, - 0x6f, 0xe3, 0x8f, 0x33, 0x50, 0x13, 0xe3, 0x47, 0x06, 0x27, 0xd6, 0x5d, 0x3d, 0xc6, 0xc9, 0xc4, - 0x8f, 0x71, 0x9e, 0x48, 0xfe, 0x40, 0xdc, 0x32, 0x7b, 0x3d, 0xb7, 0xc4, 0x05, 0x26, 0x56, 0xf9, - 0x3e, 0x94, 0xe9, 0x6c, 0x89, 0xc3, 0x9a, 0x4b, 0xec, 0x52, 0x62, 0x42, 0x66, 0x09, 0xd1, 0x9e, - 0x93, 0xef, 0x5f, 0x33, 0xb0, 0xd1, 0x12, 0x97, 0xfd, 0xc8, 0xac, 0x96, 0xb2, 0x0d, 0x85, 0x34, - 0x37, 0xf2, 0x11, 0x54, 0x34, 0x9a, 0x42, 0x6b, 0x5c, 0x34, 0x78, 0x22, 0xc0, 0x24, 0xd1, 0x24, - 0x66, 0xbf, 0x73, 0xc3, 0xac, 0x0d, 0x74, 0xc0, 0xc6, 0x02, 0xe4, 0x45, 0x25, 0xe3, 0x23, 0x58, - 0xd4, 0x9a, 0x25, 0x6d, 0x34, 0x6d, 0x4c, 0x99, 0xb4, 0x31, 0xfd, 0x8b, 0x0c, 0x2c, 0xcb, 0xda, - 0xf8, 0x70, 0xcb, 0x11, 0xd7, 0xf5, 0x5e, 0x70, 0xca, 0x7e, 0x05, 0x6a, 0xa2, 0x75, 0xcb, 0xe7, - 0xa7, 0x4e, 0x10, 0x72, 0xe5, 0xb9, 0x48, 0x39, 0x1c, 0x82, 0x6b, 0x0b, 0x54, 0x53, 0x62, 0xb2, - 0x8f, 0xa0, 0x82, 0x55, 0x49, 0x5f, 0x96, 0xdb, 0xd2, 0x9a, 0xaf, 0x48, 0x43, 0xdd, 0xb9, 0x61, - 0x42, 0x10, 0x7d, 0x6d, 0x94, 0xa1, 0x18, 0xfa, 0xce, 0xe9, 0x29, 0xf7, 0x8d, 0xd5, 0x68, 0x68, - 0xe2, 0xa4, 0xf1, 0x5e, 0xc8, 0x27, 0x42, 0x08, 0x32, 0xfe, 0x7b, 0x06, 0x2a, 0xf2, 0xec, 0xfc, - 0xdc, 0xee, 0x8a, 0x75, 0xed, 0xe5, 0x21, 0xa9, 0xc6, 0xf1, 0x43, 0xc3, 0x7b, 0xd0, 0x18, 0x0b, - 0x81, 0x48, 0x08, 0xec, 0x09, 0x5f, 0x45, 0x5d, 0x81, 0xa5, 0x3c, 0xf2, 0x10, 0x96, 0x50, 0x3c, - 0x09, 0xac, 0xd0, 0x19, 0x59, 0xaa, 0x50, 0xbe, 0xf2, 0x5b, 0xa4, 0xa2, 0xbe, 0x33, 0xda, 0x93, - 0x05, 0xe2, 0x96, 0x0e, 0x42, 0xfb, 0x94, 0x4b, 0xd1, 0x97, 0x3e, 0x8c, 0x16, 0xac, 0xce, 0xc8, - 0xea, 0x4a, 0xcf, 0xf8, 0x87, 0x35, 0x58, 0x9b, 0x2b, 0x92, 0xfa, 0x46, 0x64, 0xa3, 0x1f, 0x39, - 0xe3, 0x63, 0x2f, 0x32, 0x85, 0x65, 0x34, 0x1b, 0xfd, 0xae, 0x28, 0x51, 0xa6, 0x30, 0x0e, 0x2b, - 0x8a, 0x20, 0xd0, 0x96, 0x15, 0x89, 0xf3, 0x59, 0x14, 0x36, 0xdf, 0x4f, 0x32, 0xaa, 0xd9, 0xee, - 0x14, 0x5c, 0xbf, 0xfe, 0x96, 0x26, 0x73, 0xb0, 0x80, 0x9d, 0x40, 0x2b, 0xa2, 0x3b, 0x29, 0x1f, - 0x69, 0xba, 0x89, 0xe8, 0xe9, 0x1b, 0xaf, 0xe8, 0x29, 0x61, 0x24, 0x31, 0x57, 0x15, 0xb9, 0x52, - 0x63, 0x51, 0x3f, 0xe7, 0xf0, 0xa6, 0xea, 0x07, 0x65, 0x9d, 0xf9, 0xde, 0xf2, 0xaf, 0x35, 0x2f, - 0x34, 0xfe, 0x24, 0xbb, 0xbc, 0x25, 0x1b, 0x8e, 0x8a, 0xf4, 0x7e, 0xcf, 0x60, 0xf5, 0xc2, 0x76, - 0x42, 0x35, 0x3f, 0x4d, 0x2d, 0x2a, 0x60, 0x7f, 0x4f, 0x5e, 0xd1, 0xdf, 0xa7, 0x54, 0x39, 0x21, - 0xfd, 0x2d, 0x5f, 0xcc, 0x03, 0x83, 0xf5, 0xff, 0x9c, 0x85, 0x7a, 0xb2, 0x15, 0x71, 0xa8, 0x25, - 0x1f, 0x52, 0xf2, 0x84, 0x94, 0xc7, 0xa5, 0x89, 0x76, 0x9f, 0xe4, 0x88, 0x79, 0xe3, 0x71, 0x36, - 0xc5, 0x78, 0xac, 0xdb, 0x6c, 0x73, 0xaf, 0xf2, 0x6d, 0xe5, 0x5f, 0xcb, 0xb7, 0x55, 0x48, 0xf3, - 0x6d, 0x5d, 0xef, 0x10, 0x59, 0xf8, 0xb9, 0x1c, 0x22, 0xc5, 0xeb, 0x1d, 0x22, 0xeb, 0x7f, 0x95, - 0x01, 0x36, 0x4f, 0xa9, 0xec, 0x19, 0xd9, 0xc9, 0x5d, 0x3e, 0x92, 0x5c, 0xec, 0x9b, 0xaf, 0x47, - 0xed, 0x6a, 0x83, 0x54, 0x6d, 0xf6, 0x08, 0x96, 0xf4, 0x77, 0xc1, 0xba, 0xaa, 0x52, 0x33, 0x99, - 0x5e, 0x14, 0x2b, 0xb4, 0x9a, 0x63, 0x2f, 0xff, 0x4a, 0xc7, 0x5e, 0xe1, 0x95, 0x8e, 0xbd, 0x85, - 0xa4, 0x63, 0x6f, 0xfd, 0xef, 0x64, 0x60, 0x29, 0x85, 0xa8, 0xbe, 0xba, 0x39, 0x0b, 0x5a, 0x48, - 0xb0, 0x98, 0xac, 0xa4, 0x05, 0x8d, 0xbb, 0xac, 0xff, 0x04, 0x6a, 0x89, 0x43, 0xf4, 0xd5, 0x75, - 0x3f, 0xab, 0x68, 0x11, 0x29, 0xeb, 0x8a, 0xd6, 0xfa, 0x5f, 0x66, 0x81, 0xcd, 0x9f, 0xe3, 0x5f, - 0xe6, 0x10, 0xe6, 0x17, 0x29, 0x37, 0xbf, 0x48, 0xff, 0xff, 0xee, 0x95, 0xf7, 0x60, 0x51, 0xc6, - 0x32, 0x68, 0x4e, 0x11, 0x22, 0x94, 0x66, 0x54, 0xa0, 0x46, 0xf1, 0x9d, 0x59, 0x9f, 0x6a, 0x29, - 0xf1, 0x7c, 0x5b, 0xbb, 0x58, 0x93, 0xae, 0x55, 0x63, 0x1d, 0x5a, 0x72, 0x69, 0xe6, 0x4d, 0x75, - 0xbf, 0x93, 0x8f, 0xb4, 0x64, 0x2c, 0x94, 0x42, 0xf1, 0xb7, 0xa0, 0xaa, 0x5f, 0x36, 0x72, 0x1f, - 0x66, 0xbc, 0x61, 0x42, 0x1c, 0xf6, 0xb4, 0xd3, 0xba, 0x09, 0xe4, 0xe3, 0x18, 0x46, 0xd5, 0x48, - 0x82, 0x78, 0x89, 0x51, 0x1c, 0x85, 0xa3, 0xc4, 0xe6, 0xff, 0x35, 0xa8, 0x27, 0xed, 0x56, 0x52, - 0xd4, 0x4b, 0x93, 0x0e, 0x45, 0xed, 0x84, 0x21, 0x8b, 0x7d, 0x1f, 0x9a, 0xb3, 0x76, 0x2f, 0xf9, - 0xb6, 0xf4, 0x9a, 0xfa, 0x0d, 0x27, 0x69, 0x0a, 0x63, 0x3b, 0xb0, 0x9c, 0x76, 0xdd, 0xe2, 0xae, - 0x5c, 0xaf, 0x16, 0xb0, 0xf9, 0x2b, 0x95, 0x7d, 0x57, 0x9a, 0x37, 0x0b, 0x69, 0x4e, 0x22, 0x6d, - 0xb1, 0x1f, 0xd2, 0x7f, 0x9a, 0xa1, 0xf3, 0x1c, 0x20, 0x86, 0xb1, 0x26, 0x54, 0x0f, 0x0e, 0x3b, - 0xfb, 0xd6, 0xe6, 0x4e, 0x7b, 0x7f, 0xbf, 0xb3, 0xdb, 0xbc, 0xc1, 0x18, 0xd4, 0xd1, 0xbb, 0xb3, - 0x15, 0xc1, 0x32, 0x02, 0x26, 0xcd, 0xcc, 0x0a, 0x96, 0x65, 0xcb, 0xd0, 0xec, 0xee, 0xcf, 0x40, - 0x73, 0xac, 0x05, 0xcb, 0x87, 0x1d, 0x72, 0x08, 0x25, 0xda, 0xcd, 0x0b, 0x11, 0x4e, 0x4e, 0x57, - 0x88, 0x70, 0x14, 0x09, 0x23, 0xa9, 0x4f, 0x49, 0x36, 0xbf, 0x9b, 0x81, 0x95, 0x99, 0x82, 0xf8, - 0x7d, 0x33, 0xc9, 0x35, 0x49, 0x89, 0xa6, 0x8a, 0x40, 0x45, 0xc3, 0xef, 0xc1, 0x62, 0xa4, 0xea, - 0xcd, 0xf0, 0xa5, 0x66, 0x54, 0xa0, 0x90, 0x1f, 0xc1, 0x92, 0xa6, 0x31, 0xce, 0x9c, 0x50, 0xa6, - 0x15, 0xc9, 0x0a, 0xc6, 0x5a, 0xf4, 0x8e, 0x74, 0x66, 0xd4, 0x43, 0x0a, 0xaf, 0xd1, 0x0b, 0x62, - 0xeb, 0x6f, 0x72, 0xbc, 0xea, 0x53, 0xa8, 0xf2, 0x09, 0x42, 0x48, 0x8e, 0x56, 0xdf, 0x70, 0xd5, - 0xfd, 0xef, 0x2f, 0x00, 0xfb, 0x78, 0xca, 0xfd, 0x2b, 0x7c, 0xbf, 0x1c, 0xbc, 0xea, 0x41, 0x8f, - 0x52, 0x8b, 0xb2, 0xaf, 0x15, 0xa3, 0x90, 0x16, 0x23, 0x90, 0x7f, 0x75, 0x8c, 0x40, 0xe1, 0x55, - 0x31, 0x02, 0x6f, 0x43, 0xcd, 0x39, 0x75, 0x3d, 0xc1, 0x80, 0x84, 0x6c, 0x12, 0xb4, 0x16, 0xee, - 0xe6, 0xee, 0x57, 0xcd, 0xaa, 0x04, 0x0a, 0xc9, 0x24, 0x60, 0x1f, 0xc5, 0x48, 0x7c, 0x78, 0x8a, - 0xf1, 0x2c, 0x3a, 0xeb, 0xe9, 0x0c, 0x4f, 0xb9, 0xd4, 0x02, 0xd1, 0x2e, 0xa2, 0x2a, 0x0b, 0x78, - 0xc0, 0xde, 0x81, 0x7a, 0xe0, 0x4d, 0x85, 0xa8, 0xa7, 0x96, 0x81, 0xec, 0xc3, 0x55, 0x82, 0x1e, - 0x2a, 0x67, 0xc0, 0xd2, 0x34, 0xe0, 0xd6, 0xd8, 0x09, 0x02, 0x71, 0x41, 0x0f, 0x3c, 0x37, 0xf4, - 0xbd, 0x91, 0x34, 0xf9, 0x2e, 0x4e, 0x03, 0xbe, 0x47, 0x25, 0x9b, 0x54, 0xc0, 0xbe, 0x1d, 0x0f, - 0x69, 0x62, 0x3b, 0x7e, 0xd0, 0x02, 0x1c, 0x92, 0x9a, 0x29, 0x4a, 0x54, 0xb6, 0xe3, 0x47, 0x63, - 0x11, 0x1f, 0xc1, 0x4c, 0xec, 0x42, 0x65, 0x36, 0x76, 0xe1, 0x47, 0xe9, 0xb1, 0x0b, 0x35, 0x6c, - 0xfa, 0xb1, 0x6c, 0x7a, 0x7e, 0x8b, 0xbf, 0x54, 0x08, 0xc3, 0x7c, 0x48, 0x46, 0xfd, 0xcb, 0x84, - 0x64, 0x34, 0xd2, 0x42, 0x32, 0xde, 0x87, 0x0a, 0x3e, 0x96, 0xb7, 0xce, 0x1c, 0x37, 0x54, 0x26, - 0xec, 0xa6, 0xfe, 0x9a, 0x7e, 0x47, 0x28, 0xd3, 0xe0, 0xab, 0x3f, 0x83, 0xf9, 0xe8, 0x88, 0xc5, - 0x5f, 0x62, 0x74, 0x84, 0x7c, 0xd4, 0xff, 0x10, 0x4a, 0x6a, 0x9f, 0x18, 0x83, 0xfc, 0x89, 0xef, - 0x8d, 0x95, 0x69, 0x4f, 0xfc, 0xcd, 0xea, 0x90, 0x0d, 0x3d, 0x59, 0x39, 0x1b, 0x7a, 0xc6, 0x6f, - 0x40, 0x45, 0x23, 0x35, 0xf6, 0x16, 0x19, 0x11, 0x84, 0xb4, 0x2c, 0xb5, 0x64, 0x5a, 0xc5, 0xb2, - 0x84, 0x76, 0x87, 0x82, 0xdf, 0x0c, 0x1d, 0x9f, 0x63, 0x1c, 0x93, 0xe5, 0xf3, 0x73, 0xee, 0x07, - 0xca, 0xd4, 0xda, 0x8c, 0x0a, 0x4c, 0x82, 0x1b, 0x7f, 0x13, 0x96, 0x12, 0x7b, 0x2b, 0x59, 0xc4, - 0x3b, 0xb0, 0x80, 0xeb, 0xa6, 0x5c, 0x61, 0xc9, 0x28, 0x05, 0x59, 0x86, 0x01, 0xaa, 0x64, 0x25, - 0xb6, 0x26, 0xbe, 0x77, 0x8c, 0x9d, 0x64, 0xcc, 0x8a, 0x84, 0x1d, 0xfa, 0xde, 0xb1, 0xf1, 0x67, - 0x39, 0xc8, 0xed, 0x78, 0x13, 0xfd, 0xf5, 0x47, 0x66, 0xee, 0xf5, 0x87, 0x54, 0x01, 0xac, 0x48, - 0xc4, 0x97, 0x52, 0x1b, 0xda, 0x47, 0x95, 0x98, 0x7f, 0x1f, 0xea, 0x82, 0x4f, 0x84, 0x9e, 0xd0, - 0xa1, 0x2e, 0x6c, 0x9f, 0x62, 0x16, 0x72, 0x74, 0xf8, 0xec, 0x71, 0xd8, 0xf7, 0xb6, 0x09, 0xce, - 0x96, 0x21, 0x17, 0x09, 0xb0, 0x58, 0x2c, 0x3e, 0x85, 0x72, 0x8d, 0xaf, 0xf7, 0xae, 0xa4, 0xaf, - 0x47, 0x7e, 0xb1, 0x6f, 0xc2, 0x52, 0xb2, 0x5d, 0x62, 0x45, 0x52, 0x22, 0xd1, 0x1b, 0x46, 0x9e, - 0x74, 0x13, 0x04, 0x1f, 0x21, 0x1c, 0xe9, 0x32, 0x3e, 0xe1, 0x1c, 0x8b, 0x34, 0xa6, 0x57, 0x4a, - 0x30, 0xbd, 0x3b, 0x50, 0x09, 0x47, 0xe7, 0xd6, 0xc4, 0xbe, 0x1a, 0x79, 0xf6, 0x50, 0x9e, 0x6f, - 0x08, 0x47, 0xe7, 0x87, 0x04, 0x61, 0x8f, 0x00, 0xc6, 0x93, 0x89, 0x3c, 0x7b, 0x68, 0x6e, 0x8c, - 0x49, 0x79, 0xef, 0xf0, 0x90, 0x48, 0xce, 0x2c, 0x8f, 0x27, 0x13, 0xfa, 0x93, 0x6d, 0x41, 0x3d, - 0x35, 0xd6, 0xe8, 0xb6, 0x7a, 0x6c, 0xe6, 0x4d, 0x1e, 0xa6, 0x1c, 0xce, 0xda, 0x40, 0x87, 0xad, - 0x7f, 0x1f, 0xd8, 0x2f, 0x18, 0xf1, 0xd3, 0x87, 0x72, 0x34, 0x3e, 0x3d, 0x60, 0x06, 0x9f, 0x8f, - 0x56, 0x12, 0x01, 0x33, 0xed, 0xe1, 0xd0, 0x17, 0x7c, 0x91, 0x2e, 0xcc, 0x88, 0xe5, 0x83, 0x76, - 0x63, 0xb6, 0x89, 0xef, 0x1b, 0x7f, 0x91, 0x81, 0x02, 0x45, 0xef, 0xbc, 0x0b, 0x0d, 0xc2, 0x8f, - 0x5e, 0xd2, 0x48, 0x0f, 0x11, 0xdd, 0xbb, 0x7d, 0xf9, 0x88, 0x46, 0x1c, 0x0b, 0x2d, 0xf2, 0x30, - 0x1b, 0xed, 0xbc, 0x16, 0x7d, 0x78, 0x07, 0xca, 0x51, 0xd7, 0x1a, 0xe9, 0x94, 0x54, 0xcf, 0xec, - 0x4d, 0xc8, 0x9f, 0x79, 0x13, 0xa5, 0x8b, 0x43, 0xbc, 0x92, 0x26, 0xc2, 0xe3, 0xb1, 0x88, 0x3e, - 0x68, 0xf0, 0x52, 0x87, 0x8c, 0x3a, 0x41, 0x32, 0x98, 0x9f, 0xe3, 0x42, 0xca, 0x1c, 0x8f, 0xa0, - 0x21, 0xf8, 0x80, 0xe6, 0xa9, 0xbd, 0xfe, 0xd2, 0xfc, 0xba, 0x90, 0xf0, 0x06, 0xa3, 0xe9, 0x90, - 0xeb, 0x96, 0x10, 0x7c, 0xd6, 0x21, 0xe1, 0x4a, 0x3d, 0x30, 0x7e, 0x3f, 0x43, 0xfc, 0x45, 0xb4, - 0xcb, 0xee, 0x43, 0x5e, 0xdc, 0x6f, 0x33, 0x96, 0xba, 0xe8, 0x1d, 0xaf, 0xc0, 0x33, 0x11, 0x03, - 0xc3, 0x75, 0xa7, 0xe3, 0x64, 0xeb, 0x35, 0xb3, 0xe2, 0x4e, 0xc7, 0x91, 0x31, 0xe1, 0x6b, 0x6a, - 0x5a, 0x33, 0x8a, 0x38, 0xcd, 0x3e, 0x3a, 0xa6, 0x0f, 0xb5, 0xf7, 0x21, 0xf9, 0xc4, 0x8d, 0xa9, - 0xa4, 0xc0, 0xe1, 0x29, 0xd7, 0xde, 0x85, 0xfc, 0x61, 0x16, 0x6a, 0x89, 0x11, 0xe1, 0x03, 0x19, - 0x71, 0x01, 0x90, 0x15, 0x58, 0xee, 0x37, 0x08, 0x90, 0x14, 0xd4, 0xb5, 0x75, 0xca, 0x26, 0xd6, - 0x29, 0xf2, 0x49, 0xe7, 0x74, 0x9f, 0xf4, 0x63, 0x28, 0xc7, 0x11, 0xa7, 0xc9, 0x21, 0x89, 0xfe, - 0xd4, 0x6b, 0xe6, 0x18, 0x29, 0xf6, 0x62, 0x17, 0x74, 0x2f, 0xf6, 0xf7, 0x34, 0xa7, 0xe7, 0x02, - 0x36, 0x63, 0xa4, 0xad, 0xe8, 0x2f, 0xc5, 0xe5, 0x69, 0x7c, 0x04, 0x15, 0x6d, 0xf0, 0xba, 0x73, - 0x33, 0x93, 0x70, 0x6e, 0x46, 0x71, 0x07, 0xd9, 0x38, 0xee, 0xc0, 0xf8, 0xad, 0x2c, 0xd4, 0xc4, - 0xf9, 0x72, 0xdc, 0xd3, 0x43, 0x6f, 0xe4, 0x0c, 0xd0, 0x2a, 0x1c, 0x9d, 0x30, 0x29, 0x68, 0xa9, - 0x73, 0x26, 0x8f, 0x18, 0xc9, 0x59, 0x7a, 0x78, 0x15, 0x31, 0xe9, 0x28, 0xbc, 0xca, 0x80, 0x9a, - 0x60, 0x8c, 0xc7, 0x76, 0xc0, 0xb5, 0x78, 0x58, 0xb3, 0x72, 0xc2, 0xf9, 0x86, 0x1d, 0x10, 0x87, - 0xfc, 0x26, 0x2c, 0x09, 0x1c, 0x8c, 0x2c, 0x19, 0x3b, 0xa3, 0x91, 0x43, 0x98, 0x64, 0x6a, 0x68, - 0x9e, 0x70, 0x6e, 0xda, 0x21, 0xdf, 0x13, 0x05, 0x32, 0x7c, 0xb6, 0x34, 0x74, 0x02, 0xfb, 0x38, - 0x7e, 0xc6, 0x14, 0x7d, 0xa3, 0x2f, 0xc7, 0xbe, 0xd4, 0x7c, 0x39, 0x14, 0x62, 0x56, 0x19, 0xdb, - 0x97, 0x91, 0x2f, 0x67, 0x86, 0x92, 0x8a, 0xb3, 0x94, 0x64, 0xfc, 0xb7, 0x2c, 0x54, 0x34, 0xb2, - 0x7c, 0x9d, 0xdb, 0xf5, 0xf6, 0x9c, 0x15, 0xbf, 0xac, 0x1b, 0xec, 0xdf, 0x4e, 0x76, 0x89, 0x2e, - 0x5f, 0x0a, 0xd4, 0xd5, 0x08, 0xf8, 0x16, 0x94, 0xc5, 0xa9, 0x7b, 0x1f, 0x8d, 0x62, 0x32, 0xcc, - 0x1c, 0x01, 0x87, 0xd3, 0x63, 0x55, 0xf8, 0x04, 0x0b, 0x0b, 0x71, 0xe1, 0x13, 0x51, 0xf8, 0xb2, - 0xb7, 0x8b, 0xdf, 0x81, 0xaa, 0x6c, 0x15, 0xf7, 0x14, 0xa7, 0x1b, 0x9f, 0xfa, 0xc4, 0x7e, 0x9b, - 0x15, 0xea, 0x8e, 0x36, 0x5f, 0x56, 0x7c, 0xa2, 0x2a, 0x96, 0x5e, 0x55, 0xf1, 0x09, 0x7d, 0x18, - 0xdb, 0xd1, 0x73, 0x50, 0x7c, 0x6e, 0xa0, 0xf8, 0xd8, 0x23, 0x58, 0x52, 0xec, 0x6a, 0xea, 0xda, - 0xae, 0xeb, 0x4d, 0xdd, 0x01, 0x57, 0x01, 0x09, 0x4c, 0x16, 0x1d, 0xc5, 0x25, 0xc6, 0x30, 0x8a, - 0x58, 0xa3, 0x67, 0x0b, 0x0f, 0xa0, 0x40, 0x72, 0x39, 0x09, 0x1f, 0xe9, 0x8c, 0x8b, 0x50, 0xd8, - 0x7d, 0x28, 0x90, 0x78, 0x9e, 0xbd, 0x96, 0xd9, 0x10, 0x82, 0xf1, 0x10, 0x1a, 0x28, 0x62, 0x6a, - 0x1c, 0xf7, 0x65, 0x52, 0x89, 0xb1, 0x0c, 0x6c, 0x9f, 0x0e, 0x91, 0xfe, 0x9c, 0xe6, 0x7f, 0xe6, - 0xa0, 0xa2, 0x81, 0x05, 0x5b, 0xc4, 0x07, 0x18, 0xd6, 0xd0, 0xb1, 0xc7, 0x5c, 0xf9, 0x1e, 0x6a, - 0x66, 0x0d, 0xa1, 0x5b, 0x12, 0x28, 0x2e, 0x05, 0xfb, 0xfc, 0xd4, 0xf2, 0xa6, 0xa1, 0x35, 0xe4, - 0xa7, 0x3e, 0xe7, 0x52, 0x58, 0xaa, 0xda, 0xe7, 0xa7, 0x07, 0xd3, 0x70, 0x0b, 0x61, 0x02, 0x4b, - 0x10, 0xb5, 0x86, 0x25, 0xdf, 0x0c, 0x8c, 0xed, 0xcb, 0x18, 0x4b, 0x3e, 0x5c, 0xa1, 0x25, 0xca, - 0x47, 0x0f, 0x57, 0x48, 0x6d, 0x99, 0xe5, 0xe4, 0x85, 0x79, 0x4e, 0xfe, 0x6d, 0x58, 0x25, 0x4e, - 0x2e, 0x79, 0x84, 0x35, 0x43, 0x52, 0xcb, 0x58, 0x2a, 0x27, 0xa9, 0xc9, 0x5f, 0x4d, 0x31, 0x03, - 0x75, 0x3e, 0x02, 0xe7, 0xc7, 0x74, 0xa2, 0x32, 0xa6, 0x98, 0x99, 0x6c, 0xbc, 0xe7, 0xfc, 0x98, - 0x0b, 0x4c, 0x74, 0x8c, 0xea, 0x98, 0xf2, 0x89, 0xec, 0xd8, 0x71, 0x67, 0x31, 0xed, 0xcb, 0x24, - 0x66, 0x59, 0x62, 0xda, 0x97, 0x3a, 0xe6, 0x53, 0x58, 0x1b, 0xf3, 0xa1, 0x63, 0x27, 0x9b, 0xb5, - 0x62, 0x09, 0x62, 0x99, 0x8a, 0xb5, 0x3a, 0x3d, 0xd2, 0x20, 0xc5, 0x6a, 0xfc, 0xd8, 0x1b, 0x1f, - 0x3b, 0x74, 0x79, 0x92, 0xab, 0x36, 0x6f, 0xd6, 0xdd, 0xe9, 0xf8, 0x87, 0x08, 0x16, 0x55, 0x02, - 0xa3, 0x06, 0x95, 0x5e, 0xe8, 0x4d, 0xd4, 0x36, 0xd7, 0xa1, 0x4a, 0x9f, 0x32, 0xdc, 0xe4, 0x16, - 0xdc, 0x44, 0xda, 0xec, 0x7b, 0x13, 0x6f, 0xe4, 0x9d, 0x5e, 0x25, 0x0c, 0x4a, 0xff, 0x23, 0x03, - 0x4b, 0x89, 0x52, 0x79, 0xce, 0xbf, 0x4d, 0x07, 0x2b, 0x8a, 0x19, 0x20, 0x72, 0x5e, 0xd4, 0x2e, - 0x1f, 0x42, 0xa4, 0x53, 0xa5, 0xe2, 0x08, 0xda, 0x71, 0xac, 0xab, 0xaa, 0x48, 0xb4, 0xdd, 0x9a, - 0xa7, 0x6d, 0x59, 0x5f, 0x45, 0xc1, 0xaa, 0x26, 0xfe, 0xba, 0x7c, 0xc6, 0x3c, 0x94, 0x53, 0xce, - 0x25, 0x1f, 0x6a, 0xea, 0xc6, 0x27, 0x35, 0x82, 0xd8, 0x22, 0x15, 0x18, 0xff, 0x36, 0x03, 0x10, - 0x8f, 0x0e, 0x9f, 0x8a, 0x46, 0x17, 0x28, 0xa5, 0x91, 0xd1, 0x2e, 0xcb, 0xb7, 0xa0, 0x1a, 0xbd, - 0x18, 0x8b, 0xaf, 0xe4, 0x8a, 0x82, 0x89, 0x7b, 0xf9, 0x1e, 0x34, 0x4e, 0x47, 0xde, 0x31, 0x8a, - 0x4e, 0xf2, 0x02, 0xa5, 0xa0, 0x9b, 0x3a, 0x81, 0xd5, 0xb5, 0x18, 0x5f, 0xe0, 0xf9, 0xd4, 0x47, - 0x65, 0xfa, 0x75, 0x6c, 0xfc, 0x76, 0x36, 0x7a, 0x3a, 0x13, 0xaf, 0xc4, 0xcb, 0xf5, 0x8c, 0x9f, - 0xc7, 0x03, 0xfb, 0x32, 0xcf, 0xc3, 0x47, 0x50, 0xf7, 0x89, 0x3b, 0x2a, 0xd6, 0x99, 0x7f, 0x09, - 0xeb, 0xac, 0xf9, 0x89, 0x2b, 0xf7, 0xeb, 0xd0, 0xb4, 0x87, 0xe7, 0xdc, 0x0f, 0x1d, 0x34, 0xd6, - 0xa2, 0xa0, 0x26, 0x1f, 0xab, 0x68, 0x70, 0x94, 0x88, 0xee, 0x41, 0x43, 0x86, 0x40, 0x45, 0x98, - 0x32, 0xa9, 0x42, 0x0c, 0x16, 0x88, 0xc6, 0x7f, 0x50, 0x6f, 0x75, 0x92, 0xbb, 0xfb, 0xf2, 0x55, - 0xd1, 0x67, 0x98, 0x9d, 0xf7, 0xad, 0x48, 0x42, 0x92, 0x36, 0x60, 0xc9, 0x8f, 0x08, 0x28, 0x2d, - 0xc0, 0xc9, 0x65, 0xcd, 0xbf, 0xce, 0xb2, 0x1a, 0x7f, 0x9c, 0x81, 0xe2, 0x8e, 0x37, 0x11, 0x7a, - 0xb9, 0x90, 0xe7, 0xf0, 0x98, 0x44, 0xe1, 0x87, 0x0b, 0xe2, 0xb3, 0x3b, 0x7c, 0x79, 0xc8, 0x40, - 0xaa, 0xbc, 0x51, 0x4b, 0xca, 0x1b, 0xdf, 0x83, 0x5b, 0xe8, 0x8d, 0xf0, 0xbd, 0x89, 0xe7, 0x8b, - 0xa3, 0x6a, 0x8f, 0x48, 0xee, 0xf0, 0xdc, 0xf0, 0x4c, 0xf1, 0xce, 0x9b, 0x27, 0x9c, 0x1f, 0x6a, - 0x18, 0x7b, 0x11, 0x02, 0xc6, 0xd2, 0x8c, 0xc2, 0x73, 0x8b, 0x54, 0x45, 0x29, 0x18, 0x11, 0x47, - 0x6d, 0x88, 0x82, 0x0e, 0xc2, 0x51, 0x34, 0x32, 0xbe, 0x0b, 0xe5, 0xc8, 0xea, 0xc0, 0xde, 0x83, - 0xf2, 0x99, 0x37, 0x91, 0xa6, 0x89, 0x4c, 0x22, 0xac, 0x42, 0xce, 0xda, 0x2c, 0x9d, 0xd1, 0x1f, - 0x81, 0xf1, 0x67, 0x45, 0x28, 0x76, 0xdd, 0x73, 0xcf, 0x19, 0xe0, 0x6b, 0x9f, 0x31, 0x1f, 0x7b, - 0x2a, 0x0e, 0x53, 0xfc, 0x8d, 0x1e, 0xfd, 0x38, 0x35, 0x42, 0x4e, 0x7a, 0xf4, 0xa3, 0xa4, 0x08, - 0x2b, 0xb0, 0xe0, 0xeb, 0xb9, 0x0d, 0x0a, 0x3e, 0xbe, 0x3f, 0x8c, 0x94, 0xb6, 0x82, 0x16, 0xc7, - 0x2a, 0xda, 0xa2, 0x98, 0x7b, 0x5c, 0x32, 0x8a, 0x8b, 0x29, 0x23, 0x04, 0x17, 0xec, 0x0d, 0x28, - 0xca, 0x28, 0x06, 0x7a, 0x13, 0x4e, 0x0f, 0x06, 0x25, 0x08, 0xa9, 0xc1, 0xe7, 0xe4, 0x4d, 0x8a, - 0x24, 0x2a, 0xa1, 0xa7, 0x4b, 0xe0, 0x96, 0xa0, 0xb5, 0x3b, 0x50, 0x21, 0x7c, 0x42, 0x29, 0xc9, - 0xf7, 0x39, 0x08, 0x42, 0x84, 0x94, 0x14, 0x21, 0xe5, 0xd4, 0x14, 0x21, 0xf8, 0x9c, 0x2b, 0xe2, - 0xb2, 0x34, 0x45, 0xa0, 0xc4, 0x10, 0x1a, 0x5c, 0xe5, 0xc7, 0x91, 0xca, 0x3d, 0x85, 0x89, 0x29, - 0xe5, 0xfe, 0x6d, 0xa8, 0x9d, 0xd8, 0xa3, 0xd1, 0xb1, 0x3d, 0x78, 0x41, 0x3a, 0x69, 0x95, 0xcc, - 0x70, 0x0a, 0x88, 0x4a, 0xe9, 0x1d, 0xa8, 0x68, 0xbb, 0x8c, 0x8f, 0x6f, 0xf2, 0x26, 0xc4, 0xfb, - 0x3b, 0x6b, 0x6a, 0xaa, 0xbf, 0x86, 0xa9, 0x49, 0x7b, 0x84, 0xd4, 0x48, 0x3e, 0x42, 0xba, 0x85, - 0xdc, 0x54, 0x3e, 0x54, 0x69, 0x52, 0x16, 0x02, 0x7b, 0x38, 0xc4, 0x87, 0x2a, 0x94, 0xf2, 0x0b, - 0x17, 0x8f, 0xca, 0x17, 0x49, 0xa8, 0x25, 0x18, 0xa1, 0xdc, 0x26, 0x7b, 0xe9, 0xc4, 0x76, 0x86, - 0xf8, 0xe8, 0x93, 0xd4, 0xd8, 0xa2, 0x3d, 0x0e, 0x0f, 0x6d, 0x67, 0xc8, 0xee, 0x42, 0x55, 0x15, - 0xe3, 0xed, 0xb8, 0x44, 0xeb, 0x2f, 0x8b, 0xc5, 0x9d, 0x68, 0x40, 0x2d, 0xc2, 0x18, 0xc7, 0xb1, - 0x5e, 0x15, 0x89, 0x82, 0x74, 0xf0, 0x3e, 0x3a, 0xff, 0x43, 0x8e, 0x11, 0x5d, 0xf5, 0x27, 0xb7, - 0xe4, 0x5c, 0x25, 0x95, 0xaa, 0xff, 0xf1, 0xa5, 0x83, 0x49, 0x98, 0x42, 0x10, 0x23, 0x17, 0xcd, - 0x6a, 0x42, 0x10, 0x93, 0xa8, 0xe8, 0xa2, 0x21, 0x04, 0xf6, 0x5d, 0x4d, 0x91, 0x6a, 0x21, 0xf2, - 0x1b, 0x33, 0xed, 0x5f, 0xf7, 0xe6, 0xfd, 0x36, 0x80, 0x13, 0x88, 0x5b, 0x26, 0xe0, 0xee, 0x10, - 0x83, 0xb3, 0x4a, 0x66, 0xd9, 0x09, 0x9e, 0x13, 0xe0, 0xab, 0xd5, 0xb0, 0xda, 0x50, 0xd5, 0xa7, - 0xc9, 0x4a, 0x90, 0x3f, 0x38, 0xec, 0xec, 0x37, 0x6f, 0xb0, 0x0a, 0x14, 0x7b, 0x9d, 0x7e, 0x7f, - 0xb7, 0xb3, 0xd5, 0xcc, 0xb0, 0x2a, 0x94, 0xa2, 0x10, 0x93, 0xac, 0xf8, 0x6a, 0x6f, 0x6e, 0x76, - 0x0e, 0xfb, 0x9d, 0xad, 0x66, 0xee, 0x07, 0xf9, 0x52, 0xb6, 0x99, 0x33, 0xfe, 0x3c, 0x07, 0x15, - 0x6d, 0x15, 0x5e, 0xce, 0x8c, 0x6f, 0x03, 0xa0, 0x4a, 0x13, 0xbf, 0x63, 0xca, 0x9b, 0x65, 0x01, - 0xa1, 0xcd, 0xd7, 0x8d, 0xe5, 0x39, 0x4a, 0x6f, 0xa1, 0x8c, 0xe5, 0x6f, 0x43, 0x8d, 0x32, 0x45, - 0xe8, 0xee, 0xba, 0x82, 0x59, 0x25, 0xa0, 0x64, 0xd5, 0x18, 0xa3, 0x86, 0x48, 0x18, 0xbd, 0x20, - 0xe3, 0xc6, 0x09, 0x84, 0xf1, 0x0b, 0x18, 0x7c, 0x12, 0x78, 0xa3, 0x73, 0x4e, 0x18, 0x24, 0x11, - 0x56, 0x24, 0xac, 0x2f, 0x83, 0xe4, 0x24, 0x3f, 0xd4, 0x82, 0xa4, 0x0a, 0x66, 0x95, 0x80, 0xb2, - 0xa3, 0x6f, 0x2a, 0x02, 0x2a, 0x21, 0x01, 0xad, 0xcd, 0x53, 0x43, 0x82, 0x78, 0x76, 0xe7, 0xec, - 0x59, 0x65, 0x24, 0x8c, 0xaf, 0xcd, 0xd7, 0x7b, 0xb5, 0x5d, 0x8b, 0xbd, 0x07, 0x6c, 0x3c, 0x99, - 0x58, 0x29, 0x96, 0xa6, 0xbc, 0xd9, 0x18, 0x4f, 0x26, 0x7d, 0xcd, 0x10, 0xf3, 0x15, 0x18, 0xc1, - 0x3e, 0x07, 0xd6, 0x16, 0x07, 0x18, 0x87, 0x18, 0x99, 0x50, 0x63, 0xb6, 0x9c, 0xd1, 0xd9, 0x72, - 0x0a, 0xf7, 0xcb, 0xa6, 0x72, 0xbf, 0x97, 0xf1, 0x09, 0x63, 0x1b, 0x2a, 0x87, 0x5a, 0x1e, 0x9a, - 0xbb, 0xe2, 0x86, 0x50, 0x19, 0x68, 0xe8, 0xee, 0x20, 0xe3, 0x96, 0x2f, 0x13, 0xcf, 0x68, 0xa3, - 0xc9, 0x6a, 0xa3, 0x31, 0xfe, 0x4d, 0x86, 0x62, 0xfc, 0xa3, 0xc1, 0xc7, 0xa9, 0x6f, 0x94, 0x1f, - 0x28, 0x8e, 0x65, 0xac, 0x28, 0xff, 0x8f, 0x0c, 0x43, 0xc4, 0xa1, 0x59, 0xde, 0xc9, 0x49, 0xc0, - 0x55, 0x54, 0x4e, 0x05, 0x61, 0x07, 0x08, 0x52, 0xc2, 0xb7, 0x90, 0xf0, 0x1d, 0x6a, 0x3f, 0x90, - 0xd1, 0x39, 0x42, 0xf8, 0xde, 0xb3, 0x2f, 0x65, 0xaf, 0x81, 0x10, 0x41, 0xa4, 0xa1, 0x5a, 0xc5, - 0x22, 0x45, 0xdf, 0xc6, 0xbf, 0x94, 0xe1, 0x96, 0xb3, 0xeb, 0xfb, 0x00, 0x4a, 0x51, 0xab, 0xc9, - 0x1b, 0x56, 0x61, 0x46, 0xe5, 0xe2, 0x1e, 0x47, 0xad, 0x3c, 0x31, 0x62, 0x3a, 0x5c, 0xe8, 0x6c, - 0xe8, 0x6a, 0xa3, 0xfe, 0x06, 0xb0, 0x13, 0xc7, 0x9f, 0x45, 0xa6, 0xc3, 0xd6, 0xc4, 0x12, 0x0d, - 0xdb, 0x38, 0x82, 0x25, 0xc5, 0x25, 0x34, 0x8d, 0x20, 0xb9, 0x79, 0x99, 0x57, 0x30, 0xf9, 0xec, - 0x1c, 0x93, 0x37, 0x7e, 0x9a, 0x87, 0xa2, 0xca, 0xe9, 0x94, 0x96, 0x87, 0xa8, 0x9c, 0xcc, 0x43, - 0xd4, 0x4a, 0xe4, 0xac, 0xc0, 0xad, 0x97, 0xf7, 0xfd, 0xbd, 0xd9, 0x2b, 0x5b, 0x33, 0x9a, 0x27, - 0xae, 0xed, 0x55, 0xc8, 0x4f, 0xec, 0xf0, 0x0c, 0x0d, 0x64, 0x44, 0x3c, 0xf8, 0xad, 0x8c, 0xe9, - 0x85, 0xa4, 0x31, 0x3d, 0x2d, 0x67, 0x13, 0x89, 0xa4, 0x73, 0x39, 0x9b, 0x6e, 0x01, 0xc9, 0x17, - 0xda, 0x7b, 0x98, 0x12, 0x02, 0xc4, 0x5d, 0x94, 0x14, 0x47, 0x4a, 0xb3, 0xe2, 0xc8, 0x6b, 0x8b, - 0x0a, 0xdf, 0x86, 0x05, 0x8a, 0x77, 0x96, 0x31, 0x57, 0xea, 0x42, 0x91, 0x6b, 0xa8, 0xfe, 0xa7, - 0x47, 0xb0, 0xa6, 0xc4, 0xd5, 0x13, 0xa0, 0x54, 0x12, 0x09, 0x50, 0x74, 0x23, 0x7f, 0x35, 0x69, - 0xe4, 0xbf, 0x0f, 0xcd, 0x68, 0x41, 0xd1, 0x64, 0xe6, 0x06, 0x32, 0xa2, 0xa3, 0xae, 0xe0, 0x82, - 0x4b, 0xee, 0x07, 0xf1, 0x85, 0x58, 0x4f, 0x5c, 0x88, 0x82, 0x87, 0xb5, 0xc3, 0x90, 0x8f, 0x27, - 0xa1, 0xbc, 0x10, 0xf1, 0xcd, 0xb7, 0x3e, 0xc0, 0x64, 0x34, 0x62, 0x0d, 0xca, 0xdd, 0x7d, 0x6b, - 0x7b, 0xb7, 0xfb, 0x6c, 0xa7, 0xdf, 0xcc, 0x88, 0xcf, 0xde, 0xd1, 0xe6, 0x66, 0xa7, 0xb3, 0x85, - 0x37, 0x0e, 0xc0, 0xc2, 0x76, 0xbb, 0x2b, 0x6e, 0x9f, 0x9c, 0xf1, 0xbb, 0x59, 0xa8, 0x68, 0xcd, - 0xb3, 0xa7, 0xd1, 0xaa, 0x50, 0x8e, 0x8c, 0xdb, 0xf3, 0x43, 0x78, 0xa8, 0x58, 0xb1, 0xb6, 0x2c, - 0x51, 0x86, 0xaa, 0xec, 0xb5, 0x19, 0xaa, 0xd8, 0xbb, 0xd0, 0xb0, 0xa9, 0x85, 0x68, 0x15, 0xa4, - 0x39, 0x58, 0x82, 0xe5, 0x22, 0xe0, 0x2b, 0xb0, 0xf8, 0x3e, 0x11, 0x78, 0x79, 0xf5, 0xf0, 0x2a, - 0xba, 0x52, 0x70, 0xb1, 0x8a, 0x27, 0xb6, 0x33, 0x9a, 0xfa, 0x5c, 0xba, 0x6f, 0xa3, 0x9b, 0x99, - 0xa0, 0xa6, 0x2a, 0x36, 0x3e, 0x00, 0x88, 0xc7, 0x9c, 0x5c, 0x9c, 0x1b, 0xc9, 0xc5, 0xc9, 0x68, - 0x8b, 0x93, 0x35, 0xb6, 0x88, 0x8d, 0xc8, 0x85, 0x8e, 0x3c, 0xd5, 0xdf, 0x04, 0x65, 0x91, 0xb2, - 0xf0, 0x1d, 0xe6, 0x64, 0xc4, 0x43, 0x15, 0xb7, 0xb9, 0x28, 0x4b, 0xba, 0x51, 0x81, 0x0a, 0xa3, - 0x8e, 0x5b, 0x89, 0xb9, 0x91, 0x24, 0xc9, 0x59, 0x6e, 0x24, 0x51, 0xcd, 0xa8, 0xdc, 0x58, 0x87, - 0xd6, 0x16, 0x17, 0xad, 0xb5, 0x47, 0xa3, 0x99, 0xe1, 0x18, 0xb7, 0xe0, 0x66, 0x4a, 0x99, 0x34, - 0x42, 0x7c, 0x0c, 0x2b, 0x6d, 0x0a, 0xd1, 0xfc, 0xaa, 0x62, 0x31, 0x8c, 0x16, 0xac, 0xce, 0x36, - 0x29, 0x3b, 0xdb, 0x86, 0xc5, 0x2d, 0x7e, 0x3c, 0x3d, 0xdd, 0xe5, 0xe7, 0x71, 0x47, 0x0c, 0xf2, - 0xc1, 0x99, 0x77, 0x21, 0xd7, 0x07, 0xff, 0x16, 0x67, 0x78, 0x24, 0x70, 0xac, 0x60, 0xc2, 0x07, - 0xca, 0x22, 0x8a, 0x90, 0xde, 0x84, 0x0f, 0x8c, 0xa7, 0xc0, 0xf4, 0x76, 0xe4, 0x7a, 0x09, 0x2d, - 0x61, 0x7a, 0x6c, 0x05, 0x57, 0x41, 0xc8, 0xc7, 0x2a, 0x05, 0x0b, 0x04, 0xd3, 0xe3, 0x1e, 0x41, - 0x8c, 0x7b, 0x50, 0x3d, 0xb4, 0xaf, 0x4c, 0xfe, 0xb9, 0x8c, 0x32, 0x58, 0x83, 0xe2, 0xc4, 0xbe, - 0x12, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x07, 0x79, 0x58, 0x20, 0x4c, 0x76, 0x97, 0xb2, - 0x24, 0x3a, 0x2e, 0x1e, 0x43, 0xc5, 0x28, 0x35, 0xd0, 0x1c, 0x2f, 0xcd, 0xce, 0xf3, 0x52, 0x69, - 0x40, 0x53, 0xd9, 0x21, 0x94, 0x19, 0xdb, 0x9d, 0x8e, 0x55, 0x4a, 0x88, 0x64, 0x9c, 0x62, 0x3e, - 0xce, 0x82, 0x49, 0x41, 0x5c, 0x49, 0x47, 0x63, 0xac, 0x8b, 0xd0, 0xe8, 0xd4, 0x15, 0x21, 0xd9, - 0xa5, 0x0e, 0x4a, 0x55, 0x78, 0x8a, 0x2a, 0x7e, 0x25, 0xa9, 0xf0, 0xcc, 0x29, 0x36, 0xa5, 0x57, - 0x2b, 0x36, 0x64, 0x59, 0x7b, 0x89, 0x62, 0x03, 0xaf, 0xa1, 0xd8, 0xbc, 0x86, 0x93, 0xef, 0x26, - 0x94, 0xf0, 0xde, 0xd7, 0xb8, 0xa7, 0xb8, 0xef, 0x05, 0xf7, 0xfc, 0x8e, 0x26, 0xfa, 0xd3, 0x0b, - 0x83, 0x5b, 0xf1, 0x31, 0x31, 0xf9, 0xe7, 0xbf, 0x1c, 0xe7, 0xc9, 0x67, 0x50, 0x94, 0x50, 0x41, - 0xd0, 0xae, 0x3d, 0x56, 0x09, 0x76, 0xf0, 0x6f, 0xb1, 0x6c, 0x98, 0x15, 0xe4, 0xf3, 0xa9, 0xe3, - 0xf3, 0xa1, 0x4a, 0xc1, 0xe0, 0xe0, 0x19, 0x15, 0x10, 0x31, 0x41, 0xa1, 0x86, 0xb8, 0xde, 0x85, - 0x2b, 0x03, 0xb0, 0x8b, 0x4e, 0xf0, 0x5c, 0x7c, 0x1a, 0x0c, 0x9a, 0x98, 0x62, 0x6b, 0xe2, 0xf9, - 0xea, 0x72, 0x32, 0x7e, 0x9a, 0x81, 0xa6, 0x3c, 0x5d, 0x51, 0x99, 0xae, 0x05, 0x14, 0xae, 0x73, - 0x88, 0xbf, 0x3c, 0xa1, 0x82, 0x01, 0x35, 0x34, 0x7e, 0x44, 0x37, 0x15, 0x19, 0x6f, 0x2a, 0x02, - 0xb8, 0x2d, 0x6f, 0xab, 0x37, 0xa1, 0xa2, 0x9e, 0x63, 0x8e, 0x9d, 0x91, 0x4a, 0x78, 0x4b, 0xef, - 0x31, 0xf7, 0x9c, 0x91, 0xba, 0xe8, 0x7c, 0x5b, 0xc6, 0x53, 0x65, 0xf0, 0xa2, 0x33, 0xed, 0x90, - 0x1b, 0xff, 0x25, 0x03, 0x8b, 0xda, 0x54, 0xe4, 0xb9, 0xfd, 0x10, 0xaa, 0x51, 0x6e, 0x3b, 0x1e, - 0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22, 0x48, 0x20, 0x06, 0x33, 0xb4, 0xaf, - 0x70, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xb5, 0xcd, 0x79, 0x6f, 0x3a, 0x16, 0xaa, - 0xeb, 0x05, 0xe7, 0x2f, 0x22, 0x04, 0x92, 0xb9, 0x40, 0xc0, 0x24, 0x86, 0x01, 0xb5, 0xb1, 0xe7, - 0x86, 0x67, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6, 0x9f, 0x66, 0x61, 0x89, 0x4c, 0x6c, - 0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48, 0xcc, 0x6b, 0xe7, 0x86, 0x29, 0xbf, - 0xd9, 0xb7, 0x5f, 0xd3, 0x2c, 0xa8, 0x42, 0xb6, 0xae, 0x59, 0xfe, 0xdc, 0xfc, 0xf2, 0x5f, 0xbf, - 0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x75, 0xfc, 0x5c, 0x73, 0x71, 0x4d, 0x45, 0x89, - 0xa3, 0xc5, 0x35, 0x3d, 0x85, 0xb5, 0x04, 0x0e, 0x72, 0x6b, 0xe7, 0xc4, 0xe1, 0x2a, 0xbe, 0x7d, - 0x59, 0xc3, 0xee, 0xa9, 0xb2, 0x8d, 0x22, 0x14, 0x82, 0x81, 0x37, 0xe1, 0xc6, 0x2a, 0x2c, 0x27, - 0x57, 0x55, 0x5e, 0x13, 0xbf, 0x97, 0x81, 0x96, 0x7c, 0x1f, 0xe1, 0xb8, 0xa7, 0x3b, 0x4e, 0x10, - 0x7a, 0x7e, 0x94, 0x03, 0xee, 0x36, 0x40, 0x10, 0xda, 0xbe, 0xd4, 0x36, 0x65, 0x44, 0x37, 0x42, - 0x50, 0x93, 0xbc, 0x09, 0x25, 0xee, 0x0e, 0xa9, 0x90, 0xa8, 0xa1, 0xc8, 0xdd, 0xa1, 0xd2, 0x43, - 0xe7, 0xe4, 0xef, 0x5a, 0x52, 0xbd, 0x90, 0x01, 0x96, 0x62, 0x75, 0xf8, 0x39, 0x5e, 0xbc, 0xf9, - 0x28, 0xc0, 0x72, 0xcf, 0xbe, 0xc4, 0xd7, 0x86, 0x81, 0xf1, 0xcf, 0xb2, 0xd0, 0x88, 0xc7, 0x47, - 0xd1, 0xd9, 0x2f, 0x8f, 0x33, 0xbf, 0x2b, 0xc9, 0xc1, 0x11, 0xf2, 0xbb, 0x66, 0x78, 0x2c, 0xd1, - 0xe1, 0xec, 0xba, 0xcc, 0x80, 0x8a, 0xc2, 0xf0, 0xa6, 0xa1, 0x96, 0x8a, 0xa9, 0x4c, 0x28, 0x07, - 0xd3, 0x50, 0x28, 0x5c, 0x42, 0xf3, 0x74, 0x5c, 0xa9, 0xf2, 0x14, 0xec, 0x71, 0xd8, 0xc5, 0x0c, - 0xcf, 0x02, 0x2c, 0xaa, 0xd1, 0x46, 0x0a, 0x2c, 0x81, 0xdf, 0x24, 0x39, 0x9b, 0x76, 0x0e, 0x65, - 0x6c, 0x5d, 0x08, 0xa5, 0x64, 0x97, 0x91, 0x10, 0xfa, 0x26, 0x54, 0xa8, 0xf1, 0x38, 0x8c, 0x2d, - 0x6f, 0x96, 0xb1, 0x07, 0x2c, 0x97, 0x46, 0x20, 0x6f, 0x9a, 0x50, 0x7d, 0x81, 0xba, 0xc2, 0xe7, - 0x07, 0xff, 0x28, 0x03, 0x37, 0x53, 0xb6, 0x4d, 0x9e, 0xf2, 0x4d, 0x58, 0x3c, 0x89, 0x0a, 0xd5, - 0xea, 0xd2, 0x51, 0x5f, 0x55, 0x6c, 0x35, 0xb9, 0xa6, 0x66, 0xf3, 0x24, 0x09, 0x88, 0x95, 0x2e, - 0xda, 0xc1, 0x44, 0xa4, 0x22, 0x2a, 0x5d, 0xb4, 0x8d, 0xa4, 0xef, 0x1c, 0xc2, 0x7a, 0xe7, 0x52, - 0x70, 0x8c, 0x4d, 0x3d, 0x45, 0xb9, 0x22, 0xa3, 0xa4, 0x81, 0x39, 0xf3, 0x5a, 0x06, 0xe6, 0x21, - 0x05, 0x64, 0x45, 0x6d, 0xfd, 0x3c, 0x8d, 0xe0, 0x05, 0x2a, 0xea, 0x50, 0x8a, 0x75, 0x15, 0x2d, - 0x39, 0x88, 0x52, 0xab, 0x1b, 0x01, 0x34, 0xf6, 0xa6, 0xa3, 0xd0, 0x89, 0xb3, 0xad, 0xb3, 0x6f, - 0xcb, 0x3a, 0xd8, 0x8f, 0x5a, 0xb5, 0xd4, 0x8e, 0x20, 0xea, 0x08, 0x17, 0x6b, 0x2c, 0x1a, 0xb2, - 0xe6, 0xfb, 0x6b, 0x8c, 0x93, 0x3d, 0x18, 0x37, 0x61, 0x2d, 0xfe, 0xa2, 0x65, 0x53, 0x57, 0xcd, - 0xbf, 0xce, 0xd0, 0xd3, 0xe6, 0x64, 0xe6, 0x77, 0xd6, 0x81, 0xa5, 0xc0, 0x71, 0x4f, 0x47, 0x5c, - 0x6f, 0x3e, 0x90, 0x8b, 0xb0, 0x92, 0x1c, 0x9b, 0xcc, 0x0e, 0x6f, 0x2e, 0x52, 0x8d, 0xb8, 0xb5, - 0x80, 0x6d, 0x5c, 0x37, 0xc8, 0x98, 0x2c, 0x66, 0x56, 0x63, 0x7e, 0xf0, 0x5d, 0xa8, 0x27, 0x3b, - 0x62, 0xdf, 0x91, 0xc1, 0x88, 0xf1, 0xa8, 0x72, 0x33, 0x71, 0x65, 0x31, 0x41, 0x54, 0xe2, 0xb5, - 0x0f, 0x8c, 0x7f, 0x92, 0x81, 0x96, 0xc9, 0x05, 0xe5, 0x6a, 0xa3, 0x54, 0x34, 0xf3, 0xe1, 0x5c, - 0xab, 0xd7, 0xcf, 0x55, 0xc5, 0x38, 0xaa, 0x11, 0x7d, 0xe3, 0xda, 0xcd, 0xd8, 0xb9, 0x31, 0x37, - 0xa3, 0x8d, 0x12, 0x2c, 0x10, 0x8a, 0xb1, 0x06, 0x2b, 0x72, 0x3c, 0x6a, 0x2c, 0xb1, 0xf7, 0x30, - 0xd1, 0x63, 0xc2, 0x7b, 0xb8, 0x0e, 0x2d, 0x4a, 0xe5, 0xa7, 0x4f, 0x42, 0x56, 0xdc, 0x02, 0xb6, - 0x67, 0x0f, 0x6c, 0xdf, 0xf3, 0xdc, 0x43, 0xee, 0xcb, 0x87, 0xa2, 0x28, 0x61, 0xa2, 0x73, 0x4d, - 0x89, 0xc2, 0xf4, 0xa5, 0x12, 0xd0, 0x79, 0xae, 0x7a, 0x17, 0x43, 0x5f, 0x86, 0x09, 0x4b, 0x1b, - 0xf6, 0x0b, 0xae, 0x5a, 0x52, 0x4b, 0xf4, 0x11, 0x54, 0x26, 0x51, 0xa3, 0x6a, 0xdd, 0x55, 0xc4, - 0xf2, 0x7c, 0xb7, 0xa6, 0x8e, 0x6d, 0x3c, 0x81, 0xe5, 0x64, 0x9b, 0x92, 0x75, 0xac, 0x43, 0x69, - 0x2c, 0x61, 0x72, 0x74, 0xd1, 0xb7, 0xf1, 0x3b, 0x25, 0x28, 0x4a, 0x7d, 0x8e, 0x3d, 0x84, 0xfc, - 0x40, 0xbd, 0x4d, 0x8a, 0x13, 0x61, 0xc8, 0x52, 0xf5, 0xff, 0x26, 0xbe, 0x50, 0x12, 0x78, 0xec, - 0x23, 0xa8, 0x27, 0xbd, 0xa2, 0x33, 0xe1, 0x90, 0x49, 0x77, 0x66, 0x6d, 0x30, 0xe3, 0xff, 0x2a, - 0xc7, 0x97, 0x23, 0xc9, 0x0c, 0xa5, 0x33, 0xed, 0xf6, 0xf4, 0x5c, 0x21, 0x6f, 0x07, 0x67, 0xb6, - 0xf5, 0xe4, 0xe9, 0x07, 0x32, 0x1e, 0xb2, 0x82, 0xc0, 0xde, 0x99, 0xfd, 0xe4, 0xe9, 0x07, 0xb3, - 0x92, 0x34, 0x85, 0xc4, 0xe9, 0x92, 0xf4, 0x32, 0x14, 0x28, 0xd3, 0x1a, 0x3d, 0x32, 0xa1, 0x0f, - 0xf6, 0x18, 0x96, 0xa5, 0xda, 0x6a, 0xc9, 0xe7, 0xc0, 0xc4, 0x05, 0x4b, 0x14, 0x83, 0x23, 0xcb, - 0x7a, 0x58, 0x44, 0xb6, 0xa1, 0x55, 0x58, 0x38, 0x8b, 0xd3, 0xe6, 0xd5, 0x4c, 0xf9, 0x65, 0xfc, - 0x69, 0x01, 0x2a, 0xda, 0xa2, 0xb0, 0x2a, 0x94, 0xcc, 0x4e, 0xaf, 0x63, 0x7e, 0xd2, 0xd9, 0x6a, - 0xde, 0x60, 0xf7, 0xe1, 0x9d, 0xee, 0xfe, 0xe6, 0x81, 0x69, 0x76, 0x36, 0xfb, 0xd6, 0x81, 0x69, - 0xa9, 0x74, 0x2c, 0x87, 0xed, 0xcf, 0xf6, 0x3a, 0xfb, 0x7d, 0x6b, 0xab, 0xd3, 0x6f, 0x77, 0x77, - 0x7b, 0xcd, 0x0c, 0x7b, 0x03, 0x5a, 0x31, 0xa6, 0x2a, 0x6e, 0xef, 0x1d, 0x1c, 0xed, 0xf7, 0x9b, - 0x59, 0x76, 0x07, 0x6e, 0x6d, 0x77, 0xf7, 0xdb, 0xbb, 0x56, 0x8c, 0xb3, 0xb9, 0xdb, 0xff, 0xc4, - 0xea, 0xfc, 0xda, 0x61, 0xd7, 0xfc, 0xac, 0x99, 0x4b, 0x43, 0x10, 0xca, 0xb8, 0x6a, 0x21, 0xcf, - 0x6e, 0xc2, 0x0a, 0x21, 0x50, 0x15, 0xab, 0x7f, 0x70, 0x60, 0xf5, 0x0e, 0x0e, 0xf6, 0x9b, 0x05, - 0xb6, 0x08, 0xb5, 0xee, 0xfe, 0x27, 0xed, 0xdd, 0xee, 0x96, 0x65, 0x76, 0xda, 0xbb, 0x7b, 0xcd, - 0x05, 0xb6, 0x04, 0x8d, 0x59, 0xbc, 0xa2, 0x68, 0x42, 0xe1, 0x1d, 0xec, 0x77, 0x0f, 0xf6, 0xad, - 0x4f, 0x3a, 0x66, 0xaf, 0x7b, 0xb0, 0xdf, 0x2c, 0xb1, 0x55, 0x60, 0xc9, 0xa2, 0x9d, 0xbd, 0xf6, - 0x66, 0xb3, 0xcc, 0x56, 0x60, 0x31, 0x09, 0x7f, 0xde, 0xf9, 0xac, 0x09, 0xac, 0x05, 0xcb, 0x34, - 0x30, 0x6b, 0xa3, 0xb3, 0x7b, 0xf0, 0xa9, 0xb5, 0xd7, 0xdd, 0xef, 0xee, 0x1d, 0xed, 0x35, 0x2b, - 0x98, 0x20, 0xaa, 0xd3, 0xb1, 0xba, 0xfb, 0xbd, 0xa3, 0xed, 0xed, 0xee, 0x66, 0xb7, 0xb3, 0xdf, - 0x6f, 0x56, 0xa9, 0xe7, 0xb4, 0x89, 0xd7, 0x44, 0x05, 0x19, 0x33, 0x60, 0x6d, 0x75, 0x7b, 0xed, - 0x8d, 0xdd, 0xce, 0x56, 0xb3, 0xce, 0x6e, 0xc3, 0xcd, 0x7e, 0x67, 0xef, 0xf0, 0xc0, 0x6c, 0x9b, - 0x9f, 0xa9, 0x98, 0x02, 0x6b, 0xbb, 0xdd, 0xdd, 0x3d, 0x32, 0x3b, 0xcd, 0x06, 0x7b, 0x0b, 0x6e, - 0x9b, 0x9d, 0x8f, 0x8f, 0xba, 0x66, 0x67, 0xcb, 0xda, 0x3f, 0xd8, 0xea, 0x58, 0xdb, 0x9d, 0x76, - 0xff, 0xc8, 0xec, 0x58, 0x7b, 0xdd, 0x5e, 0xaf, 0xbb, 0xff, 0xac, 0xd9, 0x64, 0xef, 0xc0, 0xdd, - 0x08, 0x25, 0x6a, 0x60, 0x06, 0x6b, 0x51, 0xcc, 0x4f, 0x6d, 0xe9, 0x7e, 0xe7, 0xd7, 0xfa, 0xd6, - 0x61, 0xa7, 0x63, 0x36, 0x19, 0x5b, 0x87, 0xd5, 0xb8, 0x7b, 0xea, 0x40, 0xf6, 0xbd, 0x24, 0xca, - 0x0e, 0x3b, 0xe6, 0x5e, 0x7b, 0x5f, 0x6c, 0x70, 0xa2, 0x6c, 0x59, 0x0c, 0x3b, 0x2e, 0x9b, 0x1d, - 0xf6, 0x0a, 0x63, 0x50, 0xd7, 0x76, 0x65, 0xbb, 0x6d, 0x36, 0x57, 0x59, 0x03, 0x2a, 0x7b, 0x87, - 0x87, 0x56, 0xbf, 0xbb, 0xd7, 0x39, 0x38, 0xea, 0x37, 0xd7, 0xd8, 0x0a, 0x34, 0xbb, 0xfb, 0xfd, - 0x8e, 0x29, 0xf6, 0x5a, 0x55, 0xfd, 0x3f, 0x45, 0xb6, 0x0c, 0x0d, 0x35, 0x52, 0x05, 0xfd, 0x59, - 0x91, 0xad, 0x01, 0x3b, 0xda, 0x37, 0x3b, 0xed, 0x2d, 0xb1, 0x70, 0x51, 0xc1, 0xff, 0x2d, 0x4a, - 0x0f, 0xc9, 0x4f, 0x73, 0xd1, 0x65, 0x1d, 0x3f, 0x39, 0x48, 0x26, 0x51, 0xad, 0x6a, 0xc9, 0x4f, - 0x5f, 0x95, 0xde, 0x5c, 0x53, 0xad, 0x72, 0x73, 0xaa, 0xd5, 0x9c, 0xee, 0x5e, 0xd3, 0x65, 0xbf, - 0xb7, 0xa1, 0x36, 0xa6, 0x84, 0xaa, 0x32, 0x71, 0x22, 0xc8, 0xf7, 0x37, 0x04, 0xa4, 0xac, 0x89, - 0x73, 0xf9, 0xbd, 0x0b, 0xf3, 0xf9, 0xbd, 0xd3, 0xe4, 0xfb, 0x85, 0x34, 0xf9, 0xfe, 0x01, 0x2c, - 0x12, 0x6b, 0x72, 0x5c, 0x67, 0xac, 0xb4, 0x66, 0x92, 0x02, 0x1b, 0xc8, 0xa2, 0x08, 0xae, 0xd4, - 0x09, 0xa5, 0x72, 0x48, 0x16, 0x52, 0x94, 0xda, 0x46, 0x42, 0xd3, 0x20, 0xce, 0x11, 0x69, 0x1a, - 0x51, 0x0f, 0xf6, 0x65, 0xdc, 0x43, 0x45, 0xeb, 0x81, 0xe0, 0xd8, 0xc3, 0x03, 0x58, 0xe4, 0x97, - 0xa1, 0x6f, 0x5b, 0xde, 0xc4, 0xfe, 0x7c, 0x8a, 0x2e, 0x5c, 0x1b, 0x75, 0xf8, 0xaa, 0xd9, 0xc0, - 0x82, 0x03, 0x84, 0x6f, 0xd9, 0xa1, 0xfd, 0xe0, 0x0b, 0xa8, 0x68, 0xc9, 0x76, 0xd9, 0x1a, 0x2c, - 0x7d, 0xda, 0xed, 0xef, 0x77, 0x7a, 0x3d, 0xeb, 0xf0, 0x68, 0xe3, 0x79, 0xe7, 0x33, 0x6b, 0xa7, - 0xdd, 0xdb, 0x69, 0xde, 0x10, 0x87, 0x76, 0xbf, 0xd3, 0xeb, 0x77, 0xb6, 0x12, 0xf0, 0x0c, 0x7b, - 0x13, 0xd6, 0x8f, 0xf6, 0x8f, 0x7a, 0x9d, 0x2d, 0x2b, 0xad, 0x5e, 0x56, 0x50, 0xa9, 0x2c, 0x4f, - 0xa9, 0x9e, 0x7b, 0xf0, 0x7d, 0xa8, 0x27, 0x33, 0x40, 0x32, 0x80, 0x85, 0xdd, 0xce, 0xb3, 0xf6, - 0xe6, 0x67, 0x94, 0x42, 0xae, 0xd7, 0x6f, 0xf7, 0xbb, 0x9b, 0x96, 0x4c, 0x19, 0x27, 0x38, 0x42, - 0x86, 0x55, 0xa0, 0xd8, 0xde, 0xdf, 0xdc, 0x39, 0x30, 0x7b, 0xcd, 0xec, 0x83, 0x8f, 0xa0, 0x39, - 0xeb, 0x8f, 0x4a, 0x38, 0xf0, 0x5e, 0xe6, 0xe9, 0x7b, 0xf0, 0xef, 0x73, 0x00, 0x71, 0xc0, 0x80, - 0x60, 0x35, 0x5b, 0xed, 0x7e, 0x7b, 0xf7, 0x40, 0x4c, 0xc3, 0x3c, 0xe8, 0x0b, 0x0e, 0x62, 0x76, - 0x3e, 0x6e, 0xde, 0x48, 0x2d, 0x39, 0x38, 0xec, 0x37, 0x33, 0x62, 0xc5, 0xba, 0xfb, 0xdd, 0x7e, - 0xb7, 0xbd, 0x6b, 0x99, 0x07, 0x47, 0xdd, 0xfd, 0x67, 0x94, 0x1b, 0x0b, 0xb9, 0xec, 0xd1, 0xe1, - 0xb6, 0x79, 0xb0, 0xdf, 0xb7, 0x7a, 0x3b, 0x47, 0xfd, 0x2d, 0xcc, 0xac, 0xb5, 0x69, 0x76, 0x0f, - 0xa9, 0xcd, 0xfc, 0xcb, 0x10, 0x44, 0xd3, 0x05, 0xb1, 0xe6, 0xcf, 0x0e, 0x7a, 0xbd, 0xee, 0xa1, - 0xf5, 0xf1, 0x51, 0xc7, 0xec, 0x76, 0x7a, 0x58, 0x71, 0x21, 0x05, 0x2e, 0xf0, 0x8b, 0x82, 0x37, - 0xf7, 0x77, 0x3f, 0x91, 0xcc, 0x53, 0xa0, 0x96, 0x92, 0x20, 0x81, 0x55, 0x16, 0x3c, 0x45, 0x70, - 0x9f, 0x94, 0x96, 0xe1, 0x9a, 0x32, 0x51, 0xaf, 0x22, 0xf8, 0xea, 0xdc, 0x66, 0x60, 0xb5, 0x6a, - 0x7a, 0x91, 0xa8, 0x85, 0x2c, 0x37, 0xba, 0xa0, 0xb6, 0xb6, 0x4c, 0xac, 0x50, 0x9f, 0x83, 0x0a, - 0xdc, 0x86, 0xd8, 0x28, 0xc1, 0x9e, 0x04, 0x4a, 0x53, 0x7d, 0x88, 0x92, 0xc5, 0x27, 0xbf, 0x9d, - 0x83, 0x3a, 0x05, 0x6f, 0xd1, 0x6f, 0x1d, 0x71, 0x9f, 0xed, 0x41, 0x51, 0xfe, 0x68, 0x16, 0x5b, - 0x89, 0xd2, 0x16, 0xe9, 0x3f, 0xd3, 0xb5, 0xbe, 0x3a, 0x0b, 0x96, 0xe2, 0xd8, 0xd2, 0xdf, 0xfe, - 0x93, 0xbf, 0xfc, 0xa7, 0xd9, 0x1a, 0xab, 0x3c, 0x3a, 0x7f, 0xff, 0xd1, 0x29, 0x77, 0x03, 0xd1, - 0xc6, 0xdf, 0x00, 0x88, 0x7f, 0x0a, 0x8a, 0xb5, 0x22, 0x27, 0xd4, 0xcc, 0xef, 0x64, 0xad, 0xdf, - 0x4c, 0x29, 0x91, 0xed, 0xde, 0xc4, 0x76, 0x97, 0x8c, 0xba, 0x68, 0xd7, 0x71, 0x9d, 0x90, 0x7e, - 0x16, 0xea, 0xc3, 0xcc, 0x03, 0x36, 0x84, 0xaa, 0xfe, 0x23, 0x4d, 0x4c, 0x49, 0x4a, 0x29, 0x3f, - 0x33, 0xb5, 0x7e, 0x2b, 0xb5, 0x4c, 0xc9, 0xa0, 0xd8, 0xc7, 0x8a, 0xd1, 0x14, 0x7d, 0x4c, 0x11, - 0x23, 0xee, 0x65, 0x44, 0x52, 0x79, 0xfc, 0x5b, 0x4c, 0xec, 0x0d, 0x4d, 0xae, 0x9a, 0xfb, 0x25, - 0xa8, 0xf5, 0xdb, 0xd7, 0x94, 0xca, 0xbe, 0x6e, 0x63, 0x5f, 0x6b, 0x06, 0x13, 0x7d, 0x0d, 0x10, - 0x47, 0xfd, 0x12, 0xd4, 0x87, 0x99, 0x07, 0x4f, 0xfe, 0xe2, 0x3e, 0x94, 0xa3, 0xc7, 0x9c, 0xec, - 0x37, 0xa1, 0x96, 0x88, 0xae, 0x63, 0x6a, 0x1a, 0x69, 0xc1, 0x78, 0xeb, 0x6f, 0xa4, 0x17, 0xca, - 0x8e, 0xdf, 0xc4, 0x8e, 0x5b, 0x6c, 0x55, 0x74, 0x2c, 0xa3, 0xd7, 0x1e, 0x61, 0x0c, 0x2a, 0x25, - 0x81, 0x7a, 0xa1, 0x69, 0x1f, 0xd4, 0xd9, 0x1b, 0xb3, 0x1a, 0x41, 0xa2, 0xb7, 0xdb, 0xd7, 0x94, - 0xca, 0xee, 0xde, 0xc0, 0xee, 0x56, 0xd9, 0xb2, 0xde, 0x9d, 0x7a, 0x7a, 0xc9, 0x38, 0x26, 0x5e, - 0xd3, 0x7f, 0xaa, 0x88, 0xdd, 0x8e, 0xd3, 0x64, 0xa5, 0xfc, 0x84, 0x51, 0x44, 0x22, 0xf3, 0xbf, - 0x63, 0x64, 0xb4, 0xb0, 0x2b, 0xc6, 0x70, 0xfb, 0xf4, 0x5f, 0x2a, 0x62, 0xc7, 0x50, 0xd1, 0xb2, - 0xfb, 0xb3, 0x9b, 0xd7, 0xfe, 0x12, 0xc1, 0xfa, 0x7a, 0x5a, 0x51, 0xda, 0x54, 0xf4, 0xf6, 0x1f, - 0x9d, 0x70, 0xce, 0x7e, 0x1d, 0xca, 0x51, 0xce, 0x78, 0xb6, 0xa6, 0xe5, 0xf0, 0xd7, 0x73, 0xdc, - 0xaf, 0xb7, 0xe6, 0x0b, 0xd2, 0x88, 0x4f, 0x6f, 0x5d, 0x10, 0xdf, 0xa7, 0x50, 0xd1, 0xf2, 0xc2, - 0x47, 0x13, 0x98, 0xcf, 0x3d, 0x1f, 0x4d, 0x20, 0x25, 0x8d, 0xbc, 0xb1, 0x88, 0x5d, 0x54, 0x58, - 0x19, 0xe9, 0x3b, 0xbc, 0xf4, 0x02, 0xb6, 0x0b, 0x2b, 0x52, 0xd3, 0x3a, 0xe6, 0x5f, 0x66, 0x1b, - 0x52, 0x7e, 0x1d, 0xea, 0x71, 0x86, 0x7d, 0x04, 0x25, 0x95, 0xfe, 0x9f, 0xad, 0xa6, 0xff, 0x8c, - 0xc1, 0xfa, 0xda, 0x1c, 0x5c, 0xaa, 0x45, 0x9f, 0x01, 0xc4, 0x49, 0xe8, 0x23, 0x26, 0x31, 0x97, - 0xd4, 0x3e, 0xa2, 0x80, 0xf9, 0x8c, 0xf5, 0xc6, 0x2a, 0x4e, 0xb0, 0xc9, 0x90, 0x49, 0xb8, 0xfc, - 0x42, 0x65, 0xc7, 0xfc, 0x11, 0x54, 0xb4, 0x3c, 0xf4, 0xd1, 0xf2, 0xcd, 0xe7, 0xb0, 0x8f, 0x96, - 0x2f, 0x25, 0x6d, 0xbd, 0xb1, 0x8e, 0xad, 0x2f, 0x1b, 0x0d, 0xd1, 0xba, 0x10, 0xb5, 0xa4, 0xc8, - 0x23, 0x36, 0xe8, 0x0c, 0x6a, 0x89, 0x64, 0xf3, 0xd1, 0x09, 0x4d, 0x4b, 0x65, 0x1f, 0x9d, 0xd0, - 0xd4, 0xfc, 0xf4, 0x8a, 0xce, 0x8c, 0x45, 0xd1, 0xcf, 0x39, 0xa2, 0x68, 0x3d, 0xfd, 0x10, 0x2a, - 0x5a, 0xe2, 0xf8, 0x68, 0x2e, 0xf3, 0x39, 0xea, 0xa3, 0xb9, 0xa4, 0xe5, 0x99, 0x5f, 0xc6, 0x3e, - 0xea, 0x06, 0x92, 0x02, 0xe6, 0xf7, 0x13, 0x6d, 0xff, 0x26, 0xd4, 0x93, 0xb9, 0xe4, 0xa3, 0xb3, - 0x9f, 0x9a, 0x94, 0x3e, 0x3a, 0xfb, 0xd7, 0x24, 0xa0, 0x97, 0x24, 0xfd, 0x60, 0x29, 0xea, 0xe4, - 0xd1, 0x4f, 0x64, 0x58, 0xca, 0x17, 0xec, 0x63, 0xc1, 0xe0, 0x64, 0x7a, 0x49, 0xb6, 0xa6, 0x51, - 0xad, 0x9e, 0xa7, 0x32, 0x3a, 0x2f, 0x73, 0x99, 0x28, 0x93, 0xc4, 0x8c, 0x8d, 0xb3, 0x67, 0xb0, - 0x14, 0x11, 0x73, 0x94, 0x2f, 0x32, 0x88, 0xe6, 0x90, 0x9a, 0x95, 0x72, 0xbd, 0x39, 0x5b, 0xfa, - 0x38, 0x43, 0xd7, 0x1f, 0x66, 0xe9, 0xd3, 0xae, 0x3f, 0x3d, 0x65, 0xa4, 0x76, 0xfd, 0x25, 0x92, - 0xf9, 0xcd, 0x5e, 0x7f, 0xa1, 0x23, 0xda, 0x70, 0xa1, 0x31, 0x9b, 0xbd, 0xf1, 0xf6, 0x75, 0xb9, - 0x0b, 0xa8, 0xf9, 0x37, 0x5f, 0x9e, 0xda, 0x20, 0xc9, 0x8a, 0x14, 0x37, 0x7d, 0x24, 0x1f, 0x9f, - 0xb0, 0xdf, 0x80, 0xaa, 0x9e, 0xc8, 0x9a, 0xe9, 0x3c, 0x61, 0xb6, 0xa7, 0x5b, 0xa9, 0x65, 0x49, - 0x2a, 0x61, 0x55, 0xbd, 0x1b, 0xf6, 0x09, 0xac, 0x46, 0xcb, 0xac, 0xc7, 0xad, 0x07, 0xec, 0x4e, - 0x4a, 0x34, 0x7b, 0x62, 0xb1, 0x6f, 0x5e, 0x1b, 0xee, 0xfe, 0x38, 0x23, 0xa8, 0x2f, 0x99, 0x51, - 0x37, 0xbe, 0x79, 0xd2, 0x12, 0x09, 0xc7, 0x37, 0x4f, 0x6a, 0x1a, 0x5e, 0x45, 0x7d, 0x6c, 0x29, - 0xb1, 0x46, 0xf4, 0x2c, 0x97, 0xfd, 0x10, 0x1a, 0x5a, 0x50, 0x7e, 0xef, 0xca, 0x1d, 0x44, 0x27, - 0x69, 0x3e, 0x25, 0xdc, 0x7a, 0x9a, 0x6d, 0xd2, 0x58, 0xc3, 0xf6, 0x17, 0x8d, 0xc4, 0xe2, 0x88, - 0x53, 0xb4, 0x09, 0x15, 0x3d, 0xe0, 0xff, 0x25, 0xed, 0xae, 0x69, 0x45, 0x7a, 0xf6, 0xb1, 0xc7, - 0x19, 0xb6, 0x0b, 0xcd, 0xd9, 0x64, 0x49, 0x11, 0x4f, 0x49, 0x4b, 0xf0, 0xb4, 0x3e, 0x53, 0x98, - 0x48, 0xb1, 0xc4, 0x0e, 0x29, 0xb0, 0x23, 0xfa, 0x29, 0x25, 0xcf, 0x9f, 0xbd, 0xd5, 0x93, 0x3f, - 0xb1, 0x14, 0xb5, 0x96, 0xf6, 0xe3, 0x5a, 0xf7, 0x33, 0x8f, 0x33, 0xec, 0x77, 0x33, 0x50, 0x4d, - 0x24, 0x28, 0x49, 0x3c, 0x9d, 0x9f, 0x99, 0x67, 0x4b, 0x2f, 0xd3, 0x27, 0x6a, 0x98, 0xb8, 0x88, - 0xbb, 0x0f, 0x7e, 0x90, 0xd8, 0xa4, 0x9f, 0x24, 0x5c, 0x7b, 0x0f, 0x67, 0x7f, 0x6b, 0xe9, 0x8b, - 0x59, 0x04, 0x3d, 0xd3, 0xdf, 0x17, 0x8f, 0x33, 0xec, 0x3f, 0x66, 0xa0, 0x9e, 0xf4, 0xd9, 0x47, - 0xd3, 0x4d, 0x7d, 0x1d, 0x10, 0x91, 0xd2, 0x35, 0x8e, 0xfe, 0x1f, 0xe2, 0x28, 0xfb, 0x0f, 0xcc, - 0xc4, 0x28, 0x65, 0x2e, 0xe8, 0x5f, 0x6c, 0xb4, 0xec, 0x43, 0xfa, 0x69, 0x43, 0xf5, 0x94, 0x89, - 0xcd, 0xff, 0x14, 0x5e, 0x44, 0x7e, 0xfa, 0x0f, 0xc7, 0xe1, 0x26, 0xfc, 0x88, 0x7e, 0x53, 0x48, - 0xbd, 0x8c, 0x11, 0x54, 0xfc, 0xba, 0xf5, 0x8d, 0x77, 0x70, 0x4e, 0x6f, 0x1a, 0x37, 0x13, 0x73, - 0x9a, 0x15, 0x3c, 0xda, 0x34, 0x3a, 0xf9, 0xbb, 0x6f, 0xf1, 0xcd, 0x39, 0xf7, 0x5b, 0x70, 0xd7, - 0x0f, 0x72, 0x4c, 0x83, 0x94, 0xe8, 0x89, 0xa3, 0xf6, 0x9a, 0xcd, 0x18, 0x0f, 0x70, 0xac, 0xef, - 0x18, 0x77, 0xae, 0x1d, 0xeb, 0x23, 0xf4, 0xbf, 0x8b, 0x11, 0x1f, 0x02, 0xc4, 0x4f, 0x0d, 0xd9, - 0xcc, 0x83, 0xb7, 0x88, 0x01, 0xcd, 0xbf, 0x46, 0x4c, 0x9e, 0x67, 0xf5, 0x2e, 0x4e, 0xb4, 0xf8, - 0xeb, 0xc4, 0x4e, 0xa3, 0xa7, 0x78, 0xba, 0xf4, 0x95, 0x7c, 0x15, 0x98, 0x90, 0xbe, 0x66, 0xdb, - 0x4f, 0x30, 0xd3, 0xe8, 0xdd, 0xdd, 0x11, 0xd4, 0x76, 0x3d, 0xef, 0xc5, 0x74, 0x12, 0x3d, 0x6f, - 0x4f, 0x3e, 0x8a, 0xd9, 0xb1, 0x83, 0xb3, 0xf5, 0x99, 0x59, 0x18, 0x77, 0xb1, 0xa9, 0x75, 0xd6, - 0xd2, 0x9a, 0x7a, 0xf4, 0x93, 0xf8, 0x7d, 0xe3, 0x17, 0xcc, 0x86, 0xc5, 0x88, 0x47, 0xc7, 0x6f, - 0x08, 0x93, 0xcd, 0x24, 0x38, 0xf3, 0x6c, 0x17, 0x09, 0x35, 0x41, 0x8d, 0xf6, 0x51, 0xa0, 0xda, - 0x7c, 0x9c, 0x61, 0x87, 0x50, 0xdd, 0xe2, 0x03, 0x0c, 0xd4, 0xc7, 0xa7, 0x25, 0x4b, 0x89, 0x67, - 0x0a, 0xf4, 0x26, 0x65, 0xbd, 0x96, 0x00, 0x26, 0xef, 0xad, 0x89, 0x7d, 0xe5, 0xf3, 0xcf, 0x1f, - 0xfd, 0x44, 0x3e, 0x5a, 0xf9, 0x42, 0xdd, 0x5b, 0xea, 0x51, 0x4f, 0xe2, 0xde, 0x9a, 0x79, 0x05, - 0x94, 0xb8, 0xb7, 0xe6, 0x5e, 0x01, 0x25, 0x96, 0x5a, 0x3d, 0x2a, 0x62, 0x23, 0x58, 0x9c, 0x7b, - 0x38, 0x14, 0x5d, 0x59, 0xd7, 0x3d, 0x37, 0x5a, 0xbf, 0x7b, 0x3d, 0x42, 0xb2, 0xb7, 0x07, 0xc9, - 0xde, 0x7a, 0x50, 0xa3, 0xe4, 0x83, 0xc7, 0x9c, 0x42, 0xf6, 0x66, 0xf2, 0xdd, 0xe8, 0xf1, 0x80, - 0xb3, 0x17, 0x0c, 0x96, 0x25, 0x25, 0x1c, 0x8c, 0x95, 0x63, 0xbf, 0x0e, 0x95, 0x67, 0x3c, 0x54, - 0x31, 0x7a, 0x91, 0x8c, 0x3d, 0x13, 0xb4, 0xb7, 0x9e, 0x12, 0xe2, 0x97, 0xa4, 0x19, 0x6c, 0xed, - 0x11, 0x1f, 0x9e, 0x72, 0x62, 0x4e, 0x96, 0x33, 0xfc, 0x82, 0xfd, 0x1a, 0x36, 0x1e, 0x85, 0x46, - 0xaf, 0x6a, 0x41, 0x58, 0x7a, 0xe3, 0x8d, 0x19, 0x78, 0x5a, 0xcb, 0xae, 0x37, 0xe4, 0x9a, 0xac, - 0xe7, 0x42, 0x45, 0x4b, 0xa1, 0x10, 0x1d, 0xa0, 0xf9, 0x94, 0x19, 0xd1, 0x01, 0x4a, 0xc9, 0xb8, - 0x60, 0xdc, 0xc7, 0x7e, 0x0c, 0x76, 0x37, 0xee, 0x87, 0xb2, 0x2c, 0xc4, 0x3d, 0x3d, 0xfa, 0x89, - 0x3d, 0x0e, 0xbf, 0x60, 0x9f, 0x62, 0x8a, 0x6f, 0x3d, 0x06, 0x31, 0x56, 0x1a, 0x66, 0xc3, 0x15, - 0xa3, 0xc5, 0xd2, 0x8a, 0x92, 0x8a, 0x04, 0x75, 0x85, 0x92, 0xdc, 0x53, 0x80, 0x5e, 0xe8, 0x4d, - 0xb6, 0x6c, 0x3e, 0xf6, 0xdc, 0x98, 0xd7, 0xc6, 0x51, 0x71, 0x31, 0xff, 0xd2, 0x42, 0xe3, 0xd8, - 0xa7, 0x9a, 0x96, 0x95, 0x08, 0xe3, 0x54, 0xc4, 0x75, 0x6d, 0xe0, 0x5c, 0xb4, 0x20, 0x29, 0xc1, - 0x73, 0x8f, 0x33, 0xac, 0x0d, 0x10, 0xbf, 0x1c, 0x8b, 0x74, 0xa6, 0xb9, 0x47, 0x69, 0x11, 0xdb, - 0x4b, 0x79, 0x66, 0x76, 0x08, 0xe5, 0xf8, 0xc9, 0xcd, 0x5a, 0x9c, 0x11, 0x26, 0xf1, 0x40, 0x27, - 0xba, 0xc1, 0xe7, 0x9e, 0xbb, 0x18, 0x4d, 0x5c, 0x2a, 0x60, 0x25, 0xb1, 0x54, 0x27, 0x9c, 0x07, - 0xcc, 0x81, 0x25, 0x1a, 0x60, 0x24, 0x2e, 0x61, 0x34, 0x57, 0x94, 0xc9, 0x7d, 0xfe, 0xe5, 0x49, - 0x74, 0x9a, 0x53, 0xdf, 0x4f, 0x24, 0x4c, 0x3f, 0x82, 0x5a, 0x29, 0x92, 0x4c, 0xb0, 0xe6, 0x31, - 0x2c, 0xce, 0xb9, 0xe8, 0xa3, 0x23, 0x7d, 0xdd, 0x9b, 0x8b, 0xe8, 0x48, 0x5f, 0xeb, 0xdd, 0x37, - 0x56, 0xb0, 0xcb, 0x86, 0x01, 0xa8, 0xea, 0x5d, 0x38, 0xe1, 0xe0, 0x4c, 0x74, 0xf7, 0xef, 0x32, - 0xb0, 0x94, 0xe2, 0x84, 0x67, 0x6f, 0x29, 0xab, 0xc1, 0xb5, 0x0e, 0xfa, 0xf5, 0x54, 0x67, 0xad, - 0xd1, 0xc3, 0x7e, 0xf6, 0xd8, 0xf3, 0xc4, 0xc5, 0x46, 0xbe, 0x52, 0x79, 0x32, 0x5f, 0x2a, 0x54, - 0xa4, 0x4a, 0x14, 0x9f, 0xc3, 0x1a, 0x0d, 0xa4, 0x3d, 0x1a, 0xcd, 0x38, 0x92, 0xdf, 0x9c, 0xfb, - 0xe9, 0xf3, 0x84, 0x73, 0x7c, 0xfd, 0xfa, 0x9f, 0x46, 0xbf, 0x46, 0x9c, 0xa6, 0xa1, 0xb2, 0x29, - 0x34, 0x67, 0x1d, 0xb4, 0xec, 0xfa, 0xb6, 0xd6, 0xef, 0x24, 0xf4, 0xdf, 0x14, 0xa7, 0xee, 0xd7, - 0xb0, 0xb3, 0x3b, 0xc6, 0x7a, 0xda, 0xba, 0x90, 0x4a, 0x2c, 0xf6, 0xe3, 0x6f, 0x45, 0xde, 0xe4, - 0x99, 0x79, 0xaa, 0x0e, 0xae, 0xf3, 0x7d, 0x47, 0x1a, 0x78, 0xba, 0x33, 0xfa, 0x5d, 0xec, 0xfe, - 0xae, 0x71, 0x2b, 0xad, 0x7b, 0x9f, 0xaa, 0x90, 0x2e, 0xbe, 0x36, 0x7b, 0xae, 0xd5, 0x08, 0xee, - 0xa6, 0xed, 0xf7, 0xb5, 0xba, 0xd0, 0xcc, 0x5a, 0xdf, 0x40, 0xd9, 0xae, 0xaa, 0x7b, 0x8f, 0xa3, - 0xe3, 0x93, 0xe2, 0xa6, 0x8e, 0x8e, 0x4f, 0x9a, 0xbb, 0x39, 0x29, 0xd7, 0x28, 0x47, 0xf3, 0x87, - 0x99, 0x07, 0x1b, 0xf7, 0x7e, 0xf8, 0xb5, 0x53, 0x27, 0x3c, 0x9b, 0x1e, 0x3f, 0x1c, 0x78, 0xe3, - 0x47, 0x23, 0x65, 0x6d, 0x94, 0x21, 0xcf, 0x8f, 0x46, 0xee, 0xf0, 0x11, 0x36, 0x7b, 0xbc, 0x30, - 0xf1, 0xbd, 0xd0, 0xfb, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x5f, 0xbc, 0x91, 0xdd, - 0x81, 0x00, 0x00, + 0xc5, 0xea, 0x04, 0xd3, 0xc1, 0x40, 0x85, 0x4c, 0x94, 0x4c, 0xf5, 0x69, 0xfc, 0x49, 0x06, 0x96, + 0xb0, 0x31, 0xa5, 0x0f, 0x48, 0x26, 0xfb, 0x73, 0x0f, 0x52, 0xec, 0x8f, 0x2e, 0xfb, 0xd0, 0xc7, + 0x97, 0x37, 0x7a, 0xe6, 0xe7, 0x8c, 0x9e, 0x5f, 0x87, 0xe6, 0x90, 0x8f, 0x1c, 0x8c, 0x9e, 0x51, + 0xa2, 0x04, 0x69, 0x00, 0x0d, 0x05, 0x57, 0x4a, 0xdc, 0x3f, 0xcd, 0xc0, 0x22, 0x49, 0x2a, 0xa8, + 0x0e, 0xcb, 0x85, 0xfa, 0x48, 0xe9, 0x7f, 0x92, 0x55, 0xc9, 0x39, 0xc5, 0x37, 0x38, 0x42, 0x09, + 0x79, 0xf7, 0x96, 0xd4, 0x0b, 0x25, 0x94, 0x7d, 0x88, 0x3a, 0x8c, 0x6b, 0x21, 0x30, 0x25, 0x1a, + 0x27, 0xb9, 0x29, 0xbb, 0xb7, 0x50, 0xc1, 0x71, 0x11, 0xb4, 0x59, 0x12, 0x0a, 0xa9, 0x00, 0x1b, + 0x3b, 0x50, 0x4b, 0x74, 0x93, 0xb0, 0xcc, 0x56, 0xc9, 0x32, 0x3b, 0xe7, 0xfd, 0xc8, 0xce, 0x7b, + 0x3f, 0xfe, 0x6e, 0x1e, 0x98, 0x20, 0xa9, 0x99, 0x5d, 0x9b, 0x71, 0x1d, 0x66, 0xe7, 0x5c, 0x87, + 0x8f, 0x81, 0x69, 0x08, 0xca, 0xa3, 0x99, 0x8b, 0x3c, 0x9a, 0xcd, 0x18, 0x57, 0x3a, 0x34, 0x1f, + 0xc3, 0xb2, 0x14, 0x68, 0x23, 0x5f, 0x21, 0x9a, 0xdc, 0x68, 0x7f, 0x18, 0x49, 0xb6, 0xca, 0x67, + 0x88, 0xe6, 0x37, 0xe5, 0x36, 0x0c, 0xec, 0x50, 0x5a, 0xaa, 0xd0, 0x6d, 0xd8, 0xb3, 0xe7, 0x4c, + 0xdf, 0x0b, 0x2f, 0xa5, 0x82, 0xe2, 0x1c, 0x15, 0x68, 0x86, 0x93, 0x52, 0xd2, 0x70, 0x62, 0x40, + 0x4d, 0x39, 0x07, 0x29, 0x26, 0x82, 0xa4, 0xb7, 0x8a, 0xf4, 0x10, 0x62, 0x5c, 0xc4, 0x03, 0x68, + 0x2a, 0xeb, 0x46, 0x64, 0x9a, 0x21, 0x7f, 0xbf, 0x34, 0x8e, 0x6d, 0x29, 0x03, 0x4d, 0xc2, 0x10, + 0x5e, 0x99, 0x31, 0x84, 0xbf, 0x0b, 0x8b, 0x81, 0x20, 0x22, 0x6b, 0xea, 0xca, 0xe0, 0x1c, 0x3e, + 0x44, 0xd5, 0xa9, 0x64, 0x36, 0xb1, 0xe0, 0x38, 0x86, 0xcf, 0x9b, 0x1d, 0x6a, 0xf3, 0x66, 0x07, + 0xf6, 0x7e, 0xec, 0x47, 0x0b, 0xce, 0x9d, 0x31, 0x5e, 0xdc, 0x71, 0x20, 0x8b, 0x5c, 0xe0, 0xde, + 0xb9, 0x33, 0x36, 0x95, 0xd3, 0x56, 0x7c, 0x18, 0xff, 0x39, 0x03, 0x4d, 0x41, 0x07, 0x09, 0x3a, + 0xff, 0x15, 0xc0, 0x13, 0xf9, 0x8a, 0x64, 0x5e, 0x11, 0xb8, 0x8a, 0xca, 0xbf, 0x03, 0x48, 0xb6, + 0x96, 0xd0, 0x13, 0x25, 0x91, 0xb7, 0x92, 0x44, 0x1e, 0x33, 0xb2, 0xdd, 0x5b, 0xa4, 0x00, 0x08, + 0x48, 0x9a, 0xff, 0x32, 0x9f, 0xe2, 0xbf, 0xd4, 0x8e, 0xc2, 0x2e, 0xc0, 0x33, 0x7e, 0xbd, 0xe7, + 0x0d, 0x50, 0x43, 0xbb, 0x0b, 0x20, 0x08, 0xf2, 0xd4, 0x1e, 0x3b, 0xd2, 0xba, 0x52, 0x30, 0xcb, + 0xcf, 0xf9, 0xf5, 0x0e, 0x02, 0xc4, 0x6e, 0x88, 0xe2, 0xf8, 0x3c, 0x14, 0xcc, 0xd2, 0x73, 0x7e, + 0x4d, 0x87, 0xc1, 0x82, 0xda, 0x33, 0x7e, 0xbd, 0xcd, 0x49, 0x5c, 0xf3, 0x7c, 0x41, 0x09, 0xbe, + 0x7d, 0x29, 0xe4, 0xb3, 0x84, 0xef, 0xb1, 0xe2, 0xdb, 0x97, 0xcf, 0xf8, 0xb5, 0xf2, 0x83, 0x16, + 0x45, 0xf9, 0xc8, 0x1b, 0xc8, 0x1b, 0x48, 0x45, 0x51, 0xc4, 0x83, 0x32, 0x17, 0x9e, 0xe3, 0xdf, + 0xc6, 0x1f, 0x67, 0xa0, 0x26, 0xc6, 0x8f, 0x0c, 0x4e, 0xac, 0xbb, 0x0a, 0xc6, 0xc9, 0xc4, 0xc1, + 0x38, 0x4f, 0x24, 0x7f, 0x20, 0x6e, 0x99, 0xbd, 0x99, 0x5b, 0xe2, 0x02, 0x13, 0xab, 0x7c, 0x0f, + 0xca, 0x74, 0xb6, 0xc4, 0x61, 0xcd, 0x25, 0x76, 0x29, 0x31, 0x21, 0xb3, 0x84, 0x68, 0xcf, 0xc8, + 0xf7, 0xaf, 0x19, 0xd8, 0x68, 0x89, 0xcb, 0x7e, 0x64, 0x56, 0x4b, 0xd9, 0x86, 0x42, 0x9a, 0x1b, + 0xf9, 0x18, 0x2a, 0x1a, 0x4d, 0xa1, 0x35, 0x2e, 0x1a, 0x3c, 0x11, 0x60, 0x92, 0x68, 0x12, 0xb3, + 0xdf, 0xbd, 0x65, 0xd6, 0x06, 0x3a, 0x60, 0x73, 0x01, 0xf2, 0xa2, 0x92, 0xf1, 0x11, 0x2c, 0x6a, + 0xcd, 0x92, 0x36, 0x9a, 0x36, 0xa6, 0x4c, 0xda, 0x98, 0xfe, 0x59, 0x06, 0x96, 0x65, 0x6d, 0x0c, + 0xdc, 0x72, 0xc4, 0x75, 0xbd, 0x1f, 0x9c, 0xb1, 0x5f, 0x81, 0x9a, 0x68, 0xdd, 0xf2, 0xf9, 0x99, + 0x13, 0x84, 0x5c, 0x79, 0x2e, 0x52, 0x0e, 0x87, 0xe0, 0xda, 0x02, 0xd5, 0x94, 0x98, 0xec, 0x23, + 0xa8, 0x60, 0x55, 0xd2, 0x97, 0xe5, 0xb6, 0xb4, 0xe6, 0x2b, 0xd2, 0x50, 0x77, 0x6f, 0x99, 0x10, + 0x44, 0x5f, 0x9b, 0x65, 0x28, 0x86, 0xbe, 0x73, 0x76, 0xc6, 0x7d, 0x63, 0x35, 0x1a, 0x9a, 0x38, + 0x69, 0xbc, 0x17, 0xf2, 0x89, 0x10, 0x82, 0x8c, 0xff, 0x9a, 0x81, 0x8a, 0x3c, 0x3b, 0x3f, 0xb7, + 0xbb, 0x62, 0x5d, 0x8b, 0x3c, 0x24, 0xd5, 0x38, 0x0e, 0x34, 0x7c, 0x07, 0x1a, 0x63, 0x21, 0x10, + 0x09, 0x81, 0x3d, 0xe1, 0xab, 0xa8, 0x2b, 0xb0, 0x94, 0x47, 0x36, 0x60, 0x09, 0xc5, 0x93, 0xc0, + 0x0a, 0x9d, 0x91, 0xa5, 0x0a, 0x65, 0x94, 0xdf, 0x22, 0x15, 0xf5, 0x9d, 0xd1, 0xbe, 0x2c, 0x10, + 0xb7, 0x74, 0x10, 0xda, 0x67, 0x5c, 0x8a, 0xbe, 0xf4, 0x61, 0xb4, 0x60, 0x75, 0x46, 0x56, 0x57, + 0x7a, 0xc6, 0x4f, 0xeb, 0xb0, 0x36, 0x57, 0x24, 0xf5, 0x8d, 0xc8, 0x46, 0x3f, 0x72, 0xc6, 0x27, + 0x5e, 0x64, 0x0a, 0xcb, 0x68, 0x36, 0xfa, 0x3d, 0x51, 0xa2, 0x4c, 0x61, 0x1c, 0x56, 0x14, 0x41, + 0xa0, 0x2d, 0x2b, 0x12, 0xe7, 0xb3, 0x28, 0x6c, 0xbe, 0x97, 0x64, 0x54, 0xb3, 0xdd, 0x29, 0xb8, + 0x7e, 0xfd, 0x2d, 0x4d, 0xe6, 0x60, 0x01, 0x3b, 0x85, 0x56, 0x44, 0x77, 0x52, 0x3e, 0xd2, 0x74, + 0x13, 0xd1, 0xd3, 0x37, 0x5e, 0xd2, 0x53, 0xc2, 0x48, 0x62, 0xae, 0x2a, 0x72, 0xa5, 0xc6, 0xa2, + 0x7e, 0x2e, 0xe0, 0x75, 0xd5, 0x0f, 0xca, 0x3a, 0xf3, 0xbd, 0xe5, 0x5f, 0x69, 0x5e, 0x68, 0xfc, + 0x49, 0x76, 0x79, 0x47, 0x36, 0x1c, 0x15, 0xe9, 0xfd, 0x9e, 0xc3, 0xea, 0xa5, 0xed, 0x84, 0x6a, + 0x7e, 0x9a, 0x5a, 0x54, 0xc0, 0xfe, 0x9e, 0xbc, 0xa4, 0xbf, 0x4f, 0xa9, 0x72, 0x42, 0xfa, 0x5b, + 0xbe, 0x9c, 0x07, 0x06, 0xeb, 0xff, 0x31, 0x0b, 0xf5, 0x64, 0x2b, 0xe2, 0x50, 0x4b, 0x3e, 0xa4, + 0xe4, 0x09, 0x29, 0x8f, 0x4b, 0x13, 0xed, 0x01, 0xc9, 0x11, 0xf3, 0xc6, 0xe3, 0x6c, 0x8a, 0xf1, + 0x58, 0xb7, 0xd9, 0xe6, 0x5e, 0xe6, 0xdb, 0xca, 0xbf, 0x92, 0x6f, 0xab, 0x90, 0xe6, 0xdb, 0xba, + 0xd9, 0x21, 0xb2, 0xf0, 0x73, 0x39, 0x44, 0x8a, 0x37, 0x3b, 0x44, 0xd6, 0xff, 0x2a, 0x03, 0x6c, + 0x9e, 0x52, 0xd9, 0x53, 0xb2, 0x93, 0xbb, 0x7c, 0x24, 0xb9, 0xd8, 0x37, 0x5f, 0x8d, 0xda, 0xd5, + 0x06, 0xa9, 0xda, 0xec, 0x11, 0x2c, 0xe9, 0x71, 0xc1, 0xba, 0xaa, 0x52, 0x33, 0x99, 0x5e, 0x14, + 0x2b, 0xb4, 0x9a, 0x63, 0x2f, 0xff, 0x52, 0xc7, 0x5e, 0xe1, 0xa5, 0x8e, 0xbd, 0x85, 0xa4, 0x63, + 0x6f, 0xfd, 0x6f, 0x67, 0x60, 0x29, 0x85, 0xa8, 0xbe, 0xba, 0x39, 0x0b, 0x5a, 0x48, 0xb0, 0x98, + 0xac, 0xa4, 0x05, 0x8d, 0xbb, 0xac, 0xff, 0x04, 0x6a, 0x89, 0x43, 0xf4, 0xd5, 0x75, 0x3f, 0xab, + 0x68, 0x11, 0x29, 0xeb, 0x8a, 0xd6, 0xfa, 0xff, 0xcd, 0x01, 0x9b, 0x3f, 0xc7, 0xbf, 0xcc, 0x21, + 0xcc, 0x2f, 0x52, 0x6e, 0x7e, 0x91, 0xfe, 0xff, 0xdd, 0x2b, 0xef, 0xc2, 0xa2, 0xcc, 0x65, 0xd0, + 0x9c, 0x22, 0x44, 0x28, 0xcd, 0xa8, 0x40, 0x8d, 0xe2, 0x3b, 0xb3, 0x3e, 0xd5, 0x52, 0x22, 0x7c, + 0x5b, 0xbb, 0x58, 0x67, 0x5c, 0xab, 0xc7, 0xb0, 0x60, 0xbb, 0x83, 0x73, 0xcf, 0x47, 0x19, 0xbf, + 0xfe, 0xe4, 0x57, 0xbf, 0x34, 0x6b, 0xdd, 0x68, 0x63, 0x7d, 0xbc, 0xcd, 0x4d, 0xd9, 0x98, 0xf1, + 0x1e, 0x54, 0x34, 0x30, 0x3a, 0x0a, 0xba, 0xfb, 0x9b, 0x87, 0xcd, 0x5b, 0xac, 0x06, 0x65, 0xb3, + 0xb3, 0x75, 0xf8, 0x49, 0xc7, 0xec, 0x6c, 0x37, 0x33, 0xac, 0x04, 0xf9, 0xbd, 0xc3, 0x5e, 0xbf, + 0x99, 0x35, 0xd6, 0xa1, 0x25, 0x5b, 0x9c, 0x37, 0x1a, 0xfe, 0x34, 0x1f, 0xe9, 0xeb, 0x58, 0x28, + 0xc5, 0xf3, 0x6f, 0x41, 0x55, 0xbf, 0xf6, 0x24, 0x45, 0xcc, 0xf8, 0xe5, 0x84, 0x60, 0xee, 0x69, + 0x7c, 0x63, 0x0b, 0xc8, 0xdb, 0x32, 0x8c, 0xaa, 0x91, 0x2c, 0xf3, 0x02, 0xf3, 0x3c, 0x8a, 0x69, + 0x09, 0x32, 0xfc, 0x6b, 0x50, 0x4f, 0x5a, 0xd0, 0xa4, 0xd0, 0x99, 0x26, 0xa7, 0x8a, 0xda, 0x09, + 0x93, 0x1a, 0xfb, 0x3e, 0x34, 0x67, 0x2d, 0x70, 0x32, 0xca, 0xf5, 0x86, 0xfa, 0x0d, 0x27, 0x69, + 0x94, 0x63, 0xbb, 0xb0, 0x9c, 0x76, 0xf1, 0x23, 0x7d, 0xdc, 0xac, 0xa0, 0xb0, 0xf9, 0xcb, 0x9d, + 0x7d, 0x57, 0x1a, 0x5a, 0x0b, 0x69, 0xee, 0x2a, 0x6d, 0xb1, 0x37, 0xe8, 0x3f, 0xcd, 0xe4, 0x7a, + 0x01, 0x10, 0xc3, 0x58, 0x13, 0xaa, 0x87, 0x47, 0x9d, 0x03, 0x6b, 0x6b, 0xb7, 0x7d, 0x70, 0xd0, + 0xd9, 0x6b, 0xde, 0x62, 0x0c, 0xea, 0xe8, 0x67, 0xda, 0x8e, 0x60, 0x19, 0x01, 0x93, 0x06, 0x6f, + 0x05, 0xcb, 0xb2, 0x65, 0x68, 0x76, 0x0f, 0x66, 0xa0, 0x39, 0xd6, 0x82, 0xe5, 0xa3, 0x0e, 0xb9, + 0xa6, 0x12, 0xed, 0xe6, 0x85, 0x30, 0x29, 0xa7, 0x2b, 0x84, 0x49, 0xca, 0xc9, 0x91, 0xe7, 0x40, + 0xc9, 0x58, 0xbf, 0x9b, 0x81, 0x95, 0x99, 0x82, 0x38, 0xd2, 0x9a, 0x24, 0xac, 0xa4, 0x6c, 0x55, + 0x45, 0xa0, 0x3a, 0x4d, 0xef, 0xc2, 0x62, 0xa4, 0x74, 0xce, 0x70, 0xc8, 0x66, 0x54, 0xa0, 0x90, + 0x1f, 0xc1, 0x92, 0xa6, 0xbb, 0xce, 0xf0, 0x0a, 0xa6, 0x15, 0xc9, 0x0a, 0xc6, 0x5a, 0x14, 0xd1, + 0x3a, 0x33, 0xea, 0x21, 0x25, 0xfa, 0xe8, 0x05, 0xb1, 0x1d, 0x3a, 0x39, 0x5e, 0xf5, 0xc9, 0x1e, + 0xcf, 0x10, 0x42, 0x72, 0xb4, 0xfa, 0x86, 0xab, 0xee, 0x7f, 0x7f, 0x01, 0xd8, 0xc7, 0x53, 0xee, + 0x5f, 0x63, 0x24, 0x75, 0xf0, 0xb2, 0xd0, 0x22, 0xa5, 0xa0, 0x65, 0x5f, 0x29, 0x5b, 0x22, 0x2d, + 0x5b, 0x21, 0xff, 0xf2, 0x6c, 0x85, 0xc2, 0xcb, 0xb2, 0x15, 0xde, 0x84, 0x9a, 0x73, 0xe6, 0x7a, + 0x82, 0x15, 0x0a, 0x29, 0x29, 0x68, 0x2d, 0xdc, 0xcf, 0x3d, 0xa8, 0x9a, 0x55, 0x09, 0x14, 0x32, + 0x52, 0xc0, 0x3e, 0x8a, 0x91, 0xf8, 0xf0, 0x0c, 0x33, 0x6b, 0x74, 0x26, 0xd8, 0x19, 0x9e, 0x71, + 0xa9, 0x8f, 0xa2, 0x85, 0x46, 0x55, 0x16, 0xf0, 0x80, 0xbd, 0x05, 0xf5, 0xc0, 0x9b, 0x0a, 0xa1, + 0x53, 0x2d, 0x03, 0x59, 0xaa, 0xab, 0x04, 0x3d, 0x52, 0x6e, 0x89, 0xa5, 0x69, 0xc0, 0xad, 0xb1, + 0x13, 0x04, 0x42, 0x54, 0x18, 0x78, 0x6e, 0xe8, 0x7b, 0x23, 0x69, 0x7c, 0x5e, 0x9c, 0x06, 0x7c, + 0x9f, 0x4a, 0xb6, 0xa8, 0x80, 0x7d, 0x3b, 0x1e, 0xd2, 0xc4, 0x76, 0xfc, 0xa0, 0x05, 0x38, 0x24, + 0x35, 0x53, 0x94, 0xed, 0x6c, 0xc7, 0x8f, 0xc6, 0x22, 0x3e, 0x82, 0x99, 0x2c, 0x8a, 0xca, 0x6c, + 0x16, 0xc5, 0x8f, 0xd2, 0xb3, 0x28, 0x6a, 0xd8, 0xf4, 0x63, 0xd9, 0xf4, 0xfc, 0x16, 0x7f, 0xa9, + 0x64, 0x8a, 0xf9, 0xe4, 0x90, 0xfa, 0x97, 0x49, 0x0e, 0x69, 0xa4, 0x25, 0x87, 0xbc, 0x07, 0x15, + 0x0c, 0xdb, 0xb7, 0xce, 0x1d, 0x37, 0x54, 0xc6, 0xf4, 0xa6, 0x1e, 0xd7, 0xbf, 0x2b, 0xd4, 0x7a, + 0xf0, 0xd5, 0x9f, 0xc1, 0x7c, 0x9e, 0xc6, 0xe2, 0x2f, 0x31, 0x4f, 0x43, 0xa6, 0x17, 0x6c, 0x40, + 0x49, 0xed, 0x13, 0x63, 0x90, 0x3f, 0xf5, 0xbd, 0xb1, 0x32, 0x32, 0x8a, 0xbf, 0x59, 0x1d, 0xb2, + 0xa1, 0x27, 0x2b, 0x67, 0x43, 0xcf, 0xf8, 0x4d, 0xa8, 0x68, 0xa4, 0xc6, 0xde, 0x20, 0x73, 0x86, + 0x90, 0xdb, 0xa5, 0xbe, 0x4e, 0xab, 0x58, 0x96, 0xd0, 0xee, 0x50, 0xf0, 0x9b, 0xa1, 0xe3, 0x73, + 0xcc, 0xa8, 0xb2, 0x7c, 0x7e, 0xc1, 0xfd, 0x40, 0x19, 0x7d, 0x9b, 0x51, 0x81, 0x49, 0x70, 0xe3, + 0x6f, 0xc0, 0x52, 0x62, 0x6f, 0x25, 0x8b, 0x78, 0x0b, 0x16, 0x70, 0xdd, 0x94, 0x53, 0x2e, 0x99, + 0x2f, 0x21, 0xcb, 0x30, 0x55, 0x96, 0xec, 0xd5, 0xd6, 0xc4, 0xf7, 0x4e, 0xb0, 0x93, 0x8c, 0x59, + 0x91, 0xb0, 0x23, 0xdf, 0x3b, 0x31, 0xfe, 0x2c, 0x07, 0xb9, 0x5d, 0x6f, 0xa2, 0xc7, 0xa1, 0x64, + 0xe6, 0xe2, 0x50, 0xa4, 0x32, 0x62, 0x45, 0xca, 0x86, 0x94, 0x1f, 0xd1, 0x52, 0xab, 0x14, 0x8e, + 0x07, 0x50, 0x17, 0x7c, 0x22, 0xf4, 0x84, 0x36, 0x77, 0x69, 0xfb, 0x94, 0x3d, 0x91, 0xa3, 0xc3, + 0x67, 0x8f, 0xc3, 0xbe, 0xb7, 0x43, 0x70, 0xb6, 0x0c, 0xb9, 0x48, 0x94, 0xc6, 0x62, 0xf1, 0x29, + 0xd4, 0x7c, 0x8c, 0x23, 0xbc, 0x96, 0x5e, 0x27, 0xf9, 0xc5, 0xbe, 0x09, 0x4b, 0xc9, 0x76, 0x89, + 0x15, 0x49, 0xd9, 0x48, 0x6f, 0x18, 0x79, 0xd2, 0x6d, 0x10, 0x7c, 0x84, 0x70, 0xa4, 0xf3, 0xfa, + 0x94, 0x73, 0x2c, 0xd2, 0x98, 0x5e, 0x29, 0xc1, 0xf4, 0xee, 0x41, 0x25, 0x1c, 0x5d, 0x58, 0x13, + 0xfb, 0x7a, 0xe4, 0xd9, 0x43, 0x79, 0xbe, 0x21, 0x1c, 0x5d, 0x1c, 0x11, 0x84, 0x3d, 0x02, 0x18, + 0x4f, 0x26, 0xf2, 0xec, 0xa1, 0xe1, 0x33, 0x26, 0xe5, 0xfd, 0xa3, 0x23, 0x22, 0x39, 0xb3, 0x3c, + 0x9e, 0x4c, 0xe8, 0x4f, 0xb6, 0x0d, 0xf5, 0xd4, 0xac, 0xa7, 0xbb, 0x2a, 0xec, 0xcd, 0x9b, 0x6c, + 0xa4, 0x1c, 0xce, 0xda, 0x40, 0x87, 0xad, 0x7f, 0x1f, 0xd8, 0x2f, 0x98, 0x7b, 0xd4, 0x87, 0x72, + 0x34, 0x3e, 0x3d, 0x75, 0x07, 0x03, 0x59, 0x2b, 0x89, 0xd4, 0x9d, 0xf6, 0x70, 0xe8, 0x0b, 0xbe, + 0x48, 0x17, 0x66, 0xc4, 0xf2, 0x41, 0xbb, 0x31, 0xdb, 0xc4, 0xf7, 0x8d, 0xbf, 0xc8, 0x40, 0x81, + 0xf2, 0x88, 0xde, 0x86, 0x06, 0xe1, 0x47, 0x31, 0x3d, 0xd2, 0x57, 0x45, 0xf7, 0x6e, 0x5f, 0x86, + 0xf3, 0x88, 0x63, 0xa1, 0xe5, 0x40, 0x66, 0xa3, 0x9d, 0xd7, 0xf2, 0x20, 0xef, 0x41, 0x39, 0xea, + 0x5a, 0x23, 0x9d, 0x92, 0xea, 0x99, 0xbd, 0x0e, 0xf9, 0x73, 0x6f, 0xa2, 0xac, 0x02, 0x10, 0xaf, + 0xa4, 0x89, 0xf0, 0x78, 0x2c, 0xa2, 0x0f, 0x1a, 0xbc, 0xd4, 0x66, 0xa3, 0x4e, 0x90, 0x0c, 0xe6, + 0xe7, 0xb8, 0x90, 0x32, 0xc7, 0x63, 0x68, 0x08, 0x3e, 0xa0, 0xf9, 0x8c, 0x6f, 0xbe, 0x34, 0xbf, + 0x2e, 0x24, 0xbc, 0xc1, 0x68, 0x3a, 0xe4, 0xba, 0x4d, 0x06, 0x03, 0x4c, 0x24, 0x5c, 0x49, 0xd6, + 0xc6, 0xef, 0x67, 0x88, 0xbf, 0x88, 0x76, 0xd9, 0x03, 0xc8, 0x8b, 0xfb, 0x6d, 0xc6, 0x66, 0x18, + 0x45, 0x14, 0x0b, 0x3c, 0x13, 0x31, 0x30, 0x71, 0x78, 0x3a, 0x4e, 0xb6, 0x5e, 0x33, 0x2b, 0xee, + 0x74, 0x1c, 0x99, 0x35, 0xbe, 0xa6, 0xa6, 0x35, 0x63, 0x12, 0xa0, 0xd9, 0x47, 0xc7, 0x74, 0x43, + 0x8b, 0x54, 0xc9, 0x27, 0x6e, 0x4c, 0x25, 0x05, 0x0e, 0xcf, 0xb8, 0x16, 0xa1, 0xf2, 0x87, 0x59, + 0xa8, 0x25, 0x46, 0x84, 0xa1, 0x3a, 0xe2, 0x02, 0x20, 0x7b, 0xb4, 0xdc, 0x6f, 0x10, 0x20, 0x29, + 0xa8, 0x6b, 0xeb, 0x94, 0x4d, 0xac, 0x53, 0xe4, 0x1d, 0xcf, 0xe9, 0xde, 0xf1, 0xc7, 0x50, 0x8e, + 0x73, 0x5f, 0x93, 0x43, 0x12, 0xfd, 0xa9, 0xb8, 0xea, 0x18, 0x29, 0xf6, 0xa7, 0x17, 0x74, 0x7f, + 0xfa, 0xf7, 0x34, 0xf7, 0xeb, 0x02, 0x36, 0x63, 0xa4, 0xad, 0xe8, 0x2f, 0xc5, 0xf9, 0x6a, 0x7c, + 0x04, 0x15, 0x6d, 0xf0, 0xba, 0x9b, 0x35, 0x93, 0x70, 0xb3, 0x46, 0x19, 0x10, 0xd9, 0x38, 0x03, + 0xc2, 0xf8, 0xed, 0x2c, 0xd4, 0xc4, 0xf9, 0x72, 0xdc, 0xb3, 0x23, 0x6f, 0xe4, 0x0c, 0xd0, 0x3e, + 0x1d, 0x9d, 0x30, 0x29, 0x68, 0xa9, 0x73, 0x26, 0x8f, 0x18, 0xc9, 0x59, 0x7a, 0xa2, 0x17, 0x31, + 0xe9, 0x28, 0xd1, 0xcb, 0x80, 0x9a, 0x60, 0x8c, 0x27, 0x76, 0xc0, 0xb5, 0xcc, 0x5c, 0xb3, 0x72, + 0xca, 0xf9, 0xa6, 0x1d, 0x10, 0x87, 0xfc, 0x26, 0x2c, 0x09, 0x1c, 0xcc, 0x71, 0x19, 0x3b, 0xa3, + 0x91, 0x43, 0x98, 0x64, 0xf4, 0x68, 0x9e, 0x72, 0x6e, 0xda, 0x21, 0xdf, 0x17, 0x05, 0x32, 0x91, + 0xb7, 0x34, 0x74, 0x02, 0xfb, 0x24, 0x0e, 0xa8, 0x8a, 0xbe, 0xd1, 0xab, 0x64, 0x5f, 0x69, 0x5e, + 0x25, 0x4a, 0x76, 0xab, 0x8c, 0xed, 0xab, 0xc8, 0xab, 0x34, 0x43, 0x49, 0xc5, 0x59, 0x4a, 0x32, + 0xfe, 0x4b, 0x16, 0x2a, 0x1a, 0x59, 0xbe, 0xca, 0xed, 0x7a, 0x77, 0xce, 0x9f, 0x50, 0xd6, 0x5d, + 0x07, 0x6f, 0x26, 0xbb, 0x44, 0xe7, 0x33, 0xa5, 0x0c, 0x6b, 0x04, 0x7c, 0x07, 0xca, 0xe2, 0xd4, + 0xbd, 0x87, 0xe6, 0x39, 0x99, 0xf0, 0x8e, 0x80, 0xa3, 0xe9, 0x89, 0x2a, 0x7c, 0x82, 0x85, 0x85, + 0xb8, 0xf0, 0x89, 0x28, 0x7c, 0x51, 0x14, 0xe5, 0x77, 0xa0, 0x2a, 0x5b, 0xc5, 0x3d, 0xc5, 0xe9, + 0xc6, 0xa7, 0x3e, 0xb1, 0xdf, 0x66, 0x85, 0xba, 0xa3, 0xcd, 0x97, 0x15, 0x9f, 0xa8, 0x8a, 0xa5, + 0x97, 0x55, 0x7c, 0x42, 0x1f, 0xc6, 0x4e, 0x14, 0x98, 0x8a, 0x81, 0x0f, 0x8a, 0x8f, 0x3d, 0x82, + 0x25, 0xc5, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde, 0xd4, 0x1d, 0x70, 0x95, 0x1a, 0xc1, 0x64, 0xd1, + 0x71, 0x5c, 0x62, 0x0c, 0xa3, 0xdc, 0x39, 0x0a, 0xa0, 0x78, 0x08, 0x05, 0x92, 0xcb, 0x49, 0xf8, + 0x48, 0x67, 0x5c, 0x84, 0xc2, 0x1e, 0x40, 0x81, 0xc4, 0xf3, 0xec, 0x8d, 0xcc, 0x86, 0x10, 0x8c, + 0x0d, 0x68, 0xa0, 0x88, 0xa9, 0x71, 0xdc, 0x17, 0x49, 0x25, 0xc6, 0x32, 0xb0, 0x03, 0x3a, 0x44, + 0x7a, 0x60, 0xcf, 0x7f, 0xcf, 0x41, 0x45, 0x03, 0x0b, 0xb6, 0x88, 0xa1, 0x20, 0xd6, 0xd0, 0xb1, + 0xc7, 0x5c, 0x79, 0x41, 0x6a, 0x66, 0x0d, 0xa1, 0xdb, 0x12, 0x28, 0x2e, 0x05, 0xfb, 0xe2, 0xcc, + 0xf2, 0xa6, 0xa1, 0x35, 0xe4, 0x67, 0x3e, 0xe7, 0x52, 0x58, 0xaa, 0xda, 0x17, 0x67, 0x87, 0xd3, + 0x70, 0x1b, 0x61, 0x02, 0x4b, 0x10, 0xb5, 0x86, 0x25, 0xa3, 0x17, 0xc6, 0xf6, 0x55, 0x8c, 0x25, + 0x43, 0x68, 0x68, 0x89, 0xf2, 0x51, 0x08, 0x0d, 0xa9, 0x2d, 0xb3, 0x9c, 0xbc, 0x30, 0xcf, 0xc9, + 0xbf, 0x0d, 0xab, 0xc4, 0xc9, 0x25, 0x8f, 0xb0, 0x66, 0x48, 0x6a, 0x19, 0x4b, 0xe5, 0x24, 0x35, + 0xf9, 0xab, 0x29, 0x66, 0xa0, 0xce, 0x47, 0xe0, 0xfc, 0x98, 0x4e, 0x54, 0xc6, 0x14, 0x33, 0x93, + 0x8d, 0xf7, 0x9c, 0x1f, 0x73, 0x81, 0x89, 0x2e, 0x5a, 0x1d, 0x53, 0x06, 0xeb, 0x8e, 0x1d, 0x77, + 0x16, 0xd3, 0xbe, 0x4a, 0x62, 0x96, 0x25, 0xa6, 0x7d, 0xa5, 0x63, 0xbe, 0x0f, 0x6b, 0x63, 0x3e, + 0x74, 0xec, 0x64, 0xb3, 0x56, 0x2c, 0x41, 0x2c, 0x53, 0xb1, 0x56, 0xa7, 0x47, 0x1a, 0xa4, 0x58, + 0x8d, 0x1f, 0x7b, 0xe3, 0x13, 0x87, 0x2e, 0x4f, 0x72, 0x1a, 0xe7, 0xcd, 0xba, 0x3b, 0x1d, 0xff, + 0x10, 0xc1, 0xa2, 0x4a, 0x60, 0xd4, 0xa0, 0xd2, 0x0b, 0xbd, 0x89, 0xda, 0xe6, 0x3a, 0x54, 0xe9, + 0x53, 0x26, 0xbe, 0xdc, 0x81, 0xdb, 0x48, 0x9b, 0x7d, 0x6f, 0xe2, 0x8d, 0xbc, 0xb3, 0xeb, 0x84, + 0x41, 0xe9, 0xbf, 0x65, 0x60, 0x29, 0x51, 0x2a, 0xcf, 0xf9, 0xb7, 0xe9, 0x60, 0x45, 0xd9, 0x0b, + 0x44, 0xce, 0x8b, 0xda, 0xe5, 0x43, 0x88, 0x74, 0xaa, 0x54, 0x46, 0x43, 0x3b, 0xce, 0xba, 0x55, + 0x15, 0x89, 0xb6, 0x5b, 0xf3, 0xb4, 0x2d, 0xeb, 0xab, 0x7c, 0x5c, 0xd5, 0xc4, 0xaf, 0xca, 0x80, + 0xea, 0xa1, 0x9c, 0x72, 0x2e, 0x19, 0x32, 0xaa, 0x1b, 0x9f, 0xd4, 0x08, 0x62, 0x8b, 0x54, 0x60, + 0xfc, 0xeb, 0x0c, 0x40, 0x3c, 0x3a, 0x0c, 0x5a, 0x8d, 0x2e, 0x50, 0x7a, 0xd0, 0x46, 0xbb, 0x2c, + 0xdf, 0x80, 0x6a, 0x14, 0xbb, 0x16, 0x5f, 0xc9, 0x15, 0x05, 0x13, 0xf7, 0xf2, 0x3b, 0xd0, 0x38, + 0x1b, 0x79, 0x27, 0x28, 0x3a, 0xc9, 0x0b, 0x94, 0xd2, 0x7f, 0xea, 0x04, 0x56, 0xd7, 0x62, 0x7c, + 0x81, 0xe7, 0x53, 0xc3, 0xdb, 0xf4, 0xeb, 0xd8, 0xf8, 0x9d, 0x6c, 0x14, 0xc4, 0x13, 0xaf, 0xc4, + 0x8b, 0xf5, 0x8c, 0x9f, 0xc7, 0x17, 0xfc, 0x22, 0x1f, 0xc8, 0x47, 0x50, 0xf7, 0x89, 0x3b, 0x2a, + 0xd6, 0x99, 0x7f, 0x01, 0xeb, 0xac, 0xf9, 0x89, 0x2b, 0xf7, 0xeb, 0xd0, 0xb4, 0x87, 0x17, 0xdc, + 0x0f, 0x1d, 0x34, 0x1b, 0xa3, 0xa0, 0x26, 0xc3, 0x66, 0x34, 0x38, 0x4a, 0x44, 0xef, 0x40, 0x43, + 0x26, 0x63, 0x45, 0x98, 0xf2, 0x79, 0x87, 0x18, 0x2c, 0x10, 0x8d, 0x7f, 0xa7, 0xa2, 0x86, 0x92, + 0xbb, 0xfb, 0xe2, 0x55, 0xd1, 0x67, 0x98, 0x9d, 0xf7, 0xf2, 0x48, 0x42, 0x92, 0xd6, 0x68, 0xc9, + 0x8f, 0x08, 0x28, 0x6d, 0xd1, 0xc9, 0x65, 0xcd, 0xbf, 0xca, 0xb2, 0x1a, 0x7f, 0x9c, 0x81, 0xe2, + 0xae, 0x37, 0x11, 0x7a, 0xb9, 0x90, 0xe7, 0xf0, 0x98, 0x44, 0x89, 0x90, 0x0b, 0xe2, 0xb3, 0x3b, + 0x7c, 0x71, 0xf2, 0x42, 0xaa, 0xbc, 0x51, 0x4b, 0xca, 0x1b, 0xdf, 0x83, 0x3b, 0xe8, 0x17, 0xf1, + 0xbd, 0x89, 0xe7, 0x8b, 0xa3, 0x6a, 0x8f, 0x48, 0xee, 0xf0, 0xdc, 0xf0, 0x5c, 0xf1, 0xce, 0xdb, + 0xa7, 0x9c, 0x1f, 0x69, 0x18, 0xfb, 0x11, 0x02, 0x66, 0xf5, 0x8c, 0xc2, 0x0b, 0x8b, 0x54, 0x45, + 0x29, 0x18, 0x11, 0x47, 0x6d, 0x88, 0x82, 0x0e, 0xc2, 0x51, 0x34, 0x32, 0xbe, 0x0b, 0xe5, 0xc8, + 0xea, 0xc0, 0xde, 0x85, 0xf2, 0xb9, 0x37, 0x91, 0xa6, 0x89, 0x4c, 0x22, 0xc1, 0x43, 0xce, 0xda, + 0x2c, 0x9d, 0xd3, 0x1f, 0x81, 0xf1, 0x67, 0x45, 0x28, 0x76, 0xdd, 0x0b, 0xcf, 0x19, 0x60, 0xdc, + 0xd1, 0x98, 0x8f, 0x3d, 0x95, 0x11, 0x2a, 0xfe, 0xc6, 0xd8, 0x82, 0xf8, 0x91, 0x86, 0x9c, 0x8c, + 0x2d, 0x88, 0x9e, 0x67, 0x58, 0x81, 0x05, 0x5f, 0x7f, 0x65, 0xa1, 0xe0, 0x63, 0x24, 0x64, 0xa4, + 0xb4, 0x15, 0xb4, 0x8c, 0x5a, 0xd1, 0x16, 0x65, 0xff, 0xe3, 0x92, 0x51, 0x86, 0x4e, 0x19, 0x21, + 0xb8, 0x60, 0xaf, 0x41, 0x51, 0xe6, 0x53, 0x50, 0x74, 0x3a, 0x85, 0x2e, 0x4a, 0x10, 0x52, 0x83, + 0xcf, 0xc9, 0xaf, 0x15, 0x49, 0x54, 0x42, 0x4f, 0x97, 0xc0, 0x6d, 0x41, 0x6b, 0xf7, 0xa0, 0x42, + 0xf8, 0x84, 0x52, 0x92, 0x91, 0x42, 0x08, 0x42, 0x84, 0x94, 0xc7, 0x4a, 0xca, 0xa9, 0x8f, 0x95, + 0x60, 0x60, 0x59, 0xc4, 0x65, 0x69, 0x8a, 0x40, 0x4f, 0x54, 0x68, 0x70, 0xf5, 0x52, 0x8f, 0x54, + 0xee, 0x29, 0x61, 0x4d, 0x29, 0xf7, 0x6f, 0x42, 0xed, 0xd4, 0x1e, 0x8d, 0x4e, 0xec, 0xc1, 0x73, + 0xd2, 0x49, 0xab, 0x64, 0x86, 0x53, 0x40, 0x54, 0x4a, 0xef, 0x41, 0x45, 0xdb, 0x65, 0x0c, 0x03, + 0xca, 0x9b, 0x10, 0xef, 0xef, 0xac, 0xa9, 0xa9, 0xfe, 0x0a, 0xa6, 0x26, 0x2d, 0x1c, 0xaa, 0x91, + 0x0c, 0x87, 0xba, 0x83, 0xdc, 0x54, 0x86, 0xcc, 0x34, 0xe9, 0x3d, 0x04, 0x7b, 0x38, 0xc4, 0x90, + 0x19, 0x7a, 0x7c, 0x0c, 0x17, 0x8f, 0xca, 0x17, 0x49, 0xa8, 0x25, 0x18, 0xa1, 0xdc, 0x25, 0x7b, + 0xe9, 0xc4, 0x76, 0x86, 0x18, 0x7e, 0x4a, 0x6a, 0x6c, 0xd1, 0x1e, 0x87, 0x47, 0xb6, 0x33, 0x64, + 0xf7, 0xa1, 0xaa, 0x8a, 0xf1, 0x76, 0x5c, 0xa2, 0xf5, 0x97, 0xc5, 0xe2, 0x4e, 0x34, 0xa0, 0x16, + 0x61, 0x8c, 0xe3, 0xac, 0xb3, 0x8a, 0x44, 0x41, 0x3a, 0x78, 0x0f, 0xc3, 0x10, 0x42, 0x8e, 0xb9, + 0x65, 0xf5, 0x27, 0x77, 0xe4, 0x5c, 0x25, 0x95, 0xaa, 0xff, 0xc9, 0x4b, 0x43, 0x98, 0x42, 0x10, + 0x23, 0x67, 0xd1, 0x6a, 0x42, 0x10, 0x93, 0xa8, 0xe8, 0x2c, 0x22, 0x04, 0xf6, 0x5d, 0x4d, 0x91, + 0x6a, 0x21, 0xf2, 0x6b, 0x33, 0xed, 0xdf, 0x14, 0x7d, 0x7f, 0x17, 0xc0, 0x09, 0xc4, 0x2d, 0x13, + 0x70, 0x77, 0x88, 0x69, 0x62, 0x25, 0xb3, 0xec, 0x04, 0xcf, 0x08, 0xf0, 0xd5, 0x6a, 0x58, 0x6d, + 0xa8, 0xea, 0xd3, 0x64, 0x25, 0xc8, 0x1f, 0x1e, 0x75, 0x0e, 0x9a, 0xb7, 0x58, 0x05, 0x8a, 0xbd, + 0x4e, 0xbf, 0xbf, 0x87, 0x2e, 0xa7, 0x2a, 0x94, 0xa2, 0x64, 0x97, 0xac, 0xf8, 0x6a, 0x6f, 0x6d, + 0x75, 0x8e, 0xfa, 0x9d, 0xed, 0x66, 0xee, 0x07, 0xf9, 0x52, 0xb6, 0x99, 0x33, 0xfe, 0x3c, 0x07, + 0x15, 0x6d, 0x15, 0x5e, 0xcc, 0x8c, 0xef, 0x02, 0xa0, 0x4a, 0x13, 0x47, 0x54, 0xe5, 0xcd, 0xb2, + 0x80, 0xd0, 0xe6, 0xeb, 0xc6, 0xf2, 0x1c, 0x3d, 0xb4, 0xa1, 0x8c, 0xe5, 0x6f, 0x42, 0x8d, 0xde, + 0xac, 0xd0, 0x1d, 0x87, 0x05, 0xb3, 0x4a, 0x40, 0xc9, 0xaa, 0x31, 0x5b, 0x0e, 0x91, 0x30, 0x8f, + 0x42, 0x66, 0xb0, 0x13, 0x08, 0x33, 0x29, 0x30, 0x0d, 0x26, 0xf0, 0x46, 0x17, 0x9c, 0x30, 0x48, + 0x22, 0xac, 0x48, 0x58, 0x5f, 0xa6, 0xeb, 0x49, 0x7e, 0xa8, 0xa5, 0x6b, 0x15, 0xcc, 0x2a, 0x01, + 0x65, 0x47, 0xdf, 0x54, 0x04, 0x54, 0x42, 0x02, 0x5a, 0x9b, 0xa7, 0x86, 0x04, 0xf1, 0xec, 0xcd, + 0xd9, 0xb3, 0xca, 0x48, 0x18, 0x5f, 0x9b, 0xaf, 0xf7, 0x72, 0xbb, 0x16, 0x7b, 0x17, 0xd8, 0x78, + 0x32, 0xb1, 0x52, 0x2c, 0x4d, 0x79, 0xb3, 0x31, 0x9e, 0x4c, 0xfa, 0x9a, 0x21, 0xe6, 0x2b, 0x30, + 0x82, 0x7d, 0x0e, 0xac, 0x2d, 0x0e, 0x30, 0x0e, 0x31, 0x32, 0xa1, 0xc6, 0x6c, 0x39, 0xa3, 0xb3, + 0xe5, 0x14, 0xee, 0x97, 0x4d, 0xe5, 0x7e, 0x2f, 0xe2, 0x13, 0xc6, 0x0e, 0x54, 0x8e, 0xb4, 0x17, + 0x71, 0xee, 0x8b, 0x1b, 0x42, 0xbd, 0x85, 0x43, 0x77, 0x07, 0x19, 0xb7, 0x7c, 0xf9, 0x04, 0x8e, + 0x36, 0x9a, 0xac, 0x36, 0x1a, 0xe3, 0x5f, 0x65, 0xe8, 0xb5, 0x81, 0x68, 0xf0, 0xf1, 0x23, 0x3c, + 0xca, 0x0f, 0x14, 0x67, 0x55, 0x56, 0x94, 0xff, 0x47, 0x26, 0x44, 0xe2, 0xd0, 0x2c, 0xef, 0xf4, + 0x34, 0xe0, 0x2a, 0x3f, 0xa8, 0x82, 0xb0, 0x43, 0x04, 0x29, 0xe1, 0x5b, 0x48, 0xf8, 0x0e, 0xb5, + 0x1f, 0xc8, 0x3c, 0x21, 0x21, 0x7c, 0xef, 0xdb, 0x57, 0xb2, 0xd7, 0x40, 0x88, 0x20, 0xd2, 0x50, + 0xad, 0xb2, 0xa2, 0xa2, 0x6f, 0xe3, 0x9f, 0xcb, 0xc4, 0xcf, 0xd9, 0xf5, 0x7d, 0x08, 0xa5, 0xa8, + 0xd5, 0xe4, 0x0d, 0xab, 0x30, 0xa3, 0x72, 0x71, 0x8f, 0xa3, 0x56, 0x9e, 0x18, 0x31, 0x1d, 0x2e, + 0x74, 0x36, 0x74, 0xb5, 0x51, 0x7f, 0x03, 0xd8, 0xa9, 0xe3, 0xcf, 0x22, 0xd3, 0x61, 0x6b, 0x62, + 0x89, 0x86, 0x6d, 0x1c, 0xc3, 0x92, 0xe2, 0x12, 0x9a, 0x46, 0x90, 0xdc, 0xbc, 0xcc, 0x4b, 0x98, + 0x7c, 0x76, 0x8e, 0xc9, 0x1b, 0x3f, 0xcb, 0x43, 0x51, 0xbd, 0x2e, 0x95, 0xf6, 0x22, 0x52, 0x39, + 0xf9, 0x22, 0x52, 0x2b, 0xf1, 0x7a, 0x06, 0x6e, 0xbd, 0xbc, 0xef, 0xdf, 0x99, 0xbd, 0xb2, 0x35, + 0xa3, 0x79, 0xe2, 0xda, 0x5e, 0x85, 0xfc, 0xc4, 0x0e, 0xcf, 0xd1, 0x40, 0x46, 0xc4, 0x83, 0xdf, + 0xca, 0x98, 0x5e, 0x48, 0x1a, 0xd3, 0xd3, 0x5e, 0x8f, 0x22, 0x91, 0x74, 0xee, 0xf5, 0xa8, 0x3b, + 0x40, 0xf2, 0x85, 0x16, 0x99, 0x53, 0x42, 0x80, 0xb8, 0x8b, 0x92, 0xe2, 0x48, 0x69, 0x56, 0x1c, + 0x79, 0x65, 0x51, 0xe1, 0xdb, 0xb0, 0x40, 0x99, 0xd7, 0x32, 0xfb, 0x4b, 0x5d, 0x28, 0x72, 0x0d, + 0xd5, 0xff, 0x14, 0x8e, 0x6b, 0x4a, 0x5c, 0xfd, 0x29, 0x96, 0x4a, 0xe2, 0x29, 0x16, 0xdd, 0xc8, + 0x5f, 0x4d, 0x1a, 0xf9, 0x1f, 0x40, 0x33, 0x5a, 0x50, 0x34, 0x99, 0xb9, 0x81, 0xcc, 0x2d, 0xa9, + 0x2b, 0xb8, 0xe0, 0x92, 0x07, 0x41, 0x7c, 0x21, 0xd6, 0x13, 0x17, 0xa2, 0xe0, 0x61, 0xed, 0x30, + 0xe4, 0xe3, 0x49, 0x28, 0x2f, 0x44, 0x8c, 0x3e, 0xd7, 0x07, 0x98, 0xcc, 0x8b, 0xac, 0x41, 0xb9, + 0x7b, 0x60, 0xed, 0xec, 0x75, 0x9f, 0xee, 0xf6, 0x9b, 0x19, 0xf1, 0xd9, 0x3b, 0xde, 0xda, 0xea, + 0x74, 0xb6, 0xf1, 0xc6, 0x01, 0x58, 0xd8, 0x69, 0x77, 0xc5, 0xed, 0x93, 0x33, 0x7e, 0x37, 0x0b, + 0x15, 0xad, 0x79, 0xf6, 0x7e, 0xb4, 0x2a, 0xf4, 0x5a, 0xc7, 0xdd, 0xf9, 0x21, 0x6c, 0x28, 0x56, + 0xac, 0x2d, 0x4b, 0xf4, 0x56, 0x56, 0xf6, 0xc6, 0xb7, 0xb2, 0xd8, 0xdb, 0xd0, 0xb0, 0xa9, 0x85, + 0x68, 0x15, 0xa4, 0x39, 0x58, 0x82, 0xe5, 0x22, 0x60, 0x3c, 0x5a, 0x7c, 0x9f, 0x08, 0xbc, 0xbc, + 0x0a, 0x01, 0x8b, 0xae, 0x14, 0x5c, 0xac, 0xe2, 0xa9, 0xed, 0x8c, 0xa6, 0x3e, 0x97, 0xee, 0xdb, + 0xe8, 0x66, 0x26, 0xa8, 0xa9, 0x8a, 0x8d, 0x0f, 0x00, 0xe2, 0x31, 0x27, 0x17, 0xe7, 0x56, 0x72, + 0x71, 0x32, 0xda, 0xe2, 0x64, 0x8d, 0x6d, 0x62, 0x23, 0x72, 0xa1, 0x23, 0x4f, 0xf5, 0x37, 0x41, + 0x59, 0xa4, 0x2c, 0x8c, 0x08, 0x9d, 0x8c, 0x78, 0xa8, 0x32, 0x48, 0x17, 0x65, 0x49, 0x37, 0x2a, + 0x50, 0x09, 0xdd, 0x71, 0x2b, 0x31, 0x37, 0x92, 0x24, 0x39, 0xcb, 0x8d, 0x24, 0xaa, 0x19, 0x95, + 0x1b, 0xeb, 0xd0, 0xda, 0xe6, 0xa2, 0xb5, 0xf6, 0x68, 0x34, 0x33, 0x1c, 0xe3, 0x0e, 0xdc, 0x4e, + 0x29, 0x93, 0x46, 0x88, 0x8f, 0x61, 0xa5, 0x4d, 0xc9, 0xa2, 0x5f, 0x55, 0x56, 0x88, 0xd1, 0x82, + 0xd5, 0xd9, 0x26, 0x65, 0x67, 0x3b, 0xb0, 0xb8, 0xcd, 0x4f, 0xa6, 0x67, 0x7b, 0xfc, 0x22, 0xee, + 0x88, 0x41, 0x3e, 0x38, 0xf7, 0x2e, 0xe5, 0xfa, 0xe0, 0xdf, 0xe2, 0x0c, 0x8f, 0x04, 0x8e, 0x15, + 0x4c, 0xf8, 0x40, 0x59, 0x44, 0x11, 0xd2, 0x9b, 0xf0, 0x81, 0xf1, 0x3e, 0x30, 0xbd, 0x1d, 0xb9, + 0x5e, 0x42, 0x4b, 0x98, 0x9e, 0x58, 0xc1, 0x75, 0x10, 0xf2, 0xb1, 0x7a, 0x0c, 0x06, 0x82, 0xe9, + 0x49, 0x8f, 0x20, 0xc6, 0x3b, 0x50, 0x3d, 0xb2, 0xaf, 0x4d, 0xfe, 0xb9, 0xcc, 0x77, 0x58, 0x83, + 0xe2, 0xc4, 0xbe, 0x16, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x07, 0x79, 0x58, 0x20, 0x4c, + 0x76, 0x9f, 0xde, 0x6b, 0x74, 0x5c, 0x3c, 0x86, 0x8a, 0x51, 0x6a, 0xa0, 0x39, 0x5e, 0x9a, 0x9d, + 0xe7, 0xa5, 0xd2, 0x80, 0xa6, 0xde, 0xa9, 0x50, 0x66, 0x6c, 0x77, 0x3a, 0x56, 0x8f, 0x53, 0x24, + 0x33, 0x26, 0xf3, 0xf1, 0x7b, 0x9c, 0x94, 0x4e, 0x96, 0x74, 0x34, 0xc6, 0xba, 0x08, 0x8d, 0x4e, + 0x5d, 0x11, 0x92, 0x5d, 0xea, 0xa0, 0x54, 0x85, 0xa7, 0xa8, 0x32, 0x69, 0x92, 0x0a, 0xcf, 0x9c, + 0x62, 0x53, 0x7a, 0xb9, 0x62, 0x43, 0x96, 0xb5, 0x17, 0x28, 0x36, 0xf0, 0x0a, 0x8a, 0xcd, 0x2b, + 0x38, 0xf9, 0x6e, 0x43, 0x09, 0xef, 0x7d, 0x8d, 0x7b, 0x8a, 0xfb, 0x5e, 0x70, 0xcf, 0xef, 0x68, + 0xa2, 0x3f, 0x45, 0x18, 0xdc, 0x89, 0x8f, 0x89, 0xc9, 0x3f, 0xff, 0xe5, 0x38, 0x4f, 0x3e, 0x83, + 0xa2, 0x84, 0x0a, 0x82, 0x76, 0xed, 0xb1, 0x7a, 0xea, 0x07, 0xff, 0x16, 0xcb, 0x86, 0xef, 0x93, + 0x7c, 0x3e, 0x75, 0x7c, 0x3e, 0x54, 0x8f, 0x41, 0x38, 0x78, 0x46, 0x05, 0x44, 0x4c, 0x50, 0xa8, + 0x21, 0xae, 0x77, 0xe9, 0xca, 0x54, 0xf0, 0xa2, 0x13, 0x3c, 0x13, 0x9f, 0x06, 0x83, 0x26, 0x3e, + 0xf6, 0x35, 0xf1, 0x7c, 0x75, 0x39, 0x19, 0x3f, 0xcb, 0x40, 0x53, 0x9e, 0xae, 0xa8, 0x4c, 0xd7, + 0x02, 0x0a, 0x37, 0x39, 0xc4, 0x5f, 0xfc, 0xb4, 0x83, 0x01, 0x35, 0x34, 0x7e, 0x44, 0x37, 0x15, + 0x19, 0x6f, 0x2a, 0x02, 0xb8, 0x23, 0x6f, 0xab, 0xd7, 0xa1, 0xa2, 0x02, 0x43, 0xc7, 0xce, 0x48, + 0x3d, 0xbd, 0x4b, 0x91, 0xa1, 0xfb, 0xce, 0x48, 0x5d, 0x74, 0xbe, 0x2d, 0x33, 0xbb, 0x32, 0x78, + 0xd1, 0x99, 0x76, 0xc8, 0x8d, 0xff, 0x94, 0x81, 0x45, 0x6d, 0x2a, 0xf2, 0xdc, 0x7e, 0x08, 0xd5, + 0xe8, 0x95, 0x3d, 0x1e, 0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22, 0x48, 0x20, + 0x06, 0x33, 0xb4, 0xaf, 0x71, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xbd, 0xc3, 0x79, + 0x6f, 0x3a, 0x16, 0xaa, 0xeb, 0x25, 0xe7, 0xcf, 0x23, 0x04, 0x92, 0xb9, 0x40, 0xc0, 0x24, 0x86, + 0x01, 0xb5, 0xb1, 0xe7, 0x86, 0xe7, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6, 0x9f, 0x66, + 0x61, 0x89, 0x4c, 0x6c, 0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48, 0xcc, 0x6b, + 0xf7, 0x96, 0x29, 0xbf, 0xd9, 0xb7, 0x5f, 0xd1, 0x2c, 0xa8, 0x92, 0xc7, 0x6e, 0x58, 0xfe, 0xdc, + 0xfc, 0xf2, 0xdf, 0xbc, 0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x55, 0xfc, 0x5c, 0x73, + 0x19, 0x56, 0x45, 0x89, 0xa3, 0x65, 0x58, 0xbd, 0x0f, 0x6b, 0x09, 0x1c, 0xe4, 0xd6, 0xce, 0xa9, + 0xc3, 0x55, 0xa6, 0xfd, 0xb2, 0x86, 0xdd, 0x53, 0x65, 0x9b, 0x45, 0x28, 0x04, 0x03, 0x6f, 0xc2, + 0x8d, 0x55, 0x58, 0x4e, 0xae, 0xaa, 0xbc, 0x26, 0x7e, 0x2f, 0x03, 0x2d, 0x19, 0x1f, 0xe1, 0xb8, + 0x67, 0xbb, 0x4e, 0x10, 0x7a, 0x7e, 0xf4, 0x1a, 0xdd, 0x5d, 0x80, 0x20, 0xb4, 0x7d, 0xa9, 0x6d, + 0xca, 0xdc, 0x72, 0x84, 0xa0, 0x26, 0x79, 0x1b, 0x4a, 0xdc, 0x1d, 0x52, 0x21, 0x51, 0x43, 0x91, + 0xbb, 0x43, 0xa5, 0x87, 0xce, 0xc9, 0xdf, 0xb5, 0xa4, 0x7a, 0x21, 0x53, 0x3d, 0xc5, 0xea, 0xf0, + 0x0b, 0xbc, 0x78, 0xf3, 0x51, 0xaa, 0xe7, 0xbe, 0x7d, 0x85, 0xd1, 0x86, 0x81, 0xf1, 0x4f, 0xb2, + 0xd0, 0x88, 0xc7, 0x47, 0x79, 0xe2, 0x2f, 0xce, 0x78, 0xbf, 0x2f, 0xc9, 0xc1, 0x11, 0xf2, 0xbb, + 0x66, 0x78, 0x2c, 0xd1, 0xe1, 0xec, 0xba, 0xcc, 0x80, 0x8a, 0xc2, 0xf0, 0xa6, 0xa1, 0xf6, 0x28, + 0x54, 0x99, 0x50, 0x0e, 0xa7, 0xa1, 0x50, 0xb8, 0x84, 0xe6, 0xe9, 0xb8, 0x52, 0xe5, 0x29, 0xd8, + 0xe3, 0xb0, 0x8b, 0x6f, 0x4d, 0x0b, 0xb0, 0xa8, 0x46, 0x1b, 0x29, 0xb0, 0x04, 0x7e, 0x93, 0xe4, + 0x6c, 0xda, 0x39, 0x94, 0xb1, 0x75, 0x21, 0x94, 0x9e, 0xdd, 0x8c, 0x84, 0xd0, 0xd7, 0xa1, 0x42, + 0x8d, 0xc7, 0x09, 0x75, 0x79, 0xb3, 0x8c, 0x3d, 0x60, 0xb9, 0x34, 0x02, 0x79, 0xd3, 0x84, 0xea, + 0x0b, 0xd4, 0x15, 0x86, 0x1f, 0xfc, 0x83, 0x0c, 0xdc, 0x4e, 0xd9, 0x36, 0x79, 0xca, 0xb7, 0x60, + 0xf1, 0x34, 0x2a, 0x54, 0xab, 0x4b, 0x47, 0x7d, 0x55, 0xb1, 0xd5, 0xe4, 0x9a, 0x9a, 0xcd, 0xd3, + 0x24, 0x20, 0x56, 0xba, 0x68, 0x07, 0x13, 0x39, 0x93, 0xa8, 0x74, 0xd1, 0x36, 0x92, 0xbe, 0x73, + 0x04, 0xeb, 0x9d, 0x2b, 0xc1, 0x31, 0xb6, 0xf4, 0xc7, 0xd2, 0x15, 0x19, 0x25, 0x0d, 0xcc, 0x99, + 0x57, 0x32, 0x30, 0x0f, 0x29, 0x35, 0x2c, 0x6a, 0xeb, 0xe7, 0x69, 0x04, 0x2f, 0x50, 0x51, 0x87, + 0x1e, 0x7b, 0x57, 0x79, 0x9b, 0x83, 0xe8, 0x91, 0x77, 0x23, 0x80, 0xc6, 0xfe, 0x74, 0x14, 0x3a, + 0xf1, 0xbb, 0xef, 0xec, 0xdb, 0xb2, 0x0e, 0xf6, 0xa3, 0x56, 0x2d, 0xb5, 0x23, 0x88, 0x3a, 0xc2, + 0xc5, 0x1a, 0x8b, 0x86, 0xac, 0xf9, 0xfe, 0x1a, 0xe3, 0x64, 0x0f, 0xc6, 0x6d, 0x58, 0x8b, 0xbf, + 0x68, 0xd9, 0xd4, 0x55, 0xf3, 0x2f, 0x33, 0x14, 0xda, 0x9c, 0x7c, 0x83, 0x9e, 0x75, 0x60, 0x29, + 0x70, 0xdc, 0xb3, 0x11, 0xd7, 0x9b, 0x0f, 0xe4, 0x22, 0xac, 0x24, 0xc7, 0x26, 0xdf, 0xa9, 0x37, + 0x17, 0xa9, 0x46, 0xdc, 0x5a, 0xc0, 0x36, 0x6f, 0x1a, 0x64, 0x4c, 0x16, 0x33, 0xab, 0x31, 0x3f, + 0xf8, 0x2e, 0xd4, 0x93, 0x1d, 0xb1, 0xef, 0xc8, 0xb4, 0xc8, 0x78, 0x54, 0xb9, 0x99, 0x0c, 0xb7, + 0x98, 0x20, 0x2a, 0xf1, 0xda, 0x07, 0xc6, 0x3f, 0xca, 0x40, 0xcb, 0xe4, 0x82, 0x72, 0xb5, 0x51, + 0x2a, 0x9a, 0xf9, 0x70, 0xae, 0xd5, 0x9b, 0xe7, 0xaa, 0xb2, 0x2d, 0xd5, 0x88, 0xbe, 0x71, 0xe3, + 0x66, 0xec, 0xde, 0x9a, 0x9b, 0xd1, 0x66, 0x09, 0x16, 0x08, 0xc5, 0x58, 0x83, 0x15, 0x39, 0x1e, + 0x35, 0x96, 0xd8, 0x7b, 0x98, 0xe8, 0x31, 0xe1, 0x3d, 0x5c, 0x87, 0x16, 0x3d, 0x2a, 0xa8, 0x4f, + 0x42, 0x56, 0xdc, 0x06, 0xb6, 0x6f, 0x0f, 0x6c, 0xdf, 0xf3, 0xdc, 0x23, 0xee, 0xcb, 0x40, 0x51, + 0x94, 0x30, 0xd1, 0xb9, 0xa6, 0x44, 0x61, 0xfa, 0x52, 0x4f, 0xe1, 0x79, 0xae, 0x8a, 0x8b, 0xa1, + 0x2f, 0xc3, 0x84, 0xa5, 0x4d, 0xfb, 0x39, 0x57, 0x2d, 0xa9, 0x25, 0xfa, 0x08, 0x2a, 0x93, 0xa8, + 0x51, 0xb5, 0xee, 0x2a, 0x77, 0x7a, 0xbe, 0x5b, 0x53, 0xc7, 0x36, 0x9e, 0xc0, 0x72, 0xb2, 0x4d, + 0xc9, 0x3a, 0xd6, 0xa1, 0x34, 0x96, 0x30, 0x39, 0xba, 0xe8, 0xdb, 0xf8, 0x69, 0x09, 0x8a, 0x52, + 0x9f, 0x63, 0x1b, 0x90, 0x1f, 0xa8, 0xd8, 0xa4, 0xf8, 0x49, 0x0e, 0x59, 0xaa, 0xfe, 0xdf, 0xc2, + 0x08, 0x25, 0x81, 0xc7, 0x3e, 0x82, 0x7a, 0xd2, 0x2b, 0x3a, 0x93, 0x98, 0x99, 0x74, 0x67, 0xd6, + 0x06, 0x33, 0xfe, 0xaf, 0x72, 0x7c, 0x39, 0x92, 0xcc, 0x50, 0x3a, 0xd7, 0x6e, 0x4f, 0xcf, 0x15, + 0xf2, 0x76, 0x70, 0x6e, 0x5b, 0x4f, 0xde, 0xff, 0x40, 0x66, 0x66, 0x56, 0x10, 0xd8, 0x3b, 0xb7, + 0x9f, 0xbc, 0xff, 0xc1, 0xac, 0x24, 0x4d, 0xc9, 0x79, 0xba, 0x24, 0xbd, 0x0c, 0x05, 0x7a, 0xf3, + 0x8d, 0x82, 0x4c, 0xe8, 0x83, 0x3d, 0x86, 0x65, 0xa9, 0xb6, 0x5a, 0x32, 0x1c, 0x98, 0xb8, 0x60, + 0x89, 0xb2, 0x81, 0x64, 0x59, 0x0f, 0x8b, 0xc8, 0x36, 0xb4, 0x0a, 0x0b, 0xe7, 0xf1, 0x03, 0x7e, + 0x35, 0x53, 0x7e, 0x19, 0x7f, 0x5a, 0x80, 0x8a, 0xb6, 0x28, 0xac, 0x0a, 0x25, 0xb3, 0xd3, 0xeb, + 0x98, 0x9f, 0x74, 0xb6, 0x9b, 0xb7, 0xd8, 0x03, 0x78, 0xab, 0x7b, 0xb0, 0x75, 0x68, 0x9a, 0x9d, + 0xad, 0xbe, 0x75, 0x68, 0x5a, 0xea, 0x61, 0x98, 0xa3, 0xf6, 0x67, 0xfb, 0x9d, 0x83, 0xbe, 0xb5, + 0xdd, 0xe9, 0xb7, 0xbb, 0x7b, 0xbd, 0x66, 0x86, 0xbd, 0x06, 0xad, 0x18, 0x53, 0x15, 0xb7, 0xf7, + 0x0f, 0x8f, 0x0f, 0xfa, 0xcd, 0x2c, 0xbb, 0x07, 0x77, 0x76, 0xba, 0x07, 0xed, 0x3d, 0x2b, 0xc6, + 0xd9, 0xda, 0xeb, 0x7f, 0x62, 0x75, 0x7e, 0xfd, 0xa8, 0x6b, 0x7e, 0xd6, 0xcc, 0xa5, 0x21, 0x08, + 0x65, 0x5c, 0xb5, 0x90, 0x67, 0xb7, 0x61, 0x85, 0x10, 0xa8, 0x8a, 0xd5, 0x3f, 0x3c, 0xb4, 0x7a, + 0x87, 0x87, 0x07, 0xcd, 0x02, 0x5b, 0x84, 0x5a, 0xf7, 0xe0, 0x93, 0xf6, 0x5e, 0x77, 0xdb, 0x32, + 0x3b, 0xed, 0xbd, 0xfd, 0xe6, 0x02, 0x5b, 0x82, 0xc6, 0x2c, 0x5e, 0x51, 0x34, 0xa1, 0xf0, 0x0e, + 0x0f, 0xba, 0x87, 0x07, 0xd6, 0x27, 0x1d, 0xb3, 0xd7, 0x3d, 0x3c, 0x68, 0x96, 0xd8, 0x2a, 0xb0, + 0x64, 0xd1, 0xee, 0x7e, 0x7b, 0xab, 0x59, 0x66, 0x2b, 0xb0, 0x98, 0x84, 0x3f, 0xeb, 0x7c, 0xd6, + 0x04, 0xd6, 0x82, 0x65, 0x1a, 0x98, 0xb5, 0xd9, 0xd9, 0x3b, 0xfc, 0xd4, 0xda, 0xef, 0x1e, 0x74, + 0xf7, 0x8f, 0xf7, 0x9b, 0x15, 0x7c, 0xaa, 0xaa, 0xd3, 0xb1, 0xba, 0x07, 0xbd, 0xe3, 0x9d, 0x9d, + 0xee, 0x56, 0xb7, 0x73, 0xd0, 0x6f, 0x56, 0xa9, 0xe7, 0xb4, 0x89, 0xd7, 0x44, 0x05, 0x99, 0x33, + 0x60, 0x6d, 0x77, 0x7b, 0xed, 0xcd, 0xbd, 0xce, 0x76, 0xb3, 0xce, 0xee, 0xc2, 0xed, 0x7e, 0x67, + 0xff, 0xe8, 0xd0, 0x6c, 0x9b, 0x9f, 0xa9, 0x9c, 0x02, 0x6b, 0xa7, 0xdd, 0xdd, 0x3b, 0x36, 0x3b, + 0xcd, 0x06, 0x7b, 0x03, 0xee, 0x9a, 0x9d, 0x8f, 0x8f, 0xbb, 0x66, 0x67, 0xdb, 0x3a, 0x38, 0xdc, + 0xee, 0x58, 0x3b, 0x9d, 0x76, 0xff, 0xd8, 0xec, 0x58, 0xfb, 0xdd, 0x5e, 0xaf, 0x7b, 0xf0, 0xb4, + 0xd9, 0x64, 0x6f, 0xc1, 0xfd, 0x08, 0x25, 0x6a, 0x60, 0x06, 0x6b, 0x51, 0xcc, 0x4f, 0x6d, 0xe9, + 0x41, 0xe7, 0xd7, 0xfb, 0xd6, 0x51, 0xa7, 0x63, 0x36, 0x19, 0x5b, 0x87, 0xd5, 0xb8, 0x7b, 0xea, + 0x40, 0xf6, 0xbd, 0x24, 0xca, 0x8e, 0x3a, 0xe6, 0x7e, 0xfb, 0x40, 0x6c, 0x70, 0xa2, 0x6c, 0x59, + 0x0c, 0x3b, 0x2e, 0x9b, 0x1d, 0xf6, 0x0a, 0x63, 0x50, 0xd7, 0x76, 0x65, 0xa7, 0x6d, 0x36, 0x57, + 0x59, 0x03, 0x2a, 0xfb, 0x47, 0x47, 0x56, 0xbf, 0xbb, 0xdf, 0x39, 0x3c, 0xee, 0x37, 0xd7, 0xd8, + 0x0a, 0x34, 0xbb, 0x07, 0xfd, 0x8e, 0x29, 0xf6, 0x5a, 0x55, 0xfd, 0xdf, 0x45, 0xb6, 0x0c, 0x0d, + 0x35, 0x52, 0x05, 0xfd, 0xcb, 0x22, 0x5b, 0x03, 0x76, 0x7c, 0x60, 0x76, 0xda, 0xdb, 0x62, 0xe1, + 0xa2, 0x82, 0xff, 0x53, 0x94, 0x1e, 0x92, 0x9f, 0xe5, 0xa2, 0xcb, 0x3a, 0x0e, 0x39, 0x48, 0x3e, + 0xe7, 0x5a, 0xd5, 0x9e, 0x61, 0x7d, 0xd9, 0x43, 0xeb, 0x9a, 0x6a, 0x95, 0x9b, 0x53, 0xad, 0xe6, + 0x74, 0xf7, 0x9a, 0x2e, 0xfb, 0xbd, 0x09, 0xb5, 0x31, 0x3d, 0xed, 0x2a, 0x9f, 0x70, 0x04, 0x19, + 0x7f, 0x43, 0x40, 0x7a, 0xbf, 0x71, 0xee, 0xa5, 0xf1, 0xc2, 0xfc, 0x4b, 0xe3, 0x69, 0xf2, 0xfd, + 0x42, 0x9a, 0x7c, 0xff, 0x10, 0x16, 0x89, 0x35, 0x39, 0xae, 0x33, 0x56, 0x5a, 0x33, 0x49, 0x81, + 0x0d, 0x64, 0x51, 0x04, 0x57, 0xea, 0x84, 0x52, 0x39, 0x24, 0x0b, 0x29, 0x4a, 0x6d, 0x23, 0xa1, + 0x69, 0x10, 0xe7, 0x88, 0x34, 0x8d, 0xa8, 0x07, 0xfb, 0x2a, 0xee, 0xa1, 0xa2, 0xf5, 0x40, 0x70, + 0xec, 0xe1, 0x21, 0x2c, 0xf2, 0xab, 0xd0, 0xb7, 0x2d, 0x6f, 0x62, 0x7f, 0x3e, 0x45, 0x17, 0xae, + 0x8d, 0x3a, 0x7c, 0xd5, 0x6c, 0x60, 0xc1, 0x21, 0xc2, 0xb7, 0xed, 0xd0, 0x7e, 0xf8, 0x05, 0x54, + 0xb4, 0x67, 0x7f, 0xd9, 0x1a, 0x2c, 0x7d, 0xda, 0xed, 0x1f, 0x74, 0x7a, 0x3d, 0xeb, 0xe8, 0x78, + 0xf3, 0x59, 0xe7, 0x33, 0x6b, 0xb7, 0xdd, 0xdb, 0x6d, 0xde, 0x12, 0x87, 0xf6, 0xa0, 0xd3, 0xeb, + 0x77, 0xb6, 0x13, 0xf0, 0x0c, 0x7b, 0x1d, 0xd6, 0x8f, 0x0f, 0x8e, 0x7b, 0x9d, 0x6d, 0x2b, 0xad, + 0x5e, 0x56, 0x50, 0xa9, 0x2c, 0x4f, 0xa9, 0x9e, 0x7b, 0xf8, 0x7d, 0xa8, 0x27, 0xdf, 0xa2, 0x64, + 0x00, 0x0b, 0x7b, 0x9d, 0xa7, 0xed, 0xad, 0xcf, 0xe8, 0x31, 0xbb, 0x5e, 0xbf, 0xdd, 0xef, 0x6e, + 0x59, 0xf2, 0xf1, 0x3a, 0xc1, 0x11, 0x32, 0xac, 0x02, 0xc5, 0xf6, 0xc1, 0xd6, 0xee, 0xa1, 0xd9, + 0x6b, 0x66, 0x1f, 0x7e, 0x04, 0xcd, 0x59, 0x7f, 0x54, 0xc2, 0x81, 0xf7, 0x22, 0x4f, 0xdf, 0xc3, + 0x7f, 0x9b, 0x03, 0x88, 0x13, 0x06, 0x04, 0xab, 0xd9, 0x6e, 0xf7, 0xdb, 0x7b, 0x87, 0x62, 0x1a, + 0xe6, 0x61, 0x5f, 0x70, 0x10, 0xb3, 0xf3, 0x71, 0xf3, 0x56, 0x6a, 0xc9, 0xe1, 0x51, 0xbf, 0x99, + 0x11, 0x2b, 0xd6, 0x3d, 0xe8, 0xf6, 0xbb, 0xed, 0x3d, 0xcb, 0x3c, 0x3c, 0xee, 0x1e, 0x3c, 0xa5, + 0x57, 0xba, 0x90, 0xcb, 0x1e, 0x1f, 0xed, 0x98, 0x87, 0x07, 0x7d, 0xab, 0xb7, 0x7b, 0xdc, 0xdf, + 0xc6, 0x37, 0xbe, 0xb6, 0xcc, 0xee, 0x11, 0xb5, 0x99, 0x7f, 0x11, 0x82, 0x68, 0xba, 0x20, 0xd6, + 0xfc, 0xe9, 0x61, 0xaf, 0xd7, 0x3d, 0xb2, 0x3e, 0x3e, 0xee, 0x98, 0xdd, 0x4e, 0x0f, 0x2b, 0x2e, + 0xa4, 0xc0, 0x05, 0x7e, 0x51, 0xf0, 0xe6, 0xfe, 0xde, 0x27, 0x92, 0x79, 0x0a, 0xd4, 0x52, 0x12, + 0x24, 0xb0, 0xca, 0x82, 0xa7, 0x08, 0xee, 0x93, 0xd2, 0x32, 0xdc, 0x50, 0x26, 0xea, 0x55, 0x04, + 0x5f, 0x9d, 0xdb, 0x0c, 0xac, 0x56, 0x4d, 0x2f, 0x12, 0xb5, 0x90, 0xe5, 0x46, 0x17, 0xd4, 0xf6, + 0xb6, 0x89, 0x15, 0xea, 0x73, 0x50, 0x81, 0xdb, 0x10, 0x1b, 0x25, 0xd8, 0x93, 0x40, 0x69, 0xaa, + 0x0f, 0x51, 0xb2, 0xf8, 0xe4, 0x77, 0x72, 0x50, 0xa7, 0xe4, 0x2d, 0xfa, 0xd5, 0x25, 0xee, 0xb3, + 0x7d, 0x28, 0xca, 0x9f, 0xef, 0x62, 0x2b, 0xd1, 0x03, 0x4a, 0xfa, 0x0f, 0x86, 0xad, 0xaf, 0xce, + 0x82, 0xa5, 0x38, 0xb6, 0xf4, 0xb7, 0xfe, 0xe4, 0x7f, 0xfd, 0xe3, 0x6c, 0x8d, 0x55, 0x1e, 0x5d, + 0xbc, 0xf7, 0xe8, 0x8c, 0xbb, 0x81, 0x68, 0xe3, 0xaf, 0x03, 0xc4, 0x3f, 0x4a, 0xc5, 0x5a, 0x91, + 0x13, 0x6a, 0xe6, 0x17, 0xbb, 0xd6, 0x6f, 0xa7, 0x94, 0xc8, 0x76, 0x6f, 0x63, 0xbb, 0x4b, 0x46, + 0x5d, 0xb4, 0xeb, 0xb8, 0x4e, 0x48, 0x3f, 0x50, 0xf5, 0x61, 0xe6, 0x21, 0x1b, 0x42, 0x55, 0xff, + 0xb9, 0x28, 0xa6, 0x24, 0xa5, 0x94, 0x1f, 0xbc, 0x5a, 0xbf, 0x93, 0x5a, 0xa6, 0x64, 0x50, 0xec, + 0x63, 0xc5, 0x68, 0x8a, 0x3e, 0xa6, 0x88, 0x11, 0xf7, 0x32, 0x22, 0xa9, 0x3c, 0xfe, 0x55, 0x28, + 0xf6, 0x9a, 0x26, 0x57, 0xcd, 0xfd, 0x26, 0xd5, 0xfa, 0xdd, 0x1b, 0x4a, 0x65, 0x5f, 0x77, 0xb1, + 0xaf, 0x35, 0x83, 0x89, 0xbe, 0x06, 0x88, 0xa3, 0x7e, 0x93, 0xea, 0xc3, 0xcc, 0xc3, 0x27, 0x7f, + 0xf1, 0x00, 0xca, 0x51, 0x30, 0x27, 0xfb, 0x2d, 0xa8, 0x25, 0xb2, 0xeb, 0x98, 0x9a, 0x46, 0x5a, + 0x32, 0xde, 0xfa, 0x6b, 0xe9, 0x85, 0xb2, 0xe3, 0xd7, 0xb1, 0xe3, 0x16, 0x5b, 0x15, 0x1d, 0xcb, + 0xec, 0xb5, 0x47, 0x98, 0x0d, 0x4b, 0xcf, 0x51, 0x3d, 0xd7, 0xb4, 0x0f, 0xea, 0xec, 0xb5, 0x59, + 0x8d, 0x20, 0xd1, 0xdb, 0xdd, 0x1b, 0x4a, 0x65, 0x77, 0xaf, 0x61, 0x77, 0xab, 0x6c, 0x59, 0xef, + 0x4e, 0x85, 0x5e, 0x32, 0x8e, 0x4f, 0xc0, 0xe9, 0x3f, 0x9a, 0xc4, 0xee, 0xc6, 0x0f, 0x76, 0xa5, + 0xfc, 0x98, 0x52, 0x44, 0x22, 0xf3, 0xbf, 0xa8, 0x64, 0xb4, 0xb0, 0x2b, 0xc6, 0x70, 0xfb, 0xf4, + 0xdf, 0x4c, 0x62, 0x27, 0x50, 0xd1, 0x7e, 0x67, 0x80, 0xdd, 0xbe, 0xf1, 0x37, 0x11, 0xd6, 0xd7, + 0xd3, 0x8a, 0xd2, 0xa6, 0xa2, 0xb7, 0xff, 0xe8, 0x94, 0x73, 0xf6, 0x1b, 0x50, 0x8e, 0x5e, 0xaf, + 0x67, 0x6b, 0xda, 0xaf, 0x09, 0xe8, 0xaf, 0xed, 0xaf, 0xb7, 0xe6, 0x0b, 0xd2, 0x88, 0x4f, 0x6f, + 0x5d, 0x10, 0xdf, 0xa7, 0x50, 0xd1, 0x5e, 0xa8, 0x8f, 0x26, 0x30, 0xff, 0x0a, 0x7e, 0x34, 0x81, + 0x94, 0x07, 0xed, 0x8d, 0x45, 0xec, 0xa2, 0xc2, 0xca, 0x48, 0xdf, 0xe1, 0x95, 0x17, 0xb0, 0x3d, + 0x58, 0x91, 0x9a, 0xd6, 0x09, 0xff, 0x32, 0xdb, 0x90, 0xf2, 0x3b, 0x55, 0x8f, 0x33, 0xec, 0x23, + 0x28, 0xa9, 0x1f, 0x22, 0x60, 0xab, 0xe9, 0x3f, 0xa8, 0xb0, 0xbe, 0x36, 0x07, 0x97, 0x6a, 0xd1, + 0x67, 0x00, 0xf1, 0x73, 0xf8, 0x11, 0x93, 0x98, 0x7b, 0x5e, 0x3f, 0xa2, 0x80, 0xf9, 0xb7, 0xf3, + 0x8d, 0x55, 0x9c, 0x60, 0x93, 0x21, 0x93, 0x70, 0xf9, 0xa5, 0x7a, 0xa7, 0xf3, 0x47, 0x50, 0xd1, + 0x5e, 0xc4, 0x8f, 0x96, 0x6f, 0xfe, 0x35, 0xfd, 0x68, 0xf9, 0x52, 0x1e, 0xd0, 0x37, 0xd6, 0xb1, + 0xf5, 0x65, 0xa3, 0x21, 0x5a, 0x17, 0xa2, 0x96, 0x14, 0x79, 0xc4, 0x06, 0x9d, 0x43, 0x2d, 0xf1, + 0xec, 0x7d, 0x74, 0x42, 0xd3, 0x1e, 0xd5, 0x8f, 0x4e, 0x68, 0xea, 0x4b, 0xf9, 0x8a, 0xce, 0x8c, + 0x45, 0xd1, 0xcf, 0x05, 0xa2, 0x68, 0x3d, 0xfd, 0x10, 0x2a, 0xda, 0x13, 0xf6, 0xd1, 0x5c, 0xe6, + 0x5f, 0xcb, 0x8f, 0xe6, 0x92, 0xf6, 0xe2, 0xfd, 0x32, 0xf6, 0x51, 0x37, 0x90, 0x14, 0xf0, 0xa5, + 0x41, 0xd1, 0xf6, 0x6f, 0x41, 0x3d, 0xf9, 0xaa, 0x7d, 0x74, 0xf6, 0x53, 0x9f, 0xc7, 0x8f, 0xce, + 0xfe, 0x0d, 0x4f, 0xe1, 0x4b, 0x92, 0x7e, 0xb8, 0x14, 0x75, 0xf2, 0xe8, 0x27, 0x32, 0x2d, 0xe5, + 0x0b, 0xf6, 0xb1, 0x60, 0x70, 0xf2, 0xa1, 0x4b, 0xb6, 0xa6, 0x51, 0xad, 0xfe, 0x62, 0x66, 0x74, + 0x5e, 0xe6, 0xde, 0xc4, 0x4c, 0x12, 0x33, 0x36, 0xce, 0x9e, 0xc2, 0x52, 0x44, 0xcc, 0xd1, 0xcb, + 0x95, 0x41, 0x34, 0x87, 0xd4, 0xf7, 0x31, 0xd7, 0x9b, 0xb3, 0xa5, 0x8f, 0x33, 0x74, 0xfd, 0xe1, + 0x7b, 0x81, 0xda, 0xf5, 0xa7, 0x3f, 0x5e, 0xa9, 0x5d, 0x7f, 0x89, 0x67, 0x05, 0x67, 0xaf, 0xbf, + 0xd0, 0x11, 0x6d, 0xb8, 0xd0, 0x98, 0x7d, 0x47, 0xf2, 0xee, 0x4d, 0x69, 0xff, 0xd4, 0xfc, 0xeb, + 0x2f, 0x7e, 0x15, 0x20, 0xc9, 0x8a, 0x14, 0x37, 0x7d, 0x24, 0x83, 0x4f, 0xd8, 0x6f, 0x42, 0x55, + 0x7f, 0x52, 0x9b, 0xe9, 0x3c, 0x61, 0xb6, 0xa7, 0x3b, 0xa9, 0x65, 0x49, 0x2a, 0x61, 0x55, 0xbd, + 0x1b, 0xf6, 0x09, 0xac, 0x46, 0xcb, 0xac, 0xe7, 0xad, 0x07, 0xec, 0x5e, 0x4a, 0x36, 0x7b, 0x62, + 0xb1, 0x6f, 0xdf, 0x98, 0xee, 0xfe, 0x38, 0x23, 0xa8, 0x2f, 0xf9, 0xb6, 0x6f, 0x7c, 0xf3, 0xa4, + 0x3d, 0x69, 0x1c, 0xdf, 0x3c, 0xa9, 0x0f, 0x02, 0x2b, 0xea, 0x63, 0x4b, 0x89, 0x35, 0xa2, 0xb0, + 0x5c, 0xf6, 0x43, 0x68, 0x68, 0x49, 0xf9, 0xbd, 0x6b, 0x77, 0x10, 0x9d, 0xa4, 0xf9, 0xc7, 0xe9, + 0xd6, 0xd3, 0x6c, 0x93, 0xc6, 0x1a, 0xb6, 0xbf, 0x68, 0x24, 0x16, 0x47, 0x9c, 0xa2, 0x2d, 0xa8, + 0xe8, 0x09, 0xff, 0x2f, 0x68, 0x77, 0x4d, 0x2b, 0xd2, 0xdf, 0x41, 0x7b, 0x9c, 0x61, 0x7b, 0xd0, + 0x9c, 0x7d, 0xb6, 0x29, 0xe2, 0x29, 0x69, 0x4f, 0x4d, 0xad, 0xcf, 0x14, 0x26, 0x1e, 0x7b, 0x62, + 0x47, 0x94, 0xd8, 0x11, 0xfd, 0xa8, 0x93, 0xe7, 0xcf, 0xde, 0xea, 0xc9, 0x1f, 0x7b, 0x8a, 0x5a, + 0x4b, 0xfb, 0x99, 0xaf, 0x07, 0x99, 0xc7, 0x19, 0xf6, 0xbb, 0x19, 0xa8, 0x26, 0x9e, 0x4a, 0x49, + 0x84, 0xce, 0xcf, 0xcc, 0xb3, 0xa5, 0x97, 0xe9, 0x13, 0x35, 0x4c, 0x5c, 0xc4, 0xbd, 0x87, 0x3f, + 0x48, 0x6c, 0xd2, 0x4f, 0x12, 0xae, 0xbd, 0x8d, 0xd9, 0x5f, 0x7d, 0xfa, 0x62, 0x16, 0x41, 0x7f, + 0x73, 0xf0, 0x8b, 0xc7, 0x19, 0xf6, 0xef, 0x33, 0x50, 0x4f, 0xfa, 0xec, 0xa3, 0xe9, 0xa6, 0x46, + 0x07, 0x44, 0xa4, 0x74, 0x83, 0xa3, 0xff, 0x87, 0x38, 0xca, 0xfe, 0x43, 0x33, 0x31, 0x4a, 0xf9, + 0x2a, 0xf5, 0x2f, 0x36, 0x5a, 0xf6, 0x21, 0xfd, 0xc8, 0xa2, 0x0a, 0x65, 0x62, 0xf3, 0x3f, 0xca, + 0x17, 0x91, 0x9f, 0xfe, 0x13, 0x76, 0xb8, 0x09, 0x3f, 0xa2, 0x5f, 0x37, 0x52, 0x91, 0x31, 0x82, + 0x8a, 0x5f, 0xb5, 0xbe, 0xf1, 0x16, 0xce, 0xe9, 0x75, 0xe3, 0x76, 0x62, 0x4e, 0xb3, 0x82, 0x47, + 0x9b, 0x46, 0x27, 0x7f, 0x81, 0x2e, 0xbe, 0x39, 0xe7, 0x7e, 0x95, 0xee, 0xe6, 0x41, 0x8e, 0x69, + 0x90, 0x12, 0x3d, 0x71, 0xd4, 0x5e, 0xb1, 0x19, 0xe3, 0x21, 0x8e, 0xf5, 0x2d, 0xe3, 0xde, 0x8d, + 0x63, 0x7d, 0x84, 0xfe, 0x77, 0x31, 0xe2, 0x23, 0x80, 0x38, 0xd4, 0x90, 0xcd, 0x04, 0xbc, 0x45, + 0x0c, 0x68, 0x3e, 0x1a, 0x31, 0x79, 0x9e, 0x55, 0x5c, 0x9c, 0x68, 0xf1, 0x37, 0x88, 0x9d, 0x46, + 0xa1, 0x78, 0xba, 0xf4, 0x95, 0x8c, 0x0a, 0x4c, 0x48, 0x5f, 0xb3, 0xed, 0x27, 0x98, 0x69, 0x14, + 0x77, 0x77, 0x0c, 0xb5, 0x3d, 0xcf, 0x7b, 0x3e, 0x9d, 0x44, 0xe1, 0xed, 0xc9, 0xa0, 0x98, 0x5d, + 0x3b, 0x38, 0x5f, 0x9f, 0x99, 0x85, 0x71, 0x1f, 0x9b, 0x5a, 0x67, 0x2d, 0xad, 0xa9, 0x47, 0x3f, + 0x89, 0xe3, 0x1b, 0xbf, 0x60, 0x36, 0x2c, 0x46, 0x3c, 0x3a, 0x8e, 0x21, 0x4c, 0x36, 0x93, 0xe0, + 0xcc, 0xb3, 0x5d, 0x24, 0xd4, 0x04, 0x35, 0xda, 0x47, 0x81, 0x6a, 0xf3, 0x71, 0x86, 0x1d, 0x41, + 0x75, 0x9b, 0x0f, 0x30, 0x51, 0x1f, 0x43, 0x4b, 0x96, 0x12, 0x61, 0x0a, 0x14, 0x93, 0xb2, 0x5e, + 0x4b, 0x00, 0x93, 0xf7, 0xd6, 0xc4, 0xbe, 0xf6, 0xf9, 0xe7, 0x8f, 0x7e, 0x22, 0x83, 0x56, 0xbe, + 0x50, 0xf7, 0x96, 0x0a, 0xea, 0x49, 0xdc, 0x5b, 0x33, 0x51, 0x40, 0x89, 0x7b, 0x6b, 0x2e, 0x0a, + 0x28, 0xb1, 0xd4, 0x2a, 0xa8, 0x88, 0x8d, 0x60, 0x71, 0x2e, 0x70, 0x28, 0xba, 0xb2, 0x6e, 0x0a, + 0x37, 0x5a, 0xbf, 0x7f, 0x33, 0x42, 0xb2, 0xb7, 0x87, 0xc9, 0xde, 0x7a, 0x50, 0xa3, 0x67, 0x10, + 0x4f, 0x38, 0xa5, 0xec, 0xcd, 0xbc, 0x77, 0xa3, 0xe7, 0x03, 0xce, 0x5e, 0x30, 0x58, 0x96, 0x94, + 0x70, 0x30, 0x57, 0x8e, 0xfd, 0x06, 0x54, 0x9e, 0xf2, 0x50, 0xe5, 0xe8, 0x45, 0x32, 0xf6, 0x4c, + 0xd2, 0xde, 0x7a, 0x4a, 0x8a, 0x5f, 0x92, 0x66, 0xb0, 0xb5, 0x47, 0x7c, 0x78, 0xc6, 0x89, 0x39, + 0x59, 0xce, 0xf0, 0x0b, 0xf6, 0xeb, 0xd8, 0x78, 0x94, 0x1a, 0xbd, 0xaa, 0x25, 0x61, 0xe9, 0x8d, + 0x37, 0x66, 0xe0, 0x69, 0x2d, 0xbb, 0xde, 0x90, 0x6b, 0xb2, 0x9e, 0x0b, 0x15, 0xed, 0x09, 0x85, + 0xe8, 0x00, 0xcd, 0x3f, 0x99, 0x11, 0x1d, 0xa0, 0x94, 0x17, 0x17, 0x8c, 0x07, 0xd8, 0x8f, 0xc1, + 0xee, 0xc7, 0xfd, 0xd0, 0x2b, 0x0b, 0x71, 0x4f, 0x8f, 0x7e, 0x62, 0x8f, 0xc3, 0x2f, 0xd8, 0xa7, + 0xf8, 0xd8, 0xb8, 0x9e, 0x83, 0x18, 0x2b, 0x0d, 0xb3, 0xe9, 0x8a, 0xd1, 0x62, 0x69, 0x45, 0x49, + 0x45, 0x82, 0xba, 0x42, 0x49, 0xee, 0x7d, 0x80, 0x5e, 0xe8, 0x4d, 0xb6, 0x6d, 0x3e, 0xf6, 0xdc, + 0x98, 0xd7, 0xc6, 0x59, 0x71, 0x31, 0xff, 0xd2, 0x52, 0xe3, 0xd8, 0xa7, 0x9a, 0x96, 0x95, 0x48, + 0xe3, 0x54, 0xc4, 0x75, 0x63, 0xe2, 0x5c, 0xb4, 0x20, 0x29, 0xc9, 0x73, 0x8f, 0x33, 0xac, 0x0d, + 0x10, 0x47, 0x8e, 0x45, 0x3a, 0xd3, 0x5c, 0x50, 0x5a, 0xc4, 0xf6, 0x52, 0xc2, 0xcc, 0x8e, 0xa0, + 0x1c, 0x87, 0xdc, 0xac, 0xc5, 0x2f, 0xc2, 0x24, 0x02, 0x74, 0xa2, 0x1b, 0x7c, 0x2e, 0xdc, 0xc5, + 0x68, 0xe2, 0x52, 0x01, 0x2b, 0x89, 0xa5, 0x3a, 0xe5, 0x3c, 0x60, 0x0e, 0x2c, 0xd1, 0x00, 0x23, + 0x71, 0x09, 0xb3, 0xb9, 0xa2, 0x37, 0xe5, 0xe7, 0x23, 0x4f, 0xa2, 0xd3, 0x9c, 0x1a, 0x3f, 0x91, + 0x30, 0xfd, 0x08, 0x6a, 0xa5, 0x4c, 0x32, 0xc1, 0x9a, 0xc7, 0xb0, 0x38, 0xe7, 0xa2, 0x8f, 0x8e, + 0xf4, 0x4d, 0x31, 0x17, 0xd1, 0x91, 0xbe, 0xd1, 0xbb, 0x6f, 0xac, 0x60, 0x97, 0x0d, 0x03, 0x50, + 0xd5, 0xbb, 0x74, 0xc2, 0xc1, 0xb9, 0xe8, 0xee, 0xdf, 0x64, 0x60, 0x29, 0xc5, 0x09, 0xcf, 0xde, + 0x50, 0x56, 0x83, 0x1b, 0x1d, 0xf4, 0xeb, 0xa9, 0xce, 0x5a, 0xa3, 0x87, 0xfd, 0xec, 0xb3, 0x67, + 0x89, 0x8b, 0x8d, 0x7c, 0xa5, 0xf2, 0x64, 0xbe, 0x50, 0xa8, 0x48, 0x95, 0x28, 0x3e, 0x87, 0x35, + 0x1a, 0x48, 0x7b, 0x34, 0x9a, 0x71, 0x24, 0xbf, 0x3e, 0xf7, 0x23, 0xec, 0x09, 0xe7, 0xf8, 0xfa, + 0xcd, 0x3f, 0xd2, 0x7e, 0x83, 0x38, 0x4d, 0x43, 0x65, 0x53, 0x68, 0xce, 0x3a, 0x68, 0xd9, 0xcd, + 0x6d, 0xad, 0xdf, 0x4b, 0xe8, 0xbf, 0x29, 0x4e, 0xdd, 0xaf, 0x61, 0x67, 0xf7, 0x8c, 0xf5, 0xb4, + 0x75, 0x21, 0x95, 0x58, 0xec, 0xc7, 0xdf, 0x8c, 0xbc, 0xc9, 0x33, 0xf3, 0x54, 0x1d, 0xdc, 0xe4, + 0xfb, 0x8e, 0x34, 0xf0, 0x74, 0x67, 0xf4, 0xdb, 0xd8, 0xfd, 0x7d, 0xe3, 0x4e, 0x5a, 0xf7, 0x3e, + 0x55, 0x21, 0x5d, 0x7c, 0x6d, 0xf6, 0x5c, 0xab, 0x11, 0xdc, 0x4f, 0xdb, 0xef, 0x1b, 0x75, 0xa1, + 0x99, 0xb5, 0xbe, 0x85, 0xb2, 0x5d, 0x55, 0xf7, 0x1e, 0x47, 0xc7, 0x27, 0xc5, 0x4d, 0x1d, 0x1d, + 0x9f, 0x34, 0x77, 0x73, 0x52, 0xae, 0x51, 0x8e, 0xe6, 0x0f, 0x33, 0x0f, 0x37, 0xdf, 0xf9, 0xe1, + 0xd7, 0xce, 0x9c, 0xf0, 0x7c, 0x7a, 0xb2, 0x31, 0xf0, 0xc6, 0x8f, 0x46, 0xca, 0xda, 0x28, 0x53, + 0x9e, 0x1f, 0x8d, 0xdc, 0xe1, 0x23, 0x6c, 0xf6, 0x64, 0x61, 0xe2, 0x7b, 0xa1, 0xf7, 0xad, 0xff, + 0x17, 0x00, 0x00, 0xff, 0xff, 0x90, 0xab, 0x21, 0xed, 0x67, 0x82, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index 64f7a30c..dc32ab42 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -2016,6 +2016,14 @@ message PendingChannelsResponse { int64 recovered_balance = 6; repeated PendingHTLC pending_htlcs = 8; + + enum AnchorState { + LIMBO = 0; + RECOVERED = 1; + LOST = 2; + } + + AnchorState anchor = 9; } /// The balance in satoshis encumbered in pending channels diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 73f19292..b8a9f6e8 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -1534,6 +1534,15 @@ "default": "RESERVED", "description": " - RESERVED: *\nThe numbers assigned in this enumeration match the failure codes as\ndefined in BOLT #4. Because protobuf 3 requires enums to start with 0,\na RESERVED value is added.\n - INTERNAL_FAILURE: *\nAn internal error occurred.\n - UNKNOWN_FAILURE: *\nThe error source is known, but the failure itself couldn't be decoded.\n - UNREADABLE_FAILURE: *\nAn unreadable failure result is returned if the received failure message\ncannot be decrypted. In that case the error source is unknown." }, + "ForceClosedChannelAnchorState": { + "type": "string", + "enum": [ + "LIMBO", + "RECOVERED", + "LOST" + ], + "default": "LIMBO" + }, "HTLCAttemptHTLCStatus": { "type": "string", "enum": [ @@ -1630,6 +1639,9 @@ "items": { "$ref": "#/definitions/lnrpcPendingHTLC" } + }, + "anchor": { + "$ref": "#/definitions/ForceClosedChannelAnchorState" } } }, diff --git a/rpcserver.go b/rpcserver.go index bed4e79d..2a123e7f 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2839,6 +2839,22 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint, forceClose.PendingHtlcs = append(forceClose.PendingHtlcs, htlc) + case contractcourt.ReportOutputAnchor: + // There are three resolution states for the anchor: + // limbo, lost and recovered. Derive the current state + // from the limbo and recovered balances. + switch { + + case report.RecoveredBalance != 0: + forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_RECOVERED + + case report.LimboBalance != 0: + forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_LIMBO + + default: + forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_LOST + } + default: return fmt.Errorf("unknown report output type: %v", report.Type) @@ -2846,7 +2862,6 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint, forceClose.LimboBalance += int64(report.LimboBalance) forceClose.RecoveredBalance += int64(report.RecoveredBalance) - } return nil From d60303b092c01dd9cb357192e0f96c1640475235 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 11 Mar 2020 16:48:45 +0100 Subject: [PATCH 16/17] lnrpc: expose commit hashes for waiting close channels To make it easier to determine which pending sweep to bump in order to get your anchor commitment tx confirmed. --- lnrpc/rpc.pb.go | 1501 +++++++++++++++++++++------------------- lnrpc/rpc.proto | 17 + lnrpc/rpc.swagger.json | 21 + rpcserver.go | 49 +- 4 files changed, 870 insertions(+), 718 deletions(-) diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index f49fdbeb..40348321 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -349,7 +349,7 @@ func (x PendingChannelsResponse_ForceClosedChannel_AnchorState) String() string } func (PendingChannelsResponse_ForceClosedChannel_AnchorState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{72, 4, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{72, 5, 0} } type ChannelEventUpdate_UpdateType int32 @@ -5685,10 +5685,14 @@ type PendingChannelsResponse_WaitingCloseChannel struct { /// The pending channel waiting for closing tx to confirm Channel *PendingChannelsResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` /// The balance in satoshis encumbered in this channel - LimboBalance int64 `protobuf:"varint,2,opt,name=limbo_balance,json=limboBalance,proto3" json:"limbo_balance,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + LimboBalance int64 `protobuf:"varint,2,opt,name=limbo_balance,json=limboBalance,proto3" json:"limbo_balance,omitempty"` + //* + //A list of valid commitment transactions. Any of these can confirm at + //this point. + Commitments *PendingChannelsResponse_Commitments `protobuf:"bytes,3,opt,name=commitments,proto3" json:"commitments,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PendingChannelsResponse_WaitingCloseChannel) Reset() { @@ -5734,6 +5738,71 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) GetLimboBalance() int64 { return 0 } +func (m *PendingChannelsResponse_WaitingCloseChannel) GetCommitments() *PendingChannelsResponse_Commitments { + if m != nil { + return m.Commitments + } + return nil +} + +type PendingChannelsResponse_Commitments struct { + /// Hash of the local version of the commitment tx. + LocalTxid string `protobuf:"bytes,1,opt,name=local_txid,json=localTxid,proto3" json:"local_txid,omitempty"` + /// Hash of the remote version of the commitment tx. + RemoteTxid string `protobuf:"bytes,2,opt,name=remote_txid,json=remoteTxid,proto3" json:"remote_txid,omitempty"` + /// Hash of the remote pending version of the commitment tx. + RemotePendingTxid string `protobuf:"bytes,3,opt,name=remote_pending_txid,json=remotePendingTxid,proto3" json:"remote_pending_txid,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PendingChannelsResponse_Commitments) Reset() { *m = PendingChannelsResponse_Commitments{} } +func (m *PendingChannelsResponse_Commitments) String() string { return proto.CompactTextString(m) } +func (*PendingChannelsResponse_Commitments) ProtoMessage() {} +func (*PendingChannelsResponse_Commitments) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{72, 3} +} + +func (m *PendingChannelsResponse_Commitments) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PendingChannelsResponse_Commitments.Unmarshal(m, b) +} +func (m *PendingChannelsResponse_Commitments) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PendingChannelsResponse_Commitments.Marshal(b, m, deterministic) +} +func (m *PendingChannelsResponse_Commitments) XXX_Merge(src proto.Message) { + xxx_messageInfo_PendingChannelsResponse_Commitments.Merge(m, src) +} +func (m *PendingChannelsResponse_Commitments) XXX_Size() int { + return xxx_messageInfo_PendingChannelsResponse_Commitments.Size(m) +} +func (m *PendingChannelsResponse_Commitments) XXX_DiscardUnknown() { + xxx_messageInfo_PendingChannelsResponse_Commitments.DiscardUnknown(m) +} + +var xxx_messageInfo_PendingChannelsResponse_Commitments proto.InternalMessageInfo + +func (m *PendingChannelsResponse_Commitments) GetLocalTxid() string { + if m != nil { + return m.LocalTxid + } + return "" +} + +func (m *PendingChannelsResponse_Commitments) GetRemoteTxid() string { + if m != nil { + return m.RemoteTxid + } + return "" +} + +func (m *PendingChannelsResponse_Commitments) GetRemotePendingTxid() string { + if m != nil { + return m.RemotePendingTxid + } + return "" +} + type PendingChannelsResponse_ClosedChannel struct { /// The pending channel to be closed Channel *PendingChannelsResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` @@ -5748,7 +5817,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{72, 3} + return fileDescriptor_77a6da22d6a3feb1, []int{72, 4} } func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error { @@ -5814,7 +5883,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string { } func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{72, 4} + return fileDescriptor_77a6da22d6a3feb1, []int{72, 5} } func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error { @@ -11166,6 +11235,7 @@ func init() { proto.RegisterType((*PendingChannelsResponse_PendingChannel)(nil), "lnrpc.PendingChannelsResponse.PendingChannel") proto.RegisterType((*PendingChannelsResponse_PendingOpenChannel)(nil), "lnrpc.PendingChannelsResponse.PendingOpenChannel") proto.RegisterType((*PendingChannelsResponse_WaitingCloseChannel)(nil), "lnrpc.PendingChannelsResponse.WaitingCloseChannel") + proto.RegisterType((*PendingChannelsResponse_Commitments)(nil), "lnrpc.PendingChannelsResponse.Commitments") proto.RegisterType((*PendingChannelsResponse_ClosedChannel)(nil), "lnrpc.PendingChannelsResponse.ClosedChannel") proto.RegisterType((*PendingChannelsResponse_ForceClosedChannel)(nil), "lnrpc.PendingChannelsResponse.ForceClosedChannel") proto.RegisterType((*ChannelEventSubscription)(nil), "lnrpc.ChannelEventSubscription") @@ -11255,712 +11325,717 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 11277 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5b, 0x8f, 0x24, 0xd7, - 0x79, 0xd8, 0xf6, 0x6d, 0xba, 0xfb, 0xeb, 0xeb, 0x9c, 0xb9, 0xf5, 0xce, 0x72, 0xb9, 0xcb, 0x22, - 0x45, 0xae, 0x96, 0xd2, 0xec, 0x72, 0x25, 0x52, 0x32, 0x19, 0xcb, 0xea, 0x99, 0xe9, 0xd9, 0x69, - 0xed, 0xdc, 0x58, 0xdd, 0x43, 0x9a, 0x72, 0x9c, 0x52, 0x4d, 0xf7, 0x99, 0x99, 0xf2, 0x76, 0x57, - 0x35, 0xab, 0xaa, 0xe7, 0x22, 0x81, 0x79, 0xc8, 0xc5, 0x08, 0x82, 0x24, 0x80, 0x91, 0x28, 0x40, - 0x9c, 0x18, 0x09, 0x12, 0x04, 0x41, 0x10, 0xc0, 0x70, 0x20, 0x07, 0xc8, 0x43, 0xde, 0xfd, 0x92, - 0xc0, 0x0f, 0x76, 0x5e, 0x02, 0xc3, 0x80, 0x91, 0xc4, 0x79, 0x0b, 0xfc, 0x13, 0x82, 0xf3, 0x7d, - 0xe7, 0x54, 0x9d, 0xea, 0xae, 0xd9, 0x5d, 0x4a, 0x8c, 0x5e, 0x76, 0xa7, 0xbe, 0xf3, 0x9d, 0xfb, - 0x77, 0xbe, 0xf3, 0x5d, 0x4f, 0x43, 0xd9, 0x9f, 0x0c, 0x36, 0x26, 0xbe, 0x17, 0x7a, 0xac, 0x30, - 0x72, 0xfd, 0xc9, 0x60, 0xfd, 0xb5, 0x33, 0xcf, 0x3b, 0x1b, 0xf1, 0x47, 0xf6, 0xc4, 0x79, 0x64, - 0xbb, 0xae, 0x17, 0xda, 0xa1, 0xe3, 0xb9, 0x01, 0x21, 0x19, 0x3f, 0x82, 0xfa, 0x53, 0xee, 0xf6, - 0x38, 0x1f, 0x9a, 0xfc, 0xf3, 0x29, 0x0f, 0x42, 0xf6, 0x2e, 0x2c, 0xda, 0xfc, 0xc7, 0x9c, 0x0f, - 0xad, 0x89, 0x1d, 0x04, 0x93, 0x73, 0xdf, 0x0e, 0x78, 0x2b, 0x73, 0x3f, 0xf3, 0xa0, 0x6a, 0x36, - 0xa9, 0xe0, 0x28, 0x82, 0xb3, 0x37, 0xa0, 0x1a, 0x08, 0x54, 0xee, 0x86, 0xbe, 0x37, 0xb9, 0x6e, - 0x65, 0x11, 0xaf, 0x22, 0x60, 0x1d, 0x02, 0x19, 0x23, 0x68, 0x44, 0x3d, 0x04, 0x13, 0xcf, 0x0d, - 0x38, 0x7b, 0x0c, 0xcb, 0x03, 0x67, 0x72, 0xce, 0x7d, 0x0b, 0x2b, 0x8f, 0x5d, 0x3e, 0xf6, 0x5c, - 0x67, 0xd0, 0xca, 0xdc, 0xcf, 0x3d, 0x28, 0x9b, 0x8c, 0xca, 0x44, 0x8d, 0x7d, 0x59, 0xc2, 0xde, - 0x81, 0x06, 0x77, 0x09, 0xce, 0x87, 0x58, 0x4b, 0x76, 0x55, 0x8f, 0xc1, 0xa2, 0x82, 0xf1, 0xf7, - 0xb2, 0xb0, 0xd8, 0x75, 0x9d, 0xf0, 0x53, 0x7b, 0x34, 0xe2, 0xa1, 0x9a, 0xd3, 0x3b, 0xd0, 0xb8, - 0x44, 0x00, 0xce, 0xe9, 0xd2, 0xf3, 0x87, 0x72, 0x46, 0x75, 0x02, 0x1f, 0x49, 0xe8, 0x8d, 0x23, - 0xcb, 0xde, 0x38, 0xb2, 0xd4, 0xe5, 0xca, 0xdd, 0xb0, 0x5c, 0xef, 0x40, 0xc3, 0xe7, 0x03, 0xef, - 0x82, 0xfb, 0xd7, 0xd6, 0xa5, 0xe3, 0x0e, 0xbd, 0xcb, 0x56, 0xfe, 0x7e, 0xe6, 0x41, 0xc1, 0xac, - 0x2b, 0xf0, 0xa7, 0x08, 0x65, 0x9b, 0xd0, 0x18, 0x9c, 0xdb, 0xae, 0xcb, 0x47, 0xd6, 0x89, 0x3d, - 0x78, 0x3e, 0x9d, 0x04, 0xad, 0xc2, 0xfd, 0xcc, 0x83, 0xca, 0x93, 0xdb, 0x1b, 0xb8, 0xab, 0x1b, - 0x5b, 0xe7, 0xb6, 0xbb, 0x89, 0x25, 0x3d, 0xd7, 0x9e, 0x04, 0xe7, 0x5e, 0x68, 0xd6, 0x65, 0x0d, - 0x02, 0x07, 0xc6, 0x32, 0x30, 0x7d, 0x25, 0x68, 0xed, 0x8d, 0xff, 0x90, 0x81, 0xa5, 0x63, 0x77, - 0xe4, 0x0d, 0x9e, 0xff, 0x9c, 0x4b, 0x94, 0x32, 0x87, 0xec, 0xab, 0xce, 0x21, 0xf7, 0x65, 0xe7, - 0xb0, 0x0a, 0xcb, 0xc9, 0xc1, 0xca, 0x59, 0x70, 0x58, 0x11, 0xb5, 0xcf, 0xb8, 0x1a, 0x96, 0x9a, - 0xc6, 0xd7, 0xa1, 0x39, 0x98, 0xfa, 0x3e, 0x77, 0xe7, 0xe6, 0xd1, 0x90, 0xf0, 0x68, 0x22, 0x6f, - 0x40, 0xd5, 0xe5, 0x97, 0x31, 0x9a, 0xa4, 0x5d, 0x97, 0x5f, 0x2a, 0x14, 0xa3, 0x05, 0xab, 0xb3, - 0xdd, 0xc8, 0x01, 0xfc, 0x65, 0x06, 0xf2, 0xc7, 0xe1, 0x95, 0xc7, 0xde, 0x87, 0xaa, 0x3d, 0x1c, - 0xfa, 0x3c, 0x08, 0xac, 0xf0, 0x7a, 0x42, 0x27, 0xa5, 0xfe, 0x84, 0xc9, 0x29, 0xb6, 0xa9, 0xa8, - 0x7f, 0x3d, 0xe1, 0x66, 0xc5, 0x8e, 0x3f, 0x58, 0x0b, 0x8a, 0xf2, 0x13, 0xfb, 0x2d, 0x9b, 0xea, - 0x93, 0xdd, 0x05, 0xb0, 0xc7, 0xde, 0xd4, 0x0d, 0xad, 0xc0, 0x0e, 0x71, 0xc5, 0x72, 0x66, 0x99, - 0x20, 0x3d, 0x3b, 0x64, 0x77, 0xa0, 0x3c, 0x79, 0x6e, 0x05, 0x03, 0xdf, 0x99, 0x84, 0x48, 0x3c, - 0x65, 0xb3, 0x34, 0x79, 0xde, 0xc3, 0x6f, 0xf6, 0x2e, 0x94, 0xbc, 0x69, 0x38, 0xf1, 0x1c, 0x37, - 0x94, 0xf4, 0xd2, 0x90, 0x03, 0x39, 0x9c, 0x86, 0x47, 0x02, 0x6c, 0x46, 0x08, 0xec, 0x2d, 0xa8, - 0x0d, 0x3c, 0xf7, 0xd4, 0xf1, 0xc7, 0xc4, 0x11, 0x5a, 0x0b, 0xd8, 0x57, 0x12, 0x68, 0xfc, 0x41, - 0x16, 0x2a, 0x7d, 0xdf, 0x76, 0x03, 0x7b, 0x20, 0x00, 0x6c, 0x0d, 0x8a, 0xe1, 0x95, 0x75, 0x6e, - 0x07, 0xe7, 0x38, 0xd5, 0xb2, 0xb9, 0x10, 0x5e, 0xed, 0xda, 0xc1, 0x39, 0x5b, 0x85, 0x05, 0x1a, - 0x25, 0x4e, 0x28, 0x67, 0xca, 0x2f, 0x71, 0x40, 0xdc, 0xe9, 0xd8, 0x4a, 0x76, 0x95, 0x43, 0x8a, - 0x69, 0xba, 0xd3, 0xf1, 0x96, 0x0e, 0x17, 0x93, 0x3f, 0x11, 0xdb, 0x4d, 0x1d, 0xd0, 0xf4, 0xca, - 0x08, 0xc1, 0x3e, 0xde, 0x80, 0xaa, 0x2c, 0xe6, 0xce, 0xd9, 0x39, 0xcd, 0xb1, 0x60, 0x56, 0x08, - 0x01, 0x41, 0xa2, 0x85, 0xd0, 0x19, 0x73, 0x2b, 0x08, 0xed, 0xf1, 0x44, 0x4e, 0xa9, 0x2c, 0x20, - 0x3d, 0x01, 0xc0, 0x62, 0x2f, 0xb4, 0x47, 0xd6, 0x29, 0xe7, 0x41, 0xab, 0x28, 0x8b, 0x05, 0x64, - 0x87, 0xf3, 0x80, 0x7d, 0x0d, 0xea, 0x43, 0x1e, 0x84, 0x96, 0xdc, 0x0c, 0x1e, 0xb4, 0x4a, 0x78, - 0xf2, 0x6b, 0x02, 0xda, 0x56, 0x40, 0xf6, 0x1a, 0x80, 0x6f, 0x5f, 0x5a, 0x62, 0x21, 0xf8, 0x55, - 0xab, 0x4c, 0xbb, 0xe0, 0xdb, 0x97, 0xfd, 0xab, 0x5d, 0x7e, 0x25, 0xa8, 0xe6, 0x29, 0x0f, 0xb5, - 0x45, 0x0b, 0x24, 0x75, 0x1a, 0x7b, 0xc0, 0x34, 0xf0, 0x36, 0x0f, 0x6d, 0x67, 0x14, 0xb0, 0x0f, - 0xa0, 0x1a, 0x6a, 0xc8, 0xc8, 0x06, 0x2b, 0x11, 0x09, 0x69, 0x15, 0xcc, 0x04, 0x9e, 0x71, 0x0e, - 0xa5, 0x1d, 0xce, 0xf7, 0x9c, 0xb1, 0x13, 0xb2, 0x55, 0x28, 0x9c, 0x3a, 0x57, 0x9c, 0x88, 0x3d, - 0xb7, 0x7b, 0xcb, 0xa4, 0x4f, 0x76, 0x0f, 0x00, 0xff, 0xb0, 0xc6, 0x11, 0x35, 0xed, 0xde, 0x32, - 0xcb, 0x08, 0xdb, 0x0f, 0xec, 0x90, 0xad, 0x43, 0x71, 0xc2, 0xfd, 0x01, 0x57, 0xfb, 0xb6, 0x7b, - 0xcb, 0x54, 0x80, 0xcd, 0x22, 0x14, 0x46, 0xa2, 0x75, 0xe3, 0x8f, 0x0a, 0x50, 0xe9, 0x71, 0x37, - 0x3a, 0x65, 0x0c, 0xf2, 0x62, 0x41, 0xe4, 0xc9, 0xc2, 0xbf, 0xd9, 0x9b, 0x50, 0xc1, 0xa5, 0x0b, - 0x42, 0xdf, 0x71, 0xcf, 0x88, 0xaa, 0x37, 0xb3, 0xad, 0x8c, 0x09, 0x02, 0xdc, 0x43, 0x28, 0x6b, - 0x42, 0xce, 0x1e, 0x2b, 0xaa, 0x16, 0x7f, 0xb2, 0xdb, 0x50, 0xb2, 0xc7, 0x21, 0x0d, 0xaf, 0x8a, - 0xe0, 0xa2, 0x3d, 0x0e, 0x71, 0x68, 0x6f, 0x40, 0x75, 0x62, 0x5f, 0x8f, 0xc5, 0x59, 0x8e, 0xc8, - 0xa1, 0x6a, 0x56, 0x24, 0x0c, 0x09, 0xe2, 0x09, 0x2c, 0xe9, 0x28, 0xaa, 0xf3, 0x42, 0xd4, 0xf9, - 0xa2, 0x86, 0x2d, 0xc7, 0xf0, 0x0e, 0x34, 0x54, 0x1d, 0x9f, 0xe6, 0x83, 0x64, 0x52, 0x36, 0xeb, - 0x12, 0xac, 0x66, 0xf9, 0x00, 0x9a, 0xa7, 0x8e, 0x6b, 0x8f, 0xac, 0xc1, 0x28, 0xbc, 0xb0, 0x86, - 0x7c, 0x14, 0xda, 0x48, 0x31, 0x05, 0xb3, 0x8e, 0xf0, 0xad, 0x51, 0x78, 0xb1, 0x2d, 0xa0, 0xec, - 0x1b, 0x50, 0x3e, 0xe5, 0xdc, 0xc2, 0xc5, 0x6a, 0x95, 0x12, 0x07, 0x4f, 0xed, 0x90, 0x59, 0x3a, - 0x55, 0x7b, 0xf5, 0x0d, 0x68, 0x7a, 0xd3, 0xf0, 0xcc, 0x73, 0xdc, 0x33, 0x4b, 0xf0, 0x3b, 0xcb, - 0x19, 0x22, 0x0d, 0xe5, 0x37, 0xb3, 0x8f, 0x33, 0x66, 0x5d, 0x95, 0x09, 0xce, 0xd3, 0x1d, 0xb2, - 0xb7, 0xa1, 0x31, 0xb2, 0x83, 0xd0, 0x3a, 0xf7, 0x26, 0xd6, 0x64, 0x7a, 0xf2, 0x9c, 0x5f, 0xb7, - 0x6a, 0xb8, 0x10, 0x35, 0x01, 0xde, 0xf5, 0x26, 0x47, 0x08, 0x14, 0x94, 0x8d, 0xe3, 0xa4, 0x41, - 0xc0, 0xfd, 0xcc, 0x83, 0x9a, 0x59, 0x16, 0x10, 0xea, 0xf4, 0x33, 0x58, 0xc2, 0xed, 0x19, 0x4c, - 0x83, 0xd0, 0x1b, 0x5b, 0x82, 0x57, 0xfb, 0xc3, 0xa0, 0x55, 0x41, 0x5a, 0xfb, 0xba, 0x1c, 0xac, - 0xb6, 0xc7, 0x1b, 0xdb, 0x3c, 0x08, 0xb7, 0x10, 0xd9, 0x24, 0x5c, 0x71, 0xa1, 0x5f, 0x9b, 0x8b, - 0xc3, 0x59, 0x38, 0xfb, 0x06, 0x30, 0x7b, 0x34, 0xf2, 0x2e, 0xad, 0x80, 0x8f, 0x4e, 0x2d, 0xb9, - 0x88, 0xad, 0xfa, 0xfd, 0xcc, 0x83, 0x92, 0xd9, 0xc4, 0x92, 0x1e, 0x1f, 0x9d, 0x1e, 0x11, 0x9c, - 0x7d, 0x00, 0x78, 0x98, 0xac, 0x53, 0x6e, 0x87, 0x53, 0x9f, 0x07, 0xad, 0xc6, 0xfd, 0xdc, 0x83, - 0xfa, 0x93, 0xc5, 0x68, 0xbd, 0x10, 0xbc, 0xe9, 0x84, 0x66, 0x55, 0xe0, 0xc9, 0xef, 0x60, 0x7d, - 0x1b, 0x56, 0xd3, 0x87, 0x24, 0x88, 0x4a, 0xac, 0x8a, 0x20, 0xc6, 0xbc, 0x29, 0xfe, 0x64, 0xcb, - 0x50, 0xb8, 0xb0, 0x47, 0x53, 0x2e, 0x79, 0x3a, 0x7d, 0x7c, 0x98, 0xfd, 0x6e, 0xc6, 0xf8, 0xc3, - 0x0c, 0x54, 0x69, 0x96, 0x52, 0x16, 0x79, 0x13, 0x6a, 0x8a, 0x1a, 0xb8, 0xef, 0x7b, 0xbe, 0xe4, - 0x6a, 0x8a, 0xf2, 0x3a, 0x02, 0x26, 0x6e, 0x15, 0x85, 0x34, 0xf1, 0xb9, 0x33, 0xb6, 0xcf, 0x54, - 0xd3, 0x8a, 0x94, 0x8e, 0x24, 0x98, 0xbd, 0x17, 0xb7, 0xe7, 0x7b, 0xd3, 0x90, 0xcb, 0x3b, 0xaf, - 0x2a, 0xa7, 0x67, 0x0a, 0x58, 0xd4, 0x3a, 0x7e, 0xbd, 0x02, 0x9d, 0x1b, 0x3f, 0xcd, 0x00, 0x13, - 0xc3, 0xee, 0x7b, 0xd4, 0x80, 0xa4, 0xd0, 0xd9, 0x9a, 0x99, 0x57, 0x3e, 0x21, 0xd9, 0x17, 0x9d, - 0x10, 0x03, 0x0a, 0x34, 0xf6, 0x7c, 0xca, 0xd8, 0xa9, 0xe8, 0x07, 0xf9, 0x52, 0xae, 0x99, 0x37, - 0xfe, 0x47, 0x0e, 0x96, 0xb7, 0xe8, 0xca, 0x6e, 0x0f, 0x06, 0x7c, 0x12, 0x9d, 0x9d, 0x7b, 0x50, - 0x71, 0xbd, 0x21, 0x57, 0x14, 0x4b, 0x03, 0x03, 0x01, 0xd2, 0xc8, 0xf5, 0xdc, 0x76, 0x5c, 0x1a, - 0x38, 0x2d, 0x66, 0x19, 0x21, 0x38, 0xec, 0xb7, 0xa1, 0x31, 0xe1, 0xee, 0x50, 0x3f, 0x22, 0x24, - 0x54, 0xd5, 0x24, 0x58, 0x9e, 0x8e, 0x7b, 0x50, 0x39, 0x9d, 0x12, 0x9e, 0x60, 0x2c, 0x79, 0xa4, - 0x01, 0x90, 0xa0, 0x36, 0xf1, 0x97, 0xc9, 0x34, 0x38, 0xc7, 0xd2, 0x02, 0x96, 0x16, 0xc5, 0xb7, - 0x28, 0xba, 0x0b, 0x30, 0x9c, 0x06, 0xa1, 0x3c, 0x31, 0x0b, 0x58, 0x58, 0x16, 0x10, 0x3a, 0x31, - 0xdf, 0x84, 0xa5, 0xb1, 0x7d, 0x65, 0x21, 0xed, 0x58, 0x8e, 0x6b, 0x9d, 0x8e, 0xf0, 0xce, 0x29, - 0x22, 0x5e, 0x73, 0x6c, 0x5f, 0x7d, 0x22, 0x4a, 0xba, 0xee, 0x0e, 0xc2, 0x05, 0x5b, 0x51, 0xe2, - 0x8e, 0xcf, 0x03, 0xee, 0x5f, 0x70, 0xe4, 0x04, 0xf9, 0x48, 0xa6, 0x31, 0x09, 0x2a, 0x46, 0x34, - 0x16, 0xf3, 0x0e, 0x47, 0x03, 0x3a, 0xf6, 0x66, 0x71, 0xec, 0xb8, 0xbb, 0xe1, 0x68, 0x20, 0xee, - 0x15, 0xc1, 0x47, 0x26, 0xdc, 0xb7, 0x9e, 0x5f, 0xe2, 0x19, 0xce, 0x23, 0xdf, 0x38, 0xe2, 0xfe, - 0xb3, 0x4b, 0x71, 0xf5, 0x0f, 0x02, 0x64, 0x44, 0xf6, 0x75, 0xab, 0x82, 0x07, 0xbc, 0x34, 0x08, - 0x04, 0x0b, 0xb2, 0xaf, 0xc5, 0x21, 0x14, 0xa3, 0xb5, 0x71, 0x17, 0xf8, 0x10, 0x9b, 0x0f, 0x90, - 0xa3, 0xd6, 0x70, 0xb0, 0x6d, 0x59, 0x20, 0xfa, 0x09, 0x04, 0xd5, 0xab, 0xc1, 0x9e, 0x8e, 0xec, - 0xb3, 0x00, 0x59, 0x4a, 0xcd, 0xac, 0x4a, 0xe0, 0x8e, 0x80, 0x19, 0x9f, 0x92, 0x90, 0xa5, 0xed, - 0xad, 0x3c, 0x33, 0xe2, 0xaa, 0x47, 0x08, 0xee, 0x6b, 0xc9, 0x94, 0x5f, 0x69, 0x9b, 0x96, 0x4d, - 0xd9, 0x34, 0xe3, 0xf7, 0x32, 0x50, 0x95, 0x2d, 0xa3, 0x50, 0xc2, 0x36, 0x80, 0xa9, 0x5d, 0x0c, - 0xaf, 0x9c, 0xa1, 0x75, 0x72, 0x1d, 0xf2, 0x80, 0x88, 0x66, 0xf7, 0x96, 0xd9, 0x94, 0x65, 0xfd, - 0x2b, 0x67, 0xb8, 0x29, 0x4a, 0xd8, 0x43, 0x68, 0x26, 0xf0, 0x83, 0xd0, 0x27, 0x8a, 0xde, 0xbd, - 0x65, 0xd6, 0x35, 0xec, 0x5e, 0xe8, 0x8b, 0x33, 0x22, 0x44, 0x9e, 0x69, 0x68, 0x39, 0xee, 0x90, - 0x5f, 0x21, 0x19, 0xd5, 0xcc, 0x0a, 0xc1, 0xba, 0x02, 0xb4, 0x59, 0x87, 0xaa, 0xde, 0x9c, 0x71, - 0x06, 0x25, 0x25, 0x2f, 0xa1, 0xc0, 0x30, 0x33, 0x24, 0xb3, 0x1c, 0x46, 0x23, 0xb9, 0x0d, 0xa5, - 0xe4, 0x08, 0xcc, 0x62, 0xf8, 0xca, 0x1d, 0x1b, 0xdf, 0x83, 0xe6, 0x9e, 0x20, 0x1e, 0x57, 0x10, - 0xab, 0x94, 0xff, 0x56, 0x61, 0x41, 0x3b, 0x34, 0x65, 0x53, 0x7e, 0x89, 0x3b, 0xf7, 0xdc, 0x0b, - 0x42, 0xd9, 0x0b, 0xfe, 0x6d, 0xfc, 0x51, 0x06, 0x58, 0x27, 0x08, 0x9d, 0xb1, 0x1d, 0xf2, 0x1d, - 0x1e, 0xb1, 0x85, 0x43, 0xa8, 0x8a, 0xd6, 0xfa, 0x5e, 0x9b, 0x04, 0x32, 0x12, 0x28, 0xde, 0x95, - 0xc7, 0x78, 0xbe, 0xc2, 0x86, 0x8e, 0x4d, 0x6c, 0x3e, 0xd1, 0x80, 0x38, 0x65, 0xa1, 0xed, 0x9f, - 0xf1, 0x10, 0xc5, 0x38, 0x29, 0xef, 0x03, 0x81, 0x84, 0x00, 0xb7, 0xfe, 0x6b, 0xb0, 0x38, 0xd7, - 0x86, 0xce, 0x97, 0xcb, 0x29, 0x7c, 0x39, 0xa7, 0xf3, 0x65, 0x0b, 0x96, 0x12, 0xe3, 0x92, 0x94, - 0xb6, 0x06, 0x45, 0x71, 0x20, 0x84, 0x70, 0x90, 0x21, 0xa9, 0xf2, 0x94, 0x73, 0x21, 0x06, 0x3f, - 0x82, 0xe5, 0x53, 0xce, 0x7d, 0x3b, 0xc4, 0x42, 0x3c, 0x31, 0x62, 0x87, 0x64, 0xc3, 0x8b, 0xb2, - 0xac, 0x67, 0x87, 0x47, 0xdc, 0x17, 0x3b, 0x65, 0xfc, 0xcf, 0x0c, 0x34, 0x04, 0x07, 0xdd, 0xb7, - 0xdd, 0x6b, 0xb5, 0x4e, 0x7b, 0xa9, 0xeb, 0xf4, 0x40, 0xbb, 0x0c, 0x35, 0xec, 0x2f, 0xbb, 0x48, - 0xb9, 0xd9, 0x45, 0x62, 0xf7, 0xa1, 0x9a, 0x18, 0x6b, 0x01, 0xc7, 0x0a, 0x41, 0x34, 0xc8, 0x5f, - 0x7c, 0x19, 0xdf, 0x86, 0x66, 0x3c, 0x6c, 0xb9, 0x86, 0x0c, 0xf2, 0x82, 0x24, 0x65, 0x03, 0xf8, - 0xb7, 0xf1, 0x2f, 0x32, 0x84, 0xb8, 0xe5, 0x39, 0x91, 0x74, 0x2a, 0x10, 0x85, 0xdc, 0xab, 0x10, - 0xc5, 0xdf, 0x37, 0x4a, 0xf5, 0xbf, 0xf8, 0x64, 0xc5, 0xd1, 0x09, 0xb8, 0x3b, 0xb4, 0xec, 0xd1, - 0x08, 0x99, 0x6f, 0xc9, 0x2c, 0x8a, 0xef, 0xf6, 0x68, 0x64, 0xbc, 0x03, 0x8b, 0xda, 0xe8, 0x5e, - 0x30, 0x8f, 0x03, 0x60, 0x7b, 0x4e, 0x10, 0x1e, 0xbb, 0xc1, 0x44, 0x13, 0xdc, 0xee, 0x40, 0x59, - 0x70, 0x58, 0x31, 0x32, 0x3a, 0xb2, 0x05, 0x53, 0xb0, 0x5c, 0x31, 0xae, 0x00, 0x0b, 0xed, 0x2b, - 0x59, 0x98, 0x95, 0x85, 0xf6, 0x15, 0x16, 0x1a, 0xdf, 0x85, 0xa5, 0x44, 0x7b, 0xb2, 0xeb, 0x37, - 0xa0, 0x30, 0x0d, 0xaf, 0x3c, 0x25, 0x9a, 0x57, 0x24, 0x85, 0x08, 0x05, 0xd0, 0xa4, 0x12, 0xe3, - 0x23, 0x58, 0x3c, 0xe0, 0x97, 0xf2, 0x10, 0xab, 0x81, 0xbc, 0x0d, 0xf9, 0x97, 0x28, 0x85, 0x58, - 0x6e, 0x6c, 0x00, 0xd3, 0x2b, 0xcb, 0x5e, 0x35, 0x1d, 0x31, 0x93, 0xd0, 0x11, 0x8d, 0xb7, 0x81, - 0xf5, 0x9c, 0x33, 0x77, 0x9f, 0x07, 0x81, 0x7d, 0x16, 0x1d, 0xfb, 0x26, 0xe4, 0xc6, 0xc1, 0x99, - 0xe4, 0x51, 0xe2, 0x4f, 0xe3, 0x5b, 0xb0, 0x94, 0xc0, 0x93, 0x0d, 0xbf, 0x06, 0xe5, 0xc0, 0x39, - 0x73, 0x51, 0xb0, 0x92, 0x4d, 0xc7, 0x00, 0x63, 0x07, 0x96, 0x3f, 0xe1, 0xbe, 0x73, 0x7a, 0xfd, - 0xb2, 0xe6, 0x93, 0xed, 0x64, 0x67, 0xdb, 0xe9, 0xc0, 0xca, 0x4c, 0x3b, 0xb2, 0x7b, 0x22, 0x5f, - 0xb9, 0x93, 0x25, 0x93, 0x3e, 0x34, 0xbe, 0x97, 0xd5, 0xf9, 0x9e, 0x71, 0x0c, 0x6c, 0xcb, 0x73, - 0x5d, 0x3e, 0x08, 0x8f, 0x38, 0xf7, 0x63, 0x2b, 0x55, 0x4c, 0xab, 0x95, 0x27, 0x6b, 0x72, 0x65, - 0x67, 0x99, 0xa9, 0x24, 0x62, 0x06, 0xf9, 0x09, 0xf7, 0xc7, 0xd8, 0x70, 0xc9, 0xc4, 0xbf, 0x8d, - 0x15, 0x58, 0x4a, 0x34, 0x2b, 0xf5, 0xfa, 0xc7, 0xb0, 0xb2, 0xed, 0x04, 0x83, 0xf9, 0x0e, 0xd7, - 0xa0, 0x38, 0x99, 0x9e, 0x58, 0x49, 0xbe, 0xfc, 0x8c, 0x5f, 0x0b, 0x6d, 0x6f, 0xb6, 0x86, 0x6c, - 0xeb, 0xef, 0x64, 0x20, 0xbf, 0xdb, 0xdf, 0xdb, 0x62, 0xeb, 0x50, 0x72, 0xdc, 0x81, 0x37, 0x16, - 0x82, 0x17, 0xcd, 0x39, 0xfa, 0xbe, 0xf1, 0x80, 0xdd, 0x81, 0x32, 0xca, 0x6b, 0x42, 0xb5, 0x95, - 0xa2, 0x4f, 0x49, 0x00, 0xf6, 0xbc, 0xc1, 0x73, 0xa1, 0x53, 0xf3, 0xab, 0x89, 0xe3, 0xa3, 0xd6, - 0xac, 0x94, 0xe1, 0x3c, 0xdd, 0xf5, 0x71, 0x01, 0x69, 0xc4, 0xc6, 0x5f, 0x15, 0xa1, 0x28, 0x6f, - 0x5b, 0xba, 0xb9, 0x43, 0xe7, 0x82, 0xc7, 0x37, 0xb7, 0xf8, 0x12, 0xf2, 0x80, 0xcf, 0xc7, 0x5e, - 0x18, 0x09, 0x6c, 0xb4, 0x07, 0x55, 0x02, 0x4a, 0x91, 0x4d, 0x13, 0x1a, 0xc8, 0xc4, 0x90, 0x23, - 0xa4, 0x81, 0x7e, 0x95, 0xdf, 0x81, 0xa2, 0xba, 0xfb, 0xf3, 0x91, 0x4e, 0xb3, 0x30, 0x20, 0x69, - 0x6d, 0x1d, 0x4a, 0x03, 0x7b, 0x62, 0x0f, 0x9c, 0xf0, 0x5a, 0x32, 0x84, 0xe8, 0x5b, 0xb4, 0x3e, - 0xf2, 0x06, 0xf6, 0xc8, 0x3a, 0xb1, 0x47, 0xb6, 0x3b, 0xe0, 0x52, 0x77, 0xaf, 0x22, 0x70, 0x93, - 0x60, 0x42, 0x3f, 0x97, 0xe3, 0x54, 0x58, 0xa4, 0xc2, 0xcb, 0xd1, 0x2b, 0x34, 0x21, 0x5c, 0x7a, - 0xe3, 0xb1, 0x23, 0xb4, 0x0c, 0x12, 0xc3, 0x72, 0x66, 0x99, 0x20, 0x3b, 0x1c, 0x67, 0x2b, 0x8b, - 0x2f, 0x69, 0xe9, 0xca, 0xd4, 0x15, 0x01, 0x3f, 0x25, 0x43, 0xc2, 0xbc, 0x2c, 0x96, 0xd3, 0x64, - 0xb1, 0x77, 0x61, 0x71, 0xea, 0x06, 0x3c, 0x0c, 0x47, 0x7c, 0x18, 0x8d, 0xa5, 0x82, 0x48, 0xcd, - 0xa8, 0x40, 0x0d, 0x67, 0x03, 0x96, 0xc8, 0xe8, 0x10, 0xd8, 0xa1, 0x17, 0x9c, 0x3b, 0x81, 0x15, - 0x08, 0x0d, 0x89, 0xd4, 0xdd, 0x45, 0x2c, 0xea, 0xc9, 0x92, 0x1e, 0xa9, 0x48, 0x6b, 0x33, 0xf8, - 0x3e, 0x1f, 0x70, 0xe7, 0x82, 0x0f, 0x51, 0x4e, 0xcb, 0x99, 0x2b, 0x89, 0x3a, 0xa6, 0x2c, 0x44, - 0xa1, 0x7b, 0x3a, 0xb6, 0xa6, 0x93, 0xa1, 0x2d, 0x84, 0x95, 0x3a, 0x09, 0xc3, 0xee, 0x74, 0x7c, - 0x4c, 0x10, 0xf6, 0x18, 0x94, 0x24, 0x26, 0xe5, 0xc3, 0x46, 0x82, 0x9f, 0x09, 0x62, 0x35, 0xab, - 0x12, 0x83, 0x04, 0xc5, 0x84, 0xcc, 0xd9, 0x9c, 0x91, 0x39, 0x5b, 0x50, 0x9c, 0xf8, 0xce, 0x85, - 0x1d, 0xf2, 0xd6, 0x22, 0x31, 0x70, 0xf9, 0x29, 0x38, 0x83, 0xe3, 0x3a, 0xa1, 0x63, 0x87, 0x9e, - 0xdf, 0x62, 0x58, 0x16, 0x03, 0xd8, 0x43, 0x58, 0x44, 0x1a, 0x09, 0x42, 0x3b, 0x9c, 0x06, 0x52, - 0x02, 0x5d, 0x42, 0x62, 0x42, 0x19, 0xba, 0x87, 0x70, 0x14, 0x42, 0xd9, 0xb7, 0x60, 0x95, 0xc8, - 0x02, 0x6b, 0x48, 0xc9, 0x1a, 0x05, 0x82, 0x65, 0x5c, 0x8a, 0x25, 0x2c, 0x15, 0xf4, 0x2d, 0xe5, - 0x6b, 0x21, 0x1d, 0xbc, 0x0f, 0x6b, 0x92, 0x4c, 0xe6, 0x6a, 0xad, 0x60, 0xad, 0x65, 0x2a, 0x9e, - 0xa9, 0xb6, 0x01, 0x8b, 0x62, 0x48, 0xce, 0xc0, 0x92, 0xb5, 0xc5, 0x49, 0x58, 0x15, 0xa3, 0x47, - 0x4d, 0xa9, 0x41, 0x85, 0x26, 0x96, 0x3d, 0xe3, 0xd7, 0xec, 0x7b, 0xd0, 0x20, 0x92, 0x41, 0xf5, - 0x0a, 0x39, 0xfd, 0x3a, 0x72, 0xfa, 0x15, 0x65, 0xe1, 0x8c, 0x4a, 0x91, 0xd9, 0xd7, 0x07, 0x89, - 0x6f, 0x71, 0x1c, 0x46, 0xce, 0x29, 0x0f, 0x9d, 0x31, 0x6f, 0xad, 0x11, 0x81, 0xa9, 0x6f, 0x71, - 0x52, 0xa7, 0x13, 0x2c, 0x69, 0x11, 0x5f, 0xa0, 0x2f, 0xa4, 0xdd, 0x91, 0x17, 0x70, 0x65, 0xa2, - 0x6a, 0xdd, 0x96, 0x87, 0x50, 0x00, 0x25, 0xdb, 0x33, 0x7e, 0x96, 0xa1, 0x7b, 0x4c, 0x1e, 0xfb, - 0x40, 0xd3, 0xca, 0xe8, 0xc0, 0x5b, 0x9e, 0x3b, 0xba, 0x96, 0x3c, 0x00, 0x08, 0x74, 0xe8, 0x8e, - 0xf0, 0x10, 0x3a, 0xae, 0x8e, 0x42, 0x2c, 0xb3, 0xaa, 0x80, 0x88, 0x74, 0x0f, 0x2a, 0x93, 0xe9, - 0xc9, 0xc8, 0x19, 0x10, 0x4a, 0x8e, 0x5a, 0x21, 0x10, 0x22, 0x08, 0xb5, 0x94, 0x08, 0x81, 0x30, - 0xf2, 0x88, 0x51, 0x91, 0x30, 0x44, 0x41, 0x96, 0xcc, 0x7d, 0xe4, 0x02, 0x55, 0x13, 0xff, 0x36, - 0x36, 0x61, 0x39, 0x39, 0x68, 0x79, 0x5f, 0x3c, 0x84, 0x92, 0x64, 0x31, 0xca, 0x5e, 0x51, 0xd7, - 0x2c, 0xc8, 0x42, 0xb3, 0x8a, 0xca, 0x8d, 0xdf, 0x5e, 0x80, 0x25, 0x09, 0xdd, 0x12, 0x2b, 0xd2, - 0x9b, 0x8e, 0xc7, 0xb6, 0x9f, 0xc2, 0xbb, 0x32, 0x2f, 0xe6, 0x5d, 0xd9, 0x39, 0xde, 0x95, 0x54, - 0x58, 0x89, 0xf5, 0x25, 0x15, 0x56, 0xb1, 0x05, 0xa4, 0x43, 0xe8, 0xe6, 0xcb, 0x9a, 0x04, 0xf7, - 0xc9, 0x4c, 0x3a, 0xc7, 0x69, 0x0b, 0x29, 0x9c, 0x56, 0xe7, 0x93, 0x0b, 0x33, 0x7c, 0xf2, 0x0d, - 0xa0, 0xbd, 0x56, 0x6c, 0xbf, 0x48, 0x6a, 0x05, 0xc2, 0xa4, 0x0d, 0xf4, 0x1d, 0x68, 0xcc, 0xb2, - 0x26, 0xe2, 0x81, 0xf5, 0x14, 0xc6, 0xe4, 0x8c, 0x39, 0x5e, 0x32, 0x1a, 0x72, 0x59, 0x32, 0x26, - 0x67, 0xcc, 0xf7, 0xb0, 0x44, 0xe1, 0x77, 0x00, 0xa8, 0x6f, 0xa4, 0x75, 0x40, 0x5a, 0x7f, 0x3b, - 0xb9, 0x17, 0xfa, 0xaa, 0x6f, 0x88, 0x8f, 0xa9, 0xcf, 0x91, 0xf8, 0xcb, 0x58, 0x13, 0xe9, 0xfe, - 0x19, 0xd4, 0xbd, 0x09, 0x77, 0xad, 0x98, 0x45, 0x54, 0xb0, 0xa9, 0xb7, 0x5e, 0xd0, 0x54, 0x57, - 0xe1, 0x9a, 0x35, 0x51, 0x37, 0xfa, 0x64, 0xfb, 0xb4, 0xf0, 0x5c, 0x6b, 0xad, 0xfa, 0x25, 0x5a, - 0xab, 0x63, 0xe5, 0xe8, 0xdb, 0xf8, 0xfb, 0x19, 0xa8, 0x68, 0xc3, 0x66, 0x2b, 0xb0, 0xb8, 0x75, - 0x78, 0x78, 0xd4, 0x31, 0xdb, 0xfd, 0xee, 0x27, 0x1d, 0x6b, 0x6b, 0xef, 0xb0, 0xd7, 0x69, 0xde, - 0x12, 0xe0, 0xbd, 0xc3, 0xad, 0xf6, 0x9e, 0xb5, 0x73, 0x68, 0x6e, 0x29, 0x70, 0x86, 0xad, 0x02, - 0x33, 0x3b, 0xfb, 0x87, 0xfd, 0x4e, 0x02, 0x9e, 0x65, 0x4d, 0xa8, 0x6e, 0x9a, 0x9d, 0xf6, 0xd6, - 0xae, 0x84, 0xe4, 0xd8, 0x32, 0x34, 0x77, 0x8e, 0x0f, 0xb6, 0xbb, 0x07, 0x4f, 0xad, 0xad, 0xf6, - 0xc1, 0x56, 0x67, 0xaf, 0xb3, 0xdd, 0xcc, 0xb3, 0x1a, 0x94, 0xdb, 0x9b, 0xed, 0x83, 0xed, 0xc3, - 0x83, 0xce, 0x76, 0xb3, 0x60, 0xfc, 0x0a, 0x94, 0xe3, 0x89, 0x56, 0xa0, 0x78, 0x7c, 0xf0, 0xec, - 0xe0, 0xf0, 0xd3, 0x83, 0xe6, 0x2d, 0x56, 0x86, 0x02, 0xf6, 0xdf, 0xcc, 0x30, 0x80, 0x05, 0xea, - 0xb3, 0x99, 0x65, 0x25, 0xc8, 0x6f, 0x1e, 0xf6, 0x77, 0x9b, 0x39, 0xe3, 0xcf, 0x33, 0xb0, 0x82, - 0x53, 0x1e, 0xce, 0x32, 0x81, 0xfb, 0x50, 0x19, 0x78, 0xde, 0x44, 0x28, 0x48, 0xb1, 0x20, 0xa0, - 0x83, 0xc4, 0x01, 0x27, 0x9e, 0x7b, 0xea, 0xf9, 0x03, 0x2e, 0x79, 0x00, 0x20, 0x68, 0x47, 0x40, - 0x04, 0x0d, 0x4a, 0x22, 0x26, 0x0c, 0x62, 0x01, 0x15, 0x82, 0x11, 0xca, 0x2a, 0x2c, 0x9c, 0xf8, - 0xdc, 0x1e, 0x9c, 0xcb, 0xd3, 0x2f, 0xbf, 0xd8, 0xd7, 0x63, 0xd5, 0x7d, 0x20, 0x68, 0x6a, 0xc4, - 0x87, 0x78, 0x04, 0x4a, 0x66, 0x43, 0xc2, 0xb7, 0x24, 0x58, 0x5c, 0x22, 0xf6, 0x89, 0xed, 0x0e, - 0x3d, 0x97, 0x0f, 0xa5, 0x86, 0x10, 0x03, 0x8c, 0x23, 0x58, 0x9d, 0x9d, 0x9f, 0xe4, 0x17, 0x1f, - 0x68, 0xfc, 0x82, 0x04, 0xf6, 0xf5, 0x9b, 0x49, 0x41, 0xe3, 0x1d, 0xff, 0x30, 0x0f, 0x79, 0x21, - 0xc0, 0xdd, 0x28, 0xeb, 0xe9, 0x12, 0x79, 0x6e, 0xce, 0x6b, 0x83, 0x16, 0x02, 0xba, 0xd9, 0xc9, - 0x0c, 0x55, 0x46, 0x08, 0xde, 0xe8, 0x51, 0xb1, 0xcf, 0x07, 0x17, 0xd2, 0x0e, 0x45, 0xc5, 0x26, - 0x1f, 0x5c, 0xa0, 0x2a, 0x64, 0x87, 0x54, 0x97, 0xce, 0x7b, 0x31, 0xb0, 0x43, 0xac, 0x29, 0x8b, - 0xb0, 0x5e, 0x31, 0x2a, 0xc2, 0x5a, 0x2d, 0x28, 0x3a, 0xee, 0x89, 0x37, 0x75, 0x87, 0x78, 0xbc, - 0x4b, 0xa6, 0xfa, 0x44, 0x27, 0x11, 0x72, 0x22, 0x71, 0x7f, 0xd0, 0x69, 0x2e, 0x09, 0x40, 0x5f, - 0xdc, 0x20, 0xef, 0x41, 0x39, 0xb8, 0x76, 0x07, 0xfa, 0x19, 0x5e, 0x96, 0xeb, 0x23, 0x66, 0xbf, - 0xd1, 0xbb, 0x76, 0x07, 0x78, 0x62, 0x4b, 0x81, 0xfc, 0x8b, 0xbd, 0x0f, 0xa5, 0xc8, 0x5c, 0x4b, - 0x1c, 0xf8, 0xb6, 0x5e, 0x43, 0xd9, 0x68, 0x49, 0x2b, 0x8e, 0x50, 0xd9, 0x23, 0x58, 0x40, 0x9b, - 0x6a, 0xd0, 0xaa, 0x62, 0x25, 0x25, 0xa6, 0x8b, 0x61, 0xa0, 0x7f, 0x86, 0x0f, 0xd1, 0xbe, 0x6a, - 0x4a, 0xb4, 0xf5, 0x67, 0x50, 0x4b, 0xb4, 0xa5, 0xeb, 0xbe, 0x35, 0xd2, 0x7d, 0xdf, 0xd2, 0x75, - 0xdf, 0xf8, 0x26, 0x90, 0xd5, 0x74, 0x5d, 0xf8, 0xd7, 0xa0, 0xa4, 0xa6, 0x22, 0xce, 0x9f, 0x3c, - 0x3b, 0x56, 0xef, 0xb3, 0x83, 0xad, 0xe6, 0x2d, 0xd6, 0x80, 0x4a, 0x7b, 0x0b, 0x8f, 0x34, 0x02, - 0x32, 0x02, 0xe5, 0xa8, 0xdd, 0xeb, 0x45, 0x90, 0xac, 0xb1, 0x03, 0xcd, 0xd9, 0x91, 0x0a, 0x9a, - 0x0c, 0x15, 0x4c, 0x5a, 0x9c, 0x63, 0x80, 0xd0, 0x6c, 0xc8, 0x88, 0x4c, 0xe2, 0x33, 0x7d, 0x18, - 0xef, 0x43, 0x53, 0xdc, 0x6b, 0x62, 0xa9, 0x02, 0xcd, 0x72, 0x3b, 0x12, 0x22, 0x99, 0x6e, 0x75, - 0x2e, 0x99, 0x15, 0x82, 0x61, 0x57, 0xc6, 0x07, 0xb0, 0xa8, 0x55, 0x8b, 0x35, 0x51, 0x71, 0x57, - 0xce, 0x6a, 0xa2, 0xa8, 0x77, 0x50, 0x89, 0xb1, 0x06, 0x2b, 0xe2, 0xb3, 0x73, 0xc1, 0xdd, 0xb0, - 0x37, 0x3d, 0x21, 0x57, 0xa1, 0xe3, 0xb9, 0x42, 0x1f, 0x29, 0x47, 0x25, 0x37, 0x13, 0xf9, 0x86, - 0x54, 0x5a, 0xb3, 0x48, 0x1a, 0xeb, 0x5a, 0x0f, 0x58, 0x71, 0x03, 0xff, 0x4d, 0x28, 0xaf, 0xe5, - 0x08, 0x24, 0x96, 0xf5, 0xa8, 0xd3, 0x31, 0xad, 0xc3, 0x83, 0xbd, 0xee, 0x81, 0x60, 0x94, 0x62, - 0x59, 0x11, 0xb0, 0xb3, 0x83, 0x90, 0x8c, 0xd1, 0x84, 0xfa, 0x53, 0x1e, 0x76, 0xdd, 0x53, 0x4f, - 0xb9, 0xc5, 0xfe, 0xb2, 0x00, 0x8d, 0x08, 0x14, 0x2b, 0xbf, 0x17, 0xdc, 0x0f, 0x1c, 0xcf, 0x45, - 0x39, 0xb6, 0x6c, 0xaa, 0x4f, 0x71, 0xbb, 0x39, 0x43, 0xee, 0x86, 0x4e, 0x78, 0x6d, 0x25, 0x2c, - 0x65, 0x75, 0x05, 0x96, 0xb7, 0xe8, 0x32, 0x14, 0xec, 0x91, 0x63, 0x2b, 0x0f, 0x2b, 0x7d, 0x08, - 0xe8, 0xc0, 0x1b, 0x79, 0x3e, 0x8a, 0xac, 0x65, 0x93, 0x3e, 0xd8, 0x63, 0x58, 0x16, 0xa2, 0xb3, - 0x6e, 0xbe, 0x44, 0xfe, 0x41, 0x46, 0x3b, 0xe6, 0x4e, 0xc7, 0x47, 0xb1, 0x09, 0x53, 0x94, 0x88, - 0xbb, 0x53, 0xd4, 0x90, 0xc2, 0x52, 0x54, 0x81, 0xb4, 0xb0, 0x45, 0x77, 0x3a, 0x6e, 0x63, 0x49, - 0x84, 0xff, 0x04, 0x56, 0x04, 0x7e, 0x24, 0x5e, 0x45, 0x35, 0x1a, 0x58, 0x43, 0x34, 0xd6, 0x95, - 0x65, 0x51, 0x9d, 0x3b, 0x50, 0xa6, 0x51, 0x89, 0x1d, 0x2f, 0x90, 0xf4, 0x8d, 0x43, 0xe1, 0x7e, - 0x30, 0xe7, 0x0c, 0x5d, 0x20, 0x41, 0x60, 0xc6, 0x19, 0xaa, 0xb9, 0x53, 0x4b, 0xb3, 0xee, 0xd4, - 0x27, 0xb0, 0x72, 0x22, 0x48, 0xf0, 0x9c, 0xdb, 0x43, 0xee, 0x5b, 0x31, 0x61, 0x93, 0x96, 0xb1, - 0x24, 0x0a, 0x77, 0xb1, 0x2c, 0x3a, 0x07, 0x42, 0xce, 0x11, 0x6c, 0x81, 0x0f, 0xad, 0xd0, 0xb3, - 0x50, 0xfc, 0x41, 0x06, 0x53, 0x32, 0x6b, 0x04, 0xee, 0x7b, 0x5b, 0x02, 0x98, 0xc4, 0x3b, 0xf3, - 0xed, 0xc9, 0xb9, 0xd4, 0x03, 0x22, 0xbc, 0xa7, 0x02, 0xc8, 0x5e, 0x83, 0xa2, 0x20, 0x79, 0x97, - 0x93, 0xcf, 0x8a, 0x24, 0x6d, 0x05, 0x62, 0x6f, 0xc1, 0x02, 0xf6, 0x11, 0xb4, 0x9a, 0x48, 0xef, - 0xd5, 0x98, 0x91, 0x3b, 0xae, 0x29, 0xcb, 0x84, 0x30, 0x39, 0xf5, 0x1d, 0xe2, 0x32, 0x65, 0x13, - 0xff, 0x66, 0xdf, 0xd7, 0x58, 0xd6, 0x12, 0xd6, 0x55, 0xf2, 0xc0, 0x0c, 0xa5, 0xdd, 0xc4, 0xbd, - 0xbe, 0x52, 0x66, 0xf4, 0x83, 0x7c, 0xa9, 0xd2, 0xac, 0x1a, 0xdf, 0x81, 0x02, 0xad, 0x8e, 0x20, - 0x42, 0x5c, 0xbb, 0x8c, 0x24, 0x42, 0x84, 0xb6, 0xa0, 0xe8, 0xf2, 0xf0, 0xd2, 0xf3, 0x9f, 0x2b, - 0x5b, 0xb2, 0xfc, 0x34, 0x7e, 0x8c, 0x46, 0x90, 0xc8, 0x51, 0x4e, 0xfa, 0x9c, 0x20, 0x0f, 0xda, - 0xde, 0xe0, 0xdc, 0x96, 0x76, 0x99, 0x12, 0x02, 0x7a, 0xe7, 0xf6, 0x1c, 0x79, 0x64, 0xe7, 0x7d, - 0xe5, 0x6f, 0x41, 0x5d, 0xb9, 0xe6, 0x03, 0x6b, 0xc4, 0x4f, 0x43, 0x49, 0xee, 0x55, 0xe9, 0x97, - 0x0f, 0xf6, 0xf8, 0x69, 0x68, 0xec, 0xc3, 0xa2, 0x24, 0xc8, 0xc3, 0x09, 0x57, 0x5d, 0x7f, 0x37, - 0x4d, 0x9e, 0xae, 0x3c, 0x59, 0x4a, 0x5e, 0xb4, 0x14, 0x72, 0x90, 0x10, 0xb2, 0x8d, 0x8f, 0x81, - 0xe9, 0xd7, 0xb0, 0x6c, 0x4f, 0x4a, 0xb5, 0xca, 0x04, 0xaf, 0x3c, 0x59, 0x91, 0xec, 0xec, 0x0c, - 0xc5, 0xea, 0x04, 0xd3, 0xc1, 0x40, 0x85, 0x4c, 0x94, 0x4c, 0xf5, 0x69, 0xfc, 0x49, 0x06, 0x96, - 0xb0, 0x31, 0xa5, 0x0f, 0x48, 0x26, 0xfb, 0x73, 0x0f, 0x52, 0xec, 0x8f, 0x2e, 0xfb, 0xd0, 0xc7, - 0x97, 0x37, 0x7a, 0xe6, 0xe7, 0x8c, 0x9e, 0x5f, 0x87, 0xe6, 0x90, 0x8f, 0x1c, 0x8c, 0x9e, 0x51, - 0xa2, 0x04, 0x69, 0x00, 0x0d, 0x05, 0x57, 0x4a, 0xdc, 0x3f, 0xcd, 0xc0, 0x22, 0x49, 0x2a, 0xa8, - 0x0e, 0xcb, 0x85, 0xfa, 0x48, 0xe9, 0x7f, 0x92, 0x55, 0xc9, 0x39, 0xc5, 0x37, 0x38, 0x42, 0x09, - 0x79, 0xf7, 0x96, 0xd4, 0x0b, 0x25, 0x94, 0x7d, 0x88, 0x3a, 0x8c, 0x6b, 0x21, 0x30, 0x25, 0x1a, - 0x27, 0xb9, 0x29, 0xbb, 0xb7, 0x50, 0xc1, 0x71, 0x11, 0xb4, 0x59, 0x12, 0x0a, 0xa9, 0x00, 0x1b, - 0x3b, 0x50, 0x4b, 0x74, 0x93, 0xb0, 0xcc, 0x56, 0xc9, 0x32, 0x3b, 0xe7, 0xfd, 0xc8, 0xce, 0x7b, - 0x3f, 0xfe, 0x6e, 0x1e, 0x98, 0x20, 0xa9, 0x99, 0x5d, 0x9b, 0x71, 0x1d, 0x66, 0xe7, 0x5c, 0x87, - 0x8f, 0x81, 0x69, 0x08, 0xca, 0xa3, 0x99, 0x8b, 0x3c, 0x9a, 0xcd, 0x18, 0x57, 0x3a, 0x34, 0x1f, - 0xc3, 0xb2, 0x14, 0x68, 0x23, 0x5f, 0x21, 0x9a, 0xdc, 0x68, 0x7f, 0x18, 0x49, 0xb6, 0xca, 0x67, - 0x88, 0xe6, 0x37, 0xe5, 0x36, 0x0c, 0xec, 0x50, 0x5a, 0xaa, 0xd0, 0x6d, 0xd8, 0xb3, 0xe7, 0x4c, - 0xdf, 0x0b, 0x2f, 0xa5, 0x82, 0xe2, 0x1c, 0x15, 0x68, 0x86, 0x93, 0x52, 0xd2, 0x70, 0x62, 0x40, - 0x4d, 0x39, 0x07, 0x29, 0x26, 0x82, 0xa4, 0xb7, 0x8a, 0xf4, 0x10, 0x62, 0x5c, 0xc4, 0x03, 0x68, - 0x2a, 0xeb, 0x46, 0x64, 0x9a, 0x21, 0x7f, 0xbf, 0x34, 0x8e, 0x6d, 0x29, 0x03, 0x4d, 0xc2, 0x10, - 0x5e, 0x99, 0x31, 0x84, 0xbf, 0x0b, 0x8b, 0x81, 0x20, 0x22, 0x6b, 0xea, 0xca, 0xe0, 0x1c, 0x3e, - 0x44, 0xd5, 0xa9, 0x64, 0x36, 0xb1, 0xe0, 0x38, 0x86, 0xcf, 0x9b, 0x1d, 0x6a, 0xf3, 0x66, 0x07, - 0xf6, 0x7e, 0xec, 0x47, 0x0b, 0xce, 0x9d, 0x31, 0x5e, 0xdc, 0x71, 0x20, 0x8b, 0x5c, 0xe0, 0xde, - 0xb9, 0x33, 0x36, 0x95, 0xd3, 0x56, 0x7c, 0x18, 0xff, 0x39, 0x03, 0x4d, 0x41, 0x07, 0x09, 0x3a, - 0xff, 0x15, 0xc0, 0x13, 0xf9, 0x8a, 0x64, 0x5e, 0x11, 0xb8, 0x8a, 0xca, 0xbf, 0x03, 0x48, 0xb6, - 0x96, 0xd0, 0x13, 0x25, 0x91, 0xb7, 0x92, 0x44, 0x1e, 0x33, 0xb2, 0xdd, 0x5b, 0xa4, 0x00, 0x08, - 0x48, 0x9a, 0xff, 0x32, 0x9f, 0xe2, 0xbf, 0xd4, 0x8e, 0xc2, 0x2e, 0xc0, 0x33, 0x7e, 0xbd, 0xe7, - 0x0d, 0x50, 0x43, 0xbb, 0x0b, 0x20, 0x08, 0xf2, 0xd4, 0x1e, 0x3b, 0xd2, 0xba, 0x52, 0x30, 0xcb, - 0xcf, 0xf9, 0xf5, 0x0e, 0x02, 0xc4, 0x6e, 0x88, 0xe2, 0xf8, 0x3c, 0x14, 0xcc, 0xd2, 0x73, 0x7e, - 0x4d, 0x87, 0xc1, 0x82, 0xda, 0x33, 0x7e, 0xbd, 0xcd, 0x49, 0x5c, 0xf3, 0x7c, 0x41, 0x09, 0xbe, - 0x7d, 0x29, 0xe4, 0xb3, 0x84, 0xef, 0xb1, 0xe2, 0xdb, 0x97, 0xcf, 0xf8, 0xb5, 0xf2, 0x83, 0x16, - 0x45, 0xf9, 0xc8, 0x1b, 0xc8, 0x1b, 0x48, 0x45, 0x51, 0xc4, 0x83, 0x32, 0x17, 0x9e, 0xe3, 0xdf, - 0xc6, 0x1f, 0x67, 0xa0, 0x26, 0xc6, 0x8f, 0x0c, 0x4e, 0xac, 0xbb, 0x0a, 0xc6, 0xc9, 0xc4, 0xc1, - 0x38, 0x4f, 0x24, 0x7f, 0x20, 0x6e, 0x99, 0xbd, 0x99, 0x5b, 0xe2, 0x02, 0x13, 0xab, 0x7c, 0x0f, - 0xca, 0x74, 0xb6, 0xc4, 0x61, 0xcd, 0x25, 0x76, 0x29, 0x31, 0x21, 0xb3, 0x84, 0x68, 0xcf, 0xc8, - 0xf7, 0xaf, 0x19, 0xd8, 0x68, 0x89, 0xcb, 0x7e, 0x64, 0x56, 0x4b, 0xd9, 0x86, 0x42, 0x9a, 0x1b, - 0xf9, 0x18, 0x2a, 0x1a, 0x4d, 0xa1, 0x35, 0x2e, 0x1a, 0x3c, 0x11, 0x60, 0x92, 0x68, 0x12, 0xb3, - 0xdf, 0xbd, 0x65, 0xd6, 0x06, 0x3a, 0x60, 0x73, 0x01, 0xf2, 0xa2, 0x92, 0xf1, 0x11, 0x2c, 0x6a, - 0xcd, 0x92, 0x36, 0x9a, 0x36, 0xa6, 0x4c, 0xda, 0x98, 0xfe, 0x59, 0x06, 0x96, 0x65, 0x6d, 0x0c, - 0xdc, 0x72, 0xc4, 0x75, 0xbd, 0x1f, 0x9c, 0xb1, 0x5f, 0x81, 0x9a, 0x68, 0xdd, 0xf2, 0xf9, 0x99, - 0x13, 0x84, 0x5c, 0x79, 0x2e, 0x52, 0x0e, 0x87, 0xe0, 0xda, 0x02, 0xd5, 0x94, 0x98, 0xec, 0x23, - 0xa8, 0x60, 0x55, 0xd2, 0x97, 0xe5, 0xb6, 0xb4, 0xe6, 0x2b, 0xd2, 0x50, 0x77, 0x6f, 0x99, 0x10, - 0x44, 0x5f, 0x9b, 0x65, 0x28, 0x86, 0xbe, 0x73, 0x76, 0xc6, 0x7d, 0x63, 0x35, 0x1a, 0x9a, 0x38, - 0x69, 0xbc, 0x17, 0xf2, 0x89, 0x10, 0x82, 0x8c, 0xff, 0x9a, 0x81, 0x8a, 0x3c, 0x3b, 0x3f, 0xb7, - 0xbb, 0x62, 0x5d, 0x8b, 0x3c, 0x24, 0xd5, 0x38, 0x0e, 0x34, 0x7c, 0x07, 0x1a, 0x63, 0x21, 0x10, - 0x09, 0x81, 0x3d, 0xe1, 0xab, 0xa8, 0x2b, 0xb0, 0x94, 0x47, 0x36, 0x60, 0x09, 0xc5, 0x93, 0xc0, - 0x0a, 0x9d, 0x91, 0xa5, 0x0a, 0x65, 0x94, 0xdf, 0x22, 0x15, 0xf5, 0x9d, 0xd1, 0xbe, 0x2c, 0x10, - 0xb7, 0x74, 0x10, 0xda, 0x67, 0x5c, 0x8a, 0xbe, 0xf4, 0x61, 0xb4, 0x60, 0x75, 0x46, 0x56, 0x57, - 0x7a, 0xc6, 0x4f, 0xeb, 0xb0, 0x36, 0x57, 0x24, 0xf5, 0x8d, 0xc8, 0x46, 0x3f, 0x72, 0xc6, 0x27, - 0x5e, 0x64, 0x0a, 0xcb, 0x68, 0x36, 0xfa, 0x3d, 0x51, 0xa2, 0x4c, 0x61, 0x1c, 0x56, 0x14, 0x41, - 0xa0, 0x2d, 0x2b, 0x12, 0xe7, 0xb3, 0x28, 0x6c, 0xbe, 0x97, 0x64, 0x54, 0xb3, 0xdd, 0x29, 0xb8, - 0x7e, 0xfd, 0x2d, 0x4d, 0xe6, 0x60, 0x01, 0x3b, 0x85, 0x56, 0x44, 0x77, 0x52, 0x3e, 0xd2, 0x74, - 0x13, 0xd1, 0xd3, 0x37, 0x5e, 0xd2, 0x53, 0xc2, 0x48, 0x62, 0xae, 0x2a, 0x72, 0xa5, 0xc6, 0xa2, - 0x7e, 0x2e, 0xe0, 0x75, 0xd5, 0x0f, 0xca, 0x3a, 0xf3, 0xbd, 0xe5, 0x5f, 0x69, 0x5e, 0x68, 0xfc, - 0x49, 0x76, 0x79, 0x47, 0x36, 0x1c, 0x15, 0xe9, 0xfd, 0x9e, 0xc3, 0xea, 0xa5, 0xed, 0x84, 0x6a, - 0x7e, 0x9a, 0x5a, 0x54, 0xc0, 0xfe, 0x9e, 0xbc, 0xa4, 0xbf, 0x4f, 0xa9, 0x72, 0x42, 0xfa, 0x5b, - 0xbe, 0x9c, 0x07, 0x06, 0xeb, 0xff, 0x31, 0x0b, 0xf5, 0x64, 0x2b, 0xe2, 0x50, 0x4b, 0x3e, 0xa4, - 0xe4, 0x09, 0x29, 0x8f, 0x4b, 0x13, 0xed, 0x01, 0xc9, 0x11, 0xf3, 0xc6, 0xe3, 0x6c, 0x8a, 0xf1, - 0x58, 0xb7, 0xd9, 0xe6, 0x5e, 0xe6, 0xdb, 0xca, 0xbf, 0x92, 0x6f, 0xab, 0x90, 0xe6, 0xdb, 0xba, - 0xd9, 0x21, 0xb2, 0xf0, 0x73, 0x39, 0x44, 0x8a, 0x37, 0x3b, 0x44, 0xd6, 0xff, 0x2a, 0x03, 0x6c, - 0x9e, 0x52, 0xd9, 0x53, 0xb2, 0x93, 0xbb, 0x7c, 0x24, 0xb9, 0xd8, 0x37, 0x5f, 0x8d, 0xda, 0xd5, - 0x06, 0xa9, 0xda, 0xec, 0x11, 0x2c, 0xe9, 0x71, 0xc1, 0xba, 0xaa, 0x52, 0x33, 0x99, 0x5e, 0x14, - 0x2b, 0xb4, 0x9a, 0x63, 0x2f, 0xff, 0x52, 0xc7, 0x5e, 0xe1, 0xa5, 0x8e, 0xbd, 0x85, 0xa4, 0x63, - 0x6f, 0xfd, 0x6f, 0x67, 0x60, 0x29, 0x85, 0xa8, 0xbe, 0xba, 0x39, 0x0b, 0x5a, 0x48, 0xb0, 0x98, - 0xac, 0xa4, 0x05, 0x8d, 0xbb, 0xac, 0xff, 0x04, 0x6a, 0x89, 0x43, 0xf4, 0xd5, 0x75, 0x3f, 0xab, - 0x68, 0x11, 0x29, 0xeb, 0x8a, 0xd6, 0xfa, 0xff, 0xcd, 0x01, 0x9b, 0x3f, 0xc7, 0xbf, 0xcc, 0x21, - 0xcc, 0x2f, 0x52, 0x6e, 0x7e, 0x91, 0xfe, 0xff, 0xdd, 0x2b, 0xef, 0xc2, 0xa2, 0xcc, 0x65, 0xd0, - 0x9c, 0x22, 0x44, 0x28, 0xcd, 0xa8, 0x40, 0x8d, 0xe2, 0x3b, 0xb3, 0x3e, 0xd5, 0x52, 0x22, 0x7c, - 0x5b, 0xbb, 0x58, 0x67, 0x5c, 0xab, 0xc7, 0xb0, 0x60, 0xbb, 0x83, 0x73, 0xcf, 0x47, 0x19, 0xbf, - 0xfe, 0xe4, 0x57, 0xbf, 0x34, 0x6b, 0xdd, 0x68, 0x63, 0x7d, 0xbc, 0xcd, 0x4d, 0xd9, 0x98, 0xf1, - 0x1e, 0x54, 0x34, 0x30, 0x3a, 0x0a, 0xba, 0xfb, 0x9b, 0x87, 0xcd, 0x5b, 0xac, 0x06, 0x65, 0xb3, - 0xb3, 0x75, 0xf8, 0x49, 0xc7, 0xec, 0x6c, 0x37, 0x33, 0xac, 0x04, 0xf9, 0xbd, 0xc3, 0x5e, 0xbf, - 0x99, 0x35, 0xd6, 0xa1, 0x25, 0x5b, 0x9c, 0x37, 0x1a, 0xfe, 0x34, 0x1f, 0xe9, 0xeb, 0x58, 0x28, - 0xc5, 0xf3, 0x6f, 0x41, 0x55, 0xbf, 0xf6, 0x24, 0x45, 0xcc, 0xf8, 0xe5, 0x84, 0x60, 0xee, 0x69, - 0x7c, 0x63, 0x0b, 0xc8, 0xdb, 0x32, 0x8c, 0xaa, 0x91, 0x2c, 0xf3, 0x02, 0xf3, 0x3c, 0x8a, 0x69, - 0x09, 0x32, 0xfc, 0x6b, 0x50, 0x4f, 0x5a, 0xd0, 0xa4, 0xd0, 0x99, 0x26, 0xa7, 0x8a, 0xda, 0x09, - 0x93, 0x1a, 0xfb, 0x3e, 0x34, 0x67, 0x2d, 0x70, 0x32, 0xca, 0xf5, 0x86, 0xfa, 0x0d, 0x27, 0x69, - 0x94, 0x63, 0xbb, 0xb0, 0x9c, 0x76, 0xf1, 0x23, 0x7d, 0xdc, 0xac, 0xa0, 0xb0, 0xf9, 0xcb, 0x9d, - 0x7d, 0x57, 0x1a, 0x5a, 0x0b, 0x69, 0xee, 0x2a, 0x6d, 0xb1, 0x37, 0xe8, 0x3f, 0xcd, 0xe4, 0x7a, - 0x01, 0x10, 0xc3, 0x58, 0x13, 0xaa, 0x87, 0x47, 0x9d, 0x03, 0x6b, 0x6b, 0xb7, 0x7d, 0x70, 0xd0, - 0xd9, 0x6b, 0xde, 0x62, 0x0c, 0xea, 0xe8, 0x67, 0xda, 0x8e, 0x60, 0x19, 0x01, 0x93, 0x06, 0x6f, - 0x05, 0xcb, 0xb2, 0x65, 0x68, 0x76, 0x0f, 0x66, 0xa0, 0x39, 0xd6, 0x82, 0xe5, 0xa3, 0x0e, 0xb9, - 0xa6, 0x12, 0xed, 0xe6, 0x85, 0x30, 0x29, 0xa7, 0x2b, 0x84, 0x49, 0xca, 0xc9, 0x91, 0xe7, 0x40, - 0xc9, 0x58, 0xbf, 0x9b, 0x81, 0x95, 0x99, 0x82, 0x38, 0xd2, 0x9a, 0x24, 0xac, 0xa4, 0x6c, 0x55, - 0x45, 0xa0, 0x3a, 0x4d, 0xef, 0xc2, 0x62, 0xa4, 0x74, 0xce, 0x70, 0xc8, 0x66, 0x54, 0xa0, 0x90, - 0x1f, 0xc1, 0x92, 0xa6, 0xbb, 0xce, 0xf0, 0x0a, 0xa6, 0x15, 0xc9, 0x0a, 0xc6, 0x5a, 0x14, 0xd1, - 0x3a, 0x33, 0xea, 0x21, 0x25, 0xfa, 0xe8, 0x05, 0xb1, 0x1d, 0x3a, 0x39, 0x5e, 0xf5, 0xc9, 0x1e, - 0xcf, 0x10, 0x42, 0x72, 0xb4, 0xfa, 0x86, 0xab, 0xee, 0x7f, 0x7f, 0x01, 0xd8, 0xc7, 0x53, 0xee, - 0x5f, 0x63, 0x24, 0x75, 0xf0, 0xb2, 0xd0, 0x22, 0xa5, 0xa0, 0x65, 0x5f, 0x29, 0x5b, 0x22, 0x2d, - 0x5b, 0x21, 0xff, 0xf2, 0x6c, 0x85, 0xc2, 0xcb, 0xb2, 0x15, 0xde, 0x84, 0x9a, 0x73, 0xe6, 0x7a, - 0x82, 0x15, 0x0a, 0x29, 0x29, 0x68, 0x2d, 0xdc, 0xcf, 0x3d, 0xa8, 0x9a, 0x55, 0x09, 0x14, 0x32, - 0x52, 0xc0, 0x3e, 0x8a, 0x91, 0xf8, 0xf0, 0x0c, 0x33, 0x6b, 0x74, 0x26, 0xd8, 0x19, 0x9e, 0x71, - 0xa9, 0x8f, 0xa2, 0x85, 0x46, 0x55, 0x16, 0xf0, 0x80, 0xbd, 0x05, 0xf5, 0xc0, 0x9b, 0x0a, 0xa1, - 0x53, 0x2d, 0x03, 0x59, 0xaa, 0xab, 0x04, 0x3d, 0x52, 0x6e, 0x89, 0xa5, 0x69, 0xc0, 0xad, 0xb1, - 0x13, 0x04, 0x42, 0x54, 0x18, 0x78, 0x6e, 0xe8, 0x7b, 0x23, 0x69, 0x7c, 0x5e, 0x9c, 0x06, 0x7c, - 0x9f, 0x4a, 0xb6, 0xa8, 0x80, 0x7d, 0x3b, 0x1e, 0xd2, 0xc4, 0x76, 0xfc, 0xa0, 0x05, 0x38, 0x24, - 0x35, 0x53, 0x94, 0xed, 0x6c, 0xc7, 0x8f, 0xc6, 0x22, 0x3e, 0x82, 0x99, 0x2c, 0x8a, 0xca, 0x6c, - 0x16, 0xc5, 0x8f, 0xd2, 0xb3, 0x28, 0x6a, 0xd8, 0xf4, 0x63, 0xd9, 0xf4, 0xfc, 0x16, 0x7f, 0xa9, - 0x64, 0x8a, 0xf9, 0xe4, 0x90, 0xfa, 0x97, 0x49, 0x0e, 0x69, 0xa4, 0x25, 0x87, 0xbc, 0x07, 0x15, - 0x0c, 0xdb, 0xb7, 0xce, 0x1d, 0x37, 0x54, 0xc6, 0xf4, 0xa6, 0x1e, 0xd7, 0xbf, 0x2b, 0xd4, 0x7a, - 0xf0, 0xd5, 0x9f, 0xc1, 0x7c, 0x9e, 0xc6, 0xe2, 0x2f, 0x31, 0x4f, 0x43, 0xa6, 0x17, 0x6c, 0x40, - 0x49, 0xed, 0x13, 0x63, 0x90, 0x3f, 0xf5, 0xbd, 0xb1, 0x32, 0x32, 0x8a, 0xbf, 0x59, 0x1d, 0xb2, - 0xa1, 0x27, 0x2b, 0x67, 0x43, 0xcf, 0xf8, 0x4d, 0xa8, 0x68, 0xa4, 0xc6, 0xde, 0x20, 0x73, 0x86, - 0x90, 0xdb, 0xa5, 0xbe, 0x4e, 0xab, 0x58, 0x96, 0xd0, 0xee, 0x50, 0xf0, 0x9b, 0xa1, 0xe3, 0x73, - 0xcc, 0xa8, 0xb2, 0x7c, 0x7e, 0xc1, 0xfd, 0x40, 0x19, 0x7d, 0x9b, 0x51, 0x81, 0x49, 0x70, 0xe3, - 0x6f, 0xc0, 0x52, 0x62, 0x6f, 0x25, 0x8b, 0x78, 0x0b, 0x16, 0x70, 0xdd, 0x94, 0x53, 0x2e, 0x99, - 0x2f, 0x21, 0xcb, 0x30, 0x55, 0x96, 0xec, 0xd5, 0xd6, 0xc4, 0xf7, 0x4e, 0xb0, 0x93, 0x8c, 0x59, - 0x91, 0xb0, 0x23, 0xdf, 0x3b, 0x31, 0xfe, 0x2c, 0x07, 0xb9, 0x5d, 0x6f, 0xa2, 0xc7, 0xa1, 0x64, - 0xe6, 0xe2, 0x50, 0xa4, 0x32, 0x62, 0x45, 0xca, 0x86, 0x94, 0x1f, 0xd1, 0x52, 0xab, 0x14, 0x8e, - 0x07, 0x50, 0x17, 0x7c, 0x22, 0xf4, 0x84, 0x36, 0x77, 0x69, 0xfb, 0x94, 0x3d, 0x91, 0xa3, 0xc3, - 0x67, 0x8f, 0xc3, 0xbe, 0xb7, 0x43, 0x70, 0xb6, 0x0c, 0xb9, 0x48, 0x94, 0xc6, 0x62, 0xf1, 0x29, - 0xd4, 0x7c, 0x8c, 0x23, 0xbc, 0x96, 0x5e, 0x27, 0xf9, 0xc5, 0xbe, 0x09, 0x4b, 0xc9, 0x76, 0x89, - 0x15, 0x49, 0xd9, 0x48, 0x6f, 0x18, 0x79, 0xd2, 0x6d, 0x10, 0x7c, 0x84, 0x70, 0xa4, 0xf3, 0xfa, - 0x94, 0x73, 0x2c, 0xd2, 0x98, 0x5e, 0x29, 0xc1, 0xf4, 0xee, 0x41, 0x25, 0x1c, 0x5d, 0x58, 0x13, - 0xfb, 0x7a, 0xe4, 0xd9, 0x43, 0x79, 0xbe, 0x21, 0x1c, 0x5d, 0x1c, 0x11, 0x84, 0x3d, 0x02, 0x18, - 0x4f, 0x26, 0xf2, 0xec, 0xa1, 0xe1, 0x33, 0x26, 0xe5, 0xfd, 0xa3, 0x23, 0x22, 0x39, 0xb3, 0x3c, - 0x9e, 0x4c, 0xe8, 0x4f, 0xb6, 0x0d, 0xf5, 0xd4, 0xac, 0xa7, 0xbb, 0x2a, 0xec, 0xcd, 0x9b, 0x6c, - 0xa4, 0x1c, 0xce, 0xda, 0x40, 0x87, 0xad, 0x7f, 0x1f, 0xd8, 0x2f, 0x98, 0x7b, 0xd4, 0x87, 0x72, - 0x34, 0x3e, 0x3d, 0x75, 0x07, 0x03, 0x59, 0x2b, 0x89, 0xd4, 0x9d, 0xf6, 0x70, 0xe8, 0x0b, 0xbe, - 0x48, 0x17, 0x66, 0xc4, 0xf2, 0x41, 0xbb, 0x31, 0xdb, 0xc4, 0xf7, 0x8d, 0xbf, 0xc8, 0x40, 0x81, - 0xf2, 0x88, 0xde, 0x86, 0x06, 0xe1, 0x47, 0x31, 0x3d, 0xd2, 0x57, 0x45, 0xf7, 0x6e, 0x5f, 0x86, - 0xf3, 0x88, 0x63, 0xa1, 0xe5, 0x40, 0x66, 0xa3, 0x9d, 0xd7, 0xf2, 0x20, 0xef, 0x41, 0x39, 0xea, - 0x5a, 0x23, 0x9d, 0x92, 0xea, 0x99, 0xbd, 0x0e, 0xf9, 0x73, 0x6f, 0xa2, 0xac, 0x02, 0x10, 0xaf, - 0xa4, 0x89, 0xf0, 0x78, 0x2c, 0xa2, 0x0f, 0x1a, 0xbc, 0xd4, 0x66, 0xa3, 0x4e, 0x90, 0x0c, 0xe6, - 0xe7, 0xb8, 0x90, 0x32, 0xc7, 0x63, 0x68, 0x08, 0x3e, 0xa0, 0xf9, 0x8c, 0x6f, 0xbe, 0x34, 0xbf, - 0x2e, 0x24, 0xbc, 0xc1, 0x68, 0x3a, 0xe4, 0xba, 0x4d, 0x06, 0x03, 0x4c, 0x24, 0x5c, 0x49, 0xd6, - 0xc6, 0xef, 0x67, 0x88, 0xbf, 0x88, 0x76, 0xd9, 0x03, 0xc8, 0x8b, 0xfb, 0x6d, 0xc6, 0x66, 0x18, - 0x45, 0x14, 0x0b, 0x3c, 0x13, 0x31, 0x30, 0x71, 0x78, 0x3a, 0x4e, 0xb6, 0x5e, 0x33, 0x2b, 0xee, - 0x74, 0x1c, 0x99, 0x35, 0xbe, 0xa6, 0xa6, 0x35, 0x63, 0x12, 0xa0, 0xd9, 0x47, 0xc7, 0x74, 0x43, - 0x8b, 0x54, 0xc9, 0x27, 0x6e, 0x4c, 0x25, 0x05, 0x0e, 0xcf, 0xb8, 0x16, 0xa1, 0xf2, 0x87, 0x59, - 0xa8, 0x25, 0x46, 0x84, 0xa1, 0x3a, 0xe2, 0x02, 0x20, 0x7b, 0xb4, 0xdc, 0x6f, 0x10, 0x20, 0x29, - 0xa8, 0x6b, 0xeb, 0x94, 0x4d, 0xac, 0x53, 0xe4, 0x1d, 0xcf, 0xe9, 0xde, 0xf1, 0xc7, 0x50, 0x8e, - 0x73, 0x5f, 0x93, 0x43, 0x12, 0xfd, 0xa9, 0xb8, 0xea, 0x18, 0x29, 0xf6, 0xa7, 0x17, 0x74, 0x7f, - 0xfa, 0xf7, 0x34, 0xf7, 0xeb, 0x02, 0x36, 0x63, 0xa4, 0xad, 0xe8, 0x2f, 0xc5, 0xf9, 0x6a, 0x7c, - 0x04, 0x15, 0x6d, 0xf0, 0xba, 0x9b, 0x35, 0x93, 0x70, 0xb3, 0x46, 0x19, 0x10, 0xd9, 0x38, 0x03, - 0xc2, 0xf8, 0xed, 0x2c, 0xd4, 0xc4, 0xf9, 0x72, 0xdc, 0xb3, 0x23, 0x6f, 0xe4, 0x0c, 0xd0, 0x3e, - 0x1d, 0x9d, 0x30, 0x29, 0x68, 0xa9, 0x73, 0x26, 0x8f, 0x18, 0xc9, 0x59, 0x7a, 0xa2, 0x17, 0x31, - 0xe9, 0x28, 0xd1, 0xcb, 0x80, 0x9a, 0x60, 0x8c, 0x27, 0x76, 0xc0, 0xb5, 0xcc, 0x5c, 0xb3, 0x72, - 0xca, 0xf9, 0xa6, 0x1d, 0x10, 0x87, 0xfc, 0x26, 0x2c, 0x09, 0x1c, 0xcc, 0x71, 0x19, 0x3b, 0xa3, - 0x91, 0x43, 0x98, 0x64, 0xf4, 0x68, 0x9e, 0x72, 0x6e, 0xda, 0x21, 0xdf, 0x17, 0x05, 0x32, 0x91, - 0xb7, 0x34, 0x74, 0x02, 0xfb, 0x24, 0x0e, 0xa8, 0x8a, 0xbe, 0xd1, 0xab, 0x64, 0x5f, 0x69, 0x5e, - 0x25, 0x4a, 0x76, 0xab, 0x8c, 0xed, 0xab, 0xc8, 0xab, 0x34, 0x43, 0x49, 0xc5, 0x59, 0x4a, 0x32, - 0xfe, 0x4b, 0x16, 0x2a, 0x1a, 0x59, 0xbe, 0xca, 0xed, 0x7a, 0x77, 0xce, 0x9f, 0x50, 0xd6, 0x5d, - 0x07, 0x6f, 0x26, 0xbb, 0x44, 0xe7, 0x33, 0xa5, 0x0c, 0x6b, 0x04, 0x7c, 0x07, 0xca, 0xe2, 0xd4, - 0xbd, 0x87, 0xe6, 0x39, 0x99, 0xf0, 0x8e, 0x80, 0xa3, 0xe9, 0x89, 0x2a, 0x7c, 0x82, 0x85, 0x85, - 0xb8, 0xf0, 0x89, 0x28, 0x7c, 0x51, 0x14, 0xe5, 0x77, 0xa0, 0x2a, 0x5b, 0xc5, 0x3d, 0xc5, 0xe9, - 0xc6, 0xa7, 0x3e, 0xb1, 0xdf, 0x66, 0x85, 0xba, 0xa3, 0xcd, 0x97, 0x15, 0x9f, 0xa8, 0x8a, 0xa5, - 0x97, 0x55, 0x7c, 0x42, 0x1f, 0xc6, 0x4e, 0x14, 0x98, 0x8a, 0x81, 0x0f, 0x8a, 0x8f, 0x3d, 0x82, - 0x25, 0xc5, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde, 0xd4, 0x1d, 0x70, 0x95, 0x1a, 0xc1, 0x64, 0xd1, - 0x71, 0x5c, 0x62, 0x0c, 0xa3, 0xdc, 0x39, 0x0a, 0xa0, 0x78, 0x08, 0x05, 0x92, 0xcb, 0x49, 0xf8, - 0x48, 0x67, 0x5c, 0x84, 0xc2, 0x1e, 0x40, 0x81, 0xc4, 0xf3, 0xec, 0x8d, 0xcc, 0x86, 0x10, 0x8c, - 0x0d, 0x68, 0xa0, 0x88, 0xa9, 0x71, 0xdc, 0x17, 0x49, 0x25, 0xc6, 0x32, 0xb0, 0x03, 0x3a, 0x44, - 0x7a, 0x60, 0xcf, 0x7f, 0xcf, 0x41, 0x45, 0x03, 0x0b, 0xb6, 0x88, 0xa1, 0x20, 0xd6, 0xd0, 0xb1, - 0xc7, 0x5c, 0x79, 0x41, 0x6a, 0x66, 0x0d, 0xa1, 0xdb, 0x12, 0x28, 0x2e, 0x05, 0xfb, 0xe2, 0xcc, - 0xf2, 0xa6, 0xa1, 0x35, 0xe4, 0x67, 0x3e, 0xe7, 0x52, 0x58, 0xaa, 0xda, 0x17, 0x67, 0x87, 0xd3, - 0x70, 0x1b, 0x61, 0x02, 0x4b, 0x10, 0xb5, 0x86, 0x25, 0xa3, 0x17, 0xc6, 0xf6, 0x55, 0x8c, 0x25, - 0x43, 0x68, 0x68, 0x89, 0xf2, 0x51, 0x08, 0x0d, 0xa9, 0x2d, 0xb3, 0x9c, 0xbc, 0x30, 0xcf, 0xc9, - 0xbf, 0x0d, 0xab, 0xc4, 0xc9, 0x25, 0x8f, 0xb0, 0x66, 0x48, 0x6a, 0x19, 0x4b, 0xe5, 0x24, 0x35, - 0xf9, 0xab, 0x29, 0x66, 0xa0, 0xce, 0x47, 0xe0, 0xfc, 0x98, 0x4e, 0x54, 0xc6, 0x14, 0x33, 0x93, - 0x8d, 0xf7, 0x9c, 0x1f, 0x73, 0x81, 0x89, 0x2e, 0x5a, 0x1d, 0x53, 0x06, 0xeb, 0x8e, 0x1d, 0x77, - 0x16, 0xd3, 0xbe, 0x4a, 0x62, 0x96, 0x25, 0xa6, 0x7d, 0xa5, 0x63, 0xbe, 0x0f, 0x6b, 0x63, 0x3e, - 0x74, 0xec, 0x64, 0xb3, 0x56, 0x2c, 0x41, 0x2c, 0x53, 0xb1, 0x56, 0xa7, 0x47, 0x1a, 0xa4, 0x58, - 0x8d, 0x1f, 0x7b, 0xe3, 0x13, 0x87, 0x2e, 0x4f, 0x72, 0x1a, 0xe7, 0xcd, 0xba, 0x3b, 0x1d, 0xff, - 0x10, 0xc1, 0xa2, 0x4a, 0x60, 0xd4, 0xa0, 0xd2, 0x0b, 0xbd, 0x89, 0xda, 0xe6, 0x3a, 0x54, 0xe9, - 0x53, 0x26, 0xbe, 0xdc, 0x81, 0xdb, 0x48, 0x9b, 0x7d, 0x6f, 0xe2, 0x8d, 0xbc, 0xb3, 0xeb, 0x84, - 0x41, 0xe9, 0xbf, 0x65, 0x60, 0x29, 0x51, 0x2a, 0xcf, 0xf9, 0xb7, 0xe9, 0x60, 0x45, 0xd9, 0x0b, - 0x44, 0xce, 0x8b, 0xda, 0xe5, 0x43, 0x88, 0x74, 0xaa, 0x54, 0x46, 0x43, 0x3b, 0xce, 0xba, 0x55, - 0x15, 0x89, 0xb6, 0x5b, 0xf3, 0xb4, 0x2d, 0xeb, 0xab, 0x7c, 0x5c, 0xd5, 0xc4, 0xaf, 0xca, 0x80, - 0xea, 0xa1, 0x9c, 0x72, 0x2e, 0x19, 0x32, 0xaa, 0x1b, 0x9f, 0xd4, 0x08, 0x62, 0x8b, 0x54, 0x60, - 0xfc, 0xeb, 0x0c, 0x40, 0x3c, 0x3a, 0x0c, 0x5a, 0x8d, 0x2e, 0x50, 0x7a, 0xd0, 0x46, 0xbb, 0x2c, - 0xdf, 0x80, 0x6a, 0x14, 0xbb, 0x16, 0x5f, 0xc9, 0x15, 0x05, 0x13, 0xf7, 0xf2, 0x3b, 0xd0, 0x38, - 0x1b, 0x79, 0x27, 0x28, 0x3a, 0xc9, 0x0b, 0x94, 0xd2, 0x7f, 0xea, 0x04, 0x56, 0xd7, 0x62, 0x7c, - 0x81, 0xe7, 0x53, 0xc3, 0xdb, 0xf4, 0xeb, 0xd8, 0xf8, 0x9d, 0x6c, 0x14, 0xc4, 0x13, 0xaf, 0xc4, - 0x8b, 0xf5, 0x8c, 0x9f, 0xc7, 0x17, 0xfc, 0x22, 0x1f, 0xc8, 0x47, 0x50, 0xf7, 0x89, 0x3b, 0x2a, - 0xd6, 0x99, 0x7f, 0x01, 0xeb, 0xac, 0xf9, 0x89, 0x2b, 0xf7, 0xeb, 0xd0, 0xb4, 0x87, 0x17, 0xdc, - 0x0f, 0x1d, 0x34, 0x1b, 0xa3, 0xa0, 0x26, 0xc3, 0x66, 0x34, 0x38, 0x4a, 0x44, 0xef, 0x40, 0x43, - 0x26, 0x63, 0x45, 0x98, 0xf2, 0x79, 0x87, 0x18, 0x2c, 0x10, 0x8d, 0x7f, 0xa7, 0xa2, 0x86, 0x92, - 0xbb, 0xfb, 0xe2, 0x55, 0xd1, 0x67, 0x98, 0x9d, 0xf7, 0xf2, 0x48, 0x42, 0x92, 0xd6, 0x68, 0xc9, - 0x8f, 0x08, 0x28, 0x6d, 0xd1, 0xc9, 0x65, 0xcd, 0xbf, 0xca, 0xb2, 0x1a, 0x7f, 0x9c, 0x81, 0xe2, - 0xae, 0x37, 0x11, 0x7a, 0xb9, 0x90, 0xe7, 0xf0, 0x98, 0x44, 0x89, 0x90, 0x0b, 0xe2, 0xb3, 0x3b, - 0x7c, 0x71, 0xf2, 0x42, 0xaa, 0xbc, 0x51, 0x4b, 0xca, 0x1b, 0xdf, 0x83, 0x3b, 0xe8, 0x17, 0xf1, - 0xbd, 0x89, 0xe7, 0x8b, 0xa3, 0x6a, 0x8f, 0x48, 0xee, 0xf0, 0xdc, 0xf0, 0x5c, 0xf1, 0xce, 0xdb, - 0xa7, 0x9c, 0x1f, 0x69, 0x18, 0xfb, 0x11, 0x02, 0x66, 0xf5, 0x8c, 0xc2, 0x0b, 0x8b, 0x54, 0x45, - 0x29, 0x18, 0x11, 0x47, 0x6d, 0x88, 0x82, 0x0e, 0xc2, 0x51, 0x34, 0x32, 0xbe, 0x0b, 0xe5, 0xc8, - 0xea, 0xc0, 0xde, 0x85, 0xf2, 0xb9, 0x37, 0x91, 0xa6, 0x89, 0x4c, 0x22, 0xc1, 0x43, 0xce, 0xda, - 0x2c, 0x9d, 0xd3, 0x1f, 0x81, 0xf1, 0x67, 0x45, 0x28, 0x76, 0xdd, 0x0b, 0xcf, 0x19, 0x60, 0xdc, - 0xd1, 0x98, 0x8f, 0x3d, 0x95, 0x11, 0x2a, 0xfe, 0xc6, 0xd8, 0x82, 0xf8, 0x91, 0x86, 0x9c, 0x8c, - 0x2d, 0x88, 0x9e, 0x67, 0x58, 0x81, 0x05, 0x5f, 0x7f, 0x65, 0xa1, 0xe0, 0x63, 0x24, 0x64, 0xa4, - 0xb4, 0x15, 0xb4, 0x8c, 0x5a, 0xd1, 0x16, 0x65, 0xff, 0xe3, 0x92, 0x51, 0x86, 0x4e, 0x19, 0x21, - 0xb8, 0x60, 0xaf, 0x41, 0x51, 0xe6, 0x53, 0x50, 0x74, 0x3a, 0x85, 0x2e, 0x4a, 0x10, 0x52, 0x83, - 0xcf, 0xc9, 0xaf, 0x15, 0x49, 0x54, 0x42, 0x4f, 0x97, 0xc0, 0x6d, 0x41, 0x6b, 0xf7, 0xa0, 0x42, - 0xf8, 0x84, 0x52, 0x92, 0x91, 0x42, 0x08, 0x42, 0x84, 0x94, 0xc7, 0x4a, 0xca, 0xa9, 0x8f, 0x95, - 0x60, 0x60, 0x59, 0xc4, 0x65, 0x69, 0x8a, 0x40, 0x4f, 0x54, 0x68, 0x70, 0xf5, 0x52, 0x8f, 0x54, - 0xee, 0x29, 0x61, 0x4d, 0x29, 0xf7, 0x6f, 0x42, 0xed, 0xd4, 0x1e, 0x8d, 0x4e, 0xec, 0xc1, 0x73, - 0xd2, 0x49, 0xab, 0x64, 0x86, 0x53, 0x40, 0x54, 0x4a, 0xef, 0x41, 0x45, 0xdb, 0x65, 0x0c, 0x03, - 0xca, 0x9b, 0x10, 0xef, 0xef, 0xac, 0xa9, 0xa9, 0xfe, 0x0a, 0xa6, 0x26, 0x2d, 0x1c, 0xaa, 0x91, - 0x0c, 0x87, 0xba, 0x83, 0xdc, 0x54, 0x86, 0xcc, 0x34, 0xe9, 0x3d, 0x04, 0x7b, 0x38, 0xc4, 0x90, - 0x19, 0x7a, 0x7c, 0x0c, 0x17, 0x8f, 0xca, 0x17, 0x49, 0xa8, 0x25, 0x18, 0xa1, 0xdc, 0x25, 0x7b, - 0xe9, 0xc4, 0x76, 0x86, 0x18, 0x7e, 0x4a, 0x6a, 0x6c, 0xd1, 0x1e, 0x87, 0x47, 0xb6, 0x33, 0x64, - 0xf7, 0xa1, 0xaa, 0x8a, 0xf1, 0x76, 0x5c, 0xa2, 0xf5, 0x97, 0xc5, 0xe2, 0x4e, 0x34, 0xa0, 0x16, - 0x61, 0x8c, 0xe3, 0xac, 0xb3, 0x8a, 0x44, 0x41, 0x3a, 0x78, 0x0f, 0xc3, 0x10, 0x42, 0x8e, 0xb9, - 0x65, 0xf5, 0x27, 0x77, 0xe4, 0x5c, 0x25, 0x95, 0xaa, 0xff, 0xc9, 0x4b, 0x43, 0x98, 0x42, 0x10, - 0x23, 0x67, 0xd1, 0x6a, 0x42, 0x10, 0x93, 0xa8, 0xe8, 0x2c, 0x22, 0x04, 0xf6, 0x5d, 0x4d, 0x91, - 0x6a, 0x21, 0xf2, 0x6b, 0x33, 0xed, 0xdf, 0x14, 0x7d, 0x7f, 0x17, 0xc0, 0x09, 0xc4, 0x2d, 0x13, - 0x70, 0x77, 0x88, 0x69, 0x62, 0x25, 0xb3, 0xec, 0x04, 0xcf, 0x08, 0xf0, 0xd5, 0x6a, 0x58, 0x6d, - 0xa8, 0xea, 0xd3, 0x64, 0x25, 0xc8, 0x1f, 0x1e, 0x75, 0x0e, 0x9a, 0xb7, 0x58, 0x05, 0x8a, 0xbd, - 0x4e, 0xbf, 0xbf, 0x87, 0x2e, 0xa7, 0x2a, 0x94, 0xa2, 0x64, 0x97, 0xac, 0xf8, 0x6a, 0x6f, 0x6d, - 0x75, 0x8e, 0xfa, 0x9d, 0xed, 0x66, 0xee, 0x07, 0xf9, 0x52, 0xb6, 0x99, 0x33, 0xfe, 0x3c, 0x07, - 0x15, 0x6d, 0x15, 0x5e, 0xcc, 0x8c, 0xef, 0x02, 0xa0, 0x4a, 0x13, 0x47, 0x54, 0xe5, 0xcd, 0xb2, - 0x80, 0xd0, 0xe6, 0xeb, 0xc6, 0xf2, 0x1c, 0x3d, 0xb4, 0xa1, 0x8c, 0xe5, 0x6f, 0x42, 0x8d, 0xde, - 0xac, 0xd0, 0x1d, 0x87, 0x05, 0xb3, 0x4a, 0x40, 0xc9, 0xaa, 0x31, 0x5b, 0x0e, 0x91, 0x30, 0x8f, - 0x42, 0x66, 0xb0, 0x13, 0x08, 0x33, 0x29, 0x30, 0x0d, 0x26, 0xf0, 0x46, 0x17, 0x9c, 0x30, 0x48, - 0x22, 0xac, 0x48, 0x58, 0x5f, 0xa6, 0xeb, 0x49, 0x7e, 0xa8, 0xa5, 0x6b, 0x15, 0xcc, 0x2a, 0x01, - 0x65, 0x47, 0xdf, 0x54, 0x04, 0x54, 0x42, 0x02, 0x5a, 0x9b, 0xa7, 0x86, 0x04, 0xf1, 0xec, 0xcd, - 0xd9, 0xb3, 0xca, 0x48, 0x18, 0x5f, 0x9b, 0xaf, 0xf7, 0x72, 0xbb, 0x16, 0x7b, 0x17, 0xd8, 0x78, - 0x32, 0xb1, 0x52, 0x2c, 0x4d, 0x79, 0xb3, 0x31, 0x9e, 0x4c, 0xfa, 0x9a, 0x21, 0xe6, 0x2b, 0x30, - 0x82, 0x7d, 0x0e, 0xac, 0x2d, 0x0e, 0x30, 0x0e, 0x31, 0x32, 0xa1, 0xc6, 0x6c, 0x39, 0xa3, 0xb3, - 0xe5, 0x14, 0xee, 0x97, 0x4d, 0xe5, 0x7e, 0x2f, 0xe2, 0x13, 0xc6, 0x0e, 0x54, 0x8e, 0xb4, 0x17, - 0x71, 0xee, 0x8b, 0x1b, 0x42, 0xbd, 0x85, 0x43, 0x77, 0x07, 0x19, 0xb7, 0x7c, 0xf9, 0x04, 0x8e, - 0x36, 0x9a, 0xac, 0x36, 0x1a, 0xe3, 0x5f, 0x65, 0xe8, 0xb5, 0x81, 0x68, 0xf0, 0xf1, 0x23, 0x3c, - 0xca, 0x0f, 0x14, 0x67, 0x55, 0x56, 0x94, 0xff, 0x47, 0x26, 0x44, 0xe2, 0xd0, 0x2c, 0xef, 0xf4, - 0x34, 0xe0, 0x2a, 0x3f, 0xa8, 0x82, 0xb0, 0x43, 0x04, 0x29, 0xe1, 0x5b, 0x48, 0xf8, 0x0e, 0xb5, - 0x1f, 0xc8, 0x3c, 0x21, 0x21, 0x7c, 0xef, 0xdb, 0x57, 0xb2, 0xd7, 0x40, 0x88, 0x20, 0xd2, 0x50, - 0xad, 0xb2, 0xa2, 0xa2, 0x6f, 0xe3, 0x9f, 0xcb, 0xc4, 0xcf, 0xd9, 0xf5, 0x7d, 0x08, 0xa5, 0xa8, - 0xd5, 0xe4, 0x0d, 0xab, 0x30, 0xa3, 0x72, 0x71, 0x8f, 0xa3, 0x56, 0x9e, 0x18, 0x31, 0x1d, 0x2e, - 0x74, 0x36, 0x74, 0xb5, 0x51, 0x7f, 0x03, 0xd8, 0xa9, 0xe3, 0xcf, 0x22, 0xd3, 0x61, 0x6b, 0x62, - 0x89, 0x86, 0x6d, 0x1c, 0xc3, 0x92, 0xe2, 0x12, 0x9a, 0x46, 0x90, 0xdc, 0xbc, 0xcc, 0x4b, 0x98, - 0x7c, 0x76, 0x8e, 0xc9, 0x1b, 0x3f, 0xcb, 0x43, 0x51, 0xbd, 0x2e, 0x95, 0xf6, 0x22, 0x52, 0x39, - 0xf9, 0x22, 0x52, 0x2b, 0xf1, 0x7a, 0x06, 0x6e, 0xbd, 0xbc, 0xef, 0xdf, 0x99, 0xbd, 0xb2, 0x35, - 0xa3, 0x79, 0xe2, 0xda, 0x5e, 0x85, 0xfc, 0xc4, 0x0e, 0xcf, 0xd1, 0x40, 0x46, 0xc4, 0x83, 0xdf, - 0xca, 0x98, 0x5e, 0x48, 0x1a, 0xd3, 0xd3, 0x5e, 0x8f, 0x22, 0x91, 0x74, 0xee, 0xf5, 0xa8, 0x3b, - 0x40, 0xf2, 0x85, 0x16, 0x99, 0x53, 0x42, 0x80, 0xb8, 0x8b, 0x92, 0xe2, 0x48, 0x69, 0x56, 0x1c, - 0x79, 0x65, 0x51, 0xe1, 0xdb, 0xb0, 0x40, 0x99, 0xd7, 0x32, 0xfb, 0x4b, 0x5d, 0x28, 0x72, 0x0d, - 0xd5, 0xff, 0x14, 0x8e, 0x6b, 0x4a, 0x5c, 0xfd, 0x29, 0x96, 0x4a, 0xe2, 0x29, 0x16, 0xdd, 0xc8, - 0x5f, 0x4d, 0x1a, 0xf9, 0x1f, 0x40, 0x33, 0x5a, 0x50, 0x34, 0x99, 0xb9, 0x81, 0xcc, 0x2d, 0xa9, - 0x2b, 0xb8, 0xe0, 0x92, 0x07, 0x41, 0x7c, 0x21, 0xd6, 0x13, 0x17, 0xa2, 0xe0, 0x61, 0xed, 0x30, - 0xe4, 0xe3, 0x49, 0x28, 0x2f, 0x44, 0x8c, 0x3e, 0xd7, 0x07, 0x98, 0xcc, 0x8b, 0xac, 0x41, 0xb9, - 0x7b, 0x60, 0xed, 0xec, 0x75, 0x9f, 0xee, 0xf6, 0x9b, 0x19, 0xf1, 0xd9, 0x3b, 0xde, 0xda, 0xea, - 0x74, 0xb6, 0xf1, 0xc6, 0x01, 0x58, 0xd8, 0x69, 0x77, 0xc5, 0xed, 0x93, 0x33, 0x7e, 0x37, 0x0b, - 0x15, 0xad, 0x79, 0xf6, 0x7e, 0xb4, 0x2a, 0xf4, 0x5a, 0xc7, 0xdd, 0xf9, 0x21, 0x6c, 0x28, 0x56, - 0xac, 0x2d, 0x4b, 0xf4, 0x56, 0x56, 0xf6, 0xc6, 0xb7, 0xb2, 0xd8, 0xdb, 0xd0, 0xb0, 0xa9, 0x85, - 0x68, 0x15, 0xa4, 0x39, 0x58, 0x82, 0xe5, 0x22, 0x60, 0x3c, 0x5a, 0x7c, 0x9f, 0x08, 0xbc, 0xbc, - 0x0a, 0x01, 0x8b, 0xae, 0x14, 0x5c, 0xac, 0xe2, 0xa9, 0xed, 0x8c, 0xa6, 0x3e, 0x97, 0xee, 0xdb, - 0xe8, 0x66, 0x26, 0xa8, 0xa9, 0x8a, 0x8d, 0x0f, 0x00, 0xe2, 0x31, 0x27, 0x17, 0xe7, 0x56, 0x72, - 0x71, 0x32, 0xda, 0xe2, 0x64, 0x8d, 0x6d, 0x62, 0x23, 0x72, 0xa1, 0x23, 0x4f, 0xf5, 0x37, 0x41, - 0x59, 0xa4, 0x2c, 0x8c, 0x08, 0x9d, 0x8c, 0x78, 0xa8, 0x32, 0x48, 0x17, 0x65, 0x49, 0x37, 0x2a, - 0x50, 0x09, 0xdd, 0x71, 0x2b, 0x31, 0x37, 0x92, 0x24, 0x39, 0xcb, 0x8d, 0x24, 0xaa, 0x19, 0x95, - 0x1b, 0xeb, 0xd0, 0xda, 0xe6, 0xa2, 0xb5, 0xf6, 0x68, 0x34, 0x33, 0x1c, 0xe3, 0x0e, 0xdc, 0x4e, - 0x29, 0x93, 0x46, 0x88, 0x8f, 0x61, 0xa5, 0x4d, 0xc9, 0xa2, 0x5f, 0x55, 0x56, 0x88, 0xd1, 0x82, - 0xd5, 0xd9, 0x26, 0x65, 0x67, 0x3b, 0xb0, 0xb8, 0xcd, 0x4f, 0xa6, 0x67, 0x7b, 0xfc, 0x22, 0xee, - 0x88, 0x41, 0x3e, 0x38, 0xf7, 0x2e, 0xe5, 0xfa, 0xe0, 0xdf, 0xe2, 0x0c, 0x8f, 0x04, 0x8e, 0x15, - 0x4c, 0xf8, 0x40, 0x59, 0x44, 0x11, 0xd2, 0x9b, 0xf0, 0x81, 0xf1, 0x3e, 0x30, 0xbd, 0x1d, 0xb9, - 0x5e, 0x42, 0x4b, 0x98, 0x9e, 0x58, 0xc1, 0x75, 0x10, 0xf2, 0xb1, 0x7a, 0x0c, 0x06, 0x82, 0xe9, - 0x49, 0x8f, 0x20, 0xc6, 0x3b, 0x50, 0x3d, 0xb2, 0xaf, 0x4d, 0xfe, 0xb9, 0xcc, 0x77, 0x58, 0x83, - 0xe2, 0xc4, 0xbe, 0x16, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x07, 0x79, 0x58, 0x20, 0x4c, - 0x76, 0x9f, 0xde, 0x6b, 0x74, 0x5c, 0x3c, 0x86, 0x8a, 0x51, 0x6a, 0xa0, 0x39, 0x5e, 0x9a, 0x9d, - 0xe7, 0xa5, 0xd2, 0x80, 0xa6, 0xde, 0xa9, 0x50, 0x66, 0x6c, 0x77, 0x3a, 0x56, 0x8f, 0x53, 0x24, - 0x33, 0x26, 0xf3, 0xf1, 0x7b, 0x9c, 0x94, 0x4e, 0x96, 0x74, 0x34, 0xc6, 0xba, 0x08, 0x8d, 0x4e, - 0x5d, 0x11, 0x92, 0x5d, 0xea, 0xa0, 0x54, 0x85, 0xa7, 0xa8, 0x32, 0x69, 0x92, 0x0a, 0xcf, 0x9c, - 0x62, 0x53, 0x7a, 0xb9, 0x62, 0x43, 0x96, 0xb5, 0x17, 0x28, 0x36, 0xf0, 0x0a, 0x8a, 0xcd, 0x2b, - 0x38, 0xf9, 0x6e, 0x43, 0x09, 0xef, 0x7d, 0x8d, 0x7b, 0x8a, 0xfb, 0x5e, 0x70, 0xcf, 0xef, 0x68, - 0xa2, 0x3f, 0x45, 0x18, 0xdc, 0x89, 0x8f, 0x89, 0xc9, 0x3f, 0xff, 0xe5, 0x38, 0x4f, 0x3e, 0x83, - 0xa2, 0x84, 0x0a, 0x82, 0x76, 0xed, 0xb1, 0x7a, 0xea, 0x07, 0xff, 0x16, 0xcb, 0x86, 0xef, 0x93, - 0x7c, 0x3e, 0x75, 0x7c, 0x3e, 0x54, 0x8f, 0x41, 0x38, 0x78, 0x46, 0x05, 0x44, 0x4c, 0x50, 0xa8, - 0x21, 0xae, 0x77, 0xe9, 0xca, 0x54, 0xf0, 0xa2, 0x13, 0x3c, 0x13, 0x9f, 0x06, 0x83, 0x26, 0x3e, - 0xf6, 0x35, 0xf1, 0x7c, 0x75, 0x39, 0x19, 0x3f, 0xcb, 0x40, 0x53, 0x9e, 0xae, 0xa8, 0x4c, 0xd7, - 0x02, 0x0a, 0x37, 0x39, 0xc4, 0x5f, 0xfc, 0xb4, 0x83, 0x01, 0x35, 0x34, 0x7e, 0x44, 0x37, 0x15, - 0x19, 0x6f, 0x2a, 0x02, 0xb8, 0x23, 0x6f, 0xab, 0xd7, 0xa1, 0xa2, 0x02, 0x43, 0xc7, 0xce, 0x48, - 0x3d, 0xbd, 0x4b, 0x91, 0xa1, 0xfb, 0xce, 0x48, 0x5d, 0x74, 0xbe, 0x2d, 0x33, 0xbb, 0x32, 0x78, - 0xd1, 0x99, 0x76, 0xc8, 0x8d, 0xff, 0x94, 0x81, 0x45, 0x6d, 0x2a, 0xf2, 0xdc, 0x7e, 0x08, 0xd5, - 0xe8, 0x95, 0x3d, 0x1e, 0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22, 0x48, 0x20, - 0x06, 0x33, 0xb4, 0xaf, 0x71, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xbd, 0xc3, 0x79, - 0x6f, 0x3a, 0x16, 0xaa, 0xeb, 0x25, 0xe7, 0xcf, 0x23, 0x04, 0x92, 0xb9, 0x40, 0xc0, 0x24, 0x86, - 0x01, 0xb5, 0xb1, 0xe7, 0x86, 0xe7, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6, 0x9f, 0x66, - 0x61, 0x89, 0x4c, 0x6c, 0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48, 0xcc, 0x6b, - 0xf7, 0x96, 0x29, 0xbf, 0xd9, 0xb7, 0x5f, 0xd1, 0x2c, 0xa8, 0x92, 0xc7, 0x6e, 0x58, 0xfe, 0xdc, - 0xfc, 0xf2, 0xdf, 0xbc, 0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x55, 0xfc, 0x5c, 0x73, - 0x19, 0x56, 0x45, 0x89, 0xa3, 0x65, 0x58, 0xbd, 0x0f, 0x6b, 0x09, 0x1c, 0xe4, 0xd6, 0xce, 0xa9, - 0xc3, 0x55, 0xa6, 0xfd, 0xb2, 0x86, 0xdd, 0x53, 0x65, 0x9b, 0x45, 0x28, 0x04, 0x03, 0x6f, 0xc2, - 0x8d, 0x55, 0x58, 0x4e, 0xae, 0xaa, 0xbc, 0x26, 0x7e, 0x2f, 0x03, 0x2d, 0x19, 0x1f, 0xe1, 0xb8, - 0x67, 0xbb, 0x4e, 0x10, 0x7a, 0x7e, 0xf4, 0x1a, 0xdd, 0x5d, 0x80, 0x20, 0xb4, 0x7d, 0xa9, 0x6d, - 0xca, 0xdc, 0x72, 0x84, 0xa0, 0x26, 0x79, 0x1b, 0x4a, 0xdc, 0x1d, 0x52, 0x21, 0x51, 0x43, 0x91, - 0xbb, 0x43, 0xa5, 0x87, 0xce, 0xc9, 0xdf, 0xb5, 0xa4, 0x7a, 0x21, 0x53, 0x3d, 0xc5, 0xea, 0xf0, - 0x0b, 0xbc, 0x78, 0xf3, 0x51, 0xaa, 0xe7, 0xbe, 0x7d, 0x85, 0xd1, 0x86, 0x81, 0xf1, 0x4f, 0xb2, - 0xd0, 0x88, 0xc7, 0x47, 0x79, 0xe2, 0x2f, 0xce, 0x78, 0xbf, 0x2f, 0xc9, 0xc1, 0x11, 0xf2, 0xbb, - 0x66, 0x78, 0x2c, 0xd1, 0xe1, 0xec, 0xba, 0xcc, 0x80, 0x8a, 0xc2, 0xf0, 0xa6, 0xa1, 0xf6, 0x28, - 0x54, 0x99, 0x50, 0x0e, 0xa7, 0xa1, 0x50, 0xb8, 0x84, 0xe6, 0xe9, 0xb8, 0x52, 0xe5, 0x29, 0xd8, - 0xe3, 0xb0, 0x8b, 0x6f, 0x4d, 0x0b, 0xb0, 0xa8, 0x46, 0x1b, 0x29, 0xb0, 0x04, 0x7e, 0x93, 0xe4, - 0x6c, 0xda, 0x39, 0x94, 0xb1, 0x75, 0x21, 0x94, 0x9e, 0xdd, 0x8c, 0x84, 0xd0, 0xd7, 0xa1, 0x42, - 0x8d, 0xc7, 0x09, 0x75, 0x79, 0xb3, 0x8c, 0x3d, 0x60, 0xb9, 0x34, 0x02, 0x79, 0xd3, 0x84, 0xea, - 0x0b, 0xd4, 0x15, 0x86, 0x1f, 0xfc, 0x83, 0x0c, 0xdc, 0x4e, 0xd9, 0x36, 0x79, 0xca, 0xb7, 0x60, - 0xf1, 0x34, 0x2a, 0x54, 0xab, 0x4b, 0x47, 0x7d, 0x55, 0xb1, 0xd5, 0xe4, 0x9a, 0x9a, 0xcd, 0xd3, - 0x24, 0x20, 0x56, 0xba, 0x68, 0x07, 0x13, 0x39, 0x93, 0xa8, 0x74, 0xd1, 0x36, 0x92, 0xbe, 0x73, - 0x04, 0xeb, 0x9d, 0x2b, 0xc1, 0x31, 0xb6, 0xf4, 0xc7, 0xd2, 0x15, 0x19, 0x25, 0x0d, 0xcc, 0x99, - 0x57, 0x32, 0x30, 0x0f, 0x29, 0x35, 0x2c, 0x6a, 0xeb, 0xe7, 0x69, 0x04, 0x2f, 0x50, 0x51, 0x87, - 0x1e, 0x7b, 0x57, 0x79, 0x9b, 0x83, 0xe8, 0x91, 0x77, 0x23, 0x80, 0xc6, 0xfe, 0x74, 0x14, 0x3a, - 0xf1, 0xbb, 0xef, 0xec, 0xdb, 0xb2, 0x0e, 0xf6, 0xa3, 0x56, 0x2d, 0xb5, 0x23, 0x88, 0x3a, 0xc2, - 0xc5, 0x1a, 0x8b, 0x86, 0xac, 0xf9, 0xfe, 0x1a, 0xe3, 0x64, 0x0f, 0xc6, 0x6d, 0x58, 0x8b, 0xbf, - 0x68, 0xd9, 0xd4, 0x55, 0xf3, 0x2f, 0x33, 0x14, 0xda, 0x9c, 0x7c, 0x83, 0x9e, 0x75, 0x60, 0x29, - 0x70, 0xdc, 0xb3, 0x11, 0xd7, 0x9b, 0x0f, 0xe4, 0x22, 0xac, 0x24, 0xc7, 0x26, 0xdf, 0xa9, 0x37, - 0x17, 0xa9, 0x46, 0xdc, 0x5a, 0xc0, 0x36, 0x6f, 0x1a, 0x64, 0x4c, 0x16, 0x33, 0xab, 0x31, 0x3f, - 0xf8, 0x2e, 0xd4, 0x93, 0x1d, 0xb1, 0xef, 0xc8, 0xb4, 0xc8, 0x78, 0x54, 0xb9, 0x99, 0x0c, 0xb7, - 0x98, 0x20, 0x2a, 0xf1, 0xda, 0x07, 0xc6, 0x3f, 0xca, 0x40, 0xcb, 0xe4, 0x82, 0x72, 0xb5, 0x51, - 0x2a, 0x9a, 0xf9, 0x70, 0xae, 0xd5, 0x9b, 0xe7, 0xaa, 0xb2, 0x2d, 0xd5, 0x88, 0xbe, 0x71, 0xe3, - 0x66, 0xec, 0xde, 0x9a, 0x9b, 0xd1, 0x66, 0x09, 0x16, 0x08, 0xc5, 0x58, 0x83, 0x15, 0x39, 0x1e, - 0x35, 0x96, 0xd8, 0x7b, 0x98, 0xe8, 0x31, 0xe1, 0x3d, 0x5c, 0x87, 0x16, 0x3d, 0x2a, 0xa8, 0x4f, - 0x42, 0x56, 0xdc, 0x06, 0xb6, 0x6f, 0x0f, 0x6c, 0xdf, 0xf3, 0xdc, 0x23, 0xee, 0xcb, 0x40, 0x51, - 0x94, 0x30, 0xd1, 0xb9, 0xa6, 0x44, 0x61, 0xfa, 0x52, 0x4f, 0xe1, 0x79, 0xae, 0x8a, 0x8b, 0xa1, - 0x2f, 0xc3, 0x84, 0xa5, 0x4d, 0xfb, 0x39, 0x57, 0x2d, 0xa9, 0x25, 0xfa, 0x08, 0x2a, 0x93, 0xa8, - 0x51, 0xb5, 0xee, 0x2a, 0x77, 0x7a, 0xbe, 0x5b, 0x53, 0xc7, 0x36, 0x9e, 0xc0, 0x72, 0xb2, 0x4d, - 0xc9, 0x3a, 0xd6, 0xa1, 0x34, 0x96, 0x30, 0x39, 0xba, 0xe8, 0xdb, 0xf8, 0x69, 0x09, 0x8a, 0x52, - 0x9f, 0x63, 0x1b, 0x90, 0x1f, 0xa8, 0xd8, 0xa4, 0xf8, 0x49, 0x0e, 0x59, 0xaa, 0xfe, 0xdf, 0xc2, - 0x08, 0x25, 0x81, 0xc7, 0x3e, 0x82, 0x7a, 0xd2, 0x2b, 0x3a, 0x93, 0x98, 0x99, 0x74, 0x67, 0xd6, - 0x06, 0x33, 0xfe, 0xaf, 0x72, 0x7c, 0x39, 0x92, 0xcc, 0x50, 0x3a, 0xd7, 0x6e, 0x4f, 0xcf, 0x15, - 0xf2, 0x76, 0x70, 0x6e, 0x5b, 0x4f, 0xde, 0xff, 0x40, 0x66, 0x66, 0x56, 0x10, 0xd8, 0x3b, 0xb7, - 0x9f, 0xbc, 0xff, 0xc1, 0xac, 0x24, 0x4d, 0xc9, 0x79, 0xba, 0x24, 0xbd, 0x0c, 0x05, 0x7a, 0xf3, - 0x8d, 0x82, 0x4c, 0xe8, 0x83, 0x3d, 0x86, 0x65, 0xa9, 0xb6, 0x5a, 0x32, 0x1c, 0x98, 0xb8, 0x60, - 0x89, 0xb2, 0x81, 0x64, 0x59, 0x0f, 0x8b, 0xc8, 0x36, 0xb4, 0x0a, 0x0b, 0xe7, 0xf1, 0x03, 0x7e, - 0x35, 0x53, 0x7e, 0x19, 0x7f, 0x5a, 0x80, 0x8a, 0xb6, 0x28, 0xac, 0x0a, 0x25, 0xb3, 0xd3, 0xeb, - 0x98, 0x9f, 0x74, 0xb6, 0x9b, 0xb7, 0xd8, 0x03, 0x78, 0xab, 0x7b, 0xb0, 0x75, 0x68, 0x9a, 0x9d, - 0xad, 0xbe, 0x75, 0x68, 0x5a, 0xea, 0x61, 0x98, 0xa3, 0xf6, 0x67, 0xfb, 0x9d, 0x83, 0xbe, 0xb5, - 0xdd, 0xe9, 0xb7, 0xbb, 0x7b, 0xbd, 0x66, 0x86, 0xbd, 0x06, 0xad, 0x18, 0x53, 0x15, 0xb7, 0xf7, - 0x0f, 0x8f, 0x0f, 0xfa, 0xcd, 0x2c, 0xbb, 0x07, 0x77, 0x76, 0xba, 0x07, 0xed, 0x3d, 0x2b, 0xc6, - 0xd9, 0xda, 0xeb, 0x7f, 0x62, 0x75, 0x7e, 0xfd, 0xa8, 0x6b, 0x7e, 0xd6, 0xcc, 0xa5, 0x21, 0x08, - 0x65, 0x5c, 0xb5, 0x90, 0x67, 0xb7, 0x61, 0x85, 0x10, 0xa8, 0x8a, 0xd5, 0x3f, 0x3c, 0xb4, 0x7a, - 0x87, 0x87, 0x07, 0xcd, 0x02, 0x5b, 0x84, 0x5a, 0xf7, 0xe0, 0x93, 0xf6, 0x5e, 0x77, 0xdb, 0x32, - 0x3b, 0xed, 0xbd, 0xfd, 0xe6, 0x02, 0x5b, 0x82, 0xc6, 0x2c, 0x5e, 0x51, 0x34, 0xa1, 0xf0, 0x0e, - 0x0f, 0xba, 0x87, 0x07, 0xd6, 0x27, 0x1d, 0xb3, 0xd7, 0x3d, 0x3c, 0x68, 0x96, 0xd8, 0x2a, 0xb0, - 0x64, 0xd1, 0xee, 0x7e, 0x7b, 0xab, 0x59, 0x66, 0x2b, 0xb0, 0x98, 0x84, 0x3f, 0xeb, 0x7c, 0xd6, - 0x04, 0xd6, 0x82, 0x65, 0x1a, 0x98, 0xb5, 0xd9, 0xd9, 0x3b, 0xfc, 0xd4, 0xda, 0xef, 0x1e, 0x74, - 0xf7, 0x8f, 0xf7, 0x9b, 0x15, 0x7c, 0xaa, 0xaa, 0xd3, 0xb1, 0xba, 0x07, 0xbd, 0xe3, 0x9d, 0x9d, - 0xee, 0x56, 0xb7, 0x73, 0xd0, 0x6f, 0x56, 0xa9, 0xe7, 0xb4, 0x89, 0xd7, 0x44, 0x05, 0x99, 0x33, - 0x60, 0x6d, 0x77, 0x7b, 0xed, 0xcd, 0xbd, 0xce, 0x76, 0xb3, 0xce, 0xee, 0xc2, 0xed, 0x7e, 0x67, - 0xff, 0xe8, 0xd0, 0x6c, 0x9b, 0x9f, 0xa9, 0x9c, 0x02, 0x6b, 0xa7, 0xdd, 0xdd, 0x3b, 0x36, 0x3b, - 0xcd, 0x06, 0x7b, 0x03, 0xee, 0x9a, 0x9d, 0x8f, 0x8f, 0xbb, 0x66, 0x67, 0xdb, 0x3a, 0x38, 0xdc, - 0xee, 0x58, 0x3b, 0x9d, 0x76, 0xff, 0xd8, 0xec, 0x58, 0xfb, 0xdd, 0x5e, 0xaf, 0x7b, 0xf0, 0xb4, - 0xd9, 0x64, 0x6f, 0xc1, 0xfd, 0x08, 0x25, 0x6a, 0x60, 0x06, 0x6b, 0x51, 0xcc, 0x4f, 0x6d, 0xe9, - 0x41, 0xe7, 0xd7, 0xfb, 0xd6, 0x51, 0xa7, 0x63, 0x36, 0x19, 0x5b, 0x87, 0xd5, 0xb8, 0x7b, 0xea, - 0x40, 0xf6, 0xbd, 0x24, 0xca, 0x8e, 0x3a, 0xe6, 0x7e, 0xfb, 0x40, 0x6c, 0x70, 0xa2, 0x6c, 0x59, - 0x0c, 0x3b, 0x2e, 0x9b, 0x1d, 0xf6, 0x0a, 0x63, 0x50, 0xd7, 0x76, 0x65, 0xa7, 0x6d, 0x36, 0x57, - 0x59, 0x03, 0x2a, 0xfb, 0x47, 0x47, 0x56, 0xbf, 0xbb, 0xdf, 0x39, 0x3c, 0xee, 0x37, 0xd7, 0xd8, - 0x0a, 0x34, 0xbb, 0x07, 0xfd, 0x8e, 0x29, 0xf6, 0x5a, 0x55, 0xfd, 0xdf, 0x45, 0xb6, 0x0c, 0x0d, - 0x35, 0x52, 0x05, 0xfd, 0xcb, 0x22, 0x5b, 0x03, 0x76, 0x7c, 0x60, 0x76, 0xda, 0xdb, 0x62, 0xe1, - 0xa2, 0x82, 0xff, 0x53, 0x94, 0x1e, 0x92, 0x9f, 0xe5, 0xa2, 0xcb, 0x3a, 0x0e, 0x39, 0x48, 0x3e, - 0xe7, 0x5a, 0xd5, 0x9e, 0x61, 0x7d, 0xd9, 0x43, 0xeb, 0x9a, 0x6a, 0x95, 0x9b, 0x53, 0xad, 0xe6, - 0x74, 0xf7, 0x9a, 0x2e, 0xfb, 0xbd, 0x09, 0xb5, 0x31, 0x3d, 0xed, 0x2a, 0x9f, 0x70, 0x04, 0x19, - 0x7f, 0x43, 0x40, 0x7a, 0xbf, 0x71, 0xee, 0xa5, 0xf1, 0xc2, 0xfc, 0x4b, 0xe3, 0x69, 0xf2, 0xfd, - 0x42, 0x9a, 0x7c, 0xff, 0x10, 0x16, 0x89, 0x35, 0x39, 0xae, 0x33, 0x56, 0x5a, 0x33, 0x49, 0x81, - 0x0d, 0x64, 0x51, 0x04, 0x57, 0xea, 0x84, 0x52, 0x39, 0x24, 0x0b, 0x29, 0x4a, 0x6d, 0x23, 0xa1, - 0x69, 0x10, 0xe7, 0x88, 0x34, 0x8d, 0xa8, 0x07, 0xfb, 0x2a, 0xee, 0xa1, 0xa2, 0xf5, 0x40, 0x70, - 0xec, 0xe1, 0x21, 0x2c, 0xf2, 0xab, 0xd0, 0xb7, 0x2d, 0x6f, 0x62, 0x7f, 0x3e, 0x45, 0x17, 0xae, - 0x8d, 0x3a, 0x7c, 0xd5, 0x6c, 0x60, 0xc1, 0x21, 0xc2, 0xb7, 0xed, 0xd0, 0x7e, 0xf8, 0x05, 0x54, - 0xb4, 0x67, 0x7f, 0xd9, 0x1a, 0x2c, 0x7d, 0xda, 0xed, 0x1f, 0x74, 0x7a, 0x3d, 0xeb, 0xe8, 0x78, - 0xf3, 0x59, 0xe7, 0x33, 0x6b, 0xb7, 0xdd, 0xdb, 0x6d, 0xde, 0x12, 0x87, 0xf6, 0xa0, 0xd3, 0xeb, - 0x77, 0xb6, 0x13, 0xf0, 0x0c, 0x7b, 0x1d, 0xd6, 0x8f, 0x0f, 0x8e, 0x7b, 0x9d, 0x6d, 0x2b, 0xad, - 0x5e, 0x56, 0x50, 0xa9, 0x2c, 0x4f, 0xa9, 0x9e, 0x7b, 0xf8, 0x7d, 0xa8, 0x27, 0xdf, 0xa2, 0x64, - 0x00, 0x0b, 0x7b, 0x9d, 0xa7, 0xed, 0xad, 0xcf, 0xe8, 0x31, 0xbb, 0x5e, 0xbf, 0xdd, 0xef, 0x6e, - 0x59, 0xf2, 0xf1, 0x3a, 0xc1, 0x11, 0x32, 0xac, 0x02, 0xc5, 0xf6, 0xc1, 0xd6, 0xee, 0xa1, 0xd9, - 0x6b, 0x66, 0x1f, 0x7e, 0x04, 0xcd, 0x59, 0x7f, 0x54, 0xc2, 0x81, 0xf7, 0x22, 0x4f, 0xdf, 0xc3, - 0x7f, 0x9b, 0x03, 0x88, 0x13, 0x06, 0x04, 0xab, 0xd9, 0x6e, 0xf7, 0xdb, 0x7b, 0x87, 0x62, 0x1a, - 0xe6, 0x61, 0x5f, 0x70, 0x10, 0xb3, 0xf3, 0x71, 0xf3, 0x56, 0x6a, 0xc9, 0xe1, 0x51, 0xbf, 0x99, - 0x11, 0x2b, 0xd6, 0x3d, 0xe8, 0xf6, 0xbb, 0xed, 0x3d, 0xcb, 0x3c, 0x3c, 0xee, 0x1e, 0x3c, 0xa5, - 0x57, 0xba, 0x90, 0xcb, 0x1e, 0x1f, 0xed, 0x98, 0x87, 0x07, 0x7d, 0xab, 0xb7, 0x7b, 0xdc, 0xdf, - 0xc6, 0x37, 0xbe, 0xb6, 0xcc, 0xee, 0x11, 0xb5, 0x99, 0x7f, 0x11, 0x82, 0x68, 0xba, 0x20, 0xd6, - 0xfc, 0xe9, 0x61, 0xaf, 0xd7, 0x3d, 0xb2, 0x3e, 0x3e, 0xee, 0x98, 0xdd, 0x4e, 0x0f, 0x2b, 0x2e, - 0xa4, 0xc0, 0x05, 0x7e, 0x51, 0xf0, 0xe6, 0xfe, 0xde, 0x27, 0x92, 0x79, 0x0a, 0xd4, 0x52, 0x12, - 0x24, 0xb0, 0xca, 0x82, 0xa7, 0x08, 0xee, 0x93, 0xd2, 0x32, 0xdc, 0x50, 0x26, 0xea, 0x55, 0x04, - 0x5f, 0x9d, 0xdb, 0x0c, 0xac, 0x56, 0x4d, 0x2f, 0x12, 0xb5, 0x90, 0xe5, 0x46, 0x17, 0xd4, 0xf6, - 0xb6, 0x89, 0x15, 0xea, 0x73, 0x50, 0x81, 0xdb, 0x10, 0x1b, 0x25, 0xd8, 0x93, 0x40, 0x69, 0xaa, - 0x0f, 0x51, 0xb2, 0xf8, 0xe4, 0x77, 0x72, 0x50, 0xa7, 0xe4, 0x2d, 0xfa, 0xd5, 0x25, 0xee, 0xb3, - 0x7d, 0x28, 0xca, 0x9f, 0xef, 0x62, 0x2b, 0xd1, 0x03, 0x4a, 0xfa, 0x0f, 0x86, 0xad, 0xaf, 0xce, - 0x82, 0xa5, 0x38, 0xb6, 0xf4, 0xb7, 0xfe, 0xe4, 0x7f, 0xfd, 0xe3, 0x6c, 0x8d, 0x55, 0x1e, 0x5d, - 0xbc, 0xf7, 0xe8, 0x8c, 0xbb, 0x81, 0x68, 0xe3, 0xaf, 0x03, 0xc4, 0x3f, 0x4a, 0xc5, 0x5a, 0x91, - 0x13, 0x6a, 0xe6, 0x17, 0xbb, 0xd6, 0x6f, 0xa7, 0x94, 0xc8, 0x76, 0x6f, 0x63, 0xbb, 0x4b, 0x46, - 0x5d, 0xb4, 0xeb, 0xb8, 0x4e, 0x48, 0x3f, 0x50, 0xf5, 0x61, 0xe6, 0x21, 0x1b, 0x42, 0x55, 0xff, - 0xb9, 0x28, 0xa6, 0x24, 0xa5, 0x94, 0x1f, 0xbc, 0x5a, 0xbf, 0x93, 0x5a, 0xa6, 0x64, 0x50, 0xec, - 0x63, 0xc5, 0x68, 0x8a, 0x3e, 0xa6, 0x88, 0x11, 0xf7, 0x32, 0x22, 0xa9, 0x3c, 0xfe, 0x55, 0x28, - 0xf6, 0x9a, 0x26, 0x57, 0xcd, 0xfd, 0x26, 0xd5, 0xfa, 0xdd, 0x1b, 0x4a, 0x65, 0x5f, 0x77, 0xb1, - 0xaf, 0x35, 0x83, 0x89, 0xbe, 0x06, 0x88, 0xa3, 0x7e, 0x93, 0xea, 0xc3, 0xcc, 0xc3, 0x27, 0x7f, - 0xf1, 0x00, 0xca, 0x51, 0x30, 0x27, 0xfb, 0x2d, 0xa8, 0x25, 0xb2, 0xeb, 0x98, 0x9a, 0x46, 0x5a, - 0x32, 0xde, 0xfa, 0x6b, 0xe9, 0x85, 0xb2, 0xe3, 0xd7, 0xb1, 0xe3, 0x16, 0x5b, 0x15, 0x1d, 0xcb, - 0xec, 0xb5, 0x47, 0x98, 0x0d, 0x4b, 0xcf, 0x51, 0x3d, 0xd7, 0xb4, 0x0f, 0xea, 0xec, 0xb5, 0x59, - 0x8d, 0x20, 0xd1, 0xdb, 0xdd, 0x1b, 0x4a, 0x65, 0x77, 0xaf, 0x61, 0x77, 0xab, 0x6c, 0x59, 0xef, - 0x4e, 0x85, 0x5e, 0x32, 0x8e, 0x4f, 0xc0, 0xe9, 0x3f, 0x9a, 0xc4, 0xee, 0xc6, 0x0f, 0x76, 0xa5, - 0xfc, 0x98, 0x52, 0x44, 0x22, 0xf3, 0xbf, 0xa8, 0x64, 0xb4, 0xb0, 0x2b, 0xc6, 0x70, 0xfb, 0xf4, - 0xdf, 0x4c, 0x62, 0x27, 0x50, 0xd1, 0x7e, 0x67, 0x80, 0xdd, 0xbe, 0xf1, 0x37, 0x11, 0xd6, 0xd7, - 0xd3, 0x8a, 0xd2, 0xa6, 0xa2, 0xb7, 0xff, 0xe8, 0x94, 0x73, 0xf6, 0x1b, 0x50, 0x8e, 0x5e, 0xaf, - 0x67, 0x6b, 0xda, 0xaf, 0x09, 0xe8, 0xaf, 0xed, 0xaf, 0xb7, 0xe6, 0x0b, 0xd2, 0x88, 0x4f, 0x6f, - 0x5d, 0x10, 0xdf, 0xa7, 0x50, 0xd1, 0x5e, 0xa8, 0x8f, 0x26, 0x30, 0xff, 0x0a, 0x7e, 0x34, 0x81, - 0x94, 0x07, 0xed, 0x8d, 0x45, 0xec, 0xa2, 0xc2, 0xca, 0x48, 0xdf, 0xe1, 0x95, 0x17, 0xb0, 0x3d, - 0x58, 0x91, 0x9a, 0xd6, 0x09, 0xff, 0x32, 0xdb, 0x90, 0xf2, 0x3b, 0x55, 0x8f, 0x33, 0xec, 0x23, - 0x28, 0xa9, 0x1f, 0x22, 0x60, 0xab, 0xe9, 0x3f, 0xa8, 0xb0, 0xbe, 0x36, 0x07, 0x97, 0x6a, 0xd1, - 0x67, 0x00, 0xf1, 0x73, 0xf8, 0x11, 0x93, 0x98, 0x7b, 0x5e, 0x3f, 0xa2, 0x80, 0xf9, 0xb7, 0xf3, - 0x8d, 0x55, 0x9c, 0x60, 0x93, 0x21, 0x93, 0x70, 0xf9, 0xa5, 0x7a, 0xa7, 0xf3, 0x47, 0x50, 0xd1, - 0x5e, 0xc4, 0x8f, 0x96, 0x6f, 0xfe, 0x35, 0xfd, 0x68, 0xf9, 0x52, 0x1e, 0xd0, 0x37, 0xd6, 0xb1, - 0xf5, 0x65, 0xa3, 0x21, 0x5a, 0x17, 0xa2, 0x96, 0x14, 0x79, 0xc4, 0x06, 0x9d, 0x43, 0x2d, 0xf1, - 0xec, 0x7d, 0x74, 0x42, 0xd3, 0x1e, 0xd5, 0x8f, 0x4e, 0x68, 0xea, 0x4b, 0xf9, 0x8a, 0xce, 0x8c, - 0x45, 0xd1, 0xcf, 0x05, 0xa2, 0x68, 0x3d, 0xfd, 0x10, 0x2a, 0xda, 0x13, 0xf6, 0xd1, 0x5c, 0xe6, - 0x5f, 0xcb, 0x8f, 0xe6, 0x92, 0xf6, 0xe2, 0xfd, 0x32, 0xf6, 0x51, 0x37, 0x90, 0x14, 0xf0, 0xa5, - 0x41, 0xd1, 0xf6, 0x6f, 0x41, 0x3d, 0xf9, 0xaa, 0x7d, 0x74, 0xf6, 0x53, 0x9f, 0xc7, 0x8f, 0xce, - 0xfe, 0x0d, 0x4f, 0xe1, 0x4b, 0x92, 0x7e, 0xb8, 0x14, 0x75, 0xf2, 0xe8, 0x27, 0x32, 0x2d, 0xe5, - 0x0b, 0xf6, 0xb1, 0x60, 0x70, 0xf2, 0xa1, 0x4b, 0xb6, 0xa6, 0x51, 0xad, 0xfe, 0x62, 0x66, 0x74, - 0x5e, 0xe6, 0xde, 0xc4, 0x4c, 0x12, 0x33, 0x36, 0xce, 0x9e, 0xc2, 0x52, 0x44, 0xcc, 0xd1, 0xcb, - 0x95, 0x41, 0x34, 0x87, 0xd4, 0xf7, 0x31, 0xd7, 0x9b, 0xb3, 0xa5, 0x8f, 0x33, 0x74, 0xfd, 0xe1, - 0x7b, 0x81, 0xda, 0xf5, 0xa7, 0x3f, 0x5e, 0xa9, 0x5d, 0x7f, 0x89, 0x67, 0x05, 0x67, 0xaf, 0xbf, - 0xd0, 0x11, 0x6d, 0xb8, 0xd0, 0x98, 0x7d, 0x47, 0xf2, 0xee, 0x4d, 0x69, 0xff, 0xd4, 0xfc, 0xeb, - 0x2f, 0x7e, 0x15, 0x20, 0xc9, 0x8a, 0x14, 0x37, 0x7d, 0x24, 0x83, 0x4f, 0xd8, 0x6f, 0x42, 0x55, - 0x7f, 0x52, 0x9b, 0xe9, 0x3c, 0x61, 0xb6, 0xa7, 0x3b, 0xa9, 0x65, 0x49, 0x2a, 0x61, 0x55, 0xbd, - 0x1b, 0xf6, 0x09, 0xac, 0x46, 0xcb, 0xac, 0xe7, 0xad, 0x07, 0xec, 0x5e, 0x4a, 0x36, 0x7b, 0x62, - 0xb1, 0x6f, 0xdf, 0x98, 0xee, 0xfe, 0x38, 0x23, 0xa8, 0x2f, 0xf9, 0xb6, 0x6f, 0x7c, 0xf3, 0xa4, - 0x3d, 0x69, 0x1c, 0xdf, 0x3c, 0xa9, 0x0f, 0x02, 0x2b, 0xea, 0x63, 0x4b, 0x89, 0x35, 0xa2, 0xb0, - 0x5c, 0xf6, 0x43, 0x68, 0x68, 0x49, 0xf9, 0xbd, 0x6b, 0x77, 0x10, 0x9d, 0xa4, 0xf9, 0xc7, 0xe9, - 0xd6, 0xd3, 0x6c, 0x93, 0xc6, 0x1a, 0xb6, 0xbf, 0x68, 0x24, 0x16, 0x47, 0x9c, 0xa2, 0x2d, 0xa8, - 0xe8, 0x09, 0xff, 0x2f, 0x68, 0x77, 0x4d, 0x2b, 0xd2, 0xdf, 0x41, 0x7b, 0x9c, 0x61, 0x7b, 0xd0, - 0x9c, 0x7d, 0xb6, 0x29, 0xe2, 0x29, 0x69, 0x4f, 0x4d, 0xad, 0xcf, 0x14, 0x26, 0x1e, 0x7b, 0x62, - 0x47, 0x94, 0xd8, 0x11, 0xfd, 0xa8, 0x93, 0xe7, 0xcf, 0xde, 0xea, 0xc9, 0x1f, 0x7b, 0x8a, 0x5a, - 0x4b, 0xfb, 0x99, 0xaf, 0x07, 0x99, 0xc7, 0x19, 0xf6, 0xbb, 0x19, 0xa8, 0x26, 0x9e, 0x4a, 0x49, - 0x84, 0xce, 0xcf, 0xcc, 0xb3, 0xa5, 0x97, 0xe9, 0x13, 0x35, 0x4c, 0x5c, 0xc4, 0xbd, 0x87, 0x3f, - 0x48, 0x6c, 0xd2, 0x4f, 0x12, 0xae, 0xbd, 0x8d, 0xd9, 0x5f, 0x7d, 0xfa, 0x62, 0x16, 0x41, 0x7f, - 0x73, 0xf0, 0x8b, 0xc7, 0x19, 0xf6, 0xef, 0x33, 0x50, 0x4f, 0xfa, 0xec, 0xa3, 0xe9, 0xa6, 0x46, - 0x07, 0x44, 0xa4, 0x74, 0x83, 0xa3, 0xff, 0x87, 0x38, 0xca, 0xfe, 0x43, 0x33, 0x31, 0x4a, 0xf9, - 0x2a, 0xf5, 0x2f, 0x36, 0x5a, 0xf6, 0x21, 0xfd, 0xc8, 0xa2, 0x0a, 0x65, 0x62, 0xf3, 0x3f, 0xca, - 0x17, 0x91, 0x9f, 0xfe, 0x13, 0x76, 0xb8, 0x09, 0x3f, 0xa2, 0x5f, 0x37, 0x52, 0x91, 0x31, 0x82, - 0x8a, 0x5f, 0xb5, 0xbe, 0xf1, 0x16, 0xce, 0xe9, 0x75, 0xe3, 0x76, 0x62, 0x4e, 0xb3, 0x82, 0x47, - 0x9b, 0x46, 0x27, 0x7f, 0x81, 0x2e, 0xbe, 0x39, 0xe7, 0x7e, 0x95, 0xee, 0xe6, 0x41, 0x8e, 0x69, - 0x90, 0x12, 0x3d, 0x71, 0xd4, 0x5e, 0xb1, 0x19, 0xe3, 0x21, 0x8e, 0xf5, 0x2d, 0xe3, 0xde, 0x8d, - 0x63, 0x7d, 0x84, 0xfe, 0x77, 0x31, 0xe2, 0x23, 0x80, 0x38, 0xd4, 0x90, 0xcd, 0x04, 0xbc, 0x45, - 0x0c, 0x68, 0x3e, 0x1a, 0x31, 0x79, 0x9e, 0x55, 0x5c, 0x9c, 0x68, 0xf1, 0x37, 0x88, 0x9d, 0x46, - 0xa1, 0x78, 0xba, 0xf4, 0x95, 0x8c, 0x0a, 0x4c, 0x48, 0x5f, 0xb3, 0xed, 0x27, 0x98, 0x69, 0x14, - 0x77, 0x77, 0x0c, 0xb5, 0x3d, 0xcf, 0x7b, 0x3e, 0x9d, 0x44, 0xe1, 0xed, 0xc9, 0xa0, 0x98, 0x5d, - 0x3b, 0x38, 0x5f, 0x9f, 0x99, 0x85, 0x71, 0x1f, 0x9b, 0x5a, 0x67, 0x2d, 0xad, 0xa9, 0x47, 0x3f, - 0x89, 0xe3, 0x1b, 0xbf, 0x60, 0x36, 0x2c, 0x46, 0x3c, 0x3a, 0x8e, 0x21, 0x4c, 0x36, 0x93, 0xe0, - 0xcc, 0xb3, 0x5d, 0x24, 0xd4, 0x04, 0x35, 0xda, 0x47, 0x81, 0x6a, 0xf3, 0x71, 0x86, 0x1d, 0x41, - 0x75, 0x9b, 0x0f, 0x30, 0x51, 0x1f, 0x43, 0x4b, 0x96, 0x12, 0x61, 0x0a, 0x14, 0x93, 0xb2, 0x5e, - 0x4b, 0x00, 0x93, 0xf7, 0xd6, 0xc4, 0xbe, 0xf6, 0xf9, 0xe7, 0x8f, 0x7e, 0x22, 0x83, 0x56, 0xbe, - 0x50, 0xf7, 0x96, 0x0a, 0xea, 0x49, 0xdc, 0x5b, 0x33, 0x51, 0x40, 0x89, 0x7b, 0x6b, 0x2e, 0x0a, - 0x28, 0xb1, 0xd4, 0x2a, 0xa8, 0x88, 0x8d, 0x60, 0x71, 0x2e, 0x70, 0x28, 0xba, 0xb2, 0x6e, 0x0a, - 0x37, 0x5a, 0xbf, 0x7f, 0x33, 0x42, 0xb2, 0xb7, 0x87, 0xc9, 0xde, 0x7a, 0x50, 0xa3, 0x67, 0x10, - 0x4f, 0x38, 0xa5, 0xec, 0xcd, 0xbc, 0x77, 0xa3, 0xe7, 0x03, 0xce, 0x5e, 0x30, 0x58, 0x96, 0x94, - 0x70, 0x30, 0x57, 0x8e, 0xfd, 0x06, 0x54, 0x9e, 0xf2, 0x50, 0xe5, 0xe8, 0x45, 0x32, 0xf6, 0x4c, - 0xd2, 0xde, 0x7a, 0x4a, 0x8a, 0x5f, 0x92, 0x66, 0xb0, 0xb5, 0x47, 0x7c, 0x78, 0xc6, 0x89, 0x39, - 0x59, 0xce, 0xf0, 0x0b, 0xf6, 0xeb, 0xd8, 0x78, 0x94, 0x1a, 0xbd, 0xaa, 0x25, 0x61, 0xe9, 0x8d, - 0x37, 0x66, 0xe0, 0x69, 0x2d, 0xbb, 0xde, 0x90, 0x6b, 0xb2, 0x9e, 0x0b, 0x15, 0xed, 0x09, 0x85, - 0xe8, 0x00, 0xcd, 0x3f, 0x99, 0x11, 0x1d, 0xa0, 0x94, 0x17, 0x17, 0x8c, 0x07, 0xd8, 0x8f, 0xc1, - 0xee, 0xc7, 0xfd, 0xd0, 0x2b, 0x0b, 0x71, 0x4f, 0x8f, 0x7e, 0x62, 0x8f, 0xc3, 0x2f, 0xd8, 0xa7, - 0xf8, 0xd8, 0xb8, 0x9e, 0x83, 0x18, 0x2b, 0x0d, 0xb3, 0xe9, 0x8a, 0xd1, 0x62, 0x69, 0x45, 0x49, - 0x45, 0x82, 0xba, 0x42, 0x49, 0xee, 0x7d, 0x80, 0x5e, 0xe8, 0x4d, 0xb6, 0x6d, 0x3e, 0xf6, 0xdc, - 0x98, 0xd7, 0xc6, 0x59, 0x71, 0x31, 0xff, 0xd2, 0x52, 0xe3, 0xd8, 0xa7, 0x9a, 0x96, 0x95, 0x48, - 0xe3, 0x54, 0xc4, 0x75, 0x63, 0xe2, 0x5c, 0xb4, 0x20, 0x29, 0xc9, 0x73, 0x8f, 0x33, 0xac, 0x0d, - 0x10, 0x47, 0x8e, 0x45, 0x3a, 0xd3, 0x5c, 0x50, 0x5a, 0xc4, 0xf6, 0x52, 0xc2, 0xcc, 0x8e, 0xa0, - 0x1c, 0x87, 0xdc, 0xac, 0xc5, 0x2f, 0xc2, 0x24, 0x02, 0x74, 0xa2, 0x1b, 0x7c, 0x2e, 0xdc, 0xc5, - 0x68, 0xe2, 0x52, 0x01, 0x2b, 0x89, 0xa5, 0x3a, 0xe5, 0x3c, 0x60, 0x0e, 0x2c, 0xd1, 0x00, 0x23, - 0x71, 0x09, 0xb3, 0xb9, 0xa2, 0x37, 0xe5, 0xe7, 0x23, 0x4f, 0xa2, 0xd3, 0x9c, 0x1a, 0x3f, 0x91, - 0x30, 0xfd, 0x08, 0x6a, 0xa5, 0x4c, 0x32, 0xc1, 0x9a, 0xc7, 0xb0, 0x38, 0xe7, 0xa2, 0x8f, 0x8e, - 0xf4, 0x4d, 0x31, 0x17, 0xd1, 0x91, 0xbe, 0xd1, 0xbb, 0x6f, 0xac, 0x60, 0x97, 0x0d, 0x03, 0x50, - 0xd5, 0xbb, 0x74, 0xc2, 0xc1, 0xb9, 0xe8, 0xee, 0xdf, 0x64, 0x60, 0x29, 0xc5, 0x09, 0xcf, 0xde, - 0x50, 0x56, 0x83, 0x1b, 0x1d, 0xf4, 0xeb, 0xa9, 0xce, 0x5a, 0xa3, 0x87, 0xfd, 0xec, 0xb3, 0x67, - 0x89, 0x8b, 0x8d, 0x7c, 0xa5, 0xf2, 0x64, 0xbe, 0x50, 0xa8, 0x48, 0x95, 0x28, 0x3e, 0x87, 0x35, - 0x1a, 0x48, 0x7b, 0x34, 0x9a, 0x71, 0x24, 0xbf, 0x3e, 0xf7, 0x23, 0xec, 0x09, 0xe7, 0xf8, 0xfa, - 0xcd, 0x3f, 0xd2, 0x7e, 0x83, 0x38, 0x4d, 0x43, 0x65, 0x53, 0x68, 0xce, 0x3a, 0x68, 0xd9, 0xcd, - 0x6d, 0xad, 0xdf, 0x4b, 0xe8, 0xbf, 0x29, 0x4e, 0xdd, 0xaf, 0x61, 0x67, 0xf7, 0x8c, 0xf5, 0xb4, - 0x75, 0x21, 0x95, 0x58, 0xec, 0xc7, 0xdf, 0x8c, 0xbc, 0xc9, 0x33, 0xf3, 0x54, 0x1d, 0xdc, 0xe4, - 0xfb, 0x8e, 0x34, 0xf0, 0x74, 0x67, 0xf4, 0xdb, 0xd8, 0xfd, 0x7d, 0xe3, 0x4e, 0x5a, 0xf7, 0x3e, - 0x55, 0x21, 0x5d, 0x7c, 0x6d, 0xf6, 0x5c, 0xab, 0x11, 0xdc, 0x4f, 0xdb, 0xef, 0x1b, 0x75, 0xa1, - 0x99, 0xb5, 0xbe, 0x85, 0xb2, 0x5d, 0x55, 0xf7, 0x1e, 0x47, 0xc7, 0x27, 0xc5, 0x4d, 0x1d, 0x1d, - 0x9f, 0x34, 0x77, 0x73, 0x52, 0xae, 0x51, 0x8e, 0xe6, 0x0f, 0x33, 0x0f, 0x37, 0xdf, 0xf9, 0xe1, - 0xd7, 0xce, 0x9c, 0xf0, 0x7c, 0x7a, 0xb2, 0x31, 0xf0, 0xc6, 0x8f, 0x46, 0xca, 0xda, 0x28, 0x53, - 0x9e, 0x1f, 0x8d, 0xdc, 0xe1, 0x23, 0x6c, 0xf6, 0x64, 0x61, 0xe2, 0x7b, 0xa1, 0xf7, 0xad, 0xff, - 0x17, 0x00, 0x00, 0xff, 0xff, 0x90, 0xab, 0x21, 0xed, 0x67, 0x82, 0x00, 0x00, + // 11345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x5b, 0x8f, 0x24, 0x47, + 0x76, 0x18, 0x3c, 0x75, 0xeb, 0xaa, 0x3a, 0x75, 0xed, 0xe8, 0x5b, 0x4d, 0x0f, 0x87, 0x33, 0x4c, + 0x72, 0xc9, 0xd9, 0xe1, 0x6e, 0xcf, 0x70, 0x76, 0xc9, 0x5d, 0x91, 0x9f, 0x56, 0x5b, 0xdd, 0x5d, + 0x3d, 0x5d, 0x3b, 0x7d, 0x63, 0x56, 0x35, 0x29, 0xae, 0x3e, 0x39, 0x37, 0xbb, 0x2a, 0xba, 0x3b, + 0x35, 0x55, 0x99, 0xc5, 0xcc, 0xac, 0xbe, 0xec, 0x82, 0x7e, 0x30, 0x6c, 0xc1, 0x30, 0x6c, 0x03, + 0x82, 0x2d, 0x03, 0x96, 0x2d, 0xd8, 0xb0, 0x61, 0x18, 0x86, 0x01, 0x41, 0xc6, 0xca, 0x80, 0x1f, + 0xfc, 0xae, 0x17, 0x1b, 0x82, 0x21, 0xf9, 0xc5, 0x10, 0x04, 0xc8, 0x97, 0xf5, 0x9b, 0xa1, 0x9f, + 0x60, 0xc4, 0x39, 0x11, 0x99, 0x91, 0x55, 0xd9, 0x33, 0xc3, 0x5d, 0x7a, 0x5f, 0x66, 0x3a, 0x4f, + 0x9c, 0xb8, 0x9f, 0x38, 0x71, 0xae, 0x51, 0x50, 0xf6, 0x27, 0x83, 0x8d, 0x89, 0xef, 0x85, 0x1e, + 0x2b, 0x8c, 0x5c, 0x7f, 0x32, 0x58, 0x7f, 0xed, 0xcc, 0xf3, 0xce, 0x46, 0xfc, 0x91, 0x3d, 0x71, + 0x1e, 0xd9, 0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0x40, 0x48, 0xc6, 0x8f, 0xa0, 0xfe, 0x94, + 0xbb, 0x3d, 0xce, 0x87, 0x26, 0xff, 0x7c, 0xca, 0x83, 0x90, 0xbd, 0x0b, 0x8b, 0x36, 0xff, 0x31, + 0xe7, 0x43, 0x6b, 0x62, 0x07, 0xc1, 0xe4, 0xdc, 0xb7, 0x03, 0xde, 0xca, 0xdc, 0xcf, 0x3c, 0xa8, + 0x9a, 0x4d, 0x2a, 0x38, 0x8a, 0xe0, 0xec, 0x0d, 0xa8, 0x06, 0x02, 0x95, 0xbb, 0xa1, 0xef, 0x4d, + 0xae, 0x5b, 0x59, 0xc4, 0xab, 0x08, 0x58, 0x87, 0x40, 0xc6, 0x08, 0x1a, 0x51, 0x0f, 0xc1, 0xc4, + 0x73, 0x03, 0xce, 0x1e, 0xc3, 0xf2, 0xc0, 0x99, 0x9c, 0x73, 0xdf, 0xc2, 0xca, 0x63, 0x97, 0x8f, + 0x3d, 0xd7, 0x19, 0xb4, 0x32, 0xf7, 0x73, 0x0f, 0xca, 0x26, 0xa3, 0x32, 0x51, 0x63, 0x5f, 0x96, + 0xb0, 0x77, 0xa0, 0xc1, 0x5d, 0x82, 0xf3, 0x21, 0xd6, 0x92, 0x5d, 0xd5, 0x63, 0xb0, 0xa8, 0x60, + 0xfc, 0xed, 0x2c, 0x2c, 0x76, 0x5d, 0x27, 0xfc, 0xd4, 0x1e, 0x8d, 0x78, 0xa8, 0xe6, 0xf4, 0x0e, + 0x34, 0x2e, 0x11, 0x80, 0x73, 0xba, 0xf4, 0xfc, 0xa1, 0x9c, 0x51, 0x9d, 0xc0, 0x47, 0x12, 0x7a, + 0xe3, 0xc8, 0xb2, 0x37, 0x8e, 0x2c, 0x75, 0xb9, 0x72, 0x37, 0x2c, 0xd7, 0x3b, 0xd0, 0xf0, 0xf9, + 0xc0, 0xbb, 0xe0, 0xfe, 0xb5, 0x75, 0xe9, 0xb8, 0x43, 0xef, 0xb2, 0x95, 0xbf, 0x9f, 0x79, 0x50, + 0x30, 0xeb, 0x0a, 0xfc, 0x29, 0x42, 0xd9, 0x26, 0x34, 0x06, 0xe7, 0xb6, 0xeb, 0xf2, 0x91, 0x75, + 0x62, 0x0f, 0x9e, 0x4f, 0x27, 0x41, 0xab, 0x70, 0x3f, 0xf3, 0xa0, 0xf2, 0xe4, 0xf6, 0x06, 0xee, + 0xea, 0xc6, 0xd6, 0xb9, 0xed, 0x6e, 0x62, 0x49, 0xcf, 0xb5, 0x27, 0xc1, 0xb9, 0x17, 0x9a, 0x75, + 0x59, 0x83, 0xc0, 0x81, 0xb1, 0x0c, 0x4c, 0x5f, 0x09, 0x5a, 0x7b, 0xe3, 0xdf, 0x66, 0x60, 0xe9, + 0xd8, 0x1d, 0x79, 0x83, 0xe7, 0x3f, 0xe7, 0x12, 0xa5, 0xcc, 0x21, 0xfb, 0xaa, 0x73, 0xc8, 0x7d, + 0xd9, 0x39, 0xac, 0xc2, 0x72, 0x72, 0xb0, 0x72, 0x16, 0x1c, 0x56, 0x44, 0xed, 0x33, 0xae, 0x86, + 0xa5, 0xa6, 0xf1, 0x75, 0x68, 0x0e, 0xa6, 0xbe, 0xcf, 0xdd, 0xb9, 0x79, 0x34, 0x24, 0x3c, 0x9a, + 0xc8, 0x1b, 0x50, 0x75, 0xf9, 0x65, 0x8c, 0x26, 0x69, 0xd7, 0xe5, 0x97, 0x0a, 0xc5, 0x68, 0xc1, + 0xea, 0x6c, 0x37, 0x72, 0x00, 0x3f, 0xcb, 0x40, 0xfe, 0x38, 0xbc, 0xf2, 0xd8, 0xfb, 0x50, 0xb5, + 0x87, 0x43, 0x9f, 0x07, 0x81, 0x15, 0x5e, 0x4f, 0xe8, 0xa4, 0xd4, 0x9f, 0x30, 0x39, 0xc5, 0x36, + 0x15, 0xf5, 0xaf, 0x27, 0xdc, 0xac, 0xd8, 0xf1, 0x07, 0x6b, 0x41, 0x51, 0x7e, 0x62, 0xbf, 0x65, + 0x53, 0x7d, 0xb2, 0xbb, 0x00, 0xf6, 0xd8, 0x9b, 0xba, 0xa1, 0x15, 0xd8, 0x21, 0xae, 0x58, 0xce, + 0x2c, 0x13, 0xa4, 0x67, 0x87, 0xec, 0x0e, 0x94, 0x27, 0xcf, 0xad, 0x60, 0xe0, 0x3b, 0x93, 0x10, + 0x89, 0xa7, 0x6c, 0x96, 0x26, 0xcf, 0x7b, 0xf8, 0xcd, 0xde, 0x85, 0x92, 0x37, 0x0d, 0x27, 0x9e, + 0xe3, 0x86, 0x92, 0x5e, 0x1a, 0x72, 0x20, 0x87, 0xd3, 0xf0, 0x48, 0x80, 0xcd, 0x08, 0x81, 0xbd, + 0x05, 0xb5, 0x81, 0xe7, 0x9e, 0x3a, 0xfe, 0x98, 0x38, 0x42, 0x6b, 0x01, 0xfb, 0x4a, 0x02, 0x8d, + 0x3f, 0xcc, 0x42, 0xa5, 0xef, 0xdb, 0x6e, 0x60, 0x0f, 0x04, 0x80, 0xad, 0x41, 0x31, 0xbc, 0xb2, + 0xce, 0xed, 0xe0, 0x1c, 0xa7, 0x5a, 0x36, 0x17, 0xc2, 0xab, 0x5d, 0x3b, 0x38, 0x67, 0xab, 0xb0, + 0x40, 0xa3, 0xc4, 0x09, 0xe5, 0x4c, 0xf9, 0x25, 0x0e, 0x88, 0x3b, 0x1d, 0x5b, 0xc9, 0xae, 0x72, + 0x48, 0x31, 0x4d, 0x77, 0x3a, 0xde, 0xd2, 0xe1, 0x62, 0xf2, 0x27, 0x62, 0xbb, 0xa9, 0x03, 0x9a, + 0x5e, 0x19, 0x21, 0xd8, 0xc7, 0x1b, 0x50, 0x95, 0xc5, 0xdc, 0x39, 0x3b, 0xa7, 0x39, 0x16, 0xcc, + 0x0a, 0x21, 0x20, 0x48, 0xb4, 0x10, 0x3a, 0x63, 0x6e, 0x05, 0xa1, 0x3d, 0x9e, 0xc8, 0x29, 0x95, + 0x05, 0xa4, 0x27, 0x00, 0x58, 0xec, 0x85, 0xf6, 0xc8, 0x3a, 0xe5, 0x3c, 0x68, 0x15, 0x65, 0xb1, + 0x80, 0xec, 0x70, 0x1e, 0xb0, 0xaf, 0x41, 0x7d, 0xc8, 0x83, 0xd0, 0x92, 0x9b, 0xc1, 0x83, 0x56, + 0x09, 0x4f, 0x7e, 0x4d, 0x40, 0xdb, 0x0a, 0xc8, 0x5e, 0x03, 0xf0, 0xed, 0x4b, 0x4b, 0x2c, 0x04, + 0xbf, 0x6a, 0x95, 0x69, 0x17, 0x7c, 0xfb, 0xb2, 0x7f, 0xb5, 0xcb, 0xaf, 0x04, 0xd5, 0x3c, 0xe5, + 0xa1, 0xb6, 0x68, 0x81, 0xa4, 0x4e, 0x63, 0x0f, 0x98, 0x06, 0xde, 0xe6, 0xa1, 0xed, 0x8c, 0x02, + 0xf6, 0x01, 0x54, 0x43, 0x0d, 0x19, 0xd9, 0x60, 0x25, 0x22, 0x21, 0xad, 0x82, 0x99, 0xc0, 0x33, + 0xce, 0xa1, 0xb4, 0xc3, 0xf9, 0x9e, 0x33, 0x76, 0x42, 0xb6, 0x0a, 0x85, 0x53, 0xe7, 0x8a, 0x13, + 0xb1, 0xe7, 0x76, 0x6f, 0x99, 0xf4, 0xc9, 0xee, 0x01, 0xe0, 0x1f, 0xd6, 0x38, 0xa2, 0xa6, 0xdd, + 0x5b, 0x66, 0x19, 0x61, 0xfb, 0x81, 0x1d, 0xb2, 0x75, 0x28, 0x4e, 0xb8, 0x3f, 0xe0, 0x6a, 0xdf, + 0x76, 0x6f, 0x99, 0x0a, 0xb0, 0x59, 0x84, 0xc2, 0x48, 0xb4, 0x6e, 0xfc, 0x71, 0x01, 0x2a, 0x3d, + 0xee, 0x46, 0xa7, 0x8c, 0x41, 0x5e, 0x2c, 0x88, 0x3c, 0x59, 0xf8, 0x37, 0x7b, 0x13, 0x2a, 0xb8, + 0x74, 0x41, 0xe8, 0x3b, 0xee, 0x19, 0x51, 0xf5, 0x66, 0xb6, 0x95, 0x31, 0x41, 0x80, 0x7b, 0x08, + 0x65, 0x4d, 0xc8, 0xd9, 0x63, 0x45, 0xd5, 0xe2, 0x4f, 0x76, 0x1b, 0x4a, 0xf6, 0x38, 0xa4, 0xe1, + 0x55, 0x11, 0x5c, 0xb4, 0xc7, 0x21, 0x0e, 0xed, 0x0d, 0xa8, 0x4e, 0xec, 0xeb, 0xb1, 0x38, 0xcb, + 0x11, 0x39, 0x54, 0xcd, 0x8a, 0x84, 0x21, 0x41, 0x3c, 0x81, 0x25, 0x1d, 0x45, 0x75, 0x5e, 0x88, + 0x3a, 0x5f, 0xd4, 0xb0, 0xe5, 0x18, 0xde, 0x81, 0x86, 0xaa, 0xe3, 0xd3, 0x7c, 0x90, 0x4c, 0xca, + 0x66, 0x5d, 0x82, 0xd5, 0x2c, 0x1f, 0x40, 0xf3, 0xd4, 0x71, 0xed, 0x91, 0x35, 0x18, 0x85, 0x17, + 0xd6, 0x90, 0x8f, 0x42, 0x1b, 0x29, 0xa6, 0x60, 0xd6, 0x11, 0xbe, 0x35, 0x0a, 0x2f, 0xb6, 0x05, + 0x94, 0x7d, 0x03, 0xca, 0xa7, 0x9c, 0x5b, 0xb8, 0x58, 0xad, 0x52, 0xe2, 0xe0, 0xa9, 0x1d, 0x32, + 0x4b, 0xa7, 0x6a, 0xaf, 0xbe, 0x01, 0x4d, 0x6f, 0x1a, 0x9e, 0x79, 0x8e, 0x7b, 0x66, 0x09, 0x7e, + 0x67, 0x39, 0x43, 0xa4, 0xa1, 0xfc, 0x66, 0xf6, 0x71, 0xc6, 0xac, 0xab, 0x32, 0xc1, 0x79, 0xba, + 0x43, 0xf6, 0x36, 0x34, 0x46, 0x76, 0x10, 0x5a, 0xe7, 0xde, 0xc4, 0x9a, 0x4c, 0x4f, 0x9e, 0xf3, + 0xeb, 0x56, 0x0d, 0x17, 0xa2, 0x26, 0xc0, 0xbb, 0xde, 0xe4, 0x08, 0x81, 0x82, 0xb2, 0x71, 0x9c, + 0x34, 0x08, 0xb8, 0x9f, 0x79, 0x50, 0x33, 0xcb, 0x02, 0x42, 0x9d, 0x7e, 0x06, 0x4b, 0xb8, 0x3d, + 0x83, 0x69, 0x10, 0x7a, 0x63, 0x4b, 0xf0, 0x6a, 0x7f, 0x18, 0xb4, 0x2a, 0x48, 0x6b, 0x5f, 0x97, + 0x83, 0xd5, 0xf6, 0x78, 0x63, 0x9b, 0x07, 0xe1, 0x16, 0x22, 0x9b, 0x84, 0x2b, 0x2e, 0xf4, 0x6b, + 0x73, 0x71, 0x38, 0x0b, 0x67, 0xdf, 0x00, 0x66, 0x8f, 0x46, 0xde, 0xa5, 0x15, 0xf0, 0xd1, 0xa9, + 0x25, 0x17, 0xb1, 0x55, 0xbf, 0x9f, 0x79, 0x50, 0x32, 0x9b, 0x58, 0xd2, 0xe3, 0xa3, 0xd3, 0x23, + 0x82, 0xb3, 0x0f, 0x00, 0x0f, 0x93, 0x75, 0xca, 0xed, 0x70, 0xea, 0xf3, 0xa0, 0xd5, 0xb8, 0x9f, + 0x7b, 0x50, 0x7f, 0xb2, 0x18, 0xad, 0x17, 0x82, 0x37, 0x9d, 0xd0, 0xac, 0x0a, 0x3c, 0xf9, 0x1d, + 0xac, 0x6f, 0xc3, 0x6a, 0xfa, 0x90, 0x04, 0x51, 0x89, 0x55, 0x11, 0xc4, 0x98, 0x37, 0xc5, 0x9f, + 0x6c, 0x19, 0x0a, 0x17, 0xf6, 0x68, 0xca, 0x25, 0x4f, 0xa7, 0x8f, 0x0f, 0xb3, 0xdf, 0xcd, 0x18, + 0x7f, 0x94, 0x81, 0x2a, 0xcd, 0x52, 0xca, 0x22, 0x6f, 0x42, 0x4d, 0x51, 0x03, 0xf7, 0x7d, 0xcf, + 0x97, 0x5c, 0x4d, 0x51, 0x5e, 0x47, 0xc0, 0xc4, 0xad, 0xa2, 0x90, 0x26, 0x3e, 0x77, 0xc6, 0xf6, + 0x99, 0x6a, 0x5a, 0x91, 0xd2, 0x91, 0x04, 0xb3, 0xf7, 0xe2, 0xf6, 0x7c, 0x6f, 0x1a, 0x72, 0x79, + 0xe7, 0x55, 0xe5, 0xf4, 0x4c, 0x01, 0x8b, 0x5a, 0xc7, 0xaf, 0x57, 0xa0, 0x73, 0xe3, 0x77, 0x33, + 0xc0, 0xc4, 0xb0, 0xfb, 0x1e, 0x35, 0x20, 0x29, 0x74, 0xb6, 0x66, 0xe6, 0x95, 0x4f, 0x48, 0xf6, + 0x45, 0x27, 0xc4, 0x80, 0x02, 0x8d, 0x3d, 0x9f, 0x32, 0x76, 0x2a, 0xfa, 0x41, 0xbe, 0x94, 0x6b, + 0xe6, 0x8d, 0xff, 0x96, 0x83, 0xe5, 0x2d, 0xba, 0xb2, 0xdb, 0x83, 0x01, 0x9f, 0x44, 0x67, 0xe7, + 0x1e, 0x54, 0x5c, 0x6f, 0xc8, 0x15, 0xc5, 0xd2, 0xc0, 0x40, 0x80, 0x34, 0x72, 0x3d, 0xb7, 0x1d, + 0x97, 0x06, 0x4e, 0x8b, 0x59, 0x46, 0x08, 0x0e, 0xfb, 0x6d, 0x68, 0x4c, 0xb8, 0x3b, 0xd4, 0x8f, + 0x08, 0x09, 0x55, 0x35, 0x09, 0x96, 0xa7, 0xe3, 0x1e, 0x54, 0x4e, 0xa7, 0x84, 0x27, 0x18, 0x4b, + 0x1e, 0x69, 0x00, 0x24, 0xa8, 0x4d, 0xfc, 0x65, 0x32, 0x0d, 0xce, 0xb1, 0xb4, 0x80, 0xa5, 0x45, + 0xf1, 0x2d, 0x8a, 0xee, 0x02, 0x0c, 0xa7, 0x41, 0x28, 0x4f, 0xcc, 0x02, 0x16, 0x96, 0x05, 0x84, + 0x4e, 0xcc, 0x37, 0x61, 0x69, 0x6c, 0x5f, 0x59, 0x48, 0x3b, 0x96, 0xe3, 0x5a, 0xa7, 0x23, 0xbc, + 0x73, 0x8a, 0x88, 0xd7, 0x1c, 0xdb, 0x57, 0x9f, 0x88, 0x92, 0xae, 0xbb, 0x83, 0x70, 0xc1, 0x56, + 0x94, 0xb8, 0xe3, 0xf3, 0x80, 0xfb, 0x17, 0x1c, 0x39, 0x41, 0x3e, 0x92, 0x69, 0x4c, 0x82, 0x8a, + 0x11, 0x8d, 0xc5, 0xbc, 0xc3, 0xd1, 0x80, 0x8e, 0xbd, 0x59, 0x1c, 0x3b, 0xee, 0x6e, 0x38, 0x1a, + 0x88, 0x7b, 0x45, 0xf0, 0x91, 0x09, 0xf7, 0xad, 0xe7, 0x97, 0x78, 0x86, 0xf3, 0xc8, 0x37, 0x8e, + 0xb8, 0xff, 0xec, 0x52, 0x5c, 0xfd, 0x83, 0x00, 0x19, 0x91, 0x7d, 0xdd, 0xaa, 0xe0, 0x01, 0x2f, + 0x0d, 0x02, 0xc1, 0x82, 0xec, 0x6b, 0x71, 0x08, 0xc5, 0x68, 0x6d, 0xdc, 0x05, 0x3e, 0xc4, 0xe6, + 0x03, 0xe4, 0xa8, 0x35, 0x1c, 0x6c, 0x5b, 0x16, 0x88, 0x7e, 0x02, 0x41, 0xf5, 0x6a, 0xb0, 0xa7, + 0x23, 0xfb, 0x2c, 0x40, 0x96, 0x52, 0x33, 0xab, 0x12, 0xb8, 0x23, 0x60, 0xc6, 0xa7, 0x24, 0x64, + 0x69, 0x7b, 0x2b, 0xcf, 0x8c, 0xb8, 0xea, 0x11, 0x82, 0xfb, 0x5a, 0x32, 0xe5, 0x57, 0xda, 0xa6, + 0x65, 0x53, 0x36, 0xcd, 0xf8, 0xfd, 0x0c, 0x54, 0x65, 0xcb, 0x28, 0x94, 0xb0, 0x0d, 0x60, 0x6a, + 0x17, 0xc3, 0x2b, 0x67, 0x68, 0x9d, 0x5c, 0x87, 0x3c, 0x20, 0xa2, 0xd9, 0xbd, 0x65, 0x36, 0x65, + 0x59, 0xff, 0xca, 0x19, 0x6e, 0x8a, 0x12, 0xf6, 0x10, 0x9a, 0x09, 0xfc, 0x20, 0xf4, 0x89, 0xa2, + 0x77, 0x6f, 0x99, 0x75, 0x0d, 0xbb, 0x17, 0xfa, 0xe2, 0x8c, 0x08, 0x91, 0x67, 0x1a, 0x5a, 0x8e, + 0x3b, 0xe4, 0x57, 0x48, 0x46, 0x35, 0xb3, 0x42, 0xb0, 0xae, 0x00, 0x6d, 0xd6, 0xa1, 0xaa, 0x37, + 0x67, 0x9c, 0x41, 0x49, 0xc9, 0x4b, 0x28, 0x30, 0xcc, 0x0c, 0xc9, 0x2c, 0x87, 0xd1, 0x48, 0x6e, + 0x43, 0x29, 0x39, 0x02, 0xb3, 0x18, 0xbe, 0x72, 0xc7, 0xc6, 0xf7, 0xa0, 0xb9, 0x27, 0x88, 0xc7, + 0x15, 0xc4, 0x2a, 0xe5, 0xbf, 0x55, 0x58, 0xd0, 0x0e, 0x4d, 0xd9, 0x94, 0x5f, 0xe2, 0xce, 0x3d, + 0xf7, 0x82, 0x50, 0xf6, 0x82, 0x7f, 0x1b, 0x7f, 0x9c, 0x01, 0xd6, 0x09, 0x42, 0x67, 0x6c, 0x87, + 0x7c, 0x87, 0x47, 0x6c, 0xe1, 0x10, 0xaa, 0xa2, 0xb5, 0xbe, 0xd7, 0x26, 0x81, 0x8c, 0x04, 0x8a, + 0x77, 0xe5, 0x31, 0x9e, 0xaf, 0xb0, 0xa1, 0x63, 0x13, 0x9b, 0x4f, 0x34, 0x20, 0x4e, 0x59, 0x68, + 0xfb, 0x67, 0x3c, 0x44, 0x31, 0x4e, 0xca, 0xfb, 0x40, 0x20, 0x21, 0xc0, 0xad, 0xff, 0x1a, 0x2c, + 0xce, 0xb5, 0xa1, 0xf3, 0xe5, 0x72, 0x0a, 0x5f, 0xce, 0xe9, 0x7c, 0xd9, 0x82, 0xa5, 0xc4, 0xb8, + 0x24, 0xa5, 0xad, 0x41, 0x51, 0x1c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, 0x3c, 0xe5, 0x5c, 0x88, + 0xc1, 0x8f, 0x60, 0xf9, 0x94, 0x73, 0xdf, 0x0e, 0xb1, 0x10, 0x4f, 0x8c, 0xd8, 0x21, 0xd9, 0xf0, + 0xa2, 0x2c, 0xeb, 0xd9, 0xe1, 0x11, 0xf7, 0xc5, 0x4e, 0x19, 0xff, 0x23, 0x03, 0x0d, 0xc1, 0x41, + 0xf7, 0x6d, 0xf7, 0x5a, 0xad, 0xd3, 0x5e, 0xea, 0x3a, 0x3d, 0xd0, 0x2e, 0x43, 0x0d, 0xfb, 0xcb, + 0x2e, 0x52, 0x6e, 0x76, 0x91, 0xd8, 0x7d, 0xa8, 0x26, 0xc6, 0x5a, 0xc0, 0xb1, 0x42, 0x10, 0x0d, + 0xf2, 0x17, 0x5f, 0xc6, 0xb7, 0xa1, 0x19, 0x0f, 0x5b, 0xae, 0x21, 0x83, 0xbc, 0x20, 0x49, 0xd9, + 0x00, 0xfe, 0x6d, 0xfc, 0xd3, 0x0c, 0x21, 0x6e, 0x79, 0x4e, 0x24, 0x9d, 0x0a, 0x44, 0x21, 0xf7, + 0x2a, 0x44, 0xf1, 0xf7, 0x8d, 0x52, 0xfd, 0x2f, 0x3e, 0x59, 0x71, 0x74, 0x02, 0xee, 0x0e, 0x2d, + 0x7b, 0x34, 0x42, 0xe6, 0x5b, 0x32, 0x8b, 0xe2, 0xbb, 0x3d, 0x1a, 0x19, 0xef, 0xc0, 0xa2, 0x36, + 0xba, 0x17, 0xcc, 0xe3, 0x00, 0xd8, 0x9e, 0x13, 0x84, 0xc7, 0x6e, 0x30, 0xd1, 0x04, 0xb7, 0x3b, + 0x50, 0x16, 0x1c, 0x56, 0x8c, 0x8c, 0x8e, 0x6c, 0xc1, 0x14, 0x2c, 0x57, 0x8c, 0x2b, 0xc0, 0x42, + 0xfb, 0x4a, 0x16, 0x66, 0x65, 0xa1, 0x7d, 0x85, 0x85, 0xc6, 0x77, 0x61, 0x29, 0xd1, 0x9e, 0xec, + 0xfa, 0x0d, 0x28, 0x4c, 0xc3, 0x2b, 0x4f, 0x89, 0xe6, 0x15, 0x49, 0x21, 0x42, 0x01, 0x34, 0xa9, + 0xc4, 0xf8, 0x08, 0x16, 0x0f, 0xf8, 0xa5, 0x3c, 0xc4, 0x6a, 0x20, 0x6f, 0x43, 0xfe, 0x25, 0x4a, + 0x21, 0x96, 0x1b, 0x1b, 0xc0, 0xf4, 0xca, 0xb2, 0x57, 0x4d, 0x47, 0xcc, 0x24, 0x74, 0x44, 0xe3, + 0x6d, 0x60, 0x3d, 0xe7, 0xcc, 0xdd, 0xe7, 0x41, 0x60, 0x9f, 0x45, 0xc7, 0xbe, 0x09, 0xb9, 0x71, + 0x70, 0x26, 0x79, 0x94, 0xf8, 0xd3, 0xf8, 0x16, 0x2c, 0x25, 0xf0, 0x64, 0xc3, 0xaf, 0x41, 0x39, + 0x70, 0xce, 0x5c, 0x14, 0xac, 0x64, 0xd3, 0x31, 0xc0, 0xd8, 0x81, 0xe5, 0x4f, 0xb8, 0xef, 0x9c, + 0x5e, 0xbf, 0xac, 0xf9, 0x64, 0x3b, 0xd9, 0xd9, 0x76, 0x3a, 0xb0, 0x32, 0xd3, 0x8e, 0xec, 0x9e, + 0xc8, 0x57, 0xee, 0x64, 0xc9, 0xa4, 0x0f, 0x8d, 0xef, 0x65, 0x75, 0xbe, 0x67, 0x1c, 0x03, 0xdb, + 0xf2, 0x5c, 0x97, 0x0f, 0xc2, 0x23, 0xce, 0xfd, 0xd8, 0x4a, 0x15, 0xd3, 0x6a, 0xe5, 0xc9, 0x9a, + 0x5c, 0xd9, 0x59, 0x66, 0x2a, 0x89, 0x98, 0x41, 0x7e, 0xc2, 0xfd, 0x31, 0x36, 0x5c, 0x32, 0xf1, + 0x6f, 0x63, 0x05, 0x96, 0x12, 0xcd, 0x4a, 0xbd, 0xfe, 0x31, 0xac, 0x6c, 0x3b, 0xc1, 0x60, 0xbe, + 0xc3, 0x35, 0x28, 0x4e, 0xa6, 0x27, 0x56, 0x92, 0x2f, 0x3f, 0xe3, 0xd7, 0x42, 0xdb, 0x9b, 0xad, + 0x21, 0xdb, 0xfa, 0x9b, 0x19, 0xc8, 0xef, 0xf6, 0xf7, 0xb6, 0xd8, 0x3a, 0x94, 0x1c, 0x77, 0xe0, + 0x8d, 0x85, 0xe0, 0x45, 0x73, 0x8e, 0xbe, 0x6f, 0x3c, 0x60, 0x77, 0xa0, 0x8c, 0xf2, 0x9a, 0x50, + 0x6d, 0xa5, 0xe8, 0x53, 0x12, 0x80, 0x3d, 0x6f, 0xf0, 0x5c, 0xe8, 0xd4, 0xfc, 0x6a, 0xe2, 0xf8, + 0xa8, 0x35, 0x2b, 0x65, 0x38, 0x4f, 0x77, 0x7d, 0x5c, 0x40, 0x1a, 0xb1, 0xf1, 0x57, 0x45, 0x28, + 0xca, 0xdb, 0x96, 0x6e, 0xee, 0xd0, 0xb9, 0xe0, 0xf1, 0xcd, 0x2d, 0xbe, 0x84, 0x3c, 0xe0, 0xf3, + 0xb1, 0x17, 0x46, 0x02, 0x1b, 0xed, 0x41, 0x95, 0x80, 0x52, 0x64, 0xd3, 0x84, 0x06, 0x32, 0x31, + 0xe4, 0x08, 0x69, 0xa0, 0x5f, 0xe5, 0x77, 0xa0, 0xa8, 0xee, 0xfe, 0x7c, 0xa4, 0xd3, 0x2c, 0x0c, + 0x48, 0x5a, 0x5b, 0x87, 0xd2, 0xc0, 0x9e, 0xd8, 0x03, 0x27, 0xbc, 0x96, 0x0c, 0x21, 0xfa, 0x16, + 0xad, 0x8f, 0xbc, 0x81, 0x3d, 0xb2, 0x4e, 0xec, 0x91, 0xed, 0x0e, 0xb8, 0xd4, 0xdd, 0xab, 0x08, + 0xdc, 0x24, 0x98, 0xd0, 0xcf, 0xe5, 0x38, 0x15, 0x16, 0xa9, 0xf0, 0x72, 0xf4, 0x0a, 0x4d, 0x08, + 0x97, 0xde, 0x78, 0xec, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x26, 0xc8, 0x0e, 0xc7, 0xd9, + 0xca, 0xe2, 0x4b, 0x5a, 0xba, 0x32, 0x75, 0x45, 0xc0, 0x4f, 0xc9, 0x90, 0x30, 0x2f, 0x8b, 0xe5, + 0x34, 0x59, 0xec, 0x5d, 0x58, 0x9c, 0xba, 0x01, 0x0f, 0xc3, 0x11, 0x1f, 0x46, 0x63, 0xa9, 0x20, + 0x52, 0x33, 0x2a, 0x50, 0xc3, 0xd9, 0x80, 0x25, 0x32, 0x3a, 0x04, 0x76, 0xe8, 0x05, 0xe7, 0x4e, + 0x60, 0x05, 0x42, 0x43, 0x22, 0x75, 0x77, 0x11, 0x8b, 0x7a, 0xb2, 0xa4, 0x47, 0x2a, 0xd2, 0xda, + 0x0c, 0xbe, 0xcf, 0x07, 0xdc, 0xb9, 0xe0, 0x43, 0x94, 0xd3, 0x72, 0xe6, 0x4a, 0xa2, 0x8e, 0x29, + 0x0b, 0x51, 0xe8, 0x9e, 0x8e, 0xad, 0xe9, 0x64, 0x68, 0x0b, 0x61, 0xa5, 0x4e, 0xc2, 0xb0, 0x3b, + 0x1d, 0x1f, 0x13, 0x84, 0x3d, 0x06, 0x25, 0x89, 0x49, 0xf9, 0xb0, 0x91, 0xe0, 0x67, 0x82, 0x58, + 0xcd, 0xaa, 0xc4, 0x20, 0x41, 0x31, 0x21, 0x73, 0x36, 0x67, 0x64, 0xce, 0x16, 0x14, 0x27, 0xbe, + 0x73, 0x61, 0x87, 0xbc, 0xb5, 0x48, 0x0c, 0x5c, 0x7e, 0x0a, 0xce, 0xe0, 0xb8, 0x4e, 0xe8, 0xd8, + 0xa1, 0xe7, 0xb7, 0x18, 0x96, 0xc5, 0x00, 0xf6, 0x10, 0x16, 0x91, 0x46, 0x82, 0xd0, 0x0e, 0xa7, + 0x81, 0x94, 0x40, 0x97, 0x90, 0x98, 0x50, 0x86, 0xee, 0x21, 0x1c, 0x85, 0x50, 0xf6, 0x2d, 0x58, + 0x25, 0xb2, 0xc0, 0x1a, 0x52, 0xb2, 0x46, 0x81, 0x60, 0x19, 0x97, 0x62, 0x09, 0x4b, 0x05, 0x7d, + 0x4b, 0xf9, 0x5a, 0x48, 0x07, 0xef, 0xc3, 0x9a, 0x24, 0x93, 0xb9, 0x5a, 0x2b, 0x58, 0x6b, 0x99, + 0x8a, 0x67, 0xaa, 0x6d, 0xc0, 0xa2, 0x18, 0x92, 0x33, 0xb0, 0x64, 0x6d, 0x71, 0x12, 0x56, 0xc5, + 0xe8, 0x51, 0x53, 0x6a, 0x50, 0xa1, 0x89, 0x65, 0xcf, 0xf8, 0x35, 0xfb, 0x1e, 0x34, 0x88, 0x64, + 0x50, 0xbd, 0x42, 0x4e, 0xbf, 0x8e, 0x9c, 0x7e, 0x45, 0x59, 0x38, 0xa3, 0x52, 0x64, 0xf6, 0xf5, + 0x41, 0xe2, 0x5b, 0x1c, 0x87, 0x91, 0x73, 0xca, 0x43, 0x67, 0xcc, 0x5b, 0x6b, 0x44, 0x60, 0xea, + 0x5b, 0x9c, 0xd4, 0xe9, 0x04, 0x4b, 0x5a, 0xc4, 0x17, 0xe8, 0x0b, 0x69, 0x77, 0xe4, 0x05, 0x5c, + 0x99, 0xa8, 0x5a, 0xb7, 0xe5, 0x21, 0x14, 0x40, 0xc9, 0xf6, 0x8c, 0x9f, 0x66, 0xe8, 0x1e, 0x93, + 0xc7, 0x3e, 0xd0, 0xb4, 0x32, 0x3a, 0xf0, 0x96, 0xe7, 0x8e, 0xae, 0x25, 0x0f, 0x00, 0x02, 0x1d, + 0xba, 0x23, 0x3c, 0x84, 0x8e, 0xab, 0xa3, 0x10, 0xcb, 0xac, 0x2a, 0x20, 0x22, 0xdd, 0x83, 0xca, + 0x64, 0x7a, 0x32, 0x72, 0x06, 0x84, 0x92, 0xa3, 0x56, 0x08, 0x84, 0x08, 0x42, 0x2d, 0x25, 0x42, + 0x20, 0x8c, 0x3c, 0x62, 0x54, 0x24, 0x0c, 0x51, 0x90, 0x25, 0x73, 0x1f, 0xb9, 0x40, 0xd5, 0xc4, + 0xbf, 0x8d, 0x4d, 0x58, 0x4e, 0x0e, 0x5a, 0xde, 0x17, 0x0f, 0xa1, 0x24, 0x59, 0x8c, 0xb2, 0x57, + 0xd4, 0x35, 0x0b, 0xb2, 0xd0, 0xac, 0xa2, 0x72, 0xe3, 0xb7, 0x17, 0x60, 0x49, 0x42, 0xb7, 0xc4, + 0x8a, 0xf4, 0xa6, 0xe3, 0xb1, 0xed, 0xa7, 0xf0, 0xae, 0xcc, 0x8b, 0x79, 0x57, 0x76, 0x8e, 0x77, + 0x25, 0x15, 0x56, 0x62, 0x7d, 0x49, 0x85, 0x55, 0x6c, 0x01, 0xe9, 0x10, 0xba, 0xf9, 0xb2, 0x26, + 0xc1, 0x7d, 0x32, 0x93, 0xce, 0x71, 0xda, 0x42, 0x0a, 0xa7, 0xd5, 0xf9, 0xe4, 0xc2, 0x0c, 0x9f, + 0x7c, 0x03, 0x68, 0xaf, 0x15, 0xdb, 0x2f, 0x92, 0x5a, 0x81, 0x30, 0x69, 0x03, 0x7d, 0x07, 0x1a, + 0xb3, 0xac, 0x89, 0x78, 0x60, 0x3d, 0x85, 0x31, 0x39, 0x63, 0x8e, 0x97, 0x8c, 0x86, 0x5c, 0x96, + 0x8c, 0xc9, 0x19, 0xf3, 0x3d, 0x2c, 0x51, 0xf8, 0x1d, 0x00, 0xea, 0x1b, 0x69, 0x1d, 0x90, 0xd6, + 0xdf, 0x4e, 0xee, 0x85, 0xbe, 0xea, 0x1b, 0xe2, 0x63, 0xea, 0x73, 0x24, 0xfe, 0x32, 0xd6, 0x44, + 0xba, 0x7f, 0x06, 0x75, 0x6f, 0xc2, 0x5d, 0x2b, 0x66, 0x11, 0x15, 0x6c, 0xea, 0xad, 0x17, 0x34, + 0xd5, 0x55, 0xb8, 0x66, 0x4d, 0xd4, 0x8d, 0x3e, 0xd9, 0x3e, 0x2d, 0x3c, 0xd7, 0x5a, 0xab, 0x7e, + 0x89, 0xd6, 0xea, 0x58, 0x39, 0xfa, 0x36, 0xfe, 0x4e, 0x06, 0x2a, 0xda, 0xb0, 0xd9, 0x0a, 0x2c, + 0x6e, 0x1d, 0x1e, 0x1e, 0x75, 0xcc, 0x76, 0xbf, 0xfb, 0x49, 0xc7, 0xda, 0xda, 0x3b, 0xec, 0x75, + 0x9a, 0xb7, 0x04, 0x78, 0xef, 0x70, 0xab, 0xbd, 0x67, 0xed, 0x1c, 0x9a, 0x5b, 0x0a, 0x9c, 0x61, + 0xab, 0xc0, 0xcc, 0xce, 0xfe, 0x61, 0xbf, 0x93, 0x80, 0x67, 0x59, 0x13, 0xaa, 0x9b, 0x66, 0xa7, + 0xbd, 0xb5, 0x2b, 0x21, 0x39, 0xb6, 0x0c, 0xcd, 0x9d, 0xe3, 0x83, 0xed, 0xee, 0xc1, 0x53, 0x6b, + 0xab, 0x7d, 0xb0, 0xd5, 0xd9, 0xeb, 0x6c, 0x37, 0xf3, 0xac, 0x06, 0xe5, 0xf6, 0x66, 0xfb, 0x60, + 0xfb, 0xf0, 0xa0, 0xb3, 0xdd, 0x2c, 0x18, 0xbf, 0x02, 0xe5, 0x78, 0xa2, 0x15, 0x28, 0x1e, 0x1f, + 0x3c, 0x3b, 0x38, 0xfc, 0xf4, 0xa0, 0x79, 0x8b, 0x95, 0xa1, 0x80, 0xfd, 0x37, 0x33, 0x0c, 0x60, + 0x81, 0xfa, 0x6c, 0x66, 0x59, 0x09, 0xf2, 0x9b, 0x87, 0xfd, 0xdd, 0x66, 0xce, 0xf8, 0x8b, 0x0c, + 0xac, 0xe0, 0x94, 0x87, 0xb3, 0x4c, 0xe0, 0x3e, 0x54, 0x06, 0x9e, 0x37, 0x11, 0x0a, 0x52, 0x2c, + 0x08, 0xe8, 0x20, 0x71, 0xc0, 0x89, 0xe7, 0x9e, 0x7a, 0xfe, 0x80, 0x4b, 0x1e, 0x00, 0x08, 0xda, + 0x11, 0x10, 0x41, 0x83, 0x92, 0x88, 0x09, 0x83, 0x58, 0x40, 0x85, 0x60, 0x84, 0xb2, 0x0a, 0x0b, + 0x27, 0x3e, 0xb7, 0x07, 0xe7, 0xf2, 0xf4, 0xcb, 0x2f, 0xf6, 0xf5, 0x58, 0x75, 0x1f, 0x08, 0x9a, + 0x1a, 0xf1, 0x21, 0x1e, 0x81, 0x92, 0xd9, 0x90, 0xf0, 0x2d, 0x09, 0x16, 0x97, 0x88, 0x7d, 0x62, + 0xbb, 0x43, 0xcf, 0xe5, 0x43, 0xa9, 0x21, 0xc4, 0x00, 0xe3, 0x08, 0x56, 0x67, 0xe7, 0x27, 0xf9, + 0xc5, 0x07, 0x1a, 0xbf, 0x20, 0x81, 0x7d, 0xfd, 0x66, 0x52, 0xd0, 0x78, 0xc7, 0xdf, 0xcb, 0x43, + 0x5e, 0x08, 0x70, 0x37, 0xca, 0x7a, 0xba, 0x44, 0x9e, 0x9b, 0xf3, 0xda, 0xa0, 0x85, 0x80, 0x6e, + 0x76, 0x32, 0x43, 0x95, 0x11, 0x82, 0x37, 0x7a, 0x54, 0xec, 0xf3, 0xc1, 0x85, 0xb4, 0x43, 0x51, + 0xb1, 0xc9, 0x07, 0x17, 0xa8, 0x0a, 0xd9, 0x21, 0xd5, 0xa5, 0xf3, 0x5e, 0x0c, 0xec, 0x10, 0x6b, + 0xca, 0x22, 0xac, 0x57, 0x8c, 0x8a, 0xb0, 0x56, 0x0b, 0x8a, 0x8e, 0x7b, 0xe2, 0x4d, 0xdd, 0x21, + 0x1e, 0xef, 0x92, 0xa9, 0x3e, 0xd1, 0x49, 0x84, 0x9c, 0x48, 0xdc, 0x1f, 0x74, 0x9a, 0x4b, 0x02, + 0xd0, 0x17, 0x37, 0xc8, 0x7b, 0x50, 0x0e, 0xae, 0xdd, 0x81, 0x7e, 0x86, 0x97, 0xe5, 0xfa, 0x88, + 0xd9, 0x6f, 0xf4, 0xae, 0xdd, 0x01, 0x9e, 0xd8, 0x52, 0x20, 0xff, 0x62, 0xef, 0x43, 0x29, 0x32, + 0xd7, 0x12, 0x07, 0xbe, 0xad, 0xd7, 0x50, 0x36, 0x5a, 0xd2, 0x8a, 0x23, 0x54, 0xf6, 0x08, 0x16, + 0xd0, 0xa6, 0x1a, 0xb4, 0xaa, 0x58, 0x49, 0x89, 0xe9, 0x62, 0x18, 0xe8, 0x9f, 0xe1, 0x43, 0xb4, + 0xaf, 0x9a, 0x12, 0x6d, 0xfd, 0x19, 0xd4, 0x12, 0x6d, 0xe9, 0xba, 0x6f, 0x8d, 0x74, 0xdf, 0xb7, + 0x74, 0xdd, 0x37, 0xbe, 0x09, 0x64, 0x35, 0x5d, 0x17, 0xfe, 0x35, 0x28, 0xa9, 0xa9, 0x88, 0xf3, + 0x27, 0xcf, 0x8e, 0xd5, 0xfb, 0xec, 0x60, 0xab, 0x79, 0x8b, 0x35, 0xa0, 0xd2, 0xde, 0xc2, 0x23, + 0x8d, 0x80, 0x8c, 0x40, 0x39, 0x6a, 0xf7, 0x7a, 0x11, 0x24, 0x6b, 0xec, 0x40, 0x73, 0x76, 0xa4, + 0x82, 0x26, 0x43, 0x05, 0x93, 0x16, 0xe7, 0x18, 0x20, 0x34, 0x1b, 0x32, 0x22, 0x93, 0xf8, 0x4c, + 0x1f, 0xc6, 0xfb, 0xd0, 0x14, 0xf7, 0x9a, 0x58, 0xaa, 0x40, 0xb3, 0xdc, 0x8e, 0x84, 0x48, 0xa6, + 0x5b, 0x9d, 0x4b, 0x66, 0x85, 0x60, 0xd8, 0x95, 0xf1, 0x01, 0x2c, 0x6a, 0xd5, 0x62, 0x4d, 0x54, + 0xdc, 0x95, 0xb3, 0x9a, 0x28, 0xea, 0x1d, 0x54, 0x62, 0xac, 0xc1, 0x8a, 0xf8, 0xec, 0x5c, 0x70, + 0x37, 0xec, 0x4d, 0x4f, 0xc8, 0x55, 0xe8, 0x78, 0xae, 0xd0, 0x47, 0xca, 0x51, 0xc9, 0xcd, 0x44, + 0xbe, 0x21, 0x95, 0xd6, 0x2c, 0x92, 0xc6, 0xba, 0xd6, 0x03, 0x56, 0xdc, 0xc0, 0x7f, 0x13, 0xca, + 0x6b, 0x39, 0x02, 0x89, 0x65, 0x3d, 0xea, 0x74, 0x4c, 0xeb, 0xf0, 0x60, 0xaf, 0x7b, 0x20, 0x18, + 0xa5, 0x58, 0x56, 0x04, 0xec, 0xec, 0x20, 0x24, 0x63, 0x34, 0xa1, 0xfe, 0x94, 0x87, 0x5d, 0xf7, + 0xd4, 0x53, 0x6e, 0xb1, 0x9f, 0x15, 0xa0, 0x11, 0x81, 0x62, 0xe5, 0xf7, 0x82, 0xfb, 0x81, 0xe3, + 0xb9, 0x28, 0xc7, 0x96, 0x4d, 0xf5, 0x29, 0x6e, 0x37, 0x67, 0xc8, 0xdd, 0xd0, 0x09, 0xaf, 0xad, + 0x84, 0xa5, 0xac, 0xae, 0xc0, 0xf2, 0x16, 0x5d, 0x86, 0x82, 0x3d, 0x72, 0x6c, 0xe5, 0x61, 0xa5, + 0x0f, 0x01, 0x1d, 0x78, 0x23, 0xcf, 0x47, 0x91, 0xb5, 0x6c, 0xd2, 0x07, 0x7b, 0x0c, 0xcb, 0x42, + 0x74, 0xd6, 0xcd, 0x97, 0xc8, 0x3f, 0xc8, 0x68, 0xc7, 0xdc, 0xe9, 0xf8, 0x28, 0x36, 0x61, 0x8a, + 0x12, 0x71, 0x77, 0x8a, 0x1a, 0x52, 0x58, 0x8a, 0x2a, 0x90, 0x16, 0xb6, 0xe8, 0x4e, 0xc7, 0x6d, + 0x2c, 0x89, 0xf0, 0x9f, 0xc0, 0x8a, 0xc0, 0x8f, 0xc4, 0xab, 0xa8, 0x46, 0x03, 0x6b, 0x88, 0xc6, + 0xba, 0xb2, 0x2c, 0xaa, 0x73, 0x07, 0xca, 0x34, 0x2a, 0xb1, 0xe3, 0x05, 0x92, 0xbe, 0x71, 0x28, + 0xdc, 0x0f, 0xe6, 0x9c, 0xa1, 0x0b, 0x24, 0x08, 0xcc, 0x38, 0x43, 0x35, 0x77, 0x6a, 0x69, 0xd6, + 0x9d, 0xfa, 0x04, 0x56, 0x4e, 0x04, 0x09, 0x9e, 0x73, 0x7b, 0xc8, 0x7d, 0x2b, 0x26, 0x6c, 0xd2, + 0x32, 0x96, 0x44, 0xe1, 0x2e, 0x96, 0x45, 0xe7, 0x40, 0xc8, 0x39, 0x82, 0x2d, 0xf0, 0xa1, 0x15, + 0x7a, 0x16, 0x8a, 0x3f, 0xc8, 0x60, 0x4a, 0x66, 0x8d, 0xc0, 0x7d, 0x6f, 0x4b, 0x00, 0x93, 0x78, + 0x67, 0xbe, 0x3d, 0x39, 0x97, 0x7a, 0x40, 0x84, 0xf7, 0x54, 0x00, 0xd9, 0x6b, 0x50, 0x14, 0x24, + 0xef, 0x72, 0xf2, 0x59, 0x91, 0xa4, 0xad, 0x40, 0xec, 0x2d, 0x58, 0xc0, 0x3e, 0x82, 0x56, 0x13, + 0xe9, 0xbd, 0x1a, 0x33, 0x72, 0xc7, 0x35, 0x65, 0x99, 0x10, 0x26, 0xa7, 0xbe, 0x43, 0x5c, 0xa6, + 0x6c, 0xe2, 0xdf, 0xec, 0xfb, 0x1a, 0xcb, 0x5a, 0xc2, 0xba, 0x4a, 0x1e, 0x98, 0xa1, 0xb4, 0x9b, + 0xb8, 0xd7, 0x57, 0xca, 0x8c, 0x7e, 0x90, 0x2f, 0x55, 0x9a, 0x55, 0xe3, 0x3b, 0x50, 0xa0, 0xd5, + 0x11, 0x44, 0x88, 0x6b, 0x97, 0x91, 0x44, 0x88, 0xd0, 0x16, 0x14, 0x5d, 0x1e, 0x5e, 0x7a, 0xfe, + 0x73, 0x65, 0x4b, 0x96, 0x9f, 0xc6, 0x8f, 0xd1, 0x08, 0x12, 0x39, 0xca, 0x49, 0x9f, 0x13, 0xe4, + 0x41, 0xdb, 0x1b, 0x9c, 0xdb, 0xd2, 0x2e, 0x53, 0x42, 0x40, 0xef, 0xdc, 0x9e, 0x23, 0x8f, 0xec, + 0xbc, 0xaf, 0xfc, 0x2d, 0xa8, 0x2b, 0xd7, 0x7c, 0x60, 0x8d, 0xf8, 0x69, 0x28, 0xc9, 0xbd, 0x2a, + 0xfd, 0xf2, 0xc1, 0x1e, 0x3f, 0x0d, 0x8d, 0x7d, 0x58, 0x94, 0x04, 0x79, 0x38, 0xe1, 0xaa, 0xeb, + 0xef, 0xa6, 0xc9, 0xd3, 0x95, 0x27, 0x4b, 0xc9, 0x8b, 0x96, 0x42, 0x0e, 0x12, 0x42, 0xb6, 0xf1, + 0x31, 0x30, 0xfd, 0x1a, 0x96, 0xed, 0x49, 0xa9, 0x56, 0x99, 0xe0, 0x95, 0x27, 0x2b, 0x92, 0x9d, + 0x9d, 0xa1, 0x58, 0x9d, 0x60, 0x3a, 0x18, 0xa8, 0x90, 0x89, 0x92, 0xa9, 0x3e, 0x8d, 0x3f, 0xcd, + 0xc0, 0x12, 0x36, 0xa6, 0xf4, 0x01, 0xc9, 0x64, 0x7f, 0xee, 0x41, 0x8a, 0xfd, 0xd1, 0x65, 0x1f, + 0xfa, 0xf8, 0xf2, 0x46, 0xcf, 0xfc, 0x9c, 0xd1, 0xf3, 0xeb, 0xd0, 0x1c, 0xf2, 0x91, 0x83, 0xd1, + 0x33, 0x4a, 0x94, 0x20, 0x0d, 0xa0, 0xa1, 0xe0, 0x4a, 0x89, 0xfb, 0x47, 0x19, 0x58, 0x24, 0x49, + 0x05, 0xd5, 0x61, 0xb9, 0x50, 0x1f, 0x29, 0xfd, 0x4f, 0xb2, 0x2a, 0x39, 0xa7, 0xf8, 0x06, 0x47, + 0x28, 0x21, 0xef, 0xde, 0x92, 0x7a, 0xa1, 0x84, 0xb2, 0x0f, 0x51, 0x87, 0x71, 0x2d, 0x04, 0xa6, + 0x44, 0xe3, 0x24, 0x37, 0x65, 0xf7, 0x16, 0x2a, 0x38, 0x2e, 0x82, 0x36, 0x4b, 0x42, 0x21, 0x15, + 0x60, 0x63, 0x07, 0x6a, 0x89, 0x6e, 0x12, 0x96, 0xd9, 0x2a, 0x59, 0x66, 0xe7, 0xbc, 0x1f, 0xd9, + 0x79, 0xef, 0xc7, 0xdf, 0xca, 0x03, 0x13, 0x24, 0x35, 0xb3, 0x6b, 0x33, 0xae, 0xc3, 0xec, 0x9c, + 0xeb, 0xf0, 0x31, 0x30, 0x0d, 0x41, 0x79, 0x34, 0x73, 0x91, 0x47, 0xb3, 0x19, 0xe3, 0x4a, 0x87, + 0xe6, 0x63, 0x58, 0x96, 0x02, 0x6d, 0xe4, 0x2b, 0x44, 0x93, 0x1b, 0xed, 0x0f, 0x23, 0xc9, 0x56, + 0xf9, 0x0c, 0xd1, 0xfc, 0xa6, 0xdc, 0x86, 0x81, 0x1d, 0x4a, 0x4b, 0x15, 0xba, 0x0d, 0x7b, 0xf6, + 0x9c, 0xe9, 0x7b, 0xe1, 0xa5, 0x54, 0x50, 0x9c, 0xa3, 0x02, 0xcd, 0x70, 0x52, 0x4a, 0x1a, 0x4e, + 0x0c, 0xa8, 0x29, 0xe7, 0x20, 0xc5, 0x44, 0x90, 0xf4, 0x56, 0x91, 0x1e, 0x42, 0x8c, 0x8b, 0x78, + 0x00, 0x4d, 0x65, 0xdd, 0x88, 0x4c, 0x33, 0xe4, 0xef, 0x97, 0xc6, 0xb1, 0x2d, 0x65, 0xa0, 0x49, + 0x18, 0xc2, 0x2b, 0x33, 0x86, 0xf0, 0x77, 0x61, 0x31, 0x10, 0x44, 0x64, 0x4d, 0x5d, 0x19, 0x9c, + 0xc3, 0x87, 0xa8, 0x3a, 0x95, 0xcc, 0x26, 0x16, 0x1c, 0xc7, 0xf0, 0x79, 0xb3, 0x43, 0x6d, 0xde, + 0xec, 0xc0, 0xde, 0x8f, 0xfd, 0x68, 0xc1, 0xb9, 0x33, 0xc6, 0x8b, 0x3b, 0x0e, 0x64, 0x91, 0x0b, + 0xdc, 0x3b, 0x77, 0xc6, 0xa6, 0x72, 0xda, 0x8a, 0x0f, 0xe3, 0x3f, 0x64, 0xa0, 0x29, 0xe8, 0x20, + 0x41, 0xe7, 0xbf, 0x02, 0x78, 0x22, 0x5f, 0x91, 0xcc, 0x2b, 0x02, 0x57, 0x51, 0xf9, 0x77, 0x00, + 0xc9, 0xd6, 0x12, 0x7a, 0xa2, 0x24, 0xf2, 0x56, 0x92, 0xc8, 0x63, 0x46, 0xb6, 0x7b, 0x8b, 0x14, + 0x00, 0x01, 0x49, 0xf3, 0x5f, 0xe6, 0x53, 0xfc, 0x97, 0xda, 0x51, 0xd8, 0x05, 0x78, 0xc6, 0xaf, + 0xf7, 0xbc, 0x01, 0x6a, 0x68, 0x77, 0x01, 0x04, 0x41, 0x9e, 0xda, 0x63, 0x47, 0x5a, 0x57, 0x0a, + 0x66, 0xf9, 0x39, 0xbf, 0xde, 0x41, 0x80, 0xd8, 0x0d, 0x51, 0x1c, 0x9f, 0x87, 0x82, 0x59, 0x7a, + 0xce, 0xaf, 0xe9, 0x30, 0x58, 0x50, 0x7b, 0xc6, 0xaf, 0xb7, 0x39, 0x89, 0x6b, 0x9e, 0x2f, 0x28, + 0xc1, 0xb7, 0x2f, 0x85, 0x7c, 0x96, 0xf0, 0x3d, 0x56, 0x7c, 0xfb, 0xf2, 0x19, 0xbf, 0x56, 0x7e, + 0xd0, 0xa2, 0x28, 0x1f, 0x79, 0x03, 0x79, 0x03, 0xa9, 0x28, 0x8a, 0x78, 0x50, 0xe6, 0xc2, 0x73, + 0xfc, 0xdb, 0xf8, 0x93, 0x0c, 0xd4, 0xc4, 0xf8, 0x91, 0xc1, 0x89, 0x75, 0x57, 0xc1, 0x38, 0x99, + 0x38, 0x18, 0xe7, 0x89, 0xe4, 0x0f, 0xc4, 0x2d, 0xb3, 0x37, 0x73, 0x4b, 0x5c, 0x60, 0x62, 0x95, + 0xef, 0x41, 0x99, 0xce, 0x96, 0x38, 0xac, 0xb9, 0xc4, 0x2e, 0x25, 0x26, 0x64, 0x96, 0x10, 0xed, + 0x19, 0xf9, 0xfe, 0x35, 0x03, 0x1b, 0x2d, 0x71, 0xd9, 0x8f, 0xcc, 0x6a, 0x29, 0xdb, 0x50, 0x48, + 0x73, 0x23, 0x1f, 0x43, 0x45, 0xa3, 0x29, 0xb4, 0xc6, 0x45, 0x83, 0x27, 0x02, 0x4c, 0x12, 0x4d, + 0x62, 0xf6, 0xbb, 0xb7, 0xcc, 0xda, 0x40, 0x07, 0x6c, 0x2e, 0x40, 0x5e, 0x54, 0x32, 0x3e, 0x82, + 0x45, 0xad, 0x59, 0xd2, 0x46, 0xd3, 0xc6, 0x94, 0x49, 0x1b, 0xd3, 0x3f, 0xce, 0xc0, 0xb2, 0xac, + 0x8d, 0x81, 0x5b, 0x8e, 0xb8, 0xae, 0xf7, 0x83, 0x33, 0xf6, 0x2b, 0x50, 0x13, 0xad, 0x5b, 0x3e, + 0x3f, 0x73, 0x82, 0x90, 0x2b, 0xcf, 0x45, 0xca, 0xe1, 0x10, 0x5c, 0x5b, 0xa0, 0x9a, 0x12, 0x93, + 0x7d, 0x04, 0x15, 0xac, 0x4a, 0xfa, 0xb2, 0xdc, 0x96, 0xd6, 0x7c, 0x45, 0x1a, 0xea, 0xee, 0x2d, + 0x13, 0x82, 0xe8, 0x6b, 0xb3, 0x0c, 0xc5, 0xd0, 0x77, 0xce, 0xce, 0xb8, 0x6f, 0xac, 0x46, 0x43, + 0x13, 0x27, 0x8d, 0xf7, 0x42, 0x3e, 0x11, 0x42, 0x90, 0xf1, 0x9f, 0x32, 0x50, 0x91, 0x67, 0xe7, + 0xe7, 0x76, 0x57, 0xac, 0x6b, 0x91, 0x87, 0xa4, 0x1a, 0xc7, 0x81, 0x86, 0xef, 0x40, 0x63, 0x2c, + 0x04, 0x22, 0x21, 0xb0, 0x27, 0x7c, 0x15, 0x75, 0x05, 0x96, 0xf2, 0xc8, 0x06, 0x2c, 0xa1, 0x78, + 0x12, 0x58, 0xa1, 0x33, 0xb2, 0x54, 0xa1, 0x8c, 0xf2, 0x5b, 0xa4, 0xa2, 0xbe, 0x33, 0xda, 0x97, + 0x05, 0xe2, 0x96, 0x0e, 0x42, 0xfb, 0x8c, 0x4b, 0xd1, 0x97, 0x3e, 0x8c, 0x16, 0xac, 0xce, 0xc8, + 0xea, 0x4a, 0xcf, 0xf8, 0xef, 0x0d, 0x58, 0x9b, 0x2b, 0x92, 0xfa, 0x46, 0x64, 0xa3, 0x1f, 0x39, + 0xe3, 0x13, 0x2f, 0x32, 0x85, 0x65, 0x34, 0x1b, 0xfd, 0x9e, 0x28, 0x51, 0xa6, 0x30, 0x0e, 0x2b, + 0x8a, 0x20, 0xd0, 0x96, 0x15, 0x89, 0xf3, 0x59, 0x14, 0x36, 0xdf, 0x4b, 0x32, 0xaa, 0xd9, 0xee, + 0x14, 0x5c, 0xbf, 0xfe, 0x96, 0x26, 0x73, 0xb0, 0x80, 0x9d, 0x42, 0x2b, 0xa2, 0x3b, 0x29, 0x1f, + 0x69, 0xba, 0x89, 0xe8, 0xe9, 0x1b, 0x2f, 0xe9, 0x29, 0x61, 0x24, 0x31, 0x57, 0x15, 0xb9, 0x52, + 0x63, 0x51, 0x3f, 0x17, 0xf0, 0xba, 0xea, 0x07, 0x65, 0x9d, 0xf9, 0xde, 0xf2, 0xaf, 0x34, 0x2f, + 0x34, 0xfe, 0x24, 0xbb, 0xbc, 0x23, 0x1b, 0x8e, 0x8a, 0xf4, 0x7e, 0xcf, 0x61, 0xf5, 0xd2, 0x76, + 0x42, 0x35, 0x3f, 0x4d, 0x2d, 0x2a, 0x60, 0x7f, 0x4f, 0x5e, 0xd2, 0xdf, 0xa7, 0x54, 0x39, 0x21, + 0xfd, 0x2d, 0x5f, 0xce, 0x03, 0x83, 0xf5, 0x7f, 0x97, 0x85, 0x7a, 0xb2, 0x15, 0x71, 0xa8, 0x25, + 0x1f, 0x52, 0xf2, 0x84, 0x94, 0xc7, 0xa5, 0x89, 0xf6, 0x80, 0xe4, 0x88, 0x79, 0xe3, 0x71, 0x36, + 0xc5, 0x78, 0xac, 0xdb, 0x6c, 0x73, 0x2f, 0xf3, 0x6d, 0xe5, 0x5f, 0xc9, 0xb7, 0x55, 0x48, 0xf3, + 0x6d, 0xdd, 0xec, 0x10, 0x59, 0xf8, 0xb9, 0x1c, 0x22, 0xc5, 0x9b, 0x1d, 0x22, 0xeb, 0x7f, 0x95, + 0x01, 0x36, 0x4f, 0xa9, 0xec, 0x29, 0xd9, 0xc9, 0x5d, 0x3e, 0x92, 0x5c, 0xec, 0x9b, 0xaf, 0x46, + 0xed, 0x6a, 0x83, 0x54, 0x6d, 0xf6, 0x08, 0x96, 0xf4, 0xb8, 0x60, 0x5d, 0x55, 0xa9, 0x99, 0x4c, + 0x2f, 0x8a, 0x15, 0x5a, 0xcd, 0xb1, 0x97, 0x7f, 0xa9, 0x63, 0xaf, 0xf0, 0x52, 0xc7, 0xde, 0x42, + 0xd2, 0xb1, 0xb7, 0xfe, 0x5f, 0x32, 0xb0, 0x94, 0x42, 0x54, 0x5f, 0xdd, 0x9c, 0x05, 0x2d, 0x24, + 0x58, 0x4c, 0x56, 0xd2, 0x82, 0xce, 0x5d, 0xf6, 0xa0, 0x12, 0xfb, 0x8a, 0x54, 0xdc, 0xfc, 0xc3, + 0x97, 0x9d, 0xf4, 0xb8, 0x86, 0xa9, 0x57, 0x5f, 0xff, 0x02, 0x2a, 0x5a, 0x99, 0x58, 0x44, 0xa2, + 0x20, 0x2d, 0x9c, 0x82, 0xee, 0x70, 0xd4, 0xb3, 0xee, 0x81, 0x34, 0xe4, 0x52, 0x39, 0xd1, 0xba, + 0xbc, 0xb0, 0x11, 0x61, 0x03, 0x96, 0x94, 0x0b, 0x83, 0xc7, 0x51, 0x53, 0x92, 0xed, 0x2f, 0x4a, + 0x47, 0x06, 0x8f, 0x82, 0xb0, 0xd6, 0x7f, 0x02, 0xb5, 0x04, 0x47, 0xf8, 0xea, 0xd6, 0x72, 0x56, + 0x6b, 0xa4, 0xb1, 0xea, 0x5a, 0xe3, 0xfa, 0xff, 0xc9, 0x01, 0x9b, 0x67, 0x4a, 0xbf, 0xcc, 0x21, + 0xcc, 0xef, 0x78, 0x2e, 0x65, 0xc7, 0xff, 0x9f, 0x5d, 0x92, 0xef, 0xc2, 0xa2, 0x4c, 0xcc, 0xd0, + 0x3c, 0x3c, 0x44, 0xf5, 0xcd, 0xa8, 0x40, 0x8d, 0xe2, 0x3b, 0xb3, 0x0e, 0xe2, 0x52, 0x22, 0x16, + 0x5d, 0x93, 0x12, 0x66, 0xfc, 0xc4, 0xc7, 0xb0, 0x60, 0xbb, 0x83, 0x73, 0xcf, 0x47, 0x85, 0xa5, + 0xfe, 0xe4, 0x57, 0xbf, 0xf4, 0x3d, 0xb1, 0xd1, 0xc6, 0xfa, 0x28, 0x9a, 0x98, 0xb2, 0x31, 0xe3, + 0x3d, 0xa8, 0x68, 0x60, 0xf4, 0x7a, 0x74, 0xf7, 0x37, 0x0f, 0x9b, 0xb7, 0x58, 0x0d, 0xca, 0x66, + 0x67, 0xeb, 0xf0, 0x93, 0x8e, 0xd9, 0xd9, 0x6e, 0x66, 0x58, 0x09, 0xf2, 0x7b, 0x87, 0xbd, 0x7e, + 0x33, 0x6b, 0xac, 0x43, 0x4b, 0xb6, 0x38, 0x6f, 0x01, 0xfd, 0xdd, 0x7c, 0x64, 0x7c, 0xc0, 0x42, + 0xa9, 0x6b, 0x7c, 0x0b, 0xaa, 0xfa, 0x1d, 0x2e, 0x29, 0x62, 0xc6, 0xc9, 0x28, 0xb4, 0x0c, 0x4f, + 0x63, 0x82, 0x5b, 0x40, 0xae, 0xa3, 0x61, 0x54, 0x8d, 0x04, 0xb3, 0x17, 0xf8, 0x1a, 0x50, 0xe6, + 0x4c, 0x90, 0xe1, 0xff, 0x07, 0xf5, 0xa4, 0x39, 0x50, 0x1e, 0xf5, 0x34, 0xa1, 0x5b, 0xd4, 0x4e, + 0xd8, 0x07, 0xd9, 0xf7, 0xa1, 0x39, 0x6b, 0x4e, 0x94, 0x21, 0xbb, 0x37, 0xd4, 0x6f, 0x38, 0x49, + 0x0b, 0x23, 0xdb, 0x85, 0xe5, 0x34, 0x29, 0x06, 0xe9, 0xe3, 0x66, 0x6d, 0x8b, 0xcd, 0x4b, 0x2a, + 0xec, 0xbb, 0xd2, 0x6a, 0x5c, 0x48, 0xf3, 0xbd, 0x69, 0x8b, 0xbd, 0x41, 0xff, 0x69, 0xf6, 0xe3, + 0x0b, 0x80, 0x18, 0xc6, 0x9a, 0x50, 0x3d, 0x3c, 0xea, 0x1c, 0x58, 0x5b, 0xbb, 0xed, 0x83, 0x83, + 0xce, 0x5e, 0xf3, 0x16, 0x63, 0x50, 0x47, 0xa7, 0xd9, 0x76, 0x04, 0xcb, 0x08, 0x98, 0xb4, 0xde, + 0x2b, 0x58, 0x96, 0x2d, 0x43, 0xb3, 0x7b, 0x30, 0x03, 0xcd, 0xb1, 0x16, 0x2c, 0x1f, 0x75, 0xc8, + 0xcf, 0x96, 0x68, 0x37, 0x2f, 0x24, 0x63, 0x39, 0x5d, 0x21, 0x19, 0x53, 0x82, 0x91, 0x3c, 0x07, + 0x4a, 0x60, 0xfc, 0xbd, 0x0c, 0xac, 0xcc, 0x14, 0xc4, 0x61, 0xe3, 0x24, 0x2e, 0x26, 0x05, 0xc5, + 0x2a, 0x02, 0xd5, 0x69, 0x7a, 0x17, 0x16, 0x23, 0x0d, 0x7a, 0x86, 0xdd, 0x37, 0xa3, 0x02, 0x85, + 0xfc, 0x08, 0x96, 0x34, 0x45, 0x7c, 0x86, 0x57, 0x30, 0xad, 0x48, 0x56, 0x30, 0xd6, 0xa2, 0xf0, + 0xdc, 0x99, 0x51, 0x0f, 0x29, 0x6b, 0x49, 0x2f, 0x88, 0x8d, 0xea, 0xc9, 0xf1, 0xaa, 0x4f, 0xf6, + 0x78, 0x86, 0x10, 0x92, 0xa3, 0xd5, 0x37, 0x5c, 0x75, 0xff, 0x07, 0x0b, 0xc0, 0x3e, 0x9e, 0x72, + 0xff, 0x1a, 0xc3, 0xc2, 0x83, 0x97, 0xc5, 0x49, 0x29, 0x6d, 0x33, 0xfb, 0x4a, 0xa9, 0x1f, 0x69, + 0xa9, 0x17, 0xf9, 0x97, 0xa7, 0x5e, 0x14, 0x5e, 0x96, 0x7a, 0xf1, 0x26, 0xd4, 0x9c, 0x33, 0xd7, + 0x13, 0xac, 0x50, 0x88, 0x7c, 0x41, 0x6b, 0xe1, 0x7e, 0xee, 0x41, 0xd5, 0xac, 0x4a, 0xa0, 0x10, + 0xf8, 0x02, 0xf6, 0x51, 0x8c, 0xc4, 0x87, 0x67, 0x98, 0x26, 0xa4, 0x33, 0xc1, 0xce, 0xf0, 0x8c, + 0x4b, 0xe5, 0x1a, 0xcd, 0x4d, 0xaa, 0xb2, 0x80, 0x07, 0xec, 0x2d, 0xa8, 0x07, 0xde, 0x54, 0x48, + 0xd0, 0x6a, 0x19, 0xc8, 0xec, 0x5e, 0x25, 0xe8, 0x91, 0xf2, 0xb1, 0x2c, 0x4d, 0x03, 0x6e, 0x8d, + 0x9d, 0x20, 0x10, 0x72, 0xcf, 0xc0, 0x73, 0x43, 0xdf, 0x1b, 0x49, 0x4b, 0xfa, 0xe2, 0x34, 0xe0, + 0xfb, 0x54, 0xb2, 0x45, 0x05, 0xec, 0xdb, 0xf1, 0x90, 0x26, 0xb6, 0xe3, 0x07, 0x2d, 0xc0, 0x21, + 0xa9, 0x99, 0xa2, 0xa0, 0x6a, 0x3b, 0x7e, 0x34, 0x16, 0xf1, 0x11, 0xcc, 0xa4, 0x84, 0x54, 0x66, + 0x53, 0x42, 0x7e, 0x94, 0x9e, 0x12, 0x52, 0xc3, 0xa6, 0x1f, 0xcb, 0xa6, 0xe7, 0xb7, 0xf8, 0x4b, + 0x65, 0x86, 0xcc, 0x67, 0xba, 0xd4, 0xbf, 0x4c, 0xa6, 0x4b, 0x23, 0x2d, 0xd3, 0xe5, 0x3d, 0xa8, + 0x60, 0x0e, 0x82, 0x75, 0xee, 0x08, 0xe1, 0x88, 0x3c, 0x03, 0x4d, 0x3d, 0x49, 0x61, 0xd7, 0x71, + 0x43, 0x13, 0x7c, 0xf5, 0x67, 0x30, 0x9f, 0x74, 0xb2, 0xf8, 0x4b, 0x4c, 0x3a, 0x91, 0xb9, 0x12, + 0x1b, 0x50, 0x52, 0xfb, 0xc4, 0x18, 0xe4, 0x4f, 0x7d, 0x6f, 0xac, 0x2c, 0xa6, 0xe2, 0x6f, 0x56, + 0x87, 0x6c, 0xe8, 0xc9, 0xca, 0xd9, 0xd0, 0x33, 0x7e, 0x13, 0x2a, 0x1a, 0xa9, 0xb1, 0x37, 0xc8, + 0x36, 0x23, 0x94, 0x10, 0x29, 0xb5, 0xd1, 0x2a, 0x96, 0x25, 0xb4, 0x3b, 0x14, 0xfc, 0x66, 0xe8, + 0xf8, 0x1c, 0xd3, 0xc3, 0x2c, 0x9f, 0x5f, 0x70, 0x3f, 0x50, 0x16, 0xec, 0x66, 0x54, 0x60, 0x12, + 0xdc, 0xf8, 0x6b, 0xb0, 0x94, 0xd8, 0x5b, 0xc9, 0x22, 0xde, 0x82, 0x05, 0x5c, 0x37, 0xe5, 0x61, + 0x4c, 0x26, 0x7f, 0xc8, 0x32, 0xcc, 0xfb, 0x25, 0xe3, 0xbb, 0x35, 0xf1, 0xbd, 0x13, 0xec, 0x24, + 0x63, 0x56, 0x24, 0xec, 0xc8, 0xf7, 0x4e, 0x8c, 0x3f, 0xcf, 0x41, 0x6e, 0xd7, 0x9b, 0xe8, 0x41, + 0x35, 0x99, 0xb9, 0xa0, 0x1a, 0xa9, 0x59, 0x59, 0x91, 0xe6, 0x24, 0x85, 0x61, 0x34, 0x3b, 0x2b, + 0xed, 0xe9, 0x01, 0xd4, 0x05, 0x9f, 0x08, 0x3d, 0xa1, 0x9a, 0x5e, 0xda, 0x3e, 0x89, 0x9a, 0x39, + 0x3a, 0x7c, 0xf6, 0x38, 0xec, 0x7b, 0x3b, 0x04, 0x67, 0xcb, 0x90, 0x8b, 0xf4, 0x02, 0x2c, 0x16, + 0x9f, 0x6c, 0x15, 0x16, 0x30, 0x28, 0xf2, 0x5a, 0xba, 0xd0, 0xe4, 0x17, 0xfb, 0x26, 0x2c, 0x25, + 0xdb, 0x25, 0x56, 0x24, 0x65, 0x23, 0xbd, 0x61, 0xe4, 0x49, 0xb7, 0x41, 0xf0, 0x11, 0xc2, 0x91, + 0x9e, 0xf8, 0x53, 0xce, 0xb1, 0x48, 0x63, 0x7a, 0xa5, 0x04, 0xd3, 0xbb, 0x07, 0x95, 0x70, 0x74, + 0x61, 0x4d, 0xec, 0xeb, 0x91, 0x67, 0x0f, 0xe5, 0xf9, 0x86, 0x70, 0x74, 0x71, 0x44, 0x10, 0xf6, + 0x08, 0x60, 0x3c, 0x99, 0xc8, 0xb3, 0x87, 0x56, 0xdc, 0x98, 0x94, 0xf7, 0x8f, 0x8e, 0x88, 0xe4, + 0xcc, 0xf2, 0x78, 0x32, 0xa1, 0x3f, 0xd9, 0x36, 0xd4, 0x53, 0x53, 0xb8, 0xee, 0xaa, 0x18, 0x3e, + 0x6f, 0xb2, 0x91, 0x72, 0x38, 0x6b, 0x03, 0x1d, 0xb6, 0xfe, 0x7d, 0x60, 0xbf, 0x60, 0x22, 0x55, + 0x1f, 0xca, 0xd1, 0xf8, 0xf4, 0x3c, 0x24, 0x8c, 0xca, 0xad, 0x24, 0xf2, 0x90, 0xda, 0xc3, 0xa1, + 0x2f, 0xf8, 0x22, 0x5d, 0x98, 0x11, 0xcb, 0x07, 0xed, 0xc6, 0x6c, 0x13, 0xdf, 0x37, 0xfe, 0x32, + 0x03, 0x05, 0x4a, 0x8a, 0x7a, 0x1b, 0x1a, 0x84, 0x1f, 0x05, 0x28, 0x49, 0xc7, 0x1b, 0xdd, 0xbb, + 0x7d, 0x19, 0x9b, 0x24, 0x8e, 0x85, 0x96, 0xd0, 0x99, 0x8d, 0x76, 0x5e, 0x4b, 0xea, 0xbc, 0x07, + 0xe5, 0xa8, 0x6b, 0x8d, 0x74, 0x4a, 0xaa, 0x67, 0xf6, 0x3a, 0xe4, 0xcf, 0xbd, 0x89, 0x32, 0x71, + 0x40, 0xbc, 0x92, 0x26, 0xc2, 0xe3, 0xb1, 0x88, 0x3e, 0x68, 0xf0, 0x52, 0x35, 0x8f, 0x3a, 0x41, + 0x32, 0x98, 0x9f, 0xe3, 0x42, 0xca, 0x1c, 0x8f, 0xa1, 0x21, 0xf8, 0x80, 0xe6, 0x00, 0xbf, 0xf9, + 0xd2, 0xfc, 0xba, 0x90, 0xf0, 0x06, 0xa3, 0xe9, 0x90, 0xeb, 0x06, 0x26, 0x8c, 0x96, 0x91, 0x70, + 0x25, 0x59, 0x1b, 0x7f, 0x90, 0x21, 0xfe, 0x22, 0xda, 0x65, 0x0f, 0x20, 0x2f, 0xee, 0xb7, 0x19, + 0x03, 0x68, 0x14, 0x1e, 0x2d, 0xf0, 0x4c, 0xc4, 0xc0, 0x2c, 0xe8, 0xe9, 0x38, 0xd9, 0x7a, 0xcd, + 0xac, 0xb8, 0xd3, 0x71, 0x64, 0xa3, 0xf9, 0x9a, 0x9a, 0xd6, 0x8c, 0x7d, 0x83, 0x66, 0x1f, 0x1d, + 0xd3, 0x0d, 0x2d, 0xec, 0x26, 0x9f, 0xb8, 0x31, 0x95, 0x14, 0x38, 0x3c, 0xe3, 0x5a, 0xb8, 0xcd, + 0x1f, 0x65, 0xa1, 0x96, 0x18, 0x11, 0xc6, 0x1d, 0x89, 0x0b, 0x80, 0x8c, 0xeb, 0x72, 0xbf, 0x41, + 0x80, 0xa4, 0xa0, 0xae, 0xad, 0x53, 0x36, 0xb1, 0x4e, 0x91, 0xab, 0x3f, 0xa7, 0xbb, 0xfa, 0x1f, + 0x43, 0x39, 0x4e, 0xe4, 0x4d, 0x0e, 0x49, 0xf4, 0xa7, 0x82, 0xc4, 0x63, 0xa4, 0x38, 0x38, 0xa0, + 0xa0, 0x07, 0x07, 0x7c, 0x4f, 0xf3, 0x25, 0x2f, 0x60, 0x33, 0x46, 0xda, 0x8a, 0xfe, 0x52, 0x3c, + 0xc9, 0xc6, 0x47, 0x50, 0xd1, 0x06, 0xaf, 0xfb, 0x8c, 0x33, 0x09, 0x9f, 0x71, 0x94, 0xce, 0x91, + 0x8d, 0xd3, 0x39, 0x8c, 0xdf, 0xce, 0x42, 0x4d, 0x9c, 0x2f, 0xc7, 0x3d, 0x3b, 0xf2, 0x46, 0xce, + 0x00, 0x8d, 0xed, 0xd1, 0x09, 0x93, 0x82, 0x96, 0x3a, 0x67, 0xf2, 0x88, 0x91, 0x9c, 0xa5, 0x67, + 0xad, 0x11, 0x93, 0x8e, 0xb2, 0xd6, 0x0c, 0xa8, 0x09, 0xc6, 0x78, 0x62, 0x07, 0x5c, 0x4b, 0x33, + 0x36, 0x2b, 0xa7, 0x9c, 0x6f, 0xda, 0x01, 0x71, 0xc8, 0x6f, 0xc2, 0x92, 0xc0, 0xc1, 0x84, 0x9d, + 0xb1, 0x33, 0x1a, 0x39, 0x84, 0x49, 0x16, 0x9c, 0xe6, 0x29, 0xe7, 0xa6, 0x1d, 0xf2, 0x7d, 0x51, + 0x20, 0xb3, 0x92, 0x4b, 0x43, 0x27, 0xb0, 0x4f, 0xe2, 0xe8, 0xb0, 0xe8, 0x1b, 0x5d, 0x64, 0xf6, + 0x95, 0xe6, 0x22, 0xa3, 0xcc, 0xbd, 0xca, 0xd8, 0xbe, 0x8a, 0x5c, 0x64, 0x33, 0x94, 0x54, 0x9c, + 0xa5, 0x24, 0xe3, 0x3f, 0x66, 0xa1, 0xa2, 0x91, 0xe5, 0xab, 0xdc, 0xae, 0x77, 0xe7, 0x9c, 0x23, + 0x65, 0xdd, 0x0f, 0xf2, 0x66, 0xb2, 0x4b, 0xf4, 0xa4, 0x53, 0xfe, 0xb3, 0x46, 0xc0, 0x77, 0xa0, + 0x2c, 0x4e, 0xdd, 0x7b, 0x68, 0x6b, 0x94, 0xd9, 0xfb, 0x08, 0x38, 0x9a, 0x9e, 0xa8, 0xc2, 0x27, + 0x58, 0x58, 0x88, 0x0b, 0x9f, 0x88, 0xc2, 0x17, 0x85, 0x84, 0x7e, 0x07, 0xaa, 0xb2, 0x55, 0xdc, + 0x53, 0x9c, 0x6e, 0x7c, 0xea, 0x13, 0xfb, 0x6d, 0x56, 0xa8, 0x3b, 0xda, 0x7c, 0x59, 0xf1, 0x89, + 0xaa, 0x58, 0x7a, 0x59, 0xc5, 0x27, 0xf4, 0x61, 0xec, 0x44, 0x51, 0xb6, 0x18, 0xc5, 0xa1, 0xf8, + 0xd8, 0x23, 0x58, 0x52, 0xec, 0x6a, 0xea, 0xda, 0xae, 0xeb, 0x4d, 0xdd, 0x01, 0x57, 0x79, 0x1e, + 0x4c, 0x16, 0x1d, 0xc7, 0x25, 0xc6, 0x30, 0x4a, 0x04, 0xa4, 0x68, 0x90, 0x87, 0x50, 0x20, 0xb9, + 0x9c, 0x84, 0x8f, 0x74, 0xc6, 0x45, 0x28, 0xec, 0x01, 0x14, 0x48, 0x3c, 0xcf, 0xde, 0xc8, 0x6c, + 0x08, 0xc1, 0xd8, 0x80, 0x06, 0x8a, 0x98, 0x1a, 0xc7, 0x7d, 0x91, 0x54, 0x62, 0x2c, 0x03, 0x3b, + 0xa0, 0x43, 0xa4, 0x47, 0x29, 0xfd, 0xd7, 0x1c, 0x54, 0x34, 0xb0, 0x60, 0x8b, 0x18, 0xd7, 0x62, + 0x0d, 0x1d, 0x7b, 0xcc, 0x95, 0x4b, 0xa7, 0x66, 0xd6, 0x10, 0xba, 0x2d, 0x81, 0xe2, 0x52, 0xb0, + 0x2f, 0xce, 0x2c, 0x6f, 0x1a, 0x5a, 0x43, 0x7e, 0xe6, 0x73, 0x2e, 0x85, 0xa5, 0xaa, 0x7d, 0x71, + 0x76, 0x38, 0x0d, 0xb7, 0x11, 0x26, 0xb0, 0x04, 0x51, 0x6b, 0x58, 0x32, 0x14, 0x63, 0x6c, 0x5f, + 0xc5, 0x58, 0x32, 0x1e, 0x88, 0x96, 0x28, 0x1f, 0xc5, 0x03, 0x91, 0xda, 0x32, 0xcb, 0xc9, 0x0b, + 0xf3, 0x9c, 0xfc, 0xdb, 0xb0, 0x4a, 0x9c, 0x5c, 0xf2, 0x08, 0x6b, 0x86, 0xa4, 0x96, 0xb1, 0x54, + 0x4e, 0x52, 0x93, 0xbf, 0x9a, 0x62, 0x06, 0xea, 0x7c, 0x04, 0xce, 0x8f, 0xe9, 0x44, 0x65, 0x4c, + 0x31, 0x33, 0xd9, 0x78, 0xcf, 0xf9, 0x31, 0x17, 0x98, 0xe8, 0x6f, 0xd6, 0x31, 0x65, 0xe4, 0xf1, + 0xd8, 0x71, 0x67, 0x31, 0xed, 0xab, 0x24, 0x66, 0x59, 0x62, 0xda, 0x57, 0x3a, 0xe6, 0xfb, 0xb0, + 0x36, 0xe6, 0x43, 0xc7, 0x4e, 0x36, 0x6b, 0xc5, 0x12, 0xc4, 0x32, 0x15, 0x6b, 0x75, 0x7a, 0xa4, + 0x41, 0x8a, 0xd5, 0xf8, 0xb1, 0x37, 0x3e, 0x71, 0xe8, 0xf2, 0x24, 0x0f, 0x78, 0xde, 0xac, 0xbb, + 0xd3, 0xf1, 0x0f, 0x11, 0x2c, 0xaa, 0x04, 0x46, 0x0d, 0x2a, 0xbd, 0xd0, 0x9b, 0xa8, 0x6d, 0xae, + 0x43, 0x95, 0x3e, 0x65, 0x16, 0xcf, 0x1d, 0xb8, 0x8d, 0xb4, 0xd9, 0xf7, 0x26, 0xde, 0xc8, 0x3b, + 0xbb, 0x4e, 0x18, 0x94, 0xfe, 0x73, 0x06, 0x96, 0x12, 0xa5, 0xf2, 0x9c, 0x7f, 0x9b, 0x0e, 0x56, + 0x94, 0x8a, 0x41, 0xe4, 0xbc, 0xa8, 0x5d, 0x3e, 0x84, 0x48, 0xa7, 0x4a, 0xa5, 0x67, 0xb4, 0xe3, + 0x14, 0x62, 0x55, 0x91, 0x68, 0xbb, 0x35, 0x4f, 0xdb, 0xb2, 0xbe, 0x4a, 0x2e, 0x56, 0x4d, 0xfc, + 0xaa, 0x8c, 0x0e, 0x1f, 0xca, 0x29, 0xe7, 0x92, 0xf1, 0xaf, 0xba, 0xf1, 0x49, 0x8d, 0x20, 0xb6, + 0x48, 0x05, 0xc6, 0xbf, 0xc8, 0x00, 0xc4, 0xa3, 0xc3, 0x08, 0xdc, 0xe8, 0x02, 0xa5, 0xd7, 0x79, + 0xb4, 0xcb, 0xf2, 0x0d, 0xa8, 0x46, 0x81, 0x78, 0xf1, 0x95, 0x5c, 0x51, 0x30, 0x71, 0x2f, 0xbf, + 0x03, 0x8d, 0xb3, 0x91, 0x77, 0x82, 0xa2, 0x93, 0xbc, 0x40, 0x29, 0x97, 0xa9, 0x4e, 0x60, 0x75, + 0x2d, 0xc6, 0x17, 0x78, 0x3e, 0x35, 0x56, 0x4f, 0xbf, 0x8e, 0x8d, 0xdf, 0xc9, 0x46, 0x11, 0x49, + 0xf1, 0x4a, 0xbc, 0x58, 0xcf, 0xf8, 0x79, 0x1c, 0xdb, 0x2f, 0x72, 0xe8, 0x7c, 0x04, 0x75, 0x9f, + 0xb8, 0xa3, 0x62, 0x9d, 0xf9, 0x17, 0xb0, 0xce, 0x9a, 0x9f, 0xb8, 0x72, 0xbf, 0x0e, 0x4d, 0x7b, + 0x78, 0xc1, 0xfd, 0xd0, 0x41, 0xb3, 0x31, 0x0a, 0x6a, 0x32, 0x06, 0x48, 0x83, 0xa3, 0x44, 0xf4, + 0x0e, 0x34, 0x64, 0x66, 0x59, 0x84, 0x29, 0xdf, 0xaa, 0x88, 0xc1, 0x02, 0xd1, 0xf8, 0xd7, 0x2a, + 0x04, 0x2a, 0xb9, 0xbb, 0x2f, 0x5e, 0x15, 0x7d, 0x86, 0xd9, 0x79, 0x97, 0x95, 0x24, 0x24, 0x69, + 0x8d, 0x96, 0xfc, 0x88, 0x80, 0xd2, 0x16, 0x9d, 0x5c, 0xd6, 0xfc, 0xab, 0x2c, 0xab, 0xf1, 0x27, + 0x19, 0x28, 0xee, 0x7a, 0x13, 0xa1, 0x97, 0x0b, 0x79, 0x0e, 0x8f, 0x49, 0xe4, 0x86, 0x58, 0x10, + 0x9f, 0xdd, 0xe1, 0x8b, 0x33, 0x31, 0x52, 0xe5, 0x8d, 0x5a, 0x52, 0xde, 0xf8, 0x1e, 0xdc, 0x41, + 0x27, 0x8f, 0xef, 0x4d, 0x3c, 0x5f, 0x1c, 0x55, 0x7b, 0x44, 0x72, 0x87, 0xe7, 0x86, 0xe7, 0x8a, + 0x77, 0xde, 0x3e, 0xe5, 0xfc, 0x48, 0xc3, 0xd8, 0x8f, 0x10, 0x30, 0x45, 0x69, 0x14, 0x5e, 0x58, + 0xa4, 0x2a, 0x4a, 0xc1, 0x88, 0x38, 0x6a, 0x43, 0x14, 0x74, 0x10, 0x8e, 0xa2, 0x91, 0xf1, 0x5d, + 0x28, 0x47, 0x56, 0x07, 0xf6, 0x2e, 0x94, 0xcf, 0xbd, 0x89, 0x34, 0x4d, 0x64, 0x12, 0xd9, 0x2a, + 0x72, 0xd6, 0x66, 0xe9, 0x9c, 0xfe, 0x08, 0x8c, 0x3f, 0x2f, 0x42, 0xb1, 0xeb, 0x5e, 0x78, 0xce, + 0x00, 0x83, 0xa8, 0xc6, 0x7c, 0xec, 0xa9, 0xf4, 0x56, 0xf1, 0x37, 0x06, 0x4a, 0xc4, 0x2f, 0x4e, + 0xe4, 0x64, 0xa0, 0x44, 0xf4, 0xd6, 0xc4, 0x0a, 0x2c, 0xf8, 0xfa, 0x93, 0x11, 0x05, 0x1f, 0xc3, + 0x3a, 0x23, 0xa5, 0xad, 0xa0, 0xa5, 0x07, 0x8b, 0xb6, 0xe8, 0x29, 0x03, 0x5c, 0x32, 0x4a, 0x37, + 0x2a, 0x23, 0x04, 0x17, 0xec, 0x35, 0x28, 0xca, 0xe4, 0x10, 0x0a, 0xb5, 0xa7, 0x38, 0x4c, 0x09, + 0x42, 0x6a, 0xf0, 0x39, 0x39, 0xe9, 0x22, 0x89, 0x4a, 0xe8, 0xe9, 0x12, 0xb8, 0x2d, 0x68, 0xed, + 0x1e, 0x54, 0x08, 0x9f, 0x50, 0x4a, 0x32, 0xec, 0x09, 0x41, 0x88, 0x90, 0xf2, 0xf2, 0x4a, 0x39, + 0xf5, 0xe5, 0x15, 0x8c, 0x92, 0x8b, 0xb8, 0x2c, 0x4d, 0x11, 0xe8, 0xbd, 0x0d, 0x0d, 0xae, 0x9e, + 0x1d, 0x92, 0xca, 0x3d, 0x65, 0xdf, 0x29, 0xe5, 0xfe, 0x4d, 0xa8, 0x9d, 0xda, 0xa3, 0xd1, 0x89, + 0x3d, 0x78, 0x4e, 0x3a, 0x69, 0x95, 0xcc, 0x70, 0x0a, 0x88, 0x4a, 0xe9, 0x3d, 0xa8, 0x68, 0xbb, + 0x8c, 0x31, 0x4d, 0x79, 0x13, 0xe2, 0xfd, 0x9d, 0x35, 0x35, 0xd5, 0x5f, 0xc1, 0xd4, 0xa4, 0xc5, + 0x76, 0x35, 0x92, 0xb1, 0x5d, 0x77, 0x90, 0x9b, 0xca, 0xf8, 0x9f, 0x26, 0x3d, 0xee, 0x60, 0x0f, + 0x87, 0x18, 0xff, 0x43, 0x2f, 0xa9, 0xe1, 0xe2, 0x51, 0xf9, 0x22, 0x09, 0xb5, 0x04, 0x23, 0x94, + 0xbb, 0x64, 0x2f, 0x9d, 0xd8, 0xce, 0x10, 0x63, 0x69, 0x49, 0x8d, 0x2d, 0xda, 0xe3, 0xf0, 0xc8, + 0x76, 0x86, 0xec, 0x3e, 0x54, 0x55, 0x31, 0xde, 0x8e, 0x4b, 0xb4, 0xfe, 0xb2, 0x58, 0xdc, 0x89, + 0x06, 0xd4, 0x22, 0x8c, 0x71, 0x9c, 0x42, 0x57, 0x91, 0x28, 0x48, 0x07, 0xef, 0x61, 0x4c, 0x45, + 0xc8, 0x31, 0x51, 0xae, 0xfe, 0xe4, 0x8e, 0x9c, 0xab, 0xa4, 0x52, 0xf5, 0x3f, 0x79, 0x69, 0x08, + 0x53, 0x08, 0x62, 0xe4, 0x2c, 0x5a, 0x4d, 0x08, 0x62, 0x12, 0x15, 0x9d, 0x45, 0x84, 0xc0, 0xbe, + 0xab, 0x29, 0x52, 0x2d, 0x44, 0x7e, 0x6d, 0xa6, 0xfd, 0x9b, 0x52, 0x09, 0xee, 0x02, 0x38, 0x81, + 0xb8, 0x65, 0x02, 0xee, 0x0e, 0x31, 0xe7, 0xad, 0x64, 0x96, 0x9d, 0xe0, 0x19, 0x01, 0xbe, 0x5a, + 0x0d, 0xab, 0x0d, 0x55, 0x7d, 0x9a, 0xac, 0x04, 0xf9, 0xc3, 0xa3, 0xce, 0x41, 0xf3, 0x16, 0xab, + 0x40, 0xb1, 0xd7, 0xe9, 0xf7, 0xf7, 0xd0, 0xe5, 0x54, 0x85, 0x52, 0x94, 0xb9, 0x93, 0x15, 0x5f, + 0xed, 0xad, 0xad, 0xce, 0x51, 0xbf, 0xb3, 0xdd, 0xcc, 0xfd, 0x20, 0x5f, 0xca, 0x36, 0x73, 0xc6, + 0x5f, 0xe4, 0xa0, 0xa2, 0xad, 0xc2, 0x8b, 0x99, 0xf1, 0x5d, 0x00, 0x54, 0x69, 0xe2, 0xf0, 0xb0, + 0xbc, 0x59, 0x16, 0x10, 0xda, 0x7c, 0xdd, 0x58, 0x9e, 0xa3, 0x57, 0x43, 0x94, 0xb1, 0xfc, 0x4d, + 0xa8, 0xd1, 0x03, 0x1c, 0xba, 0xe3, 0xb0, 0x60, 0x56, 0x09, 0x28, 0x59, 0x35, 0xa6, 0xfe, 0x21, + 0x12, 0x26, 0x85, 0xc8, 0x74, 0x7c, 0x02, 0x61, 0x5a, 0x08, 0xe6, 0xf4, 0x04, 0xde, 0xe8, 0x82, + 0x13, 0x06, 0x49, 0x84, 0x15, 0x09, 0xeb, 0xcb, 0xdc, 0x43, 0xc9, 0x0f, 0xb5, 0xdc, 0xb3, 0x82, + 0x59, 0x25, 0xa0, 0xec, 0xe8, 0x9b, 0x8a, 0x80, 0x4a, 0x48, 0x40, 0x6b, 0xf3, 0xd4, 0x90, 0x20, + 0x9e, 0xbd, 0x39, 0x7b, 0x56, 0x19, 0x09, 0xe3, 0x6b, 0xf3, 0xf5, 0x5e, 0x6e, 0xd7, 0x62, 0xef, + 0x02, 0x1b, 0x4f, 0x26, 0x56, 0x8a, 0xa5, 0x29, 0x6f, 0x36, 0xc6, 0x93, 0x49, 0x5f, 0x33, 0xc4, + 0x7c, 0x05, 0x46, 0xb0, 0xcf, 0x81, 0xb5, 0xc5, 0x01, 0xc6, 0x21, 0x46, 0x26, 0xd4, 0x98, 0x2d, + 0x67, 0x74, 0xb6, 0x9c, 0xc2, 0xfd, 0xb2, 0xa9, 0xdc, 0xef, 0x45, 0x7c, 0xc2, 0xd8, 0x81, 0xca, + 0x91, 0xf6, 0xbc, 0xcf, 0x7d, 0x71, 0x43, 0xa8, 0x87, 0x7d, 0xe8, 0xee, 0x20, 0xe3, 0x96, 0x2f, + 0xdf, 0xf3, 0xd1, 0x46, 0x93, 0xd5, 0x46, 0x63, 0xfc, 0xf3, 0x0c, 0x3d, 0x9d, 0x10, 0x0d, 0x3e, + 0x7e, 0x51, 0x48, 0xf9, 0x81, 0xe2, 0x14, 0xd1, 0x8a, 0xf2, 0xff, 0xc8, 0xec, 0x4e, 0x1c, 0x9a, + 0xe5, 0x9d, 0x9e, 0x06, 0x5c, 0x25, 0x3b, 0x55, 0x10, 0x76, 0x88, 0x20, 0x25, 0x7c, 0x0b, 0x09, + 0xdf, 0xa1, 0xf6, 0x03, 0x99, 0xf4, 0x24, 0x84, 0xef, 0x7d, 0xfb, 0x4a, 0xf6, 0x1a, 0x08, 0x11, + 0x44, 0x1a, 0xaa, 0x55, 0x8a, 0x57, 0xf4, 0x6d, 0xfc, 0x13, 0x99, 0xc5, 0x3a, 0xbb, 0xbe, 0x0f, + 0xa1, 0x14, 0xb5, 0x9a, 0xbc, 0x61, 0x15, 0x66, 0x54, 0x2e, 0xee, 0x71, 0xd4, 0xca, 0x13, 0x23, + 0xa6, 0xc3, 0x85, 0xce, 0x86, 0xae, 0x36, 0xea, 0x6f, 0x00, 0x3b, 0x75, 0xfc, 0x59, 0x64, 0x3a, + 0x6c, 0x4d, 0x2c, 0xd1, 0xb0, 0x8d, 0x63, 0x58, 0x52, 0x5c, 0x42, 0xd3, 0x08, 0x92, 0x9b, 0x97, + 0x79, 0x09, 0x93, 0xcf, 0xce, 0x31, 0x79, 0xe3, 0xa7, 0x79, 0x28, 0xaa, 0xa7, 0xb2, 0xd2, 0x9e, + 0x77, 0x2a, 0x27, 0x9f, 0x77, 0x6a, 0x25, 0x9e, 0x02, 0xc1, 0xad, 0x97, 0xf7, 0xfd, 0x3b, 0xb3, + 0x57, 0xb6, 0x66, 0x34, 0x4f, 0x5c, 0xdb, 0xab, 0x90, 0x9f, 0xd8, 0xe1, 0x39, 0x1a, 0xc8, 0x88, + 0x78, 0xf0, 0x5b, 0x19, 0xd3, 0x0b, 0x49, 0x63, 0x7a, 0xda, 0x53, 0x58, 0x24, 0x92, 0xce, 0x3d, + 0x85, 0x75, 0x07, 0x48, 0xbe, 0xd0, 0xc2, 0x8c, 0x4a, 0x08, 0x10, 0x77, 0x51, 0x52, 0x1c, 0x29, + 0xcd, 0x8a, 0x23, 0xaf, 0x2c, 0x2a, 0x7c, 0x1b, 0x16, 0x28, 0x8d, 0x5c, 0xa6, 0xb2, 0xa9, 0x0b, + 0x45, 0xae, 0xa1, 0xfa, 0x9f, 0x62, 0x8b, 0x4d, 0x89, 0xab, 0xbf, 0x2b, 0x53, 0x49, 0xbc, 0x2b, + 0xa3, 0x1b, 0xf9, 0xab, 0x49, 0x23, 0xff, 0x03, 0x68, 0x46, 0x0b, 0x8a, 0x26, 0x33, 0x37, 0x90, + 0x89, 0x32, 0x75, 0x05, 0x17, 0x5c, 0xf2, 0x20, 0x88, 0x2f, 0xc4, 0x7a, 0xe2, 0x42, 0x14, 0x3c, + 0xac, 0x1d, 0x86, 0x7c, 0x3c, 0x09, 0xe5, 0x85, 0x88, 0xa1, 0xf4, 0xfa, 0x00, 0x93, 0x49, 0x9e, + 0x35, 0x28, 0x77, 0x0f, 0xac, 0x9d, 0xbd, 0xee, 0xd3, 0xdd, 0x7e, 0x33, 0x23, 0x3e, 0x7b, 0xc7, + 0x5b, 0x5b, 0x9d, 0xce, 0x36, 0xde, 0x38, 0x00, 0x0b, 0x3b, 0xed, 0xae, 0xb8, 0x7d, 0x72, 0xc6, + 0xef, 0x65, 0xa1, 0xa2, 0x35, 0xcf, 0xde, 0x8f, 0x56, 0x85, 0x9e, 0x1e, 0xb9, 0x3b, 0x3f, 0x84, + 0x0d, 0xc5, 0x8a, 0xb5, 0x65, 0x89, 0x1e, 0xfe, 0xca, 0xde, 0xf8, 0xf0, 0x17, 0x7b, 0x1b, 0x1a, + 0x36, 0xb5, 0x10, 0xad, 0x82, 0x34, 0x07, 0x4b, 0xb0, 0x5c, 0x04, 0x0c, 0xae, 0x8b, 0xef, 0x13, + 0x81, 0x97, 0x57, 0xf1, 0x6c, 0xd1, 0x95, 0x82, 0x8b, 0x55, 0x3c, 0xb5, 0x9d, 0xd1, 0xd4, 0xe7, + 0xd2, 0x7d, 0x1b, 0xdd, 0xcc, 0x04, 0x35, 0x55, 0xb1, 0xf1, 0x01, 0x40, 0x3c, 0xe6, 0xe4, 0xe2, + 0xdc, 0x4a, 0x2e, 0x4e, 0x46, 0x5b, 0x9c, 0xac, 0xb1, 0x4d, 0x6c, 0x44, 0x2e, 0x74, 0xe4, 0xa9, + 0xfe, 0x26, 0x28, 0x8b, 0x94, 0x85, 0xe1, 0xad, 0x93, 0x11, 0x0f, 0x55, 0x3a, 0xec, 0xa2, 0x2c, + 0xe9, 0x46, 0x05, 0x2a, 0x3b, 0x3d, 0x6e, 0x25, 0xe6, 0x46, 0x92, 0x24, 0x67, 0xb9, 0x91, 0x44, + 0x35, 0xa3, 0x72, 0x63, 0x1d, 0x5a, 0xdb, 0x5c, 0xb4, 0xd6, 0x1e, 0x8d, 0x66, 0x86, 0x63, 0xdc, + 0x81, 0xdb, 0x29, 0x65, 0xd2, 0x08, 0xf1, 0x31, 0xac, 0xb4, 0x29, 0xf3, 0xf5, 0xab, 0x4a, 0x71, + 0x31, 0x5a, 0xb0, 0x3a, 0xdb, 0xa4, 0xec, 0x6c, 0x07, 0x16, 0xb7, 0xf9, 0xc9, 0xf4, 0x6c, 0x8f, + 0x5f, 0xc4, 0x1d, 0x31, 0xc8, 0x07, 0xe7, 0xde, 0xa5, 0x5c, 0x1f, 0xfc, 0x1b, 0x03, 0xc9, 0x04, + 0x8e, 0x15, 0x4c, 0xf8, 0x40, 0x59, 0x44, 0x11, 0xd2, 0x9b, 0xf0, 0x81, 0xf1, 0x3e, 0x30, 0xbd, + 0x1d, 0xb9, 0x5e, 0x42, 0x4b, 0x98, 0x9e, 0x58, 0xc1, 0x75, 0x10, 0xf2, 0xb1, 0x7a, 0xd9, 0x06, + 0x82, 0xe9, 0x49, 0x8f, 0x20, 0xc6, 0x3b, 0x50, 0x3d, 0xb2, 0xaf, 0x4d, 0xfe, 0xb9, 0x4c, 0xde, + 0x58, 0x83, 0xe2, 0xc4, 0xbe, 0x16, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x87, 0x79, 0x58, + 0x20, 0x4c, 0x76, 0x9f, 0x1e, 0x9f, 0x74, 0x5c, 0x3c, 0x86, 0x8a, 0x51, 0x6a, 0xa0, 0x39, 0x5e, + 0x9a, 0x9d, 0xe7, 0xa5, 0xd2, 0x80, 0xa6, 0x1e, 0xdd, 0x50, 0x66, 0x6c, 0x77, 0x3a, 0x56, 0x2f, + 0x6d, 0x24, 0xd3, 0x3f, 0xf3, 0xf1, 0xe3, 0xa2, 0x94, 0x1b, 0x97, 0x74, 0x34, 0xc6, 0xba, 0x08, + 0x8d, 0x4e, 0x5d, 0x11, 0x92, 0x5d, 0xea, 0xa0, 0x54, 0x85, 0xa7, 0xa8, 0xd2, 0x82, 0x92, 0x0a, + 0xcf, 0x9c, 0x62, 0x53, 0x7a, 0xb9, 0x62, 0x43, 0x96, 0xb5, 0x17, 0x28, 0x36, 0xf0, 0x0a, 0x8a, + 0xcd, 0x2b, 0x38, 0xf9, 0x6e, 0x43, 0x09, 0xef, 0x7d, 0x8d, 0x7b, 0x8a, 0xfb, 0x5e, 0x70, 0xcf, + 0xef, 0x68, 0xa2, 0x3f, 0x45, 0x18, 0xdc, 0x89, 0x8f, 0x89, 0xc9, 0x3f, 0xff, 0xe5, 0x38, 0x4f, + 0x3e, 0x83, 0xa2, 0x84, 0x0a, 0x82, 0x76, 0xed, 0xb1, 0x7a, 0xb7, 0x08, 0xff, 0x16, 0xcb, 0x86, + 0x8f, 0xad, 0x7c, 0x3e, 0x75, 0x7c, 0x3e, 0x54, 0x2f, 0x5b, 0x38, 0x78, 0x46, 0x05, 0x44, 0x4c, + 0x50, 0xa8, 0x21, 0xae, 0x77, 0xe9, 0xca, 0xbc, 0xf6, 0xa2, 0x13, 0x3c, 0x13, 0x9f, 0x06, 0x83, + 0x26, 0xbe, 0x5c, 0x36, 0xf1, 0x7c, 0x75, 0x39, 0x19, 0x3f, 0xcd, 0x40, 0x53, 0x9e, 0xae, 0xa8, + 0x4c, 0xd7, 0x02, 0x0a, 0x37, 0x39, 0xc4, 0x5f, 0xfc, 0x4e, 0x85, 0x01, 0x35, 0x34, 0x7e, 0x44, + 0x37, 0x15, 0x19, 0x6f, 0x2a, 0x02, 0xb8, 0x23, 0x6f, 0xab, 0xd7, 0xa1, 0xa2, 0xa2, 0x5c, 0xc7, + 0xce, 0x48, 0xbd, 0x23, 0x4c, 0x61, 0xae, 0xfb, 0xce, 0x48, 0x5d, 0x74, 0xbe, 0x2d, 0xd3, 0xd4, + 0x32, 0x78, 0xd1, 0x99, 0x76, 0xc8, 0x8d, 0x7f, 0x9f, 0x81, 0x45, 0x6d, 0x2a, 0xf2, 0xdc, 0x7e, + 0x08, 0xd5, 0xe8, 0xc9, 0x40, 0x1e, 0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22, + 0x48, 0x20, 0x06, 0x33, 0xb4, 0xaf, 0x71, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xbd, + 0xc3, 0x79, 0x6f, 0x3a, 0x16, 0xaa, 0xeb, 0x25, 0xe7, 0xcf, 0x23, 0x04, 0x92, 0xb9, 0x40, 0xc0, + 0x24, 0x86, 0x01, 0xb5, 0xb1, 0xe7, 0x86, 0xe7, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6, + 0x9f, 0x65, 0x61, 0x89, 0x4c, 0x6c, 0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48, + 0xcc, 0x6b, 0xf7, 0x96, 0x29, 0xbf, 0xd9, 0xb7, 0x5f, 0xd1, 0x2c, 0xa8, 0x32, 0xe1, 0x6e, 0x58, + 0xfe, 0xdc, 0xfc, 0xf2, 0xdf, 0xbc, 0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x55, 0xfc, + 0x5c, 0x73, 0xe9, 0x62, 0x45, 0x89, 0xa3, 0xa5, 0x8b, 0xbd, 0x0f, 0x6b, 0x09, 0x1c, 0xe4, 0xd6, + 0xce, 0xa9, 0xc3, 0xd5, 0xb3, 0x01, 0xcb, 0x1a, 0x76, 0x4f, 0x95, 0x6d, 0x16, 0xa1, 0x10, 0x0c, + 0xbc, 0x09, 0x37, 0x56, 0x61, 0x39, 0xb9, 0xaa, 0xf2, 0x9a, 0xf8, 0xfd, 0x0c, 0xb4, 0x64, 0x7c, + 0x84, 0xe3, 0x9e, 0xed, 0x3a, 0x41, 0xe8, 0xf9, 0xd1, 0xd3, 0x7a, 0x77, 0x01, 0x82, 0xd0, 0xf6, + 0xa5, 0xb6, 0x29, 0x13, 0xe5, 0x11, 0x82, 0x9a, 0xe4, 0x6d, 0x28, 0x71, 0x77, 0x48, 0x85, 0x44, + 0x0d, 0x45, 0xee, 0x0e, 0x95, 0x1e, 0x3a, 0x27, 0x7f, 0xd7, 0x92, 0xea, 0x85, 0xcc, 0x5b, 0x15, + 0xab, 0xc3, 0x2f, 0xf0, 0xe2, 0xcd, 0x47, 0x79, 0xab, 0xfb, 0xf6, 0x15, 0x46, 0x1b, 0x06, 0xc6, + 0x3f, 0xcc, 0x42, 0x23, 0x1e, 0x1f, 0x25, 0xbd, 0xbf, 0x38, 0x7d, 0xff, 0xbe, 0x24, 0x07, 0x47, + 0xc8, 0xef, 0x9a, 0xe1, 0xb1, 0x44, 0x87, 0xb3, 0xeb, 0x32, 0x03, 0x2a, 0x0a, 0xc3, 0x9b, 0x86, + 0xda, 0x0b, 0x57, 0x65, 0x42, 0x39, 0x9c, 0x86, 0x42, 0xe1, 0x12, 0x9a, 0xa7, 0xe3, 0x4a, 0x95, + 0xa7, 0x60, 0x8f, 0xc3, 0x2e, 0x3e, 0x9c, 0x2d, 0xc0, 0xa2, 0x1a, 0x6d, 0xa4, 0xc0, 0x12, 0xf8, + 0x4d, 0x92, 0xb3, 0x69, 0xe7, 0x50, 0xc6, 0xd6, 0x85, 0x50, 0x7a, 0x43, 0x34, 0x12, 0x42, 0x5f, + 0x87, 0x0a, 0x35, 0x1e, 0x67, 0x07, 0xe6, 0xcd, 0x32, 0xf6, 0x80, 0xe5, 0xd2, 0x08, 0xe4, 0x4d, + 0x13, 0xaa, 0x2f, 0x50, 0x57, 0x18, 0x7e, 0xf0, 0x77, 0x33, 0x70, 0x3b, 0x65, 0xdb, 0xe4, 0x29, + 0xdf, 0x82, 0xc5, 0xd3, 0xa8, 0x50, 0xad, 0x2e, 0x1d, 0xf5, 0x55, 0xc5, 0x56, 0x93, 0x6b, 0x6a, + 0x36, 0x4f, 0x93, 0x80, 0x58, 0xe9, 0xa2, 0x1d, 0x4c, 0x24, 0x80, 0xa2, 0xd2, 0x45, 0xdb, 0x48, + 0xfa, 0xce, 0x11, 0xac, 0x77, 0xae, 0x04, 0xc7, 0xd8, 0xd2, 0x5f, 0x7e, 0x57, 0x64, 0x94, 0x34, + 0x30, 0x67, 0x5e, 0xc9, 0xc0, 0x3c, 0xa4, 0x3c, 0xb7, 0xa8, 0xad, 0x9f, 0xa7, 0x11, 0xbc, 0x40, + 0x45, 0x1d, 0x7a, 0xb9, 0x5e, 0x25, 0xa1, 0x0e, 0xa2, 0x17, 0xeb, 0x8d, 0x00, 0x1a, 0xfb, 0xd3, + 0x51, 0xe8, 0xc4, 0x8f, 0xd8, 0xb3, 0x6f, 0xcb, 0x3a, 0xd8, 0x8f, 0x5a, 0xb5, 0xd4, 0x8e, 0x20, + 0xea, 0x08, 0x17, 0x6b, 0x2c, 0x1a, 0xb2, 0xe6, 0xfb, 0x6b, 0x8c, 0x93, 0x3d, 0x18, 0xb7, 0x61, + 0x2d, 0xfe, 0xa2, 0x65, 0x53, 0x57, 0xcd, 0x3f, 0xcb, 0x50, 0x68, 0x73, 0xf2, 0x41, 0x7d, 0xd6, + 0x81, 0xa5, 0xc0, 0x71, 0xcf, 0x46, 0x5c, 0x6f, 0x3e, 0x90, 0x8b, 0xb0, 0x92, 0x1c, 0x9b, 0x7c, + 0x74, 0xdf, 0x5c, 0xa4, 0x1a, 0x71, 0x6b, 0x01, 0xdb, 0xbc, 0x69, 0x90, 0x31, 0x59, 0xcc, 0xac, + 0xc6, 0xfc, 0xe0, 0xbb, 0x50, 0x4f, 0x76, 0xc4, 0xbe, 0x23, 0x73, 0x3c, 0xe3, 0x51, 0xe5, 0x66, + 0xd2, 0xf5, 0x62, 0x82, 0xa8, 0xc4, 0x6b, 0x1f, 0x18, 0x7f, 0x3f, 0x03, 0x2d, 0x93, 0x0b, 0xca, + 0xd5, 0x46, 0xa9, 0x68, 0xe6, 0xc3, 0xb9, 0x56, 0x6f, 0x9e, 0xab, 0x4a, 0x1d, 0x55, 0x23, 0xfa, + 0xc6, 0x8d, 0x9b, 0xb1, 0x7b, 0x6b, 0x6e, 0x46, 0x9b, 0x25, 0x58, 0x20, 0x14, 0x63, 0x0d, 0x56, + 0xe4, 0x78, 0xd4, 0x58, 0x62, 0xef, 0x61, 0xa2, 0xc7, 0x84, 0xf7, 0x70, 0x1d, 0x5a, 0xf4, 0x42, + 0xa2, 0x3e, 0x09, 0x59, 0x71, 0x1b, 0xd8, 0xbe, 0x3d, 0xb0, 0x7d, 0xcf, 0x73, 0x8f, 0xb8, 0x2f, + 0x03, 0x45, 0x51, 0xc2, 0x44, 0xe7, 0x9a, 0x12, 0x85, 0xe9, 0x4b, 0xbd, 0xeb, 0xe7, 0xb9, 0x2a, + 0x2e, 0x86, 0xbe, 0x0c, 0x13, 0x96, 0x36, 0xed, 0xe7, 0x5c, 0xb5, 0xa4, 0x96, 0xe8, 0x23, 0xa8, + 0x4c, 0xa2, 0x46, 0xd5, 0xba, 0xab, 0x44, 0xf0, 0xf9, 0x6e, 0x4d, 0x1d, 0xdb, 0x78, 0x02, 0xcb, + 0xc9, 0x36, 0x25, 0xeb, 0x58, 0x87, 0xd2, 0x58, 0xc2, 0xe4, 0xe8, 0xa2, 0x6f, 0xe3, 0x77, 0x4b, + 0x50, 0x94, 0xfa, 0x1c, 0xdb, 0x80, 0xfc, 0x40, 0xc5, 0x26, 0xc5, 0xef, 0x8b, 0xc8, 0x52, 0xf5, + 0xff, 0x16, 0x46, 0x28, 0x09, 0x3c, 0xf6, 0x11, 0xd4, 0x93, 0x5e, 0xd1, 0x99, 0x2c, 0xd3, 0xa4, + 0x3b, 0xb3, 0x36, 0x98, 0xf1, 0x7f, 0x95, 0xe3, 0xcb, 0x91, 0x64, 0x86, 0xd2, 0xb9, 0x76, 0x7b, + 0x7a, 0xae, 0x90, 0xb7, 0x83, 0x73, 0xdb, 0x7a, 0xf2, 0xfe, 0x07, 0x32, 0xcd, 0xb4, 0x82, 0xc0, + 0xde, 0xb9, 0xfd, 0xe4, 0xfd, 0x0f, 0x66, 0x25, 0x69, 0xca, 0x34, 0xd4, 0x25, 0xe9, 0x65, 0x28, + 0xd0, 0x03, 0x76, 0x14, 0x64, 0x42, 0x1f, 0xec, 0x31, 0x2c, 0x4b, 0xb5, 0xd5, 0x92, 0xe1, 0xc0, + 0xc4, 0x05, 0x4b, 0x94, 0xda, 0x24, 0xcb, 0x7a, 0x58, 0x44, 0xb6, 0xa1, 0x55, 0x58, 0x38, 0x8f, + 0x5f, 0x23, 0xac, 0x99, 0xf2, 0xcb, 0xf8, 0xb3, 0x02, 0x54, 0xb4, 0x45, 0x61, 0x55, 0x28, 0x99, + 0x9d, 0x5e, 0xc7, 0xfc, 0xa4, 0xb3, 0xdd, 0xbc, 0xc5, 0x1e, 0xc0, 0x5b, 0xdd, 0x83, 0xad, 0x43, + 0xd3, 0xec, 0x6c, 0xf5, 0xad, 0x43, 0xd3, 0x52, 0xaf, 0xdc, 0x1c, 0xb5, 0x3f, 0xdb, 0xef, 0x1c, + 0xf4, 0xad, 0xed, 0x4e, 0xbf, 0xdd, 0xdd, 0xeb, 0x35, 0x33, 0xec, 0x35, 0x68, 0xc5, 0x98, 0xaa, + 0xb8, 0xbd, 0x7f, 0x78, 0x7c, 0xd0, 0x6f, 0x66, 0xd9, 0x3d, 0xb8, 0xb3, 0xd3, 0x3d, 0x68, 0xef, + 0x59, 0x31, 0xce, 0xd6, 0x5e, 0xff, 0x13, 0xab, 0xf3, 0xeb, 0x47, 0x5d, 0xf3, 0xb3, 0x66, 0x2e, + 0x0d, 0x41, 0x28, 0xe3, 0xaa, 0x85, 0x3c, 0xbb, 0x0d, 0x2b, 0x84, 0x40, 0x55, 0xac, 0xfe, 0xe1, + 0xa1, 0xd5, 0x3b, 0x3c, 0x3c, 0x68, 0x16, 0xd8, 0x22, 0xd4, 0xba, 0x07, 0x9f, 0xb4, 0xf7, 0xba, + 0xdb, 0x96, 0xd9, 0x69, 0xef, 0xed, 0x37, 0x17, 0xd8, 0x12, 0x34, 0x66, 0xf1, 0x8a, 0xa2, 0x09, + 0x85, 0x77, 0x78, 0xd0, 0x3d, 0x3c, 0xb0, 0x3e, 0xe9, 0x98, 0xbd, 0xee, 0xe1, 0x41, 0xb3, 0xc4, + 0x56, 0x81, 0x25, 0x8b, 0x76, 0xf7, 0xdb, 0x5b, 0xcd, 0x32, 0x5b, 0x81, 0xc5, 0x24, 0xfc, 0x59, + 0xe7, 0xb3, 0x26, 0xb0, 0x16, 0x2c, 0xd3, 0xc0, 0xac, 0xcd, 0xce, 0xde, 0xe1, 0xa7, 0xd6, 0x7e, + 0xf7, 0xa0, 0xbb, 0x7f, 0xbc, 0xdf, 0xac, 0xe0, 0xbb, 0x5b, 0x9d, 0x8e, 0xd5, 0x3d, 0xe8, 0x1d, + 0xef, 0xec, 0x74, 0xb7, 0xba, 0x9d, 0x83, 0x7e, 0xb3, 0x4a, 0x3d, 0xa7, 0x4d, 0xbc, 0x26, 0x2a, + 0xc8, 0x9c, 0x01, 0x6b, 0xbb, 0xdb, 0x6b, 0x6f, 0xee, 0x75, 0xb6, 0x9b, 0x75, 0x76, 0x17, 0x6e, + 0xf7, 0x3b, 0xfb, 0x47, 0x87, 0x66, 0xdb, 0xfc, 0x4c, 0xe5, 0x14, 0x58, 0x3b, 0xed, 0xee, 0xde, + 0xb1, 0xd9, 0x69, 0x36, 0xd8, 0x1b, 0x70, 0xd7, 0xec, 0x7c, 0x7c, 0xdc, 0x35, 0x3b, 0xdb, 0xd6, + 0xc1, 0xe1, 0x76, 0xc7, 0xda, 0xe9, 0xb4, 0xfb, 0xc7, 0x66, 0xc7, 0xda, 0xef, 0xf6, 0x7a, 0xdd, + 0x83, 0xa7, 0xcd, 0x26, 0x7b, 0x0b, 0xee, 0x47, 0x28, 0x51, 0x03, 0x33, 0x58, 0x8b, 0x62, 0x7e, + 0x6a, 0x4b, 0x0f, 0x3a, 0xbf, 0xde, 0xb7, 0x8e, 0x3a, 0x1d, 0xb3, 0xc9, 0xd8, 0x3a, 0xac, 0xc6, + 0xdd, 0x53, 0x07, 0xb2, 0xef, 0x25, 0x51, 0x76, 0xd4, 0x31, 0xf7, 0xdb, 0x07, 0x62, 0x83, 0x13, + 0x65, 0xcb, 0x62, 0xd8, 0x71, 0xd9, 0xec, 0xb0, 0x57, 0x18, 0x83, 0xba, 0xb6, 0x2b, 0x3b, 0x6d, + 0xb3, 0xb9, 0xca, 0x1a, 0x50, 0xd9, 0x3f, 0x3a, 0xb2, 0xfa, 0xdd, 0xfd, 0xce, 0xe1, 0x71, 0xbf, + 0xb9, 0xc6, 0x56, 0xa0, 0xd9, 0x3d, 0xe8, 0x77, 0x4c, 0xb1, 0xd7, 0xaa, 0xea, 0xff, 0x2a, 0xb2, + 0x65, 0x68, 0xa8, 0x91, 0x2a, 0xe8, 0xcf, 0x8a, 0x6c, 0x0d, 0xd8, 0xf1, 0x81, 0xd9, 0x69, 0x6f, + 0x8b, 0x85, 0x8b, 0x0a, 0xfe, 0x77, 0x51, 0x7a, 0x48, 0x7e, 0x9a, 0x8b, 0x2e, 0xeb, 0x38, 0xe4, + 0x20, 0xf9, 0x36, 0x6d, 0x55, 0x7b, 0x53, 0xf6, 0x65, 0xaf, 0xc6, 0x6b, 0xaa, 0x55, 0x6e, 0x4e, + 0xb5, 0x9a, 0xd3, 0xdd, 0x6b, 0xba, 0xec, 0xf7, 0x26, 0xd4, 0xc6, 0xf4, 0x4e, 0xad, 0x7c, 0x8f, + 0x12, 0x64, 0xfc, 0x0d, 0x01, 0xe9, 0x31, 0xca, 0xb9, 0x67, 0xd3, 0x0b, 0xf3, 0xcf, 0xa6, 0xa7, + 0xc9, 0xf7, 0x0b, 0x69, 0xf2, 0xfd, 0x43, 0x58, 0x24, 0xd6, 0xe4, 0xb8, 0xce, 0x58, 0x69, 0xcd, + 0x24, 0x05, 0x36, 0x90, 0x45, 0x11, 0x5c, 0xa9, 0x13, 0x4a, 0xe5, 0x90, 0x2c, 0xa4, 0x28, 0xb5, + 0x8d, 0x84, 0xa6, 0x41, 0x9c, 0x23, 0xd2, 0x34, 0xa2, 0x1e, 0xec, 0xab, 0xb8, 0x87, 0x8a, 0xd6, + 0x03, 0xc1, 0xb1, 0x87, 0x87, 0xb0, 0xc8, 0xaf, 0x42, 0xdf, 0xb6, 0xbc, 0x89, 0xfd, 0xf9, 0x14, + 0x5d, 0xb8, 0x36, 0xea, 0xf0, 0x55, 0xb3, 0x81, 0x05, 0x87, 0x08, 0xdf, 0xb6, 0x43, 0xfb, 0xe1, + 0x17, 0x50, 0xd1, 0xde, 0x30, 0x66, 0x6b, 0xb0, 0xf4, 0x69, 0xb7, 0x7f, 0xd0, 0xe9, 0xf5, 0xac, + 0xa3, 0xe3, 0xcd, 0x67, 0x9d, 0xcf, 0xac, 0xdd, 0x76, 0x6f, 0xb7, 0x79, 0x4b, 0x1c, 0xda, 0x83, + 0x4e, 0xaf, 0xdf, 0xd9, 0x4e, 0xc0, 0x33, 0xec, 0x75, 0x58, 0x3f, 0x3e, 0x38, 0xee, 0x75, 0xb6, + 0xad, 0xb4, 0x7a, 0x59, 0x41, 0xa5, 0xb2, 0x3c, 0xa5, 0x7a, 0xee, 0xe1, 0xf7, 0xa1, 0x9e, 0x7c, + 0x58, 0x93, 0x01, 0x2c, 0xec, 0x75, 0x9e, 0xb6, 0xb7, 0x3e, 0xa3, 0x97, 0xf9, 0x7a, 0xfd, 0x76, + 0xbf, 0xbb, 0x65, 0xc9, 0x97, 0xf8, 0x04, 0x47, 0xc8, 0xb0, 0x0a, 0x14, 0xdb, 0x07, 0x5b, 0xbb, + 0x87, 0x66, 0xaf, 0x99, 0x7d, 0xf8, 0x11, 0x34, 0x67, 0xfd, 0x51, 0x09, 0x07, 0xde, 0x8b, 0x3c, + 0x7d, 0x0f, 0xff, 0x55, 0x0e, 0x20, 0x4e, 0x18, 0x10, 0xac, 0x66, 0xbb, 0xdd, 0x6f, 0xef, 0x1d, + 0x8a, 0x69, 0x98, 0x87, 0x7d, 0xc1, 0x41, 0xcc, 0xce, 0xc7, 0xcd, 0x5b, 0xa9, 0x25, 0x87, 0x47, + 0xfd, 0x66, 0x46, 0xac, 0x58, 0xf7, 0xa0, 0xdb, 0xef, 0xb6, 0xf7, 0x2c, 0xf3, 0xf0, 0xb8, 0x7b, + 0xf0, 0x94, 0x9e, 0x1c, 0x43, 0x2e, 0x7b, 0x7c, 0xb4, 0x63, 0x1e, 0x1e, 0xf4, 0xad, 0xde, 0xee, + 0x71, 0x7f, 0x1b, 0x1f, 0x2c, 0xdb, 0x32, 0xbb, 0x47, 0xd4, 0x66, 0xfe, 0x45, 0x08, 0xa2, 0xe9, + 0x82, 0x58, 0xf3, 0xa7, 0x87, 0xbd, 0x5e, 0xf7, 0xc8, 0xfa, 0xf8, 0xb8, 0x63, 0x76, 0x3b, 0x3d, + 0xac, 0xb8, 0x90, 0x02, 0x17, 0xf8, 0x45, 0xc1, 0x9b, 0xfb, 0x7b, 0x9f, 0x48, 0xe6, 0x29, 0x50, + 0x4b, 0x49, 0x90, 0xc0, 0x2a, 0x0b, 0x9e, 0x22, 0xb8, 0x4f, 0x4a, 0xcb, 0x70, 0x43, 0x99, 0xa8, + 0x57, 0x11, 0x7c, 0x75, 0x6e, 0x33, 0xb0, 0x5a, 0x35, 0xbd, 0x48, 0xd4, 0x42, 0x96, 0x1b, 0x5d, + 0x50, 0xdb, 0xdb, 0x26, 0x56, 0xa8, 0xcf, 0x41, 0x05, 0x6e, 0x43, 0x6c, 0x94, 0x60, 0x4f, 0x02, + 0xa5, 0xa9, 0x3e, 0x44, 0xc9, 0xe2, 0x93, 0xdf, 0xc9, 0x41, 0x9d, 0x92, 0xb7, 0xe8, 0x27, 0xa4, + 0xb8, 0xcf, 0xf6, 0xa1, 0x28, 0x7f, 0x8b, 0x8c, 0xad, 0x44, 0xaf, 0x41, 0xe9, 0xbf, 0x7e, 0xb6, + 0xbe, 0x3a, 0x0b, 0x96, 0xe2, 0xd8, 0xd2, 0xdf, 0xf8, 0xd3, 0xff, 0xf9, 0x0f, 0xb2, 0x35, 0x56, + 0x79, 0x74, 0xf1, 0xde, 0xa3, 0x33, 0xee, 0x06, 0xa2, 0x8d, 0xff, 0x1f, 0x20, 0xfe, 0x85, 0x2d, + 0xd6, 0x8a, 0x9c, 0x50, 0x33, 0x3f, 0x3f, 0xb6, 0x7e, 0x3b, 0xa5, 0x44, 0xb6, 0x7b, 0x1b, 0xdb, + 0x5d, 0x32, 0xea, 0xa2, 0x5d, 0xc7, 0x75, 0x42, 0xfa, 0xb5, 0xad, 0x0f, 0x33, 0x0f, 0xd9, 0x10, + 0xaa, 0xfa, 0x6f, 0x5f, 0x31, 0x25, 0x29, 0xa5, 0xfc, 0x7a, 0xd7, 0xfa, 0x9d, 0xd4, 0x32, 0x25, + 0x83, 0x62, 0x1f, 0x2b, 0x46, 0x53, 0xf4, 0x31, 0x45, 0x8c, 0xb8, 0x97, 0x11, 0x49, 0xe5, 0xf1, + 0x4f, 0x5c, 0xb1, 0xd7, 0x34, 0xb9, 0x6a, 0xee, 0x07, 0xb6, 0xd6, 0xef, 0xde, 0x50, 0x2a, 0xfb, + 0xba, 0x8b, 0x7d, 0xad, 0x19, 0x4c, 0xf4, 0x35, 0x40, 0x1c, 0xf5, 0x03, 0x5b, 0x1f, 0x66, 0x1e, + 0x3e, 0xf9, 0xcb, 0x07, 0x50, 0x8e, 0x82, 0x39, 0xd9, 0x6f, 0x41, 0x2d, 0x91, 0x5d, 0xc7, 0xd4, + 0x34, 0xd2, 0x92, 0xf1, 0xd6, 0x5f, 0x4b, 0x2f, 0x94, 0x1d, 0xbf, 0x8e, 0x1d, 0xb7, 0xd8, 0xaa, + 0xe8, 0x58, 0x66, 0xaf, 0x3d, 0xc2, 0x6c, 0x58, 0x7a, 0x5b, 0xeb, 0xb9, 0xa6, 0x7d, 0x50, 0x67, + 0xaf, 0xcd, 0x6a, 0x04, 0x89, 0xde, 0xee, 0xde, 0x50, 0x2a, 0xbb, 0x7b, 0x0d, 0xbb, 0x5b, 0x65, + 0xcb, 0x7a, 0x77, 0x2a, 0xf4, 0x92, 0x71, 0x7c, 0xcf, 0x4e, 0xff, 0x05, 0x28, 0x76, 0x37, 0x7e, + 0x7d, 0x2c, 0xe5, 0x97, 0xa1, 0x22, 0x12, 0x99, 0xff, 0x79, 0x28, 0xa3, 0x85, 0x5d, 0x31, 0x86, + 0xdb, 0xa7, 0xff, 0x00, 0x14, 0x3b, 0x81, 0x8a, 0xf6, 0xa3, 0x09, 0xec, 0xf6, 0x8d, 0x3f, 0xf0, + 0xb0, 0xbe, 0x9e, 0x56, 0x94, 0x36, 0x15, 0xbd, 0xfd, 0x47, 0xa7, 0x9c, 0xb3, 0xdf, 0x80, 0x72, + 0xf4, 0x14, 0x3f, 0x5b, 0xd3, 0x7e, 0x1a, 0x41, 0xff, 0xe9, 0x80, 0xf5, 0xd6, 0x7c, 0x41, 0x1a, + 0xf1, 0xe9, 0xad, 0x0b, 0xe2, 0xfb, 0x14, 0x2a, 0xda, 0x73, 0xfb, 0xd1, 0x04, 0xe6, 0x9f, 0xf4, + 0x8f, 0x26, 0x90, 0xf2, 0x3a, 0xbf, 0xb1, 0x88, 0x5d, 0x54, 0x58, 0x19, 0xe9, 0x3b, 0xbc, 0xf2, + 0x02, 0xb6, 0x07, 0x2b, 0x52, 0xd3, 0x3a, 0xe1, 0x5f, 0x66, 0x1b, 0x52, 0x7e, 0x74, 0xeb, 0x71, + 0x86, 0x7d, 0x04, 0x25, 0xf5, 0xab, 0x0a, 0x6c, 0x35, 0xfd, 0xd7, 0x21, 0xd6, 0xd7, 0xe6, 0xe0, + 0x52, 0x2d, 0xfa, 0x0c, 0x20, 0x7e, 0xdb, 0x3f, 0x62, 0x12, 0x73, 0xbf, 0x15, 0x10, 0x51, 0xc0, + 0xfc, 0x0f, 0x01, 0x18, 0xab, 0x38, 0xc1, 0x26, 0x43, 0x26, 0xe1, 0xf2, 0x4b, 0xf5, 0xe8, 0xe8, + 0x8f, 0xa0, 0xa2, 0x3d, 0xef, 0x1f, 0x2d, 0xdf, 0xfc, 0x4f, 0x03, 0x44, 0xcb, 0x97, 0xf2, 0x6b, + 0x00, 0xc6, 0x3a, 0xb6, 0xbe, 0x6c, 0x34, 0x44, 0xeb, 0x42, 0xd4, 0x92, 0x22, 0x8f, 0xd8, 0xa0, + 0x73, 0xa8, 0x25, 0xde, 0xf0, 0x8f, 0x4e, 0x68, 0xda, 0x2f, 0x04, 0x44, 0x27, 0x34, 0xf5, 0xd9, + 0x7f, 0x45, 0x67, 0xc6, 0xa2, 0xe8, 0xe7, 0x02, 0x51, 0xb4, 0x9e, 0x7e, 0x08, 0x15, 0xed, 0x3d, + 0xfe, 0x68, 0x2e, 0xf3, 0x4f, 0xff, 0x47, 0x73, 0x49, 0x7b, 0xbe, 0x7f, 0x19, 0xfb, 0xa8, 0x1b, + 0x48, 0x0a, 0xf8, 0x6c, 0xa2, 0x68, 0xfb, 0xb7, 0xa0, 0x9e, 0x7c, 0xa2, 0x3f, 0x3a, 0xfb, 0xa9, + 0x6f, 0xfd, 0x47, 0x67, 0xff, 0x86, 0x77, 0xfd, 0x25, 0x49, 0x3f, 0x5c, 0x8a, 0x3a, 0x79, 0xf4, + 0x13, 0x99, 0x96, 0xf2, 0x05, 0xfb, 0x58, 0x30, 0x38, 0xf9, 0x6a, 0x27, 0x5b, 0xd3, 0xa8, 0x56, + 0x7f, 0xfe, 0x33, 0x3a, 0x2f, 0x73, 0x0f, 0x7c, 0x26, 0x89, 0x19, 0x1b, 0x67, 0x4f, 0x61, 0x29, + 0x22, 0xe6, 0xe8, 0x19, 0xce, 0x20, 0x9a, 0x43, 0xea, 0x63, 0x9f, 0xeb, 0xcd, 0xd9, 0xd2, 0xc7, + 0x19, 0xba, 0xfe, 0xf0, 0xf1, 0x43, 0xed, 0xfa, 0xd3, 0x5f, 0xe2, 0xd4, 0xae, 0xbf, 0xc4, 0x1b, + 0x89, 0xb3, 0xd7, 0x5f, 0xe8, 0x88, 0x36, 0x5c, 0x68, 0xcc, 0x3e, 0x8a, 0x79, 0xf7, 0xa6, 0xb4, + 0x7f, 0x6a, 0xfe, 0xf5, 0x17, 0xbf, 0x0a, 0x90, 0x64, 0x45, 0x8a, 0x9b, 0x3e, 0x92, 0xc1, 0x27, + 0xec, 0x37, 0xa1, 0xaa, 0xbf, 0x0f, 0xce, 0x74, 0x9e, 0x30, 0xdb, 0xd3, 0x9d, 0xd4, 0xb2, 0x24, + 0x95, 0xb0, 0xaa, 0xde, 0x0d, 0xfb, 0x04, 0x56, 0xa3, 0x65, 0xd6, 0xf3, 0xd6, 0x03, 0x76, 0x2f, + 0x25, 0x9b, 0x3d, 0xb1, 0xd8, 0xb7, 0x6f, 0x4c, 0x77, 0x7f, 0x9c, 0x11, 0xd4, 0x97, 0x7c, 0xa8, + 0x38, 0xbe, 0x79, 0xd2, 0xde, 0x67, 0x8e, 0x6f, 0x9e, 0xd4, 0xd7, 0x8d, 0x15, 0xf5, 0xb1, 0xa5, + 0xc4, 0x1a, 0x51, 0x58, 0x2e, 0xfb, 0x21, 0x34, 0xb4, 0xa4, 0xfc, 0xde, 0xb5, 0x3b, 0x88, 0x4e, + 0xd2, 0xfc, 0x4b, 0x7b, 0xeb, 0x69, 0xb6, 0x49, 0x63, 0x0d, 0xdb, 0x5f, 0x34, 0x12, 0x8b, 0x23, + 0x4e, 0xd1, 0x16, 0x54, 0xf4, 0x84, 0xff, 0x17, 0xb4, 0xbb, 0xa6, 0x15, 0xe9, 0x8f, 0xba, 0x3d, + 0xce, 0xb0, 0x3d, 0x68, 0xce, 0xbe, 0x41, 0x15, 0xf1, 0x94, 0xb4, 0x77, 0xb3, 0xd6, 0x67, 0x0a, + 0x13, 0x2f, 0x57, 0xb1, 0x23, 0x4a, 0xec, 0x88, 0x7e, 0xa1, 0xca, 0xf3, 0x67, 0x6f, 0xf5, 0xe4, + 0x2f, 0x57, 0x45, 0xad, 0xa5, 0xfd, 0x66, 0xd9, 0x83, 0xcc, 0xe3, 0x0c, 0xfb, 0xbd, 0x0c, 0x54, + 0x13, 0xef, 0xbe, 0x24, 0x42, 0xe7, 0x67, 0xe6, 0xd9, 0xd2, 0xcb, 0xf4, 0x89, 0x1a, 0x26, 0x2e, + 0xe2, 0xde, 0xc3, 0x1f, 0x24, 0x36, 0xe9, 0x27, 0x09, 0xd7, 0xde, 0xc6, 0xec, 0x4f, 0x58, 0x7d, + 0x31, 0x8b, 0xa0, 0x3f, 0xa0, 0xf8, 0xc5, 0xe3, 0x0c, 0xfb, 0x37, 0x19, 0xa8, 0x27, 0x7d, 0xf6, + 0xd1, 0x74, 0x53, 0xa3, 0x03, 0x22, 0x52, 0xba, 0xc1, 0xd1, 0xff, 0x43, 0x1c, 0x65, 0xff, 0xa1, + 0x99, 0x18, 0xa5, 0x7c, 0x62, 0xfb, 0x17, 0x1b, 0x2d, 0xfb, 0x90, 0x7e, 0x31, 0x52, 0x85, 0x32, + 0xb1, 0xf9, 0x5f, 0x18, 0x8c, 0xc8, 0x4f, 0xff, 0x3d, 0x3e, 0xdc, 0x84, 0x1f, 0xd1, 0x4f, 0x35, + 0xa9, 0xc8, 0x18, 0x41, 0xc5, 0xaf, 0x5a, 0xdf, 0x78, 0x0b, 0xe7, 0xf4, 0xba, 0x71, 0x3b, 0x31, + 0xa7, 0x59, 0xc1, 0xa3, 0x4d, 0xa3, 0x93, 0x3f, 0xa7, 0x17, 0xdf, 0x9c, 0x73, 0x3f, 0xb1, 0x77, + 0xf3, 0x20, 0xc7, 0x34, 0x48, 0x89, 0x9e, 0x38, 0x6a, 0xaf, 0xd8, 0x8c, 0xf1, 0x10, 0xc7, 0xfa, + 0x96, 0x71, 0xef, 0xc6, 0xb1, 0x3e, 0x42, 0xff, 0xbb, 0x18, 0xf1, 0x11, 0x40, 0x1c, 0x6a, 0xc8, + 0x66, 0x02, 0xde, 0x22, 0x06, 0x34, 0x1f, 0x8d, 0x98, 0x3c, 0xcf, 0x2a, 0x2e, 0x4e, 0xb4, 0xf8, + 0x1b, 0xc4, 0x4e, 0xa3, 0x50, 0x3c, 0x5d, 0xfa, 0x4a, 0x46, 0x05, 0x26, 0xa4, 0xaf, 0xd9, 0xf6, + 0x13, 0xcc, 0x34, 0x8a, 0xbb, 0x3b, 0x86, 0xda, 0x9e, 0xe7, 0x3d, 0x9f, 0x4e, 0xa2, 0xf0, 0xf6, + 0x64, 0x50, 0xcc, 0xae, 0x1d, 0x9c, 0xaf, 0xcf, 0xcc, 0xc2, 0xb8, 0x8f, 0x4d, 0xad, 0xb3, 0x96, + 0xd6, 0xd4, 0xa3, 0x9f, 0xc4, 0xf1, 0x8d, 0x5f, 0x30, 0x1b, 0x16, 0x23, 0x1e, 0x1d, 0xc7, 0x10, + 0x26, 0x9b, 0x49, 0x70, 0xe6, 0xd9, 0x2e, 0x12, 0x6a, 0x82, 0x1a, 0xed, 0xa3, 0x40, 0xb5, 0xf9, + 0x38, 0xc3, 0x8e, 0xa0, 0xba, 0xcd, 0x07, 0x98, 0xa8, 0x8f, 0xa1, 0x25, 0x4b, 0x89, 0x30, 0x05, + 0x8a, 0x49, 0x59, 0xaf, 0x25, 0x80, 0xc9, 0x7b, 0x6b, 0x62, 0x5f, 0xfb, 0xfc, 0xf3, 0x47, 0x3f, + 0x91, 0x41, 0x2b, 0x5f, 0xa8, 0x7b, 0x4b, 0x05, 0xf5, 0x24, 0xee, 0xad, 0x99, 0x28, 0xa0, 0xc4, + 0xbd, 0x35, 0x17, 0x05, 0x94, 0x58, 0x6a, 0x15, 0x54, 0xc4, 0x46, 0xb0, 0x38, 0x17, 0x38, 0x14, + 0x5d, 0x59, 0x37, 0x85, 0x1b, 0xad, 0xdf, 0xbf, 0x19, 0x21, 0xd9, 0xdb, 0xc3, 0x64, 0x6f, 0x3d, + 0xa8, 0xd1, 0x9b, 0x8e, 0x27, 0x9c, 0x52, 0xf6, 0x66, 0xde, 0xbb, 0xd1, 0xf3, 0x01, 0x67, 0x2f, + 0x18, 0x2c, 0x4b, 0x4a, 0x38, 0x98, 0x2b, 0xc7, 0x7e, 0x03, 0x2a, 0x4f, 0x79, 0xa8, 0x72, 0xf4, + 0x22, 0x19, 0x7b, 0x26, 0x69, 0x6f, 0x3d, 0x25, 0xc5, 0x2f, 0x49, 0x33, 0xd8, 0xda, 0x23, 0x3e, + 0x3c, 0xe3, 0xc4, 0x9c, 0x2c, 0x67, 0xf8, 0x05, 0xfb, 0x75, 0x6c, 0x3c, 0x4a, 0x8d, 0x5e, 0xd5, + 0x92, 0xb0, 0xf4, 0xc6, 0x1b, 0x33, 0xf0, 0xb4, 0x96, 0x5d, 0x6f, 0xc8, 0x35, 0x59, 0xcf, 0x85, + 0x8a, 0xf6, 0x84, 0x42, 0x74, 0x80, 0xe6, 0x9f, 0xcc, 0x88, 0x0e, 0x50, 0xca, 0x8b, 0x0b, 0xc6, + 0x03, 0xec, 0xc7, 0x60, 0xf7, 0xe3, 0x7e, 0xe8, 0x95, 0x85, 0xb8, 0xa7, 0x47, 0x3f, 0xb1, 0xc7, + 0xe1, 0x17, 0xec, 0x53, 0x7c, 0x39, 0x5d, 0xcf, 0x41, 0x8c, 0x95, 0x86, 0xd9, 0x74, 0xc5, 0x68, + 0xb1, 0xb4, 0xa2, 0xa4, 0x22, 0x41, 0x5d, 0xa1, 0x24, 0xf7, 0x3e, 0x40, 0x2f, 0xf4, 0x26, 0xdb, + 0x36, 0x1f, 0x7b, 0x6e, 0xcc, 0x6b, 0xe3, 0xac, 0xb8, 0x98, 0x7f, 0x69, 0xa9, 0x71, 0xec, 0x53, + 0x4d, 0xcb, 0x4a, 0xa4, 0x71, 0x2a, 0xe2, 0xba, 0x31, 0x71, 0x2e, 0x5a, 0x90, 0x94, 0xe4, 0xb9, + 0xc7, 0x19, 0xd6, 0x06, 0x88, 0x23, 0xc7, 0x22, 0x9d, 0x69, 0x2e, 0x28, 0x2d, 0x62, 0x7b, 0x29, + 0x61, 0x66, 0x47, 0x50, 0x8e, 0x43, 0x6e, 0xd6, 0xe2, 0x17, 0x61, 0x12, 0x01, 0x3a, 0xd1, 0x0d, + 0x3e, 0x17, 0xee, 0x62, 0x34, 0x71, 0xa9, 0x80, 0x95, 0xc4, 0x52, 0x9d, 0x72, 0x1e, 0x30, 0x07, + 0x96, 0x68, 0x80, 0x91, 0xb8, 0x84, 0xd9, 0x5c, 0xd1, 0x03, 0xf9, 0xf3, 0x91, 0x27, 0xd1, 0x69, + 0x4e, 0x8d, 0x9f, 0x48, 0x98, 0x7e, 0x04, 0xb5, 0x52, 0x26, 0x99, 0x60, 0xcd, 0x63, 0x58, 0x9c, + 0x73, 0xd1, 0x47, 0x47, 0xfa, 0xa6, 0x98, 0x8b, 0xe8, 0x48, 0xdf, 0xe8, 0xdd, 0x37, 0x56, 0xb0, + 0xcb, 0x86, 0x01, 0xa8, 0xea, 0x5d, 0x3a, 0xe1, 0xe0, 0x5c, 0x74, 0xf7, 0x2f, 0x33, 0xb0, 0x94, + 0xe2, 0x84, 0x67, 0x6f, 0x28, 0xab, 0xc1, 0x8d, 0x0e, 0xfa, 0xf5, 0x54, 0x67, 0xad, 0xd1, 0xc3, + 0x7e, 0xf6, 0xd9, 0xb3, 0xc4, 0xc5, 0x46, 0xbe, 0x52, 0x79, 0x32, 0x5f, 0x28, 0x54, 0xa4, 0x4a, + 0x14, 0x9f, 0xc3, 0x1a, 0x0d, 0xa4, 0x3d, 0x1a, 0xcd, 0x38, 0x92, 0x5f, 0x9f, 0xfb, 0x45, 0xf9, + 0x84, 0x73, 0x7c, 0xfd, 0xe6, 0x5f, 0x9c, 0xbf, 0x41, 0x9c, 0xa6, 0xa1, 0xb2, 0x29, 0x34, 0x67, + 0x1d, 0xb4, 0xec, 0xe6, 0xb6, 0xd6, 0xef, 0x25, 0xf4, 0xdf, 0x14, 0xa7, 0xee, 0xd7, 0xb0, 0xb3, + 0x7b, 0xc6, 0x7a, 0xda, 0xba, 0x90, 0x4a, 0x2c, 0xf6, 0xe3, 0xaf, 0x47, 0xde, 0xe4, 0x99, 0x79, + 0xaa, 0x0e, 0x6e, 0xf2, 0x7d, 0x47, 0x1a, 0x78, 0xba, 0x33, 0xfa, 0x6d, 0xec, 0xfe, 0xbe, 0x71, + 0x27, 0xad, 0x7b, 0x9f, 0xaa, 0x90, 0x2e, 0xbe, 0x36, 0x7b, 0xae, 0xd5, 0x08, 0xee, 0xa7, 0xed, + 0xf7, 0x8d, 0xba, 0xd0, 0xcc, 0x5a, 0xdf, 0x42, 0xd9, 0xae, 0xaa, 0x7b, 0x8f, 0xa3, 0xe3, 0x93, + 0xe2, 0xa6, 0x8e, 0x8e, 0x4f, 0x9a, 0xbb, 0x39, 0x29, 0xd7, 0x28, 0x47, 0xf3, 0x87, 0x99, 0x87, + 0x9b, 0xef, 0xfc, 0xf0, 0x6b, 0x67, 0x4e, 0x78, 0x3e, 0x3d, 0xd9, 0x18, 0x78, 0xe3, 0x47, 0x23, + 0x65, 0x6d, 0x94, 0x29, 0xcf, 0x8f, 0x46, 0xee, 0xf0, 0x11, 0x36, 0x7b, 0xb2, 0x30, 0xf1, 0xbd, + 0xd0, 0xfb, 0xd6, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x70, 0x9a, 0xaf, 0x28, 0x34, 0x83, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index dc32ab42..fe5fb29f 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -1982,6 +1982,23 @@ message PendingChannelsResponse { /// The balance in satoshis encumbered in this channel int64 limbo_balance = 2; + + /** + A list of valid commitment transactions. Any of these can confirm at + this point. + */ + Commitments commitments = 3; + } + + message Commitments { + /// Hash of the local version of the commitment tx. + string local_txid = 1; + + /// Hash of the remote version of the commitment tx. + string remote_txid = 2; + + /// Hash of the remote pending version of the commitment tx. + string remote_pending_txid = 3; } message ClosedChannel { diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index b8a9f6e8..64b693ab 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -1603,6 +1603,23 @@ } } }, + "PendingChannelsResponseCommitments": { + "type": "object", + "properties": { + "local_txid": { + "type": "string", + "description": "/ Hash of the local version of the commitment tx." + }, + "remote_txid": { + "type": "string", + "description": "/ Hash of the remote version of the commitment tx." + }, + "remote_pending_txid": { + "type": "string", + "description": "/ Hash of the remote pending version of the commitment tx." + } + } + }, "PendingChannelsResponseForceClosedChannel": { "type": "object", "properties": { @@ -1718,6 +1735,10 @@ "type": "string", "format": "int64", "title": "/ The balance in satoshis encumbered in this channel" + }, + "commitments": { + "$ref": "#/definitions/PendingChannelsResponseCommitments", + "description": "*\nA list of valid commitment transactions. Any of these can confirm at\nthis point." } } }, diff --git a/rpcserver.go b/rpcserver.go index 2a123e7f..9613da4f 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2756,6 +2756,43 @@ func (r *rpcServer) PendingChannels(ctx context.Context, for _, waitingClose := range waitingCloseChans { pub := waitingClose.IdentityPub.SerializeCompressed() chanPoint := waitingClose.FundingOutpoint + + var commitments lnrpc.PendingChannelsResponse_Commitments + + // Report local commit. May not be present when DLP is active. + if waitingClose.LocalCommitment.CommitTx != nil { + commitments.LocalTxid = + waitingClose.LocalCommitment.CommitTx.TxHash(). + String() + } + + // Report remote commit. May not be present when DLP is active. + if waitingClose.RemoteCommitment.CommitTx != nil { + commitments.RemoteTxid = + waitingClose.RemoteCommitment.CommitTx.TxHash(). + String() + } + + // Report the remote pending commit if any. + remoteCommitDiff, err := waitingClose.RemoteCommitChainTip() + + switch { + + // Don't set hash if there is no pending remote commit. + case err == channeldb.ErrNoPendingCommit: + + // An unexpected error occurred. + case err != nil: + return nil, err + + // There is a pending remote commit. Set its hash in the + // response. + default: + hash := remoteCommitDiff.Commitment.CommitTx.TxHash() + commitments.RemotePendingTxid = hash.String() + + } + channel := &lnrpc.PendingChannelsResponse_PendingChannel{ RemoteNodePub: hex.EncodeToString(pub), ChannelPoint: chanPoint.String(), @@ -2766,14 +2803,16 @@ func (r *rpcServer) PendingChannels(ctx context.Context, RemoteChanReserveSat: int64(waitingClose.RemoteChanCfg.ChanReserve), } + waitingCloseResp := &lnrpc.PendingChannelsResponse_WaitingCloseChannel{ + Channel: channel, + LimboBalance: channel.LocalBalance, + Commitments: &commitments, + } + // A close tx has been broadcasted, all our balance will be in // limbo until it confirms. resp.WaitingCloseChannels = append( - resp.WaitingCloseChannels, - &lnrpc.PendingChannelsResponse_WaitingCloseChannel{ - Channel: channel, - LimboBalance: channel.LocalBalance, - }, + resp.WaitingCloseChannels, waitingCloseResp, ) resp.TotalLimboBalance += channel.LocalBalance From fa115b543df59329d2bf8ce32f2eceaca7e2607e Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 11 Mar 2020 17:43:16 +0100 Subject: [PATCH 17/17] lncli: add bumpchannelclose command This command allows users to easily bump the fee on their unconfirmed closing transactions. --- cmd/lncli/walletrpc_active.go | 132 ++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/cmd/lncli/walletrpc_active.go b/cmd/lncli/walletrpc_active.go index 31b14b76..c1849e1b 100644 --- a/cmd/lncli/walletrpc_active.go +++ b/cmd/lncli/walletrpc_active.go @@ -4,8 +4,12 @@ package main import ( "context" + "errors" + "fmt" "sort" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/walletrpc" "github.com/urfave/cli" ) @@ -22,6 +26,7 @@ func walletCommands() []cli.Command { Subcommands: []cli.Command{ pendingSweepsCommand, bumpFeeCommand, + bumpCloseFeeCommand, }, }, } @@ -168,3 +173,130 @@ func bumpFee(ctx *cli.Context) error { return nil } + +var bumpCloseFeeCommand = cli.Command{ + Name: "bumpclosefee", + Usage: "Bumps the fee of a channel closing transaction.", + ArgsUsage: "channel_point", + Description: ` + This command allows the fee of a channel closing transaction to be + increased by using the child-pays-for-parent mechanism. It will instruct + the sweeper to sweep the anchor outputs of transactions in the set + of valid commitments for the specified channel at the requested fee + rate or confirmation target. + `, + Flags: []cli.Flag{ + cli.Uint64Flag{ + Name: "conf_target", + Usage: "the number of blocks that the output should " + + "be swept on-chain within", + }, + cli.Uint64Flag{ + Name: "sat_per_byte", + Usage: "a manual fee expressed in sat/byte that " + + "should be used when sweeping the output", + }, + }, + Action: actionDecorator(bumpCloseFee), +} + +func bumpCloseFee(ctx *cli.Context) error { + // Display the command's help message if we do not have the expected + // number of arguments/flags. + if ctx.NArg() != 1 { + return cli.ShowCommandHelp(ctx, "bumpclosefee") + } + + // Validate the channel point. + channelPoint := ctx.Args().Get(0) + _, err := NewProtoOutPoint(channelPoint) + if err != nil { + return err + } + + // Fetch all waiting close channels. + client, cleanUp := getClient(ctx) + defer cleanUp() + + // Fetch waiting close channel commitments. + commitments, err := getWaitingCloseCommitments(client, channelPoint) + if err != nil { + return err + } + + // Retrieve pending sweeps. + walletClient, cleanUp := getWalletClient(ctx) + defer cleanUp() + + ctxb := context.Background() + sweeps, err := walletClient.PendingSweeps( + ctxb, &walletrpc.PendingSweepsRequest{}, + ) + if err != nil { + return err + } + + // Match pending sweeps with commitments of the channel for which a bump + // is requested and bump their fees. + commitSet := map[string]struct{}{ + commitments.LocalTxid: {}, + commitments.RemoteTxid: {}, + } + if commitments.RemotePendingTxid != "" { + commitSet[commitments.RemotePendingTxid] = struct{}{} + } + + for _, sweep := range sweeps.PendingSweeps { + // Only bump anchor sweeps. + if sweep.WitnessType != walletrpc.WitnessType_COMMITMENT_ANCHOR { + continue + } + + // Skip unrelated sweeps. + sweepTxID, err := chainhash.NewHash(sweep.Outpoint.TxidBytes) + if err != nil { + return err + } + if _, match := commitSet[sweepTxID.String()]; !match { + continue + } + + // Bump fee of the anchor sweep. + fmt.Printf("Bumping fee of %v:%v\n", + sweepTxID, sweep.Outpoint.OutputIndex) + + _, err = walletClient.BumpFee(ctxb, &walletrpc.BumpFeeRequest{ + Outpoint: sweep.Outpoint, + TargetConf: uint32(ctx.Uint64("conf_target")), + SatPerByte: uint32(ctx.Uint64("sat_per_byte")), + Force: true, + }) + if err != nil { + return err + } + } + + return nil +} + +func getWaitingCloseCommitments(client lnrpc.LightningClient, + channelPoint string) (*lnrpc.PendingChannelsResponse_Commitments, + error) { + + ctxb := context.Background() + + req := &lnrpc.PendingChannelsRequest{} + resp, err := client.PendingChannels(ctxb, req) + if err != nil { + return nil, err + } + + // Lookup the channel commit tx hashes. + for _, channel := range resp.WaitingCloseChannels { + if channel.Channel.ChannelPoint == channelPoint { + return channel.Commitments, nil + } + } + + return nil, errors.New("channel not found") +}